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

Side by Side Diff: Source/web/WebEmbeddedWorkerImpl.cpp

Issue 1115923002: workers: Rename WorkerThread to WorkerScript. Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: . Created 5 years, 7 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 | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 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 27 matching lines...) Expand all
38 #include "core/inspector/InspectorInstrumentation.h" 38 #include "core/inspector/InspectorInstrumentation.h"
39 #include "core/inspector/WorkerDebuggerAgent.h" 39 #include "core/inspector/WorkerDebuggerAgent.h"
40 #include "core/inspector/WorkerInspectorController.h" 40 #include "core/inspector/WorkerInspectorController.h"
41 #include "core/loader/FrameLoadRequest.h" 41 #include "core/loader/FrameLoadRequest.h"
42 #include "core/workers/WorkerClients.h" 42 #include "core/workers/WorkerClients.h"
43 #include "core/workers/WorkerGlobalScope.h" 43 #include "core/workers/WorkerGlobalScope.h"
44 #include "core/workers/WorkerInspectorProxy.h" 44 #include "core/workers/WorkerInspectorProxy.h"
45 #include "core/workers/WorkerLoaderProxy.h" 45 #include "core/workers/WorkerLoaderProxy.h"
46 #include "core/workers/WorkerScriptLoader.h" 46 #include "core/workers/WorkerScriptLoader.h"
47 #include "core/workers/WorkerScriptLoaderClient.h" 47 #include "core/workers/WorkerScriptLoaderClient.h"
48 #include "core/workers/WorkerThreadStartupData.h" 48 #include "core/workers/WorkerScriptStartupData.h"
49 #include "modules/serviceworkers/ServiceWorkerContainerClient.h" 49 #include "modules/serviceworkers/ServiceWorkerContainerClient.h"
50 #include "modules/serviceworkers/ServiceWorkerThread.h" 50 #include "modules/serviceworkers/ServiceWorkerThread.h"
51 #include "platform/SharedBuffer.h" 51 #include "platform/SharedBuffer.h"
52 #include "platform/heap/Handle.h" 52 #include "platform/heap/Handle.h"
53 #include "platform/network/ContentSecurityPolicyParsers.h" 53 #include "platform/network/ContentSecurityPolicyParsers.h"
54 #include "platform/network/ContentSecurityPolicyResponseHeaders.h" 54 #include "platform/network/ContentSecurityPolicyResponseHeaders.h"
55 #include "public/platform/Platform.h" 55 #include "public/platform/Platform.h"
56 #include "public/platform/WebServiceWorkerProvider.h" 56 #include "public/platform/WebServiceWorkerProvider.h"
57 #include "public/platform/WebURLRequest.h" 57 #include "public/platform/WebURLRequest.h"
58 #include "public/web/WebDevToolsAgent.h" 58 #include "public/web/WebDevToolsAgent.h"
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
148 , m_waitingForDebuggerState(NotWaitingForDebugger) 148 , m_waitingForDebuggerState(NotWaitingForDebugger)
149 { 149 {
150 runningWorkerInstances().add(this); 150 runningWorkerInstances().add(this);
151 } 151 }
152 152
153 WebEmbeddedWorkerImpl::~WebEmbeddedWorkerImpl() 153 WebEmbeddedWorkerImpl::~WebEmbeddedWorkerImpl()
154 { 154 {
155 // Prevent onScriptLoaderFinished from deleting 'this'. 155 // Prevent onScriptLoaderFinished from deleting 'this'.
156 m_askedToTerminate = true; 156 m_askedToTerminate = true;
157 157
158 if (m_workerThread) 158 if (m_workerScript)
159 m_workerThread->terminateAndWait(); 159 m_workerScript->terminateAndWait();
160 160
161 ASSERT(runningWorkerInstances().contains(this)); 161 ASSERT(runningWorkerInstances().contains(this));
162 runningWorkerInstances().remove(this); 162 runningWorkerInstances().remove(this);
163 ASSERT(m_webView); 163 ASSERT(m_webView);
164 164
165 // Detach the client before closing the view to avoid getting called back. 165 // Detach the client before closing the view to avoid getting called back.
166 m_mainFrame->setClient(0); 166 m_mainFrame->setClient(0);
167 167
168 m_webView->close(); 168 m_webView->close();
169 m_mainFrame->close(); 169 m_mainFrame->close();
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 m_mainScriptLoader.clear(); 201 m_mainScriptLoader.clear();
202 // This may delete 'this'. 202 // This may delete 'this'.
203 m_workerContextClient->workerContextFailedToStart(); 203 m_workerContextClient->workerContextFailedToStart();
204 return; 204 return;
205 } 205 }
206 if (m_pauseAfterDownloadState == IsPausedAfterDownload) { 206 if (m_pauseAfterDownloadState == IsPausedAfterDownload) {
207 // This may delete 'this'. 207 // This may delete 'this'.
208 m_workerContextClient->workerContextFailedToStart(); 208 m_workerContextClient->workerContextFailedToStart();
209 return; 209 return;
210 } 210 }
211 if (m_workerThread) 211 if (m_workerScript)
212 m_workerThread->stop(); 212 m_workerScript->stop();
213 m_workerInspectorProxy->workerThreadTerminated(); 213 m_workerInspectorProxy->workerScriptTerminated();
214 } 214 }
215 215
216 void WebEmbeddedWorkerImpl::resumeAfterDownload() 216 void WebEmbeddedWorkerImpl::resumeAfterDownload()
217 { 217 {
218 ASSERT(!m_askedToTerminate); 218 ASSERT(!m_askedToTerminate);
219 bool wasPaused = (m_pauseAfterDownloadState == IsPausedAfterDownload); 219 bool wasPaused = (m_pauseAfterDownloadState == IsPausedAfterDownload);
220 m_pauseAfterDownloadState = DontPauseAfterDownload; 220 m_pauseAfterDownloadState = DontPauseAfterDownload;
221 221
222 // If we were asked to wait for debugger while updating service worker versi on then it is good time now. 222 // If we were asked to wait for debugger while updating service worker versi on then it is good time now.
223 m_workerContextClient->workerReadyForInspection(); 223 m_workerContextClient->workerReadyForInspection();
224 if (m_workerStartData.waitForDebuggerMode == WebEmbeddedWorkerStartData::Wai tForDebugger) 224 if (m_workerStartData.waitForDebuggerMode == WebEmbeddedWorkerStartData::Wai tForDebugger)
225 m_waitingForDebuggerState = WaitingForDebuggerAfterScriptLoaded; 225 m_waitingForDebuggerState = WaitingForDebuggerAfterScriptLoaded;
226 else if (wasPaused) 226 else if (wasPaused)
227 startWorkerThread(); 227 startWorkerScript();
228 } 228 }
229 229
230 void WebEmbeddedWorkerImpl::attachDevTools(const WebString& hostId) 230 void WebEmbeddedWorkerImpl::attachDevTools(const WebString& hostId)
231 { 231 {
232 WebDevToolsAgent* devtoolsAgent = m_mainFrame->devToolsAgent(); 232 WebDevToolsAgent* devtoolsAgent = m_mainFrame->devToolsAgent();
233 if (devtoolsAgent) 233 if (devtoolsAgent)
234 devtoolsAgent->attach(hostId); 234 devtoolsAgent->attach(hostId);
235 } 235 }
236 236
237 void WebEmbeddedWorkerImpl::reattachDevTools(const WebString& hostId, const WebS tring& savedState) 237 void WebEmbeddedWorkerImpl::reattachDevTools(const WebString& hostId, const WebS tring& savedState)
(...skipping 28 matching lines...) Expand all
266 pageInspector->dispatchMessageFromWorker(message); 266 pageInspector->dispatchMessageFromWorker(message);
267 } 267 }
268 268
269 void WebEmbeddedWorkerImpl::postTaskToLoader(PassOwnPtr<ExecutionContextTask> ta sk) 269 void WebEmbeddedWorkerImpl::postTaskToLoader(PassOwnPtr<ExecutionContextTask> ta sk)
270 { 270 {
271 m_mainFrame->frame()->document()->postTask(FROM_HERE, task); 271 m_mainFrame->frame()->document()->postTask(FROM_HERE, task);
272 } 272 }
273 273
274 bool WebEmbeddedWorkerImpl::postTaskToWorkerGlobalScope(PassOwnPtr<ExecutionCont extTask> task) 274 bool WebEmbeddedWorkerImpl::postTaskToWorkerGlobalScope(PassOwnPtr<ExecutionCont extTask> task)
275 { 275 {
276 if (m_askedToTerminate || !m_workerThread) 276 if (m_askedToTerminate || !m_workerScript)
277 return false; 277 return false;
278 278
279 m_workerThread->postTask(FROM_HERE, task); 279 m_workerScript->postTask(FROM_HERE, task);
280 return !m_workerThread->terminated(); 280 return !m_workerScript->terminated();
281 } 281 }
282 282
283 void WebEmbeddedWorkerImpl::prepareShadowPageForLoader() 283 void WebEmbeddedWorkerImpl::prepareShadowPageForLoader()
284 { 284 {
285 // Create 'shadow page', which is never displayed and is used mainly to 285 // Create 'shadow page', which is never displayed and is used mainly to
286 // provide a context for loading on the main thread. 286 // provide a context for loading on the main thread.
287 // 287 //
288 // FIXME: This does mostly same as WebSharedWorkerImpl::initializeLoader. 288 // FIXME: This does mostly same as WebSharedWorkerImpl::initializeLoader.
289 // This code, and probably most of the code in this class should be shared 289 // This code, and probably most of the code in this class should be shared
290 // with SharedWorker. 290 // with SharedWorker.
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
356 m_workerContextClient->sendDevToolsMessage(callId, message, state); 356 m_workerContextClient->sendDevToolsMessage(callId, message, state);
357 } 357 }
358 358
359 void WebEmbeddedWorkerImpl::resumeStartup() 359 void WebEmbeddedWorkerImpl::resumeStartup()
360 { 360 {
361 WaitingForDebuggerState waitingForDebuggerState = m_waitingForDebuggerState; 361 WaitingForDebuggerState waitingForDebuggerState = m_waitingForDebuggerState;
362 m_waitingForDebuggerState = NotWaitingForDebugger; 362 m_waitingForDebuggerState = NotWaitingForDebugger;
363 if (waitingForDebuggerState == WaitingForDebuggerBeforeLoadingScript) 363 if (waitingForDebuggerState == WaitingForDebuggerBeforeLoadingScript)
364 loadShadowPage(); 364 loadShadowPage();
365 else if (waitingForDebuggerState == WaitingForDebuggerAfterScriptLoaded) 365 else if (waitingForDebuggerState == WaitingForDebuggerAfterScriptLoaded)
366 startWorkerThread(); 366 startWorkerScript();
367 } 367 }
368 368
369 void WebEmbeddedWorkerImpl::onScriptLoaderFinished() 369 void WebEmbeddedWorkerImpl::onScriptLoaderFinished()
370 { 370 {
371 ASSERT(m_mainScriptLoader); 371 ASSERT(m_mainScriptLoader);
372 372
373 if (m_askedToTerminate) 373 if (m_askedToTerminate)
374 return; 374 return;
375 375
376 if (m_mainScriptLoader->failed()) { 376 if (m_mainScriptLoader->failed()) {
377 m_mainScriptLoader.clear(); 377 m_mainScriptLoader.clear();
378 // This may delete 'this'. 378 // This may delete 'this'.
379 m_workerContextClient->workerContextFailedToStart(); 379 m_workerContextClient->workerContextFailedToStart();
380 return; 380 return;
381 } 381 }
382 382
383 Platform::current()->histogramCustomCounts("ServiceWorker.ScriptSize", m_mai nScriptLoader->script().length(), 1000, 5000000, 50); 383 Platform::current()->histogramCustomCounts("ServiceWorker.ScriptSize", m_mai nScriptLoader->script().length(), 1000, 5000000, 50);
384 if (m_mainScriptLoader->cachedMetadata()) 384 if (m_mainScriptLoader->cachedMetadata())
385 Platform::current()->histogramCustomCounts("ServiceWorker.ScriptCachedMe tadataSize", m_mainScriptLoader->cachedMetadata()->size(), 1000, 50000000, 50); 385 Platform::current()->histogramCustomCounts("ServiceWorker.ScriptCachedMe tadataSize", m_mainScriptLoader->cachedMetadata()->size(), 1000, 50000000, 50);
386 386
387 if (m_pauseAfterDownloadState == DoPauseAfterDownload) { 387 if (m_pauseAfterDownloadState == DoPauseAfterDownload) {
388 m_pauseAfterDownloadState = IsPausedAfterDownload; 388 m_pauseAfterDownloadState = IsPausedAfterDownload;
389 m_workerContextClient->didPauseAfterDownload(); 389 m_workerContextClient->didPauseAfterDownload();
390 return; 390 return;
391 } 391 }
392 startWorkerThread(); 392 startWorkerScript();
393 } 393 }
394 394
395 void WebEmbeddedWorkerImpl::startWorkerThread() 395 void WebEmbeddedWorkerImpl::startWorkerScript()
396 { 396 {
397 ASSERT(m_pauseAfterDownloadState == DontPauseAfterDownload); 397 ASSERT(m_pauseAfterDownloadState == DontPauseAfterDownload);
398 ASSERT(!m_askedToTerminate); 398 ASSERT(!m_askedToTerminate);
399 399
400 Document* document = m_mainFrame->frame()->document(); 400 Document* document = m_mainFrame->frame()->document();
401 401
402 WorkerThreadStartMode startMode = DontPauseWorkerGlobalScopeOnStart; 402 WorkerThreadStartMode startMode = DontPauseWorkerGlobalScopeOnStart;
403 if (InspectorInstrumentation::shouldPauseDedicatedWorkerOnStart(document)) 403 if (InspectorInstrumentation::shouldPauseDedicatedWorkerOnStart(document))
404 startMode = PauseWorkerGlobalScopeOnStart; 404 startMode = PauseWorkerGlobalScopeOnStart;
405 405
406 // FIXME: this document's origin is pristine and without any extra privilege s. (crbug.com/254993) 406 // FIXME: this document's origin is pristine and without any extra privilege s. (crbug.com/254993)
407 SecurityOrigin* starterOrigin = document->securityOrigin(); 407 SecurityOrigin* starterOrigin = document->securityOrigin();
408 408
409 OwnPtrWillBeRawPtr<WorkerClients> workerClients = WorkerClients::create(); 409 OwnPtrWillBeRawPtr<WorkerClients> workerClients = WorkerClients::create();
410 provideContentSettingsClientToWorker(workerClients.get(), m_contentSettingsC lient.release()); 410 provideContentSettingsClientToWorker(workerClients.get(), m_contentSettingsC lient.release());
411 provideServiceWorkerGlobalScopeClientToWorker(workerClients.get(), ServiceWo rkerGlobalScopeClientImpl::create(*m_workerContextClient)); 411 provideServiceWorkerGlobalScopeClientToWorker(workerClients.get(), ServiceWo rkerGlobalScopeClientImpl::create(*m_workerContextClient));
412 provideServiceWorkerContainerClientToWorker(workerClients.get(), adoptPtr(m_ workerContextClient->createServiceWorkerProvider())); 412 provideServiceWorkerContainerClientToWorker(workerClients.get(), adoptPtr(m_ workerContextClient->createServiceWorkerProvider()));
413 413
414 // We need to set the CSP to both the shadow page's document and the Service WorkerGlobalScope. 414 // We need to set the CSP to both the shadow page's document and the Service WorkerGlobalScope.
415 document->initContentSecurityPolicy(m_mainScriptLoader->releaseContentSecuri tyPolicy()); 415 document->initContentSecurityPolicy(m_mainScriptLoader->releaseContentSecuri tyPolicy());
416 416
417 KURL scriptURL = m_mainScriptLoader->url(); 417 KURL scriptURL = m_mainScriptLoader->url();
418 OwnPtr<WorkerThreadStartupData> startupData = 418 OwnPtr<WorkerScriptStartupData> startupData =
419 WorkerThreadStartupData::create( 419 WorkerScriptStartupData::create(
420 scriptURL, 420 scriptURL,
421 m_workerStartData.userAgent, 421 m_workerStartData.userAgent,
422 m_mainScriptLoader->script(), 422 m_mainScriptLoader->script(),
423 m_mainScriptLoader->releaseCachedMetadata(), 423 m_mainScriptLoader->releaseCachedMetadata(),
424 startMode, 424 startMode,
425 document->contentSecurityPolicy()->deprecatedHeader(), 425 document->contentSecurityPolicy()->deprecatedHeader(),
426 document->contentSecurityPolicy()->deprecatedHeaderType(), 426 document->contentSecurityPolicy()->deprecatedHeaderType(),
427 starterOrigin, 427 starterOrigin,
428 workerClients.release(), 428 workerClients.release(),
429 static_cast<V8CacheOptions>(m_workerStartData.v8CacheOptions)); 429 static_cast<V8CacheOptions>(m_workerStartData.v8CacheOptions));
430 430
431 m_mainScriptLoader.clear(); 431 m_mainScriptLoader.clear();
432 432
433 m_workerGlobalScopeProxy = ServiceWorkerGlobalScopeProxy::create(*this, *doc ument, *m_workerContextClient); 433 m_workerGlobalScopeProxy = ServiceWorkerGlobalScopeProxy::create(*this, *doc ument, *m_workerContextClient);
434 m_loaderProxy = WorkerLoaderProxy::create(this); 434 m_loaderProxy = WorkerLoaderProxy::create(this);
435 m_workerThread = ServiceWorkerThread::create(m_loaderProxy, *m_workerGlobalS copeProxy, startupData.release()); 435 m_workerScript = ServiceWorkerThread::create(m_loaderProxy, *m_workerGlobalS copeProxy, startupData.release());
436 m_workerThread->start(); 436 m_workerScript->start();
437 m_workerInspectorProxy->workerThreadCreated(document, m_workerThread.get(), scriptURL); 437 m_workerInspectorProxy->workerScriptCreated(document, m_workerScript.get(), scriptURL);
438 } 438 }
439 439
440 } // namespace blink 440 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698