WebKit Bugzilla
Attachment 360469 Details for
Bug 193924
: StorageAccess API calls should be direct to the Network Process
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-193924-20190129101602.patch (text/plain), 34.78 KB, created by
Brent Fulgham
on 2019-01-29 10:16:03 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Brent Fulgham
Created:
2019-01-29 10:16:03 PST
Size:
34.78 KB
patch
obsolete
>Subversion Revision: 240622 >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 47462b4fdcb5c0f2b24191169b5b438164977184..cbb993bd6d1d87f17fb5e617d836d4cf975ebd35 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,51 @@ >+2019-01-29 Brent Fulgham <bfulgham@apple.com> >+ >+ StorageAccess API calls should be direct to the Network Process >+ https://bugs.webkit.org/show_bug.cgi?id=193924 >+ <rdar://problem/47611249> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Now that the ResourceLoadStatistics data lives in the Network Process, calls to Storage Access >+ API should happen directly between the WebContent and Network processes. >+ >+ * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp: >+ (WebKit::WebResourceLoadStatisticsStore::requestStorageAccessGranted): >+ * NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h: >+ * NetworkProcess/NetworkConnectionToWebProcess.cpp: >+ (WebKit::NetworkConnectionToWebProcess::removeStorageAccessForFrame): >+ (WebKit::NetworkConnectionToWebProcess::removeStorageAccessForAllFramesOnPage): >+ (WebKit::NetworkConnectionToWebProcess::logUserInteraction): >+ (WebKit::NetworkConnectionToWebProcess::logWebSocketLoading): >+ (WebKit::NetworkConnectionToWebProcess::logSubresourceLoading): >+ (WebKit::NetworkConnectionToWebProcess::logSubresourceRedirect): >+ (WebKit::NetworkConnectionToWebProcess::requestResourceLoadStatisticsUpdate): >+ (WebKit::NetworkConnectionToWebProcess::hasStorageAccess): >+ (WebKit::NetworkConnectionToWebProcess::requestStorageAccess): >+ * NetworkProcess/NetworkConnectionToWebProcess.h: >+ * NetworkProcess/NetworkConnectionToWebProcess.messages.in: >+ * NetworkProcess/NetworkProcess.cpp: >+ (WebKit::NetworkProcess::requestStorageAccess): >+ (WebKit::NetworkProcess::requestStorageAccessGranted): >+ * NetworkProcess/NetworkProcess.h: >+ * UIProcess/Network/NetworkProcessProxy.cpp: >+ (WebKit::NetworkProcessProxy::requestStorageAccessConfirm): >+ * UIProcess/Network/NetworkProcessProxy.h: >+ * UIProcess/Network/NetworkProcessProxy.messages.in: >+ * UIProcess/WebPageProxy.cpp: >+ (WebKit::WebPageProxy::requestStorageAccessConfirm): >+ (WebKit::WebPageProxy::hasStorageAccess): Deleted. >+ (WebKit::WebPageProxy::requestStorageAccess): Deleted. >+ * UIProcess/WebPageProxy.h: >+ * UIProcess/WebPageProxy.messages.in: >+ * WebProcess/WebPage/WebPage.cpp: >+ (WebKit::WebPage::hasStorageAccess): >+ (WebKit::WebPage::requestStorageAccess): >+ (WebKit::nextRequestStorageAccessContextId): Deleted. >+ (WebKit::WebPage::storageAccessResponse): Deleted. >+ * WebProcess/WebPage/WebPage.h: >+ * WebProcess/WebPage/WebPage.messages.in: >+ > 2019-01-28 David Kilzer <ddkilzer@apple.com> > > Move soft-linking of ManagedConfiguration.framework out of ManagedConfigurationSPI.h >diff --git a/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp b/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp >index 5cdf830265271014a95c0454b87c4cf18558f527..6f9ef7db6eb3d76318b7c5a52c07e1a28ae482e5 100644 >--- a/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp >+++ b/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp >@@ -293,14 +293,34 @@ void WebResourceLoadStatisticsStore::callHasStorageAccessForFrameHandler(const S > callback(false); > } > >-void WebResourceLoadStatisticsStore::requestStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, uint64_t pageID, bool promptEnabled, CompletionHandler<void(StorageAccessStatus)>&& completionHandler) >+void WebResourceLoadStatisticsStore::requestStorageAccessGranted(const String& subFrameHost, const String& topFrameHost, uint64_t frameID, uint64_t pageID, bool promptEnabled, CompletionHandler<void(bool)>&& completionHandler) > { >- ASSERT(subFrameHost != topFrameHost); >- ASSERT(RunLoop::isMain()); >+ auto statusHandler = [this, protectedThis = makeRef(*this), subFrameHost = subFrameHost.isolatedCopy(), topFrameHost = topFrameHost.isolatedCopy(), promptEnabled, frameID, pageID, completionHandler = WTFMove(completionHandler)](StorageAccessStatus status) mutable { >+ switch (status) { >+ case StorageAccessStatus::CannotRequestAccess: >+ completionHandler(false); >+ return; >+ case StorageAccessStatus::RequiresUserPrompt: >+ { >+ ASSERT_UNUSED(promptEnabled, promptEnabled); >+ CompletionHandler<void(bool)> requestConfirmationCompletionHandler = [this, protectedThis = makeRef(*this), subFrameHost = WTFMove(subFrameHost), topFrameHost = WTFMove(topFrameHost), frameID, pageID, completionHandler = WTFMove(completionHandler)] (bool userDidGrantAccess) mutable { >+ if (userDidGrantAccess) >+ grantStorageAccess(WTFMove(subFrameHost), WTFMove(topFrameHost), frameID, pageID, userDidGrantAccess, WTFMove(completionHandler)); >+ else >+ completionHandler(false); >+ }; >+ m_networkSession->networkProcess().parentProcessConnection()->sendWithAsyncReply(Messages::NetworkProcessProxy::RequestStorageAccessConfirm(pageID, frameID, ResourceLoadStatistics::primaryDomain(subFrameHost), ResourceLoadStatistics::primaryDomain(topFrameHost)), WTFMove(requestConfirmationCompletionHandler)); >+ } >+ return; >+ case StorageAccessStatus::HasAccess: >+ completionHandler(true); >+ return; >+ } >+ }; > >- requestStorageAccess(subFrameHost, topFrameHost, frameID, pageID, promptEnabled, WTFMove(completionHandler)); >+ requestStorageAccess(subFrameHost, topFrameHost, frameID, pageID, promptEnabled, WTFMove(statusHandler)); > } >- >+ > void WebResourceLoadStatisticsStore::requestStorageAccess(const String& subFrameHost, const String& topFrameHost, Optional<uint64_t> frameID, uint64_t pageID, bool promptEnabled, CompletionHandler<void(StorageAccessStatus)>&& completionHandler) > { > auto subFramePrimaryDomain = isolatedPrimaryDomain(subFrameHost); >diff --git a/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h b/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h >index d28890ebe0b4e637f03130dafa0e70f423635c21..11c00ca85d169710b6990b419b4438a92ae891dc 100644 >--- a/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h >+++ b/Source/WebKit/NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h >@@ -75,9 +75,7 @@ public: > void setShouldClassifyResourcesBeforeDataRecordsRemoval(bool, CompletionHandler<void()>&&); > void setShouldSubmitTelemetry(bool); > >- void requestStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, uint64_t pageID, bool promptEnabled, CompletionHandler<void(StorageAccessStatus)>&&); > 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(); > >@@ -95,6 +93,7 @@ public: > void hasStorageAccess(const String& subFrameHost, const String& topFrameHost, Optional<uint64_t> frameID, uint64_t pageID, CompletionHandler<void(bool)>&& callback); > bool hasStorageAccessForFrame(const String& resourceDomain, const String& firstPartyDomain, uint64_t frameID, uint64_t pageID); > void requestStorageAccess(const String& resourceDomain, const String& firstPartyDomain, Optional<uint64_t> frameID, uint64_t pageID, bool promptEnabled, CompletionHandler<void(StorageAccessStatus)>&&); >+ void requestStorageAccessGranted(const String& subFrameHost, const String& topFrameHost, uint64_t frameID, uint64_t pageID, bool promptEnabled, CompletionHandler<void(bool)>&&); > void requestUpdate(); > void setLastSeen(const String& resourceDomain, Seconds, CompletionHandler<void()>&&); > void setPrevalentResource(const String& resourceDomain, CompletionHandler<void()>&&); >diff --git a/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp b/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp >index 7538e1d3251c73b58fbd9613840007acf4b9babf..2fd7afdd99ab79ada7fe7791d1b7f1fc7c0d0c35 100644 >--- a/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp >+++ b/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp >@@ -56,6 +56,7 @@ > #include "WebSWServerToContextConnectionMessages.h" > #include "WebsiteDataStoreParameters.h" > #include <WebCore/NetworkStorageSession.h> >+#include <WebCore/ResourceLoadStatistics.h> > #include <WebCore/ResourceRequest.h> > #include <WebCore/SameSiteInfo.h> > #include <WebCore/SecurityPolicy.h> >@@ -559,89 +560,53 @@ void NetworkConnectionToWebProcess::ensureLegacyPrivateBrowsingSession() > m_networkProcess->addWebsiteDataStore(WebsiteDataStoreParameters::legacyPrivateSessionParameters()); > } > >+#if ENABLE(RESOURCE_LOAD_STATISTICS) > void NetworkConnectionToWebProcess::removeStorageAccessForFrame(PAL::SessionID sessionID, uint64_t frameID, uint64_t pageID) > { >-#if ENABLE(RESOURCE_LOAD_STATISTICS) > if (auto* storageSession = networkProcess().storageSession(sessionID)) > storageSession->removeStorageAccessForFrame(frameID, pageID); >-#else >- UNUSED_PARAM(sessionID); >- UNUSED_PARAM(frameID); >- UNUSED_PARAM(pageID); >-#endif > } > > void NetworkConnectionToWebProcess::removeStorageAccessForAllFramesOnPage(PAL::SessionID sessionID, uint64_t pageID) > { >-#if ENABLE(RESOURCE_LOAD_STATISTICS) > if (auto* storageSession = networkProcess().storageSession(sessionID)) > storageSession->removeStorageAccessForAllFramesOnPage(pageID); >-#else >- UNUSED_PARAM(sessionID); >- UNUSED_PARAM(pageID); >-#endif > } > > void NetworkConnectionToWebProcess::logUserInteraction(PAL::SessionID sessionID, const String& topLevelOrigin) > { >-#if ENABLE(RESOURCE_LOAD_STATISTICS) > if (auto networkSession = networkProcess().networkSession(sessionID)) { > if (auto* resourceLoadStatistics = networkSession->resourceLoadStatistics()) > resourceLoadStatistics->logUserInteraction(topLevelOrigin, [] { }); > } >-#else >- UNUSED_PARAM(sessionID); >- UNUSED_PARAM(topLevelOrigin); >-#endif > } > > void NetworkConnectionToWebProcess::logWebSocketLoading(PAL::SessionID sessionID, const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen) > { >-#if ENABLE(RESOURCE_LOAD_STATISTICS) > if (auto networkSession = networkProcess().networkSession(sessionID)) { > if (auto* resourceLoadStatistics = networkSession->resourceLoadStatistics()) > resourceLoadStatistics->logWebSocketLoading(targetPrimaryDomain, mainFramePrimaryDomain, lastSeen, [] { }); > } >-#else >- UNUSED_PARAM(sessionID); >- UNUSED_PARAM(targetPrimaryDomain); >- UNUSED_PARAM(mainFramePrimaryDomain); >- UNUSED_PARAM(lastSeen); >-#endif > } > > void NetworkConnectionToWebProcess::logSubresourceLoading(PAL::SessionID sessionID, const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen) > { >-#if ENABLE(RESOURCE_LOAD_STATISTICS) > if (auto networkSession = networkProcess().networkSession(sessionID)) { > if (auto* resourceLoadStatistics = networkSession->resourceLoadStatistics()) > resourceLoadStatistics->logSubresourceLoading(targetPrimaryDomain, mainFramePrimaryDomain, lastSeen, [] { }); > } >-#else >- UNUSED_PARAM(sessionID); >- UNUSED_PARAM(targetPrimaryDomain); >- UNUSED_PARAM(mainFramePrimaryDomain); >- UNUSED_PARAM(lastSeen); >-#endif > } > > void NetworkConnectionToWebProcess::logSubresourceRedirect(PAL::SessionID sessionID, const String& sourcePrimaryDomain, const String& targetPrimaryDomain) > { >-#if ENABLE(RESOURCE_LOAD_STATISTICS) > if (auto networkSession = networkProcess().networkSession(sessionID)) { > if (auto* resourceLoadStatistics = networkSession->resourceLoadStatistics()) > resourceLoadStatistics->logSubresourceRedirect(sourcePrimaryDomain, targetPrimaryDomain, [] { }); > } >-#else >- UNUSED_PARAM(sessionID); >- UNUSED_PARAM(sourcePrimaryDomain); >- UNUSED_PARAM(targetPrimaryDomain); >-#endif > } > > void NetworkConnectionToWebProcess::requestResourceLoadStatisticsUpdate() > { >-#if ENABLE(RESOURCE_LOAD_STATISTICS) > for (auto& networkSession : networkProcess().networkSessions().values()) { > if (networkSession->sessionID().isEphemeral()) > continue; >@@ -649,9 +614,19 @@ void NetworkConnectionToWebProcess::requestResourceLoadStatisticsUpdate() > if (auto* resourceLoadStatistics = networkSession->resourceLoadStatistics()) > resourceLoadStatistics->requestUpdate(); > } >-#endif > } > >+void NetworkConnectionToWebProcess::hasStorageAccess(PAL::SessionID sessionID, const String& subFrameHost, const String& topFrameHost, uint64_t frameID, uint64_t pageID, CompletionHandler<void(bool)>&& completionHandler) >+{ >+ networkProcess().hasStorageAccess(sessionID, subFrameHost, topFrameHost, frameID, pageID, WTFMove(completionHandler)); >+} >+ >+void NetworkConnectionToWebProcess::requestStorageAccess(PAL::SessionID sessionID, const String& subFrameHost, const String& topFrameHost, uint64_t frameID, uint64_t pageID, bool promptEnabled, CompletionHandler<void(bool)>&& completionHandler) >+{ >+ networkProcess().requestStorageAccessGranted(sessionID, subFrameHost, topFrameHost, frameID, pageID, promptEnabled, WTFMove(completionHandler)); >+} >+#endif >+ > void NetworkConnectionToWebProcess::addOriginAccessWhitelistEntry(const String& sourceOrigin, const String& destinationProtocol, const String& destinationHost, bool allowDestinationSubdomains) > { > SecurityPolicy::addOriginAccessWhitelistEntry(SecurityOrigin::createFromString(sourceOrigin).get(), destinationProtocol, destinationHost, allowDestinationSubdomains); >diff --git a/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h b/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h >index 44c0a5f71436bda3c29430971640bf9f223ed4b8..914d7bd685a054ae53da456507bd31b28d1ba7f0 100644 >--- a/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h >+++ b/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h >@@ -192,13 +192,18 @@ private: > > CacheStorageEngineConnection& cacheStorageConnection(); > >+#if ENABLE(RESOURCE_LOAD_STATISTICS) > void removeStorageAccessForFrame(PAL::SessionID, uint64_t frameID, uint64_t pageID); > void removeStorageAccessForAllFramesOnPage(PAL::SessionID, uint64_t pageID); >+ > void logUserInteraction(PAL::SessionID, const String& topLevelOrigin); > void logWebSocketLoading(PAL::SessionID, const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen); > void logSubresourceLoading(PAL::SessionID, const String& targetPrimaryDomain, const String& mainFramePrimaryDomain, WallTime lastSeen); > void logSubresourceRedirect(PAL::SessionID, const String& sourcePrimaryDomain, const String& targetPrimaryDomain); > void requestResourceLoadStatisticsUpdate(); >+ void hasStorageAccess(PAL::SessionID, const String& subFrameHost, const String& topFrameHost, uint64_t frameID, uint64_t pageID, CompletionHandler<void(bool)>&&); >+ void requestStorageAccess(PAL::SessionID, const String& subFrameHost, const String& topFrameHost, uint64_t frameID, uint64_t pageID, bool prompt, CompletionHandler<void(bool)>&&); >+#endif > > void addOriginAccessWhitelistEntry(const String& sourceOrigin, const String& destinationProtocol, const String& destinationHost, bool allowDestinationSubdomains); > void removeOriginAccessWhitelistEntry(const String& sourceOrigin, const String& destinationProtocol, const String& destinationHost, bool allowDestinationSubdomains); >diff --git a/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in b/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in >index 842286b182f59a076a0976960ef5054ee2c94acb..73a51853740e26e5ac7a682da953e91553a5abff 100644 >--- a/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in >+++ b/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in >@@ -1,4 +1,4 @@ >-# Copyright (C) 2012-2017 Apple Inc. All rights reserved. >+# Copyright (C) 2012-2019 Apple Inc. All rights reserved. > # > # Redistribution and use in source and binary forms, with or without > # modification, are permitted provided that the following conditions >@@ -64,6 +64,8 @@ messages -> NetworkConnectionToWebProcess LegacyReceiver { > LogSubresourceLoading(PAL::SessionID sessionID, String targetPrimaryDomain, String mainFramePrimaryDomain, WallTime lastSeen) > LogSubresourceRedirect(PAL::SessionID sessionID, String sourcePrimaryDomain, String targetPrimaryDomain) > RequestResourceLoadStatisticsUpdate(); >+ HasStorageAccess(PAL::SessionID sessionID, String subFrameHost, String topFrameHost, uint64_t frameID, uint64_t pageID) -> (bool hasStorageAccess) Async >+ RequestStorageAccess(PAL::SessionID sessionID, String subFrameHost, String topFrameHost, uint64_t frameID, uint64_t pageID, bool prompt) -> (bool accessGranted) Async > #endif > > AddOriginAccessWhitelistEntry(String sourceOrigin, String destinationProtocol, String destinationHost, bool allowDestinationSubdomains); >diff --git a/Source/WebKit/NetworkProcess/NetworkProcess.cpp b/Source/WebKit/NetworkProcess/NetworkProcess.cpp >index 9542879cd70a3dfe00c65f0bd9a38ba762485918..c5ca58f32c498fdf6817dfc493fa3d10c71f1b2a 100644 >--- a/Source/WebKit/NetworkProcess/NetworkProcess.cpp >+++ b/Source/WebKit/NetworkProcess/NetworkProcess.cpp >@@ -969,7 +969,7 @@ void NetworkProcess::requestStorageAccess(PAL::SessionID sessionID, const String > { > if (auto* networkSession = this->networkSession(sessionID)) { > if (auto* resourceLoadStatistics = networkSession->resourceLoadStatistics()) >- resourceLoadStatistics->requestStorageAccess(resourceDomain, firstPartyDomain, frameID, pageID, promptEnabled, WTFMove(completionHandler)); >+ resourceLoadStatistics->requestStorageAccess(resourceDomain, firstPartyDomain, frameID.value(), pageID, promptEnabled, WTFMove(completionHandler)); > else > completionHandler(StorageAccessStatus::CannotRequestAccess); > } else { >@@ -978,6 +978,19 @@ void NetworkProcess::requestStorageAccess(PAL::SessionID sessionID, const String > } > } > >+void NetworkProcess::requestStorageAccessGranted(PAL::SessionID sessionID, const String& subFrameHost, const String& topFrameHost, uint64_t frameID, uint64_t pageID, bool promptEnabled, CompletionHandler<void(bool)>&& completionHandler) >+{ >+ if (auto* networkSession = this->networkSession(sessionID)) { >+ if (auto* resourceLoadStatistics = networkSession->resourceLoadStatistics()) >+ resourceLoadStatistics->requestStorageAccessGranted(subFrameHost, topFrameHost, frameID, pageID, promptEnabled, WTFMove(completionHandler)); >+ else >+ completionHandler(false); >+ } else { >+ ASSERT_NOT_REACHED(); >+ completionHandler(false); >+ } >+} >+ > 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) > { > if (auto* networkSession = this->networkSession(sessionID)) { >diff --git a/Source/WebKit/NetworkProcess/NetworkProcess.h b/Source/WebKit/NetworkProcess/NetworkProcess.h >index e45314296cd9f17a734d53d1f7d42eb0a40a5bd1..3d00e7be87cc870bdaf9e3d72818407fbe0c0409 100644 >--- a/Source/WebKit/NetworkProcess/NetworkProcess.h >+++ b/Source/WebKit/NetworkProcess/NetworkProcess.h >@@ -206,6 +206,7 @@ public: > void removeAllStorageAccess(PAL::SessionID, CompletionHandler<void()>&&); > void removePrevalentDomains(PAL::SessionID, const Vector<String>& domains); > void requestStorageAccess(PAL::SessionID, const String& resourceDomain, const String& firstPartyDomain, Optional<uint64_t> frameID, uint64_t pageID, bool promptEnabled, CompletionHandler<void(StorageAccessStatus)>&&); >+ void requestStorageAccessGranted(PAL::SessionID, const String& subFrameHost, const String& topFrameHost, uint64_t frameID, uint64_t pageID, bool promptEnabled, CompletionHandler<void(bool)>&&); > void resetCacheMaxAgeCapForPrevalentResources(PAL::SessionID, CompletionHandler<void()>&&); > void resetParametersToDefaultValues(PAL::SessionID, CompletionHandler<void()>&&); > void scheduleClearInMemoryAndPersistent(PAL::SessionID, Optional<WallTime> modifiedSince, ShouldGrandfatherStatistics, CompletionHandler<void()>&&); >diff --git a/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp b/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp >index 5f58aee752ac99795d6872653364139e2717fdf5..1d0edae3e76d02851fc27bc27ef1c41010ca59e8 100644 >--- a/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp >+++ b/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp >@@ -727,6 +727,11 @@ void NetworkProcessProxy::requestStorageAccess(PAL::SessionID sessionID, const S > sendWithAsyncReply(Messages::NetworkProcess::RequestStorageAccess(sessionID, resourceDomain, firstPartyDomain, frameID, pageID, promptEnabled), WTFMove(completionHandler)); > } > >+void NetworkProcessProxy::requestStorageAccessConfirm(uint64_t pageID, uint64_t frameID, const String& subFrameHost, const String& topFrameHost, CompletionHandler<void(bool)>&& completionHandler) >+{ >+ WebPageProxy::requestStorageAccessConfirm(pageID, frameID, subFrameHost, topFrameHost, WTFMove(completionHandler)); >+} >+ > void NetworkProcessProxy::grantStorageAccess(PAL::SessionID sessionID, const String& resourceDomain, const String& firstPartyDomain, Optional<uint64_t> frameID, uint64_t pageID, bool userWasPrompted, CompletionHandler<void(bool)>&& completionHandler) > { > if (!canSendMessage()) { >diff --git a/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h b/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h >index dc5272c8b963d090f20228c55cbb85e00702784b..3c7b0ba4d17fb058094fae3470a67a7a59416c59 100644 >--- a/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h >+++ b/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h >@@ -113,6 +113,7 @@ public: > void grantStorageAccess(PAL::SessionID, const String& resourceDomain, const String& firstPartyDomain, Optional<uint64_t> frameID, uint64_t pageID, bool userWasPrompted, CompletionHandler<void(bool)>&&); > void hasStorageAccess(PAL::SessionID, const String& subFrameHost, const String& topFrameHost, Optional<uint64_t> frameID, uint64_t pageID, CompletionHandler<void(bool)>&&); > void requestStorageAccess(PAL::SessionID, const String& resourceDomain, const String& firstPartyDomain, Optional<uint64_t> frameID, uint64_t pageID, bool promptEnabled, CompletionHandler<void(StorageAccessStatus)>&&); >+ void requestStorageAccessConfirm(uint64_t pageID, uint64_t frameID, const String& subFrameHost, const String& topFrameHost, CompletionHandler<void(bool)>&&); > void resetParametersToDefaultValues(PAL::SessionID, CompletionHandler<void()>&&); > void removeAllStorageAccess(PAL::SessionID, CompletionHandler<void()>&&); > void scheduleClearInMemoryAndPersistent(PAL::SessionID, ShouldGrandfatherStatistics, CompletionHandler<void()>&&); >diff --git a/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in b/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in >index 11b4092a8028789ef481fe4636d355b5c41edd4e..f3ed36dab922c13cab57f7b24b7aa63e98178904 100644 >--- a/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in >+++ b/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in >@@ -1,4 +1,4 @@ >-# Copyright (C) 2012 Apple Inc. All rights reserved. >+# Copyright (C) 2012-2019 Apple Inc. All rights reserved. > # > # Redistribution and use in source and binary forms, with or without > # modification, are permitted provided that the following conditions >@@ -46,6 +46,7 @@ messages -> NetworkProcessProxy LegacyReceiver { > NotifyWebsiteDataDeletionForTopPrivatelyOwnedDomainsFinished() > NotifyWebsiteDataScanForTopPrivatelyControlledDomainsFinished() > NotifyResourceLoadStatisticsTelemetryFinished(unsigned totalPrevalentResources, unsigned totalPrevalentResourcesWithUserInteraction, unsigned top3SubframeUnderTopFrameOrigins) >+ RequestStorageAccessConfirm(uint64_t pageID, uint64_t frameID, String subFrameHost, String topFrameHost) -> (bool userDidGrantAccess) Async > #endif > #if ENABLE(CONTENT_EXTENSIONS) > ContentExtensionRules(WebKit::UserContentControllerIdentifier identifier) >diff --git a/Source/WebKit/UIProcess/WebPageProxy.cpp b/Source/WebKit/UIProcess/WebPageProxy.cpp >index 756f68678a0e81f9a7cebac86a180edd372ba4ad..5d030bb77856175717214d566885acaca3d9a753 100644 >--- a/Source/WebKit/UIProcess/WebPageProxy.cpp >+++ b/Source/WebKit/UIProcess/WebPageProxy.cpp >@@ -8239,38 +8239,15 @@ void WebPageProxy::loadSynchronousURLSchemeTask(URLSchemeTaskParameters&& parame > } > > #if ENABLE(RESOURCE_LOAD_STATISTICS) >-void WebPageProxy::hasStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, uint64_t webProcessContextId) >+void WebPageProxy::requestStorageAccessConfirm(uint64_t pageID, uint64_t frameID, const String& subFrameHost, const String& topFrameHost, CompletionHandler<void(bool)>&& completionHandler) > { >- m_websiteDataStore->hasStorageAccess(WTFMove(subFrameHost), WTFMove(topFrameHost), frameID, m_pageID, [this, webProcessContextId] (bool hasAccess) { >- m_process->send(Messages::WebPage::StorageAccessResponse(hasAccess, webProcessContextId), m_pageID); >- }); >-} >- >-void WebPageProxy::requestStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, uint64_t webProcessContextId, bool promptEnabled) >-{ >- CompletionHandler<void(bool)> completionHandler = [this, protectedThis = makeRef(*this), webProcessContextId] (bool access) { >- m_process->send(Messages::WebPage::StorageAccessResponse(access, webProcessContextId), m_pageID); >- }; >- >- m_websiteDataStore->requestStorageAccess(String(subFrameHost), String(topFrameHost), frameID, m_pageID, promptEnabled, [this, protectedThis = makeRef(*this), subFrameHost, topFrameHost, promptEnabled, frameID, completionHandler = WTFMove(completionHandler)] (StorageAccessStatus status) mutable { >- switch (status) { >- case StorageAccessStatus::CannotRequestAccess: >- completionHandler(false); >- return; >- case StorageAccessStatus::RequiresUserPrompt: >- ASSERT_UNUSED(promptEnabled, promptEnabled); >- m_uiClient->requestStorageAccessConfirm(*this, m_process->webFrame(frameID), ResourceLoadStatistics::primaryDomain(subFrameHost), ResourceLoadStatistics::primaryDomain(topFrameHost), [this, protectedThis = makeRef(*this), subFrameHost, topFrameHost, frameID, completionHandler = WTFMove(completionHandler)] (bool userDidGrantAccess) mutable { >- if (userDidGrantAccess) >- m_websiteDataStore->grantStorageAccess(WTFMove(subFrameHost), WTFMove(topFrameHost), frameID, m_pageID, userDidGrantAccess, WTFMove(completionHandler)); >- else >- completionHandler(false); >- }); >- return; >- case StorageAccessStatus::HasAccess: >- completionHandler(true); >- return; >- } >- }); >+ WebPageProxy* page = WebProcessProxy::webPage(pageID); >+ if (!page) { >+ completionHandler(false); >+ return; >+ } >+ >+ page->m_uiClient->requestStorageAccessConfirm(*page, page->m_process->webFrame(frameID), ResourceLoadStatistics::primaryDomain(subFrameHost), ResourceLoadStatistics::primaryDomain(topFrameHost), WTFMove(completionHandler)); > } > #endif > >diff --git a/Source/WebKit/UIProcess/WebPageProxy.h b/Source/WebKit/UIProcess/WebPageProxy.h >index 19b12f42d39c556d6ddc647b69d4257a8e75d363..4b171e6339c3d576e3ef14a2657729667d4db2a9 100644 >--- a/Source/WebKit/UIProcess/WebPageProxy.h >+++ b/Source/WebKit/UIProcess/WebPageProxy.h >@@ -1380,8 +1380,7 @@ public: > #endif > > #if ENABLE(RESOURCE_LOAD_STATISTICS) >- void hasStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, uint64_t webProcessContextId); >- void requestStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, uint64_t webProcessContextId, bool prompt); >+ static void requestStorageAccessConfirm(uint64_t pageID, uint64_t frameID, const String& subFrameHost, const String& topFrameHost, CompletionHandler<void(bool)>&&); > #endif > > static WebPageProxy* nonEphemeralWebPageProxy(); >diff --git a/Source/WebKit/UIProcess/WebPageProxy.messages.in b/Source/WebKit/UIProcess/WebPageProxy.messages.in >index 9961366058d8c726d406ef5e79ac03fcbefbb42f..9293896bee98b49d1a12b426687a02a1fb5e1432 100644 >--- a/Source/WebKit/UIProcess/WebPageProxy.messages.in >+++ b/Source/WebKit/UIProcess/WebPageProxy.messages.in >@@ -1,4 +1,4 @@ >-# Copyright (C) 2010-2018 Apple Inc. All rights reserved. >+# Copyright (C) 2010-2019 Apple Inc. All rights reserved. > # > # Redistribution and use in source and binary forms, with or without > # modification, are permitted provided that the following conditions >@@ -534,11 +534,6 @@ messages -> WebPageProxy { > StopURLSchemeTask(uint64_t handlerIdentifier, uint64_t taskIdentifier) > LoadSynchronousURLSchemeTask(struct WebKit::URLSchemeTaskParameters parameters) -> (WebCore::ResourceResponse response, WebCore::ResourceError error, IPC::DataReference data) Delayed > >-#if ENABLE(RESOURCE_LOAD_STATISTICS) >- HasStorageAccess(String subFrameHost, String topFrameHost, uint64_t frameID, uint64_t contextID) >- RequestStorageAccess(String subFrameHost, String topFrameHost, uint64_t frameID, uint64_t contextID, bool prompt) >-#endif >- > #if ENABLE(ATTACHMENT_ELEMENT) > RegisterAttachmentIdentifierFromData(String identifier, String contentType, String preferredFileName, IPC::SharedBufferDataReference data) > RegisterAttachmentIdentifierFromFilePath(String identifier, String contentType, String filePath) >diff --git a/Source/WebKit/WebProcess/WebPage/WebPage.cpp b/Source/WebKit/WebProcess/WebPage/WebPage.cpp >index d0b9753080c36138afb3453551c5aee7180827b8..23ebe61b5eebed6d057976eaa7940b9e2b27073e 100644 >--- a/Source/WebKit/WebProcess/WebPage/WebPage.cpp >+++ b/Source/WebKit/WebProcess/WebPage/WebPage.cpp >@@ -6367,40 +6367,15 @@ void WebPage::frameBecameRemote(uint64_t frameID, GlobalFrameIdentifier&& remote > } > > #if ENABLE(RESOURCE_LOAD_STATISTICS) >-static uint64_t nextRequestStorageAccessContextId() >+void WebPage::hasStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, CompletionHandler<void(bool)>&& completionHandler) > { >- static uint64_t nextContextId = 0; >- return ++nextContextId; >-} >- >-void WebPage::hasStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, CompletionHandler<void(bool)>&& callback) >-{ >- auto contextId = nextRequestStorageAccessContextId(); >- auto addResult = m_storageAccessResponseCallbackMap.add(contextId, WTFMove(callback)); >- ASSERT(addResult.isNewEntry); >- if (addResult.iterator->value) >- send(Messages::WebPageProxy::HasStorageAccess(WTFMove(subFrameHost), WTFMove(topFrameHost), frameID, contextId)); >- else >- callback(false); >+ WebProcess::singleton().ensureNetworkProcessConnection().connection().sendWithAsyncReply(Messages::NetworkConnectionToWebProcess::HasStorageAccess(sessionID(), WTFMove(subFrameHost), WTFMove(topFrameHost), frameID, m_pageID), WTFMove(completionHandler)); > } > >-void WebPage::requestStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, CompletionHandler<void(bool)>&& callback) >+void WebPage::requestStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, CompletionHandler<void(bool)>&& completionHandler) > { >- auto contextId = nextRequestStorageAccessContextId(); >- auto addResult = m_storageAccessResponseCallbackMap.add(contextId, WTFMove(callback)); >- ASSERT(addResult.isNewEntry); >- if (addResult.iterator->value) { >- bool promptEnabled = RuntimeEnabledFeatures::sharedFeatures().storageAccessPromptsEnabled(); >- send(Messages::WebPageProxy::RequestStorageAccess(WTFMove(subFrameHost), WTFMove(topFrameHost), frameID, contextId, promptEnabled)); >- } else >- callback(false); >-} >- >-void WebPage::storageAccessResponse(bool wasGranted, uint64_t contextId) >-{ >- auto callback = m_storageAccessResponseCallbackMap.take(contextId); >- ASSERT(callback); >- callback(wasGranted); >+ bool promptEnabled = RuntimeEnabledFeatures::sharedFeatures().storageAccessPromptsEnabled(); >+ WebProcess::singleton().ensureNetworkProcessConnection().connection().sendWithAsyncReply(Messages::NetworkConnectionToWebProcess::RequestStorageAccess(sessionID(), WTFMove(subFrameHost), WTFMove(topFrameHost), frameID, m_pageID, promptEnabled), WTFMove(completionHandler)); > } > #endif > >diff --git a/Source/WebKit/WebProcess/WebPage/WebPage.h b/Source/WebKit/WebProcess/WebPage/WebPage.h >index e764f992e25179f3eb190981c6950443190f2031..190d62eaf35cfedc81761952d963d071fdc35bea 100644 >--- a/Source/WebKit/WebProcess/WebPage/WebPage.h >+++ b/Source/WebKit/WebProcess/WebPage/WebPage.h >@@ -1,5 +1,5 @@ > /* >- * Copyright (C) 2010-2018 Apple Inc. All rights reserved. >+ * Copyright (C) 2010-2019 Apple Inc. All rights reserved. > * > * Redistribution and use in source and binary forms, with or without > * modification, are permitted provided that the following conditions >@@ -1111,7 +1111,6 @@ public: > #if ENABLE(RESOURCE_LOAD_STATISTICS) > void hasStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, CompletionHandler<void(bool)>&& callback); > void requestStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, CompletionHandler<void(bool)>&& callback); >- void storageAccessResponse(bool wasGranted, uint64_t contextId); > #endif > > void showShareSheet(WebCore::ShareDataWithParsedURL&, WTF::CompletionHandler<void(bool)>&& callback); >diff --git a/Source/WebKit/WebProcess/WebPage/WebPage.messages.in b/Source/WebKit/WebProcess/WebPage/WebPage.messages.in >index 4dbe0a34a9938cc5c32ec57b24313eadd22bb4fb..e69ac6fddbcdfee64071ce9a11961bd6d8029880 100644 >--- a/Source/WebKit/WebProcess/WebPage/WebPage.messages.in >+++ b/Source/WebKit/WebProcess/WebPage/WebPage.messages.in >@@ -1,4 +1,4 @@ >-# Copyright (C) 2010-2016 Apple Inc. All rights reserved. >+# Copyright (C) 2010-2019 Apple Inc. All rights reserved. > # > # Redistribution and use in source and binary forms, with or without > # modification, are permitted provided that the following conditions >@@ -531,10 +531,6 @@ messages -> WebPage LegacyReceiver { > > SetIsSuspended(bool suspended) > >-#if ENABLE(RESOURCE_LOAD_STATISTICS) >- StorageAccessResponse(bool wasGranted, uint64_t contextId) >-#endif >- > #if ENABLE(ATTACHMENT_ELEMENT) > InsertAttachment(String identifier, Optional<uint64_t> fileSize, String fileName, String contentType, WebKit::CallbackID callbackID) > UpdateAttachmentAttributes(String identifier, Optional<uint64_t> fileSize, String contentType, String fileName, IPC::SharedBufferDataReference enclosingImageData, WebKit::CallbackID callbackID)
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 193924
:
360468
|
360469
|
360470
|
360471