Changeset 289247 in webkit
- Timestamp:
- Feb 7, 2022 4:18:53 PM (5 months ago)
- Location:
- trunk
- Files:
-
- 27 added
- 2 deleted
- 82 edited
- 6 copied
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/TestExpectations (modified) (3 diffs)
-
LayoutTests/imported/w3c/ChangeLog (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/content-security-policy/connect-src/shared-worker-connect-src-allowed.sub-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/content-security-policy/connect-src/shared-worker-connect-src-blocked.sub-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/content-security-policy/inside-worker/sharedworker-report-only.sub-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/content-security-policy/inside-worker/sharedworker-script-src.sub-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/content-security-policy/script-src/worker-set-timeout.sub-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/html/browsers/offline/appcache/workers/appcache-worker.https-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/html/cross-origin-embedder-policy/cross-origin-isolated-permission.https-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/html/cross-origin-embedder-policy/shared-workers.https-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/html/cross-origin-embedder-policy/worker-inheritance.sub.https-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/claim-shared-worker-fetch.https-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/workers/SharedWorker-script-error-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/workers/SharedWorker_dataUrl-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/workers/modules/shared-worker-import-blob-url.window-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/workers/modules/shared-worker-import-data-url-cross-origin-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/workers/modules/shared-worker-import-data-url.window-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/workers/modules/shared-worker-import-failure-expected.txt (modified) (2 diffs)
-
LayoutTests/imported/w3c/web-platform-tests/workers/modules/shared-worker-import-referrer-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/workers/modules/shared-worker-import.window-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/workers/modules/shared-worker-options-credentials-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/workers/semantics/multiple-workers/004-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/workers/semantics/multiple-workers/008-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/workers/semantics/reporting-errors/003-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/workers/semantics/reporting-errors/004-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/workers/shared-worker-from-blob-url.window-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/workers/shared-worker-in-data-url-context.window-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/workers/shared-worker-name-via-options-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/workers/shared-worker-options-mismatch-expected.txt (modified) (1 diff)
-
LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-redirected-sharedworker-origin-expected.txt (modified) (1 diff)
-
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/content-security-policy/connect-src (added)
-
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/content-security-policy/connect-src/shared-worker-connect-src-allowed.sub-expected.txt (added)
-
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/content-security-policy/inside-worker (added)
-
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/content-security-policy/inside-worker/sharedworker-connect-src.sub-expected.txt (added)
-
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/content-security-policy/inside-worker/sharedworker-report-only.sub-expected.txt (added)
-
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/content-security-policy/inside-worker/sharedworker-script-src.sub-expected.txt (added)
-
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/workers (added)
-
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/workers/modules (added)
-
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/workers/modules/shared-worker-import-blob-url.window-expected.txt (copied) (copied from trunk/LayoutTests/imported/w3c/web-platform-tests/workers/modules/shared-worker-import-blob-url.window-expected.txt) (1 diff)
-
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/workers/modules/shared-worker-import-data-url.window-expected.txt (copied) (copied from trunk/LayoutTests/imported/w3c/web-platform-tests/workers/modules/shared-worker-import-data-url.window-expected.txt) (1 diff)
-
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/workers/modules/shared-worker-import-referrer-expected.txt (added)
-
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/workers/modules/shared-worker-import.window-expected.txt (copied) (copied from trunk/LayoutTests/imported/w3c/web-platform-tests/workers/modules/shared-worker-import.window-expected.txt) (1 diff)
-
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/workers/modules/shared-worker-options-credentials-expected.txt (added)
-
LayoutTests/platform/gtk/imported/w3c/web-platform-tests/xhr/open-url-redirected-sharedworker-origin-expected.txt (copied) (copied from trunk/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-redirected-sharedworker-origin-expected.txt) (1 diff)
-
LayoutTests/platform/mac-wk1/TestExpectations (modified) (1 diff)
-
LayoutTests/platform/win/TestExpectations (modified) (1 diff)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/Headers.cmake (modified) (2 diffs)
-
Source/WebCore/Modules/indexeddb/IDBDatabaseIdentifier.h (modified) (3 diffs)
-
Source/WebCore/Sources.txt (modified) (1 diff)
-
Source/WebCore/WebCore.xcodeproj/project.pbxproj (modified) (12 diffs)
-
Source/WebCore/page/ClientOrigin.h (modified) (4 diffs)
-
Source/WebCore/page/SecurityOrigin.h (modified) (1 diff)
-
Source/WebCore/page/SecurityOriginData.h (modified) (3 diffs)
-
Source/WebCore/platform/Logging.h (modified) (1 diff)
-
Source/WebCore/workers/WorkerThread.cpp (modified) (2 diffs)
-
Source/WebCore/workers/WorkerThread.h (modified) (2 diffs)
-
Source/WebCore/workers/shared/SharedWorker.cpp (modified) (6 diffs)
-
Source/WebCore/workers/shared/SharedWorker.h (modified) (6 diffs)
-
Source/WebCore/workers/shared/SharedWorker.idl (modified) (1 diff)
-
Source/WebCore/workers/shared/SharedWorkerKey.h (added)
-
Source/WebCore/workers/shared/SharedWorkerManager.cpp (deleted)
-
Source/WebCore/workers/shared/SharedWorkerManager.h (deleted)
-
Source/WebCore/workers/shared/SharedWorkerObjectConnection.cpp (modified) (2 diffs)
-
Source/WebCore/workers/shared/SharedWorkerObjectConnection.h (modified) (2 diffs)
-
Source/WebCore/workers/shared/SharedWorkerObjectIdentifier.h (copied) (copied from trunk/Source/WebCore/workers/shared/SharedWorkerObjectConnection.cpp) (1 diff)
-
Source/WebCore/workers/shared/SharedWorkerScriptLoader.cpp (modified) (4 diffs)
-
Source/WebCore/workers/shared/SharedWorkerScriptLoader.h (modified) (4 diffs)
-
Source/WebCore/workers/shared/context/SharedWorkerContextManager.cpp (added)
-
Source/WebCore/workers/shared/context/SharedWorkerContextManager.h (added)
-
Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.cpp (modified) (6 diffs)
-
Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.h (modified) (3 diffs)
-
Source/WebKit/CMakeLists.txt (modified) (3 diffs)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/DerivedSources-input.xcfilelist (modified) (2 diffs)
-
Source/WebKit/DerivedSources-output.xcfilelist (modified) (1 diff)
-
Source/WebKit/DerivedSources.make (modified) (2 diffs)
-
Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp (modified) (7 diffs)
-
Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h (modified) (5 diffs)
-
Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in (modified) (1 diff)
-
Source/WebKit/NetworkProcess/NetworkSession.cpp (modified) (2 diffs)
-
Source/WebKit/NetworkProcess/NetworkSession.h (modified) (3 diffs)
-
Source/WebKit/NetworkProcess/SharedWorker (added)
-
Source/WebKit/NetworkProcess/SharedWorker/WebSharedWorker.cpp (copied) (copied from trunk/Source/WebKit/WebProcess/Storage/WebSharedWorkerObjectConnection.cpp) (1 diff)
-
Source/WebKit/NetworkProcess/SharedWorker/WebSharedWorker.h (added)
-
Source/WebKit/NetworkProcess/SharedWorker/WebSharedWorkerServer.cpp (added)
-
Source/WebKit/NetworkProcess/SharedWorker/WebSharedWorkerServer.h (added)
-
Source/WebKit/NetworkProcess/SharedWorker/WebSharedWorkerServerConnection.cpp (added)
-
Source/WebKit/NetworkProcess/SharedWorker/WebSharedWorkerServerConnection.h (added)
-
Source/WebKit/NetworkProcess/SharedWorker/WebSharedWorkerServerConnection.messages.in (added)
-
Source/WebKit/NetworkProcess/SharedWorker/WebSharedWorkerServerToContextConnection.cpp (added)
-
Source/WebKit/NetworkProcess/SharedWorker/WebSharedWorkerServerToContextConnection.h (added)
-
Source/WebKit/NetworkProcess/SharedWorker/WebSharedWorkerServerToContextConnection.messages.in (added)
-
Source/WebKit/Platform/Logging.h (modified) (1 diff)
-
Source/WebKit/Scripts/webkit/messages.py (modified) (1 diff)
-
Source/WebKit/Sources.txt (modified) (3 diffs)
-
Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp (modified) (4 diffs)
-
Source/WebKit/UIProcess/Network/NetworkProcessProxy.h (modified) (1 diff)
-
Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in (modified) (1 diff)
-
Source/WebKit/UIProcess/WebPageProxy.cpp (modified) (1 diff)
-
Source/WebKit/UIProcess/WebProcessPool.cpp (modified) (15 diffs)
-
Source/WebKit/UIProcess/WebProcessPool.h (modified) (2 diffs)
-
Source/WebKit/UIProcess/WebProcessProxy.cpp (modified) (11 diffs)
-
Source/WebKit/UIProcess/WebProcessProxy.h (modified) (5 diffs)
-
Source/WebKit/WebKit.xcodeproj/project.pbxproj (modified) (11 diffs)
-
Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp (modified) (2 diffs)
-
Source/WebKit/WebProcess/Network/NetworkProcessConnection.h (modified) (1 diff)
-
Source/WebKit/WebProcess/Storage/WebSharedWorkerContextManagerConnection.cpp (added)
-
Source/WebKit/WebProcess/Storage/WebSharedWorkerContextManagerConnection.h (added)
-
Source/WebKit/WebProcess/Storage/WebSharedWorkerContextManagerConnection.messages.in (added)
-
Source/WebKit/WebProcess/Storage/WebSharedWorkerObjectConnection.cpp (modified) (2 diffs)
-
Source/WebKit/WebProcess/Storage/WebSharedWorkerObjectConnection.h (modified) (3 diffs)
-
Source/WebKit/WebProcess/Storage/WebSharedWorkerObjectConnection.messages.in (added)
-
Source/WebKit/WebProcess/WebProcess.cpp (modified) (5 diffs)
-
Source/WebKit/WebProcess/WebProcess.h (modified) (1 diff)
-
Source/WebKit/WebProcess/WebProcess.messages.in (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r289244 r289247 1 2022-02-07 Chris Dumez <cdumez@apple.com> 2 3 Add support for sharing Shared Workers (including across WebProcesses) 4 https://bugs.webkit.org/show_bug.cgi?id=235958 5 <rdar://problem/88330666> 6 7 Reviewed by Darin Adler. 8 9 Rebaseline existing WPT tests involving shared workers. 10 11 * TestExpectations: 12 * platform/gtk-wk2/imported/w3c/web-platform-tests/content-security-policy/inside-worker/sharedworker-connect-src.sub-expected.txt: Added. 13 * platform/gtk-wk2/imported/w3c/web-platform-tests/content-security-policy/inside-worker/sharedworker-report-only.sub-expected.txt: Added. 14 * platform/gtk-wk2/imported/w3c/web-platform-tests/content-security-policy/inside-worker/sharedworker-script-src.sub-expected.txt: Added. 15 * platform/gtk-wk2/imported/w3c/web-platform-tests/workers/modules/shared-worker-import-blob-url.window-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/workers/modules/shared-worker-import-blob-url.window-expected.txt. 16 * platform/gtk-wk2/imported/w3c/web-platform-tests/workers/modules/shared-worker-import-data-url.window-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/workers/modules/shared-worker-import-data-url.window-expected.txt. 17 * platform/gtk-wk2/imported/w3c/web-platform-tests/workers/modules/shared-worker-import.window-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/workers/modules/shared-worker-import.window-expected.txt. 18 * platform/gtk-wk2/imported/w3c/web-platform-tests/workers/modules/shared-worker-options-credentials-expected.txt: Added. 19 * platform/gtk-wk2/imported/w3c/web-platform-tests/xhr/open-url-redirected-sharedworker-origin-expected.txt: Copied from LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-redirected-sharedworker-origin-expected.txt. 20 1 21 2022-02-07 Chris Dumez <cdumez@apple.com> 2 22 -
trunk/LayoutTests/TestExpectations
r289244 r289247 460 460 imported/w3c/web-platform-tests/webaudio/the-audio-api/the-audionode-interface/audionode-disconnect-audioparam.html [ DumpJSConsoleLogInStdErr ] 461 461 imported/w3c/web-platform-tests/workers/same-origin-check.sub.html [ DumpJSConsoleLogInStdErr ] 462 imported/w3c/web-platform-tests/workers/shared-worker-name-via-options.html [ DumpJSConsoleLogInStdErr ]463 462 fast/files/file-reader-back-forward-cache.html [ DumpJSConsoleLogInStdErr ] 464 463 fast/history/page-cache-createImageBitmap.html [ DumpJSConsoleLogInStdErr ] … … 850 849 imported/w3c/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/plugins-and-mimetypes.html [ Failure Pass ] 851 850 imported/w3c/web-platform-tests/beacon/beacon-redirect.sub.window.html [ Failure Pass ] 851 imported/w3c/web-platform-tests/html/cross-origin-embedder-policy/anonymous-iframe/sharedworker-partitioning.tentative.https.window.html [ Failure Pass ] 852 852 853 853 imported/w3c/web-platform-tests/html/semantics/document-metadata/the-link-element/link-load-error-events.html [ DumpJSConsoleLogInStdErr ] … … 5113 5113 imported/w3c/web-platform-tests/workers/modules/dedicated-worker-import-csp.html [ Skip ] 5114 5114 5115 # Test is flaky because MessagePort messages may get received in a different order when several MessagePorts are involved, 5116 # due to how MessagePort::dispatchMessages() is implemented. 5117 imported/w3c/web-platform-tests/workers/shared-worker-name-via-options.html [ DumpJSConsoleLogInStdErr Failure Pass ] 5118 5115 5119 # Plugins 5116 5120 # FIXME: Remove these tests. -
trunk/LayoutTests/imported/w3c/ChangeLog
r289236 r289247 1 2022-02-07 Chris Dumez <cdumez@apple.com> 2 3 Add support for sharing Shared Workers (including across WebProcesses) 4 https://bugs.webkit.org/show_bug.cgi?id=235958 5 <rdar://problem/88330666> 6 7 Reviewed by Darin Adler. 8 9 Rebaseline existing WPT tests involving shared workers. 10 11 * web-platform-tests/content-security-policy/connect-src/shared-worker-connect-src-allowed.sub-expected.txt: 12 * web-platform-tests/content-security-policy/connect-src/shared-worker-connect-src-blocked.sub-expected.txt: 13 * web-platform-tests/content-security-policy/inside-worker/sharedworker-report-only.sub-expected.txt: 14 * web-platform-tests/content-security-policy/inside-worker/sharedworker-script-src.sub-expected.txt: 15 * web-platform-tests/content-security-policy/script-src/worker-set-timeout.sub-expected.txt: 16 * web-platform-tests/html/browsers/offline/appcache/workers/appcache-worker.https-expected.txt: 17 * web-platform-tests/html/cross-origin-embedder-policy/cross-origin-isolated-permission.https-expected.txt: 18 * web-platform-tests/html/cross-origin-embedder-policy/shared-workers.https-expected.txt: 19 * web-platform-tests/html/cross-origin-embedder-policy/worker-inheritance.sub.https-expected.txt: 20 * web-platform-tests/service-workers/service-worker/claim-shared-worker-fetch.https-expected.txt: 21 * web-platform-tests/workers/SharedWorker_dataUrl-expected.txt: 22 * web-platform-tests/workers/modules/shared-worker-import-blob-url.window-expected.txt: 23 * web-platform-tests/workers/modules/shared-worker-import-data-url-cross-origin-expected.txt: 24 * web-platform-tests/workers/modules/shared-worker-import-data-url.window-expected.txt: 25 * web-platform-tests/workers/modules/shared-worker-import-referrer-expected.txt: 26 * web-platform-tests/workers/modules/shared-worker-import.window-expected.txt: 27 * web-platform-tests/workers/modules/shared-worker-options-credentials-expected.txt: 28 * web-platform-tests/workers/semantics/multiple-workers/004-expected.txt: 29 * web-platform-tests/workers/semantics/multiple-workers/008-expected.txt: 30 * web-platform-tests/workers/shared-worker-from-blob-url.window-expected.txt: 31 * web-platform-tests/workers/shared-worker-name-via-options-expected.txt: 32 * web-platform-tests/workers/shared-worker-options-mismatch-expected.txt: 33 * web-platform-tests/xhr/open-url-redirected-sharedworker-origin-expected.txt: 34 1 35 2022-02-07 Chris Dumez <cdumez@apple.com> 2 36 -
trunk/LayoutTests/imported/w3c/web-platform-tests/content-security-policy/connect-src/shared-worker-connect-src-allowed.sub-expected.txt
r289119 r289247 1 Blocked access to external URL http://www1.localhost:8800/content-security-policy/support/fail.asis2 1 3 2 FAIL Expecting logs: ["xhr allowed","TEST COMPLETE"] assert_unreached: unexpected log: xhr blocked Reached unreachable code -
trunk/LayoutTests/imported/w3c/web-platform-tests/content-security-policy/connect-src/shared-worker-connect-src-blocked.sub-expected.txt
r289119 r289247 1 Blocked access to external URL http://www1.localhost:8800/content-security-policy/support/fail.asis2 1 This test loads a shared worker, delivered with its own policy. The worker should be blocked from making an XHR as that policy specifies a connect-src 'none', though this resource's policy is connect-src *. No report should be sent since the worker's policy doesn't specify a report-uri. 3 2 -
trunk/LayoutTests/imported/w3c/web-platform-tests/content-security-policy/inside-worker/sharedworker-report-only.sub-expected.txt
r286821 r289247 1 Blocked access to external URL https://www.localhost:9444/content-security-policy/support/resource.py?cross-origin-fetch2 Blocked access to external URL https://www.localhost:9444/content-security-policy/support/resource.py?cross-origin-xhr3 Blocked access to external URL https://www.localhost:9444/content-security-policy/support/resource.py?cross-origin-fetch4 1 5 2 PASS Same-origin 'fetch()'. -
trunk/LayoutTests/imported/w3c/web-platform-tests/content-security-policy/inside-worker/sharedworker-script-src.sub-expected.txt
r286821 r289247 3 3 4 4 TIMEOUT sharedworker-script-src Test timed out 5 FAIL Cross-origin `importScripts()` not blocked in http: withour CSP A network error occurred. 6 FAIL `eval()` not blocked in http: without CSP Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self' 'nonce-a' blob: filesystem:". 7 8 FAIL `setTimeout([string])` not blocked in http: without CSP assert_unreached: callback not called. Reached unreachable code 5 FAIL Cross-origin `importScripts()` not blocked in http: withour CSP Load failed 6 PASS `eval()` not blocked in http: without CSP 7 PASS `setTimeout([string])` not blocked in http: without CSP 9 8 TIMEOUT Cross-origin `importScripts()` blocked in http: with script-src 'self' Test timed out 10 9 NOTRUN `eval()` blocked in http: with script-src 'self' -
trunk/LayoutTests/imported/w3c/web-platform-tests/content-security-policy/script-src/worker-set-timeout.sub-expected.txt
r286821 r289247 1 1 2 2 FAIL Dedicated worker inherits CSP from main document assert_equals: expected "setTimeout allowed" but got "setTimeout blocked" 3 FAIL Shared worker delivers its own CSP assert_equals: expected "setTimeout blocked" but got "setTimeout allowed" 3 PASS Shared worker delivers its own CSP 4 4 -
trunk/LayoutTests/imported/w3c/web-platform-tests/html/browsers/offline/appcache/workers/appcache-worker.https-expected.txt
r286821 r289247 6 6 PASS Dedicated worker of the fallbacked script 7 7 PASS Dedicated worker of the not-in-cache script 8 PASS Shared worker of the cached script 9 PASS Shared worker of the fallbacked script 8 FAIL Shared worker of the cached script assert_equals: expected "Done: cached" but got "Error: Importing a non-cached script must fail." 9 FAIL Shared worker of the fallbacked script assert_equals: expected "Done: fallbacked" but got "Error: Importing a non-cached script must fail." 10 10 TIMEOUT Shared worker of the not-in-cache script Test timed out 11 11 -
trunk/LayoutTests/imported/w3c/web-platform-tests/html/cross-origin-embedder-policy/cross-origin-isolated-permission.https-expected.txt
r286821 r289247 21 21 FAIL dedicated worker: scheme = blob, value = (\) assert_equals: expected false but got true 22 22 PASS shared worker: withCoopCoep = false 23 PASS shared worker: withCoopCoep = true23 FAIL shared worker: withCoopCoep = true assert_equals: expected true but got false 24 24 PASS service worker: withCoopCoep = false 25 25 FAIL service worker: withCoopCoep = true assert_equals: expected true but got false -
trunk/LayoutTests/imported/w3c/web-platform-tests/html/cross-origin-embedder-policy/shared-workers.https-expected.txt
r286821 r289247 3 3 4 4 PASS default policy (derived from response) 5 FAIL "require-corp" (derived from response) assert_equals: expected "failure" but got "success" 5 PASS "require-corp" (derived from response) 6 6 PASS default policy (derived from owner set due to use of local scheme - blob URL) 7 7 FAIL "require-corp" (derived from owner set due to use of local scheme - blob URL) assert_equals: expected "failure" but got "success" -
trunk/LayoutTests/imported/w3c/web-platform-tests/html/cross-origin-embedder-policy/worker-inheritance.sub.https-expected.txt
r286821 r289247 1 Blocked access to external URL https://www.localhost:9444/common/blank.html2 1 Blocked access to external URL https://www.localhost:9444/common/blank.html 3 2 Blocked access to external URL https://www.localhost:9444/common/blank.html -
trunk/LayoutTests/imported/w3c/web-platform-tests/service-workers/service-worker/claim-shared-worker-fetch.https-expected.txt
r289120 r289247 1 1 2 PASS fetch() in SharedWorker should be intercepted after the client is claimed.3 2 3 FAIL fetch() in SharedWorker should be intercepted after the client is claimed. assert_equals: fetch() in the shared worker should be intercepted. expected "Intercepted!" but got "a simple text file\n" 4 -
trunk/LayoutTests/imported/w3c/web-platform-tests/workers/SharedWorker-script-error-expected.txt
r289116 r289247 1 CONSOLE MESSAGE: Error: assert_unreached: FAIL: onerror invoked for a script error. Reached unreachable code2 3 Harness Error (FAIL), message = Error: assert_unreached: FAIL: onerror invoked for a script error. Reached unreachable code4 1 5 2 PASS Test script error unhandled. -
trunk/LayoutTests/imported/w3c/web-platform-tests/workers/SharedWorker_dataUrl-expected.txt
r286821 r289247 1 CONSOLE MESSAGE: Error: assert_equals: expected 2 but got 12 1 3 2 4 Harness Error (FAIL), message = Error: assert_equals: expected 2 but got 1 3 PASS Data URL not shared by cross-origin SharedWorkers 4 PASS Data URLs shared by same-origin SharedWorkers 5 5 6 PASS Data URL not shared by cross-origin SharedWorkers7 TIMEOUT Data URLs shared by same-origin SharedWorkers Test timed out8 9 Harness Error (FAIL), message = Error: assert_equals: expected 2 but got 110 11 PASS Data URL not shared by cross-origin SharedWorkers12 TIMEOUT Data URLs shared by same-origin SharedWorkers Test timed out13 -
trunk/LayoutTests/imported/w3c/web-platform-tests/workers/modules/shared-worker-import-blob-url.window-expected.txt
r286821 r289247 1 Blocked access to external URL https://www1.localhost:9443/workers/modules/resources/export-on-load-script.py2 1 3 2 PASS Static import. -
trunk/LayoutTests/imported/w3c/web-platform-tests/workers/modules/shared-worker-import-data-url-cross-origin-expected.txt
r286821 r289247 1 CONSOLE MESSAGE: Origin null is not allowed by Access-Control-Allow-Origin. Status code: 2002 1 3 2 Harness Error (TIMEOUT), message = null -
trunk/LayoutTests/imported/w3c/web-platform-tests/workers/modules/shared-worker-import-data-url.window-expected.txt
r286821 r289247 1 Blocked access to external URL https://www1.localhost:9443/workers/modules/resources/export-on-load-script.py2 1 3 2 Harness Error (TIMEOUT), message = null -
trunk/LayoutTests/imported/w3c/web-platform-tests/workers/modules/shared-worker-import-failure-expected.txt
r286821 r289247 1 CONSOLE MESSAGE: Cannot load static-import-worker.js.2 1 3 2 PASS importScripts() on module worker should throw an exception. … … 6 5 PASS Dynamic import for non-existent script should throw an exception. 7 6 PASS SharedWorker construction for an invalid URL should throw an exception. 8 FAIL SharedWorker construction for a file URL should throw an exception. assert_throws_dom: function "() => new SharedWorker(scriptURL, { type: 'module' })" did not throw 7 PASS SharedWorker construction for a file URL should throw an exception. 9 8 -
trunk/LayoutTests/imported/w3c/web-platform-tests/workers/modules/shared-worker-import-referrer-expected.txt
r289116 r289247 1 Blocked access to external URL https://www1.localhost:9443/workers/modules/resources/export-referrer-checker.py2 Blocked access to external URL https://www1.localhost:9443/workers/modules/resources/export-referrer-checker.py3 Blocked access to external URL https://www1.localhost:9443/workers/modules/resources/export-referrer-checker.py4 Blocked access to external URL https://www1.localhost:9443/workers/modules/resources/export-referrer-checker.py5 Blocked access to external URL https://www1.localhost:9443/workers/modules/resources/export-referrer-checker.py6 Blocked access to external URL https://www1.localhost:9443/workers/modules/resources/export-referrer-checker.py7 1 8 2 PASS Same-origin top-level module script loading with "no-referrer" referrer policy 9 3 PASS Same-origin top-level module script loading with "origin" referrer policy 10 4 PASS Same-origin top-level module script loading with "same-origin" referrer policy 11 PASS Same-origin static import with "no-referrer" referrer policy. 12 PASS Same-origin static import with "origin" referrer policy. 5 FAIL Same-origin static import with "no-referrer" referrer policy. assert_equals: expected "" but got "http://localhost:8800/workers/modules/resources/static-import-same-origin-referrer-checker-worker.js" 6 FAIL Same-origin static import with "origin" referrer policy. assert_equals: expected "http://localhost:8800/" but got "http://localhost:8800/workers/modules/resources/static-import-same-origin-referrer-checker-worker.js" 13 7 PASS Same-origin static import with "same-origin" referrer policy. 14 8 FAIL Cross-origin static import with "no-referrer" referrer policy. promise_test: Unhandled rejection with value: object "TypeError: Type error" 15 9 FAIL Cross-origin static import with "origin" referrer policy. promise_test: Unhandled rejection with value: object "TypeError: Type error" 16 10 FAIL Cross-origin static import with "same-origin" referrer policy. promise_test: Unhandled rejection with value: object "TypeError: Type error" 17 FAIL Same-origin dynamic import with "no-referrer" referrer policy. assert_equals: expected "" but got "http://localhost:8800/workers/modules/resources/dynamic-import-same-origin-referrer-checker-worker.js" 18 FAIL Same-origin dynamic import with "origin" referrer policy. assert_equals: expected "http://localhost:8800/" but got "http://localhost:8800/workers/modules/resources/dynamic-import-same-origin-referrer-checker-worker.js" 11 PASS Same-origin dynamic import with "no-referrer" referrer policy. 12 PASS Same-origin dynamic import with "origin" referrer policy. 19 13 PASS Same-origin dynamic import with "same-origin" referrer policy. 20 14 FAIL Cross-origin dynamic import with "no-referrer" referrer policy. promise_test: Unhandled rejection with value: object "TypeError: Type error" -
trunk/LayoutTests/imported/w3c/web-platform-tests/workers/modules/shared-worker-import.window-expected.txt
r286821 r289247 1 Blocked access to external URL https://www1.localhost:9443/workers/modules/resources/export-on-load-script.py2 1 3 2 PASS Static import. -
trunk/LayoutTests/imported/w3c/web-platform-tests/workers/modules/shared-worker-options-credentials-expected.txt
r286821 r289247 1 Blocked access to external URL http://www1.localhost:8800/workers/modules/resources/export-credentials.py2 1 3 2 Harness Error (TIMEOUT), message = null -
trunk/LayoutTests/imported/w3c/web-platform-tests/workers/semantics/multiple-workers/004-expected.txt
r286821 r289247 1 1 2 Harness Error (TIMEOUT), message = null 2 PASS shared worker with multiple documents 3 3 4 NOTRUN shared worker with multiple documents5 -
trunk/LayoutTests/imported/w3c/web-platform-tests/workers/semantics/multiple-workers/008-expected.txt
r286821 r289247 1 1 2 Harness Error (TIMEOUT), message = null 2 PASS messagechannel in shared worker 3 3 4 TIMEOUT messagechannel in shared worker Test timed out5 -
trunk/LayoutTests/imported/w3c/web-platform-tests/workers/semantics/reporting-errors/003-expected.txt
r286821 r289247 1 1 2 FAIL shared worker, no error event on worker or port assert_unreached: error on worker Reached unreachable code 2 PASS shared worker, no error event on worker or port 3 3 -
trunk/LayoutTests/imported/w3c/web-platform-tests/workers/semantics/reporting-errors/004-expected.txt
r286821 r289247 1 1 2 FAIL shared worker in two documents and window.onerror assert_unreached: (outer) error on worker Reached unreachable code 2 PASS shared worker in two documents and window.onerror 3 3 -
trunk/LayoutTests/imported/w3c/web-platform-tests/workers/shared-worker-from-blob-url.window-expected.txt
r286821 r289247 1 1 2 Harness Error (TIMEOUT), message = null 2 PASS Creating a shared worker from a blob URL works. 3 PASS Creating a shared worker from a blob URL works immediately before revoking. 4 PASS Connecting to a shared worker on a revoked blob URL works. 3 5 4 FAIL Creating a shared worker from a blob URL works. assert_equals: expected "worker_OK_2" but got "worker_OK_1"5 PASS Creating a shared worker from a blob URL works immediately before revoking.6 TIMEOUT Connecting to a shared worker on a revoked blob URL works. Test timed out7 -
trunk/LayoutTests/imported/w3c/web-platform-tests/workers/shared-worker-in-data-url-context.window-expected.txt
r267649 r289247 1 CONSOLE MESSAGE: Cannot load http://localhost:8800/workers/support/post-message-on-load-worker.js. 1 2 2 FAIL Create a shared worker in a data url frame assert_equals: expected "PASS" but got "SharedWorker construction unexpectedly synchronously failed" 3 FAIL Create a data url shared worker in a data url frame assert_equals: expected "PASS" but got "SharedWorker construction unexpectedly synchronously failed" 3 PASS Create a shared worker in a data url frame 4 PASS Create a data url shared worker in a data url frame 4 5 -
trunk/LayoutTests/imported/w3c/web-platform-tests/workers/shared-worker-name-via-options-expected.txt
r286821 r289247 1 1 2 FAIL Test the name property of shared workers mixing constructor options and constructor strings Error: assert_equals: expected 2 but got 1 2 PASS Test the name property of shared workers mixing constructor options and constructor strings 3 3 -
trunk/LayoutTests/imported/w3c/web-platform-tests/workers/shared-worker-options-mismatch-expected.txt
r282484 r289247 1 1 2 Harness Error (TIMEOUT), message = null 2 PASS Connecting to shared worker with different options should be blocked: default to module 3 PASS Connecting to shared worker with different options should be blocked: module to default 4 PASS Connecting to shared worker with different options should be blocked: classic to module 5 PASS Connecting to shared worker with different options should be blocked: module to classic 6 PASS Connecting to shared worker with different options should be blocked: default to omit in classic 7 PASS Connecting to shared worker with different options should be blocked: default to include in classic 8 PASS Connecting to shared worker with different options should be blocked: omit to default in classic 9 PASS Connecting to shared worker with different options should be blocked: omit to same-origin in classic 10 PASS Connecting to shared worker with different options should be blocked: omit to include in classic 11 PASS Connecting to shared worker with different options should be blocked: same-origin to omit in classic 12 PASS Connecting to shared worker with different options should be blocked: same-origin to include in classic 13 PASS Connecting to shared worker with different options should be blocked: include to default in classic 14 PASS Connecting to shared worker with different options should be blocked: include to omit in classic 15 PASS Connecting to shared worker with different options should be blocked: include to same-origin in classic 16 PASS Connecting to shared worker with different options should be blocked: default to omit in module 17 PASS Connecting to shared worker with different options should be blocked: default to include in module 18 PASS Connecting to shared worker with different options should be blocked: omit to default in module 19 PASS Connecting to shared worker with different options should be blocked: omit to same-origin in module 20 PASS Connecting to shared worker with different options should be blocked: omit to include in module 21 PASS Connecting to shared worker with different options should be blocked: same-origin to omit in module 22 PASS Connecting to shared worker with different options should be blocked: same-origin to include in module 23 PASS Connecting to shared worker with different options should be blocked: include to default in module 24 PASS Connecting to shared worker with different options should be blocked: include to omit in module 25 PASS Connecting to shared worker with different options should be blocked: include to same-origin in module 3 26 4 TIMEOUT Connecting to shared worker with different options should be blocked: default to module Test timed out5 NOTRUN Connecting to shared worker with different options should be blocked: module to default6 NOTRUN Connecting to shared worker with different options should be blocked: classic to module7 NOTRUN Connecting to shared worker with different options should be blocked: module to classic8 NOTRUN Connecting to shared worker with different options should be blocked: default to omit in classic9 NOTRUN Connecting to shared worker with different options should be blocked: default to include in classic10 NOTRUN Connecting to shared worker with different options should be blocked: omit to default in classic11 NOTRUN Connecting to shared worker with different options should be blocked: omit to same-origin in classic12 NOTRUN Connecting to shared worker with different options should be blocked: omit to include in classic13 NOTRUN Connecting to shared worker with different options should be blocked: same-origin to omit in classic14 NOTRUN Connecting to shared worker with different options should be blocked: same-origin to include in classic15 NOTRUN Connecting to shared worker with different options should be blocked: include to default in classic16 NOTRUN Connecting to shared worker with different options should be blocked: include to omit in classic17 NOTRUN Connecting to shared worker with different options should be blocked: include to same-origin in classic18 NOTRUN Connecting to shared worker with different options should be blocked: default to omit in module19 NOTRUN Connecting to shared worker with different options should be blocked: default to include in module20 NOTRUN Connecting to shared worker with different options should be blocked: omit to default in module21 NOTRUN Connecting to shared worker with different options should be blocked: omit to same-origin in module22 NOTRUN Connecting to shared worker with different options should be blocked: omit to include in module23 NOTRUN Connecting to shared worker with different options should be blocked: same-origin to omit in module24 NOTRUN Connecting to shared worker with different options should be blocked: same-origin to include in module25 NOTRUN Connecting to shared worker with different options should be blocked: include to default in module26 NOTRUN Connecting to shared worker with different options should be blocked: include to omit in module27 NOTRUN Connecting to shared worker with different options should be blocked: include to same-origin in module28 -
trunk/LayoutTests/imported/w3c/web-platform-tests/xhr/open-url-redirected-sharedworker-origin-expected.txt
r286821 r289247 1 Blocked access to external URL http://www2.localhost:8800/xhr/resources/inspect-headers.py?filter_name=origin&cors2 1 3 2 FAIL Referer header assert_equals: expected "Referer: http://localhost:8800/xhr/resources/workerxhr-origin-referrer.js\n" but got "Referer: http://localhost:8800/xhr/resources/redirect.py?location=workerxhr-origin-referrer.js\n" -
trunk/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/workers/modules/shared-worker-import-blob-url.window-expected.txt
r289246 r289247 1 Blocked access to external URL https://www1.localhost:9443/workers/modules/resources/export-on-load-script.py2 1 3 2 PASS Static import. 4 FAIL Static import (cross-origin). promise_test: Unhandled rejection with value: "Importing a module script failed." 3 PASS Static import (cross-origin). 5 4 PASS Static import (redirect). 6 5 PASS Nested static import. -
trunk/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/workers/modules/shared-worker-import-data-url.window-expected.txt
r289246 r289247 1 Blocked access to external URL https://www1.localhost:9443/workers/modules/resources/export-on-load-script.py2 1 3 2 Harness Error (TIMEOUT), message = null 4 3 5 4 PASS Static import. 6 TIMEOUT Static import (cross-origin). Test timed out 7 NOTRUN Static import (redirect). 5 PASS Static import (cross-origin). 6 TIMEOUT Static import (redirect). Test timed out 8 7 NOTRUN Nested static import. 9 8 NOTRUN Static import and then dynamic import. -
trunk/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/workers/modules/shared-worker-import.window-expected.txt
r289246 r289247 1 Blocked access to external URL https://www1.localhost:9443/workers/modules/resources/export-on-load-script.py2 1 3 2 PASS Static import. 4 FAIL Static import (cross-origin). promise_test: Unhandled rejection with value: "Importing a module script failed." 3 PASS Static import (cross-origin). 5 4 PASS Static import (redirect). 6 5 PASS Nested static import. -
trunk/LayoutTests/platform/gtk/imported/w3c/web-platform-tests/xhr/open-url-redirected-sharedworker-origin-expected.txt
r289246 r289247 1 Blocked access to external URL http://www2.localhost:8800/xhr/resources/inspect-headers.py?filter_name=origin&cors2 1 3 2 FAIL Referer header assert_equals: expected "Referer: http://localhost:8800/xhr/resources/workerxhr-origin-referrer.js\n" but got "Referer: http://localhost:8800/xhr/resources/redirect.py?location=workerxhr-origin-referrer.js\n" 4 FAIL Origin header assert_equals: expected "Origin: http://localhost:8800\n" but got "" 3 PASS Origin header 5 4 PASS Request URL test 6 5 -
trunk/LayoutTests/platform/mac-wk1/TestExpectations
r289244 r289247 225 225 imported/w3c/web-platform-tests/workers/semantics/xhr/006.html [ Skip ] 226 226 imported/w3c/web-platform-tests/workers/shared-worker-from-blob-url.window.html [ Skip ] 227 imported/w3c/web-platform-tests/workers/shared-worker-in-data-url-context.window.html [ Skip ] 227 228 imported/w3c/web-platform-tests/workers/shared-worker-name-via-options.html [ Skip ] 228 229 imported/w3c/web-platform-tests/workers/shared-worker-options-mismatch.html [ Skip ] -
trunk/LayoutTests/platform/win/TestExpectations
r289238 r289247 337 337 imported/w3c/web-platform-tests/workers/semantics/xhr/006.html [ Skip ] 338 338 imported/w3c/web-platform-tests/workers/shared-worker-from-blob-url.window.html [ Skip ] 339 imported/w3c/web-platform-tests/workers/shared-worker-in-data-url-context.window.html [ Skip ] 339 340 imported/w3c/web-platform-tests/workers/shared-worker-name-via-options.html [ Skip ] 340 341 imported/w3c/web-platform-tests/workers/shared-worker-options-mismatch.html [ Skip ] -
trunk/Source/WebCore/ChangeLog
r289246 r289247 1 2022-02-07 Chris Dumez <cdumez@apple.com> 2 3 Add support for sharing Shared Workers (including across WebProcesses) 4 https://bugs.webkit.org/show_bug.cgi?id=235958 5 <rdar://problem/88330666> 6 7 Reviewed by Darin Adler. 8 9 Add support for sharing Shared Workers, including across WebProcesses. The architecture 10 is modeled after the one we use for Service Workers since they are very similar. I tried 11 sharing as much code as possible with Service Workers but some more work can probably be 12 done in this area. 13 14 With this change, shared workers should be mostly functional and spec compliant. However, 15 the feature remains disabled by default for now as there are still WPT tests failures I 16 need to investigate. Also, I need to implement a better process suspension logic on iOS 17 to replace the hack I added in this patch (to make the tests run reliably on iOS). 18 19 As with Service Workers, Shared Workers are partitioned by (Top Origin + Frame Origin) 20 for privacy reasons. This is achieved via the SharedWorkerKey object that we use as 21 HashMap key. 22 23 No new tests, covered by existing WPT tests. 24 25 * Headers.cmake: 26 * Sources.txt: 27 * WebCore.xcodeproj/project.pbxproj: 28 * platform/Logging.h: 29 * workers/shared/SharedWorker.cpp: 30 (WebCore::SharedWorker::fromIdentifier): 31 (WebCore::SharedWorker::create): 32 (WebCore::SharedWorker::SharedWorker): 33 (WebCore::SharedWorker::~SharedWorker): 34 (WebCore::SharedWorker::didFinishLoading): 35 (WebCore::SharedWorker::virtualHasPendingActivity const): 36 (WebCore::SharedWorker::stop): 37 (WebCore::SharedWorker::terminate): Deleted. 38 * workers/shared/SharedWorker.h: 39 * workers/shared/SharedWorker.idl: 40 * workers/shared/SharedWorkerKey.h: Added. 41 (WebCore::SharedWorkerKey::hash const): 42 (WebCore::SharedWorkerKey::encode const): 43 (WebCore::SharedWorkerKey::decode): 44 (WebCore::operator==): 45 (WTF::DefaultHash<WebCore::SharedWorkerKey>::hash): 46 (WTF::DefaultHash<WebCore::SharedWorkerKey>::equal): 47 (WTF::HashTraits<WebCore::SharedWorkerKey>::constructDeletedValue): 48 (WTF::HashTraits<WebCore::SharedWorkerKey>::isDeletedValue): 49 * workers/shared/SharedWorkerManager.cpp: Removed. 50 (WebCore::SharedWorkerManager::singleton): Deleted. 51 (WebCore::SharedWorkerManager::connect): Deleted. 52 (WebCore::SharedWorkerManager::scriptLoadFailed): Deleted. 53 (WebCore::SharedWorkerManager::scriptLoadedSuccessfully): Deleted. 54 * workers/shared/SharedWorkerManager.h: Removed. 55 * workers/shared/SharedWorkerObjectConnection.cpp: 56 (WebCore::SharedWorkerObjectConnection::fetchScriptInClient): 57 (WebCore::SharedWorkerObjectConnection::notifyWorkerObjectOfLoadCompletion): 58 (WebCore::SharedWorkerObjectConnection::postExceptionToWorkerObject): 59 * workers/shared/SharedWorkerObjectConnection.h: 60 * workers/shared/SharedWorkerObjectIdentifier.h: Copied from Source/WebCore/workers/shared/SharedWorkerObjectConnection.cpp. 61 * workers/shared/SharedWorkerScriptLoader.cpp: 62 (WebCore::SharedWorkerScriptLoader::SharedWorkerScriptLoader): 63 (WebCore::SharedWorkerScriptLoader::load): 64 (WebCore::SharedWorkerScriptLoader::notifyFinished): 65 * workers/shared/SharedWorkerScriptLoader.h: 66 (WebCore::SharedWorkerScriptLoader::options const): 67 (WebCore::SharedWorkerScriptLoader::identifier const): Deleted. 68 (WebCore::SharedWorkerScriptLoader::options): Deleted. 69 * workers/shared/context/SharedWorkerContextManager.cpp: Added. 70 (WebCore::SharedWorkerContextManager::singleton): 71 (WebCore::SharedWorkerContextManager::sharedWorker const): 72 (WebCore::SharedWorkerContextManager::stopSharedWorker): 73 (WebCore::SharedWorkerContextManager::stopAllSharedWorkers): 74 (WebCore::SharedWorkerContextManager::setConnection): 75 (WebCore::SharedWorkerContextManager::connection const): 76 (WebCore::SharedWorkerContextManager::registerSharedWorkerThread): 77 (WebCore::SharedWorkerContextManager::Connection::postConnectEvent): 78 (WebCore::SharedWorkerContextManager::Connection::terminateSharedWorker): 79 * workers/shared/context/SharedWorkerContextManager.h: Added. 80 (WebCore::SharedWorkerContextManager::Connection::~Connection): 81 (WebCore::SharedWorkerContextManager::Connection::isClosed const): 82 (WebCore::SharedWorkerContextManager::Connection::setAsClosed): 83 * workers/shared/context/SharedWorkerThreadProxy.cpp: 84 (WebCore::generateWorkerParameters): 85 (WebCore::SharedWorkerThreadProxy::SharedWorkerThreadProxy): 86 (WebCore::SharedWorkerThreadProxy::~SharedWorkerThreadProxy): 87 (WebCore::SharedWorkerThreadProxy::notifyNetworkStateChange): 88 (WebCore::SharedWorkerThreadProxy::postExceptionToWorkerObject): 89 (WebCore::SharedWorkerThreadProxy::createCacheStorageConnection): 90 (WebCore::SharedWorkerThreadProxy::createRTCDataChannelRemoteHandlerConnection): 91 (WebCore::SharedWorkerThreadProxy::postTaskToLoader): 92 (WebCore::SharedWorkerThreadProxy::postTaskForModeToWorkerOrWorkletGlobalScope): 93 (WebCore::SharedWorkerThreadProxy::networkStateChanged): 94 (WebCore::SharedWorkerThreadProxy::startWorkerGlobalScope): Deleted. 95 (WebCore::SharedWorkerThreadProxy::terminateWorkerGlobalScope): Deleted. 96 (WebCore::SharedWorkerThreadProxy::postMessageToWorkerGlobalScope): Deleted. 97 (WebCore::SharedWorkerThreadProxy::postTaskToWorkerGlobalScope): Deleted. 98 (WebCore::SharedWorkerThreadProxy::hasPendingActivity const): Deleted. 99 (WebCore::SharedWorkerThreadProxy::workerObjectDestroyed): Deleted. 100 (WebCore::SharedWorkerThreadProxy::suspendForBackForwardCache): Deleted. 101 (WebCore::SharedWorkerThreadProxy::resumeForBackForwardCache): Deleted. 102 (WebCore::SharedWorkerThreadProxy::workerGlobalScopeDestroyed): Deleted. 103 (WebCore::SharedWorkerThreadProxy::postMessageToWorkerObject): Deleted. 104 (WebCore::SharedWorkerThreadProxy::confirmMessageFromWorkerObject): Deleted. 105 (WebCore::SharedWorkerThreadProxy::reportPendingActivity): Deleted. 106 (WebCore::SharedWorkerThreadProxy::workerGlobalScopeDestroyedInternal): Deleted. 107 * workers/shared/context/SharedWorkerThreadProxy.h: 108 1 109 2022-02-07 Megan Gardner <megan_gardner@apple.com> 2 110 -
trunk/Source/WebCore/Headers.cmake
r289210 r289247 1965 1965 workers/WorkerGlobalScope.h 1966 1966 workers/WorkerLoaderProxy.h 1967 workers/WorkerObjectProxy.h 1968 workers/WorkerOptions.h 1967 1969 workers/WorkerOrWorkletGlobalScope.h 1968 1970 workers/WorkerOrWorkletScriptController.h 1969 1971 workers/WorkerOrWorkletThread.h 1972 workers/WorkerReportingProxy.h 1970 1973 workers/WorkerRunLoop.h 1971 1974 workers/WorkerScriptLoader.h … … 2011 2014 2012 2015 workers/shared/SharedWorkerIdentifier.h 2013 workers/shared/SharedWorker Manager.h2016 workers/shared/SharedWorkerKey.h 2014 2017 workers/shared/SharedWorkerObjectConnection.h 2018 workers/shared/SharedWorkerObjectIdentifier.h 2015 2019 workers/shared/SharedWorkerProvider.h 2020 2021 workers/shared/context/SharedWorkerContextManager.h 2016 2022 workers/shared/context/SharedWorkerThread.h 2017 2023 workers/shared/context/SharedWorkerThreadProxy.h -
trunk/Source/WebCore/Modules/indexeddb/IDBDatabaseIdentifier.h
r284857 r289247 28 28 #include "ClientOrigin.h" 29 29 #include "SecurityOriginData.h" 30 #include <wtf/text/StringHash.h>31 #include <wtf/text/WTFString.h>32 30 33 31 namespace WebCore { … … 50 48 { 51 49 return m_databaseName.isHashTableDeletedValue(); 52 }53 54 unsigned hash() const55 {56 unsigned nameHash = StringHash::hash(m_databaseName);57 unsigned originHash = m_origin.hash();58 unsigned transientHash = m_isTransient;59 60 unsigned hashCodes[3] = { nameHash, originHash, transientHash };61 return StringHasher::hashMemory<sizeof(hashCodes)>(hashCodes);62 50 } 63 51 … … 100 88 }; 101 89 90 inline void add(Hasher& hasher, const IDBDatabaseIdentifier& identifier) 91 { 92 add(hasher, identifier.databaseName(), identifier.origin(), identifier.isTransient()); 93 } 94 102 95 struct IDBDatabaseIdentifierHash { 103 static unsigned hash(const IDBDatabaseIdentifier& a) { return a.hash(); }96 static unsigned hash(const IDBDatabaseIdentifier& a) { return computeHash(a); } 104 97 static bool equal(const IDBDatabaseIdentifier& a, const IDBDatabaseIdentifier& b) { return a == b; } 105 98 static const bool safeToCompareToEmptyOrDeleted = false; -
trunk/Source/WebCore/Sources.txt
r289222 r289247 2788 2788 workers/shared/SharedWorker.cpp 2789 2789 workers/shared/SharedWorkerGlobalScope.cpp 2790 workers/shared/SharedWorkerManager.cpp2791 2790 workers/shared/SharedWorkerObjectConnection.cpp 2792 2791 workers/shared/SharedWorkerProvider.cpp 2793 2792 workers/shared/SharedWorkerScriptLoader.cpp 2793 workers/shared/context/SharedWorkerContextManager.cpp 2794 2794 workers/shared/context/SharedWorkerThread.cpp 2795 2795 workers/shared/context/SharedWorkerThreadProxy.cpp -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r289222 r289247 904 904 2E43464D0F546A8200B0F1BA /* WorkerLocation.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E43463B0F546A8200B0F1BA /* WorkerLocation.h */; }; 905 905 2E4346500F546A8200B0F1BA /* WorkerMessagingProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E43463E0F546A8200B0F1BA /* WorkerMessagingProxy.h */; }; 906 2E4346510F546A8200B0F1BA /* WorkerObjectProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E43463F0F546A8200B0F1BA /* WorkerObjectProxy.h */; };906 2E4346510F546A8200B0F1BA /* WorkerObjectProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E43463F0F546A8200B0F1BA /* WorkerObjectProxy.h */; settings = {ATTRIBUTES = (Private, ); }; }; 907 907 2E4346530F546A8200B0F1BA /* WorkerRunLoop.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E4346410F546A8200B0F1BA /* WorkerRunLoop.h */; settings = {ATTRIBUTES = (Private, ); }; }; 908 908 2E4346550F546A8200B0F1BA /* WorkerThread.h in Headers */ = {isa = PBXBuildFile; fileRef = 2E4346430F546A8200B0F1BA /* WorkerThread.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 1126 1126 416D75A220C651A500D02D2C /* NetworkLoadInformation.h in Headers */ = {isa = PBXBuildFile; fileRef = 416D759F20C6441300D02D2C /* NetworkLoadInformation.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1127 1127 416E0B3A209BC3CB004A95D9 /* FetchIdentifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 416E0B37209BC3C2004A95D9 /* FetchIdentifier.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1128 416E29A6102FA962007FC14E /* WorkerReportingProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 416E29A5102FA962007FC14E /* WorkerReportingProxy.h */; };1128 416E29A6102FA962007FC14E /* WorkerReportingProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 416E29A5102FA962007FC14E /* WorkerReportingProxy.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1129 1129 416E6FE81BBD12DF000A3F64 /* ReadableStreamInternalsBuiltins.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B03D8061BB3110D00B764D9 /* ReadableStreamInternalsBuiltins.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1130 1130 416E6FE81BBD12DF000A3F65 /* JSDOMBindingInternalsBuiltins.h in Headers */ = {isa = PBXBuildFile; fileRef = 9B03D8061BB3110D00B764DA /* JSDOMBindingInternalsBuiltins.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 1348 1348 467A68D8275EA995009B31C5 /* SharedWorkerScriptLoader.h in Headers */ = {isa = PBXBuildFile; fileRef = 467A68D5275EA98C009B31C5 /* SharedWorkerScriptLoader.h */; }; 1349 1349 467A68D9275EA998009B31C5 /* SharedWorkerThreadProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 467A68D6275EA98C009B31C5 /* SharedWorkerThreadProxy.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1350 467A68DA275EA99C009B31C5 /* SharedWorkerManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 467A68D2275EA98A009B31C5 /* SharedWorkerManager.h */; settings = {ATTRIBUTES = (Private, ); }; };1351 1350 4682D2001F79783000C863DB /* StoredCredentialsPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 4682D1FF1F79782300C863DB /* StoredCredentialsPolicy.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1352 1351 468344E01EDDFAAA00B7795B /* DOMRectList.h in Headers */ = {isa = PBXBuildFile; fileRef = 468344DE1EDDFA5F00B7795B /* DOMRectList.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 1354 1353 4683DF412767E91A007D00C8 /* ShadowRealmGlobalScope.h in Headers */ = {isa = PBXBuildFile; fileRef = 4683DF3B2767DF26007D00C8 /* ShadowRealmGlobalScope.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1355 1354 4688EE3C26DD2610002AF5C4 /* CrossOriginMode.h in Headers */ = {isa = PBXBuildFile; fileRef = 4688EE3A26DD260C002AF5C4 /* CrossOriginMode.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1355 46943DC92763F817004B610E /* SharedWorkerObjectIdentifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 46943DC72763F80E004B610E /* SharedWorkerObjectIdentifier.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1356 46985F2327A4A6AD0097A32B /* SharedWorkerKey.h in Headers */ = {isa = PBXBuildFile; fileRef = 46985F2227A4A6860097A32B /* SharedWorkerKey.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1356 1357 469CCCFE269D021C006E0314 /* BroadcastChannel.h in Headers */ = {isa = PBXBuildFile; fileRef = 469CCCFC269D0202006E0314 /* BroadcastChannel.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1357 1358 469D77B82701625100142FA6 /* NavigationRequester.h in Headers */ = {isa = PBXBuildFile; fileRef = 469D77B62701625000142FA6 /* NavigationRequester.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1359 46A78B342799BD71001154FE /* WorkerOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 5C1B1D2626F18A4B00882DA2 /* WorkerOptions.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1358 1360 46AAAA3D25D3632000BAF42F /* AudioFileReaderCocoa.h in Headers */ = {isa = PBXBuildFile; fileRef = 46AAAA3A25D3631400BAF42F /* AudioFileReaderCocoa.h */; }; 1359 1361 46B63F6C1C6E8D19002E914B /* JSEventTargetCustom.h in Headers */ = {isa = PBXBuildFile; fileRef = 46B63F6B1C6E8CDF002E914B /* JSEventTargetCustom.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 1376 1378 46C83EFE1A9BBE2900A79A41 /* GeoNotifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 46C83EFC1A9BBE2900A79A41 /* GeoNotifier.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1377 1379 46CA9C441F97BBE9004CFC3A /* VisibilityState.h in Headers */ = {isa = PBXBuildFile; fileRef = 46CA9C411F97BBE7004CFC3A /* VisibilityState.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1380 46CF504A27AB1EA40070DBC8 /* SharedWorkerContextManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 46CF504827AB1EA10070DBC8 /* SharedWorkerContextManager.h */; settings = {ATTRIBUTES = (Private, ); }; }; 1378 1381 46D0004026A0FEB300D1BF1E /* SubmitEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 46D0003E26A0FE6F00D1BF1E /* SubmitEvent.h */; }; 1379 1382 46DA4A0227AB039300E375A8 /* TransferredMessagePort.h in Headers */ = {isa = PBXBuildFile; fileRef = 46DA4A0027AB038D00E375A8 /* TransferredMessagePort.h */; settings = {ATTRIBUTES = (Private, ); }; }; … … 9249 9252 467A68D0275EA989009B31C5 /* SharedWorkerThread.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SharedWorkerThread.cpp; sourceTree = "<group>"; }; 9250 9253 467A68D1275EA98A009B31C5 /* SharedWorkerScriptLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SharedWorkerScriptLoader.cpp; sourceTree = "<group>"; }; 9251 467A68D2275EA98A009B31C5 /* SharedWorkerManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SharedWorkerManager.h; sourceTree = "<group>"; };9252 467A68D3275EA98B009B31C5 /* SharedWorkerManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SharedWorkerManager.cpp; sourceTree = "<group>"; };9253 9254 467A68D4275EA98B009B31C5 /* SharedWorkerThread.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SharedWorkerThread.h; sourceTree = "<group>"; }; 9254 9255 467A68D5275EA98C009B31C5 /* SharedWorkerScriptLoader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SharedWorkerScriptLoader.h; sourceTree = "<group>"; }; … … 9266 9267 4688EE3A26DD260C002AF5C4 /* CrossOriginMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CrossOriginMode.h; sourceTree = "<group>"; }; 9267 9268 468B8BDE25CC849300F67822 /* JSBaseAudioContextCustom.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = JSBaseAudioContextCustom.cpp; sourceTree = "<group>"; }; 9269 46943DC72763F80E004B610E /* SharedWorkerObjectIdentifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SharedWorkerObjectIdentifier.h; sourceTree = "<group>"; }; 9270 46985F2227A4A6860097A32B /* SharedWorkerKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SharedWorkerKey.h; sourceTree = "<group>"; }; 9268 9271 469CCCFA269D0202006E0314 /* BroadcastChannel.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = BroadcastChannel.cpp; sourceTree = "<group>"; }; 9269 9272 469CCCFC269D0202006E0314 /* BroadcastChannel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BroadcastChannel.h; sourceTree = "<group>"; }; … … 9306 9309 46CA9C411F97BBE7004CFC3A /* VisibilityState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VisibilityState.h; sourceTree = "<group>"; }; 9307 9310 46CA9C421F97BBE7004CFC3A /* VisibilityState.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = VisibilityState.idl; sourceTree = "<group>"; }; 9311 46CF504827AB1EA10070DBC8 /* SharedWorkerContextManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SharedWorkerContextManager.h; sourceTree = "<group>"; }; 9312 46CF504927AB1EA10070DBC8 /* SharedWorkerContextManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SharedWorkerContextManager.cpp; sourceTree = "<group>"; }; 9308 9313 46D0003C26A0FE6F00D1BF1E /* SubmitEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SubmitEvent.cpp; sourceTree = "<group>"; }; 9309 9314 46D0003E26A0FE6F00D1BF1E /* SubmitEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SubmitEvent.h; sourceTree = "<group>"; }; … … 21580 21585 isa = PBXGroup; 21581 21586 children = ( 21587 46CF504927AB1EA10070DBC8 /* SharedWorkerContextManager.cpp */, 21588 46CF504827AB1EA10070DBC8 /* SharedWorkerContextManager.h */, 21582 21589 467A68D0275EA989009B31C5 /* SharedWorkerThread.cpp */, 21583 21590 467A68D4275EA98B009B31C5 /* SharedWorkerThread.h */, … … 21599 21606 46694CE02759448C00E3150E /* SharedWorkerGlobalScope.idl */, 21600 21607 46EC444827AB337F00FFCD96 /* SharedWorkerIdentifier.h */, 21601 467A68D3275EA98B009B31C5 /* SharedWorkerManager.cpp */, 21602 467A68D2275EA98A009B31C5 /* SharedWorkerManager.h */, 21608 46985F2227A4A6860097A32B /* SharedWorkerKey.h */, 21603 21609 4668A0B327AB600B00C720BC /* SharedWorkerObjectConnection.cpp */, 21604 21610 4668A0B127AB600B00C720BC /* SharedWorkerObjectConnection.h */, 21611 46943DC72763F80E004B610E /* SharedWorkerObjectIdentifier.h */, 21605 21612 4668A0B427AB600C00C720BC /* SharedWorkerProvider.cpp */, 21606 21613 4668A0B527AB600C00C720BC /* SharedWorkerProvider.h */, … … 37222 37229 93309EA3099EB78C0056E581 /* SharedTimer.h in Headers */, 37223 37230 41DC04FE27A83C93008CF968 /* SharedVideoFrameInfo.h in Headers */, 37231 46CF504A27AB1EA40070DBC8 /* SharedWorkerContextManager.h in Headers */, 37224 37232 46EC444A27AB338900FFCD96 /* SharedWorkerIdentifier.h in Headers */, 37225 46 7A68DA275EA99C009B31C5 /* SharedWorkerManager.h in Headers */,37233 46985F2327A4A6AD0097A32B /* SharedWorkerKey.h in Headers */, 37226 37234 4668A0B627AB601B00C720BC /* SharedWorkerObjectConnection.h in Headers */, 37235 46943DC92763F817004B610E /* SharedWorkerObjectIdentifier.h in Headers */, 37227 37236 4668A0B727AB602100C720BC /* SharedWorkerProvider.h in Headers */, 37228 37237 467A68D8275EA995009B31C5 /* SharedWorkerScriptLoader.h in Headers */, … … 38085 38094 A5CB05251FB51F3A00089B97 /* WorkerNetworkAgent.h in Headers */, 38086 38095 2E4346510F546A8200B0F1BA /* WorkerObjectProxy.h in Headers */, 38096 46A78B342799BD71001154FE /* WorkerOptions.h in Headers */, 38087 38097 83D6AAE62524EE1C00428B4B /* WorkerOrWorkletGlobalScope.h in Headers */, 38088 38098 839A095D2524F37F00EEF328 /* WorkerOrWorkletScriptController.h in Headers */, -
trunk/Source/WebCore/page/ClientOrigin.h
r288078 r289247 29 29 #include "SecurityOriginData.h" 30 30 #include <wtf/HashTraits.h> 31 #include <wtf/Hasher.h> 31 32 #include <wtf/URL.h> 32 33 … … 36 37 static ClientOrigin emptyKey() { return { }; } 37 38 38 unsigned hash() const;39 39 bool operator==(const ClientOrigin&) const; 40 40 bool operator!=(const ClientOrigin& other) const { return !(*this == other); } … … 52 52 }; 53 53 54 inline unsigned ClientOrigin::hash() const54 inline void add(Hasher& hasher, const ClientOrigin& origin) 55 55 { 56 unsigned hashes[2]; 57 hashes[0] = SecurityOriginDataHash::hash(topOrigin); 58 hashes[1] = SecurityOriginDataHash::hash(clientOrigin); 59 60 return StringHasher::hashMemory(hashes, sizeof(hashes)); 56 add(hasher, origin.topOrigin, origin.clientOrigin); 61 57 } 62 58 … … 96 92 97 93 struct ClientOriginKeyHash { 98 static unsigned hash(const WebCore::ClientOrigin& key) { return key.hash(); }94 static unsigned hash(const WebCore::ClientOrigin& key) { return computeHash(key); } 99 95 static bool equal(const WebCore::ClientOrigin& a, const WebCore::ClientOrigin& b) { return a == b; } 100 96 static const bool safeToCompareToEmptyOrDeleted = false; -
trunk/Source/WebCore/page/SecurityOrigin.h
r288936 r289247 151 151 bool canAccessPluginStorage(const SecurityOrigin& topOrigin) const { return canAccessStorage(&topOrigin); } 152 152 bool canAccessApplicationCache(const SecurityOrigin& topOrigin) const { return canAccessStorage(&topOrigin); } 153 bool canAccessSharedWorkers(const SecurityOrigin& topOrigin) const { return canAccessStorage(&topOrigin); }154 153 bool canAccessCookies() const { return !isUnique(); } 155 154 bool canRequestGeolocation() const { return !isUnique(); } -
trunk/Source/WebCore/page/SecurityOriginData.h
r288936 r289247 26 26 #pragma once 27 27 28 #include <wtf/Hasher.h> 28 29 #include <wtf/URL.h> 29 30 … … 98 99 inline bool operator!=(const SecurityOriginData& first, const SecurityOriginData& second) { return !(first == second); } 99 100 101 inline void add(Hasher& hasher, const SecurityOriginData& data) 102 { 103 add(hasher, data.protocol, data.host, data.port.value_or(0)); 104 } 105 100 106 template<class Encoder> 101 107 void SecurityOriginData::encode(Encoder& encoder) const … … 138 144 139 145 struct SecurityOriginDataHash { 140 static unsigned hash(const SecurityOriginData& data) 141 { 142 unsigned hashCodes[3] = { 143 data.protocol.impl() ? data.protocol.impl()->hash() : 0, 144 data.host.impl() ? data.host.impl()->hash() : 0, 145 data.port.value_or(0) 146 }; 147 return StringHasher::hashMemory<sizeof(hashCodes)>(hashCodes); 148 } 146 static unsigned hash(const SecurityOriginData& data) { return computeHash(data); } 149 147 static bool equal(const SecurityOriginData& a, const SecurityOriginData& b) { return a == b; } 150 148 static const bool safeToCompareToEmptyOrDeleted = false; -
trunk/Source/WebCore/platform/Logging.h
r289139 r289247 129 129 M(WebRTC) \ 130 130 M(WebRTCStats) \ 131 M(Worker) \ 131 132 M(XR) \ 132 133 M(WheelEventTestMonitor) \ -
trunk/Source/WebCore/workers/WorkerThread.cpp
r289153 r289247 35 35 #include "WorkerScriptFetcher.h" 36 36 #include <JavaScriptCore/ScriptCallStack.h> 37 #include <wtf/SetForScope.h> 37 38 #include <wtf/Threading.h> 38 39 … … 135 136 void WorkerThread::evaluateScriptIfNecessary(String& exceptionMessage) 136 137 { 138 SetForScope<bool> isInStaticScriptEvaluation(m_isInStaticScriptEvaluation, true); 139 137 140 // We are currently holding only the initial script code. If the WorkerType is Module, we should fetch the entire graph before executing the rest of this. 138 141 // We invoke module loader as if we are executing inline module script tag in Document. -
trunk/Source/WebCore/workers/WorkerThread.h
r289153 r289247 97 97 98 98 JSC::RuntimeFlags runtimeFlags() const { return m_runtimeFlags; } 99 bool isInStaticScriptEvaluation() const { return m_isInStaticScriptEvaluation; } 99 100 100 101 protected: … … 133 134 RefPtr<IDBClient::IDBConnectionProxy> m_idbConnectionProxy; 134 135 RefPtr<SocketProvider> m_socketProvider; 136 bool m_isInStaticScriptEvaluation { false }; 135 137 }; 136 138 -
trunk/Source/WebCore/workers/shared/SharedWorker.cpp
r289054 r289247 1 1 /* 2 * Copyright (C) 2021 Apple Inc. All rights reserved.2 * Copyright (C) 2021-2022 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 27 27 #include "SharedWorker.h" 28 28 29 #include "ClientOrigin.h" 29 30 #include "ContentSecurityPolicy.h" 30 31 #include "Document.h" 32 #include "EventNames.h" 33 #include "Logging.h" 31 34 #include "MessageChannel.h" 32 35 #include "MessagePort.h" 36 #include "ResourceError.h" 33 37 #include "SecurityOrigin.h" 34 #include "SharedWorkerManager.h"35 38 #include "SharedWorkerObjectConnection.h" 36 39 #include "SharedWorkerProvider.h" 37 #include "SharedWorkerThreadProxy.h"38 40 #include "WorkerOptions.h" 39 41 #include <JavaScriptCore/IdentifiersFactory.h> … … 44 46 WTF_MAKE_ISO_ALLOCATED_IMPL(SharedWorker); 45 47 48 #define SHARED_WORKER_RELEASE_LOG(fmt, ...) RELEASE_LOG(SharedWorker, "%p - [identifier=%{public}s] SharedWorker::" fmt, this, m_identifier.toString().utf8().data(), ##__VA_ARGS__) 49 #define SHARED_WORKER_RELEASE_LOG_ERROR(fmt, ...) RELEASE_LOG_ERROR(SharedWorker, "%p - [identifier=%{public}s] SharedWorker::" fmt, this, m_identifier.toString().utf8().data(), ##__VA_ARGS__) 50 51 static HashMap<SharedWorkerObjectIdentifier, SharedWorker*>& allSharedWorkers() 52 { 53 ASSERT(isMainThread()); 54 static NeverDestroyed<HashMap<SharedWorkerObjectIdentifier, SharedWorker*>> allSharedWorkers; 55 return allSharedWorkers; 56 } 57 58 SharedWorker* SharedWorker::fromIdentifier(SharedWorkerObjectIdentifier identifier) 59 { 60 return allSharedWorkers().get(identifier); 61 } 62 46 63 static inline SharedWorkerObjectConnection* mainThreadConnection() 47 64 { … … 49 66 } 50 67 51 ExceptionOr<Ref<SharedWorker>> SharedWorker::create(Document& document, JSC::RuntimeFlags runtimeFlags,String&& scriptURLString, std::optional<std::variant<String, WorkerOptions>>&& maybeOptions)68 ExceptionOr<Ref<SharedWorker>> SharedWorker::create(Document& document, String&& scriptURLString, std::optional<std::variant<String, WorkerOptions>>&& maybeOptions) 52 69 { 53 70 if (!mainThreadConnection()) 54 71 return Exception { NotSupportedError, "Shared workers are not supported" }; 55 72 56 if (!document.securityOrigin().canAccessSharedWorkers(document.topOrigin()))57 return Exception { SecurityError, "This iframe doesn't have storage access"_s };58 59 73 auto url = document.completeURL(scriptURLString); 60 74 if (!url.isValid()) 61 75 return Exception { SyntaxError, "Invalid script URL"_s }; 76 77 if (url.isLocalFile()) 78 return Exception { SecurityError, "Cannot construct a shared worker with a file:// URL"_s }; 62 79 63 80 if (auto* contentSecurityPolicy = document.contentSecurityPolicy()) { … … 78 95 auto transferredPort = channel->port2().disentangle(); 79 96 80 auto sharedWorker = adoptRef(*new SharedWorker(document, channel->port1(), runtimeFlags)); 97 ClientOrigin clientOrigin { document.topDocument().securityOrigin().data(), document.securityOrigin().data() }; 98 SharedWorkerKey key { clientOrigin, url, options.name }; 99 100 auto sharedWorker = adoptRef(*new SharedWorker(document, key, channel->port1())); 81 101 sharedWorker->suspendIfNeeded(); 82 102 83 mainThreadConnection()->requestSharedWorker( url, sharedWorker.get(), WTFMove(transferredPort), WTFMove(options));103 mainThreadConnection()->requestSharedWorker(key, sharedWorker->identifier(), WTFMove(transferredPort), options); 84 104 return sharedWorker; 85 105 } 86 106 87 SharedWorker::SharedWorker(Document& document, Ref<MessagePort>&& port, JSC::RuntimeFlags runtimeFlags)107 SharedWorker::SharedWorker(Document& document, const SharedWorkerKey& key, Ref<MessagePort>&& port) 88 108 : ActiveDOMObject(&document) 109 , m_key(key) 110 , m_identifier(SharedWorkerObjectIdentifier::generate()) 89 111 , m_port(WTFMove(port)) 90 112 , m_identifierForInspector("SharedWorker:" + Inspector::IdentifiersFactory::createIdentifier()) 91 , m_runtimeFlags(runtimeFlags)92 , m_creationTime(MonotonicTime::now())93 , m_proxy(SharedWorkerThreadProxy::create(*this))94 113 { 114 SHARED_WORKER_RELEASE_LOG("SharedWorker:"); 115 allSharedWorkers().add(m_identifier, this); 116 117 // If the shared worker URL is a blob URL, make sure to keep it alive until the worker has finished loading. 118 if (m_key.url.protocolIsBlob()) 119 m_blobURLExtension = m_key.url; 95 120 } 96 121 97 122 SharedWorker::~SharedWorker() 98 123 { 99 m_proxy.workerObjectDestroyed(); 124 ASSERT(allSharedWorkers().get(m_identifier) == this); 125 SHARED_WORKER_RELEASE_LOG("~SharedWorker:"); 126 allSharedWorkers().remove(m_identifier); 127 ASSERT(!m_isActive); 100 128 } 101 129 … … 115 143 } 116 144 117 void SharedWorker:: stop()145 void SharedWorker::didFinishLoading(const ResourceError& error) 118 146 { 119 terminate(); 147 SHARED_WORKER_RELEASE_LOG("finishLoading: success=%d", error.isNull()); 148 if (!error.isNull()) { 149 queueTaskToDispatchEvent(*this, TaskSource::DOMManipulation, Event::create(eventNames().errorEvent, Event::CanBubble::No, Event::IsCancelable::Yes)); 150 m_isActive = false; 151 } 152 m_blobURLExtension.clear(); 120 153 } 121 154 122 155 bool SharedWorker::virtualHasPendingActivity() const 123 156 { 124 return m_ proxy.hasPendingActivity() || m_isLoading;157 return m_isActive; 125 158 } 126 159 127 void SharedWorker:: terminate()160 void SharedWorker::stop() 128 161 { 129 m_proxy.terminateWorkerGlobalScope(); 162 SHARED_WORKER_RELEASE_LOG("stop:"); 163 m_isActive = false; 164 mainThreadConnection()->sharedWorkerObjectIsGoingAway(m_key, m_identifier); 130 165 } 131 166 167 #undef SHARED_WORKER_RELEASE_LOG 168 #undef SHARED_WORKER_RELEASE_LOG_ERROR 169 132 170 } // namespace WebCore -
trunk/Source/WebCore/workers/shared/SharedWorker.h
r288975 r289247 1 1 /* 2 * Copyright (C) 2021 Apple Inc. All rights reserved.2 * Copyright (C) 2021-2022 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 28 28 #include "AbstractWorker.h" 29 29 #include "ActiveDOMObject.h" 30 #include <JavaScriptCore/RuntimeFlags.h> 30 #include "BlobURL.h" 31 #include "SharedWorkerKey.h" 32 #include "SharedWorkerObjectIdentifier.h" 31 33 #include <wtf/MonotonicTime.h> 32 34 … … 34 36 35 37 class MessagePort; 36 class SharedWorkerThreadProxy;38 class ResourceError; 37 39 38 40 struct WorkerOptions; … … 41 43 WTF_MAKE_ISO_ALLOCATED(SharedWorker); 42 44 public: 43 static ExceptionOr<Ref<SharedWorker>> create(Document&, JSC::RuntimeFlags,String&& scriptURL, std::optional<std::variant<String, WorkerOptions>>&&);45 static ExceptionOr<Ref<SharedWorker>> create(Document&, String&& scriptURL, std::optional<std::variant<String, WorkerOptions>>&&); 44 46 ~SharedWorker(); 45 47 48 static SharedWorker* fromIdentifier(SharedWorkerObjectIdentifier); 49 SharedWorkerObjectIdentifier identifier() const { return m_identifier; } 46 50 MessagePort& port() const { return m_port.get(); } 47 JSC::RuntimeFlags runtimeFlags() { return m_runtimeFlags; }48 51 49 52 const String& identifierForInspector() const { return m_identifierForInspector; } 50 MonotonicTime creationTime() const { return m_creationTime; }51 53 52 SharedWorkerThreadProxy& proxy() { return m_proxy; } 53 54 void setIsLoading(bool isLoading) { m_isLoading = isLoading; } 54 void didFinishLoading(const ResourceError&); 55 55 56 56 // EventTarget. … … 58 58 59 59 private: 60 SharedWorker(Document&, Ref<MessagePort>&&, JSC::RuntimeFlags); 61 62 void terminate(); 60 SharedWorker(Document&, const SharedWorkerKey&, Ref<MessagePort>&&); 63 61 64 62 // EventTarget. … … 71 69 72 70 71 SharedWorkerKey m_key; 72 SharedWorkerObjectIdentifier m_identifier; 73 73 Ref<MessagePort> m_port; 74 74 String m_identifierForInspector; 75 JSC::RuntimeFlags m_runtimeFlags; 76 MonotonicTime m_creationTime; 77 SharedWorkerThreadProxy& m_proxy; // The proxy outlives the worker to perform thread shutdown. 78 bool m_isLoading { false }; 75 BlobURLHandle m_blobURLExtension; 76 bool m_isActive { true }; 79 77 }; 80 78 -
trunk/Source/WebCore/workers/shared/SharedWorker.idl
r289117 r289247 29 29 ] 30 30 interface SharedWorker : EventTarget { 31 [CallWith=CurrentDocument &RuntimeFlags] constructor(USVString scriptURL, optional (DOMString or WorkerOptions) options);31 [CallWith=CurrentDocument] constructor(USVString scriptURL, optional (DOMString or WorkerOptions) options); 32 32 33 33 readonly attribute MessagePort port; -
trunk/Source/WebCore/workers/shared/SharedWorkerObjectConnection.cpp
r289054 r289247 27 27 #include "SharedWorkerObjectConnection.h" 28 28 29 #include "ActiveDOMObject.h" 30 #include "ErrorEvent.h" 31 #include "Logging.h" 32 #include "ScriptBuffer.h" 33 #include "SharedWorker.h" 34 #include "SharedWorkerScriptLoader.h" 35 #include "WorkerFetchResult.h" 36 29 37 namespace WebCore { 38 39 #define CONNECTION_RELEASE_LOG(fmt, ...) RELEASE_LOG(SharedWorker, "%p - SharedWorkerObjectConnection::" fmt, this, ##__VA_ARGS__) 40 #define CONNECTION_RELEASE_LOG_ERROR(fmt, ...) RELEASE_LOG_ERROR(SharedWorker, "%p - SharedWorkerObjectConnection::" fmt, this, ##__VA_ARGS__) 41 42 static uint64_t loaderIdentifierSeed = 0; 30 43 31 44 SharedWorkerObjectConnection::SharedWorkerObjectConnection() = default; … … 33 46 SharedWorkerObjectConnection::~SharedWorkerObjectConnection() = default; 34 47 48 void SharedWorkerObjectConnection::fetchScriptInClient(URL&& url, WebCore::SharedWorkerObjectIdentifier sharedWorkerObjectIdentifier, WorkerOptions&& workerOptions, CompletionHandler<void(WorkerFetchResult&&)>&& completionHandler) 49 { 50 ASSERT(isMainThread()); 51 52 auto* workerObject = SharedWorker::fromIdentifier(sharedWorkerObjectIdentifier); 53 CONNECTION_RELEASE_LOG("fetchScriptInClient: sharedWorkerObjectIdentifier=%{public}s, worker=%p", sharedWorkerObjectIdentifier.toString().utf8().data(), workerObject); 54 if (!workerObject) 55 return completionHandler(workerFetchError(ResourceError { ResourceError::Type::Cancellation })); 56 57 auto loaderIdentifier = ++loaderIdentifierSeed; 58 auto loader = makeUniqueRef<SharedWorkerScriptLoader>(WTFMove(url), *workerObject, WTFMove(workerOptions)); 59 auto loaderPtr = loader.ptr(); 60 m_loaders.add(loaderIdentifier, WTFMove(loader)); 61 62 loaderPtr->load([this, loaderIdentifier, completionHandler = WTFMove(completionHandler)](WorkerFetchResult&& fetchResult) mutable { 63 CONNECTION_RELEASE_LOG("fetchScriptInClient: finished script load, success=%d", fetchResult.error.isNull()); 64 auto loader = m_loaders.take(loaderIdentifier); 65 ASSERT(loader); 66 completionHandler(WTFMove(fetchResult)); 67 }); 68 } 69 70 void SharedWorkerObjectConnection::notifyWorkerObjectOfLoadCompletion(WebCore::SharedWorkerObjectIdentifier sharedWorkerObjectIdentifier, const ResourceError& error) 71 { 72 ASSERT(isMainThread()); 73 auto* workerObject = SharedWorker::fromIdentifier(sharedWorkerObjectIdentifier); 74 CONNECTION_RELEASE_LOG_ERROR("notifyWorkerObjectOfLoadCompletion: sharedWorkerObjectIdentifier=%{public}s, worker=%p, success=%d", sharedWorkerObjectIdentifier.toString().utf8().data(), workerObject, error.isNull()); 75 if (workerObject) 76 workerObject->didFinishLoading(error); 77 } 78 79 void SharedWorkerObjectConnection::postExceptionToWorkerObject(SharedWorkerObjectIdentifier sharedWorkerObjectIdentifier, const String& errorMessage, int lineNumber, int columnNumber, const String& sourceURL) 80 { 81 ASSERT(isMainThread()); 82 auto* workerObject = SharedWorker::fromIdentifier(sharedWorkerObjectIdentifier); 83 CONNECTION_RELEASE_LOG_ERROR("postExceptionToWorkerObject: sharedWorkerObjectIdentifier=%{public}s, worker=%p", sharedWorkerObjectIdentifier.toString().utf8().data(), workerObject); 84 if (workerObject) 85 ActiveDOMObject::queueTaskToDispatchEvent(*workerObject, TaskSource::DOMManipulation, ErrorEvent::create(errorMessage, sourceURL, lineNumber, columnNumber, { })); 86 } 87 88 #undef CONNECTION_RELEASE_LOG 89 #undef CONNECTION_RELEASE_LOG_ERROR 90 35 91 } // namespace WebCore -
trunk/Source/WebCore/workers/shared/SharedWorkerObjectConnection.h
r289054 r289247 26 26 #pragma once 27 27 28 #include "SharedWorkerObjectIdentifier.h" 28 29 #include "TransferredMessagePort.h" 30 #include <wtf/Forward.h> 31 #include <wtf/HashMap.h> 29 32 #include <wtf/RefCounted.h> 30 33 31 34 namespace WebCore { 32 35 33 class SharedWorker; 36 class MessagePort; 37 class SharedWorkerScriptLoader; 38 39 struct SharedWorkerKey; 40 struct WorkerFetchResult; 34 41 struct WorkerOptions; 35 42 … … 38 45 WEBCORE_EXPORT virtual ~SharedWorkerObjectConnection(); 39 46 40 virtual void requestSharedWorker(const URL&, SharedWorker&, TransferredMessagePort&&, WorkerOptions&&) = 0; 47 virtual void requestSharedWorker(const SharedWorkerKey&, SharedWorkerObjectIdentifier, TransferredMessagePort&&, const WorkerOptions&) = 0; 48 virtual void sharedWorkerObjectIsGoingAway(const SharedWorkerKey&, SharedWorkerObjectIdentifier) = 0; 41 49 42 50 protected: 51 // IPC messages. 52 WEBCORE_EXPORT void fetchScriptInClient(URL&&, WebCore::SharedWorkerObjectIdentifier, WorkerOptions&&, CompletionHandler<void(WorkerFetchResult&&)>&&); 53 WEBCORE_EXPORT void notifyWorkerObjectOfLoadCompletion(WebCore::SharedWorkerObjectIdentifier, const ResourceError&); 54 WEBCORE_EXPORT void postExceptionToWorkerObject(SharedWorkerObjectIdentifier, const String& errorMessage, int lineNumber, int columnNumber, const String& sourceURL); 55 43 56 WEBCORE_EXPORT SharedWorkerObjectConnection(); 57 58 private: 59 HashMap<uint64_t, UniqueRef<SharedWorkerScriptLoader>> m_loaders; 44 60 }; 45 61 -
trunk/Source/WebCore/workers/shared/SharedWorkerObjectIdentifier.h
r289246 r289247 24 24 */ 25 25 26 #include "config.h" 27 #include "SharedWorkerObjectConnection.h" 26 #pragma once 27 28 #include "ProcessQualified.h" 29 #include <wtf/ObjectIdentifier.h> 28 30 29 31 namespace WebCore { 30 32 31 SharedWorkerObjectConnection::SharedWorkerObjectConnection() = default; 32 33 SharedWorkerObjectConnection::~SharedWorkerObjectConnection() = default; 33 enum SharedWorkerObjectIdentifierType { }; 34 using SharedWorkerObjectIdentifier = ProcessQualified<ObjectIdentifier<SharedWorkerObjectIdentifierType>>; 34 35 35 36 } // namespace WebCore -
trunk/Source/WebCore/workers/shared/SharedWorkerScriptLoader.cpp
r288701 r289247 1 1 /* 2 * Copyright (C) 2021 Apple Inc. All rights reserved.2 * Copyright (C) 2021-2022 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 30 30 #include "InspectorInstrumentation.h" 31 31 #include "SharedWorker.h" 32 #include " SharedWorkerManager.h"32 #include "WorkerFetchResult.h" 33 33 #include "WorkerRunLoop.h" 34 34 #include "WorkerScriptLoader.h" … … 36 36 namespace WebCore { 37 37 38 SharedWorkerScriptLoader::SharedWorkerScriptLoader(const URL& url, SharedWorker& worker, TransferredMessagePort&& port, WorkerOptions&& options) 39 : m_identifier(SharedWorkerScriptLoaderIdentifier::generate()) 40 , m_options(WTFMove(options)) 38 SharedWorkerScriptLoader::SharedWorkerScriptLoader(URL&& url, SharedWorker& worker, WorkerOptions&& options) 39 : m_options(WTFMove(options)) 41 40 , m_worker(worker) 42 , m_port(WTFMove(port))43 41 , m_loader(WorkerScriptLoader::create()) 44 , m_pendingActivity(worker.makePendingActivity(worker)) 45 , m_url(url) 42 , m_url(WTFMove(url)) 46 43 { 47 m_worker->setIsLoading(true); 48 m_loader->loadAsynchronously(*worker.scriptExecutionContext(), ResourceRequest(url), worker.workerFetchOptions(options, FetchOptions::Destination::Sharedworker), ContentSecurityPolicyEnforcement::EnforceWorkerSrcDirective, ServiceWorkersMode::All, *this, WorkerRunLoop::defaultMode()); 44 } 45 46 void SharedWorkerScriptLoader::load(CompletionHandler<void(WorkerFetchResult&&)>&& completionHandler) 47 { 48 ASSERT(!m_completionHandler); 49 m_completionHandler = WTFMove(completionHandler); 50 51 m_loader->loadAsynchronously(*m_worker->scriptExecutionContext(), ResourceRequest(m_url), m_worker->workerFetchOptions(m_options, FetchOptions::Destination::Sharedworker), ContentSecurityPolicyEnforcement::EnforceWorkerSrcDirective, ServiceWorkersMode::All, *this, WorkerRunLoop::defaultMode()); 49 52 } 50 53 … … 56 59 void SharedWorkerScriptLoader::notifyFinished() 57 60 { 58 m_worker->setIsLoading(false); 61 if (m_loader->failed()) 62 return m_completionHandler(workerFetchError(m_loader->error())); 59 63 60 auto* scriptExecutionContext = m_worker->scriptExecutionContext(); 61 if (m_loader->failed() || !scriptExecutionContext) { 62 m_worker->dispatchEvent(Event::create(eventNames().errorEvent, Event::CanBubble::No, Event::IsCancelable::Yes)); 63 SharedWorkerManager::singleton().scriptLoadFailed(*this); // deletes this. 64 } else { 64 if (auto* scriptExecutionContext = m_worker->scriptExecutionContext()) 65 65 InspectorInstrumentation::scriptImported(*scriptExecutionContext, m_loader->identifier(), m_loader->script().toString()); 66 SharedWorkerManager::singleton().scriptLoadedSuccessfully(*this, m_loader->script(), *m_worker->scriptExecutionContext(), m_worker.get(), std::exchange(m_port, { })); // deletes this. 67 } 66 m_completionHandler({ m_loader->script(), m_loader->certificateInfo(), m_loader->contentSecurityPolicy(), m_loader->crossOriginEmbedderPolicy(), m_loader->referrerPolicy(), { } }); // deletes this. 68 67 } 69 68 -
trunk/Source/WebCore/workers/shared/SharedWorkerScriptLoader.h
r289107 r289247 1 1 /* 2 * Copyright (C) 2021 Apple Inc. All rights reserved.2 * Copyright (C) 2021-2022 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 "ActiveDOMObject.h"29 28 #include "MessagePortIdentifier.h" 30 29 #include "ResourceLoaderIdentifier.h" 31 30 #include "ResourceResponse.h" 32 #include "SharedWorkerManager.h"33 31 #include "WorkerOptions.h" 34 32 #include "WorkerScriptLoaderClient.h" … … 40 38 class SharedWorker; 41 39 class WorkerScriptLoader; 42 43 class SharedWorkerScriptLoader; 44 45 using TransferredMessagePort = std::pair<WebCore::MessagePortIdentifier, WebCore::MessagePortIdentifier>; 40 struct WorkerFetchResult; 46 41 47 42 class SharedWorkerScriptLoader : private WorkerScriptLoaderClient { 48 43 WTF_MAKE_FAST_ALLOCATED; 49 44 public: 50 SharedWorkerScriptLoader( const URL&, SharedWorker&, TransferredMessagePort&&, WorkerOptions&&);45 SharedWorkerScriptLoader(URL&&, SharedWorker&, WorkerOptions&&); 51 46 52 SharedWorkerScriptLoaderIdentifier identifier() const { return m_identifier; } 47 void load(CompletionHandler<void(WorkerFetchResult&&)>&&); 48 53 49 const URL& url() const { return m_url; } 54 50 SharedWorker& worker() { return m_worker.get(); } 55 const WorkerOptions& options() { return m_options; }51 const WorkerOptions& options() const { return m_options; } 56 52 57 53 private: … … 59 55 void notifyFinished() final; 60 56 61 const SharedWorkerScriptLoaderIdentifier m_identifier;62 57 const WorkerOptions m_options; 63 58 const Ref<SharedWorker> m_worker; 64 TransferredMessagePort m_port;65 59 const Ref<WorkerScriptLoader> m_loader; 66 const Ref<ActiveDOMObject::PendingActivity<SharedWorker>> m_pendingActivity;67 60 const URL m_url; 61 CompletionHandler<void(WorkerFetchResult&&)> m_completionHandler; 68 62 }; 69 63 -
trunk/Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.cpp
r289023 r289247 1 1 /* 2 * Copyright (C) 2021 Apple Inc. All rights reserved.2 * Copyright (C) 2021-2022 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 29 29 #include "CacheStorageProvider.h" 30 30 #include "ErrorEvent.h" 31 #include "EventLoop.h" 31 32 #include "EventNames.h" 33 #include "Frame.h" 34 #include "FrameLoader.h" 32 35 #include "LibWebRTCProvider.h" 36 #include "LoaderStrategy.h" 33 37 #include "MessageEvent.h" 34 38 #include "MessagePort.h" 35 39 #include "Page.h" 40 #include "PlatformStrategies.h" 36 41 #include "RTCDataChannelRemoteHandlerConnection.h" 37 42 #include "SharedWorker.h" 43 #include "SharedWorkerContextManager.h" 38 44 #include "SharedWorkerGlobalScope.h" 39 45 #include "SharedWorkerThread.h" 46 #include "WorkerFetchResult.h" 47 #include "WorkerThread.h" 48 #include <JavaScriptCore/IdentifiersFactory.h> 40 49 41 50 namespace WebCore { 42 51 43 SharedWorkerThreadProxy::SharedWorkerThreadProxy(SharedWorker& sharedWorker) 44 : m_sharedWorker(sharedWorker) 45 , m_scriptExecutionContext(sharedWorker.scriptExecutionContext()) 46 , m_identifierForInspector(sharedWorker.identifierForInspector()) 52 static HashSet<SharedWorkerThreadProxy*>& allSharedWorkerThreadProxies() 47 53 { 54 static NeverDestroyed<HashSet<SharedWorkerThreadProxy*>> set; 55 return set; 48 56 } 49 57 50 void SharedWorkerThreadProxy::startWorkerGlobalScope(const URL& scriptURL, const String& name, const String& userAgent, bool isOnline, const ScriptBuffer& scriptBuffer, const ContentSecurityPolicyResponseHeaders& contentSecurityPolicyResponseHeaders, bool shouldBypassMainWorldContentSecurityPolicy, const CrossOriginEmbedderPolicy& crossOriginEmbedderPolicy, MonotonicTime timeOrigin, ReferrerPolicy referrerPolicy, WorkerType workerType, FetchRequestCredentials credentials, JSC::RuntimeFlags runtimeFlags)58 static WorkerParameters generateWorkerParameters(const URL& scriptURL, const WorkerFetchResult& workerFetchResult, WorkerOptions&& workerOptions, const String& userAgent, Document& document) 51 59 { 52 if (m_askedToTerminate) 53 return; 60 return WorkerParameters { 61 scriptURL, 62 workerOptions.name, 63 "sharedworker:" + Inspector::IdentifiersFactory::createIdentifier(), 64 userAgent, 65 platformStrategies()->loaderStrategy()->isOnLine(), 66 workerFetchResult.contentSecurityPolicy, 67 false, 68 workerFetchResult.crossOriginEmbedderPolicy, 69 MonotonicTime::now(), 70 parseReferrerPolicy(workerFetchResult.referrerPolicy, ReferrerPolicySource::HTTPHeader).value_or(ReferrerPolicy::EmptyString), 71 workerOptions.type, 72 workerOptions.credentials, 73 document.settingsValues() 74 }; 75 } 54 76 55 auto parameters = WorkerParameters { 56 scriptURL, 57 name, 58 m_identifierForInspector, 59 userAgent, 60 isOnline, 61 contentSecurityPolicyResponseHeaders, 62 shouldBypassMainWorldContentSecurityPolicy, 63 crossOriginEmbedderPolicy, 64 timeOrigin, 65 referrerPolicy, 66 workerType, 67 credentials, 68 m_scriptExecutionContext->settingsValues() 69 }; 77 SharedWorkerThreadProxy::SharedWorkerThreadProxy(UniqueRef<Page>&& page, SharedWorkerIdentifier sharedWorkerIdentifier, const ClientOrigin& clientOrigin, const URL& scriptURL, WorkerFetchResult&& workerFetchResult, WorkerOptions&& workerOptions, const String& userAgent, CacheStorageProvider& cacheStorageProvider) 78 : m_page(WTFMove(page)) 79 , m_document(*m_page->mainFrame().document()) 80 , m_workerThread(SharedWorkerThread::create(sharedWorkerIdentifier, generateWorkerParameters(scriptURL, workerFetchResult, WTFMove(workerOptions), userAgent, m_document), WTFMove(workerFetchResult.script), *this, *this, *this, WorkerThreadStartMode::Normal, clientOrigin.topOrigin.securityOrigin(), m_document->idbConnectionProxy(), m_document->socketProvider(), JSC::RuntimeFlags::createAllEnabled())) 81 , m_cacheStorageProvider(cacheStorageProvider) 82 { 83 ASSERT(!allSharedWorkerThreadProxies().contains(this)); 84 allSharedWorkerThreadProxies().add(this); 70 85 71 if (!m_workerThread) { 72 m_workerThread = SharedWorkerThread::create(SharedWorkerIdentifier::generate(), parameters, scriptBuffer, *this, *this, *this, WorkerThreadStartMode::Normal, m_scriptExecutionContext->topOrigin(), m_scriptExecutionContext->idbConnectionProxy(), m_scriptExecutionContext->socketProvider(), runtimeFlags); 73 m_workerThread->start(); 86 static bool addedListener; 87 if (!addedListener) { 88 platformStrategies()->loaderStrategy()->addOnlineStateChangeListener(&networkStateChanged); 89 addedListener = true; 74 90 } 75 91 } 76 92 77 void SharedWorkerThreadProxy::terminateWorkerGlobalScope()93 SharedWorkerThreadProxy::~SharedWorkerThreadProxy() 78 94 { 79 if (m_askedToTerminate) 80 return; 81 82 m_askedToTerminate = true; 83 if (m_workerThread) 84 m_workerThread->stop(nullptr); 85 } 86 87 void SharedWorkerThreadProxy::postMessageToWorkerGlobalScope(MessageWithMessagePorts&& message) 88 { 89 // FIXME: SharedWorker doesn't have postMessage, so this might not be necessary. 90 postTaskToWorkerGlobalScope([message = WTFMove(message)](auto& scriptContext) mutable { 91 auto& context = downcast<SharedWorkerGlobalScope>(scriptContext); 92 auto ports = MessagePort::entanglePorts(scriptContext, WTFMove(message.transferredPorts)); 93 context.dispatchEvent(MessageEvent::create(WTFMove(ports), message.message.releaseNonNull())); 94 }); 95 } 96 97 void SharedWorkerThreadProxy::postTaskToWorkerGlobalScope(Function<void(ScriptExecutionContext&)>&& task) 98 { 99 if (m_askedToTerminate) 100 return; 101 m_workerThread->runLoop().postTask(WTFMove(task)); 102 } 103 104 bool SharedWorkerThreadProxy::hasPendingActivity() const 105 { 106 return m_hasPendingActivity && !m_askedToTerminate; 107 } 108 109 void SharedWorkerThreadProxy::workerObjectDestroyed() 110 { 111 m_sharedWorker = nullptr; 112 m_scriptExecutionContext->postTask([this] (auto&) { 113 m_mayBeDestroyed = true; 114 if (m_workerThread) 115 terminateWorkerGlobalScope(); 116 else 117 workerGlobalScopeDestroyedInternal(); 118 }); 95 ASSERT(allSharedWorkerThreadProxies().contains(this)); 96 allSharedWorkerThreadProxies().remove(this); 119 97 } 120 98 … … 126 104 void SharedWorkerThreadProxy::notifyNetworkStateChange(bool isOnline) 127 105 { 128 if (m_ askedToTerminate)106 if (m_isTerminatingOrTerminated) 129 107 return; 130 108 131 if (!m_workerThread) 132 return; 133 134 m_workerThread->runLoop().postTask([isOnline] (ScriptExecutionContext& context) { 109 postTaskForModeToWorkerOrWorkletGlobalScope([isOnline] (ScriptExecutionContext& context) { 135 110 auto& globalScope = downcast<WorkerGlobalScope>(context); 136 111 globalScope.setIsOnline(isOnline); 137 globalScope.dispatchEvent(Event::create(isOnline ? eventNames().onlineEvent : eventNames().offlineEvent, Event::CanBubble::No, Event::IsCancelable::No)); 138 }); 139 } 140 141 void SharedWorkerThreadProxy::suspendForBackForwardCache() 142 { 143 144 } 145 146 void SharedWorkerThreadProxy::resumeForBackForwardCache() 147 { 148 112 globalScope.eventLoop().queueTask(TaskSource::DOMManipulation, [globalScope = Ref { globalScope }, isOnline] { 113 globalScope->dispatchEvent(Event::create(isOnline ? eventNames().onlineEvent : eventNames().offlineEvent, Event::CanBubble::No, Event::IsCancelable::No)); 114 }); 115 }, WorkerRunLoop::defaultMode()); 149 116 } 150 117 151 118 void SharedWorkerThreadProxy::postExceptionToWorkerObject(const String& errorMessage, int lineNumber, int columnNumber, const String& sourceURL) 152 119 { 153 m_scriptExecutionContext->postTask([this, errorMessage = errorMessage.isolatedCopy(), sourceURL = sourceURL.isolatedCopy(), lineNumber, columnNumber] (ScriptExecutionContext&) {154 if (!m_sharedWorker)155 return;120 ASSERT(!isMainThread()); 121 if (!m_workerThread->isInStaticScriptEvaluation()) 122 return; 156 123 157 // We don't bother checking the askedToTerminate() flag here, because exceptions should *always* be reported even if the thread is terminated. 158 // This is intentionally different than the behavior in MessageWorkerTask, because terminated workers no longer deliver messages (section 4.6 of the WebWorker spec), but they do report exceptions. 159 ActiveDOMObject::queueTaskToDispatchEvent(*m_sharedWorker, TaskSource::DOMManipulation, ErrorEvent::create(errorMessage, sourceURL, lineNumber, columnNumber, { })); 160 }); 161 } 162 163 void SharedWorkerThreadProxy::workerGlobalScopeDestroyed() 164 { 165 m_scriptExecutionContext->postTask([this] (ScriptExecutionContext&) { 166 workerGlobalScopeDestroyedInternal(); 167 }); 168 } 169 170 void SharedWorkerThreadProxy::postMessageToWorkerObject(MessageWithMessagePorts&&) 171 { 172 173 } 174 175 void SharedWorkerThreadProxy::confirmMessageFromWorkerObject(bool) 176 { 177 } 178 179 void SharedWorkerThreadProxy::reportPendingActivity(bool hasPendingActivity) 180 { 181 m_scriptExecutionContext->postTask([this, hasPendingActivity] (ScriptExecutionContext&) { 182 m_hasPendingActivity = hasPendingActivity; 124 callOnMainThread([sharedWorkerIdentifier = m_workerThread->identifier(), errorMessage = errorMessage.isolatedCopy(), lineNumber, columnNumber, sourceURL = sourceURL.isolatedCopy()] { 125 if (auto* connection = SharedWorkerContextManager::singleton().connection()) 126 connection->postExceptionToWorkerObject(sharedWorkerIdentifier, errorMessage, lineNumber, columnNumber, sourceURL); 183 127 }); 184 128 } … … 187 131 { 188 132 ASSERT(isMainThread()); 189 auto& document = downcast<Document>(*m_scriptExecutionContext); 190 return document.page()->cacheStorageProvider().createCacheStorageConnection(); 133 if (!m_cacheStorageConnection) 134 m_cacheStorageConnection = m_cacheStorageProvider.createCacheStorageConnection(); 135 return m_cacheStorageConnection; 191 136 } 192 137 … … 194 139 { 195 140 ASSERT(isMainThread()); 196 auto& document = downcast<Document>(*m_scriptExecutionContext); 197 if (!document.page()) 198 return nullptr; 199 return document.page()->libWebRTCProvider().createRTCDataChannelRemoteHandlerConnection(); 141 return m_page->libWebRTCProvider().createRTCDataChannelRemoteHandlerConnection(); 200 142 } 201 143 202 144 void SharedWorkerThreadProxy::postTaskToLoader(ScriptExecutionContext::Task&& task) 203 145 { 204 m_scriptExecutionContext->postTask(WTFMove(task)); 146 callOnMainThread([task = WTFMove(task), protectedThis = Ref { *this }] () mutable { 147 task.performTask(protectedThis->m_document.get()); 148 }); 205 149 } 206 150 207 151 bool SharedWorkerThreadProxy::postTaskForModeToWorkerOrWorkletGlobalScope(ScriptExecutionContext::Task&& task, const String& mode) 208 152 { 209 if (m_ askedToTerminate)153 if (m_isTerminatingOrTerminated) 210 154 return false; 211 155 … … 224 168 } 225 169 226 void SharedWorkerThreadProxy:: workerGlobalScopeDestroyedInternal()170 void SharedWorkerThreadProxy::networkStateChanged(bool isOnLine) 227 171 { 228 // This is always the last task to be performed, so the proxy is not needed for communication 229 // in either side any more. However, the Worker object may still exist, and it assumes that the proxy exists, too. 230 m_askedToTerminate = true; 231 m_workerThread = nullptr; 232 233 // This balances the original ref in construction. 234 if (m_mayBeDestroyed) 235 deref(); 172 for (auto* proxy : allSharedWorkerThreadProxies()) 173 proxy->notifyNetworkStateChange(isOnLine); 236 174 } 237 175 -
trunk/Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.h
r289023 r289247 1 1 /* 2 * Copyright (C) 2021 Apple Inc. All rights reserved.2 * Copyright (C) 2021-2022 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 28 28 #include "SharedWorkerIdentifier.h" 29 29 #include "WorkerDebuggerProxy.h" 30 #include "WorkerGlobalScopeProxy.h"31 30 #include "WorkerLoaderProxy.h" 32 31 #include "WorkerObjectProxy.h" … … 36 35 namespace WebCore { 37 36 37 class CacheStorageProvider; 38 class Page; 38 39 class SharedWorker; 39 40 class SharedWorkerThread; 40 41 41 class SharedWorkerThreadProxy final : public ThreadSafeRefCounted<SharedWorkerThreadProxy>, public WorkerGlobalScopeProxy, public WorkerObjectProxy, public WorkerLoaderProxy, public WorkerDebuggerProxy { 42 struct ClientOrigin; 43 struct WorkerFetchResult; 44 45 class SharedWorkerThreadProxy final : public ThreadSafeRefCounted<SharedWorkerThreadProxy>, public WorkerObjectProxy, public WorkerLoaderProxy, public WorkerDebuggerProxy { 42 46 public: 43 template<typename... Args> static SharedWorkerThreadProxy& create(Args&&... args) { return *new SharedWorkerThreadProxy(std::forward<Args>(args)...); } 47 template<typename... Args> static Ref<SharedWorkerThreadProxy> create(Args&&... args) { return adoptRef(*new SharedWorkerThreadProxy(std::forward<Args>(args)...)); } 48 WEBCORE_EXPORT ~SharedWorkerThreadProxy(); 44 49 45 50 SharedWorkerIdentifier identifier() const; 46 SharedWorkerThread * thread() { return m_workerThread.get(); }51 SharedWorkerThread& thread() { return m_workerThread; } 47 52 48 void startWorkerGlobalScope(const URL& scriptURL, const String& name, const String& userAgent, bool isOnline, const ScriptBuffer& sourceCode, const ContentSecurityPolicyResponseHeaders&, bool shouldBypassMainWorldContentSecurityPolicy, const CrossOriginEmbedderPolicy&, MonotonicTime timeOrigin, ReferrerPolicy, WorkerType, FetchRequestCredentials, JSC::RuntimeFlags) final; 49 void workerObjectDestroyed() final; 50 bool hasPendingActivity() const final; 51 void terminateWorkerGlobalScope() final; 53 bool isTerminatingOrTerminated() const { return m_isTerminatingOrTerminated; } 54 void setAsTerminatingOrTerminated() { m_isTerminatingOrTerminated = true; } 52 55 53 56 private: 54 explicit SharedWorkerThreadProxy(SharedWorker&);57 WEBCORE_EXPORT SharedWorkerThreadProxy(UniqueRef<Page>&&, SharedWorkerIdentifier, const ClientOrigin&, const URL& scriptURL, WorkerFetchResult&&, WorkerOptions&&, const String& userAgent, CacheStorageProvider&); 55 58 56 void workerGlobalScopeDestroyedInternal(); 59 // WorkerObjectProxy. 60 void postExceptionToWorkerObject(const String& errorMessage, int lineNumber, int columnNumber, const String& sourceURL) final; 61 void postMessageToWorkerObject(MessageWithMessagePorts&&) final { } 62 void workerGlobalScopeDestroyed() final { } 63 void confirmMessageFromWorkerObject(bool) final { } 64 void reportPendingActivity(bool) final { } 57 65 58 void postMessageToWorkerGlobalScope(MessageWithMessagePorts&&) final; 59 void postTaskToWorkerGlobalScope(Function<void(ScriptExecutionContext&)>&&) final; 60 void notifyNetworkStateChange(bool isOnline) final; 61 void suspendForBackForwardCache() final; 62 void resumeForBackForwardCache() final; 63 void postExceptionToWorkerObject(const String& errorMessage, int lineNumber, int columnNumber, const String& sourceURL) final; 64 void workerGlobalScopeDestroyed() final; 65 void postMessageToWorkerObject(MessageWithMessagePorts&&) final; 66 void confirmMessageFromWorkerObject(bool hasPendingActivity) final; 67 void reportPendingActivity(bool hasPendingActivity) final; 66 // WorkerLoaderProxy. 68 67 RefPtr<CacheStorageConnection> createCacheStorageConnection() final; 69 68 RefPtr<RTCDataChannelRemoteHandlerConnection> createRTCDataChannelRemoteHandlerConnection() final; 70 69 void postTaskToLoader(ScriptExecutionContext::Task&&) final; 71 70 bool postTaskForModeToWorkerOrWorkletGlobalScope(ScriptExecutionContext::Task&&, const String& mode) final; 71 72 // WorkerDebuggerProxy. 72 73 void postMessageToDebugger(const String&) final; 73 74 void setResourceCachingDisabledByWebInspector(bool) final; 74 75 75 WeakPtr<SharedWorker> m_sharedWorker; 76 RefPtr<SharedWorkerThread> m_workerThread; 77 const RefPtr<ScriptExecutionContext> m_scriptExecutionContext; 78 const String m_identifierForInspector; 79 bool m_askedToTerminate { false }; 80 bool m_hasPendingActivity { false }; 81 bool m_mayBeDestroyed { false }; 76 static void networkStateChanged(bool isOnLine); 77 void notifyNetworkStateChange(bool isOnline); 78 79 UniqueRef<Page> m_page; 80 Ref<Document> m_document; 81 Ref<SharedWorkerThread> m_workerThread; 82 CacheStorageProvider& m_cacheStorageProvider; 83 RefPtr<CacheStorageConnection> m_cacheStorageConnection; 84 bool m_isTerminatingOrTerminated { false }; 82 85 }; 83 86 -
trunk/Source/WebKit/CMakeLists.txt
r288354 r289247 29 29 "${WEBKIT_DIR}/NetworkProcess/PrivateClickMeasurement" 30 30 "${WEBKIT_DIR}/NetworkProcess/ServiceWorker" 31 "${WEBKIT_DIR}/NetworkProcess/SharedWorker" 31 32 "${WEBKIT_DIR}/NetworkProcess/WebStorage" 32 33 "${WEBKIT_DIR}/NetworkProcess/cache" … … 203 204 NetworkProcess/ServiceWorker/WebSWServerToContextConnection 204 205 206 NetworkProcess/SharedWorker/WebSharedWorkerServerConnection 207 NetworkProcess/SharedWorker/WebSharedWorkerServerToContextConnection 208 205 209 NetworkProcess/WebStorage/StorageManagerSet 206 210 … … 306 310 WebProcess/Speech/SpeechRecognitionRealtimeMediaSourceManager 307 311 312 WebProcess/Storage/WebSharedWorkerContextManagerConnection 313 WebProcess/Storage/WebSharedWorkerObjectConnection 308 314 WebProcess/Storage/WebSWClientConnection 309 315 WebProcess/Storage/WebSWContextManagerConnection -
trunk/Source/WebKit/ChangeLog
r289246 r289247 1 2022-02-07 Chris Dumez <cdumez@apple.com> 2 3 Add support for sharing Shared Workers (including across WebProcesses) 4 https://bugs.webkit.org/show_bug.cgi?id=235958 5 <rdar://problem/88330666> 6 7 Reviewed by Darin Adler. 8 9 Add support for sharing Shared Workers, including across WebProcesses. The architecture 10 is modeled after the one we use for Service Workers since they are very similar. I tried 11 sharing as much code as possible with Service Workers but some more work can probably be 12 done in this area. 13 14 With this change, shared workers should be mostly functional and spec compliant. However, 15 the feature remains disabled by default for now as there are still WPT tests failures I 16 need to investigate. Also, I need to implement a better process suspension logic on iOS 17 to replace the hack I added in this patch (to make the tests run reliably on iOS). 18 19 As with Service Workers, Shared Workers are partitioned by (Top Origin + Frame Origin) 20 for privacy reasons. This is achieved via the SharedWorkerKey object that we use as 21 HashMap key. 22 23 * CMakeLists.txt: 24 * DerivedSources-input.xcfilelist: 25 * DerivedSources-output.xcfilelist: 26 * DerivedSources.make: 27 * NetworkProcess/NetworkConnectionToWebProcess.cpp: 28 (WebKit::m_schemeRegistry): 29 (WebKit::NetworkConnectionToWebProcess::~NetworkConnectionToWebProcess): 30 (WebKit::NetworkConnectionToWebProcess::didReceiveMessage): 31 (WebKit::NetworkConnectionToWebProcess::didClose): 32 (WebKit::NetworkConnectionToWebProcess::establishSharedWorkerContextConnection): 33 (WebKit::NetworkConnectionToWebProcess::establishSharedWorkerServerConnection): 34 (WebKit::NetworkConnectionToWebProcess::closeSharedWorkerContextConnection): 35 (WebKit::NetworkConnectionToWebProcess::unregisterSharedWorkerConnection): 36 (WebKit::NetworkConnectionToWebProcess::sharedWorkerServerToContextConnectionIsNoLongerNeeded): 37 (WebKit::NetworkConnectionToWebProcess::sharedWorkerConnection): 38 * NetworkProcess/NetworkConnectionToWebProcess.h: 39 * NetworkProcess/NetworkConnectionToWebProcess.messages.in: 40 * NetworkProcess/NetworkSession.cpp: 41 (WebKit::NetworkSession::ensureSharedWorkerServer): 42 * NetworkProcess/NetworkSession.h: 43 (WebKit::NetworkSession::sharedWorkerServer): 44 * NetworkProcess/SharedWorker/WebSharedWorker.cpp: Copied from Source/WebKit/WebProcess/Storage/WebSharedWorkerObjectConnection.cpp. 45 (WebKit::WebSharedWorker::WebSharedWorker): 46 (WebKit::WebSharedWorker::~WebSharedWorker): 47 (WebKit::WebSharedWorker::fromIdentifier): 48 (WebKit::WebSharedWorker::registrableDomain const): 49 * NetworkProcess/SharedWorker/WebSharedWorker.h: Added. 50 (WebKit::WebSharedWorker::identifier const): 51 (WebKit::WebSharedWorker::key const): 52 (WebKit::WebSharedWorker::workerOptions const): 53 (WebKit::WebSharedWorker::origin const): 54 (WebKit::WebSharedWorker::url const): 55 (WebKit::WebSharedWorker::sharedWorkerObjects): 56 (WebKit::WebSharedWorker::isRunning const): 57 (WebKit::WebSharedWorker::markAsRunning): 58 (WebKit::WebSharedWorker::fetchResult const): 59 (WebKit::WebSharedWorker::setFetchResult): 60 (WebKit::WebSharedWorker::didFinishFetching const): 61 * NetworkProcess/SharedWorker/WebSharedWorkerServer.cpp: Added. 62 (WebKit::WebSharedWorkerServer::WebSharedWorkerServer): 63 (WebKit::WebSharedWorkerServer::sessionID): 64 (WebKit::WebSharedWorkerServer::requestSharedWorker): 65 (WebKit::WebSharedWorkerServer::didFinishFetchingSharedWorkerScript): 66 (WebKit::WebSharedWorkerServer::needsContextConnectionForRegistrableDomain const): 67 (WebKit::WebSharedWorkerServer::createContextConnection): 68 (WebKit::WebSharedWorkerServer::addContextConnection): 69 (WebKit::WebSharedWorkerServer::removeContextConnection): 70 (WebKit::WebSharedWorkerServer::contextConnectionCreated): 71 (WebKit::WebSharedWorkerServer::sharedWorkerObjectIsGoingAway): 72 (WebKit::WebSharedWorkerServer::shutDownSharedWorker): 73 (WebKit::WebSharedWorkerServer::addConnection): 74 (WebKit::WebSharedWorkerServer::removeConnection): 75 (WebKit::WebSharedWorkerServer::contextConnectionForRegistrableDomain const): 76 (WebKit::WebSharedWorkerServer::postExceptionToWorkerObject): 77 * NetworkProcess/SharedWorker/WebSharedWorkerServer.h: Added. 78 * NetworkProcess/SharedWorker/WebSharedWorkerServerConnection.cpp: Added. 79 (WebKit::WebSharedWorkerServerConnection::WebSharedWorkerServerConnection): 80 (WebKit::WebSharedWorkerServerConnection::~WebSharedWorkerServerConnection): 81 (WebKit::WebSharedWorkerServerConnection::messageSenderConnection const): 82 (WebKit::WebSharedWorkerServerConnection::sessionID): 83 (WebKit::WebSharedWorkerServerConnection::session): 84 (WebKit::WebSharedWorkerServerConnection::requestSharedWorker): 85 (WebKit::WebSharedWorkerServerConnection::sharedWorkerObjectIsGoingAway): 86 (WebKit::WebSharedWorkerServerConnection::fetchScriptInClient): 87 (WebKit::WebSharedWorkerServerConnection::notifyWorkerObjectOfLoadCompletion): 88 (WebKit::WebSharedWorkerServerConnection::postExceptionToWorkerObject): 89 * NetworkProcess/SharedWorker/WebSharedWorkerServerConnection.h: Added. 90 (WebKit::WebSharedWorkerServerConnection::server): 91 (WebKit::WebSharedWorkerServerConnection::server const): 92 (WebKit::WebSharedWorkerServerConnection::webProcessIdentifier const): 93 * NetworkProcess/SharedWorker/WebSharedWorkerServerConnection.messages.in: Added. 94 * NetworkProcess/SharedWorker/WebSharedWorkerServerToContextConnection.cpp: Added. 95 (WebKit::WebSharedWorkerServerToContextConnection::WebSharedWorkerServerToContextConnection): 96 (WebKit::WebSharedWorkerServerToContextConnection::~WebSharedWorkerServerToContextConnection): 97 (WebKit::WebSharedWorkerServerToContextConnection::webProcessIdentifier const): 98 (WebKit::WebSharedWorkerServerToContextConnection::ipcConnection const): 99 (WebKit::WebSharedWorkerServerToContextConnection::messageSenderConnection const): 100 (WebKit::WebSharedWorkerServerToContextConnection::messageSenderDestinationID const): 101 (WebKit::WebSharedWorkerServerToContextConnection::connectionIsNoLongerNeeded): 102 (WebKit::WebSharedWorkerServerToContextConnection::postExceptionToWorkerObject): 103 (WebKit::WebSharedWorkerServerToContextConnection::launchSharedWorker): 104 (WebKit::WebSharedWorkerServerToContextConnection::postConnectEvent): 105 (WebKit::WebSharedWorkerServerToContextConnection::terminateSharedWorker): 106 * NetworkProcess/SharedWorker/WebSharedWorkerServerToContextConnection.h: Added. 107 * NetworkProcess/SharedWorker/WebSharedWorkerServerToContextConnection.messages.in: Added. 108 * Platform/Logging.h: 109 * Scripts/webkit/messages.py: 110 (types_that_cannot_be_forward_declared): 111 * Sources.txt: 112 * UIProcess/Network/NetworkProcessProxy.cpp: 113 (WebKit::NetworkProcessProxy::terminateUnresponsiveServiceWorkerProcesses): 114 (WebKit::NetworkProcessProxy::establishSharedWorkerContextConnectionToNetworkProcess): 115 (WebKit::NetworkProcessProxy::establishServiceWorkerContextConnectionToNetworkProcess): 116 (WebKit::NetworkProcessProxy::serviceWorkerContextConnectionNoLongerNeeded): 117 (WebKit::NetworkProcessProxy::sharedWorkerContextConnectionNoLongerNeeded): 118 * UIProcess/Network/NetworkProcessProxy.h: 119 * UIProcess/Network/NetworkProcessProxy.messages.in: 120 * UIProcess/WebPageProxy.cpp: 121 (WebKit::WebPageProxy::setUserAgent): 122 * UIProcess/WebProcessPool.cpp: 123 (WebKit::WebProcessPool::establishServiceWorkerContextConnectionToNetworkProcess): 124 (WebKit::WebProcessPool::removeFromWorkerProcesses): 125 (WebKit::WebProcessPool::establishSharedWorkerContextConnectionToNetworkProcess): 126 (WebKit::WebProcessPool::disconnectProcess): 127 (WebKit::WebProcessPool::userContentControllerIdentifierForWorkers): 128 (WebKit::WebProcessPool::createWebPage): 129 (WebKit::WebProcessPool::updateWorkerUserAgent): 130 (WebKit::WebProcessPool::terminateServiceWorkers): 131 (WebKit::WebProcessPool::workerProcesses): 132 (WebKit::WebProcessPool::updateProcessAssertions): 133 (WebKit::WebProcessPool::isServiceWorkerPageID const): 134 (WebKit::WebProcessPool::serviceWorkerProxiesCount const): 135 (WebKit::WebProcessPool::hasServiceWorkerForegroundActivityForTesting const): 136 (WebKit::WebProcessPool::hasServiceWorkerBackgroundActivityForTesting const): 137 (WebKit::WebProcessPool::removeFromServiceWorkerProcesses): Deleted. 138 (WebKit::WebProcessPool::userContentControllerIdentifierForServiceWorkers): Deleted. 139 (WebKit::WebProcessPool::updateServiceWorkerUserAgent): Deleted. 140 (WebKit::WebProcessPool::serviceWorkerProcesses): Deleted. 141 * UIProcess/WebProcessPool.h: 142 * UIProcess/WebProcessProxy.cpp: 143 (WebKit::WebProcessProxy::createForWorkers): 144 (WebKit::WebProcessProxy::didBecomeUnresponsive): 145 (WebKit::WebProcessProxy::didStartProvisionalLoadForMainFrame): 146 (WebKit::WebProcessProxy::setWorkerUserAgent): 147 (WebKit::WebProcessProxy::updateWorkerPreferencesStore): 148 (WebKit::WebProcessProxy::updateWorkerProcessAssertion): 149 (WebKit::WebProcessProxy::establishSharedWorkerContext): 150 (WebKit::WebProcessProxy::registerServiceWorkerClientProcess): 151 (WebKit::WebProcessProxy::unregisterServiceWorkerClientProcess): 152 (WebKit::WebProcessProxy::startServiceWorkerBackgroundProcessing): 153 (WebKit::WebProcessProxy::endServiceWorkerBackgroundProcessing): 154 (WebKit::WebProcessProxy::disableWorkers): 155 (WebKit::WebProcessProxy::enableWorkers): 156 (WebKit::WebProcessProxy::createForServiceWorkers): Deleted. 157 (WebKit::WebProcessProxy::setServiceWorkerUserAgent): Deleted. 158 (WebKit::WebProcessProxy::updateServiceWorkerPreferencesStore): Deleted. 159 (WebKit::WebProcessProxy::updateServiceWorkerProcessAssertion): Deleted. 160 (WebKit::WebProcessProxy::disableServiceWorkers): Deleted. 161 (WebKit::WebProcessProxy::enableServiceWorkers): Deleted. 162 * UIProcess/WebProcessProxy.h: 163 (WebKit::WebProcessProxy::isRunningSharedWorkers const): 164 (WebKit::WebProcessProxy::isStandaloneSharedWorkerProcess const): 165 (WebKit::WebProcessProxy::isRunningWorkers const): 166 (WebKit::WebProcessProxy::hasServiceWorkerPageProxy): 167 * WebKit.xcodeproj/project.pbxproj: 168 * WebProcess/Network/NetworkProcessConnection.cpp: 169 (WebKit::NetworkProcessConnection::didReceiveMessage): 170 * WebProcess/Network/NetworkProcessConnection.h: 171 * WebProcess/Storage/WebSharedWorkerContextManagerConnection.cpp: Added. 172 (WebKit::WebSharedWorkerContextManagerConnection::WebSharedWorkerContextManagerConnection): 173 (WebKit::m_userContentController): 174 (WebKit::WebSharedWorkerContextManagerConnection::establishConnection): 175 (WebKit::WebSharedWorkerContextManagerConnection::postExceptionToWorkerObject): 176 (WebKit::WebSharedWorkerContextManagerConnection::updatePreferencesStore): 177 (WebKit::WebSharedWorkerContextManagerConnection::launchSharedWorker): 178 (WebKit::WebSharedWorkerContextManagerConnection::close): 179 * WebProcess/Storage/WebSharedWorkerContextManagerConnection.h: Added. 180 * WebProcess/Storage/WebSharedWorkerContextManagerConnection.messages.in: Added. 181 * WebProcess/Storage/WebSharedWorkerObjectConnection.cpp: 182 (WebKit::WebSharedWorkerObjectConnection::WebSharedWorkerObjectConnection): 183 (WebKit::WebSharedWorkerObjectConnection::~WebSharedWorkerObjectConnection): 184 (WebKit::WebSharedWorkerObjectConnection::requestSharedWorker): 185 (WebKit::WebSharedWorkerObjectConnection::sharedWorkerObjectIsGoingAway): 186 * WebProcess/Storage/WebSharedWorkerObjectConnection.h: 187 * WebProcess/Storage/WebSharedWorkerObjectConnection.messages.in: Added. 188 * WebProcess/WebProcess.cpp: 189 (WebKit::WebProcess::didReceiveMessage): 190 (WebKit::WebProcess::establishSharedWorkerContextConnectionToNetworkProcess): 191 * WebProcess/WebProcess.h: 192 * WebProcess/WebProcess.messages.in: 193 1 194 2022-02-07 Megan Gardner <megan_gardner@apple.com> 2 195 -
trunk/Source/WebKit/DerivedSources-input.xcfilelist
r288354 r289247 92 92 $(PROJECT_DIR)/NetworkProcess/ServiceWorker/WebSWServerConnection.messages.in 93 93 $(PROJECT_DIR)/NetworkProcess/ServiceWorker/WebSWServerToContextConnection.messages.in 94 $(PROJECT_DIR)/NetworkProcess/SharedWorker/WebSharedWorkerServerConnection.messages.in 95 $(PROJECT_DIR)/NetworkProcess/SharedWorker/WebSharedWorkerServerToContextConnection.messages.in 94 96 $(PROJECT_DIR)/NetworkProcess/WebStorage/StorageManagerSet.messages.in 95 97 $(PROJECT_DIR)/NetworkProcess/cache/CacheStorageEngineConnection.messages.in … … 218 220 $(PROJECT_DIR)/WebProcess/Storage/WebSWClientConnection.messages.in 219 221 $(PROJECT_DIR)/WebProcess/Storage/WebSWContextManagerConnection.messages.in 222 $(PROJECT_DIR)/WebProcess/Storage/WebSharedWorkerContextManagerConnection.messages.in 223 $(PROJECT_DIR)/WebProcess/Storage/WebSharedWorkerObjectConnection.messages.in 220 224 $(PROJECT_DIR)/WebProcess/UserContent/WebUserContentController.messages.in 221 225 $(PROJECT_DIR)/WebProcess/WebAuthentication/WebAuthenticatorCoordinator.messages.in -
trunk/Source/WebKit/DerivedSources-output.xcfilelist
r288354 r289247 608 608 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/WebSWServerToContextConnectionMessages.h 609 609 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/WebSWServerToContextConnectionMessagesReplies.h 610 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/WebSharedWorkerContextManagerConnectionMessageReceiver.cpp 611 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/WebSharedWorkerContextManagerConnectionMessages.h 612 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/WebSharedWorkerContextManagerConnectionMessagesReplies.h 613 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/WebSharedWorkerObjectConnectionMessageReceiver.cpp 614 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/WebSharedWorkerObjectConnectionMessages.h 615 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/WebSharedWorkerObjectConnectionMessagesReplies.h 616 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/WebSharedWorkerServerConnectionMessageReceiver.cpp 617 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/WebSharedWorkerServerConnectionMessages.h 618 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/WebSharedWorkerServerConnectionMessagesReplies.h 619 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/WebSharedWorkerServerToContextConnectionMessageReceiver.cpp 620 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/WebSharedWorkerServerToContextConnectionMessages.h 621 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/WebSharedWorkerServerToContextConnectionMessagesReplies.h 610 622 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/WebSocketChannelMessageReceiver.cpp 611 623 $(BUILT_PRODUCTS_DIR)/DerivedSources/WebKit/WebSocketChannelMessages.h -
trunk/Source/WebKit/DerivedSources.make
r288354 r289247 134 134 NetworkProcess/ServiceWorker/ServiceWorkerFetchTask \ 135 135 NetworkProcess/ServiceWorker/WebSWServerToContextConnection \ 136 NetworkProcess/SharedWorker/WebSharedWorkerServerConnection \ 137 NetworkProcess/SharedWorker/WebSharedWorkerServerToContextConnection \ 136 138 NetworkProcess/NetworkSocketStream \ 137 139 NetworkProcess/NetworkProcess \ … … 226 228 WebProcess/WebCoreSupport/WebSpeechRecognitionConnection \ 227 229 WebProcess/Speech/SpeechRecognitionRealtimeMediaSourceManager \ 230 WebProcess/Storage/WebSharedWorkerContextManagerConnection \ 231 WebProcess/Storage/WebSharedWorkerObjectConnection \ 228 232 WebProcess/Storage/WebSWContextManagerConnection \ 229 233 WebProcess/Storage/WebSWClientConnection \ -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.cpp
r289065 r289247 67 67 #include "WebSWServerToContextConnection.h" 68 68 #include "WebSWServerToContextConnectionMessages.h" 69 #include "WebSharedWorkerServer.h" 70 #include "WebSharedWorkerServerConnection.h" 71 #include "WebSharedWorkerServerConnectionMessages.h" 72 #include "WebSharedWorkerServerToContextConnection.h" 73 #include "WebSharedWorkerServerToContextConnectionMessages.h" 69 74 #include "WebsiteDataStoreParameters.h" 70 75 #include <WebCore/DocumentStorageAccess.h> … … 133 138 establishSWServerConnection(); 134 139 #endif 140 establishSharedWorkerServerConnection(); 135 141 } 136 142 … … 167 173 unregisterSWConnection(); 168 174 #endif 175 unregisterSharedWorkerConnection(); 169 176 } 170 177 … … 276 283 #endif 277 284 285 if (decoder.messageReceiverName() == Messages::WebSharedWorkerServerConnection::messageReceiverName()) { 286 if (m_sharedWorkerConnection) 287 m_sharedWorkerConnection->didReceiveMessage(connection, decoder); 288 return; 289 } 290 if (decoder.messageReceiverName() == Messages::WebSharedWorkerServerToContextConnection::messageReceiverName()) { 291 if (m_sharedWorkerContextConnection) 292 m_sharedWorkerContextConnection->didReceiveMessage(connection, decoder); 293 return; 294 } 295 278 296 #if ENABLE(APPLE_PAY_REMOTE_UI) 279 297 if (decoder.messageReceiverName() == Messages::WebPaymentCoordinatorProxy::messageReceiverName()) … … 399 417 #if ENABLE(SERVICE_WORKER) 400 418 m_swContextConnection = nullptr; 401 #else 402 UNUSED_PARAM(connection); 403 #endif 419 #endif 420 m_sharedWorkerContextConnection = nullptr; 404 421 405 422 // Protect ourself as we might be otherwise be deleted during this function. … … 442 459 unregisterSWConnection(); 443 460 #endif 461 unregisterSharedWorkerConnection(); 444 462 445 463 #if ENABLE(APPLE_PAY_REMOTE_UI) … … 1187 1205 }); 1188 1206 } 1207 1208 void NetworkConnectionToWebProcess::establishSharedWorkerContextConnection(WebPageProxyIdentifier, WebCore::RegistrableDomain&& registrableDomain, CompletionHandler<void()>&& completionHandler) 1209 { 1210 CONNECTION_RELEASE_LOG(SharedWorker, "establishSharedWorkerContextConnection:"); 1211 auto* session = networkSession(); 1212 if (auto* swServer = session ? session->sharedWorkerServer() : nullptr) 1213 m_sharedWorkerContextConnection = makeUnique<WebSharedWorkerServerToContextConnection>(*this, WTFMove(registrableDomain), *swServer); 1214 completionHandler(); 1215 } 1216 1217 void NetworkConnectionToWebProcess::establishSharedWorkerServerConnection() 1218 { 1219 if (m_sharedWorkerConnection) 1220 return; 1221 1222 auto* session = networkSession(); 1223 if (!session) 1224 return; 1225 1226 CONNECTION_RELEASE_LOG(SharedWorker, "establishSharedWorkerServerConnection:"); 1227 1228 auto& server = session->ensureSharedWorkerServer(); 1229 auto connection = makeUnique<WebSharedWorkerServerConnection>(m_networkProcess, server, m_connection.get(), m_webProcessIdentifier); 1230 1231 m_sharedWorkerConnection = *connection; 1232 server.addConnection(WTFMove(connection)); 1233 } 1234 1235 void NetworkConnectionToWebProcess::closeSharedWorkerContextConnection() 1236 { 1237 CONNECTION_RELEASE_LOG(SharedWorker, "closeSharedWorkerContextConnection:"); 1238 m_sharedWorkerContextConnection = nullptr; 1239 } 1240 1241 void NetworkConnectionToWebProcess::unregisterSharedWorkerConnection() 1242 { 1243 CONNECTION_RELEASE_LOG(SharedWorker, "unregisterSharedWorkerConnection:"); 1244 if (m_sharedWorkerConnection) 1245 m_sharedWorkerConnection->server().removeConnection(m_sharedWorkerConnection->webProcessIdentifier()); 1246 } 1247 1248 void NetworkConnectionToWebProcess::sharedWorkerServerToContextConnectionIsNoLongerNeeded() 1249 { 1250 CONNECTION_RELEASE_LOG(SharedWorker, "sharedWorkerServerToContextConnectionIsNoLongerNeeded:"); 1251 m_networkProcess->parentProcessConnection()->send(Messages::NetworkProcessProxy::SharedWorkerContextConnectionNoLongerNeeded { webProcessIdentifier() }, 0); 1252 1253 m_sharedWorkerContextConnection = nullptr; 1254 } 1255 1256 WebSharedWorkerServerConnection* NetworkConnectionToWebProcess::sharedWorkerConnection() 1257 { 1258 if (!m_sharedWorkerConnection) 1259 establishSharedWorkerServerConnection(); 1260 return m_sharedWorkerConnection.get(); 1261 } 1189 1262 1190 1263 #if ENABLE(SERVICE_WORKER) -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.h
r289065 r289247 93 93 class WebSWServerConnection; 94 94 class WebSWServerToContextConnection; 95 class WebSharedWorkerServerConnection; 96 class WebSharedWorkerServerToContextConnection; 95 97 96 98 namespace NetworkCache { … … 186 188 std::unique_ptr<ServiceWorkerFetchTask> createFetchTask(NetworkResourceLoader&, const WebCore::ResourceRequest&); 187 189 #endif 190 void sharedWorkerServerToContextConnectionIsNoLongerNeeded(); 191 192 WebSharedWorkerServerConnection* sharedWorkerConnection(); 188 193 189 194 NetworkSchemeRegistry& schemeRegistry() { return m_schemeRegistry.get(); } … … 254 259 void updateQuotaBasedOnSpaceUsageForTesting(const WebCore::ClientOrigin&); 255 260 261 void establishSharedWorkerServerConnection(); 262 void unregisterSharedWorkerConnection(); 263 256 264 #if ENABLE(SERVICE_WORKER) 257 265 void establishSWServerConnection(); … … 260 268 void unregisterSWConnection(); 261 269 #endif 270 271 void establishSharedWorkerContextConnection(WebPageProxyIdentifier, WebCore::RegistrableDomain&&, CompletionHandler<void()>&&); 272 void closeSharedWorkerContextConnection(); 262 273 263 274 void createRTCProvider(CompletionHandler<void()>&&); … … 405 416 std::unique_ptr<WebSWServerToContextConnection> m_swContextConnection; 406 417 #endif 418 WeakPtr<WebSharedWorkerServerConnection> m_sharedWorkerConnection; 419 std::unique_ptr<WebSharedWorkerServerToContextConnection> m_sharedWorkerContextConnection; 407 420 408 421 #if ENABLE(WEB_RTC) -
trunk/Source/WebKit/NetworkProcess/NetworkConnectionToWebProcess.messages.in
r288540 r289247 89 89 #endif 90 90 91 EstablishSharedWorkerContextConnection(WebKit::WebPageProxyIdentifier webPageProxyID, WebCore::RegistrableDomain domain) -> () Async 92 CloseSharedWorkerContextConnection() 93 91 94 CreateRTCProvider() -> () Async 92 95 #if ENABLE(WEB_RTC) -
trunk/Source/WebKit/NetworkProcess/NetworkSession.cpp
r288935 r289247 48 48 #include "WebProcessProxy.h" 49 49 #include "WebSWOriginStore.h" 50 #include "WebSharedWorkerServer.h" 50 51 #include "WebSocketTask.h" 51 52 #include <WebCore/CookieJar.h> … … 654 655 #endif // ENABLE(SERVICE_WORKER) 655 656 657 WebSharedWorkerServer& NetworkSession::ensureSharedWorkerServer() 658 { 659 if (!m_sharedWorkerServer) 660 m_sharedWorkerServer = makeUnique<WebSharedWorkerServer>(*this); 661 return *m_sharedWorkerServer; 662 } 663 656 664 WebIDBServer& NetworkSession::ensureWebIDBServer() 657 665 { -
trunk/Source/WebKit/NetworkProcess/NetworkSession.h
r287781 r289247 80 80 class WebPageNetworkParameters; 81 81 class WebResourceLoadStatisticsStore; 82 class WebSharedWorkerServer; 82 83 class WebSocketTask; 83 84 class WebSWOriginStore; … … 211 212 #endif 212 213 214 WebSharedWorkerServer* sharedWorkerServer() { return m_sharedWorkerServer.get(); } 215 WebSharedWorkerServer& ensureSharedWorkerServer(); 216 213 217 WebIDBServer* webIDBServer() { return m_webIDBServer.get(); } 214 218 WebIDBServer& ensureWebIDBServer(); … … 319 323 std::unique_ptr<WebCore::SWServer> m_swServer; 320 324 #endif 325 std::unique_ptr<WebSharedWorkerServer> m_sharedWorkerServer; 321 326 322 327 String m_idbDatabasePath; -
trunk/Source/WebKit/NetworkProcess/SharedWorker/WebSharedWorker.cpp
r289246 r289247 25 25 26 26 #include "config.h" 27 #include "WebSharedWorker ObjectConnection.h"27 #include "WebSharedWorker.h" 28 28 29 #include "NetworkProcessConnection.h"30 #include "WebProcess.h"31 #include < WebCore/SharedWorkerManager.h>29 #include <wtf/HashMap.h> 30 #include <wtf/NeverDestroyed.h> 31 #include <wtf/RunLoop.h> 32 32 33 33 namespace WebKit { 34 34 35 WebSharedWorkerObjectConnection::WebSharedWorkerObjectConnection() = default; 36 37 IPC::Connection* WebSharedWorkerObjectConnection::messageSenderConnection() const 35 static HashMap<WebCore::SharedWorkerIdentifier, WebSharedWorker*>& allWorkers() 38 36 { 39 return &WebProcess::singleton().ensureNetworkProcessConnection().connection(); 37 ASSERT(RunLoop::isMain()); 38 static NeverDestroyed<HashMap<WebCore::SharedWorkerIdentifier, WebSharedWorker*>> allWorkers; 39 return allWorkers; 40 40 } 41 41 42 void WebSharedWorkerObjectConnection::requestSharedWorker(const URL& url, WebCore::SharedWorker& sharedWorker, WebCore::TransferredMessagePort&& port, WebCore::WorkerOptions&& workerOptions) 42 WebSharedWorker::WebSharedWorker(const WebCore::SharedWorkerKey& key, const WebCore::WorkerOptions& workerOptions) 43 : m_identifier(WebCore::SharedWorkerIdentifier::generate()) 44 , m_key(key) 45 , m_workerOptions(workerOptions) 43 46 { 44 // FIXME: Should send IPC to the network process. 45 WebCore::SharedWorkerManager::singleton().connect(url, sharedWorker, WTFMove(port), WTFMove(workerOptions)); 47 ASSERT(!allWorkers().contains(m_identifier)); 48 allWorkers().add(m_identifier, this); 49 } 50 51 WebSharedWorker::~WebSharedWorker() 52 { 53 ASSERT(allWorkers().get(m_identifier) == this); 54 allWorkers().remove(m_identifier); 55 } 56 57 WebSharedWorker* WebSharedWorker::fromIdentifier(WebCore::SharedWorkerIdentifier identifier) 58 { 59 return allWorkers().get(identifier); 60 } 61 62 WebCore::RegistrableDomain WebSharedWorker::registrableDomain() const 63 { 64 return WebCore::RegistrableDomain { url() }; 46 65 } 47 66 -
trunk/Source/WebKit/Platform/Logging.h
r288972 r289247 98 98 M(SessionState) \ 99 99 M(SharedDisplayLists) \ 100 M(SharedWorker) \ 100 101 M(Storage) \ 101 102 M(StorageAPI) \ -
trunk/Source/WebKit/Scripts/webkit/messages.py
r289223 r289247 305 305 'WebCore::ServiceWorkerRegistrationIdentifier', 306 306 'WebCore::SharedStringHash', 307 'WebCore::SharedWorkerIdentifier', 308 'WebCore::SharedWorkerObjectIdentifier', 307 309 'WebCore::SleepDisablerIdentifier', 308 310 'WebCore::SourceBufferAppendMode', 309 311 'WebCore::SpeechRecognitionConnectionClientIdentifier', 310 312 'WebCore::StorageType', 313 'WebCore::TransferredMessagePort', 311 314 'WebCore::UserMediaRequestIdentifier', 312 315 'WebCore::WebLockIdentifier', -
trunk/Source/WebKit/Sources.txt
r289063 r289247 141 141 NetworkProcess/ServiceWorker/WebSWServerConnection.cpp @no-unify 142 142 NetworkProcess/ServiceWorker/WebSWServerToContextConnection.cpp @no-unify 143 144 NetworkProcess/SharedWorker/WebSharedWorker.cpp 145 NetworkProcess/SharedWorker/WebSharedWorkerServer.cpp 146 NetworkProcess/SharedWorker/WebSharedWorkerServerConnection.cpp 147 NetworkProcess/SharedWorker/WebSharedWorkerServerToContextConnection.cpp 143 148 144 149 NetworkProcess/storage/FileSystemStorageManager.cpp … … 784 789 WebProcess/Storage/WebServiceWorkerFetchTaskClient.cpp 785 790 WebProcess/Storage/WebServiceWorkerProvider.cpp 791 WebProcess/Storage/WebSharedWorkerContextManagerConnection.cpp 792 WebProcess/Storage/WebSharedWorkerObjectConnection.cpp 786 793 WebProcess/Storage/WebSharedWorkerProvider.cpp 787 WebProcess/Storage/WebSharedWorkerObjectConnection.cpp788 794 789 795 WebProcess/UserContent/WebUserContentController.cpp … … 888 894 WebBroadcastChannelRegistryMessageReceiver.cpp 889 895 WebLockRegistryProxyMessageReceiver.cpp 896 WebSharedWorkerContextManagerConnectionMessageReceiver.cpp 897 WebSharedWorkerObjectConnectionMessageReceiver.cpp 898 WebSharedWorkerServerConnectionMessageReceiver.cpp 899 WebSharedWorkerServerToContextConnectionMessageReceiver.cpp -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp
r288935 r289247 530 530 { 531 531 if (RefPtr process = WebProcessProxy::processForIdentifier(processIdentifier)) { 532 process->disable ServiceWorkers();532 process->disableWorkers(WebProcessProxy::WorkerType::ServiceWorker); 533 533 process->requestTermination(ProcessTerminationReason::ExceededCPULimit); 534 534 } … … 1416 1416 #endif 1417 1417 1418 void NetworkProcessProxy::establishSharedWorkerContextConnectionToNetworkProcess(WebCore::RegistrableDomain&& registrableDomain, PAL::SessionID sessionID, CompletionHandler<void()>&& completionHandler) 1419 { 1420 WebProcessPool::establishSharedWorkerContextConnectionToNetworkProcess(WTFMove(registrableDomain), sessionID, WTFMove(completionHandler)); 1421 } 1422 1418 1423 #if ENABLE(SERVICE_WORKER) 1419 1424 void NetworkProcessProxy::establishServiceWorkerContextConnectionToNetworkProcess(RegistrableDomain&& registrableDomain, std::optional<ScriptExecutionContextIdentifier> serviceWorkerPageIdentifier, PAL::SessionID sessionID, CompletionHandler<void()>&& completionHandler) 1420 1425 { 1421 WebProcessPool::establishServiceWorkerContextConnectionToNetworkProcess( *this,WTFMove(registrableDomain), serviceWorkerPageIdentifier, sessionID, WTFMove(completionHandler));1426 WebProcessPool::establishServiceWorkerContextConnectionToNetworkProcess(WTFMove(registrableDomain), serviceWorkerPageIdentifier, sessionID, WTFMove(completionHandler)); 1422 1427 } 1423 1428 … … 1425 1430 { 1426 1431 if (auto* process = WebProcessProxy::processForIdentifier(identifier)) 1427 process->disable ServiceWorkers();1432 process->disableWorkers(WebProcessProxy::WorkerType::ServiceWorker); 1428 1433 } 1429 1434 … … 1460 1465 } 1461 1466 #endif 1467 1468 void NetworkProcessProxy::sharedWorkerContextConnectionNoLongerNeeded(WebCore::ProcessIdentifier identifier) 1469 { 1470 if (auto* process = WebProcessProxy::processForIdentifier(identifier)) 1471 process->disableWorkers(WebProcessProxy::WorkerType::SharedWorker); 1472 } 1462 1473 1463 1474 void NetworkProcessProxy::requestStorageSpace(PAL::SessionID sessionID, const WebCore::ClientOrigin& origin, uint64_t currentQuota, uint64_t currentSize, uint64_t spaceRequired, CompletionHandler<void(std::optional<uint64_t> quota)>&& completionHandler) -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h
r288935 r289247 335 335 void endServiceWorkerBackgroundProcessing(WebCore::ProcessIdentifier serviceWorkerProcessIdentifier); 336 336 #endif 337 void sharedWorkerContextConnectionNoLongerNeeded(WebCore::ProcessIdentifier); 338 void establishSharedWorkerContextConnectionToNetworkProcess(WebCore::RegistrableDomain&&, PAL::SessionID, CompletionHandler<void()>&&); 337 339 338 340 void terminateWebProcess(WebCore::ProcessIdentifier); -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in
r288935 r289247 61 61 EndServiceWorkerBackgroundProcessing(WebCore::ProcessIdentifier serviceWorkerProcessIdentifier) 62 62 #endif 63 EstablishSharedWorkerContextConnectionToNetworkProcess(WebCore::RegistrableDomain registrableDomain, PAL::SessionID sessionID) -> () Async 64 SharedWorkerContextConnectionNoLongerNeeded(WebCore::ProcessIdentifier identifier) 63 65 64 66 SetWebProcessHasUploads(WebCore::ProcessIdentifier processID, bool hasUpload) -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r289140 r289247 3695 3695 m_userAgent = WTFMove(userAgent); 3696 3696 3697 #if ENABLE(SERVICE_WORKER)3698 3697 // We update the service worker there at the moment to be sure we use values used by actual web pages. 3699 3698 // FIXME: Refactor this when we have a better User-Agent story. 3700 process().processPool().updateServiceWorkerUserAgent(m_userAgent); 3701 #endif 3699 process().processPool().updateWorkerUserAgent(m_userAgent); 3702 3700 3703 3701 if (!hasRunningProcess()) -
trunk/Source/WebKit/UIProcess/WebProcessPool.cpp
r288935 r289247 530 530 531 531 #if ENABLE(SERVICE_WORKER) 532 void WebProcessPool::establishServiceWorkerContextConnectionToNetworkProcess( NetworkProcessProxy& proxy,RegistrableDomain&& registrableDomain, std::optional<ScriptExecutionContextIdentifier> serviceWorkerPageIdentifier, PAL::SessionID sessionID, CompletionHandler<void()>&& completionHandler)532 void WebProcessPool::establishServiceWorkerContextConnectionToNetworkProcess(RegistrableDomain&& registrableDomain, std::optional<ScriptExecutionContextIdentifier> serviceWorkerPageIdentifier, PAL::SessionID sessionID, CompletionHandler<void()>&& completionHandler) 533 533 { 534 534 auto* websiteDataStore = WebsiteDataStore::existingDataStoreForSessionID(sessionID); … … 547 547 // This is a service worker for a service worker page so we need to make sure we use use the page's WebProcess for the service worker. 548 548 if ((serviceWorkerProcessProxy = WebProcessProxy::processForIdentifier(serviceWorkerPageIdentifier->processIdentifier()))) { 549 serviceWorkerProcessProxy->enable ServiceWorkers(processPool->userContentControllerIdentifierForServiceWorkers());549 serviceWorkerProcessProxy->enableWorkers(WebProcessProxy::WorkerType::ServiceWorker, processPool->userContentControllerIdentifierForWorkers()); 550 550 if (serviceWorkerProcessProxy->isInProcessCache()) { 551 551 processPool->webProcessCache().removeProcess(*serviceWorkerProcessProxy, WebProcessCache::ShouldShutDownProcess::No); … … 565 565 566 566 serviceWorkerProcessProxy = process.ptr(); 567 serviceWorkerProcessProxy->enable ServiceWorkers(processPool->userContentControllerIdentifierForServiceWorkers());567 serviceWorkerProcessProxy->enableWorkers(WebProcessProxy::WorkerType::ServiceWorker, processPool->userContentControllerIdentifierForWorkers()); 568 568 569 569 if (serviceWorkerProcessProxy->isInProcessCache()) { … … 578 578 579 579 if (!serviceWorkerProcessProxy) { 580 auto newProcessProxy = WebProcessProxy::createFor ServiceWorkers(*processPool, RegistrableDomain { registrableDomain }, *websiteDataStore);580 auto newProcessProxy = WebProcessProxy::createForWorkers(WebProcessProxy::WorkerType::ServiceWorker, *processPool, RegistrableDomain { registrableDomain }, *websiteDataStore); 581 581 serviceWorkerProcessProxy = newProcessProxy.ptr(); 582 582 … … 587 587 } 588 588 589 ASSERT(!serviceWorkerProcesses().contains(*serviceWorkerProcessProxy)); 590 serviceWorkerProcesses().add(*serviceWorkerProcessProxy); 591 592 serviceWorkerProcessProxy->establishServiceWorkerContext(processPool->m_serviceWorkerPreferences ? processPool->m_serviceWorkerPreferences.value() : processPool->m_defaultPageGroup->preferences().store(), registrableDomain, serviceWorkerPageIdentifier, WTFMove(completionHandler)); 593 if (!processPool->m_serviceWorkerUserAgent.isNull()) 594 serviceWorkerProcessProxy->setServiceWorkerUserAgent(processPool->m_serviceWorkerUserAgent); 595 } 596 597 void WebProcessPool::removeFromServiceWorkerProcesses(WebProcessProxy& process) 598 { 599 ASSERT(serviceWorkerProcesses().contains(process)); 600 serviceWorkerProcesses().remove(process); 601 } 602 #endif 589 workerProcesses().add(*serviceWorkerProcessProxy); 590 591 serviceWorkerProcessProxy->establishServiceWorkerContext(processPool->m_workerPreferences ? processPool->m_workerPreferences.value() : processPool->m_defaultPageGroup->preferences().store(), registrableDomain, serviceWorkerPageIdentifier, WTFMove(completionHandler)); 592 if (!processPool->m_workerUserAgent.isNull()) 593 serviceWorkerProcessProxy->setWorkerUserAgent(processPool->m_workerUserAgent); 594 } 595 #endif 596 597 void WebProcessPool::removeFromWorkerProcesses(WebProcessProxy& process) 598 { 599 ASSERT(workerProcesses().contains(process)); 600 workerProcesses().remove(process); 601 } 602 603 void WebProcessPool::establishSharedWorkerContextConnectionToNetworkProcess(WebCore::RegistrableDomain&& registrableDomain, PAL::SessionID sessionID, CompletionHandler<void()>&& completionHandler) 604 { 605 auto* websiteDataStore = WebsiteDataStore::existingDataStoreForSessionID(sessionID); 606 if (!websiteDataStore) 607 websiteDataStore = WebsiteDataStore::defaultDataStore().ptr(); 608 if (!processPools().size()) 609 static NeverDestroyed<Ref<WebProcessPool>> sharedWorkerProcessPool(WebProcessPool::create(API::ProcessPoolConfiguration::create().get())); 610 611 // Arbitrarily choose the first process pool to host the shared worker process. 612 auto* processPool = processPools()[0]; 613 ASSERT(processPool); 614 615 WebProcessProxy* sharedWorkerProcessProxy { nullptr }; 616 617 for (auto& process : processPool->m_processes) { 618 if (process.ptr() == processPool->m_prewarmedProcess.get() || process->isDummyProcessProxy()) 619 continue; 620 if (&process->websiteDataStore() != websiteDataStore) 621 continue; 622 if (!process->isMatchingRegistrableDomain(registrableDomain)) 623 continue; 624 625 sharedWorkerProcessProxy = process.ptr(); 626 sharedWorkerProcessProxy->enableWorkers(WebProcessProxy::WorkerType::SharedWorker, processPool->userContentControllerIdentifierForWorkers()); 627 628 if (sharedWorkerProcessProxy->isInProcessCache()) { 629 processPool->webProcessCache().removeProcess(*sharedWorkerProcessProxy, WebProcessCache::ShouldShutDownProcess::No); 630 ASSERT(!sharedWorkerProcessProxy->isInProcessCache()); 631 } 632 633 WEBPROCESSPOOL_RELEASE_LOG_STATIC(SharedWorker, "establishSharedWorkerContextConnectionToNetworkProcess reusing an existing web process (process=%p, PID=%d)", sharedWorkerProcessProxy, sharedWorkerProcessProxy->processIdentifier()); 634 break; 635 } 636 637 if (!sharedWorkerProcessProxy) { 638 auto newProcessProxy = WebProcessProxy::createForWorkers(WebProcessProxy::WorkerType::SharedWorker, *processPool, RegistrableDomain { registrableDomain }, *websiteDataStore); 639 sharedWorkerProcessProxy = newProcessProxy.ptr(); 640 641 WEBPROCESSPOOL_RELEASE_LOG_STATIC(SharedWorker, "establishSharedWorkerContextConnectionToNetworkProcess creating a new service worker process (process=%p, PID=%d)", sharedWorkerProcessProxy, sharedWorkerProcessProxy->processIdentifier()); 642 643 processPool->initializeNewWebProcess(newProcessProxy, websiteDataStore); 644 processPool->m_processes.append(WTFMove(newProcessProxy)); 645 } 646 647 workerProcesses().add(*sharedWorkerProcessProxy); 648 649 sharedWorkerProcessProxy->establishSharedWorkerContext(processPool->m_workerPreferences ? processPool->m_workerPreferences.value() : processPool->m_defaultPageGroup->preferences().store(), registrableDomain, WTFMove(completionHandler)); 650 if (!processPool->m_workerUserAgent.isNull()) 651 sharedWorkerProcessProxy->setWorkerUserAgent(processPool->m_workerUserAgent); 652 } 603 653 604 654 void WebProcessPool::windowServerConnectionStateChanged() … … 1004 1054 m_backForwardCache->removeEntriesForProcess(process); 1005 1055 1006 #if ENABLE(SERVICE_WORKER) 1007 if (process.isRunningServiceWorkers()) 1008 removeFromServiceWorkerProcesses(process); 1009 #endif 1056 if (process.isRunningWorkers()) 1057 removeFromWorkerProcesses(process); 1010 1058 1011 1059 static_cast<WebContextSupplement*>(supplement<WebGeolocationManagerProxy>())->processDidClose(&process); … … 1068 1116 1069 1117 #if ENABLE(SERVICE_WORKER) 1070 UserContentControllerIdentifier WebProcessPool::userContentControllerIdentifierFor ServiceWorkers()1071 { 1072 if (!m_userContentControllerFor ServiceWorker)1073 m_userContentControllerFor ServiceWorker= WebUserContentControllerProxy::create();1074 1075 return m_userContentControllerFor ServiceWorker->identifier();1118 UserContentControllerIdentifier WebProcessPool::userContentControllerIdentifierForWorkers() 1119 { 1120 if (!m_userContentControllerForWorkers) 1121 m_userContentControllerForWorkers = WebUserContentControllerProxy::create(); 1122 1123 return m_userContentControllerForWorkers->identifier(); 1076 1124 } 1077 1125 #endif … … 1120 1168 auto page = process->createWebPage(pageClient, WTFMove(pageConfiguration)); 1121 1169 1122 #if ENABLE(SERVICE_WORKER) 1123 if (!m_serviceWorkerPreferences) { 1124 m_serviceWorkerPreferences = page->preferencesStore(); 1125 for (auto& serviceWorkerProcess : serviceWorkerProcesses()) 1126 serviceWorkerProcess.updateServiceWorkerPreferencesStore(*m_serviceWorkerPreferences); 1170 if (!m_workerPreferences) { 1171 m_workerPreferences = page->preferencesStore(); 1172 for (auto& workerProcess : workerProcesses()) 1173 workerProcess.updateWorkerPreferencesStore(*m_workerPreferences); 1127 1174 } 1128 1175 if (userContentController) 1129 m_userContentControllerForServiceWorker = userContentController; 1130 #endif 1176 m_userContentControllerForWorkers = userContentController; 1131 1177 1132 1178 bool enableProcessSwapOnCrossSiteNavigation = page->preferences().processSwapOnCrossSiteNavigationEnabled(); … … 1151 1197 } 1152 1198 1153 #if ENABLE(SERVICE_WORKER) 1154 void WebProcessPool::updateServiceWorkerUserAgent(const String& userAgent) 1155 { 1156 if (m_serviceWorkerUserAgent == userAgent) 1199 void WebProcessPool::updateWorkerUserAgent(const String& userAgent) 1200 { 1201 if (m_workerUserAgent == userAgent) 1157 1202 return; 1158 m_serviceWorkerUserAgent = userAgent; 1159 for (auto& serviceWorkerProcess : serviceWorkerProcesses()) 1160 serviceWorkerProcess.setServiceWorkerUserAgent(m_serviceWorkerUserAgent); 1161 } 1162 #endif 1203 m_workerUserAgent = userAgent; 1204 for (auto& workerProcess : workerProcesses()) 1205 workerProcess.setWorkerUserAgent(m_workerUserAgent); 1206 } 1163 1207 1164 1208 void WebProcessPool::pageBeginUsingWebsiteDataStore(WebPageProxyIdentifier pageID, WebsiteDataStore& dataStore) … … 1539 1583 #if ENABLE(SERVICE_WORKER) 1540 1584 Ref protectedThis { *this }; 1541 while (serviceWorkerProcesses().computeSize()) 1542 serviceWorkerProcesses().begin()->disableServiceWorkers(); 1585 Vector<Ref<WebProcessProxy>> serviceWorkerProcesses; 1586 workerProcesses().forEach([&](auto& process) { 1587 if (process.isRunningServiceWorkers()) 1588 serviceWorkerProcesses.append(process); 1589 }); 1590 for (auto& serviceWorkerProcess : serviceWorkerProcesses) 1591 serviceWorkerProcess->disableWorkers(WebProcessProxy::WorkerType::ServiceWorker); 1543 1592 #endif 1544 1593 } … … 1768 1817 } 1769 1818 1770 #if ENABLE(SERVICE_WORKER) 1771 WeakHashSet<WebProcessProxy>& WebProcessPool::serviceWorkerProcesses() 1819 WeakHashSet<WebProcessProxy>& WebProcessPool::workerProcesses() 1772 1820 { 1773 1821 static NeverDestroyed<WeakHashSet<WebProcessProxy>> processes; 1774 1822 return processes; 1775 1823 } 1776 #endif1777 1824 1778 1825 void WebProcessPool::updateProcessAssertions() … … 1786 1833 gpuProcess->updateProcessAssertion(); 1787 1834 #endif 1788 #if ENABLE(SERVICE_WORKER) 1835 1789 1836 // Check on next run loop since the web process proxy tokens are probably being updated. 1790 1837 callOnMainRunLoop([] { 1791 for (auto& serviceWorkerProcess : serviceWorkerProcesses()) 1792 serviceWorkerProcess.updateServiceWorkerProcessAssertion(); 1838 workerProcesses().forEach([](auto& workerProcess) { 1839 #if ENABLE(SERVICE_WORKER) 1840 if (workerProcess.isRunningServiceWorkers()) 1841 workerProcess.updateWorkerProcessAssertion(WebProcessProxy::WorkerType::ServiceWorker); 1842 #endif 1843 if (workerProcess.isRunningSharedWorkers()) 1844 workerProcess.updateWorkerProcessAssertion(WebProcessProxy::WorkerType::SharedWorker); 1845 }); 1793 1846 }); 1794 #endif1795 1847 } 1796 1848 … … 1799 1851 #if ENABLE(SERVICE_WORKER) 1800 1852 // FIXME: This is inefficient. 1801 return WTF::anyOf( serviceWorkerProcesses(), [pageID](auto& process) {1853 return WTF::anyOf(workerProcesses(), [pageID](auto& process) { 1802 1854 return process.hasServiceWorkerPageProxy(pageID); 1803 1855 }); … … 2125 2177 2126 2178 #if ENABLE(SERVICE_WORKER) 2179 size_t WebProcessPool::serviceWorkerProxiesCount() const 2180 { 2181 unsigned count = 0; 2182 workerProcesses().forEach([&](auto& process) { 2183 if (process.isRunningServiceWorkers()) 2184 ++count; 2185 }); 2186 return count; 2187 } 2188 2127 2189 bool WebProcessPool::hasServiceWorkerForegroundActivityForTesting() const 2128 2190 { 2129 return WTF::anyOf( serviceWorkerProcesses(), [](auto& process) {2191 return WTF::anyOf(workerProcesses(), [](auto& process) { 2130 2192 return process.hasServiceWorkerForegroundActivityForTesting(); 2131 2193 }); … … 2134 2196 bool WebProcessPool::hasServiceWorkerBackgroundActivityForTesting() const 2135 2197 { 2136 return WTF::anyOf( serviceWorkerProcesses(), [](auto& process) {2198 return WTF::anyOf(workerProcesses(), [](auto& process) { 2137 2199 return process.hasServiceWorkerBackgroundActivityForTesting(); 2138 2200 }); -
trunk/Source/WebKit/UIProcess/WebProcessPool.h
r288935 r289247 375 375 376 376 bool isServiceWorkerPageID(WebPageProxyIdentifier) const; 377 void removeFromWorkerProcesses(WebProcessProxy&); 378 377 379 #if ENABLE(SERVICE_WORKER) 378 static void establishServiceWorkerContextConnectionToNetworkProcess(NetworkProcessProxy&, WebCore::RegistrableDomain&&, std::optional<WebCore::ScriptExecutionContextIdentifier> serviceWorkerPageIdentifier, PAL::SessionID, CompletionHandler<void()>&&); 379 void removeFromServiceWorkerProcesses(WebProcessProxy&); 380 size_t serviceWorkerProxiesCount() const { return serviceWorkerProcesses().computeSize(); } 381 void updateServiceWorkerUserAgent(const String& userAgent); 382 UserContentControllerIdentifier userContentControllerIdentifierForServiceWorkers(); 380 static void establishServiceWorkerContextConnectionToNetworkProcess(WebCore::RegistrableDomain&&, std::optional<WebCore::ScriptExecutionContextIdentifier> serviceWorkerPageIdentifier, PAL::SessionID, CompletionHandler<void()>&&); 381 size_t serviceWorkerProxiesCount() const; 382 UserContentControllerIdentifier userContentControllerIdentifierForWorkers(); 383 383 bool hasServiceWorkerForegroundActivityForTesting() const; 384 384 bool hasServiceWorkerBackgroundActivityForTesting() const; 385 385 #endif 386 386 void serviceWorkerProcessCrashed(WebProcessProxy&); 387 388 void updateWorkerUserAgent(const String& userAgent); 389 static void establishSharedWorkerContextConnectionToNetworkProcess(WebCore::RegistrableDomain&&, PAL::SessionID, CompletionHandler<void()>&&); 387 390 388 391 #if PLATFORM(COCOA) … … 619 622 HashMap<PAL::SessionID, WeakPtr<WebProcessProxy>> m_dummyProcessProxies; // Lightweight WebProcessProxy objects without backing process. 620 623 621 #if ENABLE(SERVICE_WORKER) 622 static WeakHashSet<WebProcessProxy>& serviceWorkerProcesses(); 623 bool m_waitingForWorkerContextProcessConnection { false }; 624 String m_serviceWorkerUserAgent; 625 std::optional<WebPreferencesStore> m_serviceWorkerPreferences; 626 RefPtr<WebUserContentControllerProxy> m_userContentControllerForServiceWorker; 627 #endif 624 static WeakHashSet<WebProcessProxy>& workerProcesses(); 625 626 std::optional<WebPreferencesStore> m_workerPreferences; 627 RefPtr<WebUserContentControllerProxy> m_userContentControllerForWorkers; 628 String m_workerUserAgent; 628 629 629 630 #if ENABLE(GPU_PROCESS) -
trunk/Source/WebKit/UIProcess/WebProcessProxy.cpp
r289063 r289247 60 60 #include "WebProcessProxyMessages.h" 61 61 #include "WebSWContextManagerConnectionMessages.h" 62 #include "WebSharedWorkerContextManagerConnectionMessages.h" 62 63 #include "WebUserContentControllerProxy.h" 63 64 #include "WebsiteData.h" … … 183 184 184 185 #if ENABLE(SERVICE_WORKER) 185 Ref<WebProcessProxy> WebProcessProxy::createFor ServiceWorkers(WebProcessPool& processPool, RegistrableDomain&& registrableDomain, WebsiteDataStore& websiteDataStore)186 Ref<WebProcessProxy> WebProcessProxy::createForWorkers(WorkerType workerType, WebProcessPool& processPool, RegistrableDomain&& registrableDomain, WebsiteDataStore& websiteDataStore) 186 187 { 187 188 auto proxy = adoptRef(*new WebProcessProxy(processPool, &websiteDataStore, IsPrewarmed::No, CrossOriginMode::Shared, CaptivePortalMode::Disabled)); 188 189 proxy->m_registrableDomain = WTFMove(registrableDomain); 189 proxy->enable ServiceWorkers(processPool.userContentControllerIdentifierForServiceWorkers());190 proxy->enableWorkers(workerType, processPool.userContentControllerIdentifierForWorkers()); 190 191 proxy->connect(); 191 192 return proxy; … … 996 997 callback(isWebProcessResponsive); 997 998 998 // If the web process becomes unresponsive and only runs service workers, kill it ourselves since there are no native clients to do it.999 if (isRunning ServiceWorkers() && m_pageMap.isEmpty()) {1000 WEBPROCESSPROXY_RELEASE_LOG_ERROR(PerformanceLogging, "didBecomeUnresponsive: Terminating serviceworker-only web process because it is unresponsive");1001 disable ServiceWorkers();999 // If the web process becomes unresponsive and only runs service/shared workers, kill it ourselves since there are no native clients to do it. 1000 if (isRunningWorkers() && m_pageMap.isEmpty()) { 1001 WEBPROCESSPROXY_RELEASE_LOG_ERROR(PerformanceLogging, "didBecomeUnresponsive: Terminating worker-only web process because it is unresponsive"); 1002 disableWorkers({ WorkerType::ServiceWorker, WorkerType::SharedWorker }); 1002 1003 terminate(); 1003 1004 } … … 1695 1696 if (m_registrableDomain && *m_registrableDomain != registrableDomain) { 1696 1697 #if ENABLE(SERVICE_WORKER) 1697 disableServiceWorkers(); 1698 #endif 1698 disableWorkers(WorkerType::ServiceWorker); 1699 #endif 1700 1699 1701 // Null out registrable domain since this process has now been used for several domains. 1700 1702 m_registrableDomain = WebCore::RegistrableDomain { }; … … 1873 1875 }, 0); 1874 1876 } 1875 1876 void WebProcessProxy::setServiceWorkerUserAgent(const String& userAgent) 1877 { 1878 ASSERT(m_serviceWorkerInformation); 1879 send(Messages::WebSWContextManagerConnection::SetUserAgent { userAgent }, 0); 1880 } 1881 1882 void WebProcessProxy::updateServiceWorkerPreferencesStore(const WebPreferencesStore& store) 1883 { 1884 ASSERT(m_serviceWorkerInformation); 1885 send(Messages::WebSWContextManagerConnection::UpdatePreferencesStore { store }, 0); 1886 } 1887 1888 void WebProcessProxy::updateServiceWorkerProcessAssertion() 1889 { 1890 WEBPROCESSPROXY_RELEASE_LOG(ProcessSuspension, "updateServiceWorkerProcessAssertion:"); 1891 ASSERT(m_serviceWorkerInformation); 1892 if (!m_serviceWorkerInformation) 1893 return; 1894 1895 bool shouldTakeForegroundActivity = WTF::anyOf(m_serviceWorkerInformation->clientProcesses, [&](auto& process) { 1877 #endif 1878 1879 void WebProcessProxy::setWorkerUserAgent(const String& userAgent) 1880 { 1881 #if ENABLE(SERVICE_WORKER) 1882 if (m_serviceWorkerInformation) 1883 send(Messages::WebSWContextManagerConnection::SetUserAgent { userAgent }, 0); 1884 #endif 1885 if (m_sharedWorkerInformation) 1886 send(Messages::WebSharedWorkerContextManagerConnection::SetUserAgent { userAgent }, 0); 1887 } 1888 1889 void WebProcessProxy::updateWorkerPreferencesStore(const WebPreferencesStore& store) 1890 { 1891 #if ENABLE(SERVICE_WORKER) 1892 if (m_serviceWorkerInformation) 1893 send(Messages::WebSWContextManagerConnection::UpdatePreferencesStore { store }, 0); 1894 #endif 1895 if (m_sharedWorkerInformation) 1896 send(Messages::WebSharedWorkerContextManagerConnection::UpdatePreferencesStore { store }, 0); 1897 } 1898 1899 void WebProcessProxy::updateWorkerProcessAssertion(WorkerType workerType) 1900 { 1901 auto& workerInformation = workerType == WorkerType::SharedWorker ? m_sharedWorkerInformation : m_serviceWorkerInformation; 1902 ASSERT(workerInformation); 1903 if (!workerInformation) 1904 return; 1905 1906 WEBPROCESSPROXY_RELEASE_LOG(ProcessSuspension, "updateWorkerProcessAssertion: workerType=%{public}s", workerType == WorkerType::SharedWorker ? "shared" : "service"); 1907 1908 // FIXME: Clients do not properly get populated in m_sharedWorkerInformation so we currently take an assertion no matter what. 1909 if (workerType == WorkerType::SharedWorker) { 1910 if (!ProcessThrottler::isValidForegroundActivity(workerInformation->activity)) 1911 workerInformation->activity = m_throttler.foregroundActivity("Worker for foreground view(s)"_s); 1912 return; 1913 } 1914 1915 bool shouldTakeForegroundActivity = WTF::anyOf(workerInformation->clientProcesses, [&](auto& process) { 1896 1916 return &process != this && !!process.m_foregroundToken; 1897 1917 }); 1898 1918 if (shouldTakeForegroundActivity) { 1899 if (!ProcessThrottler::isValidForegroundActivity( m_serviceWorkerInformation->activity))1900 m_serviceWorkerInformation->activity = m_throttler.foregroundActivity("ServiceWorker for foreground view(s)"_s);1901 return; 1902 } 1903 1904 bool shouldTakeBackgroundActivity = WTF::anyOf( m_serviceWorkerInformation->clientProcesses, [&](auto& process) {1919 if (!ProcessThrottler::isValidForegroundActivity(workerInformation->activity)) 1920 workerInformation->activity = m_throttler.foregroundActivity("Worker for foreground view(s)"_s); 1921 return; 1922 } 1923 1924 bool shouldTakeBackgroundActivity = WTF::anyOf(workerInformation->clientProcesses, [&](auto& process) { 1905 1925 return &process != this && !!process.m_backgroundToken; 1906 1926 }); 1907 1927 if (shouldTakeBackgroundActivity) { 1908 if (!ProcessThrottler::isValidBackgroundActivity( m_serviceWorkerInformation->activity))1909 m_serviceWorkerInformation->activity = m_throttler.backgroundActivity("ServiceWorker for background view(s)"_s);1910 return; 1911 } 1912 1913 if ( m_hasServiceWorkerBackgroundProcessing) {1928 if (!ProcessThrottler::isValidBackgroundActivity(workerInformation->activity)) 1929 workerInformation->activity = m_throttler.backgroundActivity("Worker for background view(s)"_s); 1930 return; 1931 } 1932 1933 if (workerType == WorkerType::ServiceWorker && m_hasServiceWorkerBackgroundProcessing) { 1914 1934 WEBPROCESSPROXY_RELEASE_LOG(ProcessSuspension, "Service Worker for background processing"); 1915 if (!ProcessThrottler::isValidBackgroundActivity(m_serviceWorkerInformation->activity)) 1916 m_serviceWorkerInformation->activity = m_throttler.backgroundActivity("Service Worker for background processing"_s); 1917 return; 1918 } 1919 1920 m_serviceWorkerInformation->activity = nullptr; 1921 } 1935 if (!ProcessThrottler::isValidBackgroundActivity(workerInformation->activity)) 1936 workerInformation->activity = m_throttler.backgroundActivity("Service Worker for background processing"_s); 1937 return; 1938 } 1939 1940 workerInformation->activity = nullptr; 1941 } 1942 1943 void WebProcessProxy::establishSharedWorkerContext(const WebPreferencesStore& store, const RegistrableDomain& registrableDomain, CompletionHandler<void()>&& completionHandler) 1944 { 1945 WEBPROCESSPROXY_RELEASE_LOG(SharedWorker, "establishSharedWorkerContext: Started"); 1946 markProcessAsRecentlyUsed(); 1947 sendWithAsyncReply(Messages::WebProcess::EstablishSharedWorkerContextConnectionToNetworkProcess { processPool().defaultPageGroup().pageGroupID(), m_sharedWorkerInformation->remoteWorkerPageProxyID, m_sharedWorkerInformation->remoteWorkerPageID, store, registrableDomain, m_sharedWorkerInformation->initializationData }, [this, weakThis = WeakPtr { *this }, completionHandler = WTFMove(completionHandler)]() mutable { 1948 if (weakThis) 1949 WEBPROCESSPROXY_RELEASE_LOG(SharedWorker, "establishSharedWorkerContext: Finished"); 1950 completionHandler(); 1951 }, 0); 1952 } 1953 1954 #if ENABLE(SERVICE_WORKER) 1922 1955 1923 1956 void WebProcessProxy::registerServiceWorkerClientProcess(WebProcessProxy& proxy) … … 1928 1961 WEBPROCESSPROXY_RELEASE_LOG(ServiceWorker, "registerServiceWorkerClientProcess: clientProcess=%p, clientPID=%d", &proxy, proxy.processIdentifier()); 1929 1962 m_serviceWorkerInformation->clientProcesses.add(proxy); 1930 update ServiceWorkerProcessAssertion();1963 updateWorkerProcessAssertion(WorkerType::ServiceWorker); 1931 1964 } 1932 1965 … … 1938 1971 WEBPROCESSPROXY_RELEASE_LOG(ServiceWorker, "unregisterServiceWorkerClientProcess: clientProcess=%p, clientPID=%d", &proxy, proxy.processIdentifier()); 1939 1972 m_serviceWorkerInformation->clientProcesses.remove(proxy); 1940 update ServiceWorkerProcessAssertion();1973 updateWorkerProcessAssertion(WorkerType::ServiceWorker); 1941 1974 } 1942 1975 … … 1958 1991 WEBPROCESSPROXY_RELEASE_LOG(ProcessSuspension, "startServiceWorkerBackgroundProcessing"); 1959 1992 m_hasServiceWorkerBackgroundProcessing = true; 1960 update ServiceWorkerProcessAssertion();1993 updateWorkerProcessAssertion(WorkerType::ServiceWorker); 1961 1994 } 1962 1995 … … 1968 2001 WEBPROCESSPROXY_RELEASE_LOG(ProcessSuspension, "endServiceWorkerBackgroundProcessing"); 1969 2002 m_hasServiceWorkerBackgroundProcessing = false; 1970 update ServiceWorkerProcessAssertion();2003 updateWorkerProcessAssertion(WorkerType::ServiceWorker); 1971 2004 } 1972 2005 #endif // ENABLE(SERVICE_WORKER) 1973 2006 1974 void WebProcessProxy::disableServiceWorkers() 1975 { 1976 if (!m_serviceWorkerInformation) 1977 return; 1978 1979 WEBPROCESSPROXY_RELEASE_LOG(ServiceWorker, "disableServiceWorkers:"); 1980 m_serviceWorkerInformation = { }; 2007 void WebProcessProxy::disableWorkers(OptionSet<WorkerType> workerType) 2008 { 2009 ASSERT(!workerType.isEmpty()); 2010 2011 bool didChange = false; 2012 if (workerType.contains(WorkerType::ServiceWorker) && m_serviceWorkerInformation) { 2013 m_serviceWorkerInformation = { }; 2014 didChange = true; 2015 } 2016 if (workerType.contains(WorkerType::SharedWorker) && m_sharedWorkerInformation) { 2017 m_sharedWorkerInformation = { }; 2018 didChange = true; 2019 } 2020 if (!didChange) 2021 return; 2022 2023 WEBPROCESSPROXY_RELEASE_LOG(Process, "disableWorkers: Disabling workers (SharedWorkers=%d, ServiceWorkers=%d)", workerType.contains(WorkerType::SharedWorker), workerType.contains(WorkerType::ServiceWorker)); 2024 1981 2025 updateBackgroundResponsivenessTimer(); 1982 2026 2027 if (!isRunningWorkers()) 2028 processPool().removeFromWorkerProcesses(*this); 2029 1983 2030 #if ENABLE(SERVICE_WORKER) 1984 processPool().removeFromServiceWorkerProcesses(*this); 1985 send(Messages::WebSWContextManagerConnection::Close { }, 0); 1986 #endif 2031 if (workerType.contains(WorkerType::ServiceWorker)) 2032 send(Messages::WebSWContextManagerConnection::Close { }, 0); 2033 #endif 2034 if (workerType.contains(WorkerType::SharedWorker)) 2035 send(Messages::WebSharedWorkerContextManagerConnection::Close { }, 0); 1987 2036 1988 2037 maybeShutDown(); … … 2005 2054 #endif 2006 2055 2007 void WebProcessProxy::enableServiceWorkers(const UserContentControllerIdentifier& userContentControllerIdentifier) 2008 { 2009 ASSERT(!m_serviceWorkerInformation); 2010 WEBPROCESSPROXY_RELEASE_LOG(ServiceWorker, "enableServiceWorkers:"); 2011 m_serviceWorkerInformation = RemoteWorkerInformation { 2056 void WebProcessProxy::enableWorkers(WorkerType workerType, const UserContentControllerIdentifier& userContentControllerIdentifier) 2057 { 2058 WEBPROCESSPROXY_RELEASE_LOG(ServiceWorker, "enableWorkers: workerType=%u", static_cast<unsigned>(workerType)); 2059 auto& workerInformation = workerType == WorkerType::SharedWorker ? m_sharedWorkerInformation : m_serviceWorkerInformation; 2060 ASSERT(!workerInformation); 2061 2062 workerInformation = RemoteWorkerInformation { 2012 2063 WebPageProxyIdentifier::generate(), 2013 2064 PageIdentifier::generate(), … … 2022 2073 }; 2023 2074 updateBackgroundResponsivenessTimer(); 2024 #if ENABLE(SERVICE_WORKER) 2025 updateServiceWorkerProcessAssertion(); 2026 #endif 2075 2076 updateWorkerProcessAssertion(workerType); 2027 2077 } 2028 2078 -
trunk/Source/WebKit/UIProcess/WebProcessProxy.h
r289063 r289247 137 137 enum class ShouldLaunchProcess : bool { No, Yes }; 138 138 enum class CaptivePortalMode : bool { Disabled, Enabled }; 139 enum class WorkerType : uint32_t { 140 ServiceWorker = 1 << 0, 141 SharedWorker = 1 << 1 142 }; 139 143 140 144 static Ref<WebProcessProxy> create(WebProcessPool&, WebsiteDataStore*, CaptivePortalMode, IsPrewarmed, WebCore::CrossOriginMode = WebCore::CrossOriginMode::Shared, ShouldLaunchProcess = ShouldLaunchProcess::Yes); 141 static Ref<WebProcessProxy> createFor ServiceWorkers(WebProcessPool&, WebCore::RegistrableDomain&&, WebsiteDataStore&);145 static Ref<WebProcessProxy> createForWorkers(WorkerType, WebProcessPool&, WebCore::RegistrableDomain&&, WebsiteDataStore&); 142 146 143 147 ~WebProcessProxy(); … … 162 166 bool isInProcessCache() const { return m_isInProcessCache; } 163 167 164 void enable ServiceWorkers(const UserContentControllerIdentifier&);165 void disable ServiceWorkers();168 void enableWorkers(WorkerType, const UserContentControllerIdentifier&); 169 void disableWorkers(OptionSet<WorkerType>); 166 170 167 171 WebsiteDataStore& websiteDataStore() const { ASSERT(m_websiteDataStore); return *m_websiteDataStore; } … … 195 199 bool isRunningServiceWorkers() const { return !!m_serviceWorkerInformation; } 196 200 bool isStandaloneServiceWorkerProcess() const { return isRunningServiceWorkers() && !pageCount(); } 201 bool isRunningSharedWorkers() const { return !!m_sharedWorkerInformation; } 202 bool isStandaloneSharedWorkerProcess() const { return isRunningSharedWorkers() && !pageCount(); } 203 bool isRunningWorkers() const { return m_sharedWorkerInformation || m_serviceWorkerInformation; } 197 204 198 205 bool isDummyProcessProxy() const; … … 360 367 void updateAudibleMediaAssertions(); 361 368 369 void setWorkerUserAgent(const String&); 370 void updateWorkerPreferencesStore(const WebPreferencesStore&); 371 void establishSharedWorkerContext(const WebPreferencesStore&, const WebCore::RegistrableDomain&, CompletionHandler<void()>&&); 372 void updateWorkerProcessAssertion(WorkerType); 362 373 #if ENABLE(SERVICE_WORKER) 363 374 void establishServiceWorkerContext(const WebPreferencesStore&, const WebCore::RegistrableDomain&, std::optional<WebCore::ScriptExecutionContextIdentifier> serviceWorkerPageIdentifier, CompletionHandler<void()>&&); 364 void setServiceWorkerUserAgent(const String&);365 void updateServiceWorkerPreferencesStore(const WebPreferencesStore&);366 375 bool hasServiceWorkerPageProxy(WebPageProxyIdentifier pageProxyID) { return m_serviceWorkerInformation && m_serviceWorkerInformation->remoteWorkerPageProxyID == pageProxyID; } 367 void updateServiceWorkerProcessAssertion();368 376 void registerServiceWorkerClientProcess(WebProcessProxy&); 369 377 void unregisterServiceWorkerClientProcess(WebProcessProxy&); … … 657 665 }; 658 666 std::optional<RemoteWorkerInformation> m_serviceWorkerInformation; 667 std::optional<RemoteWorkerInformation> m_sharedWorkerInformation; 659 668 bool m_hasServiceWorkerBackgroundProcessing { false }; 660 669 -
trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj
r289245 r289247 881 881 461CCCA5231485A700B659B9 /* UIRemoteObjectRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 463236852314833F00A48FA7 /* UIRemoteObjectRegistry.h */; }; 882 882 461CCCA6231485AA00B659B9 /* WebRemoteObjectRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 46323683231481EF00A48FA7 /* WebRemoteObjectRegistry.h */; }; 883 461E1BF2279A0116006AF53B /* WebSharedWorkerContextManagerConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 461E1BEF279A010F006AF53B /* WebSharedWorkerContextManagerConnection.h */; }; 883 884 463FD4801EB9459600A2982C /* WKProcessTerminationReason.h in Headers */ = {isa = PBXBuildFile; fileRef = 463FD47F1EB9458400A2982C /* WKProcessTerminationReason.h */; settings = {ATTRIBUTES = (Private, ); }; }; 884 885 463FD4821EB94EC000A2982C /* ProcessTerminationReason.h in Headers */ = {isa = PBXBuildFile; fileRef = 463FD4811EB94EAD00A2982C /* ProcessTerminationReason.h */; }; 886 4656F7BD27ACAA8D00CB3D7C /* WebSharedWorker.h in Headers */ = {isa = PBXBuildFile; fileRef = 4656F7BC27ACAA8100CB3D7C /* WebSharedWorker.h */; }; 885 887 4659F25F275FF6B200BBB369 /* CaptivePortalModeObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 4659F25E275FF6B200BBB369 /* CaptivePortalModeObserver.h */; }; 886 888 465F4E06230B2E95003CEDB7 /* StorageNamespaceIdentifier.h in Headers */ = {isa = PBXBuildFile; fileRef = 465F4E05230B2E7C003CEDB7 /* StorageNamespaceIdentifier.h */; }; … … 901 903 46C5B7CE27AADDD3000C5B47 /* RemoteWorkerFrameLoaderClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 46C5B7CD27AADDBE000C5B47 /* RemoteWorkerFrameLoaderClient.h */; }; 902 904 46C5B7CF27AADDD6000C5B47 /* RemoteWorkerLibWebRTCProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 46C5B7CB27AADDBE000C5B47 /* RemoteWorkerLibWebRTCProvider.h */; }; 905 46C916AA2799D0A2001A4E7C /* WebSharedWorkerServer.h in Headers */ = {isa = PBXBuildFile; fileRef = 46C916A92799D09D001A4E7C /* WebSharedWorkerServer.h */; }; 903 906 46CE3B1123D8C8490016A96A /* WebBackForwardListCounts.h in Headers */ = {isa = PBXBuildFile; fileRef = 46CE3B1023D8C83D0016A96A /* WebBackForwardListCounts.h */; }; 907 46D48FCE2799D7E1007D2014 /* WebSharedWorkerServerToContextConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 46D48FCD2799D7DE007D2014 /* WebSharedWorkerServerToContextConnection.h */; }; 904 908 46DF063C1F3905F8001980BB /* NetworkCORSPreflightChecker.h in Headers */ = {isa = PBXBuildFile; fileRef = 46DF063A1F3905E5001980BB /* NetworkCORSPreflightChecker.h */; }; 905 909 46EE2849269E04AC00DD48AB /* WebBroadcastChannelRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 46EE2848269E049B00DD48AB /* WebBroadcastChannelRegistry.h */; }; 906 910 46EE284D269E052500DD48AB /* NetworkBroadcastChannelRegistry.h in Headers */ = {isa = PBXBuildFile; fileRef = 46EE284C269E051700DD48AB /* NetworkBroadcastChannelRegistry.h */; }; 911 46EE3E8B2763FD2F0060C70F /* WebSharedWorkerServerConnection.h in Headers */ = {isa = PBXBuildFile; fileRef = 468386672763FAB100CF9182 /* WebSharedWorkerServerConnection.h */; }; 907 912 46F38E8C2416E6730059375A /* RunningBoardServicesSPI.h in Headers */ = {isa = PBXBuildFile; fileRef = 46F38E8B2416E66D0059375A /* RunningBoardServicesSPI.h */; }; 908 913 46F9B26323526EF3006FE5FA /* WebBackForwardCacheEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 46F9B26223526ED0006FE5FA /* WebBackForwardCacheEntry.h */; }; … … 4224 4229 460F488D1F996F6C00CF4B87 /* WebSWContextManagerConnectionMessageReceiver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = WebSWContextManagerConnectionMessageReceiver.cpp; path = DerivedSources/WebKit/WebSWContextManagerConnectionMessageReceiver.cpp; sourceTree = BUILT_PRODUCTS_DIR; }; 4225 4230 460F488E1F996F6C00CF4B87 /* WebSWContextManagerConnectionMessages.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebSWContextManagerConnectionMessages.h; path = DerivedSources/WebKit/WebSWContextManagerConnectionMessages.h; sourceTree = BUILT_PRODUCTS_DIR; }; 4231 461E1BEC279A010E006AF53B /* WebSharedWorkerContextManagerConnection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebSharedWorkerContextManagerConnection.cpp; sourceTree = "<group>"; }; 4232 461E1BEF279A010F006AF53B /* WebSharedWorkerContextManagerConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebSharedWorkerContextManagerConnection.h; sourceTree = "<group>"; }; 4233 461E1BF0279A010F006AF53B /* WebSharedWorkerContextManagerConnection.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebSharedWorkerContextManagerConnection.messages.in; sourceTree = "<group>"; }; 4226 4234 462107D71F38DBD300DD7810 /* PingLoad.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PingLoad.cpp; sourceTree = "<group>"; }; 4227 4235 46323683231481EF00A48FA7 /* WebRemoteObjectRegistry.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebRemoteObjectRegistry.h; sourceTree = "<group>"; }; … … 4234 4242 4651ECE622178A850067EB95 /* WebProcessCacheCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebProcessCacheCocoa.mm; sourceTree = "<group>"; }; 4235 4243 465250E51ECF52CD002025CB /* WebKit2InitializeCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebKit2InitializeCocoa.mm; sourceTree = "<group>"; }; 4244 4656F7BA27ACAA8000CB3D7C /* WebSharedWorkerServerToContextConnection.messages.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = WebSharedWorkerServerToContextConnection.messages.in; sourceTree = "<group>"; }; 4245 4656F7BB27ACAA8100CB3D7C /* WebSharedWorker.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = WebSharedWorker.cpp; sourceTree = "<group>"; }; 4246 4656F7BC27ACAA8100CB3D7C /* WebSharedWorker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebSharedWorker.h; sourceTree = "<group>"; }; 4236 4247 4659F25E275FF6B200BBB369 /* CaptivePortalModeObserver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CaptivePortalModeObserver.h; sourceTree = "<group>"; }; 4237 4248 465F4E02230759D5003CEDB7 /* StorageAreaIdentifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StorageAreaIdentifier.h; sourceTree = "<group>"; }; … … 4255 4266 4683569A21E81CC7006E27A3 /* ProvisionalPageProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProvisionalPageProxy.h; sourceTree = "<group>"; }; 4256 4267 4683569B21E81CC7006E27A3 /* ProvisionalPageProxy.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProvisionalPageProxy.cpp; sourceTree = "<group>"; }; 4268 468386672763FAB100CF9182 /* WebSharedWorkerServerConnection.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebSharedWorkerServerConnection.h; sourceTree = "<group>"; }; 4269 468386682763FAB100CF9182 /* WebSharedWorkerServerConnection.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = WebSharedWorkerServerConnection.cpp; sourceTree = "<group>"; }; 4257 4270 4689B90F2756D1430007C651 /* RemoteWebLockRegistry.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteWebLockRegistry.h; sourceTree = "<group>"; }; 4258 4271 4689B9102756D1430007C651 /* RemoteWebLockRegistry.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteWebLockRegistry.cpp; sourceTree = "<group>"; }; 4272 46943DCB2763F834004B610E /* WebSharedWorkerObjectConnection.messages.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = WebSharedWorkerObjectConnection.messages.in; sourceTree = "<group>"; }; 4259 4273 469DE802273ECC5D00930276 /* ProcessLauncherCocoa.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ProcessLauncherCocoa.mm; sourceTree = "<group>"; }; 4260 4274 46A2B6061E5675A200C3DEDA /* BackgroundProcessResponsivenessTimer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BackgroundProcessResponsivenessTimer.cpp; sourceTree = "<group>"; }; … … 4275 4289 46C5B7CC27AADDBE000C5B47 /* RemoteWorkerFrameLoaderClient.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = RemoteWorkerFrameLoaderClient.cpp; sourceTree = "<group>"; }; 4276 4290 46C5B7CD27AADDBE000C5B47 /* RemoteWorkerFrameLoaderClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RemoteWorkerFrameLoaderClient.h; sourceTree = "<group>"; }; 4291 46C916A82799D09D001A4E7C /* WebSharedWorkerServer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = WebSharedWorkerServer.cpp; sourceTree = "<group>"; }; 4292 46C916A92799D09D001A4E7C /* WebSharedWorkerServer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebSharedWorkerServer.h; sourceTree = "<group>"; }; 4277 4293 46CE3B1023D8C83D0016A96A /* WebBackForwardListCounts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebBackForwardListCounts.h; sourceTree = "<group>"; }; 4294 46D48FCC2799D7DD007D2014 /* WebSharedWorkerServerToContextConnection.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = WebSharedWorkerServerToContextConnection.cpp; sourceTree = "<group>"; }; 4295 46D48FCD2799D7DE007D2014 /* WebSharedWorkerServerToContextConnection.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WebSharedWorkerServerToContextConnection.h; sourceTree = "<group>"; }; 4278 4296 46DF06391F3905E5001980BB /* NetworkCORSPreflightChecker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkCORSPreflightChecker.cpp; sourceTree = "<group>"; }; 4279 4297 46DF063A1F3905E5001980BB /* NetworkCORSPreflightChecker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkCORSPreflightChecker.h; sourceTree = "<group>"; }; … … 4285 4303 46EE284B269E051700DD48AB /* NetworkBroadcastChannelRegistry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetworkBroadcastChannelRegistry.cpp; sourceTree = "<group>"; }; 4286 4304 46EE284C269E051700DD48AB /* NetworkBroadcastChannelRegistry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetworkBroadcastChannelRegistry.h; sourceTree = "<group>"; }; 4305 46EE3E8A2763FD2A0060C70F /* WebSharedWorkerServerConnection.messages.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = WebSharedWorkerServerConnection.messages.in; sourceTree = "<group>"; }; 4287 4306 46F38E8B2416E66D0059375A /* RunningBoardServicesSPI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RunningBoardServicesSPI.h; sourceTree = "<group>"; }; 4288 4307 46F9B26223526ED0006FE5FA /* WebBackForwardCacheEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebBackForwardCacheEntry.h; sourceTree = "<group>"; }; … … 9296 9315 sourceTree = "<group>"; 9297 9316 }; 9317 468386652763FA1B00CF9182 /* SharedWorker */ = { 9318 isa = PBXGroup; 9319 children = ( 9320 4656F7BB27ACAA8100CB3D7C /* WebSharedWorker.cpp */, 9321 4656F7BC27ACAA8100CB3D7C /* WebSharedWorker.h */, 9322 46C916A82799D09D001A4E7C /* WebSharedWorkerServer.cpp */, 9323 46C916A92799D09D001A4E7C /* WebSharedWorkerServer.h */, 9324 468386682763FAB100CF9182 /* WebSharedWorkerServerConnection.cpp */, 9325 468386672763FAB100CF9182 /* WebSharedWorkerServerConnection.h */, 9326 46EE3E8A2763FD2A0060C70F /* WebSharedWorkerServerConnection.messages.in */, 9327 46D48FCC2799D7DD007D2014 /* WebSharedWorkerServerToContextConnection.cpp */, 9328 46D48FCD2799D7DE007D2014 /* WebSharedWorkerServerToContextConnection.h */, 9329 4656F7BA27ACAA8000CB3D7C /* WebSharedWorkerServerToContextConnection.messages.in */, 9330 ); 9331 path = SharedWorker; 9332 sourceTree = "<group>"; 9333 }; 9298 9334 469DE801273ECC5D00930276 /* cocoa */ = { 9299 9335 isa = PBXGroup; … … 9360 9396 5C01BC3526D46AD400FEB42F /* PrivateClickMeasurement */, 9361 9397 93BA04D92151ADCD007F455F /* ServiceWorker */, 9398 468386652763FA1B00CF9182 /* SharedWorker */, 9362 9399 93085DC226E1BB65000EC6A7 /* storage */, 9363 9400 413075971DE84ED70039EC69 /* webrtc */, … … 9462 9499 51BEB6291F3A5ACD005029B9 /* WebServiceWorkerProvider.cpp */, 9463 9500 51BEB62A1F3A5ACD005029B9 /* WebServiceWorkerProvider.h */, 9501 461E1BEC279A010E006AF53B /* WebSharedWorkerContextManagerConnection.cpp */, 9502 461E1BEF279A010F006AF53B /* WebSharedWorkerContextManagerConnection.h */, 9503 461E1BF0279A010F006AF53B /* WebSharedWorkerContextManagerConnection.messages.in */, 9464 9504 4668A0BB27AB604000C720BC /* WebSharedWorkerObjectConnection.cpp */, 9465 9505 4668A0B827AB603F00C720BC /* WebSharedWorkerObjectConnection.h */, 9506 46943DCB2763F834004B610E /* WebSharedWorkerObjectConnection.messages.in */, 9466 9507 4668A0B927AB603F00C720BC /* WebSharedWorkerProvider.cpp */, 9467 9508 4668A0BA27AB604000C720BC /* WebSharedWorkerProvider.h */, … … 13659 13700 D3B9484911FF4B6500032B39 /* WebSearchPopupMenu.h in Headers */, 13660 13701 51BEB62C1F3A5AD7005029B9 /* WebServiceWorkerProvider.h in Headers */, 13702 4656F7BD27ACAA8D00CB3D7C /* WebSharedWorker.h in Headers */, 13703 461E1BF2279A0116006AF53B /* WebSharedWorkerContextManagerConnection.h in Headers */, 13661 13704 4668A0BD27AB605600C720BC /* WebSharedWorkerObjectConnection.h in Headers */, 13662 13705 4668A0BC27AB605000C720BC /* WebSharedWorkerProvider.h in Headers */, 13706 46C916AA2799D0A2001A4E7C /* WebSharedWorkerServer.h in Headers */, 13707 46EE3E8B2763FD2F0060C70F /* WebSharedWorkerServerConnection.h in Headers */, 13708 46D48FCE2799D7E1007D2014 /* WebSharedWorkerServerToContextConnection.h in Headers */, 13663 13709 5C8DD3801FE4521600F2A556 /* WebsiteAutoplayPolicy.h in Headers */, 13664 13710 1A4832D71A9CDF96008B4DFE /* WebsiteData.h in Headers */, -
trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.cpp
r289054 r289247 58 58 #include "WebSWContextManagerConnectionMessages.h" 59 59 #include "WebServiceWorkerProvider.h" 60 #include "WebSharedWorkerContextManagerConnection.h" 61 #include "WebSharedWorkerContextManagerConnectionMessages.h" 60 62 #include "WebSharedWorkerObjectConnection.h" 63 #include "WebSharedWorkerObjectConnectionMessages.h" 61 64 #include "WebSocketChannel.h" 62 65 #include "WebSocketChannelMessages.h" … … 175 178 } 176 179 #endif 180 if (decoder.messageReceiverName() == Messages::WebSharedWorkerObjectConnection::messageReceiverName()) { 181 sharedWorkerConnection().didReceiveMessage(connection, decoder); 182 return; 183 } 184 if (decoder.messageReceiverName() == Messages::WebSharedWorkerContextManagerConnection::messageReceiverName()) { 185 ASSERT(SharedWorkerContextManager::singleton().connection()); 186 if (auto* contextManagerConnection = SharedWorkerContextManager::singleton().connection()) 187 static_cast<WebSharedWorkerContextManagerConnection&>(*contextManagerConnection).didReceiveMessage(connection, decoder); 188 return; 189 } 177 190 178 191 #if ENABLE(APPLE_PAY_REMOTE_UI) -
trunk/Source/WebKit/WebProcess/Network/NetworkProcessConnection.h
r289054 r289247 49 49 50 50 class WebIDBConnectionToServer; 51 class WebSharedWorkerObjectConnection; 51 52 class WebSWClientConnection; 52 53 class WebSharedWorkerObjectConnection; -
trunk/Source/WebKit/WebProcess/Storage/WebSharedWorkerObjectConnection.cpp
r289054 r289247 27 27 #include "WebSharedWorkerObjectConnection.h" 28 28 29 #include "Logging.h" 29 30 #include "NetworkProcessConnection.h" 30 31 #include "WebProcess.h" 31 #include <WebCore/SharedWorkerManager.h> 32 #include "WebSharedWorkerServerConnectionMessages.h" 33 #include <WebCore/ProcessIdentifier.h> 34 #include <WebCore/SharedWorkerKey.h> 35 #include <WebCore/WorkerOptions.h> 32 36 33 37 namespace WebKit { 34 38 35 WebSharedWorkerObjectConnection::WebSharedWorkerObjectConnection() = default; 39 #define CONNECTION_RELEASE_LOG(fmt, ...) RELEASE_LOG(SharedWorker, "%p - [webProcessIdentifier=%" PRIu64 "] WebSharedWorkerObjectConnection::" fmt, this, WebCore::Process::identifier().toUInt64(), ##__VA_ARGS__) 40 41 WebSharedWorkerObjectConnection::WebSharedWorkerObjectConnection() 42 { 43 CONNECTION_RELEASE_LOG("WebSharedWorkerObjectConnection:"); 44 } 45 46 WebSharedWorkerObjectConnection::~WebSharedWorkerObjectConnection() 47 { 48 CONNECTION_RELEASE_LOG("~WebSharedWorkerObjectConnection:"); 49 } 36 50 37 51 IPC::Connection* WebSharedWorkerObjectConnection::messageSenderConnection() const … … 40 54 } 41 55 42 void WebSharedWorkerObjectConnection::requestSharedWorker(const URL& url, WebCore::SharedWorker& sharedWorker, WebCore::TransferredMessagePort&& port, WebCore::WorkerOptions&& workerOptions)56 void WebSharedWorkerObjectConnection::requestSharedWorker(const WebCore::SharedWorkerKey& sharedWorkerKey, WebCore::SharedWorkerObjectIdentifier sharedWorkerObjectIdentifier, WebCore::TransferredMessagePort&& port, const WebCore::WorkerOptions& workerOptions) 43 57 { 44 // FIXME: Should send IPC to the network process.45 WebCore::SharedWorkerManager::singleton().connect(url, sharedWorker, WTFMove(port), WTFMove(workerOptions));58 CONNECTION_RELEASE_LOG("requestSharedWorker: sharedWorkerObjectIdentifier=%{public}s", sharedWorkerObjectIdentifier.toString().utf8().data()); 59 send(Messages::WebSharedWorkerServerConnection::RequestSharedWorker { sharedWorkerKey, sharedWorkerObjectIdentifier, WTFMove(port), workerOptions }); 46 60 } 47 61 62 void WebSharedWorkerObjectConnection::sharedWorkerObjectIsGoingAway(const WebCore::SharedWorkerKey& sharedWorkerKey, WebCore::SharedWorkerObjectIdentifier sharedWorkerObjectIdentifier) 63 { 64 CONNECTION_RELEASE_LOG("sharedWorkerObjectIsGoingAway: sharedWorkerObjectIdentifier=%{public}s", sharedWorkerObjectIdentifier.toString().utf8().data()); 65 send(Messages::WebSharedWorkerServerConnection::SharedWorkerObjectIsGoingAway { sharedWorkerKey, sharedWorkerObjectIdentifier }); 66 } 67 68 #undef CONNECTION_RELEASE_LOG 69 48 70 } // namespace WebKit -
trunk/Source/WebKit/WebProcess/Storage/WebSharedWorkerObjectConnection.h
r289054 r289247 26 26 #pragma once 27 27 28 #include "MessageReceiver.h" 28 29 #include "MessageSender.h" 29 30 #include <WebCore/SharedWorkerObjectConnection.h> … … 31 32 namespace WebKit { 32 33 33 class WebSharedWorkerObjectConnection final : public WebCore::SharedWorkerObjectConnection, private IPC::MessageSender {34 class WebSharedWorkerObjectConnection final : public WebCore::SharedWorkerObjectConnection, private IPC::MessageSender, public IPC::MessageReceiver { 34 35 public: 35 36 static Ref<WebSharedWorkerObjectConnection> create() { return adoptRef(*new WebSharedWorkerObjectConnection); } 37 ~WebSharedWorkerObjectConnection(); 38 39 void didReceiveMessage(IPC::Connection&, IPC::Decoder&) final; 36 40 37 41 private: … … 39 43 40 44 // WebCore::SharedWorkerObjectConnection. 41 void requestSharedWorker(const URL&, WebCore::SharedWorker&, WebCore::TransferredMessagePort&&, WebCore::WorkerOptions&&) final; 45 void requestSharedWorker(const WebCore::SharedWorkerKey&, WebCore::SharedWorkerObjectIdentifier, WebCore::TransferredMessagePort&&, const WebCore::WorkerOptions&) final; 46 void sharedWorkerObjectIsGoingAway(const WebCore::SharedWorkerKey&, WebCore::SharedWorkerObjectIdentifier) final; 42 47 43 48 // IPC::MessageSender. -
trunk/Source/WebKit/WebProcess/WebProcess.cpp
r289063 r289247 85 85 #include "WebSWContextManagerConnectionMessages.h" 86 86 #include "WebServiceWorkerProvider.h" 87 #include "WebSharedWorkerContextManagerConnection.h" 88 #include "WebSharedWorkerContextManagerConnectionMessages.h" 87 89 #include "WebSharedWorkerProvider.h" 88 90 #include "WebSocketStream.h" … … 135 137 #include <WebCore/ServiceWorkerContextData.h> 136 138 #include <WebCore/Settings.h> 139 #include <WebCore/SharedWorkerContextManager.h> 137 140 #include <WebCore/UserGestureIndicator.h> 138 141 #include <pal/Logging.h> … … 905 908 906 909 #if ENABLE(SERVICE_WORKER) 907 // FIXME: Remove?908 910 if (decoder.messageReceiverName() == Messages::WebSWContextManagerConnection::messageReceiverName()) { 909 911 ASSERT(SWContextManager::singleton().connection()); … … 913 915 } 914 916 #endif 917 918 if (decoder.messageReceiverName() == Messages::WebSharedWorkerContextManagerConnection::messageReceiverName()) { 919 ASSERT(SharedWorkerContextManager::singleton().connection()); 920 if (auto* contextManagerConnection = SharedWorkerContextManager::singleton().connection()) 921 static_cast<WebSharedWorkerContextManagerConnection&>(*contextManagerConnection).didReceiveMessage(connection, decoder); 922 return; 923 } 915 924 916 925 LOG_ERROR("Unhandled web process message '%s' (destination: %" PRIu64 " pid: %d)", description(decoder.messageName()), decoder.destinationID(), static_cast<int>(getCurrentProcessID())); … … 1920 1929 } 1921 1930 1931 void WebProcess::establishSharedWorkerContextConnectionToNetworkProcess(PageGroupIdentifier pageGroupID, WebPageProxyIdentifier webPageProxyID, PageIdentifier pageID, const WebPreferencesStore& store, RegistrableDomain&& registrableDomain, RemoteWorkerInitializationData&& initializationData, CompletionHandler<void()>&& completionHandler) 1932 { 1933 // We are in the Shared Worker context process and the call below establishes our connection to the Network Process 1934 // by calling ensureNetworkProcessConnection. SharedWorkerContextManager needs to use the same underlying IPC::Connection as the 1935 // NetworkProcessConnection for synchronization purposes. 1936 auto& ipcConnection = ensureNetworkProcessConnection().connection(); 1937 SharedWorkerContextManager::singleton().setConnection(makeUnique<WebSharedWorkerContextManagerConnection>(ipcConnection, WTFMove(registrableDomain), pageGroupID, webPageProxyID, pageID, store, WTFMove(initializationData))); 1938 SharedWorkerContextManager::singleton().connection()->establishConnection(WTFMove(completionHandler)); 1939 } 1940 1922 1941 #if ENABLE(SERVICE_WORKER) 1923 1942 void WebProcess::establishServiceWorkerContextConnectionToNetworkProcess(PageGroupIdentifier pageGroupID, WebPageProxyIdentifier webPageProxyID, PageIdentifier pageID, const WebPreferencesStore& store, RegistrableDomain&& registrableDomain, std::optional<ScriptExecutionContextIdentifier> serviceWorkerPageIdentifier, RemoteWorkerInitializationData&& initializationData, CompletionHandler<void()>&& completionHandler) -
trunk/Source/WebKit/WebProcess/WebProcess.h
r289134 r289247 475 475 #endif 476 476 477 void establishSharedWorkerContextConnectionToNetworkProcess(PageGroupIdentifier, WebPageProxyIdentifier, WebCore::PageIdentifier, const WebPreferencesStore&, WebCore::RegistrableDomain&&, RemoteWorkerInitializationData&&, CompletionHandler<void()>&&); 477 478 #if ENABLE(SERVICE_WORKER) 478 479 void establishServiceWorkerContextConnectionToNetworkProcess(PageGroupIdentifier, WebPageProxyIdentifier, WebCore::PageIdentifier, const WebPreferencesStore&, WebCore::RegistrableDomain&&, std::optional<WebCore::ScriptExecutionContextIdentifier> serviceWorkerPageIdentifier, RemoteWorkerInitializationData&&, CompletionHandler<void()>&&); -
trunk/Source/WebKit/WebProcess/WebProcess.messages.in
r289063 r289247 101 101 #endif 102 102 103 EstablishSharedWorkerContextConnectionToNetworkProcess(WebKit::PageGroupIdentifier pageGroupID, WebKit::WebPageProxyIdentifier webPageProxyID, WebCore::PageIdentifier pageID, struct WebKit::WebPreferencesStore store, WebCore::RegistrableDomain domain, struct WebKit::RemoteWorkerInitializationData initializationData) -> () Async 104 103 105 #if ENABLE(SERVICE_WORKER) 104 106 EstablishServiceWorkerContextConnectionToNetworkProcess(WebKit::PageGroupIdentifier pageGroupID, WebKit::WebPageProxyIdentifier webPageProxyID, WebCore::PageIdentifier pageID, struct WebKit::WebPreferencesStore store, WebCore::RegistrableDomain domain, std::optional<WebCore::ScriptExecutionContextIdentifier> serviceWorkerPageIdentifier, struct WebKit::RemoteWorkerInitializationData initializationData) -> () Async
Note: See TracChangeset
for help on using the changeset viewer.