Title: [260023] trunk/Source/WebCore
Revision
260023
Author
[email protected]
Date
2020-04-13 10:41:43 -0700 (Mon, 13 Apr 2020)

Log Message

KeyedDecoder functions in ResourceLoadStatistics.{cpp,h} should return bool and use WARN_UNUSED_RETURN
<https://webkit.org/b/210414>
<rdar://problem/61693118>

Reviewed by Alex Christensen.

* loader/ResourceLoadStatistics.cpp:
(WebCore::decodeHashCountedSet):
(WebCore::decodeHashSet):
(WebCore::decodeOptionSet):
(WebCore::decodeFontHashSet):
(WebCore::decodeCanvasActivityRecord):
(WebCore::ResourceLoadStatistics::decode):
* loader/ResourceLoadStatistics.h:
- Change decode functions to return `bool`.
- Add WARN_UNUSED_RETURN to all decode functions.
- Check the return value of all decode functions.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (260022 => 260023)


--- trunk/Source/WebCore/ChangeLog	2020-04-13 17:15:33 UTC (rev 260022)
+++ trunk/Source/WebCore/ChangeLog	2020-04-13 17:41:43 UTC (rev 260023)
@@ -1,3 +1,23 @@
+2020-04-13  David Kilzer  <[email protected]>
+
+        KeyedDecoder functions in ResourceLoadStatistics.{cpp,h} should return bool and use WARN_UNUSED_RETURN
+        <https://webkit.org/b/210414>
+        <rdar://problem/61693118>
+
+        Reviewed by Alex Christensen.
+
+        * loader/ResourceLoadStatistics.cpp:
+        (WebCore::decodeHashCountedSet):
+        (WebCore::decodeHashSet):
+        (WebCore::decodeOptionSet):
+        (WebCore::decodeFontHashSet):
+        (WebCore::decodeCanvasActivityRecord):
+        (WebCore::ResourceLoadStatistics::decode):
+        * loader/ResourceLoadStatistics.h:
+        - Change decode functions to return `bool`.
+        - Add WARN_UNUSED_RETURN to all decode functions.
+        - Check the return value of all decode functions.
+
 2020-04-13  Said Abou-Hallawa  <[email protected]>
 
         When drawing an image srcRect and imageRect have to be in the orientation of destRect

Modified: trunk/Source/WebCore/loader/ResourceLoadStatistics.cpp (260022 => 260023)


--- trunk/Source/WebCore/loader/ResourceLoadStatistics.cpp	2020-04-13 17:15:33 UTC (rev 260022)
+++ trunk/Source/WebCore/loader/ResourceLoadStatistics.cpp	2020-04-13 17:41:43 UTC (rev 260023)
@@ -123,10 +123,10 @@
 #endif
 }
 
-static void decodeHashCountedSet(KeyedDecoder& decoder, const String& label, HashCountedSet<RegistrableDomain>& hashCountedSet)
+static WARN_UNUSED_RETURN bool decodeHashCountedSet(KeyedDecoder& decoder, const String& label, HashCountedSet<RegistrableDomain>& hashCountedSet)
 {
     Vector<String> ignore;
-    decoder.decodeObjects(label, ignore, [&hashCountedSet](KeyedDecoder& decoderInner, String& domain) {
+    return decoder.decodeObjects(label, ignore, [&hashCountedSet](KeyedDecoder& decoderInner, String& domain) {
         if (!decoderInner.decodeString("origin", domain))
             return false;
         
@@ -139,10 +139,10 @@
     });
 }
 
-static void decodeHashSet(KeyedDecoder& decoder, const String& label, const String& key, HashSet<RegistrableDomain>& hashSet)
+static WARN_UNUSED_RETURN bool decodeHashSet(KeyedDecoder& decoder, const String& label, const String& key, HashSet<RegistrableDomain>& hashSet)
 {
     Vector<String> ignore;
-    decoder.decodeObjects(label, ignore, [&hashSet, &key](KeyedDecoder& decoderInner, String& domain) {
+    return decoder.decodeObjects(label, ignore, [&hashSet, &key](KeyedDecoder& decoderInner, String& domain) {
         if (!decoderInner.decodeString(key, domain))
             return false;
         
@@ -152,22 +152,24 @@
 }
 
 template<typename T>
-static void decodeOptionSet(KeyedDecoder& decoder, const String& label, OptionSet<T>& optionSet)
+static WARN_UNUSED_RETURN bool decodeOptionSet(KeyedDecoder& decoder, const String& label, OptionSet<T>& optionSet)
 {
     uint64_t optionSetBitMask = 0;
-    decoder.decodeUInt64(label, optionSetBitMask);
+    if (!decoder.decodeUInt64(label, optionSetBitMask))
+        return false;
     optionSet = OptionSet<T>::fromRaw(optionSetBitMask);
+    return true;
 }
 
 #if ENABLE(WEB_API_STATISTICS)
-static void decodeFontHashSet(KeyedDecoder& decoder, const String& label, HashSet<String>& hashSet)
+static WARN_UNUSED_RETURN bool decodeFontHashSet(KeyedDecoder& decoder, const String& label, HashSet<String>& hashSet)
 {
-    decodeHashSet(decoder, label, "font", hashSet);
+    return decodeHashSet(decoder, label, "font", hashSet);
 }
     
-static void decodeCanvasActivityRecord(KeyedDecoder& decoder, const String& label, CanvasActivityRecord& canvasActivityRecord)
+static WARN_UNUSED_RETURN bool decodeCanvasActivityRecord(KeyedDecoder& decoder, const String& label, CanvasActivityRecord& canvasActivityRecord)
 {
-    decoder.decodeObject(label, canvasActivityRecord, [] (KeyedDecoder& decoderInner, CanvasActivityRecord& canvasActivityRecord) {
+    return decoder.decodeObject(label, canvasActivityRecord, [] (KeyedDecoder& decoderInner, CanvasActivityRecord& canvasActivityRecord) {
         if (!decoderInner.decodeBool("wasDataRead", canvasActivityRecord.wasDataRead))
             return false;
         Vector<String> ignore;
@@ -199,29 +201,37 @@
         return false;
 
     // Storage access
-    if (modelVersion >= 15)
-        decodeHashSet(decoder, "storageAccessUnderTopFrameDomains", "domain", storageAccessUnderTopFrameDomains);
-    else
-        decodeHashSet(decoder, "storageAccessUnderTopFrameOrigins", "origin", storageAccessUnderTopFrameDomains);
+    if (modelVersion >= 15) {
+        if (!decodeHashSet(decoder, "storageAccessUnderTopFrameDomains", "domain", storageAccessUnderTopFrameDomains))
+            return false;
+    } else {
+        if (!decodeHashSet(decoder, "storageAccessUnderTopFrameOrigins", "origin", storageAccessUnderTopFrameDomains))
+            return false;
+    }
 
     // Top frame stats
     if (modelVersion >= 15) {
-        decodeHashSet(decoder, "topFrameUniqueRedirectsTo", "domain", topFrameUniqueRedirectsTo);
-        decodeHashSet(decoder, "topFrameUniqueRedirectsFrom", "domain", topFrameUniqueRedirectsFrom);
+        if (!decodeHashSet(decoder, "topFrameUniqueRedirectsTo", "domain", topFrameUniqueRedirectsTo))
+            return false;
+        if (!decodeHashSet(decoder, "topFrameUniqueRedirectsFrom", "domain", topFrameUniqueRedirectsFrom))
+            return false;
     } else if (modelVersion >= 11) {
         HashCountedSet<RegistrableDomain> topFrameUniqueRedirectsToCounted;
-        decodeHashCountedSet(decoder, "topFrameUniqueRedirectsTo", topFrameUniqueRedirectsToCounted);
+        if (!decodeHashCountedSet(decoder, "topFrameUniqueRedirectsTo", topFrameUniqueRedirectsToCounted))
+            return false;
         for (auto& domain : topFrameUniqueRedirectsToCounted.values())
             topFrameUniqueRedirectsTo.add(domain);
         
         HashCountedSet<RegistrableDomain> topFrameUniqueRedirectsFromCounted;
-        decodeHashCountedSet(decoder, "topFrameUniqueRedirectsFrom", topFrameUniqueRedirectsFromCounted);
+        if (!decodeHashCountedSet(decoder, "topFrameUniqueRedirectsFrom", topFrameUniqueRedirectsFromCounted))
+            return false;
         for (auto& domain : topFrameUniqueRedirectsFromCounted.values())
             topFrameUniqueRedirectsFrom.add(domain);
     }
 
     if (modelVersion >= 16) {
-        decodeHashSet(decoder, "topFrameLinkDecorationsFrom", "domain", topFrameLinkDecorationsFrom);
+        if (!decodeHashSet(decoder, "topFrameLinkDecorationsFrom", "domain", topFrameLinkDecorationsFrom))
+            return false;
         if (!decoder.decodeBool("gotLinkDecorationFromPrevalentResource", gotLinkDecorationFromPrevalentResource))
             return false;
     }
@@ -228,17 +238,20 @@
 
     if (modelVersion >= 17) {
         HashCountedSet<RegistrableDomain> topFrameLoadedThirdPartyScriptsCounted;
-        decodeHashCountedSet(decoder, "topFrameLoadedThirdPartyScripts", topFrameLoadedThirdPartyScriptsCounted);
+        if (!decodeHashCountedSet(decoder, "topFrameLoadedThirdPartyScripts", topFrameLoadedThirdPartyScriptsCounted))
+            return false;
         for (auto& domain : topFrameLoadedThirdPartyScriptsCounted.values())
             topFrameLoadedThirdPartyScripts.add(domain);
     }
 
     // Subframe stats
-    if (modelVersion >= 15)
-        decodeHashSet(decoder, "subframeUnderTopFrameDomains", "domain", subframeUnderTopFrameDomains);
-    else if (modelVersion >= 14) {
+    if (modelVersion >= 15) {
+        if (!decodeHashSet(decoder, "subframeUnderTopFrameDomains", "domain", subframeUnderTopFrameDomains))
+            return false;
+    } else if (modelVersion >= 14) {
         HashCountedSet<RegistrableDomain> subframeUnderTopFrameDomainsCounted;
-        decodeHashCountedSet(decoder, "subframeUnderTopFrameOrigins", subframeUnderTopFrameDomainsCounted);
+        if (!decodeHashCountedSet(decoder, "subframeUnderTopFrameOrigins", subframeUnderTopFrameDomainsCounted))
+            return false;
         for (auto& domain : subframeUnderTopFrameDomainsCounted.values())
             subframeUnderTopFrameDomains.add(domain);
     }
@@ -245,22 +258,28 @@
 
     // Subresource stats
     if (modelVersion >= 15) {
-        decodeHashSet(decoder, "subresourceUnderTopFrameDomains", "domain", subresourceUnderTopFrameDomains);
-        decodeHashSet(decoder, "subresourceUniqueRedirectsTo", "domain", subresourceUniqueRedirectsTo);
-        decodeHashSet(decoder, "subresourceUniqueRedirectsFrom", "domain", subresourceUniqueRedirectsFrom);
+        if (!decodeHashSet(decoder, "subresourceUnderTopFrameDomains", "domain", subresourceUnderTopFrameDomains))
+            return false;
+        if (!decodeHashSet(decoder, "subresourceUniqueRedirectsTo", "domain", subresourceUniqueRedirectsTo))
+            return false;
+        if (!decodeHashSet(decoder, "subresourceUniqueRedirectsFrom", "domain", subresourceUniqueRedirectsFrom))
+            return false;
     } else {
         HashCountedSet<RegistrableDomain> subresourceUnderTopFrameDomainsCounted;
-        decodeHashCountedSet(decoder, "subresourceUnderTopFrameOrigins", subresourceUnderTopFrameDomainsCounted);
+        if (!decodeHashCountedSet(decoder, "subresourceUnderTopFrameOrigins", subresourceUnderTopFrameDomainsCounted))
+            return false;
         for (auto& domain : subresourceUnderTopFrameDomainsCounted.values())
             subresourceUnderTopFrameDomains.add(domain);
 
         HashCountedSet<RegistrableDomain> subresourceUniqueRedirectsToCounted;
-        decodeHashCountedSet(decoder, "subresourceUniqueRedirectsTo", subresourceUniqueRedirectsToCounted);
+        if (!decodeHashCountedSet(decoder, "subresourceUniqueRedirectsTo", subresourceUniqueRedirectsToCounted))
+            return false;
         for (auto& domain : subresourceUniqueRedirectsToCounted.values())
             subresourceUniqueRedirectsTo.add(domain);
         if (modelVersion >= 11) {
             HashCountedSet<RegistrableDomain> subresourceUniqueRedirectsFromCounted;
-            decodeHashCountedSet(decoder, "subresourceUniqueRedirectsFrom", subresourceUniqueRedirectsFromCounted);
+            if (!decodeHashCountedSet(decoder, "subresourceUniqueRedirectsFrom", subresourceUniqueRedirectsFromCounted))
+                return false;
             for (auto& domain : subresourceUniqueRedirectsFromCounted.values())
                 subresourceUniqueRedirectsFrom.add(domain);
         }
@@ -299,20 +318,26 @@
     lastSeen = WallTime::fromRawSeconds(lastSeenTimeAsDouble);
 
     if (modelVersion >= 11) {
-        if (!decoder.decodeUInt32("timesAccessedAsFirstPartyDueToUserInteraction", timesAccessedAsFirstPartyDueToUserInteraction))
+        if (!decoder.decodeUInt32("timesAccessedAsFirstPartyDueToUserInteraction", timesAccessedAsFirstPartyDueToUserInteraction)) {
             timesAccessedAsFirstPartyDueToUserInteraction = 0;
-        if (!decoder.decodeUInt32("timesAccessedAsFirstPartyDueToStorageAccessAPI", timesAccessedAsFirstPartyDueToStorageAccessAPI))
+            return false;
+        }
+        if (!decoder.decodeUInt32("timesAccessedAsFirstPartyDueToStorageAccessAPI", timesAccessedAsFirstPartyDueToStorageAccessAPI)) {
             timesAccessedAsFirstPartyDueToStorageAccessAPI = 0;
+            return false;
+        }
     }
 
 #if ENABLE(WEB_API_STATISTICS)
     if (modelVersion >= 13) {
-        decodeFontHashSet(decoder, "fontsFailedToLoad", fontsFailedToLoad);
-        decodeFontHashSet(decoder, "fontsSuccessfullyLoaded", fontsSuccessfullyLoaded);
-        decodeHashCountedSet(decoder, "topFrameRegistrableDomainsWhichAccessedWebAPIs", topFrameRegistrableDomainsWhichAccessedWebAPIs);
-        decodeCanvasActivityRecord(decoder, "canvasActivityRecord", canvasActivityRecord);
-        decodeOptionSet(decoder, "navigatorFunctionsAccessedBitMask", navigatorFunctionsAccessed);
-        decodeOptionSet(decoder, "screenFunctionsAccessedBitMask", screenFunctionsAccessed);
+        if (!(decodeFontHashSet(decoder, "fontsFailedToLoad", fontsFailedToLoad)
+            && decodeFontHashSet(decoder, "fontsSuccessfullyLoaded", fontsSuccessfullyLoaded)
+            && decodeHashCountedSet(decoder, "topFrameRegistrableDomainsWhichAccessedWebAPIs", topFrameRegistrableDomainsWhichAccessedWebAPIs)
+            && decodeCanvasActivityRecord(decoder, "canvasActivityRecord", canvasActivityRecord)
+            && decodeOptionSet(decoder, "navigatorFunctionsAccessedBitMask", navigatorFunctionsAccessed)
+            && decodeOptionSet(decoder, "screenFunctionsAccessedBitMask", screenFunctionsAccessed))) {
+            return false;
+        }
     }
 #endif
 

Modified: trunk/Source/WebCore/loader/ResourceLoadStatistics.h (260022 => 260023)


--- trunk/Source/WebCore/loader/ResourceLoadStatistics.h	2020-04-13 17:15:33 UTC (rev 260022)
+++ trunk/Source/WebCore/loader/ResourceLoadStatistics.h	2020-04-13 17:41:43 UTC (rev 260023)
@@ -58,7 +58,7 @@
     WEBCORE_EXPORT static WallTime reduceTimeResolution(WallTime);
 
     WEBCORE_EXPORT void encode(KeyedEncoder&) const;
-    WEBCORE_EXPORT bool decode(KeyedDecoder&, unsigned modelVersion);
+    WEBCORE_EXPORT WARN_UNUSED_RETURN bool decode(KeyedDecoder&, unsigned modelVersion);
 
     WEBCORE_EXPORT String toString() const;
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to