Changeset 293173 in webkit
- Timestamp:
- Apr 21, 2022 9:55:46 AM (3 months ago)
- Location:
- trunk
- Files:
-
- 9 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/http/tests/navigation/page-cache-shared-worker-expected.txt (modified) (1 diff)
-
LayoutTests/http/tests/navigation/page-cache-shared-worker.html (modified) (3 diffs)
-
LayoutTests/http/tests/navigation/resources/page-cache-helper-for-sharedworker.html (modified) (2 diffs)
-
LayoutTests/http/tests/navigation/resources/shared-worker-script.js (modified) (2 diffs)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/NetworkProcess/SharedWorker/WebSharedWorker.cpp (modified) (5 diffs)
-
Source/WebKit/NetworkProcess/SharedWorker/WebSharedWorker.h (modified) (2 diffs)
-
Source/WebKit/NetworkProcess/SharedWorker/WebSharedWorkerServer.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r293171 r293173 1 2022-04-21 Youenn Fablet <youenn@apple.com> 2 3 A suspended remote shared worker should resume when a new SharedWorker is added 4 https://bugs.webkit.org/show_bug.cgi?id=239325 5 6 Reviewed by Chris Dumez. 7 8 * http/tests/navigation/page-cache-shared-worker-expected.txt: 9 * http/tests/navigation/page-cache-shared-worker.html: 10 * http/tests/navigation/resources/page-cache-helper-for-sharedworker.html: 11 * http/tests/navigation/resources/shared-worker-script.js: 12 1 13 2022-04-21 Karl Rackler <rackler@apple.com> 2 14 -
trunk/LayoutTests/http/tests/navigation/page-cache-shared-worker-expected.txt
r292860 r293173 9 9 PASS Page did enter and was restored from the page cache 10 10 PASS counter is below 100 11 PASS state is "hungry" 11 12 PASS successfullyParsed is true 12 13 -
trunk/LayoutTests/http/tests/navigation/page-cache-shared-worker.html
r292860 r293173 9 9 10 10 var restoredFromPageCache = false; 11 var sw; 11 var sw1, sw2; 12 var state; 12 13 13 14 window.addEventListener("pageshow", async function(event) { … … 18 19 restoredFromPageCache = true; 19 20 20 sw .port.postMessage('counter');21 const counter = await new Promise(resolve => sw .port.onmessage = (event) => resolve(event.data));21 sw1.port.postMessage('counter'); 22 const counter = await new Promise(resolve => sw1.port.onmessage = (event) => resolve(event.data)); 22 23 if (counter < 100) 23 24 testPassed("counter is below 100"); 24 25 else 25 26 testFailed("counter is above 100"); 27 28 sw2.port.postMessage('getState'); 29 state = await new Promise(resolve => sw2.port.onmessage = (event) => resolve(event.data)); 30 shouldBeEqualToString("state", "hungry"); 26 31 27 32 setTimeout(finishJSTest, 0); … … 38 43 39 44 window.addEventListener('load', function() { 40 sw = new SharedWorker('resources/shared-worker-script.js'); 45 sw1 = new SharedWorker('resources/shared-worker-script.js?1'); 46 sw2 = new SharedWorker('resources/shared-worker-script.js?2'); 41 47 setTimeout(function() { 42 48 // Force a back navigation back to this page. -
trunk/LayoutTests/http/tests/navigation/resources/page-cache-helper-for-sharedworker.html
r292860 r293173 11 11 12 12 channel.postMessage('ping'); 13 returnnew Promise((resolve, reject) => {13 await new Promise((resolve, reject) => { 14 14 let myTimer = setTimeout(resolve, 1000); 15 15 channel.onmessage = async () => { … … 20 20 }; 21 21 }); 22 23 const sw2 = new SharedWorker('shared-worker-script.js?2'); 24 sw2.port.postMessage({ action: 'setState', state: 'hungry' }); 25 await new Promise(resolve => sw2.port.onmessage = resolve); 22 26 } 23 27 -
trunk/LayoutTests/http/tests/navigation/resources/shared-worker-script.js
r292860 r293173 1 1 var channel = new BroadcastChannel('shared-worker'); 2 2 var counter = 0; 3 var state = 'empty'; 3 4 channel.onmessage = (event) => { 4 5 if (event.data === 'ping') { … … 10 11 const port = e.ports[0]; 11 12 port.onmessage = (event) => { 12 if (event.data === 'counter') 13 if (event.data === 'counter') { 13 14 port.postMessage(counter); 15 return; 16 } 17 if (event.data === 'getState') { 18 port.postMessage(state); 19 return; 20 } 21 if (event.data.action === 'setState') { 22 state = event.data.state; 23 port.postMessage('ok'); 24 } 14 25 }; 15 26 } -
trunk/Source/WebKit/ChangeLog
r293170 r293173 1 2022-04-21 Youenn Fablet <youenn@apple.com> 2 3 A suspended remote shared worker should resume when a new SharedWorker is added 4 https://bugs.webkit.org/show_bug.cgi?id=239325 5 6 Reviewed by Chris Dumez. 7 8 Check whether resuming/suspending remote shared worker in case of added/removed SharedWorker object. 9 Make sure to suspend the remote shared worker at launch time if needed. 10 11 Covered by updated test. 12 13 * NetworkProcess/SharedWorker/WebSharedWorker.cpp: 14 * NetworkProcess/SharedWorker/WebSharedWorker.h: 15 * NetworkProcess/SharedWorker/WebSharedWorkerServer.cpp: 16 1 17 2022-04-21 Eric Carlson <eric.carlson@apple.com> 2 18 -
trunk/Source/WebKit/NetworkProcess/SharedWorker/WebSharedWorker.cpp
r292860 r293173 73 73 } 74 74 75 void WebSharedWorker::setFetchResult(WebCore::WorkerFetchResult&& fetchResult, WebSharedWorkerServerToContextConnection* contextConnection) 76 { 77 m_fetchResult = WTFMove(fetchResult); 78 if (contextConnection) 79 launch(*contextConnection); 80 } 81 75 82 void WebSharedWorker::didCreateContextConnection(WebSharedWorkerServerToContextConnection& contextConnection) 76 83 { 77 84 for (auto& sharedWorkerObjectIdentifier : m_sharedWorkerObjects.keys()) 78 85 contextConnection.addSharedWorkerObject(sharedWorkerObjectIdentifier); 86 if (didFinishFetching()) 87 launch(contextConnection); 88 } 89 90 void WebSharedWorker::launch(WebSharedWorkerServerToContextConnection& connection) 91 { 92 connection.launchSharedWorker(*this); 93 if (m_isSuspended) 94 connection.suspendSharedWorker(identifier()); 79 95 } 80 96 … … 84 100 if (auto* connection = contextConnection()) 85 101 connection->addSharedWorkerObject(sharedWorkerObjectIdentifier); 102 103 resumeIfNeeded(); 86 104 } 87 105 … … 91 109 if (auto* connection = contextConnection()) 92 110 connection->removeSharedWorkerObject(sharedWorkerObjectIdentifier); 111 112 suspendIfNeeded(); 93 113 } 94 114 … … 101 121 iterator->value.isSuspended = true; 102 122 ASSERT(!m_isSuspended); 123 124 suspendIfNeeded(); 125 } 126 127 void WebSharedWorker::suspendIfNeeded() 128 { 103 129 if (m_isSuspended) 104 130 return; … … 121 147 122 148 iterator->value.isSuspended = false; 149 150 resumeIfNeeded(); 151 } 152 153 void WebSharedWorker::resumeIfNeeded() 154 { 123 155 if (!m_isSuspended) 124 156 return; -
trunk/Source/WebKit/NetworkProcess/SharedWorker/WebSharedWorker.h
r292860 r293173 73 73 74 74 const WebCore::WorkerFetchResult& fetchResult() const { return m_fetchResult; } 75 void setFetchResult(WebCore::WorkerFetchResult&& fetchResult) { m_fetchResult = WTFMove(fetchResult); }75 void setFetchResult(WebCore::WorkerFetchResult&&, WebSharedWorkerServerToContextConnection*); 76 76 bool didFinishFetching() const { return !!m_fetchResult.script; } 77 77 … … 81 81 WebSharedWorker(const WebSharedWorker&) = delete; 82 82 WebSharedWorker& operator=(const WebSharedWorker&) = delete; 83 84 void suspendIfNeeded(); 85 void resumeIfNeeded(); 86 void launch(WebSharedWorkerServerToContextConnection&); 83 87 84 88 struct SharedWorkerObjectState { -
trunk/Source/WebKit/NetworkProcess/SharedWorker/WebSharedWorkerServer.cpp
r292860 r293173 108 108 } 109 109 110 sharedWorker.setFetchResult(WTFMove(fetchResult)); 111 112 if (auto* contextConnection = sharedWorker.contextConnection()) { 113 contextConnection->launchSharedWorker(sharedWorker); 114 return; 115 } 116 createContextConnection(sharedWorker.registrableDomain(), sharedWorker.firstSharedWorkerObjectProcess()); 110 auto* connection = m_contextConnections.get(sharedWorker.registrableDomain()); 111 sharedWorker.setFetchResult(WTFMove(fetchResult), connection); 112 113 if (!connection) 114 createContextConnection(sharedWorker.registrableDomain(), sharedWorker.firstSharedWorkerObjectProcess()); 117 115 } 118 116 … … 187 185 188 186 sharedWorker->didCreateContextConnection(contextConnection); 189 if (sharedWorker->didFinishFetching())190 contextConnection.launchSharedWorker(*sharedWorker);191 187 } 192 188 }
Note: See TracChangeset
for help on using the changeset viewer.