- 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)