Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(80)

Side by Side Diff: third_party/WebKit/Source/core/exported/WebSharedWorkerImpl.cpp

Issue 2939623002: [DONT COMMIT] WIP: WorkerClientsInitializer (Closed)
Patch Set: finalize2 Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 29 matching lines...) Expand all
40 #include "core/frame/WebLocalFrameBase.h" 40 #include "core/frame/WebLocalFrameBase.h"
41 #include "core/inspector/ConsoleMessage.h" 41 #include "core/inspector/ConsoleMessage.h"
42 #include "core/loader/FrameLoadRequest.h" 42 #include "core/loader/FrameLoadRequest.h"
43 #include "core/loader/FrameLoader.h" 43 #include "core/loader/FrameLoader.h"
44 #include "core/loader/ThreadableLoadingContext.h" 44 #include "core/loader/ThreadableLoadingContext.h"
45 #include "core/loader/WorkerFetchContext.h" 45 #include "core/loader/WorkerFetchContext.h"
46 #include "core/probe/CoreProbes.h" 46 #include "core/probe/CoreProbes.h"
47 #include "core/workers/ParentFrameTaskRunners.h" 47 #include "core/workers/ParentFrameTaskRunners.h"
48 #include "core/workers/SharedWorkerGlobalScope.h" 48 #include "core/workers/SharedWorkerGlobalScope.h"
49 #include "core/workers/SharedWorkerThread.h" 49 #include "core/workers/SharedWorkerThread.h"
50 #include "core/workers/WorkerClients.h"
51 #include "core/workers/WorkerContentSettingsClient.h" 50 #include "core/workers/WorkerContentSettingsClient.h"
52 #include "core/workers/WorkerGlobalScope.h" 51 #include "core/workers/WorkerGlobalScope.h"
53 #include "core/workers/WorkerInspectorProxy.h" 52 #include "core/workers/WorkerInspectorProxy.h"
54 #include "core/workers/WorkerScriptLoader.h" 53 #include "core/workers/WorkerScriptLoader.h"
55 #include "core/workers/WorkerThreadStartupData.h" 54 #include "core/workers/WorkerThreadStartupData.h"
56 #include "platform/CrossThreadFunctional.h" 55 #include "platform/CrossThreadFunctional.h"
57 #include "platform/RuntimeEnabledFeatures.h" 56 #include "platform/RuntimeEnabledFeatures.h"
58 #include "platform/heap/Handle.h" 57 #include "platform/heap/Handle.h"
59 #include "platform/heap/Persistent.h" 58 #include "platform/heap/Persistent.h"
60 #include "platform/loader/fetch/ResourceResponse.h" 59 #include "platform/loader/fetch/ResourceResponse.h"
(...skipping 10 matching lines...) Expand all
71 #include "public/platform/WebURLRequest.h" 70 #include "public/platform/WebURLRequest.h"
72 #include "public/platform/WebWorkerFetchContext.h" 71 #include "public/platform/WebWorkerFetchContext.h"
73 #include "public/platform/modules/serviceworker/WebServiceWorkerNetworkProvider. h" 72 #include "public/platform/modules/serviceworker/WebServiceWorkerNetworkProvider. h"
74 #include "public/web/WebDevToolsAgent.h" 73 #include "public/web/WebDevToolsAgent.h"
75 #include "public/web/WebFrame.h" 74 #include "public/web/WebFrame.h"
76 #include "public/web/WebSettings.h" 75 #include "public/web/WebSettings.h"
77 #include "public/web/WebView.h" 76 #include "public/web/WebView.h"
78 77
79 namespace blink { 78 namespace blink {
80 79
81 namespace {
82
83 // Vector of callbacks for the OnScriptLoaderFinished method.
84 using WorkerClientsCreatedCallbackVector =
85 WTF::Vector<WebSharedWorkerImpl::WorkerClientsCreatedCallback>;
86 WorkerClientsCreatedCallbackVector& GetWorkerClientsCreatedCallbackVector() {
87 DEFINE_STATIC_LOCAL(WorkerClientsCreatedCallbackVector, callback_vector, ());
88 return callback_vector;
89 }
90
91 } // namespace
92
93 // TODO(toyoshim): Share implementation with WebEmbeddedWorkerImpl as much as 80 // TODO(toyoshim): Share implementation with WebEmbeddedWorkerImpl as much as
94 // possible. 81 // possible.
95 82
83 template class CORE_TEMPLATE_EXPORT
84 WorkerClientsInitializer<WebSharedWorkerImpl>;
85
96 WebSharedWorkerImpl::WebSharedWorkerImpl(WebSharedWorkerClient* client) 86 WebSharedWorkerImpl::WebSharedWorkerImpl(WebSharedWorkerClient* client)
97 : web_view_(nullptr), 87 : web_view_(nullptr),
98 main_frame_(nullptr), 88 main_frame_(nullptr),
99 asked_to_terminate_(false), 89 asked_to_terminate_(false),
100 worker_inspector_proxy_(WorkerInspectorProxy::Create()), 90 worker_inspector_proxy_(WorkerInspectorProxy::Create()),
101 client_(client), 91 client_(client),
102 pause_worker_context_on_start_(false), 92 pause_worker_context_on_start_(false),
103 is_paused_on_start_(false), 93 is_paused_on_start_(false),
104 creation_address_space_(kWebAddressSpacePublic) { 94 creation_address_space_(kWebAddressSpacePublic) {
105 DCHECK(IsMainThread()); 95 DCHECK(IsMainThread());
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 TerminateWorkerThread(); 246 TerminateWorkerThread();
257 } 247 }
258 248
259 void WebSharedWorkerImpl::DidTerminateWorkerThread() { 249 void WebSharedWorkerImpl::DidTerminateWorkerThread() {
260 DCHECK(IsMainThread()); 250 DCHECK(IsMainThread());
261 client_->WorkerContextDestroyed(); 251 client_->WorkerContextDestroyed();
262 // The lifetime of this proxy is controlled by the worker context. 252 // The lifetime of this proxy is controlled by the worker context.
263 delete this; 253 delete this;
264 } 254 }
265 255
266 void WebSharedWorkerImpl::RegisterWorkerClientsCreatedCallback(
267 WorkerClientsCreatedCallback callback) {
268 GetWorkerClientsCreatedCallbackVector().push_back(callback);
269 }
270
271 void WebSharedWorkerImpl::Connect( 256 void WebSharedWorkerImpl::Connect(
272 std::unique_ptr<WebMessagePortChannel> web_channel) { 257 std::unique_ptr<WebMessagePortChannel> web_channel) {
273 DCHECK(IsMainThread()); 258 DCHECK(IsMainThread());
274 // The HTML spec requires to queue a connect event using the DOM manipulation 259 // The HTML spec requires to queue a connect event using the DOM manipulation
275 // task source. 260 // task source.
276 // https://html.spec.whatwg.org/multipage/workers.html#shared-workers-and-the- sharedworker-interface 261 // https://html.spec.whatwg.org/multipage/workers.html#shared-workers-and-the- sharedworker-interface
277 TaskRunnerHelper::Get(TaskType::kDOMManipulation, GetWorkerThread()) 262 TaskRunnerHelper::Get(TaskType::kDOMManipulation, GetWorkerThread())
278 ->PostTask( 263 ->PostTask(
279 BLINK_FROM_HERE, 264 BLINK_FROM_HERE,
280 CrossThreadBind(&WebSharedWorkerImpl::ConnectTaskOnWorkerThread, 265 CrossThreadBind(&WebSharedWorkerImpl::ConnectTaskOnWorkerThread,
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 delete this; 316 delete this;
332 return; 317 return;
333 } 318 }
334 319
335 // FIXME: this document's origin is pristine and without any extra privileges 320 // FIXME: this document's origin is pristine and without any extra privileges
336 // (e.g. GrantUniversalAccess) that can be overriden in regular documents 321 // (e.g. GrantUniversalAccess) that can be overriden in regular documents
337 // via WebPreference by embedders. (crbug.com/254993) 322 // via WebPreference by embedders. (crbug.com/254993)
338 SecurityOrigin* starter_origin = loading_document_->GetSecurityOrigin(); 323 SecurityOrigin* starter_origin = loading_document_->GetSecurityOrigin();
339 324
340 WorkerClients* worker_clients = WorkerClients::Create(); 325 WorkerClients* worker_clients = WorkerClients::Create();
341 DCHECK(!GetWorkerClientsCreatedCallbackVector().IsEmpty()); 326 WorkerClientsInitializer<WebSharedWorkerImpl>::Run(worker_clients);
342 for (auto& callback : GetWorkerClientsCreatedCallbackVector()) {
343 callback(worker_clients);
344 }
345 327
346 WebSecurityOrigin web_security_origin(loading_document_->GetSecurityOrigin()); 328 WebSecurityOrigin web_security_origin(loading_document_->GetSecurityOrigin());
347 ProvideContentSettingsClientToWorker( 329 ProvideContentSettingsClientToWorker(
348 worker_clients, 330 worker_clients,
349 client_->CreateWorkerContentSettingsClient(web_security_origin)); 331 client_->CreateWorkerContentSettingsClient(web_security_origin));
350 332
351 if (RuntimeEnabledFeatures::OffMainThreadFetchEnabled()) { 333 if (RuntimeEnabledFeatures::OffMainThreadFetchEnabled()) {
352 std::unique_ptr<WebWorkerFetchContext> web_worker_fetch_context = 334 std::unique_ptr<WebWorkerFetchContext> web_worker_fetch_context =
353 client_->CreateWorkerFetchContext( 335 client_->CreateWorkerFetchContext(
354 WebLocalFrameBase::FromFrame(main_frame_->GetFrame()) 336 WebLocalFrameBase::FromFrame(main_frame_->GetFrame())
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 devtools_agent->DispatchOnInspectorBackend(session_id, call_id, method, 431 devtools_agent->DispatchOnInspectorBackend(session_id, call_id, method,
450 message); 432 message);
451 } 433 }
452 } 434 }
453 435
454 WebSharedWorker* WebSharedWorker::Create(WebSharedWorkerClient* client) { 436 WebSharedWorker* WebSharedWorker::Create(WebSharedWorkerClient* client) {
455 return new WebSharedWorkerImpl(client); 437 return new WebSharedWorkerImpl(client);
456 } 438 }
457 439
458 } // namespace blink 440 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/exported/WebSharedWorkerImpl.h ('k') | third_party/WebKit/Source/core/workers/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698