Diff
Modified: trunk/LayoutTests/ChangeLog (226388 => 226389)
--- trunk/LayoutTests/ChangeLog 2018-01-04 04:21:29 UTC (rev 226388)
+++ trunk/LayoutTests/ChangeLog 2018-01-04 04:21:58 UTC (rev 226389)
@@ -1,3 +1,24 @@
+2018-01-03 John Wilander <[email protected]>
+
+ Storage Access API: Refactor XPC for access removal to go straight from the web process to the network process
+ https://bugs.webkit.org/show_bug.cgi?id=181270
+ <rdar://problem/36289544>
+
+ Reviewed by Alex Christensen.
+
+ This change refactors how the web process tells the network process
+ to remove storage access. Previously, this was done over the UI process
+ just like requests for storage access. But since no further reasoning
+ is needed, the message should go straight from the web process to the
+ network process for performance reasons and to minimize the risk of a
+ race.
+
+ As a consequence, the XPC code for storage access removal in the UI
+ process is deleted.
+
+ * platform/mac-wk2/TestExpectations:
+ Re-enables the test for this code path.
+
2018-01-03 Michael Saboff <[email protected]>
Disable SharedArrayBuffers from Web API
Modified: trunk/LayoutTests/platform/mac-wk2/TestExpectations (226388 => 226389)
--- trunk/LayoutTests/platform/mac-wk2/TestExpectations 2018-01-04 04:21:29 UTC (rev 226388)
+++ trunk/LayoutTests/platform/mac-wk2/TestExpectations 2018-01-04 04:21:58 UTC (rev 226389)
@@ -761,6 +761,7 @@
[ HighSierra+ ] http/tests/storageAccess/request-storage-access-same-origin-sandboxed-iframe.html [ Pass ]
[ HighSierra+ ] http/tests/storageAccess/request-and-grant-storage-access-cross-origin-sandboxed-nested-iframe.html [ Pass ]
[ HighSierra+ ] http/tests/storageAccess/request-and-grant-storage-access-cross-origin-sandboxed-iframe-from-prevalent-domain-with-recent-user-interaction.html [ Pass ]
+[ HighSierra+ ] http/tests/storageAccess/request-and-grant-storage-access-cross-origin-sandboxed-iframe-from-prevalent-domain-with-non-recent-user-interaction-and-try-access-from-right-frame.html [ Pass ]
[ HighSierra+ ] http/tests/storageAccess/request-and-grant-storage-access-cross-origin-sandboxed-iframe-from-prevalent-domain-with-non-recent-user-interaction-but-try-access-from-wrong-frame.html [ Pass ]
[ HighSierra+ ] http/tests/storageAccess/request-and-grant-storage-access-cross-origin-sandboxed-iframe-from-prevalent-domain-without-user-interaction.html [ Pass ]
[ HighSierra+ ] http/tests/storageAccess/request-storage-access-top-frame.html [ Pass ]
Modified: trunk/Source/WebCore/ChangeLog (226388 => 226389)
--- trunk/Source/WebCore/ChangeLog 2018-01-04 04:21:29 UTC (rev 226388)
+++ trunk/Source/WebCore/ChangeLog 2018-01-04 04:21:58 UTC (rev 226389)
@@ -1,3 +1,30 @@
+2018-01-03 John Wilander <[email protected]>
+
+ Storage Access API: Refactor XPC for access removal to go straight from the web process to the network process
+ https://bugs.webkit.org/show_bug.cgi?id=181270
+ <rdar://problem/36289544>
+
+ Reviewed by Alex Christensen.
+
+ No new tests. Existing test re-enabled.
+
+ This change refactors how the web process tells the network process
+ to remove storage access. Previously, this was done over the UI process
+ just like requests for storage access. But since no further reasoning
+ is needed, the message should go straight from the web process to the
+ network process for performance reasons and to minimize the risk of a
+ race.
+
+ As a consequence, the XPC code for storage access removal in the UI
+ process is deleted.
+
+ * platform/network/cf/NetworkStorageSessionCFNet.cpp:
+ (WebCore::NetworkStorageSession::cookieStoragePartition const):
+ Removes the storageAccessAPIEnabled check since the flag
+ doesn't get propagated when the network process is created.
+ Figuring this out will take some work which is unnecessary
+ when we already gate access to the feature in Document.idl.
+
2018-01-03 James Craig <[email protected]>
AX: when invert colors is on, double-invert certain media elements in UserAgentStyleSheet
Modified: trunk/Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp (226388 => 226389)
--- trunk/Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp 2018-01-04 04:21:29 UTC (rev 226388)
+++ trunk/Source/WebCore/platform/network/cf/NetworkStorageSessionCFNet.cpp 2018-01-04 04:21:58 UTC (rev 226389)
@@ -196,7 +196,7 @@
if (firstPartyDomain == resourceDomain)
return emptyString();
- if (storageAccessAPIEnabled && frameID && pageID && isStorageAccessGranted(resourceDomain, firstPartyDomain, frameID.value(), pageID.value()))
+ if (frameID && pageID && isStorageAccessGranted(resourceDomain, firstPartyDomain, frameID.value(), pageID.value()))
return emptyString();
return firstPartyDomain;
Modified: trunk/Source/WebKit/ChangeLog (226388 => 226389)
--- trunk/Source/WebKit/ChangeLog 2018-01-04 04:21:29 UTC (rev 226388)
+++ trunk/Source/WebKit/ChangeLog 2018-01-04 04:21:58 UTC (rev 226389)
@@ -1,3 +1,45 @@
+2018-01-03 John Wilander <[email protected]>
+
+ Storage Access API: Refactor XPC for access removal to go straight from the web process to the network process
+ https://bugs.webkit.org/show_bug.cgi?id=181270
+ <rdar://problem/36289544>
+
+ Reviewed by Alex Christensen.
+
+ This change refactors how the web process tells the network process
+ to remove storage access. Previously, this was done over the UI process
+ just like requests for storage access. But since no further reasoning
+ is needed, the message should go straight from the web process to the
+ network process for performance reasons and to minimize the risk of a
+ race.
+
+ As a consequence, the XPC code for storage access removal in the UI
+ process is deleted.
+
+ * NetworkProcess/NetworkConnectionToWebProcess.cpp:
+ (WebKit::NetworkConnectionToWebProcess::removeStorageAccess):
+ * NetworkProcess/NetworkConnectionToWebProcess.h:
+ * NetworkProcess/NetworkConnectionToWebProcess.messages.in:
+ * NetworkProcess/NetworkProcess.cpp:
+ (WebKit::NetworkProcess::removeStorageAccess): Deleted.
+ * NetworkProcess/NetworkProcess.h:
+ * NetworkProcess/NetworkProcess.messages.in:
+ * UIProcess/Network/NetworkProcessProxy.cpp:
+ (WebKit::NetworkProcessProxy::removeStorageAccess): Deleted.
+ * UIProcess/Network/NetworkProcessProxy.h:
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::requestStorageAccess):
+ (WebKit::WebPageProxy::removeStorageAccess): Deleted.
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebPageProxy.messages.in:
+ * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+ (WebKit::WebsiteDataStore::requestStorageAccess):
+ (WebKit::WebsiteDataStore::removeStorageAccess): Deleted.
+ * UIProcess/WebsiteData/WebsiteDataStore.h:
+ * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+ (WebKit::WebFrameLoaderClient::detachedFromParent2):
+ (WebKit::WebFrameLoaderClient::dispatchWillChangeDocument):
+
2018-01-03 David Kilzer <[email protected]>
com.apple.WebKit.Networking crash in com.apple.Foundation: -[__NSOperationInternal _start:]
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (226388 => 226389)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp 2018-01-04 04:21:29 UTC (rev 226388)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp 2018-01-04 04:21:58 UTC (rev 226389)
@@ -471,4 +471,15 @@
NetworkProcess::singleton().addWebsiteDataStore(WebsiteDataStoreParameters::legacyPrivateSessionParameters());
}
+void NetworkConnectionToWebProcess::removeStorageAccess(PAL::SessionID sessionID, uint64_t frameID, uint64_t pageID)
+{
+#if HAVE(CFNETWORK_STORAGE_PARTITIONING)
+ storageSession(sessionID).removeStorageAccess(frameID, pageID);
+#else
+ UNUSED_PARAM(sessionID);
+ UNUSED_PARAM(frameID);
+ UNUSED_PARAM(pageID);
+#endif
+}
+
} // namespace WebKit
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h (226388 => 226389)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h 2018-01-04 04:21:29 UTC (rev 226388)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h 2018-01-04 04:21:58 UTC (rev 226389)
@@ -133,6 +133,8 @@
CacheStorageEngineConnection& cacheStorageConnection();
+ void removeStorageAccess(PAL::SessionID, uint64_t frameID, uint64_t pageID);
+
Ref<IPC::Connection> m_connection;
HashMap<uint64_t, RefPtr<NetworkSocketStream>> m_networkSocketStreams;
Modified: trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in (226388 => 226389)
--- trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in 2018-01-04 04:21:29 UTC (rev 226388)
+++ trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in 2018-01-04 04:21:58 UTC (rev 226389)
@@ -57,4 +57,6 @@
CreateSocketStream(WebCore::URL url, PAL::SessionID sessionID, String cachePartition, uint64_t identifier)
EnsureLegacyPrivateBrowsingSession()
+
+ RemoveStorageAccess(PAL::SessionID sessionID, uint64_t frameID, uint64_t pageID);
}
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (226388 => 226389)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2018-01-04 04:21:29 UTC (rev 226388)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2018-01-04 04:21:58 UTC (rev 226389)
@@ -360,14 +360,6 @@
parentProcessConnection()->send(Messages::NetworkProcessProxy::StorageAccessRequestResult(isStorageGranted, contextId), 0);
}
-void NetworkProcess::removeStorageAccess(PAL::SessionID sessionID, uint64_t frameID, uint64_t pageID)
-{
- if (auto* networkStorageSession = NetworkStorageSession::storageSession(sessionID))
- networkStorageSession->removeStorageAccess(frameID, pageID);
- else
- ASSERT_NOT_REACHED();
-}
-
void NetworkProcess::removePrevalentDomains(PAL::SessionID sessionID, const Vector<String>& domains)
{
if (auto* networkStorageSession = NetworkStorageSession::storageSession(sessionID))
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.h (226388 => 226389)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2018-01-04 04:21:29 UTC (rev 226388)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2018-01-04 04:21:58 UTC (rev 226389)
@@ -140,7 +140,6 @@
void updatePrevalentDomainsToPartitionOrBlockCookies(PAL::SessionID, const Vector<String>& domainsToPartition, const Vector<String>& domainsToBlock, const Vector<String>& domainsToNeitherPartitionNorBlock, bool shouldClearFirst);
void hasStorageAccessForPrevalentDomains(PAL::SessionID, const String& resourceDomain, const String& firstPartyDomain, uint64_t frameID, uint64_t pageID, uint64_t contextId);
void updateStorageAccessForPrevalentDomains(PAL::SessionID, const String& resourceDomain, const String& firstPartyDomain, uint64_t frameID, uint64_t pageID, bool value, uint64_t contextId);
- void removeStorageAccess(PAL::SessionID, uint64_t frameID, uint64_t pageID);
void removePrevalentDomains(PAL::SessionID, const Vector<String>& domains);
#endif
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in (226388 => 226389)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in 2018-01-04 04:21:29 UTC (rev 226388)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.messages.in 2018-01-04 04:21:58 UTC (rev 226389)
@@ -85,7 +85,6 @@
UpdatePrevalentDomainsToPartitionOrBlockCookies(PAL::SessionID sessionID, Vector<String> domainsToPartition, Vector<String> domainsToBlock, Vector<String> domainsToNeitherPartitionNorBlock, bool shouldClearFirst)
HasStorageAccessForPrevalentDomains(PAL::SessionID sessionID, String resourceDomain, String firstPartyDomain, uint64_t frameID, uint64_t pageID, uint64_t contextId)
UpdateStorageAccessForPrevalentDomains(PAL::SessionID sessionID, String resourceDomain, String firstPartyDomain, uint64_t frameID, uint64_t pageID, bool shouldGrantAccess, uint64_t contextId)
- RemoveStorageAccess(PAL::SessionID sessionID, uint64_t frameID, uint64_t pageID);
RemovePrevalentDomains(PAL::SessionID sessionID, Vector<String> domainsWithInteraction);
#endif
}
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (226388 => 226389)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2018-01-04 04:21:29 UTC (rev 226388)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2018-01-04 04:21:58 UTC (rev 226389)
@@ -424,11 +424,6 @@
send(Messages::NetworkProcess::UpdateStorageAccessForPrevalentDomains(sessionID, resourceDomain, firstPartyDomain, frameID, pageID, value, contextId), 0);
}
-void NetworkProcessProxy::removeStorageAccess(PAL::SessionID sessionID, uint64_t frameID, uint64_t pageID)
-{
- send(Messages::NetworkProcess::RemoveStorageAccess(sessionID, frameID, pageID), 0);
-}
-
void NetworkProcessProxy::storageAccessRequestResult(bool wasGranted, uint64_t contextId)
{
auto callback = m_storageAccessResponseCallbackMap.take(contextId);
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h (226388 => 226389)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h 2018-01-04 04:21:29 UTC (rev 226388)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h 2018-01-04 04:21:58 UTC (rev 226389)
@@ -80,7 +80,6 @@
#if HAVE(CFNETWORK_STORAGE_PARTITIONING)
void hasStorageAccessForPrevalentDomains(PAL::SessionID, const String& resourceDomain, const String& firstPartyDomain, uint64_t frameID, uint64_t pageID, CompletionHandler<void(bool)>&& callback);
void updateStorageAccessForPrevalentDomains(PAL::SessionID, const String& resourceDomain, const String& firstPartyDomain, uint64_t frameID, uint64_t pageID, bool value, CompletionHandler<void(bool)>&& callback);
- void removeStorageAccess(PAL::SessionID, uint64_t frameID, uint64_t pageID);
#endif
void processReadyToSuspend();
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (226388 => 226389)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2018-01-04 04:21:29 UTC (rev 226388)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2018-01-04 04:21:58 UTC (rev 226389)
@@ -7197,12 +7197,6 @@
m_process->send(Messages::WebPage::StorageAccessResponse(wasGranted, webProcessContextId), m_pageID);
});
}
-
-void WebPageProxy::removeStorageAccess(uint64_t frameID, uint64_t pageID)
-{
- ASSERT(pageID == m_pageID);
- m_websiteDataStore->removeStorageAccess(frameID, pageID);
-}
#endif
#if PLATFORM(COCOA)
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (226388 => 226389)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.h 2018-01-04 04:21:29 UTC (rev 226388)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h 2018-01-04 04:21:58 UTC (rev 226389)
@@ -1247,7 +1247,6 @@
#if HAVE(CFNETWORK_STORAGE_PARTITIONING)
void hasStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, uint64_t pageID, uint64_t webProcessContextId);
void requestStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, uint64_t pageID, uint64_t webProcessContextId);
- void removeStorageAccess(uint64_t frameID, uint64_t pageID);
#endif
#if ENABLE(ATTACHMENT_ELEMENT)
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in (226388 => 226389)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in 2018-01-04 04:21:29 UTC (rev 226388)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in 2018-01-04 04:21:58 UTC (rev 226389)
@@ -505,7 +505,6 @@
#if HAVE(CFNETWORK_STORAGE_PARTITIONING)
HasStorageAccess(String subFrameHost, String topFrameHost, uint64_t frameID, uint64_t pageID, uint64_t contextID)
RequestStorageAccess(String subFrameHost, String topFrameHost, uint64_t frameID, uint64_t pageID, uint64_t contextID)
- RemoveStorageAccess(uint64_t frameID, uint64_t pageID)
#endif
#if ENABLE(ATTACHMENT_ELEMENT)
Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (226388 => 226389)
--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2018-01-04 04:21:29 UTC (rev 226388)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp 2018-01-04 04:21:58 UTC (rev 226389)
@@ -1213,12 +1213,6 @@
m_resourceLoadStatistics->requestStorageAccess(WTFMove(subFrameHost), WTFMove(topFrameHost), frameID, pageID, WTFMove(callback));
}
-
-void WebsiteDataStore::removeStorageAccess(uint64_t frameID, uint64_t pageID)
-{
- for (auto& processPool : processPools())
- processPool->networkProcess()->removeStorageAccess(m_sessionID, frameID, pageID);
-}
#endif
void WebsiteDataStore::networkProcessDidCrash()
Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h (226388 => 226389)
--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h 2018-01-04 04:21:29 UTC (rev 226388)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h 2018-01-04 04:21:58 UTC (rev 226389)
@@ -123,7 +123,6 @@
void removePrevalentDomains(const Vector<String>& domains);
void hasStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, uint64_t pageID, WTF::CompletionHandler<void (bool)>&& callback);
void requestStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, uint64_t pageID, WTF::CompletionHandler<void (bool)>&& callback);
- void removeStorageAccess(uint64_t frameID, uint64_t pageID);
#endif
void networkProcessDidCrash();
void resolveDirectoriesIfNecessary();
Modified: trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (226388 => 226389)
--- trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp 2018-01-04 04:21:29 UTC (rev 226388)
+++ trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp 2018-01-04 04:21:58 UTC (rev 226389)
@@ -36,6 +36,8 @@
#include "InjectedBundleDOMWindowExtension.h"
#include "InjectedBundleNavigationAction.h"
#include "NavigationActionData.h"
+#include "NetworkConnectionToWebProcessMessages.h"
+#include "NetworkProcessConnection.h"
#include "PluginView.h"
#include "UserData.h"
#include "WKBundleAPICast.h"
@@ -168,7 +170,7 @@
#if HAVE(CFNETWORK_STORAGE_PARTITIONING)
if (m_hasFrameSpecificStorageAccess) {
- webPage->send(Messages::WebPageProxy::RemoveStorageAccess(frameID().value(), pageID().value()));
+ WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::RemoveStorageAccess(sessionID(), frameID().value(), pageID().value()), 0);
m_hasFrameSpecificStorageAccess = false;
}
#endif
@@ -390,7 +392,7 @@
return;
if (m_hasFrameSpecificStorageAccess) {
- webPage->send(Messages::WebPageProxy::RemoveStorageAccess(frameID().value(), pageID().value()));
+ WebProcess::singleton().ensureNetworkProcessConnection().connection().send(Messages::NetworkConnectionToWebProcess::RemoveStorageAccess(sessionID(), frameID().value(), pageID().value()), 0);
m_hasFrameSpecificStorageAccess = false;
}
#endif