Changeset 292468 in webkit
- Timestamp:
- Apr 6, 2022 8:20:50 AM (4 months ago)
- Location:
- trunk
- Files:
-
- 10 edited
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (modified) (1 diff)
-
Source/WebKit/NetworkProcess/NetworkLoadParameters.h (modified) (1 diff)
-
Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.h (modified) (1 diff)
-
Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp (modified) (2 diffs)
-
Source/WebKit/NetworkProcess/NetworkResourceLoader.h (modified) (4 diffs)
-
Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.cpp (modified) (2 diffs)
-
Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.h (modified) (1 diff)
-
Tools/ChangeLog (modified) (1 diff)
-
Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r292461 r292468 1 2022-04-06 Youenn Fablet <youenn@apple.com> 2 3 In case of COOP-based process swap, we need to make sure the document gets controlled by its matching service worker registration 4 https://bugs.webkit.org/show_bug.cgi?id=238800 5 <rdar://problem/91288849> 6 7 Reviewed by Chris Dumez. 8 9 Make sure in case loader is transferred to call controlClient in the new WebProcess. 10 To do so, we also update page and frame IDs. 11 Covered by API test. 12 13 * NetworkProcess/NetworkConnectionToWebProcess.cpp: 14 * NetworkProcess/NetworkLoadParameters.h: 15 * NetworkProcess/NetworkResourceLoadParameters.h: 16 * NetworkProcess/NetworkResourceLoader.cpp: 17 * NetworkProcess/NetworkResourceLoader.h: 18 * NetworkProcess/ServiceWorker/WebSWServerConnection.cpp: 19 * NetworkProcess/ServiceWorker/WebSWServerConnection.h: 20 1 21 2022-04-06 Kimmo Kinnunen <kkinnunen@apple.com> 2 22 -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp
r292197 r292468 590 590 CONNECTION_RELEASE_LOG(Loading, "scheduleResourceLoad: Resuming existing NetworkResourceLoader"); 591 591 m_networkResourceLoaders.add(identifier, *existingLoader); 592 existingLoader->transferToNewWebProcess(*this, identifier);592 existingLoader->transferToNewWebProcess(*this, loadParameters); 593 593 return; 594 594 } -
trunk/Source/WebKit/NetworkProcess/NetworkLoadParameters.h
r289134 r292468 45 45 class NetworkLoadParameters { 46 46 public: 47 WebPageProxyIdentifier webPageProxyID;48 WebCore::PageIdentifier webPageID;49 WebCore::FrameIdentifier webFrameID;47 mutable WebPageProxyIdentifier webPageProxyID; 48 mutable WebCore::PageIdentifier webPageID; 49 mutable WebCore::FrameIdentifier webFrameID; 50 50 RefPtr<WebCore::SecurityOrigin> topOrigin; 51 51 RefPtr<WebCore::SecurityOrigin> sourceOrigin; -
trunk/Source/WebKit/NetworkProcess/NetworkResourceLoadParameters.h
r287010 r292468 57 57 RefPtr<SandboxExtension> resourceSandboxExtension; // Created automatically for the sender. 58 58 mutable Seconds maximumBufferingTime; 59 WebCore::FetchOptions options;59 mutable WebCore::FetchOptions options; 60 60 std::optional<WebCore::ContentSecurityPolicyResponseHeaders> cspResponseHeaders; 61 61 WebCore::CrossOriginEmbedderPolicy parentCrossOriginEmbedderPolicy; -
trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.cpp
r292197 r292468 577 577 } 578 578 579 void NetworkResourceLoader::transferToNewWebProcess(NetworkConnectionToWebProcess& newConnection, WebCore::ResourceLoaderIdentifier newCoreIdentifier)579 void NetworkResourceLoader::transferToNewWebProcess(NetworkConnectionToWebProcess& newConnection, const NetworkResourceLoadParameters& parameters) 580 580 { 581 581 m_connection = newConnection; 582 m_parameters.identifier = newCoreIdentifier; 582 m_parameters.identifier = parameters.identifier; 583 m_parameters.webPageProxyID = parameters.webPageProxyID; 584 m_parameters.webPageID = parameters.webPageID; 585 m_parameters.webFrameID = parameters.webFrameID; 586 m_parameters.options.clientIdentifier = parameters.options.clientIdentifier; 583 587 584 588 #if ENABLE(SERVICE_WORKER) 585 589 ASSERT(m_responseCompletionHandler || m_cacheEntryWaitingForContinueDidReceiveResponse || m_serviceWorkerFetchTask); 590 if (m_serviceWorkerRegistration) { 591 if (auto* swConnection = newConnection.swConnection()) 592 swConnection->transferServiceWorkerLoadToNewWebProcess(*this, *m_serviceWorkerRegistration); 593 } 586 594 #else 587 595 ASSERT(m_responseCompletionHandler || m_cacheEntryWaitingForContinueDidReceiveResponse); … … 1209 1217 #if ENABLE(SERVICE_WORKER) 1210 1218 if (parameters().options.mode == FetchOptions::Mode::Navigate) { 1219 m_serviceWorkerRegistration = { }; 1211 1220 if (auto serviceWorkerFetchTask = m_connection->createFetchTask(*this, newRequest)) { 1212 1221 LOADER_RELEASE_LOG("continueWillSendRequest: Created a ServiceWorkerFetchTask to handle the redirect (fetchIdentifier=%" PRIu64 ")", serviceWorkerFetchTask->fetchIdentifier().toUInt64()); -
trunk/Source/WebKit/NetworkProcess/NetworkResourceLoader.h
r292197 r292468 41 41 #include <WebCore/PrivateClickMeasurement.h> 42 42 #include <WebCore/ResourceResponse.h> 43 #include <WebCore/SWServerRegistration.h> 43 44 #include <WebCore/SecurityPolicyViolationEvent.h> 44 45 #include <WebCore/SharedBuffer.h> … … 94 95 void abort(); 95 96 96 void transferToNewWebProcess(NetworkConnectionToWebProcess&, WebCore::ResourceLoaderIdentifier);97 void transferToNewWebProcess(NetworkConnectionToWebProcess&, const NetworkResourceLoadParameters&); 97 98 98 99 // Message handlers. … … 155 156 void setResultingClientIdentifier(String&& identifier) { m_resultingClientIdentifier = WTFMove(identifier); } 156 157 const String& resultingClientIdentifier() const { return m_resultingClientIdentifier; } 158 void setServiceWorkerRegistration(WebCore::SWServerRegistration& serviceWorkerRegistration) { m_serviceWorkerRegistration = serviceWorkerRegistration; } 157 159 #endif 158 160 … … 289 291 std::unique_ptr<ServiceWorkerFetchTask> m_serviceWorkerFetchTask; 290 292 String m_resultingClientIdentifier; 293 WeakPtr<WebCore::SWServerRegistration> m_serviceWorkerRegistration; 291 294 #endif 292 295 NetworkResourceLoadIdentifier m_resourceLoadID; -
trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.cpp
r292459 r292468 205 205 controlClient(loader.parameters(), *registration, request); 206 206 loader.setResultingClientIdentifier(loader.parameters().options.clientIdentifier->toString()); 207 loader.setServiceWorkerRegistration(*registration); 207 208 } else { 208 209 if (!loader.parameters().serviceWorkerRegistrationIdentifier) … … 667 668 } 668 669 670 void WebSWServerConnection::transferServiceWorkerLoadToNewWebProcess(NetworkResourceLoader& loader, WebCore::SWServerRegistration& registration) 671 { 672 controlClient(loader.parameters(), registration, loader.originalRequest()); 673 } 674 669 675 } // namespace WebKit 670 676 -
trunk/Source/WebKit/NetworkProcess/ServiceWorker/WebSWServerConnection.h
r292459 r292468 85 85 void fetchTaskTimedOut(WebCore::ServiceWorkerIdentifier); 86 86 87 void transferServiceWorkerLoadToNewWebProcess(NetworkResourceLoader&, WebCore::SWServerRegistration&); 88 87 89 private: 88 90 // Implement SWServer::Connection (Messages to the client WebProcess) -
trunk/Tools/ChangeLog
r292464 r292468 1 2022-04-06 Youenn Fablet <youenn@apple.com> 2 3 In case of COOP-based process swap, we need to make sure the document gets controlled by its matching service worker registration 4 https://bugs.webkit.org/show_bug.cgi?id=238800 5 <rdar://problem/91288849> 6 7 Reviewed by Chris Dumez. 8 9 * TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm: 10 1 11 2022-04-06 Carlos Garcia Campos <cgarcia@igalia.com> 2 12 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ServiceWorkerBasic.mm
r292459 r292468 3078 3078 " };" 3079 3079 "}" 3080 "" 3081 "function countServiceWorkerClients() {" 3082 " worker.postMessage('countServiceWorkerClients');" 3083 " navigator.serviceWorker.onmessage = (event) => {" 3084 " alert(event.data);" 3085 " };" 3086 "}" 3080 3087 "</script>"_s; 3081 3088 … … 3100 3107 " return;" 3101 3108 " }" 3109 " if (event.data === 'countServiceWorkerClients') {" 3110 " let currentClients = await self.clients.matchAll();" 3111 " event.source.postMessage(currentClients.length + ' client(s)');" 3112 " return;" 3113 " }" 3102 3114 "});"_s; 3103 3115 … … 3180 3192 [webView1 evaluateJavaScript:[NSString stringWithFormat:@"navigateOtherClientToURL('%@?swap')", baseURL] completionHandler: nil]; 3181 3193 EXPECT_WK_STREQ([webView1 _test_waitForAlert], "client"); 3194 3195 [webView1 evaluateJavaScript:@"countServiceWorkerClients()" completionHandler: nil]; 3196 EXPECT_WK_STREQ([webView1 _test_waitForAlert], "1 client(s)"); 3182 3197 } 3183 3198
Note: See TracChangeset
for help on using the changeset viewer.