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 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 #include "core/loader/ThreadableLoadingContext.h" | 42 #include "core/loader/ThreadableLoadingContext.h" |
43 #include "core/loader/WorkerFetchContext.h" | 43 #include "core/loader/WorkerFetchContext.h" |
44 #include "core/probe/CoreProbes.h" | 44 #include "core/probe/CoreProbes.h" |
45 #include "core/workers/ParentFrameTaskRunners.h" | 45 #include "core/workers/ParentFrameTaskRunners.h" |
46 #include "core/workers/SharedWorkerGlobalScope.h" | 46 #include "core/workers/SharedWorkerGlobalScope.h" |
47 #include "core/workers/SharedWorkerThread.h" | 47 #include "core/workers/SharedWorkerThread.h" |
48 #include "core/workers/WorkerClients.h" | 48 #include "core/workers/WorkerClients.h" |
49 #include "core/workers/WorkerContentSettingsClient.h" | 49 #include "core/workers/WorkerContentSettingsClient.h" |
50 #include "core/workers/WorkerGlobalScope.h" | 50 #include "core/workers/WorkerGlobalScope.h" |
51 #include "core/workers/WorkerInspectorProxy.h" | 51 #include "core/workers/WorkerInspectorProxy.h" |
52 #include "core/workers/WorkerLoaderProxy.h" | |
53 #include "core/workers/WorkerScriptLoader.h" | 52 #include "core/workers/WorkerScriptLoader.h" |
54 #include "core/workers/WorkerThreadStartupData.h" | 53 #include "core/workers/WorkerThreadStartupData.h" |
55 #include "platform/CrossThreadFunctional.h" | 54 #include "platform/CrossThreadFunctional.h" |
56 #include "platform/RuntimeEnabledFeatures.h" | 55 #include "platform/RuntimeEnabledFeatures.h" |
57 #include "platform/heap/Handle.h" | 56 #include "platform/heap/Handle.h" |
58 #include "platform/heap/Persistent.h" | 57 #include "platform/heap/Persistent.h" |
59 #include "platform/loader/fetch/ResourceResponse.h" | 58 #include "platform/loader/fetch/ResourceResponse.h" |
60 #include "platform/network/ContentSecurityPolicyParsers.h" | 59 #include "platform/network/ContentSecurityPolicyParsers.h" |
61 #include "platform/weborigin/KURL.h" | 60 #include "platform/weborigin/KURL.h" |
62 #include "platform/weborigin/SecurityOrigin.h" | 61 #include "platform/weborigin/SecurityOrigin.h" |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 } | 94 } |
96 | 95 |
97 WebSharedWorkerImpl::~WebSharedWorkerImpl() { | 96 WebSharedWorkerImpl::~WebSharedWorkerImpl() { |
98 DCHECK(IsMainThread()); | 97 DCHECK(IsMainThread()); |
99 DCHECK(web_view_); | 98 DCHECK(web_view_); |
100 // Detach the client before closing the view to avoid getting called back. | 99 // Detach the client before closing the view to avoid getting called back. |
101 main_frame_->SetClient(0); | 100 main_frame_->SetClient(0); |
102 | 101 |
103 web_view_->Close(); | 102 web_view_->Close(); |
104 main_frame_->Close(); | 103 main_frame_->Close(); |
105 if (loader_proxy_) | |
106 loader_proxy_->DetachProvider(this); | |
107 } | 104 } |
108 | 105 |
109 void WebSharedWorkerImpl::TerminateWorkerThread() { | 106 void WebSharedWorkerImpl::TerminateWorkerThread() { |
110 DCHECK(IsMainThread()); | 107 DCHECK(IsMainThread()); |
111 if (asked_to_terminate_) | 108 if (asked_to_terminate_) |
112 return; | 109 return; |
113 asked_to_terminate_ = true; | 110 asked_to_terminate_ = true; |
114 if (main_script_loader_) { | 111 if (main_script_loader_) { |
115 main_script_loader_->Cancel(); | 112 main_script_loader_->Cancel(); |
116 main_script_loader_.Clear(); | 113 main_script_loader_.Clear(); |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
245 TerminateWorkerThread(); | 242 TerminateWorkerThread(); |
246 } | 243 } |
247 | 244 |
248 void WebSharedWorkerImpl::DidTerminateWorkerThread() { | 245 void WebSharedWorkerImpl::DidTerminateWorkerThread() { |
249 DCHECK(IsMainThread()); | 246 DCHECK(IsMainThread()); |
250 client_->WorkerContextDestroyed(); | 247 client_->WorkerContextDestroyed(); |
251 // The lifetime of this proxy is controlled by the worker context. | 248 // The lifetime of this proxy is controlled by the worker context. |
252 delete this; | 249 delete this; |
253 } | 250 } |
254 | 251 |
255 ThreadableLoadingContext* WebSharedWorkerImpl::GetThreadableLoadingContext() { | |
256 if (!loading_context_) { | |
257 loading_context_ = | |
258 ThreadableLoadingContext::Create(*ToDocument(loading_document_.Get())); | |
259 } | |
260 return loading_context_; | |
261 } | |
262 | |
263 void WebSharedWorkerImpl::Connect( | 252 void WebSharedWorkerImpl::Connect( |
264 std::unique_ptr<WebMessagePortChannel> web_channel) { | 253 std::unique_ptr<WebMessagePortChannel> web_channel) { |
265 DCHECK(IsMainThread()); | 254 DCHECK(IsMainThread()); |
266 // The HTML spec requires to queue a connect event using the DOM manipulation | 255 // The HTML spec requires to queue a connect event using the DOM manipulation |
267 // task source. | 256 // task source. |
268 // https://html.spec.whatwg.org/multipage/workers.html#shared-workers-and-the-
sharedworker-interface | 257 // https://html.spec.whatwg.org/multipage/workers.html#shared-workers-and-the-
sharedworker-interface |
269 TaskRunnerHelper::Get(TaskType::kDOMManipulation, GetWorkerThread()) | 258 TaskRunnerHelper::Get(TaskType::kDOMManipulation, GetWorkerThread()) |
270 ->PostTask( | 259 ->PostTask( |
271 BLINK_FROM_HERE, | 260 BLINK_FROM_HERE, |
272 CrossThreadBind(&WebSharedWorkerImpl::ConnectTaskOnWorkerThread, | 261 CrossThreadBind(&WebSharedWorkerImpl::ConnectTaskOnWorkerThread, |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
377 | 366 |
378 // SharedWorker can sometimes run tasks that are initiated by/associated with | 367 // SharedWorker can sometimes run tasks that are initiated by/associated with |
379 // a document's frame but these documents can be from a different process. So | 368 // a document's frame but these documents can be from a different process. So |
380 // we intentionally populate the task runners with null document in order to | 369 // we intentionally populate the task runners with null document in order to |
381 // use the thread's default task runner. Note that |m_document| should not be | 370 // use the thread's default task runner. Note that |m_document| should not be |
382 // used as it's a dummy document for loading that doesn't represent the frame | 371 // used as it's a dummy document for loading that doesn't represent the frame |
383 // of any associated document. | 372 // of any associated document. |
384 ParentFrameTaskRunners* task_runners = | 373 ParentFrameTaskRunners* task_runners = |
385 ParentFrameTaskRunners::Create(nullptr); | 374 ParentFrameTaskRunners::Create(nullptr); |
386 | 375 |
387 loader_proxy_ = WorkerLoaderProxy::Create(this); | |
388 reporting_proxy_ = new WebSharedWorkerReportingProxyImpl(this, task_runners); | 376 reporting_proxy_ = new WebSharedWorkerReportingProxyImpl(this, task_runners); |
389 worker_thread_ = | 377 worker_thread_ = WTF::MakeUnique<SharedWorkerThread>( |
390 SharedWorkerThread::Create(name_, loader_proxy_, *reporting_proxy_); | 378 name_, |
| 379 ThreadableLoadingContext::Create(*ToDocument(loading_document_.Get())), |
| 380 *reporting_proxy_); |
391 probe::scriptImported(loading_document_, main_script_loader_->Identifier(), | 381 probe::scriptImported(loading_document_, main_script_loader_->Identifier(), |
392 main_script_loader_->SourceText()); | 382 main_script_loader_->SourceText()); |
393 main_script_loader_.Clear(); | 383 main_script_loader_.Clear(); |
394 | 384 |
395 GetWorkerThread()->Start(std::move(startup_data), task_runners); | 385 GetWorkerThread()->Start(std::move(startup_data), task_runners); |
396 worker_inspector_proxy_->WorkerThreadCreated(ToDocument(loading_document_), | 386 worker_inspector_proxy_->WorkerThreadCreated(ToDocument(loading_document_), |
397 GetWorkerThread(), url_); | 387 GetWorkerThread(), url_); |
398 client_->WorkerScriptLoaded(); | 388 client_->WorkerScriptLoaded(); |
399 } | 389 } |
400 | 390 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
439 if (devtools_agent) | 429 if (devtools_agent) |
440 devtools_agent->DispatchOnInspectorBackend(session_id, call_id, method, | 430 devtools_agent->DispatchOnInspectorBackend(session_id, call_id, method, |
441 message); | 431 message); |
442 } | 432 } |
443 | 433 |
444 WebSharedWorker* WebSharedWorker::Create(WebSharedWorkerClient* client) { | 434 WebSharedWorker* WebSharedWorker::Create(WebSharedWorkerClient* client) { |
445 return new WebSharedWorkerImpl(client); | 435 return new WebSharedWorkerImpl(client); |
446 } | 436 } |
447 | 437 |
448 } // namespace blink | 438 } // namespace blink |
OLD | NEW |