OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 12 matching lines...) Expand all Loading... |
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
29 */ | 29 */ |
30 | 30 |
31 #include "web/WebSharedWorkerImpl.h" | 31 #include "web/WebSharedWorkerImpl.h" |
32 | 32 |
| 33 #include <memory> |
33 #include "core/dom/Document.h" | 34 #include "core/dom/Document.h" |
| 35 #include "core/dom/TaskRunnerHelper.h" |
34 #include "core/events/MessageEvent.h" | 36 #include "core/events/MessageEvent.h" |
35 #include "core/inspector/ConsoleMessage.h" | 37 #include "core/inspector/ConsoleMessage.h" |
36 #include "core/inspector/InspectorInstrumentation.h" | 38 #include "core/inspector/InspectorInstrumentation.h" |
37 #include "core/loader/FrameLoadRequest.h" | 39 #include "core/loader/FrameLoadRequest.h" |
38 #include "core/loader/FrameLoader.h" | 40 #include "core/loader/FrameLoader.h" |
39 #include "core/workers/ParentFrameTaskRunners.h" | |
40 #include "core/workers/SharedWorkerGlobalScope.h" | 41 #include "core/workers/SharedWorkerGlobalScope.h" |
41 #include "core/workers/SharedWorkerThread.h" | 42 #include "core/workers/SharedWorkerThread.h" |
42 #include "core/workers/WorkerClients.h" | 43 #include "core/workers/WorkerClients.h" |
43 #include "core/workers/WorkerGlobalScope.h" | 44 #include "core/workers/WorkerGlobalScope.h" |
44 #include "core/workers/WorkerInspectorProxy.h" | 45 #include "core/workers/WorkerInspectorProxy.h" |
45 #include "core/workers/WorkerLoaderProxy.h" | 46 #include "core/workers/WorkerLoaderProxy.h" |
46 #include "core/workers/WorkerScriptLoader.h" | 47 #include "core/workers/WorkerScriptLoader.h" |
47 #include "core/workers/WorkerThreadStartupData.h" | 48 #include "core/workers/WorkerThreadStartupData.h" |
48 #include "platform/CrossThreadFunctional.h" | 49 #include "platform/CrossThreadFunctional.h" |
49 #include "platform/heap/Handle.h" | 50 #include "platform/heap/Handle.h" |
(...skipping 13 matching lines...) Expand all Loading... |
63 #include "public/web/WebView.h" | 64 #include "public/web/WebView.h" |
64 #include "public/web/WebWorkerContentSettingsClientProxy.h" | 65 #include "public/web/WebWorkerContentSettingsClientProxy.h" |
65 #include "public/web/modules/serviceworker/WebServiceWorkerNetworkProvider.h" | 66 #include "public/web/modules/serviceworker/WebServiceWorkerNetworkProvider.h" |
66 #include "web/IndexedDBClientImpl.h" | 67 #include "web/IndexedDBClientImpl.h" |
67 #include "web/LocalFileSystemClient.h" | 68 #include "web/LocalFileSystemClient.h" |
68 #include "web/WebDataSourceImpl.h" | 69 #include "web/WebDataSourceImpl.h" |
69 #include "web/WebLocalFrameImpl.h" | 70 #include "web/WebLocalFrameImpl.h" |
70 #include "web/WorkerContentSettingsClient.h" | 71 #include "web/WorkerContentSettingsClient.h" |
71 #include "wtf/Functional.h" | 72 #include "wtf/Functional.h" |
72 #include "wtf/PtrUtil.h" | 73 #include "wtf/PtrUtil.h" |
73 #include <memory> | |
74 | 74 |
75 namespace blink { | 75 namespace blink { |
76 | 76 |
77 // TODO(toyoshim): Share implementation with WebEmbeddedWorkerImpl as much as | 77 // TODO(toyoshim): Share implementation with WebEmbeddedWorkerImpl as much as |
78 // possible. | 78 // possible. |
79 | 79 |
80 WebSharedWorkerImpl::WebSharedWorkerImpl(WebSharedWorkerClient* client) | 80 WebSharedWorkerImpl::WebSharedWorkerImpl(WebSharedWorkerClient* client) |
81 : m_webView(nullptr), | 81 : m_webView(nullptr), |
82 m_mainFrame(nullptr), | 82 m_mainFrame(nullptr), |
83 m_askedToTerminate(false), | 83 m_askedToTerminate(false), |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
258 // The lifetime of this proxy is controlled by the worker context. | 258 // The lifetime of this proxy is controlled by the worker context. |
259 delete this; | 259 delete this; |
260 } | 260 } |
261 | 261 |
262 // WorkerLoaderProxyProvider ------------------------------------------------- | 262 // WorkerLoaderProxyProvider ------------------------------------------------- |
263 | 263 |
264 void WebSharedWorkerImpl::postTaskToLoader( | 264 void WebSharedWorkerImpl::postTaskToLoader( |
265 const WebTraceLocation& location, | 265 const WebTraceLocation& location, |
266 std::unique_ptr<WTF::CrossThreadClosure> task) { | 266 std::unique_ptr<WTF::CrossThreadClosure> task) { |
267 DCHECK(m_workerThread->isCurrentThread()); | 267 DCHECK(m_workerThread->isCurrentThread()); |
268 m_parentFrameTaskRunners->get(TaskType::Networking) | 268 FrameTaskRunnerHelper::get(TaskType::Networking, m_workerThread.get()) |
269 ->postTask(FROM_HERE, std::move(task)); | 269 ->postTask(FROM_HERE, std::move(task)); |
270 } | 270 } |
271 | 271 |
272 void WebSharedWorkerImpl::postTaskToWorkerGlobalScope( | 272 void WebSharedWorkerImpl::postTaskToWorkerGlobalScope( |
273 const WebTraceLocation& location, | 273 const WebTraceLocation& location, |
274 std::unique_ptr<WTF::CrossThreadClosure> task) { | 274 std::unique_ptr<WTF::CrossThreadClosure> task) { |
275 DCHECK(isMainThread()); | 275 DCHECK(isMainThread()); |
276 m_workerThread->postTask(location, std::move(task)); | 276 m_workerThread->postTask(location, std::move(task)); |
277 } | 277 } |
278 | 278 |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
364 WorkerThreadStartupData::create( | 364 WorkerThreadStartupData::create( |
365 m_url, m_loadingDocument->userAgent(), m_mainScriptLoader->script(), | 365 m_url, m_loadingDocument->userAgent(), m_mainScriptLoader->script(), |
366 nullptr, startMode, | 366 nullptr, startMode, |
367 contentSecurityPolicy ? contentSecurityPolicy->headers().get() | 367 contentSecurityPolicy ? contentSecurityPolicy->headers().get() |
368 : nullptr, | 368 : nullptr, |
369 m_mainScriptLoader->getReferrerPolicy(), starterOrigin, workerClients, | 369 m_mainScriptLoader->getReferrerPolicy(), starterOrigin, workerClients, |
370 m_mainScriptLoader->responseAddressSpace(), | 370 m_mainScriptLoader->responseAddressSpace(), |
371 m_mainScriptLoader->originTrialTokens(), std::move(workerSettings), | 371 m_mainScriptLoader->originTrialTokens(), std::move(workerSettings), |
372 WorkerV8Settings::Default()); | 372 WorkerV8Settings::Default()); |
373 | 373 |
374 // SharedWorker can sometimes run tasks that are initiated by/associated with | |
375 // a document's frame but these documents can be from a different process. So | |
376 // we intentionally populate the task runners with null document in order to | |
377 // use the thread's default task runner. Note that |m_document| should not be | |
378 // used as it's a dummy document for loading that doesn't represent the frame | |
379 // of any associated document. | |
380 m_parentFrameTaskRunners = ParentFrameTaskRunners::create(nullptr); | |
381 | |
382 m_loaderProxy = WorkerLoaderProxy::create(this); | 374 m_loaderProxy = WorkerLoaderProxy::create(this); |
383 m_reportingProxy = new WebSharedWorkerReportingProxyImpl( | 375 m_reportingProxy = new WebSharedWorkerReportingProxyImpl(this); |
384 this, m_parentFrameTaskRunners.get()); | |
385 m_workerThread = | 376 m_workerThread = |
386 SharedWorkerThread::create(m_name, m_loaderProxy, *m_reportingProxy); | 377 SharedWorkerThread::create(m_name, m_loaderProxy, *m_reportingProxy); |
387 InspectorInstrumentation::scriptImported(m_loadingDocument, | 378 InspectorInstrumentation::scriptImported(m_loadingDocument, |
388 m_mainScriptLoader->identifier(), | 379 m_mainScriptLoader->identifier(), |
389 m_mainScriptLoader->script()); | 380 m_mainScriptLoader->script()); |
390 m_mainScriptLoader.clear(); | 381 m_mainScriptLoader.clear(); |
391 | 382 |
392 workerThread()->start(std::move(startupData), m_parentFrameTaskRunners.get()); | 383 // SharedWorker can sometimes run tasks that are initiated by/associated with |
| 384 // a document's frame but these documents can be from a different process. So |
| 385 // we intentionally populate the task runners with null document in order to |
| 386 // use the thread's default task runner. Note that |m_document| should not be |
| 387 // used as it's a dummy document for loading that doesn't represent the frame |
| 388 // of any associated document. |
| 389 workerThread()->start(std::move(startupData), |
| 390 FrameTaskRunnersHolder::create(nullptr)); |
393 m_workerInspectorProxy->workerThreadCreated(toDocument(m_loadingDocument), | 391 m_workerInspectorProxy->workerThreadCreated(toDocument(m_loadingDocument), |
394 workerThread(), m_url); | 392 workerThread(), m_url); |
395 m_client->workerScriptLoaded(); | 393 m_client->workerScriptLoaded(); |
396 } | 394 } |
397 | 395 |
398 void WebSharedWorkerImpl::terminateWorkerContext() { | 396 void WebSharedWorkerImpl::terminateWorkerContext() { |
399 DCHECK(isMainThread()); | 397 DCHECK(isMainThread()); |
400 terminateWorkerThread(); | 398 terminateWorkerThread(); |
401 } | 399 } |
402 | 400 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
436 if (devtoolsAgent) | 434 if (devtoolsAgent) |
437 devtoolsAgent->dispatchOnInspectorBackend(sessionId, callId, method, | 435 devtoolsAgent->dispatchOnInspectorBackend(sessionId, callId, method, |
438 message); | 436 message); |
439 } | 437 } |
440 | 438 |
441 WebSharedWorker* WebSharedWorker::create(WebSharedWorkerClient* client) { | 439 WebSharedWorker* WebSharedWorker::create(WebSharedWorkerClient* client) { |
442 return new WebSharedWorkerImpl(client); | 440 return new WebSharedWorkerImpl(client); |
443 } | 441 } |
444 | 442 |
445 } // namespace blink | 443 } // namespace blink |
OLD | NEW |