Title: [240602] trunk/Source/WebKit
Revision
240602
Author
[email protected]
Date
2019-01-28 14:34:22 -0800 (Mon, 28 Jan 2019)

Log Message

REGRESSION (r240498): Storage Access API prompts result is not remembered
https://bugs.webkit.org/show_bug.cgi?id=193922
<rdar://problem/47608767>

Reviewed by Chris Dumez.

The refactoring in r240498 bypassed bookkeeping in ResourceLoadStatisticsMemoryStore
that kept track of whether a successful user prompt had been encountered. This
patch corrects this codepath so the user is not prompted repeatedly after approving
use of the Storage Access API.

* NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
(WebKit::WebResourceLoadStatisticsStore::grantStorageAccess): Switch from Move operator to
const reference to allow the method to be called by the NetworkProcess.
* NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
* NetworkProcess/NetworkProcess.cpp:
(WebKit::NetworkProcess::grantStorageAccess): Request access through the WebResourceLoadStatistics
object, rather than jumping directly to the NetworkStorageSession.

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (240601 => 240602)


--- trunk/Source/WebKit/ChangeLog	2019-01-28 22:12:32 UTC (rev 240601)
+++ trunk/Source/WebKit/ChangeLog	2019-01-28 22:34:22 UTC (rev 240602)
@@ -1,3 +1,24 @@
+2019-01-28  Brent Fulgham  <[email protected]>
+
+        REGRESSION (r240498): Storage Access API prompts result is not remembered
+        https://bugs.webkit.org/show_bug.cgi?id=193922
+        <rdar://problem/47608767>
+
+        Reviewed by Chris Dumez.
+
+        The refactoring in r240498 bypassed bookkeeping in ResourceLoadStatisticsMemoryStore
+        that kept track of whether a successful user prompt had been encountered. This
+        patch corrects this codepath so the user is not prompted repeatedly after approving
+        use of the Storage Access API.
+
+        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
+        (WebKit::WebResourceLoadStatisticsStore::grantStorageAccess): Switch from Move operator to
+        const reference to allow the method to be called by the NetworkProcess.
+        * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
+        * NetworkProcess/NetworkProcess.cpp:
+        (WebKit::NetworkProcess::grantStorageAccess): Request access through the WebResourceLoadStatistics
+        object, rather than jumping directly to the NetworkStorageSession.
+
 2019-01-28  Chris Dumez  <[email protected]>
 
         Regression(PSON) Crash under WebPageProxy::didStartProgress()

Modified: trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp (240601 => 240602)


--- trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp	2019-01-28 22:12:32 UTC (rev 240601)
+++ trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp	2019-01-28 22:34:22 UTC (rev 240602)
@@ -339,7 +339,7 @@
     });
 }
 
-void WebResourceLoadStatisticsStore::grantStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, uint64_t pageID, bool userWasPromptedNow, CompletionHandler<void(bool)>&& completionHandler)
+void WebResourceLoadStatisticsStore::grantStorageAccess(const String& subFrameHost, const String& topFrameHost, uint64_t frameID, uint64_t pageID, bool userWasPromptedNow, CompletionHandler<void(bool)>&& completionHandler)
 {
     ASSERT(RunLoop::isMain());
     postTask([this, subFrameHost = crossThreadCopy(subFrameHost), topFrameHost = crossThreadCopy(topFrameHost), frameID, pageID, userWasPromptedNow, completionHandler = WTFMove(completionHandler)]() mutable {

Modified: trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h (240601 => 240602)


--- trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h	2019-01-28 22:12:32 UTC (rev 240601)
+++ trunk/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h	2019-01-28 22:34:22 UTC (rev 240602)
@@ -76,7 +76,7 @@
     void setShouldSubmitTelemetry(bool);
 
     void requestStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, uint64_t pageID, bool promptEnabled, CompletionHandler<void(StorageAccessStatus)>&&);
-    void grantStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, uint64_t pageID, bool userWasPromptedNow, CompletionHandler<void(bool)>&&);
+    void grantStorageAccess(const String& subFrameHost, const String& topFrameHost, uint64_t frameID, uint64_t pageID, bool userWasPromptedNow, CompletionHandler<void(bool)>&&);
     void requestStorageAccessCallback(bool wasGranted, uint64_t contextId);
 
     void applicationWillTerminate();

Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (240601 => 240602)


--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2019-01-28 22:12:32 UTC (rev 240601)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp	2019-01-28 22:34:22 UTC (rev 240602)
@@ -980,15 +980,15 @@
 
 void NetworkProcess::grantStorageAccess(PAL::SessionID sessionID, const String& resourceDomain, const String& firstPartyDomain, Optional<uint64_t> frameID, uint64_t pageID, bool userWasPrompted, CompletionHandler<void(bool)>&& completionHandler)
 {
-    bool isStorageGranted = false;
-    if (auto* networkStorageSession = storageSession(sessionID)) {
-        networkStorageSession->grantStorageAccess(resourceDomain, firstPartyDomain, frameID, pageID);
-        ASSERT(networkStorageSession->hasStorageAccess(resourceDomain, firstPartyDomain, frameID, pageID));
-        isStorageGranted = true;
-    } else
+    if (auto* networkSession = this->networkSession(sessionID)) {
+        if (auto* resourceLoadStatistics = networkSession->resourceLoadStatistics())
+            resourceLoadStatistics->grantStorageAccess(resourceDomain, firstPartyDomain, frameID.value(), pageID, userWasPrompted, WTFMove(completionHandler));
+        else
+            completionHandler(false);
+    } else {
         ASSERT_NOT_REACHED();
-
-    completionHandler(isStorageGranted);
+        completionHandler(false);
+    }
 }
 
 void NetworkProcess::logFrameNavigation(PAL::SessionID sessionID, const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, const String& sourcePrimaryDomain, const String& targetHost, const String& mainFrameHost, bool isRedirect, bool isMainFrame)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to