Diff
Modified: trunk/Source/WebKit/CMakeLists.txt (230209 => 230210)
--- trunk/Source/WebKit/CMakeLists.txt 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/CMakeLists.txt 2018-04-03 17:58:48 UTC (rev 230210)
@@ -107,6 +107,7 @@
NetworkProcess/NetworkCORSPreflightChecker.cpp
NetworkProcess/NetworkConnectionToWebProcess.cpp
+ NetworkProcess/NetworkContentRuleListManager.cpp
NetworkProcess/NetworkDataTask.cpp
NetworkProcess/NetworkDataTaskBlob.cpp
NetworkProcess/NetworkLoad.cpp
@@ -619,6 +620,7 @@
NetworkProcess/Cookies/WebCookieManager.messages.in
NetworkProcess/NetworkConnectionToWebProcess.messages.in
+ NetworkProcess/NetworkContentRuleListManager.messages.in
NetworkProcess/NetworkProcess.messages.in
NetworkProcess/NetworkResourceLoader.messages.in
NetworkProcess/NetworkSocketStream.messages.in
Modified: trunk/Source/WebKit/ChangeLog (230209 => 230210)
--- trunk/Source/WebKit/ChangeLog 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/ChangeLog 2018-04-03 17:58:48 UTC (rev 230210)
@@ -1,3 +1,100 @@
+2018-04-03 Youenn Fablet <you...@apple.com>
+
+ Make NetworkProcess get ContentBlocker information from UIProcess
+ https://bugs.webkit.org/show_bug.cgi?id=184205
+
+ Reviewed by Alex Christensen.
+
+ Make NetworkProcess get content blockers from UIProcess directly.
+ Before that patch, WebProcess sent content blockers to NetworkProcess for each PingLoad.
+ Instead, WebProcess sends the content blocker identifier for each PingLoad and NetworkProcess fetches the content blocker once.
+
+ This is both more efficient than passing them for each PingLoad and safer in the sense
+ that a compromised WebProcess will not be able to bypass any of these.
+ In the future, NetworkProcess should get the content blocker identifier directly from the WebPageID attached to the request.
+
+ Covered by existing beacon+content blocker tests.
+
+ Did some refactoring to add a typed content blocker identifier.
+ Once NetworkProcess fetches a given content blocker, the content blocker will send any modification to NetworkProcess.
+ Introduced NetworkContentRuleListManager to handle the content blockers in NetworkProcess.
+
+ * CMakeLists.txt:
+ * DerivedSources.make:
+ * NetworkProcess/NetworkLoadChecker.cpp:
+ (WebKit::NetworkLoadChecker::checkRequest):
+ (WebKit::NetworkLoadChecker::continueCheckingRequest):
+ (WebKit::NetworkLoadChecker::processContentExtensionRulesForLoad):
+ * NetworkProcess/NetworkLoadChecker.h:
+ (WebKit::NetworkLoadChecker::setContentExtensionController):
+ * NetworkProcess/NetworkProcess.cpp:
+ (WebKit::NetworkProcess::didReceiveMessage):
+ * NetworkProcess/NetworkProcess.h:
+ (WebKit::NetworkProcess::networkUserContentController):
+ * NetworkProcess/NetworkResourceLoadParameters.cpp:
+ (WebKit::NetworkResourceLoadParameters::encode const):
+ (WebKit::NetworkResourceLoadParameters::decode):
+ * NetworkProcess/NetworkResourceLoadParameters.h:
+ * NetworkProcess/NetworkContentRuleListManager.cpp: Added.
+ (WebKit::NetworkContentRuleListManager::contentExtensionsBackend):
+ (WebKit::NetworkContentRuleListManager::addContentRuleLists):
+ (WebKit::NetworkContentRuleListManager::removeContentRuleList):
+ (WebKit::NetworkContentRuleListManager::removeAllContentRuleLists):
+ (WebKit::NetworkContentRuleListManager::remove):
+ * NetworkProcess/NetworkContentRuleListManager.h: Added.
+ * NetworkProcess/NetworkContentRuleListManager.messages.in: Added.
+ * NetworkProcess/PingLoad.cpp:
+ * Scripts/webkit/messages.py:
+ * Shared/UserContentControllerIdentifier.h: Added.
+ * Shared/WebPageCreationParameters.cpp:
+ (WebKit::WebPageCreationParameters::decode):
+ * Shared/WebPageCreationParameters.h:
+ * Shared/WebPageGroupData.cpp:
+ (WebKit::WebPageGroupData::decode):
+ * Shared/WebPageGroupData.h:
+ * UIProcess/Network/NetworkProcessProxy.cpp:
+ (WebKit::NetworkProcessProxy::~NetworkProcessProxy):
+ (WebKit::NetworkProcessProxy::contentExtensionRules):
+ (WebKit::NetworkProcessProxy::didDestroyWebUserContentControllerProxy):
+ * UIProcess/Network/NetworkProcessProxy.h:
+ * UIProcess/Network/NetworkProcessProxy.messages.in:
+ * UIProcess/UserContent/WebUserContentControllerProxy.cpp:
+ (WebKit::WebUserContentControllerProxy::get):
+ (WebKit::WebUserContentControllerProxy::WebUserContentControllerProxy):
+ (WebKit::WebUserContentControllerProxy::~WebUserContentControllerProxy):
+ (WebKit::WebUserContentControllerProxy::addProcess):
+ (WebKit::WebUserContentControllerProxy::removeProcess):
+ (WebKit::WebUserContentControllerProxy::addUserContentWorldUse):
+ (WebKit::WebUserContentControllerProxy::removeUserContentWorldUses):
+ (WebKit::WebUserContentControllerProxy::addUserScript):
+ (WebKit::WebUserContentControllerProxy::removeUserScript):
+ (WebKit::WebUserContentControllerProxy::removeAllUserScripts):
+ (WebKit::WebUserContentControllerProxy::addUserStyleSheet):
+ (WebKit::WebUserContentControllerProxy::removeUserStyleSheet):
+ (WebKit::WebUserContentControllerProxy::removeAllUserStyleSheets):
+ (WebKit::WebUserContentControllerProxy::addUserScriptMessageHandler):
+ (WebKit::WebUserContentControllerProxy::removeUserMessageHandlerForName):
+ (WebKit::WebUserContentControllerProxy::removeAllUserMessageHandlers):
+ (WebKit::WebUserContentControllerProxy::addContentRuleList):
+ (WebKit::WebUserContentControllerProxy::removeContentRuleList):
+ (WebKit::WebUserContentControllerProxy::removeAllContentRuleLists):
+ * UIProcess/UserContent/WebUserContentControllerProxy.h:
+ (WebKit::WebUserContentControllerProxy::create):
+ (WebKit::WebUserContentControllerProxy::addNetworkProcess):
+ (WebKit::WebUserContentControllerProxy::removeNetworkProcess):
+ (WebKit::WebUserContentControllerProxy::contentExtensionRules):
+ (WebKit::WebUserContentControllerProxy::identifier const):
+ * WebKit.xcodeproj/project.pbxproj:
+ * WebProcess/Network/WebLoaderStrategy.cpp:
+ (WebKit::WebLoaderStrategy::startPingLoad):
+ * WebProcess/UserContent/WebUserContentController.cpp:
+ (WebKit::WebUserContentController::getOrCreate):
+ (WebKit::WebUserContentController::WebUserContentController):
+ (WebKit::WebUserContentController::~WebUserContentController):
+ * WebProcess/UserContent/WebUserContentController.h:
+ * WebProcess/WebPage/WebPage.h:
+ (WebKit::WebPage::userContentControllerIdentifier const):
+
2018-04-02 Beth Dakin <bda...@apple.com>
Fix the managed configurations build
Modified: trunk/Source/WebKit/DerivedSources.make (230209 => 230210)
--- trunk/Source/WebKit/DerivedSources.make 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/DerivedSources.make 2018-04-03 17:58:48 UTC (rev 230210)
@@ -115,6 +115,7 @@
NetworkRTCSocket \
NetworkResourceLoader \
NetworkSocketStream \
+ NetworkContentRuleListManager \
PluginControllerProxy \
PluginProcess \
PluginProcessConnection \
Added: trunk/Source/WebKit/NetworkProcess/NetworkContentRuleListManager.cpp (0 => 230210)
--- trunk/Source/WebKit/NetworkProcess/NetworkContentRuleListManager.cpp (rev 0)
+++ trunk/Source/WebKit/NetworkProcess/NetworkContentRuleListManager.cpp 2018-04-03 17:58:48 UTC (rev 230210)
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2018 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "NetworkContentRuleListManager.h"
+
+#if ENABLE(CONTENT_EXTENSIONS)
+
+#include "NetworkProcess.h"
+#include "NetworkProcessProxyMessages.h"
+#include "WebCompiledContentRuleList.h"
+
+using namespace WebCore;
+
+namespace WebKit {
+
+NetworkContentRuleListManager::NetworkContentRuleListManager() = default;
+NetworkContentRuleListManager::~NetworkContentRuleListManager()
+{
+ auto pendingCallbacks = WTFMove(m_pendingCallbacks);
+ if (pendingCallbacks.isEmpty())
+ return;
+
+ WebCore::ContentExtensions::ContentExtensionsBackend backend;
+ for (auto& callbacks : pendingCallbacks.values()) {
+ for (auto& callback : callbacks)
+ callback(backend);
+ }
+}
+
+void NetworkContentRuleListManager::contentExtensionsBackend(UserContentControllerIdentifier identifier, BackendCallback&& callback)
+{
+ auto iterator = m_contentExtensionBackends.find(identifier);
+ if (iterator != m_contentExtensionBackends.end()) {
+ callback(*iterator->value);
+ return;
+ }
+ m_pendingCallbacks.ensure(identifier, [] {
+ return Vector<BackendCallback> { };
+ }).iterator->value.append(WTFMove(callback));
+ NetworkProcess::singleton().parentProcessConnection()->send(Messages::NetworkProcessProxy::ContentExtensionRules { identifier }, 0);
+}
+
+void NetworkContentRuleListManager::addContentRuleLists(UserContentControllerIdentifier identifier, const Vector<std::pair<String, WebCompiledContentRuleListData>>& contentRuleLists)
+{
+ auto& backend = *m_contentExtensionBackends.ensure(identifier, [] {
+ return std::make_unique<WebCore::ContentExtensions::ContentExtensionsBackend>();
+ }).iterator->value;
+
+ for (const auto& contentRuleList : contentRuleLists) {
+ WebCompiledContentRuleListData contentRuleListData = contentRuleList.second;
+ auto compiledContentRuleList = WebCompiledContentRuleList::create(WTFMove(contentRuleListData));
+ backend.addContentExtension(contentRuleList.first, WTFMove(compiledContentRuleList));
+ }
+
+ auto pendingCallbacks = m_pendingCallbacks.take(identifier);
+ for (auto& callback : pendingCallbacks)
+ callback(backend);
+
+}
+
+void NetworkContentRuleListManager::removeContentRuleList(UserContentControllerIdentifier identifier, const String& name)
+{
+ auto iterator = m_contentExtensionBackends.find(identifier);
+ if (iterator == m_contentExtensionBackends.end())
+ return;
+
+ iterator->value->removeContentExtension(name);
+}
+
+void NetworkContentRuleListManager::removeAllContentRuleLists(UserContentControllerIdentifier identifier)
+{
+ auto iterator = m_contentExtensionBackends.find(identifier);
+ if (iterator == m_contentExtensionBackends.end())
+ return;
+
+ iterator->value->removeAllContentExtensions();
+}
+
+void NetworkContentRuleListManager::remove(UserContentControllerIdentifier identifier)
+{
+ m_contentExtensionBackends.remove(identifier);
+}
+
+} // namespace WebKit
+
+#endif // ENABLE(CONTENT_EXTENSIONS)
Copied: trunk/Source/WebKit/NetworkProcess/NetworkContentRuleListManager.h (from rev 230208, trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.h) (0 => 230210)
--- trunk/Source/WebKit/NetworkProcess/NetworkContentRuleListManager.h (rev 0)
+++ trunk/Source/WebKit/NetworkProcess/NetworkContentRuleListManager.h 2018-04-03 17:58:48 UTC (rev 230210)
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2018 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(CONTENT_EXTENSIONS)
+
+#include "UserContentControllerIdentifier.h"
+#include "WebCompiledContentRuleListData.h"
+#include <WebCore/ContentExtensionsBackend.h>
+#include <WebCore/UserContentProvider.h>
+
+namespace IPC {
+class Connection;
+class Decoder;
+}
+
+namespace WebKit {
+
+class NetworkContentRuleListManager {
+public:
+ NetworkContentRuleListManager();
+ ~NetworkContentRuleListManager();
+
+ void didReceiveMessage(IPC::Connection&, IPC::Decoder&);
+
+ using BackendCallback = CompletionHandler<void(WebCore::ContentExtensions::ContentExtensionsBackend&)>;
+ void contentExtensionsBackend(UserContentControllerIdentifier, BackendCallback&&);
+
+private:
+ void addContentRuleLists(UserContentControllerIdentifier, const Vector<std::pair<String, WebCompiledContentRuleListData>>&);
+ void removeContentRuleList(UserContentControllerIdentifier, const String& name);
+ void removeAllContentRuleLists(UserContentControllerIdentifier);
+ void remove(UserContentControllerIdentifier);
+
+ HashMap<UserContentControllerIdentifier, std::unique_ptr<WebCore::ContentExtensions::ContentExtensionsBackend>> m_contentExtensionBackends;
+ HashMap<UserContentControllerIdentifier, Vector<BackendCallback>> m_pendingCallbacks;
+};
+
+} // namespace WebKit
+
+#endif // ENABLE(CONTENT_EXTENSIONS)
Added: trunk/Source/WebKit/NetworkProcess/NetworkContentRuleListManager.messages.in (0 => 230210)
--- trunk/Source/WebKit/NetworkProcess/NetworkContentRuleListManager.messages.in (rev 0)
+++ trunk/Source/WebKit/NetworkProcess/NetworkContentRuleListManager.messages.in 2018-04-03 17:58:48 UTC (rev 230210)
@@ -0,0 +1,32 @@
+# Copyright (C) 2018 Apple Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND
+# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR
+# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#if ENABLE(CONTENT_EXTENSIONS)
+
+messages -> NetworkContentRuleListManager {
+ Remove(WebKit::UserContentControllerIdentifier identifier)
+ AddContentRuleLists(WebKit::UserContentControllerIdentifier identifier, Vector<std::pair<String, WebKit::WebCompiledContentRuleListData>> contentFilters)
+ RemoveContentRuleList(WebKit::UserContentControllerIdentifier identifier, String name)
+ RemoveAllContentRuleLists(WebKit::UserContentControllerIdentifier identifier)
+}
+
+#endif
Modified: trunk/Source/WebKit/NetworkProcess/NetworkLoadChecker.cpp (230209 => 230210)
--- trunk/Source/WebKit/NetworkProcess/NetworkLoadChecker.cpp 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/NetworkProcess/NetworkLoadChecker.cpp 2018-04-03 17:58:48 UTC (rev 230210)
@@ -28,7 +28,9 @@
#include "Logging.h"
#include "NetworkCORSPreflightChecker.h"
+#include "NetworkProcess.h"
#include "WebCompiledContentRuleList.h"
+#include "WebUserContentController.h"
#include <WebCore/ContentSecurityPolicy.h>
#include <WebCore/CrossOriginAccessControl.h>
#include <WebCore/CrossOriginPreflightResultCache.h>
@@ -95,12 +97,20 @@
void NetworkLoadChecker::checkRequest(ResourceRequest&& request, ValidationHandler&& handler)
{
#if ENABLE(CONTENT_EXTENSIONS)
- if (processContentExtensionRulesForLoad(request).blockedLoad) {
- handler(returnError(ASCIILiteral("Blocked by content extension")));
- return;
- }
+ processContentExtensionRulesForLoad(WTFMove(request), [this, handler = WTFMove(handler)](auto&& request, auto status) mutable {
+ if (status.blockedLoad) {
+ handler(this->returnError(ASCIILiteral("Blocked by content extension")));
+ return;
+ }
+ this->continueCheckingRequest(WTFMove(request), WTFMove(handler));
+ });
+#else
+ continueCheckingRequest(WTFMove(request), WTFMove(handler));
#endif
+}
+void NetworkLoadChecker::continueCheckingRequest(ResourceRequest&& request, ValidationHandler&& handler)
+{
if (auto* contentSecurityPolicy = this->contentSecurityPolicy()) {
if (isRedirected()) {
URL url = ""
@@ -229,22 +239,19 @@
}
#if ENABLE(CONTENT_EXTENSIONS)
-ContentExtensions::ContentExtensionsBackend& NetworkLoadChecker::contentExtensionsBackend()
+void NetworkLoadChecker::processContentExtensionRulesForLoad(ResourceRequest&& request, CompletionHandler<void(WebCore::ResourceRequest&&, const ContentExtensions::BlockedStatus&)>&& callback)
{
- if (!m_contentExtensionsBackend) {
- m_contentExtensionsBackend = std::make_unique<ContentExtensions::ContentExtensionsBackend>();
- for (auto& pair : m_contentRuleLists)
- m_contentExtensionsBackend->addContentExtension(pair.first, WebCompiledContentRuleList::create(WTFMove(pair.second)));
+ if (!m_userContentControllerIdentifier) {
+ ContentExtensions::BlockedStatus status;
+ callback(WTFMove(request), status);
+ return;
}
- return *m_contentExtensionsBackend;
+ NetworkProcess::singleton().networkContentRuleListManager().contentExtensionsBackend(*m_userContentControllerIdentifier, [protectedThis = makeRef(*this), this, request = WTFMove(request), callback = WTFMove(callback)](auto& backend) mutable {
+ auto status = backend.processContentExtensionRulesForPingLoad(request.url(), m_mainDocumentURL);
+ applyBlockedStatusToRequest(status, nullptr, request);
+ callback(WTFMove(request), status);
+ });
}
-
-ContentExtensions::BlockedStatus NetworkLoadChecker::processContentExtensionRulesForLoad(ResourceRequest& request)
-{
- auto status = contentExtensionsBackend().processContentExtensionRulesForPingLoad(request.url(), m_mainDocumentURL);
- applyBlockedStatusToRequest(status, nullptr, request);
- return status;
-}
#endif // ENABLE(CONTENT_EXTENSIONS)
} // namespace WebKit
Modified: trunk/Source/WebKit/NetworkProcess/NetworkLoadChecker.h (230209 => 230210)
--- trunk/Source/WebKit/NetworkProcess/NetworkLoadChecker.h 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/NetworkProcess/NetworkLoadChecker.h 2018-04-03 17:58:48 UTC (rev 230210)
@@ -25,8 +25,8 @@
#pragma once
+#include "NetworkContentRuleListManager.h"
#include "NetworkResourceLoadParameters.h"
-#include <WebCore/ContentExtensionsBackend.h>
#include <WebCore/ResourceError.h>
#include <WebCore/ResourceResponse.h>
#include <wtf/CompletionHandler.h>
@@ -40,9 +40,12 @@
class NetworkCORSPreflightChecker;
-class NetworkLoadChecker {
+class NetworkLoadChecker : public RefCounted<NetworkLoadChecker> {
public:
- NetworkLoadChecker(WebCore::FetchOptions::Mode, bool shouldFollowRedirects, WebCore::StoredCredentialsPolicy, PAL::SessionID, WebCore::HTTPHeaderMap&&, WebCore::URL&&, RefPtr<WebCore::SecurityOrigin>&&);
+ static Ref<NetworkLoadChecker> create(WebCore::FetchOptions::Mode mode, bool shouldFollowRedirects, WebCore::StoredCredentialsPolicy storedCredentialsPolicy, PAL::SessionID sessionID, WebCore::HTTPHeaderMap&& originalHeaders, WebCore::URL&& url, RefPtr<WebCore::SecurityOrigin>&& sourceOrigin)
+ {
+ return adoptRef(*new NetworkLoadChecker { mode, shouldFollowRedirects, storedCredentialsPolicy, sessionID, WTFMove(originalHeaders), WTFMove(url), WTFMove(sourceOrigin) });
+ }
~NetworkLoadChecker();
using RequestOrError = Expected<WebCore::ResourceRequest, WebCore::ResourceError>;
@@ -52,10 +55,10 @@
void setCSPResponseHeaders(WebCore::ContentSecurityPolicyResponseHeaders&& headers) { m_cspResponseHeaders = WTFMove(headers); }
#if ENABLE(CONTENT_EXTENSIONS)
- void setContentExtensionRuleLists(WebCore::URL&& mainDocumentURL, Vector<std::pair<String, WebCompiledContentRuleListData>>&& contentRuleLists)
+ void setContentExtensionController(WebCore::URL&& mainDocumentURL, std::optional<UserContentControllerIdentifier> identifier)
{
m_mainDocumentURL = WTFMove(mainDocumentURL);
- m_contentRuleLists = WTFMove(contentRuleLists);
+ m_userContentControllerIdentifier = identifier;
}
#endif
@@ -63,6 +66,8 @@
WebCore::StoredCredentialsPolicy storedCredentialsPolicy() const { return m_storedCredentialsPolicy; }
private:
+ NetworkLoadChecker(WebCore::FetchOptions::Mode, bool shouldFollowRedirects, WebCore::StoredCredentialsPolicy, PAL::SessionID, WebCore::HTTPHeaderMap&&, WebCore::URL&&, RefPtr<WebCore::SecurityOrigin>&&);
+
WebCore::ContentSecurityPolicy* contentSecurityPolicy() const;
bool isChecking() const { return !!m_corsPreflightChecker; }
bool isRedirected() const { return m_redirectCount; }
@@ -69,6 +74,8 @@
void checkRequest(WebCore::ResourceRequest&&, ValidationHandler&&);
+ void continueCheckingRequest(WebCore::ResourceRequest&&, ValidationHandler&&);
+
bool doesNotNeedCORSCheck(const WebCore::URL&) const;
void checkCORSRequest(WebCore::ResourceRequest&&, ValidationHandler&&);
void checkCORSRedirectedRequest(WebCore::ResourceRequest&&, ValidationHandler&&);
@@ -77,8 +84,7 @@
RequestOrError returnError(String&& error);
#if ENABLE(CONTENT_EXTENSIONS)
- WebCore::ContentExtensions::ContentExtensionsBackend& contentExtensionsBackend();
- WebCore::ContentExtensions::BlockedStatus processContentExtensionRulesForLoad(WebCore::ResourceRequest&);
+ void processContentExtensionRulesForLoad(WebCore::ResourceRequest&&, CompletionHandler<void(WebCore::ResourceRequest&&, const WebCore::ContentExtensions::BlockedStatus&)>&&);
#endif
WebCore::FetchOptions::Mode m_mode;
@@ -92,7 +98,7 @@
std::optional<WebCore::ContentSecurityPolicyResponseHeaders> m_cspResponseHeaders;
#if ENABLE(CONTENT_EXTENSIONS)
WebCore::URL m_mainDocumentURL;
- Vector<std::pair<String, WebCompiledContentRuleListData>> m_contentRuleLists;
+ std::optional<UserContentControllerIdentifier> m_userContentControllerIdentifier;
#endif
std::unique_ptr<NetworkCORSPreflightChecker> m_corsPreflightChecker;
@@ -99,9 +105,6 @@
bool m_isSameOriginRequest { true };
bool m_isSimpleRequest { true };
mutable std::unique_ptr<WebCore::ContentSecurityPolicy> m_contentSecurityPolicy;
-#if ENABLE(CONTENT_EXTENSIONS)
- std::unique_ptr<WebCore::ContentExtensions::ContentExtensionsBackend> m_contentExtensionsBackend;
-#endif
size_t m_redirectCount { 0 };
WebCore::URL m_previousURL;
};
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp (230209 => 230210)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp 2018-04-03 17:58:48 UTC (rev 230210)
@@ -39,6 +39,7 @@
#include "Logging.h"
#include "NetworkBlobRegistry.h"
#include "NetworkConnectionToWebProcess.h"
+#include "NetworkContentRuleListManagerMessages.h"
#include "NetworkProcessCreationParameters.h"
#include "NetworkProcessPlatformStrategies.h"
#include "NetworkProcessProxyMessages.h"
@@ -171,6 +172,13 @@
return;
}
+#if ENABLE(CONTENT_EXTENSIONS)
+ if (decoder.messageReceiverName() == Messages::NetworkContentRuleListManager::messageReceiverName()) {
+ m_NetworkContentRuleListManager.didReceiveMessage(connection, decoder);
+ return;
+ }
+#endif
+
didReceiveNetworkProcessMessage(connection, decoder);
}
Modified: trunk/Source/WebKit/NetworkProcess/NetworkProcess.h (230209 => 230210)
--- trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/NetworkProcess/NetworkProcess.h 2018-04-03 17:58:48 UTC (rev 230210)
@@ -29,6 +29,7 @@
#include "ChildProcess.h"
#include "DownloadManager.h"
#include "MessageReceiverMap.h"
+#include "NetworkContentRuleListManager.h"
#include <WebCore/DiagnosticLoggingClient.h>
#include <memory>
#include <pal/SessionID.h>
@@ -157,6 +158,10 @@
void setSessionIsControlledByAutomation(PAL::SessionID, bool);
bool sessionIsControlledByAutomation(PAL::SessionID) const;
+#if ENABLE(CONTENT_EXTENSIONS)
+ NetworkContentRuleListManager& networkContentRuleListManager() { return m_NetworkContentRuleListManager; }
+#endif
+
private:
NetworkProcess();
~NetworkProcess();
@@ -291,6 +296,10 @@
#if PLATFORM(IOS)
WebSQLiteDatabaseTracker m_webSQLiteDatabaseTracker;
#endif
+
+#if ENABLE(CONTENT_EXTENSIONS)
+ NetworkContentRuleListManager m_NetworkContentRuleListManager;
+#endif
};
} // namespace WebKit
Modified: trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp (230209 => 230210)
--- trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp 2018-04-03 17:58:48 UTC (rev 230210)
@@ -93,7 +93,7 @@
#if ENABLE(CONTENT_EXTENSIONS)
encoder << mainDocumentURL;
- encoder << contentRuleLists;
+ encoder << userContentControllerIdentifier;
#endif
}
@@ -184,11 +184,11 @@
if (!decoder.decode(result.mainDocumentURL))
return false;
- std::optional<Vector<std::pair<String, WebCompiledContentRuleListData>>> contentRuleLists;
- decoder >> contentRuleLists;
- if (!contentRuleLists)
+ std::optional<std::optional<UserContentControllerIdentifier>> userContentControllerIdentifier;
+ decoder >> userContentControllerIdentifier;
+ if (!userContentControllerIdentifier)
return false;
- result.contentRuleLists = WTFMove(*contentRuleLists);
+ result.userContentControllerIdentifier = *userContentControllerIdentifier;
#endif
return true;
Modified: trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.h (230209 => 230210)
--- trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.h 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.h 2018-04-03 17:58:48 UTC (rev 230210)
@@ -27,7 +27,7 @@
#include "NetworkLoadParameters.h"
#include "SandboxExtension.h"
-#include "WebCompiledContentRuleListData.h"
+#include "UserContentControllerIdentifier.h"
#include <WebCore/ContentSecurityPolicyResponseHeaders.h>
#include <WebCore/FetchOptions.h>
#include <WebCore/ResourceLoaderOptions.h>
@@ -61,7 +61,7 @@
#if ENABLE(CONTENT_EXTENSIONS)
WebCore::URL mainDocumentURL;
- Vector<std::pair<String, WebCompiledContentRuleListData>> contentRuleLists;
+ std::optional<UserContentControllerIdentifier> userContentControllerIdentifier;
#endif
};
Modified: trunk/Source/WebKit/NetworkProcess/PingLoad.cpp (230209 => 230210)
--- trunk/Source/WebKit/NetworkProcess/PingLoad.cpp 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/NetworkProcess/PingLoad.cpp 2018-04-03 17:58:48 UTC (rev 230210)
@@ -42,13 +42,13 @@
: m_parameters(WTFMove(parameters))
, m_completionHandler(WTFMove(completionHandler))
, m_timeoutTimer(*this, &PingLoad::timeoutTimerFired)
- , m_networkLoadChecker(makeUniqueRef<NetworkLoadChecker>(m_parameters.mode, m_parameters.shouldFollowRedirects, m_parameters.storedCredentialsPolicy, m_parameters.sessionID, WTFMove(originalRequestHeaders), URL { m_parameters.request.url() }, m_parameters.sourceOrigin.copyRef()))
+ , m_networkLoadChecker(NetworkLoadChecker::create(m_parameters.mode, m_parameters.shouldFollowRedirects, m_parameters.storedCredentialsPolicy, m_parameters.sessionID, WTFMove(originalRequestHeaders), URL { m_parameters.request.url() }, m_parameters.sourceOrigin.copyRef()))
{
if (m_parameters.cspResponseHeaders)
m_networkLoadChecker->setCSPResponseHeaders(WTFMove(m_parameters.cspResponseHeaders.value()));
#if ENABLE(CONTENT_EXTENSIONS)
- m_networkLoadChecker->setContentExtensionRuleLists(WTFMove(m_parameters.mainDocumentURL), WTFMove(m_parameters.contentRuleLists));
+ m_networkLoadChecker->setContentExtensionController(WTFMove(m_parameters.mainDocumentURL), m_parameters.userContentControllerIdentifier);
#endif
// If the server never responds, this object will hang around forever.
Modified: trunk/Source/WebKit/NetworkProcess/PingLoad.h (230209 => 230210)
--- trunk/Source/WebKit/NetworkProcess/PingLoad.h 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/NetworkProcess/PingLoad.h 2018-04-03 17:58:48 UTC (rev 230210)
@@ -70,7 +70,7 @@
WTF::CompletionHandler<void(const WebCore::ResourceError&, const WebCore::ResourceResponse&)> m_completionHandler;
RefPtr<NetworkDataTask> m_task;
WebCore::Timer m_timeoutTimer;
- UniqueRef<NetworkLoadChecker> m_networkLoadChecker;
+ Ref<NetworkLoadChecker> m_networkLoadChecker;
std::optional<WebCore::ResourceRequest> m_lastRedirectionRequest;
};
Modified: trunk/Source/WebKit/Scripts/webkit/messages.py (230209 => 230210)
--- trunk/Source/WebKit/Scripts/webkit/messages.py 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/Scripts/webkit/messages.py 2018-04-03 17:58:48 UTC (rev 230210)
@@ -185,6 +185,7 @@
types_by_namespace['IPC'].update([('class', 'Connection')])
no_forward_declaration_types = frozenset([
+ 'String',
'WebCore::DocumentIdentifier',
'WebCore::ServiceWorkerIdentifier',
'WebCore::ServiceWorkerJobIdentifier',
@@ -192,7 +193,7 @@
'WebCore::ServiceWorkerOrClientIdentifier',
'WebCore::ServiceWorkerRegistrationIdentifier',
'WebCore::SWServerConnectionIdentifier',
- 'String',
+ 'WebKit::UserContentControllerIdentifier',
])
for parameter in receiver.iterparameters():
Copied: trunk/Source/WebKit/Shared/UserContentControllerIdentifier.h (from rev 230208, trunk/Source/WebKit/Shared/WebPageGroupData.h) (0 => 230210)
--- trunk/Source/WebKit/Shared/UserContentControllerIdentifier.h (rev 0)
+++ trunk/Source/WebKit/Shared/UserContentControllerIdentifier.h 2018-04-03 17:58:48 UTC (rev 230210)
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2018 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include <wtf/ObjectIdentifier.h>
+
+namespace WebKit {
+
+enum UserContentControllerIdentifierType { };
+using UserContentControllerIdentifier = ObjectIdentifier<UserContentControllerIdentifierType>;
+
+}
Modified: trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp (230209 => 230210)
--- trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp 2018-04-03 17:58:48 UTC (rev 230210)
@@ -179,8 +179,13 @@
return std::nullopt;
if (!decoder.decode(parameters.highestUsedBackForwardItemID))
return std::nullopt;
- if (!decoder.decode(parameters.userContentControllerID))
+
+ std::optional<UserContentControllerIdentifier> userContentControllerIdentifier;
+ decoder >> userContentControllerIdentifier;
+ if (!userContentControllerIdentifier)
return std::nullopt;
+ parameters.userContentControllerID = *userContentControllerIdentifier;
+
if (!decoder.decode(parameters.visitedLinkTableID))
return std::nullopt;
if (!decoder.decode(parameters.websiteDataStoreID))
Modified: trunk/Source/WebKit/Shared/WebPageCreationParameters.h (230209 => 230210)
--- trunk/Source/WebKit/Shared/WebPageCreationParameters.h 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/Shared/WebPageCreationParameters.h 2018-04-03 17:58:48 UTC (rev 230210)
@@ -98,7 +98,7 @@
PAL::SessionID sessionID;
uint64_t highestUsedBackForwardItemID;
- uint64_t userContentControllerID;
+ UserContentControllerIdentifier userContentControllerID;
uint64_t visitedLinkTableID;
uint64_t websiteDataStoreID;
bool canRunBeforeUnloadConfirmPanel;
Modified: trunk/Source/WebKit/Shared/WebPageGroupData.cpp (230209 => 230210)
--- trunk/Source/WebKit/Shared/WebPageGroupData.cpp 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/Shared/WebPageGroupData.cpp 2018-04-03 17:58:48 UTC (rev 230210)
@@ -53,10 +53,11 @@
bool visibleToHistoryClient;
if (!decoder.decode(visibleToHistoryClient))
return std::nullopt;
- uint64_t userContentControllerIdentifier;
- if (!decoder.decode(userContentControllerIdentifier))
+ std::optional<UserContentControllerIdentifier> userContentControllerIdentifier;
+ decoder >> userContentControllerIdentifier;
+ if (!userContentControllerIdentifier)
return std::nullopt;
- return { { id, pageGroupID, visibleToInjectedBundle, visibleToHistoryClient, userContentControllerIdentifier } };
+ return { { id, pageGroupID, visibleToInjectedBundle, visibleToHistoryClient, *userContentControllerIdentifier } };
}
} // namespace WebKit
Modified: trunk/Source/WebKit/Shared/WebPageGroupData.h (230209 => 230210)
--- trunk/Source/WebKit/Shared/WebPageGroupData.h 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/Shared/WebPageGroupData.h 2018-04-03 17:58:48 UTC (rev 230210)
@@ -25,6 +25,7 @@
#pragma once
+#include "UserContentControllerIdentifier.h"
#include <wtf/text/WTFString.h>
namespace IPC {
@@ -43,7 +44,7 @@
bool visibleToInjectedBundle;
bool visibleToHistoryClient;
- uint64_t userContentControllerIdentifier;
+ UserContentControllerIdentifier userContentControllerIdentifier;
};
} // namespace WebKit
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (230209 => 230210)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp 2018-04-03 17:58:48 UTC (rev 230210)
@@ -26,6 +26,7 @@
#include "config.h"
#include "NetworkProcessProxy.h"
+#include "APIContentRuleList.h"
#include "AuthenticationChallengeProxy.h"
#include "DownloadProxyMessages.h"
#if ENABLE(LEGACY_CUSTOM_PROTOCOL_MANAGER)
@@ -32,13 +33,16 @@
#include "LegacyCustomProtocolManagerProxyMessages.h"
#endif
#include "Logging.h"
+#include "NetworkContentRuleListManagerMessages.h"
#include "NetworkProcessCreationParameters.h"
#include "NetworkProcessMessages.h"
#include "SandboxExtension.h"
#include "StorageProcessMessages.h"
+#include "WebCompiledContentRuleList.h"
#include "WebPageProxy.h"
#include "WebProcessMessages.h"
#include "WebProcessPool.h"
+#include "WebUserContentControllerProxy.h"
#include "WebsiteData.h"
#include <wtf/CompletionHandler.h>
@@ -85,6 +89,10 @@
ASSERT(m_pendingFetchWebsiteDataCallbacks.isEmpty());
ASSERT(m_pendingDeleteWebsiteDataCallbacks.isEmpty());
ASSERT(m_pendingDeleteWebsiteDataForOriginsCallbacks.isEmpty());
+#if ENABLE(CONTENT_EXTENSIONS)
+ for (auto* proxy : m_webUserContentControllerProxies)
+ proxy->removeNetworkProcess(*this);
+#endif
}
void NetworkProcessProxy::getLaunchOptions(ProcessLauncher::LaunchOptions& launchOptions)
@@ -540,4 +548,28 @@
}
}
+
+#if ENABLE(CONTENT_EXTENSIONS)
+void NetworkProcessProxy::contentExtensionRules(UserContentControllerIdentifier identifier)
+{
+ if (auto* webUserContentControllerProxy = WebUserContentControllerProxy::get(identifier)) {
+ m_webUserContentControllerProxies.add(webUserContentControllerProxy);
+ webUserContentControllerProxy->addNetworkProcess(*this);
+
+ auto rules = WTF::map(webUserContentControllerProxy->contentExtensionRules(), [](auto&& keyValue) -> std::pair<String, WebCompiledContentRuleListData> {
+ return std::make_pair(keyValue.value->name(), keyValue.value->compiledRuleList().data());
+ });
+ send(Messages::NetworkContentRuleListManager::AddContentRuleLists { identifier, rules }, 0);
+ return;
+ }
+ send(Messages::NetworkContentRuleListManager::AddContentRuleLists { identifier, { } }, 0);
+}
+
+void NetworkProcessProxy::didDestroyWebUserContentControllerProxy(WebUserContentControllerProxy& proxy)
+{
+ send(Messages::NetworkContentRuleListManager::Remove { proxy.identifier() }, 0);
+ m_webUserContentControllerProxies.remove(&proxy);
+}
+#endif
+
} // namespace WebKit
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h (230209 => 230210)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h 2018-04-03 17:58:48 UTC (rev 230210)
@@ -33,6 +33,7 @@
#include "ProcessLauncher.h"
#include "ProcessThrottler.h"
#include "ProcessThrottlerClient.h"
+#include "UserContentControllerIdentifier.h"
#include "WebProcessProxyMessages.h"
#include <memory>
#include <wtf/Deque.h>
@@ -59,6 +60,7 @@
enum class WebsiteDataFetchOption;
enum class WebsiteDataType;
struct NetworkProcessCreationParameters;
+class WebUserContentControllerProxy;
struct WebsiteData;
class NetworkProcessProxy : public ChildProcessProxy, private ProcessThrottlerClient {
@@ -94,6 +96,10 @@
ProcessThrottler& throttler() { return m_throttler; }
WebProcessPool& processPool() { return m_processPool; }
+#if ENABLE(CONTENT_EXTENSIONS)
+ void didDestroyWebUserContentControllerProxy(WebUserContentControllerProxy&);
+#endif
+
private:
NetworkProcessProxy(WebProcessPool&);
@@ -139,6 +145,10 @@
void allStorageAccessEntriesResult(Vector<String>&& domains, uint64_t contextId);
#endif
+#if ENABLE(CONTENT_EXTENSIONS)
+ void contentExtensionRules(UserContentControllerIdentifier);
+#endif
+
// ProcessLauncher::Client
void didFinishLaunching(ProcessLauncher*, IPC::Connection::Identifier) override;
@@ -161,6 +171,10 @@
HashMap<uint64_t, CompletionHandler<void(bool success)>> m_writeBlobToFilePathCallbackMap;
HashMap<uint64_t, WTF::CompletionHandler<void(bool wasGranted)>> m_storageAccessResponseCallbackMap;
HashMap<uint64_t, CompletionHandler<void(Vector<String>&& domains)>> m_allStorageAccessEntriesCallbackMap;
+
+#if ENABLE(CONTENT_EXTENSIONS)
+ HashSet<WebUserContentControllerProxy*> m_webUserContentControllerProxies;
+#endif
};
} // namespace WebKit
Modified: trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in (230209 => 230210)
--- trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in 2018-04-03 17:58:48 UTC (rev 230210)
@@ -47,4 +47,8 @@
#if HAVE(CFNETWORK_STORAGE_PARTITIONING)
StorageAccessRequestResult(bool wasGranted, uint64_t contextId)
AllStorageAccessEntriesResult(Vector<String> domains, uint64_t contextId)
+
+#if ENABLE(CONTENT_EXTENSIONS)
+ ContentExtensionRules(WebKit::UserContentControllerIdentifier identifier)
+#endif
}
Modified: trunk/Source/WebKit/UIProcess/UserContent/WebUserContentControllerProxy.cpp (230209 => 230210)
--- trunk/Source/WebKit/UIProcess/UserContent/WebUserContentControllerProxy.cpp 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/UIProcess/UserContent/WebUserContentControllerProxy.cpp 2018-04-03 17:58:48 UTC (rev 230210)
@@ -31,6 +31,8 @@
#include "APIUserScript.h"
#include "APIUserStyleSheet.h"
#include "DataReference.h"
+#include "NetworkContentRuleListManagerMessages.h"
+#include "NetworkProcessProxy.h"
#include "WebPageCreationParameters.h"
#include "WebProcessProxy.h"
#include "WebScriptMessageHandler.h"
@@ -46,18 +48,37 @@
namespace WebKit {
+static HashMap<UserContentControllerIdentifier, WebUserContentControllerProxy*>& webUserContentControllerProxies()
+{
+ static NeverDestroyed<HashMap<UserContentControllerIdentifier, WebUserContentControllerProxy*>> proxies;
+ return proxies;
+}
+
+
+WebUserContentControllerProxy* WebUserContentControllerProxy::get(UserContentControllerIdentifier identifier)
+{
+ return webUserContentControllerProxies().get(identifier);
+}
+
WebUserContentControllerProxy::WebUserContentControllerProxy()
- : m_userScripts(API::Array::create())
+ : m_identifier(generateObjectIdentifier<UserContentControllerIdentifierType>())
+ , m_userScripts(API::Array::create())
, m_userStyleSheets(API::Array::create())
{
+ webUserContentControllerProxies().add(m_identifier, this);
}
WebUserContentControllerProxy::~WebUserContentControllerProxy()
{
- for (WebProcessProxy* process : m_processes) {
- process->removeMessageReceiver(Messages::WebUserContentControllerProxy::messageReceiverName(), identifier());
+ webUserContentControllerProxies().remove(m_identifier);
+ for (auto* process : m_processes) {
+ process->removeMessageReceiver(Messages::WebUserContentControllerProxy::messageReceiverName(), identifier().toUInt64());
process->didDestroyWebUserContentControllerProxy(*this);
}
+#if ENABLE(CONTENT_EXTENSIONS)
+ for (auto* process : m_networkProcesses)
+ process->didDestroyWebUserContentControllerProxy(*this);
+#endif
}
void WebUserContentControllerProxy::addProcess(WebProcessProxy& webProcessProxy, WebPageCreationParameters& parameters)
@@ -65,7 +86,7 @@
if (!m_processes.add(&webProcessProxy).isNewEntry)
return;
- webProcessProxy.addMessageReceiver(Messages::WebUserContentControllerProxy::messageReceiverName(), identifier(), *this);
+ webProcessProxy.addMessageReceiver(Messages::WebUserContentControllerProxy::messageReceiverName(), identifier().toUInt64(), *this);
ASSERT(parameters.userContentWorlds.isEmpty());
for (const auto& world : m_userContentWorlds)
@@ -95,7 +116,7 @@
ASSERT(m_processes.contains(&webProcessProxy));
m_processes.remove(&webProcessProxy);
- webProcessProxy.removeMessageReceiver(Messages::WebUserContentControllerProxy::messageReceiverName(), identifier());
+ webProcessProxy.removeMessageReceiver(Messages::WebUserContentControllerProxy::messageReceiverName(), identifier().toUInt64());
}
void WebUserContentControllerProxy::addUserContentWorldUse(API::UserContentWorld& world)
@@ -106,7 +127,7 @@
auto addResult = m_userContentWorlds.add(&world);
if (addResult.isNewEntry) {
for (WebProcessProxy* process : m_processes)
- process->send(Messages::WebUserContentController::AddUserContentWorlds({ std::make_pair(world.identifier(), world.name()) }), identifier());
+ process->send(Messages::WebUserContentController::AddUserContentWorlds({ std::make_pair(world.identifier(), world.name()) }), identifier().toUInt64());
}
}
@@ -130,7 +151,7 @@
{
if (shouldSendRemoveUserContentWorldsMessage(world, numberOfUsesToRemove)) {
for (WebProcessProxy* process : m_processes)
- process->send(Messages::WebUserContentController::RemoveUserContentWorlds({ world.identifier() }), identifier());
+ process->send(Messages::WebUserContentController::RemoveUserContentWorlds({ world.identifier() }), identifier().toUInt64());
}
}
@@ -143,7 +164,7 @@
}
for (WebProcessProxy* process : m_processes)
- process->send(Messages::WebUserContentController::RemoveUserContentWorlds(worldsToRemove), identifier());
+ process->send(Messages::WebUserContentController::RemoveUserContentWorlds(worldsToRemove), identifier().toUInt64());
}
void WebUserContentControllerProxy::addUserScript(API::UserScript& userScript)
@@ -155,7 +176,7 @@
m_userScripts->elements().append(&userScript);
for (WebProcessProxy* process : m_processes)
- process->send(Messages::WebUserContentController::AddUserScripts({ { userScript.identifier(), world->identifier(), userScript.userScript() } }), identifier());
+ process->send(Messages::WebUserContentController::AddUserScripts({ { userScript.identifier(), world->identifier(), userScript.userScript() } }), identifier().toUInt64());
}
void WebUserContentControllerProxy::removeUserScript(API::UserScript& userScript)
@@ -163,7 +184,7 @@
Ref<API::UserContentWorld> world = userScript.userContentWorld();
for (WebProcessProxy* process : m_processes)
- process->send(Messages::WebUserContentController::RemoveUserScript(world->identifier(), userScript.identifier()), identifier());
+ process->send(Messages::WebUserContentController::RemoveUserScript(world->identifier(), userScript.identifier()), identifier().toUInt64());
m_userScripts->elements().removeAll(&userScript);
@@ -173,7 +194,7 @@
void WebUserContentControllerProxy::removeAllUserScripts(API::UserContentWorld& world)
{
for (WebProcessProxy* process : m_processes)
- process->send(Messages::WebUserContentController::RemoveAllUserScripts({ world.identifier() }), identifier());
+ process->send(Messages::WebUserContentController::RemoveAllUserScripts({ world.identifier() }), identifier().toUInt64());
unsigned userScriptsRemoved = m_userScripts->removeAllOfTypeMatching<API::UserScript>([&](const auto& userScript) {
return &userScript->userContentWorld() == &world;
@@ -194,7 +215,7 @@
worldIdentifiers.uncheckedAppend(worldCountPair.key->identifier());
for (WebProcessProxy* process : m_processes)
- process->send(Messages::WebUserContentController::RemoveAllUserScripts(worldIdentifiers), identifier());
+ process->send(Messages::WebUserContentController::RemoveAllUserScripts(worldIdentifiers), identifier().toUInt64());
m_userScripts->elements().clear();
@@ -210,7 +231,7 @@
m_userStyleSheets->elements().append(&userStyleSheet);
for (WebProcessProxy* process : m_processes)
- process->send(Messages::WebUserContentController::AddUserStyleSheets({ { userStyleSheet.identifier(), world->identifier(), userStyleSheet.userStyleSheet() } }), identifier());
+ process->send(Messages::WebUserContentController::AddUserStyleSheets({ { userStyleSheet.identifier(), world->identifier(), userStyleSheet.userStyleSheet() } }), identifier().toUInt64());
}
void WebUserContentControllerProxy::removeUserStyleSheet(API::UserStyleSheet& userStyleSheet)
@@ -218,7 +239,7 @@
Ref<API::UserContentWorld> world = userStyleSheet.userContentWorld();
for (WebProcessProxy* process : m_processes)
- process->send(Messages::WebUserContentController::RemoveUserStyleSheet(world->identifier(), userStyleSheet.identifier()), identifier());
+ process->send(Messages::WebUserContentController::RemoveUserStyleSheet(world->identifier(), userStyleSheet.identifier()), identifier().toUInt64());
m_userStyleSheets->elements().removeAll(&userStyleSheet);
@@ -228,7 +249,7 @@
void WebUserContentControllerProxy::removeAllUserStyleSheets(API::UserContentWorld& world)
{
for (WebProcessProxy* process : m_processes)
- process->send(Messages::WebUserContentController::RemoveAllUserStyleSheets({ world.identifier() }), identifier());
+ process->send(Messages::WebUserContentController::RemoveAllUserStyleSheets({ world.identifier() }), identifier().toUInt64());
unsigned userStyleSheetsRemoved = m_userStyleSheets->removeAllOfTypeMatching<API::UserStyleSheet>([&](const auto& userStyleSheet) {
return &userStyleSheet->userContentWorld() == &world;
@@ -249,7 +270,7 @@
worldIdentifiers.uncheckedAppend(worldCountPair.key->identifier());
for (WebProcessProxy* process : m_processes)
- process->send(Messages::WebUserContentController::RemoveAllUserStyleSheets(worldIdentifiers), identifier());
+ process->send(Messages::WebUserContentController::RemoveAllUserStyleSheets(worldIdentifiers), identifier().toUInt64());
m_userStyleSheets->elements().clear();
@@ -270,7 +291,7 @@
m_scriptMessageHandlers.add(handler.identifier(), &handler);
for (WebProcessProxy* process : m_processes)
- process->send(Messages::WebUserContentController::AddUserScriptMessageHandlers({ { handler.identifier(), world->identifier(), handler.name() } }), identifier());
+ process->send(Messages::WebUserContentController::AddUserScriptMessageHandlers({ { handler.identifier(), world->identifier(), handler.name() } }), identifier().toUInt64());
return true;
}
@@ -280,7 +301,7 @@
for (auto it = m_scriptMessageHandlers.begin(), end = m_scriptMessageHandlers.end(); it != end; ++it) {
if (it->value->name() == name && &it->value->userContentWorld() == &world) {
for (WebProcessProxy* process : m_processes)
- process->send(Messages::WebUserContentController::RemoveUserScriptMessageHandler(world.identifier(), it->value->identifier()), identifier());
+ process->send(Messages::WebUserContentController::RemoveUserScriptMessageHandler(world.identifier(), it->value->identifier()), identifier().toUInt64());
m_scriptMessageHandlers.remove(it);
@@ -293,7 +314,7 @@
void WebUserContentControllerProxy::removeAllUserMessageHandlers(API::UserContentWorld& world)
{
for (WebProcessProxy* process : m_processes)
- process->send(Messages::WebUserContentController::RemoveAllUserScriptMessageHandlers({ world.identifier() }), identifier());
+ process->send(Messages::WebUserContentController::RemoveAllUserScriptMessageHandlers({ world.identifier() }), identifier().toUInt64());
unsigned numberRemoved = 0;
m_scriptMessageHandlers.removeIf([&](auto& entry) {
@@ -330,8 +351,11 @@
auto pair = std::make_pair(contentRuleList.name(), contentRuleList.compiledRuleList().data());
- for (WebProcessProxy* process : m_processes)
- process->send(Messages::WebUserContentController::AddContentRuleLists({ pair }), identifier());
+ for (auto* process : m_processes)
+ process->send(Messages::WebUserContentController::AddContentRuleLists({ pair }), identifier().toUInt64());
+
+ for (auto* process : m_networkProcesses)
+ process->send(Messages::NetworkContentRuleListManager::AddContentRuleLists { identifier(), { pair } }, 0);
}
void WebUserContentControllerProxy::removeContentRuleList(const String& name)
@@ -338,8 +362,11 @@
{
m_contentRuleLists.remove(name);
- for (WebProcessProxy* process : m_processes)
- process->send(Messages::WebUserContentController::RemoveContentRuleList(name), identifier());
+ for (auto* process : m_processes)
+ process->send(Messages::WebUserContentController::RemoveContentRuleList(name), identifier().toUInt64());
+
+ for (auto* process : m_networkProcesses)
+ process->send(Messages::NetworkContentRuleListManager::RemoveContentRuleList { identifier(), name }, 0);
}
void WebUserContentControllerProxy::removeAllContentRuleLists()
@@ -346,8 +373,11 @@
{
m_contentRuleLists.clear();
- for (WebProcessProxy* process : m_processes)
- process->send(Messages::WebUserContentController::RemoveAllContentRuleLists(), identifier());
+ for (auto* process : m_processes)
+ process->send(Messages::WebUserContentController::RemoveAllContentRuleLists(), identifier().toUInt64());
+
+ for (auto* process : m_networkProcesses)
+ process->send(Messages::NetworkContentRuleListManager::RemoveAllContentRuleLists { identifier() }, 0);
}
#endif
Modified: trunk/Source/WebKit/UIProcess/UserContent/WebUserContentControllerProxy.h (230209 => 230210)
--- trunk/Source/WebKit/UIProcess/UserContent/WebUserContentControllerProxy.h 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/UIProcess/UserContent/WebUserContentControllerProxy.h 2018-04-03 17:58:48 UTC (rev 230210)
@@ -27,11 +27,11 @@
#include "APIObject.h"
#include "MessageReceiver.h"
+#include "UserContentControllerIdentifier.h"
#include <wtf/Forward.h>
#include <wtf/HashCountedSet.h>
#include <wtf/HashMap.h>
#include <wtf/HashSet.h>
-#include <wtf/Identified.h>
#include <wtf/Ref.h>
#include <wtf/RefCounted.h>
#include <wtf/text/StringHash.h>
@@ -54,20 +54,23 @@
namespace WebKit {
+class NetworkProcessProxy;
class WebProcessProxy;
class WebScriptMessageHandler;
struct FrameInfoData;
struct WebPageCreationParameters;
-class WebUserContentControllerProxy : public API::ObjectImpl<API::Object::Type::UserContentController>, private IPC::MessageReceiver, public Identified<WebUserContentControllerProxy> {
+class WebUserContentControllerProxy : public API::ObjectImpl<API::Object::Type::UserContentController>, private IPC::MessageReceiver {
public:
static Ref<WebUserContentControllerProxy> create()
{
return adoptRef(*new WebUserContentControllerProxy);
- }
- explicit WebUserContentControllerProxy();
+ }
+ WebUserContentControllerProxy();
~WebUserContentControllerProxy();
+ static WebUserContentControllerProxy* get(UserContentControllerIdentifier);
+
void addProcess(WebProcessProxy&, WebPageCreationParameters&);
void removeProcess(WebProcessProxy&);
@@ -91,11 +94,17 @@
void removeAllUserMessageHandlers(API::UserContentWorld&);
#if ENABLE(CONTENT_EXTENSIONS)
+ void addNetworkProcess(NetworkProcessProxy& proxy) { m_networkProcesses.remove(&proxy); }
+ void removeNetworkProcess(NetworkProcessProxy& proxy) { m_networkProcesses.add(&proxy); }
+
void addContentRuleList(API::ContentRuleList&);
void removeContentRuleList(const String&);
void removeAllContentRuleLists();
+ const HashMap<String, RefPtr<API::ContentRuleList>>& contentExtensionRules() { return m_contentRuleLists; }
#endif
+ UserContentControllerIdentifier identifier() const { return m_identifier; }
+
private:
// IPC::MessageReceiver.
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
@@ -107,7 +116,8 @@
void removeUserContentWorldUses(HashCountedSet<RefPtr<API::UserContentWorld>>&);
bool shouldSendRemoveUserContentWorldsMessage(API::UserContentWorld&, unsigned numberOfUsesToRemove);
- HashSet<WebProcessProxy*> m_processes;
+ UserContentControllerIdentifier m_identifier;
+ HashSet<WebProcessProxy*> m_processes;
Ref<API::Array> m_userScripts;
Ref<API::Array> m_userStyleSheets;
HashMap<uint64_t, RefPtr<WebScriptMessageHandler>> m_scriptMessageHandlers;
@@ -114,6 +124,7 @@
HashCountedSet<RefPtr<API::UserContentWorld>> m_userContentWorlds;
#if ENABLE(CONTENT_EXTENSIONS)
+ HashSet<NetworkProcessProxy*> m_networkProcesses;
HashMap<String, RefPtr<API::ContentRuleList>> m_contentRuleLists;
#endif
};
Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (230209 => 230210)
--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj 2018-04-03 17:58:48 UTC (rev 230210)
@@ -958,6 +958,7 @@
41FAF5F51E3C0649001AE678 /* WebRTCResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 41FAF5F41E3C0641001AE678 /* WebRTCResolver.h */; };
41FAF5F81E3C1021001AE678 /* LibWebRTCResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 41FAF5F61E3C0B47001AE678 /* LibWebRTCResolver.h */; };
41FAF5F91E3C1025001AE678 /* LibWebRTCResolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41FAF5F71E3C0B47001AE678 /* LibWebRTCResolver.cpp */; };
+ 41FBE826206DF7FA000F0741 /* NetworkContentRuleListManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41FBE824206DA79C000F0741 /* NetworkContentRuleListManager.cpp */; };
4450AEC01DC3FAE5009943F2 /* SharedMemoryCocoa.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4450AEBF1DC3FAE5009943F2 /* SharedMemoryCocoa.cpp */; };
460F488F1F996F7100CF4B87 /* WebSWContextManagerConnectionMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 460F488D1F996F6C00CF4B87 /* WebSWContextManagerConnectionMessageReceiver.cpp */; };
460F48901F996F7100CF4B87 /* WebSWContextManagerConnectionMessages.h in Headers */ = {isa = PBXBuildFile; fileRef = 460F488E1F996F6C00CF4B87 /* WebSWContextManagerConnectionMessages.h */; };
@@ -1196,6 +1197,7 @@
52D5A1B01C57495A00DE34A3 /* VideoFullscreenManagerProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 52D5A1AA1C57494E00DE34A3 /* VideoFullscreenManagerProxy.h */; };
52D5A1B11C57496200DE34A3 /* VideoFullscreenManagerProxy.mm in Sources */ = {isa = PBXBuildFile; fileRef = 52D5A1AC1C57494E00DE34A3 /* VideoFullscreenManagerProxy.mm */; };
52D5A1B71C574A0200DE34A3 /* VideoFullscreenManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 52D5A1B41C5749F200DE34A3 /* VideoFullscreenManager.mm */; };
+ 52F060E11654318500F3281B /* NetworkContentRuleListManagerMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 52F060DD1654317500F3281B /* NetworkContentRuleListManagerMessageReceiver.cpp */; };
5302583B1DCBBD2200DA89C2 /* NetworkCaptureResource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5302582E1DCBBD1D00DA89C2 /* NetworkCaptureResource.cpp */; };
5302583C1DCBBD2200DA89C2 /* NetworkCaptureResource.h in Headers */ = {isa = PBXBuildFile; fileRef = 5302582F1DCBBD1D00DA89C2 /* NetworkCaptureResource.h */; };
5302583D1DCBBD2200DA89C2 /* NetworkCaptureEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 530258301DCBBD1D00DA89C2 /* NetworkCaptureEvent.cpp */; };
@@ -3342,6 +3344,10 @@
41FAF5F41E3C0641001AE678 /* WebRTCResolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebRTCResolver.h; path = Network/webrtc/WebRTCResolver.h; sourceTree = "<group>"; };
41FAF5F61E3C0B47001AE678 /* LibWebRTCResolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LibWebRTCResolver.h; path = Network/webrtc/LibWebRTCResolver.h; sourceTree = "<group>"; };
41FAF5F71E3C0B47001AE678 /* LibWebRTCResolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LibWebRTCResolver.cpp; path = Network/webrtc/LibWebRTCResolver.cpp; sourceTree = "<group>"; };
+ 41FBE821206D87F6000F0741 /* UserContentControllerIdentifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserContentControllerIdentifier.h; sourceTree = "<group>"; };
+ 41FBE822206DA79C000F0741 /* NetworkContentRuleListManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkContentRuleListManager.h; path = NetworkProcess/NetworkContentRuleListManager.h; sourceTree = "<group>"; };
+ 41FBE823206DA79C000F0741 /* NetworkContentRuleListManager.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = NetworkContentRuleListManager.messages.in; path = NetworkProcess/NetworkContentRuleListManager.messages.in; sourceTree = "<group>"; };
+ 41FBE824206DA79C000F0741 /* NetworkContentRuleListManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkContentRuleListManager.cpp; path = NetworkProcess/NetworkContentRuleListManager.cpp; sourceTree = "<group>"; };
4450AEBF1DC3FAE5009943F2 /* SharedMemoryCocoa.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SharedMemoryCocoa.cpp; sourceTree = "<group>"; };
460F488D1F996F6C00CF4B87 /* WebSWContextManagerConnectionMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSWContextManagerConnectionMessageReceiver.cpp; sourceTree = "<group>"; };
460F488E1F996F6C00CF4B87 /* WebSWContextManagerConnectionMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSWContextManagerConnectionMessages.h; sourceTree = "<group>"; };
@@ -3624,6 +3630,7 @@
52D5A1B21C5749F200DE34A3 /* VideoFullscreenManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VideoFullscreenManager.h; sourceTree = "<group>"; };
52D5A1B31C5749F200DE34A3 /* VideoFullscreenManager.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = VideoFullscreenManager.messages.in; sourceTree = "<group>"; };
52D5A1B41C5749F200DE34A3 /* VideoFullscreenManager.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = VideoFullscreenManager.mm; sourceTree = "<group>"; };
+ 52F060DD1654317500F3281B /* NetworkContentRuleListManagerMessageReceiver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkContentRuleListManagerMessageReceiver.cpp; sourceTree = "<group>"; };
5302582E1DCBBD1D00DA89C2 /* NetworkCaptureResource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkCaptureResource.cpp; path = NetworkProcess/capture/NetworkCaptureResource.cpp; sourceTree = "<group>"; };
5302582F1DCBBD1D00DA89C2 /* NetworkCaptureResource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkCaptureResource.h; path = NetworkProcess/capture/NetworkCaptureResource.h; sourceTree = "<group>"; };
530258301DCBBD1D00DA89C2 /* NetworkCaptureEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkCaptureEvent.cpp; path = NetworkProcess/capture/NetworkCaptureEvent.cpp; sourceTree = "<group>"; };
@@ -5271,6 +5278,7 @@
1A64245C12DE29A100CAAE2C /* UpdateInfo.h */,
5C19A51E1FD0B14600EEA323 /* URLSchemeTaskParameters.cpp */,
5C19A51F1FD0B14700EEA323 /* URLSchemeTaskParameters.h */,
+ 41FBE821206D87F6000F0741 /* UserContentControllerIdentifier.h */,
1AC1336518565B5700F3EC05 /* UserData.cpp */,
1AC1336618565B5700F3EC05 /* UserData.h */,
2684054A18B866FF0022C38B /* VisibleContentRectUpdateInfo.cpp */,
@@ -6359,6 +6367,9 @@
513A16491630A9BF005D7D22 /* NetworkConnectionToWebProcess.cpp */,
513A164A1630A9BF005D7D22 /* NetworkConnectionToWebProcess.h */,
513A164B1630A9BF005D7D22 /* NetworkConnectionToWebProcess.messages.in */,
+ 41FBE824206DA79C000F0741 /* NetworkContentRuleListManager.cpp */,
+ 41FBE822206DA79C000F0741 /* NetworkContentRuleListManager.h */,
+ 41FBE823206DA79C000F0741 /* NetworkContentRuleListManager.messages.in */,
46DF06391F3905E5001980BB /* NetworkCORSPreflightChecker.cpp */,
46DF063A1F3905E5001980BB /* NetworkCORSPreflightChecker.h */,
532159511DBAE6FC0054AA3C /* NetworkDataTask.cpp */,
@@ -8244,6 +8255,7 @@
2984F57B164B915F004BC0C6 /* LegacyCustomProtocolManagerProxyMessages.h */,
51DD9F2616367DA2001578E9 /* NetworkConnectionToWebProcessMessageReceiver.cpp */,
51DD9F2716367DA2001578E9 /* NetworkConnectionToWebProcessMessages.h */,
+ 52F060DD1654317500F3281B /* NetworkContentRuleListManagerMessageReceiver.cpp */,
517CF0E1163A486C00C2950E /* NetworkProcessConnectionMessageReceiver.cpp */,
517CF0E2163A486C00C2950E /* NetworkProcessConnectionMessages.h */,
51ACC9341628064800342550 /* NetworkProcessMessageReceiver.cpp */,
@@ -10659,6 +10671,8 @@
5302583B1DCBBD2200DA89C2 /* NetworkCaptureResource.cpp in Sources */,
513A164C1630A9BF005D7D22 /* NetworkConnectionToWebProcess.cpp in Sources */,
51DD9F2816367DA2001578E9 /* NetworkConnectionToWebProcessMessageReceiver.cpp in Sources */,
+ 41FBE826206DF7FA000F0741 /* NetworkContentRuleListManager.cpp in Sources */,
+ 52F060E11654318500F3281B /* NetworkContentRuleListManagerMessageReceiver.cpp in Sources */,
46DF063B1F3905F8001980BB /* NetworkCORSPreflightChecker.cpp in Sources */,
532159541DBAE71D0054AA3C /* NetworkDataTask.cpp in Sources */,
53BA47D01DC2EF5E004DF4AD /* NetworkDataTaskBlob.cpp in Sources */,
Modified: trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp (230209 => 230210)
--- trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp 2018-04-03 17:58:48 UTC (rev 230210)
@@ -456,6 +456,9 @@
return;
}
+ WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame.loader().client());
+ WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : nullptr;
+
NetworkResourceLoadParameters loadParameters;
loadParameters.identifier = generateLoadIdentifier();
loadParameters.request = request;
@@ -472,13 +475,11 @@
#if ENABLE(CONTENT_EXTENSIONS)
loadParameters.mainDocumentURL = document->topDocument().url();
-
- if (auto* documentLoader = frame.loader().documentLoader()) {
- if (auto* page = frame.page()) {
- page->userContentProvider().forEachContentExtension([&loadParameters](const String& identifier, ContentExtensions::ContentExtension& contentExtension) {
- loadParameters.contentRuleLists.append(std::make_pair(identifier, static_cast<const WebCompiledContentRuleList&>(contentExtension.compiledExtension()).data()));
- }, *documentLoader);
- }
+ // FIXME: Instead of passing userContentControllerIdentifier, we should just pass webPageId to NetworkProcess.
+ if (auto* page = frame.page()) {
+ WebPage* webPage = webFrame ? webFrame->page() : nullptr;
+ if (webPage)
+ loadParameters.userContentControllerIdentifier = webPage->userContentControllerIdentifier();
}
#endif
Modified: trunk/Source/WebKit/WebProcess/UserContent/WebUserContentController.cpp (230209 => 230210)
--- trunk/Source/WebKit/WebProcess/UserContent/WebUserContentController.cpp 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/WebProcess/UserContent/WebUserContentController.cpp 2018-04-03 17:58:48 UTC (rev 230210)
@@ -50,9 +50,9 @@
namespace WebKit {
-static HashMap<uint64_t, WebUserContentController*>& userContentControllers()
+static HashMap<UserContentControllerIdentifier, WebUserContentController*>& userContentControllers()
{
- static NeverDestroyed<HashMap<uint64_t, WebUserContentController*>> userContentControllers;
+ static NeverDestroyed<HashMap<UserContentControllerIdentifier, WebUserContentController*>> userContentControllers;
return userContentControllers;
}
@@ -66,7 +66,7 @@
return map;
}
-Ref<WebUserContentController> WebUserContentController::getOrCreate(uint64_t identifier)
+Ref<WebUserContentController> WebUserContentController::getOrCreate(UserContentControllerIdentifier identifier)
{
auto& userContentControllerPtr = userContentControllers().add(identifier, nullptr).iterator->value;
if (userContentControllerPtr)
@@ -78,10 +78,10 @@
return userContentController.releaseNonNull();
}
-WebUserContentController::WebUserContentController(uint64_t identifier)
+WebUserContentController::WebUserContentController(UserContentControllerIdentifier identifier)
: m_identifier(identifier)
{
- WebProcess::singleton().addMessageReceiver(Messages::WebUserContentController::messageReceiverName(), m_identifier, *this);
+ WebProcess::singleton().addMessageReceiver(Messages::WebUserContentController::messageReceiverName(), m_identifier.toUInt64(), *this);
}
WebUserContentController::~WebUserContentController()
@@ -88,7 +88,7 @@
{
ASSERT(userContentControllers().contains(m_identifier));
- WebProcess::singleton().removeMessageReceiver(Messages::WebUserContentController::messageReceiverName(), m_identifier);
+ WebProcess::singleton().removeMessageReceiver(Messages::WebUserContentController::messageReceiverName(), m_identifier.toUInt64());
userContentControllers().remove(m_identifier);
}
@@ -242,7 +242,7 @@
if (!webPage)
return;
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebUserContentControllerProxy::DidPostMessage(webPage->pageID(), webFrame->info(), m_identifier, IPC::DataReference(value->data())), m_controller->identifier());
+ WebProcess::singleton().parentProcessConnection()->send(Messages::WebUserContentControllerProxy::DidPostMessage(webPage->pageID(), webFrame->info(), m_identifier, IPC::DataReference(value->data())), m_controller->identifier().toUInt64());
}
RefPtr<WebUserContentController> m_controller;
Modified: trunk/Source/WebKit/WebProcess/UserContent/WebUserContentController.h (230209 => 230210)
--- trunk/Source/WebKit/WebProcess/UserContent/WebUserContentController.h 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/WebProcess/UserContent/WebUserContentController.h 2018-04-03 17:58:48 UTC (rev 230210)
@@ -26,6 +26,7 @@
#pragma once
#include "MessageReceiver.h"
+#include "UserContentControllerIdentifier.h"
#include "WebScriptMessageHandler.h"
#include "WebUserContentControllerDataTypes.h"
#include <WebCore/UserContentProvider.h>
@@ -49,10 +50,10 @@
class WebUserContentController final : public WebCore::UserContentProvider, private IPC::MessageReceiver {
public:
- static Ref<WebUserContentController> getOrCreate(uint64_t identifier);
+ static Ref<WebUserContentController> getOrCreate(UserContentControllerIdentifier);
virtual ~WebUserContentController();
- uint64_t identifier() { return m_identifier; }
+ UserContentControllerIdentifier identifier() { return m_identifier; }
void addUserScript(InjectedBundleScriptWorld&, WebCore::UserScript&&);
void removeUserScriptWithURL(InjectedBundleScriptWorld&, const WebCore::URL&);
@@ -71,7 +72,7 @@
#endif
private:
- explicit WebUserContentController(uint64_t identifier);
+ explicit WebUserContentController(UserContentControllerIdentifier);
// WebCore::UserContentProvider
void forEachUserScript(Function<void(WebCore::DOMWrapperWorld&, const WebCore::UserScript&)>&&) const final;
@@ -111,7 +112,7 @@
void removeUserScriptMessageHandlerInternal(InjectedBundleScriptWorld&, uint64_t userScriptMessageHandlerIdentifier);
#endif
- uint64_t m_identifier;
+ UserContentControllerIdentifier m_identifier;
typedef HashMap<RefPtr<InjectedBundleScriptWorld>, Vector<std::pair<uint64_t, WebCore::UserScript>>> WorldToUserScriptMap;
WorldToUserScriptMap m_userScripts;
@@ -126,7 +127,6 @@
#if ENABLE(CONTENT_EXTENSIONS)
WebCore::ContentExtensions::ContentExtensionsBackend m_contentExtensionBackend;
#endif
-
};
} // namespace WebKit
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (230209 => 230210)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2018-04-03 17:38:59 UTC (rev 230209)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2018-04-03 17:58:48 UTC (rev 230210)
@@ -46,6 +46,7 @@
#include "SharedMemory.h"
#include "UserData.h"
#include "WebURLSchemeHandler.h"
+#include "WebUserContentController.h"
#include <WebCore/ActivityState.h>
#include <WebCore/DictionaryPopupInfo.h>
#include <WebCore/FrameLoaderTypes.h>
@@ -1069,6 +1070,8 @@
void openGLDisplayMaskChanged(uint32_t displayMask);
#endif
+ UserContentControllerIdentifier userContentControllerIdentifier() const { return m_userContentController->identifier(); }
+
private:
WebPage(uint64_t pageID, WebPageCreationParameters&&);