Changeset 230210 in webkit
- Timestamp:
- Apr 3, 2018 10:58:48 AM (6 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 2 added
- 26 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/CMakeLists.txt
r230152 r230210 108 108 NetworkProcess/NetworkCORSPreflightChecker.cpp 109 109 NetworkProcess/NetworkConnectionToWebProcess.cpp 110 NetworkProcess/NetworkContentRuleListManager.cpp 110 111 NetworkProcess/NetworkDataTask.cpp 111 112 NetworkProcess/NetworkDataTaskBlob.cpp … … 620 621 621 622 NetworkProcess/NetworkConnectionToWebProcess.messages.in 623 NetworkProcess/NetworkContentRuleListManager.messages.in 622 624 NetworkProcess/NetworkProcess.messages.in 623 625 NetworkProcess/NetworkResourceLoader.messages.in -
trunk/Source/WebKit/ChangeLog
r230204 r230210 1 2018-04-03 Youenn Fablet <youenn@apple.com> 2 3 Make NetworkProcess get ContentBlocker information from UIProcess 4 https://bugs.webkit.org/show_bug.cgi?id=184205 5 6 Reviewed by Alex Christensen. 7 8 Make NetworkProcess get content blockers from UIProcess directly. 9 Before that patch, WebProcess sent content blockers to NetworkProcess for each PingLoad. 10 Instead, WebProcess sends the content blocker identifier for each PingLoad and NetworkProcess fetches the content blocker once. 11 12 This is both more efficient than passing them for each PingLoad and safer in the sense 13 that a compromised WebProcess will not be able to bypass any of these. 14 In the future, NetworkProcess should get the content blocker identifier directly from the WebPageID attached to the request. 15 16 Covered by existing beacon+content blocker tests. 17 18 Did some refactoring to add a typed content blocker identifier. 19 Once NetworkProcess fetches a given content blocker, the content blocker will send any modification to NetworkProcess. 20 Introduced NetworkContentRuleListManager to handle the content blockers in NetworkProcess. 21 22 * CMakeLists.txt: 23 * DerivedSources.make: 24 * NetworkProcess/NetworkLoadChecker.cpp: 25 (WebKit::NetworkLoadChecker::checkRequest): 26 (WebKit::NetworkLoadChecker::continueCheckingRequest): 27 (WebKit::NetworkLoadChecker::processContentExtensionRulesForLoad): 28 * NetworkProcess/NetworkLoadChecker.h: 29 (WebKit::NetworkLoadChecker::setContentExtensionController): 30 * NetworkProcess/NetworkProcess.cpp: 31 (WebKit::NetworkProcess::didReceiveMessage): 32 * NetworkProcess/NetworkProcess.h: 33 (WebKit::NetworkProcess::networkUserContentController): 34 * NetworkProcess/NetworkResourceLoadParameters.cpp: 35 (WebKit::NetworkResourceLoadParameters::encode const): 36 (WebKit::NetworkResourceLoadParameters::decode): 37 * NetworkProcess/NetworkResourceLoadParameters.h: 38 * NetworkProcess/NetworkContentRuleListManager.cpp: Added. 39 (WebKit::NetworkContentRuleListManager::contentExtensionsBackend): 40 (WebKit::NetworkContentRuleListManager::addContentRuleLists): 41 (WebKit::NetworkContentRuleListManager::removeContentRuleList): 42 (WebKit::NetworkContentRuleListManager::removeAllContentRuleLists): 43 (WebKit::NetworkContentRuleListManager::remove): 44 * NetworkProcess/NetworkContentRuleListManager.h: Added. 45 * NetworkProcess/NetworkContentRuleListManager.messages.in: Added. 46 * NetworkProcess/PingLoad.cpp: 47 * Scripts/webkit/messages.py: 48 * Shared/UserContentControllerIdentifier.h: Added. 49 * Shared/WebPageCreationParameters.cpp: 50 (WebKit::WebPageCreationParameters::decode): 51 * Shared/WebPageCreationParameters.h: 52 * Shared/WebPageGroupData.cpp: 53 (WebKit::WebPageGroupData::decode): 54 * Shared/WebPageGroupData.h: 55 * UIProcess/Network/NetworkProcessProxy.cpp: 56 (WebKit::NetworkProcessProxy::~NetworkProcessProxy): 57 (WebKit::NetworkProcessProxy::contentExtensionRules): 58 (WebKit::NetworkProcessProxy::didDestroyWebUserContentControllerProxy): 59 * UIProcess/Network/NetworkProcessProxy.h: 60 * UIProcess/Network/NetworkProcessProxy.messages.in: 61 * UIProcess/UserContent/WebUserContentControllerProxy.cpp: 62 (WebKit::WebUserContentControllerProxy::get): 63 (WebKit::WebUserContentControllerProxy::WebUserContentControllerProxy): 64 (WebKit::WebUserContentControllerProxy::~WebUserContentControllerProxy): 65 (WebKit::WebUserContentControllerProxy::addProcess): 66 (WebKit::WebUserContentControllerProxy::removeProcess): 67 (WebKit::WebUserContentControllerProxy::addUserContentWorldUse): 68 (WebKit::WebUserContentControllerProxy::removeUserContentWorldUses): 69 (WebKit::WebUserContentControllerProxy::addUserScript): 70 (WebKit::WebUserContentControllerProxy::removeUserScript): 71 (WebKit::WebUserContentControllerProxy::removeAllUserScripts): 72 (WebKit::WebUserContentControllerProxy::addUserStyleSheet): 73 (WebKit::WebUserContentControllerProxy::removeUserStyleSheet): 74 (WebKit::WebUserContentControllerProxy::removeAllUserStyleSheets): 75 (WebKit::WebUserContentControllerProxy::addUserScriptMessageHandler): 76 (WebKit::WebUserContentControllerProxy::removeUserMessageHandlerForName): 77 (WebKit::WebUserContentControllerProxy::removeAllUserMessageHandlers): 78 (WebKit::WebUserContentControllerProxy::addContentRuleList): 79 (WebKit::WebUserContentControllerProxy::removeContentRuleList): 80 (WebKit::WebUserContentControllerProxy::removeAllContentRuleLists): 81 * UIProcess/UserContent/WebUserContentControllerProxy.h: 82 (WebKit::WebUserContentControllerProxy::create): 83 (WebKit::WebUserContentControllerProxy::addNetworkProcess): 84 (WebKit::WebUserContentControllerProxy::removeNetworkProcess): 85 (WebKit::WebUserContentControllerProxy::contentExtensionRules): 86 (WebKit::WebUserContentControllerProxy::identifier const): 87 * WebKit.xcodeproj/project.pbxproj: 88 * WebProcess/Network/WebLoaderStrategy.cpp: 89 (WebKit::WebLoaderStrategy::startPingLoad): 90 * WebProcess/UserContent/WebUserContentController.cpp: 91 (WebKit::WebUserContentController::getOrCreate): 92 (WebKit::WebUserContentController::WebUserContentController): 93 (WebKit::WebUserContentController::~WebUserContentController): 94 * WebProcess/UserContent/WebUserContentController.h: 95 * WebProcess/WebPage/WebPage.h: 96 (WebKit::WebPage::userContentControllerIdentifier const): 97 1 98 2018-04-02 Beth Dakin <bdakin@apple.com> 2 99 -
trunk/Source/WebKit/DerivedSources.make
r229426 r230210 116 116 NetworkResourceLoader \ 117 117 NetworkSocketStream \ 118 NetworkContentRuleListManager \ 118 119 PluginControllerProxy \ 119 120 PluginProcess \ -
trunk/Source/WebKit/NetworkProcess/NetworkContentRuleListManager.h
r230208 r230210 1 1 /* 2 * Copyright (C) 201 2, 2013Apple Inc. All rights reserved.2 * Copyright (C) 2018 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 26 26 #pragma once 27 27 28 #include "NetworkLoadParameters.h" 29 #include "SandboxExtension.h" 28 #if ENABLE(CONTENT_EXTENSIONS) 29 30 #include "UserContentControllerIdentifier.h" 30 31 #include "WebCompiledContentRuleListData.h" 31 #include <WebCore/ContentSecurityPolicyResponseHeaders.h> 32 #include <WebCore/FetchOptions.h> 33 #include <WebCore/ResourceLoaderOptions.h> 34 #include <WebCore/ResourceRequest.h> 35 #include <WebCore/SecurityOrigin.h> 36 #include <pal/SessionID.h> 37 #include <wtf/Seconds.h> 32 #include <WebCore/ContentExtensionsBackend.h> 33 #include <WebCore/UserContentProvider.h> 38 34 39 35 namespace IPC { 36 class Connection; 40 37 class Decoder; 41 class Encoder;42 38 } 43 39 44 40 namespace WebKit { 45 41 46 typedef uint64_t ResourceLoadIdentifier; 42 class NetworkContentRuleListManager { 43 public: 44 NetworkContentRuleListManager(); 45 ~NetworkContentRuleListManager(); 47 46 48 class NetworkResourceLoadParameters : public NetworkLoadParameters { 49 public: 50 void encode(IPC::Encoder&) const; 51 static bool decode(IPC::Decoder&, NetworkResourceLoadParameters&); 47 void didReceiveMessage(IPC::Connection&, IPC::Decoder&); 52 48 53 ResourceLoadIdentifier identifier { 0 }; 54 Vector<RefPtr<SandboxExtension>> requestBodySandboxExtensions; // Created automatically for the sender. 55 RefPtr<SandboxExtension> resourceSandboxExtension; // Created automatically for the sender. 56 Seconds maximumBufferingTime; 57 Vector<String> derivedCachedDataTypesToRetrieve; 58 RefPtr<WebCore::SecurityOrigin> sourceOrigin; 59 WebCore::FetchOptions::Mode mode; 60 std::optional<WebCore::ContentSecurityPolicyResponseHeaders> cspResponseHeaders; 49 using BackendCallback = CompletionHandler<void(WebCore::ContentExtensions::ContentExtensionsBackend&)>; 50 void contentExtensionsBackend(UserContentControllerIdentifier, BackendCallback&&); 61 51 62 #if ENABLE(CONTENT_EXTENSIONS) 63 WebCore::URL mainDocumentURL; 64 Vector<std::pair<String, WebCompiledContentRuleListData>> contentRuleLists; 65 #endif 52 private: 53 void addContentRuleLists(UserContentControllerIdentifier, const Vector<std::pair<String, WebCompiledContentRuleListData>>&); 54 void removeContentRuleList(UserContentControllerIdentifier, const String& name); 55 void removeAllContentRuleLists(UserContentControllerIdentifier); 56 void remove(UserContentControllerIdentifier); 57 58 HashMap<UserContentControllerIdentifier, std::unique_ptr<WebCore::ContentExtensions::ContentExtensionsBackend>> m_contentExtensionBackends; 59 HashMap<UserContentControllerIdentifier, Vector<BackendCallback>> m_pendingCallbacks; 66 60 }; 67 61 68 62 } // namespace WebKit 63 64 #endif // ENABLE(CONTENT_EXTENSIONS) -
trunk/Source/WebKit/NetworkProcess/NetworkLoadChecker.cpp
r230118 r230210 29 29 #include "Logging.h" 30 30 #include "NetworkCORSPreflightChecker.h" 31 #include "NetworkProcess.h" 31 32 #include "WebCompiledContentRuleList.h" 33 #include "WebUserContentController.h" 32 34 #include <WebCore/ContentSecurityPolicy.h> 33 35 #include <WebCore/CrossOriginAccessControl.h> … … 96 98 { 97 99 #if ENABLE(CONTENT_EXTENSIONS) 98 if (processContentExtensionRulesForLoad(request).blockedLoad) { 99 handler(returnError(ASCIILiteral("Blocked by content extension"))); 100 return; 101 } 100 processContentExtensionRulesForLoad(WTFMove(request), [this, handler = WTFMove(handler)](auto&& request, auto status) mutable { 101 if (status.blockedLoad) { 102 handler(this->returnError(ASCIILiteral("Blocked by content extension"))); 103 return; 104 } 105 this->continueCheckingRequest(WTFMove(request), WTFMove(handler)); 106 }); 107 #else 108 continueCheckingRequest(WTFMove(request), WTFMove(handler)); 102 109 #endif 103 110 } 111 112 void NetworkLoadChecker::continueCheckingRequest(ResourceRequest&& request, ValidationHandler&& handler) 113 { 104 114 if (auto* contentSecurityPolicy = this->contentSecurityPolicy()) { 105 115 if (isRedirected()) { … … 230 240 231 241 #if ENABLE(CONTENT_EXTENSIONS) 232 ContentExtensions::ContentExtensionsBackend& NetworkLoadChecker::contentExtensionsBackend() 233 { 234 if (!m_contentExtensionsBackend) { 235 m_contentExtensionsBackend = std::make_unique<ContentExtensions::ContentExtensionsBackend>(); 236 for (auto& pair : m_contentRuleLists) 237 m_contentExtensionsBackend->addContentExtension(pair.first, WebCompiledContentRuleList::create(WTFMove(pair.second))); 238 } 239 return *m_contentExtensionsBackend; 240 } 241 242 ContentExtensions::BlockedStatus NetworkLoadChecker::processContentExtensionRulesForLoad(ResourceRequest& request) 243 { 244 auto status = contentExtensionsBackend().processContentExtensionRulesForPingLoad(request.url(), m_mainDocumentURL); 245 applyBlockedStatusToRequest(status, nullptr, request); 246 return status; 242 void NetworkLoadChecker::processContentExtensionRulesForLoad(ResourceRequest&& request, CompletionHandler<void(WebCore::ResourceRequest&&, const ContentExtensions::BlockedStatus&)>&& callback) 243 { 244 if (!m_userContentControllerIdentifier) { 245 ContentExtensions::BlockedStatus status; 246 callback(WTFMove(request), status); 247 return; 248 } 249 NetworkProcess::singleton().networkContentRuleListManager().contentExtensionsBackend(*m_userContentControllerIdentifier, [protectedThis = makeRef(*this), this, request = WTFMove(request), callback = WTFMove(callback)](auto& backend) mutable { 250 auto status = backend.processContentExtensionRulesForPingLoad(request.url(), m_mainDocumentURL); 251 applyBlockedStatusToRequest(status, nullptr, request); 252 callback(WTFMove(request), status); 253 }); 247 254 } 248 255 #endif // ENABLE(CONTENT_EXTENSIONS) -
trunk/Source/WebKit/NetworkProcess/NetworkLoadChecker.h
r230014 r230210 26 26 #pragma once 27 27 28 #include "NetworkContentRuleListManager.h" 28 29 #include "NetworkResourceLoadParameters.h" 29 #include <WebCore/ContentExtensionsBackend.h>30 30 #include <WebCore/ResourceError.h> 31 31 #include <WebCore/ResourceResponse.h> … … 41 41 class NetworkCORSPreflightChecker; 42 42 43 class NetworkLoadChecker {43 class NetworkLoadChecker : public RefCounted<NetworkLoadChecker> { 44 44 public: 45 NetworkLoadChecker(WebCore::FetchOptions::Mode, bool shouldFollowRedirects, WebCore::StoredCredentialsPolicy, PAL::SessionID, WebCore::HTTPHeaderMap&&, WebCore::URL&&, RefPtr<WebCore::SecurityOrigin>&&); 45 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) 46 { 47 return adoptRef(*new NetworkLoadChecker { mode, shouldFollowRedirects, storedCredentialsPolicy, sessionID, WTFMove(originalHeaders), WTFMove(url), WTFMove(sourceOrigin) }); 48 } 46 49 ~NetworkLoadChecker(); 47 50 … … 53 56 void setCSPResponseHeaders(WebCore::ContentSecurityPolicyResponseHeaders&& headers) { m_cspResponseHeaders = WTFMove(headers); } 54 57 #if ENABLE(CONTENT_EXTENSIONS) 55 void setContentExtension RuleLists(WebCore::URL&& mainDocumentURL, Vector<std::pair<String, WebCompiledContentRuleListData>>&& contentRuleLists)58 void setContentExtensionController(WebCore::URL&& mainDocumentURL, std::optional<UserContentControllerIdentifier> identifier) 56 59 { 57 60 m_mainDocumentURL = WTFMove(mainDocumentURL); 58 m_ contentRuleLists = WTFMove(contentRuleLists);61 m_userContentControllerIdentifier = identifier; 59 62 } 60 63 #endif … … 64 67 65 68 private: 69 NetworkLoadChecker(WebCore::FetchOptions::Mode, bool shouldFollowRedirects, WebCore::StoredCredentialsPolicy, PAL::SessionID, WebCore::HTTPHeaderMap&&, WebCore::URL&&, RefPtr<WebCore::SecurityOrigin>&&); 70 66 71 WebCore::ContentSecurityPolicy* contentSecurityPolicy() const; 67 72 bool isChecking() const { return !!m_corsPreflightChecker; } … … 69 74 70 75 void checkRequest(WebCore::ResourceRequest&&, ValidationHandler&&); 76 77 void continueCheckingRequest(WebCore::ResourceRequest&&, ValidationHandler&&); 71 78 72 79 bool doesNotNeedCORSCheck(const WebCore::URL&) const; … … 78 85 79 86 #if ENABLE(CONTENT_EXTENSIONS) 80 WebCore::ContentExtensions::ContentExtensionsBackend& contentExtensionsBackend(); 81 WebCore::ContentExtensions::BlockedStatus processContentExtensionRulesForLoad(WebCore::ResourceRequest&); 87 void processContentExtensionRulesForLoad(WebCore::ResourceRequest&&, CompletionHandler<void(WebCore::ResourceRequest&&, const WebCore::ContentExtensions::BlockedStatus&)>&&); 82 88 #endif 83 89 … … 93 99 #if ENABLE(CONTENT_EXTENSIONS) 94 100 WebCore::URL m_mainDocumentURL; 95 Vector<std::pair<String, WebCompiledContentRuleListData>> m_contentRuleLists;101 std::optional<UserContentControllerIdentifier> m_userContentControllerIdentifier; 96 102 #endif 97 103 … … 100 106 bool m_isSimpleRequest { true }; 101 107 mutable std::unique_ptr<WebCore::ContentSecurityPolicy> m_contentSecurityPolicy; 102 #if ENABLE(CONTENT_EXTENSIONS)103 std::unique_ptr<WebCore::ContentExtensions::ContentExtensionsBackend> m_contentExtensionsBackend;104 #endif105 108 size_t m_redirectCount { 0 }; 106 109 WebCore::URL m_previousURL; -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp
r230079 r230210 40 40 #include "NetworkBlobRegistry.h" 41 41 #include "NetworkConnectionToWebProcess.h" 42 #include "NetworkContentRuleListManagerMessages.h" 42 43 #include "NetworkProcessCreationParameters.h" 43 44 #include "NetworkProcessPlatformStrategies.h" … … 172 173 } 173 174 175 #if ENABLE(CONTENT_EXTENSIONS) 176 if (decoder.messageReceiverName() == Messages::NetworkContentRuleListManager::messageReceiverName()) { 177 m_NetworkContentRuleListManager.didReceiveMessage(connection, decoder); 178 return; 179 } 180 #endif 181 174 182 didReceiveNetworkProcessMessage(connection, decoder); 175 183 } -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.h
r230079 r230210 30 30 #include "DownloadManager.h" 31 31 #include "MessageReceiverMap.h" 32 #include "NetworkContentRuleListManager.h" 32 33 #include <WebCore/DiagnosticLoggingClient.h> 33 34 #include <memory> … … 157 158 void setSessionIsControlledByAutomation(PAL::SessionID, bool); 158 159 bool sessionIsControlledByAutomation(PAL::SessionID) const; 160 161 #if ENABLE(CONTENT_EXTENSIONS) 162 NetworkContentRuleListManager& networkContentRuleListManager() { return m_NetworkContentRuleListManager; } 163 #endif 159 164 160 165 private: … … 292 297 WebSQLiteDatabaseTracker m_webSQLiteDatabaseTracker; 293 298 #endif 299 300 #if ENABLE(CONTENT_EXTENSIONS) 301 NetworkContentRuleListManager m_NetworkContentRuleListManager; 302 #endif 294 303 }; 295 304 -
trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.cpp
r229979 r230210 94 94 #if ENABLE(CONTENT_EXTENSIONS) 95 95 encoder << mainDocumentURL; 96 encoder << contentRuleLists;96 encoder << userContentControllerIdentifier; 97 97 #endif 98 98 } … … 185 185 return false; 186 186 187 std::optional< Vector<std::pair<String, WebCompiledContentRuleListData>>> contentRuleLists;188 decoder >> contentRuleLists;189 if (! contentRuleLists)187 std::optional<std::optional<UserContentControllerIdentifier>> userContentControllerIdentifier; 188 decoder >> userContentControllerIdentifier; 189 if (!userContentControllerIdentifier) 190 190 return false; 191 result. contentRuleLists = WTFMove(*contentRuleLists);191 result.userContentControllerIdentifier = *userContentControllerIdentifier; 192 192 #endif 193 193 -
trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.h
r227455 r230210 28 28 #include "NetworkLoadParameters.h" 29 29 #include "SandboxExtension.h" 30 #include " WebCompiledContentRuleListData.h"30 #include "UserContentControllerIdentifier.h" 31 31 #include <WebCore/ContentSecurityPolicyResponseHeaders.h> 32 32 #include <WebCore/FetchOptions.h> … … 62 62 #if ENABLE(CONTENT_EXTENSIONS) 63 63 WebCore::URL mainDocumentURL; 64 Vector<std::pair<String, WebCompiledContentRuleListData>> contentRuleLists;64 std::optional<UserContentControllerIdentifier> userContentControllerIdentifier; 65 65 #endif 66 66 }; -
trunk/Source/WebKit/NetworkProcess/PingLoad.cpp
r230014 r230210 43 43 , m_completionHandler(WTFMove(completionHandler)) 44 44 , m_timeoutTimer(*this, &PingLoad::timeoutTimerFired) 45 , 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()))45 , 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())) 46 46 { 47 47 … … 49 49 m_networkLoadChecker->setCSPResponseHeaders(WTFMove(m_parameters.cspResponseHeaders.value())); 50 50 #if ENABLE(CONTENT_EXTENSIONS) 51 m_networkLoadChecker->setContentExtension RuleLists(WTFMove(m_parameters.mainDocumentURL), WTFMove(m_parameters.contentRuleLists));51 m_networkLoadChecker->setContentExtensionController(WTFMove(m_parameters.mainDocumentURL), m_parameters.userContentControllerIdentifier); 52 52 #endif 53 53 -
trunk/Source/WebKit/NetworkProcess/PingLoad.h
r230014 r230210 71 71 RefPtr<NetworkDataTask> m_task; 72 72 WebCore::Timer m_timeoutTimer; 73 UniqueRef<NetworkLoadChecker> m_networkLoadChecker;73 Ref<NetworkLoadChecker> m_networkLoadChecker; 74 74 std::optional<WebCore::ResourceRequest> m_lastRedirectionRequest; 75 75 }; -
trunk/Source/WebKit/Scripts/webkit/messages.py
r230108 r230210 186 186 187 187 no_forward_declaration_types = frozenset([ 188 'String', 188 189 'WebCore::DocumentIdentifier', 189 190 'WebCore::ServiceWorkerIdentifier', … … 193 194 'WebCore::ServiceWorkerRegistrationIdentifier', 194 195 'WebCore::SWServerConnectionIdentifier', 195 ' String',196 'WebKit::UserContentControllerIdentifier', 196 197 ]) 197 198 -
trunk/Source/WebKit/Shared/UserContentControllerIdentifier.h
r230208 r230210 1 1 /* 2 * Copyright (C) 201 0Apple Inc. All rights reserved.2 * Copyright (C) 2018 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 26 26 #pragma once 27 27 28 #include <wtf/text/WTFString.h> 29 30 namespace IPC { 31 class Decoder; 32 class Encoder; 33 } 28 #include <wtf/ObjectIdentifier.h> 34 29 35 30 namespace WebKit { 36 31 37 struct WebPageGroupData { 38 void encode(IPC::Encoder&) const; 39 static std::optional<WebPageGroupData> decode(IPC::Decoder&); 32 enum UserContentControllerIdentifierType { }; 33 using UserContentControllerIdentifier = ObjectIdentifier<UserContentControllerIdentifierType>; 40 34 41 String identifier; 42 uint64_t pageGroupID; 43 bool visibleToInjectedBundle; 44 bool visibleToHistoryClient; 45 46 uint64_t userContentControllerIdentifier; 47 }; 48 49 } // namespace WebKit 35 } -
trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp
r230059 r230210 180 180 if (!decoder.decode(parameters.highestUsedBackForwardItemID)) 181 181 return std::nullopt; 182 if (!decoder.decode(parameters.userContentControllerID)) 183 return std::nullopt; 182 183 std::optional<UserContentControllerIdentifier> userContentControllerIdentifier; 184 decoder >> userContentControllerIdentifier; 185 if (!userContentControllerIdentifier) 186 return std::nullopt; 187 parameters.userContentControllerID = *userContentControllerIdentifier; 188 184 189 if (!decoder.decode(parameters.visitedLinkTableID)) 185 190 return std::nullopt; -
trunk/Source/WebKit/Shared/WebPageCreationParameters.h
r230059 r230210 99 99 uint64_t highestUsedBackForwardItemID; 100 100 101 uint64_tuserContentControllerID;101 UserContentControllerIdentifier userContentControllerID; 102 102 uint64_t visitedLinkTableID; 103 103 uint64_t websiteDataStoreID; -
trunk/Source/WebKit/Shared/WebPageGroupData.cpp
r221319 r230210 54 54 if (!decoder.decode(visibleToHistoryClient)) 55 55 return std::nullopt; 56 uint64_t userContentControllerIdentifier; 57 if (!decoder.decode(userContentControllerIdentifier)) 56 std::optional<UserContentControllerIdentifier> userContentControllerIdentifier; 57 decoder >> userContentControllerIdentifier; 58 if (!userContentControllerIdentifier) 58 59 return std::nullopt; 59 return { { id, pageGroupID, visibleToInjectedBundle, visibleToHistoryClient, userContentControllerIdentifier } };60 return { { id, pageGroupID, visibleToInjectedBundle, visibleToHistoryClient, *userContentControllerIdentifier } }; 60 61 } 61 62 -
trunk/Source/WebKit/Shared/WebPageGroupData.h
r221333 r230210 26 26 #pragma once 27 27 28 #include "UserContentControllerIdentifier.h" 28 29 #include <wtf/text/WTFString.h> 29 30 … … 44 45 bool visibleToHistoryClient; 45 46 46 uint64_tuserContentControllerIdentifier;47 UserContentControllerIdentifier userContentControllerIdentifier; 47 48 }; 48 49 -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp
r230153 r230210 27 27 #include "NetworkProcessProxy.h" 28 28 29 #include "APIContentRuleList.h" 29 30 #include "AuthenticationChallengeProxy.h" 30 31 #include "DownloadProxyMessages.h" … … 33 34 #endif 34 35 #include "Logging.h" 36 #include "NetworkContentRuleListManagerMessages.h" 35 37 #include "NetworkProcessCreationParameters.h" 36 38 #include "NetworkProcessMessages.h" 37 39 #include "SandboxExtension.h" 38 40 #include "StorageProcessMessages.h" 41 #include "WebCompiledContentRuleList.h" 39 42 #include "WebPageProxy.h" 40 43 #include "WebProcessMessages.h" 41 44 #include "WebProcessPool.h" 45 #include "WebUserContentControllerProxy.h" 42 46 #include "WebsiteData.h" 43 47 #include <wtf/CompletionHandler.h> … … 86 90 ASSERT(m_pendingDeleteWebsiteDataCallbacks.isEmpty()); 87 91 ASSERT(m_pendingDeleteWebsiteDataForOriginsCallbacks.isEmpty()); 92 #if ENABLE(CONTENT_EXTENSIONS) 93 for (auto* proxy : m_webUserContentControllerProxies) 94 proxy->removeNetworkProcess(*this); 95 #endif 88 96 } 89 97 … … 541 549 } 542 550 551 552 #if ENABLE(CONTENT_EXTENSIONS) 553 void NetworkProcessProxy::contentExtensionRules(UserContentControllerIdentifier identifier) 554 { 555 if (auto* webUserContentControllerProxy = WebUserContentControllerProxy::get(identifier)) { 556 m_webUserContentControllerProxies.add(webUserContentControllerProxy); 557 webUserContentControllerProxy->addNetworkProcess(*this); 558 559 auto rules = WTF::map(webUserContentControllerProxy->contentExtensionRules(), [](auto&& keyValue) -> std::pair<String, WebCompiledContentRuleListData> { 560 return std::make_pair(keyValue.value->name(), keyValue.value->compiledRuleList().data()); 561 }); 562 send(Messages::NetworkContentRuleListManager::AddContentRuleLists { identifier, rules }, 0); 563 return; 564 } 565 send(Messages::NetworkContentRuleListManager::AddContentRuleLists { identifier, { } }, 0); 566 } 567 568 void NetworkProcessProxy::didDestroyWebUserContentControllerProxy(WebUserContentControllerProxy& proxy) 569 { 570 send(Messages::NetworkContentRuleListManager::Remove { proxy.identifier() }, 0); 571 m_webUserContentControllerProxies.remove(&proxy); 572 } 573 #endif 574 543 575 } // namespace WebKit -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h
r229619 r230210 34 34 #include "ProcessThrottler.h" 35 35 #include "ProcessThrottlerClient.h" 36 #include "UserContentControllerIdentifier.h" 36 37 #include "WebProcessProxyMessages.h" 37 38 #include <memory> … … 60 61 enum class WebsiteDataType; 61 62 struct NetworkProcessCreationParameters; 63 class WebUserContentControllerProxy; 62 64 struct WebsiteData; 63 65 … … 94 96 ProcessThrottler& throttler() { return m_throttler; } 95 97 WebProcessPool& processPool() { return m_processPool; } 98 99 #if ENABLE(CONTENT_EXTENSIONS) 100 void didDestroyWebUserContentControllerProxy(WebUserContentControllerProxy&); 101 #endif 96 102 97 103 private: … … 140 146 #endif 141 147 148 #if ENABLE(CONTENT_EXTENSIONS) 149 void contentExtensionRules(UserContentControllerIdentifier); 150 #endif 151 142 152 // ProcessLauncher::Client 143 153 void didFinishLaunching(ProcessLauncher*, IPC::Connection::Identifier) override; … … 162 172 HashMap<uint64_t, WTF::CompletionHandler<void(bool wasGranted)>> m_storageAccessResponseCallbackMap; 163 173 HashMap<uint64_t, CompletionHandler<void(Vector<String>&& domains)>> m_allStorageAccessEntriesCallbackMap; 174 175 #if ENABLE(CONTENT_EXTENSIONS) 176 HashSet<WebUserContentControllerProxy*> m_webUserContentControllerProxies; 177 #endif 164 178 }; 165 179 -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in
r228109 r230210 48 48 StorageAccessRequestResult(bool wasGranted, uint64_t contextId) 49 49 AllStorageAccessEntriesResult(Vector<String> domains, uint64_t contextId) 50 51 #if ENABLE(CONTENT_EXTENSIONS) 52 ContentExtensionRules(WebKit::UserContentControllerIdentifier identifier) 53 #endif 50 54 } -
trunk/Source/WebKit/UIProcess/UserContent/WebUserContentControllerProxy.cpp
r221399 r230210 32 32 #include "APIUserStyleSheet.h" 33 33 #include "DataReference.h" 34 #include "NetworkContentRuleListManagerMessages.h" 35 #include "NetworkProcessProxy.h" 34 36 #include "WebPageCreationParameters.h" 35 37 #include "WebProcessProxy.h" … … 47 49 namespace WebKit { 48 50 51 static HashMap<UserContentControllerIdentifier, WebUserContentControllerProxy*>& webUserContentControllerProxies() 52 { 53 static NeverDestroyed<HashMap<UserContentControllerIdentifier, WebUserContentControllerProxy*>> proxies; 54 return proxies; 55 } 56 57 58 WebUserContentControllerProxy* WebUserContentControllerProxy::get(UserContentControllerIdentifier identifier) 59 { 60 return webUserContentControllerProxies().get(identifier); 61 } 62 49 63 WebUserContentControllerProxy::WebUserContentControllerProxy() 50 : m_userScripts(API::Array::create()) 64 : m_identifier(generateObjectIdentifier<UserContentControllerIdentifierType>()) 65 , m_userScripts(API::Array::create()) 51 66 , m_userStyleSheets(API::Array::create()) 52 67 { 68 webUserContentControllerProxies().add(m_identifier, this); 53 69 } 54 70 55 71 WebUserContentControllerProxy::~WebUserContentControllerProxy() 56 72 { 57 for (WebProcessProxy* process : m_processes) { 58 process->removeMessageReceiver(Messages::WebUserContentControllerProxy::messageReceiverName(), identifier()); 73 webUserContentControllerProxies().remove(m_identifier); 74 for (auto* process : m_processes) { 75 process->removeMessageReceiver(Messages::WebUserContentControllerProxy::messageReceiverName(), identifier().toUInt64()); 59 76 process->didDestroyWebUserContentControllerProxy(*this); 60 77 } 78 #if ENABLE(CONTENT_EXTENSIONS) 79 for (auto* process : m_networkProcesses) 80 process->didDestroyWebUserContentControllerProxy(*this); 81 #endif 61 82 } 62 83 … … 66 87 return; 67 88 68 webProcessProxy.addMessageReceiver(Messages::WebUserContentControllerProxy::messageReceiverName(), identifier() , *this);89 webProcessProxy.addMessageReceiver(Messages::WebUserContentControllerProxy::messageReceiverName(), identifier().toUInt64(), *this); 69 90 70 91 ASSERT(parameters.userContentWorlds.isEmpty()); … … 96 117 97 118 m_processes.remove(&webProcessProxy); 98 webProcessProxy.removeMessageReceiver(Messages::WebUserContentControllerProxy::messageReceiverName(), identifier() );119 webProcessProxy.removeMessageReceiver(Messages::WebUserContentControllerProxy::messageReceiverName(), identifier().toUInt64()); 99 120 } 100 121 … … 107 128 if (addResult.isNewEntry) { 108 129 for (WebProcessProxy* process : m_processes) 109 process->send(Messages::WebUserContentController::AddUserContentWorlds({ std::make_pair(world.identifier(), world.name()) }), identifier() );130 process->send(Messages::WebUserContentController::AddUserContentWorlds({ std::make_pair(world.identifier(), world.name()) }), identifier().toUInt64()); 110 131 } 111 132 } … … 131 152 if (shouldSendRemoveUserContentWorldsMessage(world, numberOfUsesToRemove)) { 132 153 for (WebProcessProxy* process : m_processes) 133 process->send(Messages::WebUserContentController::RemoveUserContentWorlds({ world.identifier() }), identifier() );154 process->send(Messages::WebUserContentController::RemoveUserContentWorlds({ world.identifier() }), identifier().toUInt64()); 134 155 } 135 156 } … … 144 165 145 166 for (WebProcessProxy* process : m_processes) 146 process->send(Messages::WebUserContentController::RemoveUserContentWorlds(worldsToRemove), identifier() );167 process->send(Messages::WebUserContentController::RemoveUserContentWorlds(worldsToRemove), identifier().toUInt64()); 147 168 } 148 169 … … 156 177 157 178 for (WebProcessProxy* process : m_processes) 158 process->send(Messages::WebUserContentController::AddUserScripts({ { userScript.identifier(), world->identifier(), userScript.userScript() } }), identifier() );179 process->send(Messages::WebUserContentController::AddUserScripts({ { userScript.identifier(), world->identifier(), userScript.userScript() } }), identifier().toUInt64()); 159 180 } 160 181 … … 164 185 165 186 for (WebProcessProxy* process : m_processes) 166 process->send(Messages::WebUserContentController::RemoveUserScript(world->identifier(), userScript.identifier()), identifier() );187 process->send(Messages::WebUserContentController::RemoveUserScript(world->identifier(), userScript.identifier()), identifier().toUInt64()); 167 188 168 189 m_userScripts->elements().removeAll(&userScript); … … 174 195 { 175 196 for (WebProcessProxy* process : m_processes) 176 process->send(Messages::WebUserContentController::RemoveAllUserScripts({ world.identifier() }), identifier() );197 process->send(Messages::WebUserContentController::RemoveAllUserScripts({ world.identifier() }), identifier().toUInt64()); 177 198 178 199 unsigned userScriptsRemoved = m_userScripts->removeAllOfTypeMatching<API::UserScript>([&](const auto& userScript) { … … 195 216 196 217 for (WebProcessProxy* process : m_processes) 197 process->send(Messages::WebUserContentController::RemoveAllUserScripts(worldIdentifiers), identifier() );218 process->send(Messages::WebUserContentController::RemoveAllUserScripts(worldIdentifiers), identifier().toUInt64()); 198 219 199 220 m_userScripts->elements().clear(); … … 211 232 212 233 for (WebProcessProxy* process : m_processes) 213 process->send(Messages::WebUserContentController::AddUserStyleSheets({ { userStyleSheet.identifier(), world->identifier(), userStyleSheet.userStyleSheet() } }), identifier() );234 process->send(Messages::WebUserContentController::AddUserStyleSheets({ { userStyleSheet.identifier(), world->identifier(), userStyleSheet.userStyleSheet() } }), identifier().toUInt64()); 214 235 } 215 236 … … 219 240 220 241 for (WebProcessProxy* process : m_processes) 221 process->send(Messages::WebUserContentController::RemoveUserStyleSheet(world->identifier(), userStyleSheet.identifier()), identifier() );242 process->send(Messages::WebUserContentController::RemoveUserStyleSheet(world->identifier(), userStyleSheet.identifier()), identifier().toUInt64()); 222 243 223 244 m_userStyleSheets->elements().removeAll(&userStyleSheet); … … 229 250 { 230 251 for (WebProcessProxy* process : m_processes) 231 process->send(Messages::WebUserContentController::RemoveAllUserStyleSheets({ world.identifier() }), identifier() );252 process->send(Messages::WebUserContentController::RemoveAllUserStyleSheets({ world.identifier() }), identifier().toUInt64()); 232 253 233 254 unsigned userStyleSheetsRemoved = m_userStyleSheets->removeAllOfTypeMatching<API::UserStyleSheet>([&](const auto& userStyleSheet) { … … 250 271 251 272 for (WebProcessProxy* process : m_processes) 252 process->send(Messages::WebUserContentController::RemoveAllUserStyleSheets(worldIdentifiers), identifier() );273 process->send(Messages::WebUserContentController::RemoveAllUserStyleSheets(worldIdentifiers), identifier().toUInt64()); 253 274 254 275 m_userStyleSheets->elements().clear(); … … 271 292 272 293 for (WebProcessProxy* process : m_processes) 273 process->send(Messages::WebUserContentController::AddUserScriptMessageHandlers({ { handler.identifier(), world->identifier(), handler.name() } }), identifier() );294 process->send(Messages::WebUserContentController::AddUserScriptMessageHandlers({ { handler.identifier(), world->identifier(), handler.name() } }), identifier().toUInt64()); 274 295 275 296 return true; … … 281 302 if (it->value->name() == name && &it->value->userContentWorld() == &world) { 282 303 for (WebProcessProxy* process : m_processes) 283 process->send(Messages::WebUserContentController::RemoveUserScriptMessageHandler(world.identifier(), it->value->identifier()), identifier() );304 process->send(Messages::WebUserContentController::RemoveUserScriptMessageHandler(world.identifier(), it->value->identifier()), identifier().toUInt64()); 284 305 285 306 m_scriptMessageHandlers.remove(it); … … 294 315 { 295 316 for (WebProcessProxy* process : m_processes) 296 process->send(Messages::WebUserContentController::RemoveAllUserScriptMessageHandlers({ world.identifier() }), identifier() );317 process->send(Messages::WebUserContentController::RemoveAllUserScriptMessageHandlers({ world.identifier() }), identifier().toUInt64()); 297 318 298 319 unsigned numberRemoved = 0; … … 331 352 auto pair = std::make_pair(contentRuleList.name(), contentRuleList.compiledRuleList().data()); 332 353 333 for (WebProcessProxy* process : m_processes) 334 process->send(Messages::WebUserContentController::AddContentRuleLists({ pair }), identifier()); 354 for (auto* process : m_processes) 355 process->send(Messages::WebUserContentController::AddContentRuleLists({ pair }), identifier().toUInt64()); 356 357 for (auto* process : m_networkProcesses) 358 process->send(Messages::NetworkContentRuleListManager::AddContentRuleLists { identifier(), { pair } }, 0); 335 359 } 336 360 … … 339 363 m_contentRuleLists.remove(name); 340 364 341 for (WebProcessProxy* process : m_processes) 342 process->send(Messages::WebUserContentController::RemoveContentRuleList(name), identifier()); 365 for (auto* process : m_processes) 366 process->send(Messages::WebUserContentController::RemoveContentRuleList(name), identifier().toUInt64()); 367 368 for (auto* process : m_networkProcesses) 369 process->send(Messages::NetworkContentRuleListManager::RemoveContentRuleList { identifier(), name }, 0); 343 370 } 344 371 … … 347 374 m_contentRuleLists.clear(); 348 375 349 for (WebProcessProxy* process : m_processes) 350 process->send(Messages::WebUserContentController::RemoveAllContentRuleLists(), identifier()); 376 for (auto* process : m_processes) 377 process->send(Messages::WebUserContentController::RemoveAllContentRuleLists(), identifier().toUInt64()); 378 379 for (auto* process : m_networkProcesses) 380 process->send(Messages::NetworkContentRuleListManager::RemoveAllContentRuleLists { identifier() }, 0); 351 381 } 352 382 #endif -
trunk/Source/WebKit/UIProcess/UserContent/WebUserContentControllerProxy.h
r221399 r230210 28 28 #include "APIObject.h" 29 29 #include "MessageReceiver.h" 30 #include "UserContentControllerIdentifier.h" 30 31 #include <wtf/Forward.h> 31 32 #include <wtf/HashCountedSet.h> 32 33 #include <wtf/HashMap.h> 33 34 #include <wtf/HashSet.h> 34 #include <wtf/Identified.h>35 35 #include <wtf/Ref.h> 36 36 #include <wtf/RefCounted.h> … … 55 55 namespace WebKit { 56 56 57 class NetworkProcessProxy; 57 58 class WebProcessProxy; 58 59 class WebScriptMessageHandler; … … 60 61 struct WebPageCreationParameters; 61 62 62 class WebUserContentControllerProxy : public API::ObjectImpl<API::Object::Type::UserContentController>, private IPC::MessageReceiver , public Identified<WebUserContentControllerProxy>{63 class WebUserContentControllerProxy : public API::ObjectImpl<API::Object::Type::UserContentController>, private IPC::MessageReceiver { 63 64 public: 64 65 static Ref<WebUserContentControllerProxy> create() 65 66 { 66 67 return adoptRef(*new WebUserContentControllerProxy); 67 } 68 explicitWebUserContentControllerProxy();68 } 69 WebUserContentControllerProxy(); 69 70 ~WebUserContentControllerProxy(); 71 72 static WebUserContentControllerProxy* get(UserContentControllerIdentifier); 70 73 71 74 void addProcess(WebProcessProxy&, WebPageCreationParameters&); … … 92 95 93 96 #if ENABLE(CONTENT_EXTENSIONS) 97 void addNetworkProcess(NetworkProcessProxy& proxy) { m_networkProcesses.remove(&proxy); } 98 void removeNetworkProcess(NetworkProcessProxy& proxy) { m_networkProcesses.add(&proxy); } 99 94 100 void addContentRuleList(API::ContentRuleList&); 95 101 void removeContentRuleList(const String&); 96 102 void removeAllContentRuleLists(); 103 const HashMap<String, RefPtr<API::ContentRuleList>>& contentExtensionRules() { return m_contentRuleLists; } 97 104 #endif 105 106 UserContentControllerIdentifier identifier() const { return m_identifier; } 98 107 99 108 private: … … 108 117 bool shouldSendRemoveUserContentWorldsMessage(API::UserContentWorld&, unsigned numberOfUsesToRemove); 109 118 110 HashSet<WebProcessProxy*> m_processes; 119 UserContentControllerIdentifier m_identifier; 120 HashSet<WebProcessProxy*> m_processes; 111 121 Ref<API::Array> m_userScripts; 112 122 Ref<API::Array> m_userStyleSheets; … … 115 125 116 126 #if ENABLE(CONTENT_EXTENSIONS) 127 HashSet<NetworkProcessProxy*> m_networkProcesses; 117 128 HashMap<String, RefPtr<API::ContentRuleList>> m_contentRuleLists; 118 129 #endif -
trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj
r230193 r230210 959 959 41FAF5F81E3C1021001AE678 /* LibWebRTCResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = 41FAF5F61E3C0B47001AE678 /* LibWebRTCResolver.h */; }; 960 960 41FAF5F91E3C1025001AE678 /* LibWebRTCResolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41FAF5F71E3C0B47001AE678 /* LibWebRTCResolver.cpp */; }; 961 41FBE826206DF7FA000F0741 /* NetworkContentRuleListManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41FBE824206DA79C000F0741 /* NetworkContentRuleListManager.cpp */; }; 961 962 4450AEC01DC3FAE5009943F2 /* SharedMemoryCocoa.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4450AEBF1DC3FAE5009943F2 /* SharedMemoryCocoa.cpp */; }; 962 963 460F488F1F996F7100CF4B87 /* WebSWContextManagerConnectionMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 460F488D1F996F6C00CF4B87 /* WebSWContextManagerConnectionMessageReceiver.cpp */; }; … … 1197 1198 52D5A1B11C57496200DE34A3 /* VideoFullscreenManagerProxy.mm in Sources */ = {isa = PBXBuildFile; fileRef = 52D5A1AC1C57494E00DE34A3 /* VideoFullscreenManagerProxy.mm */; }; 1198 1199 52D5A1B71C574A0200DE34A3 /* VideoFullscreenManager.mm in Sources */ = {isa = PBXBuildFile; fileRef = 52D5A1B41C5749F200DE34A3 /* VideoFullscreenManager.mm */; }; 1200 52F060E11654318500F3281B /* NetworkContentRuleListManagerMessageReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 52F060DD1654317500F3281B /* NetworkContentRuleListManagerMessageReceiver.cpp */; }; 1199 1201 5302583B1DCBBD2200DA89C2 /* NetworkCaptureResource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5302582E1DCBBD1D00DA89C2 /* NetworkCaptureResource.cpp */; }; 1200 1202 5302583C1DCBBD2200DA89C2 /* NetworkCaptureResource.h in Headers */ = {isa = PBXBuildFile; fileRef = 5302582F1DCBBD1D00DA89C2 /* NetworkCaptureResource.h */; }; … … 3343 3345 41FAF5F61E3C0B47001AE678 /* LibWebRTCResolver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = LibWebRTCResolver.h; path = Network/webrtc/LibWebRTCResolver.h; sourceTree = "<group>"; }; 3344 3346 41FAF5F71E3C0B47001AE678 /* LibWebRTCResolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = LibWebRTCResolver.cpp; path = Network/webrtc/LibWebRTCResolver.cpp; sourceTree = "<group>"; }; 3347 41FBE821206D87F6000F0741 /* UserContentControllerIdentifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserContentControllerIdentifier.h; sourceTree = "<group>"; }; 3348 41FBE822206DA79C000F0741 /* NetworkContentRuleListManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkContentRuleListManager.h; path = NetworkProcess/NetworkContentRuleListManager.h; sourceTree = "<group>"; }; 3349 41FBE823206DA79C000F0741 /* NetworkContentRuleListManager.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = NetworkContentRuleListManager.messages.in; path = NetworkProcess/NetworkContentRuleListManager.messages.in; sourceTree = "<group>"; }; 3350 41FBE824206DA79C000F0741 /* NetworkContentRuleListManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkContentRuleListManager.cpp; path = NetworkProcess/NetworkContentRuleListManager.cpp; sourceTree = "<group>"; }; 3345 3351 4450AEBF1DC3FAE5009943F2 /* SharedMemoryCocoa.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SharedMemoryCocoa.cpp; sourceTree = "<group>"; }; 3346 3352 460F488D1F996F6C00CF4B87 /* WebSWContextManagerConnectionMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSWContextManagerConnectionMessageReceiver.cpp; sourceTree = "<group>"; }; … … 3625 3631 52D5A1B31C5749F200DE34A3 /* VideoFullscreenManager.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = VideoFullscreenManager.messages.in; sourceTree = "<group>"; }; 3626 3632 52D5A1B41C5749F200DE34A3 /* VideoFullscreenManager.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = VideoFullscreenManager.mm; sourceTree = "<group>"; }; 3633 52F060DD1654317500F3281B /* NetworkContentRuleListManagerMessageReceiver.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkContentRuleListManagerMessageReceiver.cpp; sourceTree = "<group>"; }; 3627 3634 5302582E1DCBBD1D00DA89C2 /* NetworkCaptureResource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = NetworkCaptureResource.cpp; path = NetworkProcess/capture/NetworkCaptureResource.cpp; sourceTree = "<group>"; }; 3628 3635 5302582F1DCBBD1D00DA89C2 /* NetworkCaptureResource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = NetworkCaptureResource.h; path = NetworkProcess/capture/NetworkCaptureResource.h; sourceTree = "<group>"; }; … … 5272 5279 5C19A51E1FD0B14600EEA323 /* URLSchemeTaskParameters.cpp */, 5273 5280 5C19A51F1FD0B14700EEA323 /* URLSchemeTaskParameters.h */, 5281 41FBE821206D87F6000F0741 /* UserContentControllerIdentifier.h */, 5274 5282 1AC1336518565B5700F3EC05 /* UserData.cpp */, 5275 5283 1AC1336618565B5700F3EC05 /* UserData.h */, … … 6360 6368 513A164A1630A9BF005D7D22 /* NetworkConnectionToWebProcess.h */, 6361 6369 513A164B1630A9BF005D7D22 /* NetworkConnectionToWebProcess.messages.in */, 6370 41FBE824206DA79C000F0741 /* NetworkContentRuleListManager.cpp */, 6371 41FBE822206DA79C000F0741 /* NetworkContentRuleListManager.h */, 6372 41FBE823206DA79C000F0741 /* NetworkContentRuleListManager.messages.in */, 6362 6373 46DF06391F3905E5001980BB /* NetworkCORSPreflightChecker.cpp */, 6363 6374 46DF063A1F3905E5001980BB /* NetworkCORSPreflightChecker.h */, … … 8245 8256 51DD9F2616367DA2001578E9 /* NetworkConnectionToWebProcessMessageReceiver.cpp */, 8246 8257 51DD9F2716367DA2001578E9 /* NetworkConnectionToWebProcessMessages.h */, 8258 52F060DD1654317500F3281B /* NetworkContentRuleListManagerMessageReceiver.cpp */, 8247 8259 517CF0E1163A486C00C2950E /* NetworkProcessConnectionMessageReceiver.cpp */, 8248 8260 517CF0E2163A486C00C2950E /* NetworkProcessConnectionMessages.h */, … … 10660 10672 513A164C1630A9BF005D7D22 /* NetworkConnectionToWebProcess.cpp in Sources */, 10661 10673 51DD9F2816367DA2001578E9 /* NetworkConnectionToWebProcessMessageReceiver.cpp in Sources */, 10674 41FBE826206DF7FA000F0741 /* NetworkContentRuleListManager.cpp in Sources */, 10675 52F060E11654318500F3281B /* NetworkContentRuleListManagerMessageReceiver.cpp in Sources */, 10662 10676 46DF063B1F3905F8001980BB /* NetworkCORSPreflightChecker.cpp in Sources */, 10663 10677 532159541DBAE71D0054AA3C /* NetworkDataTask.cpp in Sources */, -
trunk/Source/WebKit/WebProcess/Network/WebLoaderStrategy.cpp
r230007 r230210 457 457 } 458 458 459 WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame.loader().client()); 460 WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : nullptr; 461 459 462 NetworkResourceLoadParameters loadParameters; 460 463 loadParameters.identifier = generateLoadIdentifier(); … … 473 476 #if ENABLE(CONTENT_EXTENSIONS) 474 477 loadParameters.mainDocumentURL = document->topDocument().url(); 475 476 if (auto* documentLoader = frame.loader().documentLoader()) { 477 if (auto* page = frame.page()) { 478 page->userContentProvider().forEachContentExtension([&loadParameters](const String& identifier, ContentExtensions::ContentExtension& contentExtension) { 479 loadParameters.contentRuleLists.append(std::make_pair(identifier, static_cast<const WebCompiledContentRuleList&>(contentExtension.compiledExtension()).data())); 480 }, *documentLoader); 481 } 478 // FIXME: Instead of passing userContentControllerIdentifier, we should just pass webPageId to NetworkProcess. 479 if (auto* page = frame.page()) { 480 WebPage* webPage = webFrame ? webFrame->page() : nullptr; 481 if (webPage) 482 loadParameters.userContentControllerIdentifier = webPage->userContentControllerIdentifier(); 482 483 } 483 484 #endif -
trunk/Source/WebKit/WebProcess/UserContent/WebUserContentController.cpp
r219573 r230210 51 51 namespace WebKit { 52 52 53 static HashMap< uint64_t, WebUserContentController*>& userContentControllers()54 { 55 static NeverDestroyed<HashMap< uint64_t, WebUserContentController*>> userContentControllers;53 static HashMap<UserContentControllerIdentifier, WebUserContentController*>& userContentControllers() 54 { 55 static NeverDestroyed<HashMap<UserContentControllerIdentifier, WebUserContentController*>> userContentControllers; 56 56 57 57 return userContentControllers; … … 67 67 } 68 68 69 Ref<WebUserContentController> WebUserContentController::getOrCreate( uint64_tidentifier)69 Ref<WebUserContentController> WebUserContentController::getOrCreate(UserContentControllerIdentifier identifier) 70 70 { 71 71 auto& userContentControllerPtr = userContentControllers().add(identifier, nullptr).iterator->value; … … 79 79 } 80 80 81 WebUserContentController::WebUserContentController( uint64_tidentifier)81 WebUserContentController::WebUserContentController(UserContentControllerIdentifier identifier) 82 82 : m_identifier(identifier) 83 83 { 84 WebProcess::singleton().addMessageReceiver(Messages::WebUserContentController::messageReceiverName(), m_identifier , *this);84 WebProcess::singleton().addMessageReceiver(Messages::WebUserContentController::messageReceiverName(), m_identifier.toUInt64(), *this); 85 85 } 86 86 … … 89 89 ASSERT(userContentControllers().contains(m_identifier)); 90 90 91 WebProcess::singleton().removeMessageReceiver(Messages::WebUserContentController::messageReceiverName(), m_identifier );91 WebProcess::singleton().removeMessageReceiver(Messages::WebUserContentController::messageReceiverName(), m_identifier.toUInt64()); 92 92 93 93 userContentControllers().remove(m_identifier); … … 243 243 return; 244 244 245 WebProcess::singleton().parentProcessConnection()->send(Messages::WebUserContentControllerProxy::DidPostMessage(webPage->pageID(), webFrame->info(), m_identifier, IPC::DataReference(value->data())), m_controller->identifier() );245 WebProcess::singleton().parentProcessConnection()->send(Messages::WebUserContentControllerProxy::DidPostMessage(webPage->pageID(), webFrame->info(), m_identifier, IPC::DataReference(value->data())), m_controller->identifier().toUInt64()); 246 246 } 247 247 -
trunk/Source/WebKit/WebProcess/UserContent/WebUserContentController.h
r218299 r230210 27 27 28 28 #include "MessageReceiver.h" 29 #include "UserContentControllerIdentifier.h" 29 30 #include "WebScriptMessageHandler.h" 30 31 #include "WebUserContentControllerDataTypes.h" … … 50 51 class WebUserContentController final : public WebCore::UserContentProvider, private IPC::MessageReceiver { 51 52 public: 52 static Ref<WebUserContentController> getOrCreate( uint64_t identifier);53 static Ref<WebUserContentController> getOrCreate(UserContentControllerIdentifier); 53 54 virtual ~WebUserContentController(); 54 55 55 uint64_t identifier() { return m_identifier; }56 UserContentControllerIdentifier identifier() { return m_identifier; } 56 57 57 58 void addUserScript(InjectedBundleScriptWorld&, WebCore::UserScript&&); … … 72 73 73 74 private: 74 explicit WebUserContentController( uint64_t identifier);75 explicit WebUserContentController(UserContentControllerIdentifier); 75 76 76 77 // WebCore::UserContentProvider … … 112 113 #endif 113 114 114 uint64_tm_identifier;115 UserContentControllerIdentifier m_identifier; 115 116 116 117 typedef HashMap<RefPtr<InjectedBundleScriptWorld>, Vector<std::pair<uint64_t, WebCore::UserScript>>> WorldToUserScriptMap; … … 127 128 WebCore::ContentExtensions::ContentExtensionsBackend m_contentExtensionBackend; 128 129 #endif 129 130 130 }; 131 131 -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.h
r230059 r230210 47 47 #include "UserData.h" 48 48 #include "WebURLSchemeHandler.h" 49 #include "WebUserContentController.h" 49 50 #include <WebCore/ActivityState.h> 50 51 #include <WebCore/DictionaryPopupInfo.h> … … 1070 1071 #endif 1071 1072 1073 UserContentControllerIdentifier userContentControllerIdentifier() const { return m_userContentController->identifier(); } 1074 1072 1075 private: 1073 1076 WebPage(uint64_t pageID, WebPageCreationParameters&&);
Note: See TracChangeset
for help on using the changeset viewer.