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

Unified Diff: Source/web/WebEmbeddedWorkerImpl.cpp

Issue 1187813010: Check whether the shadow page has been loaded in WebEmbeddedWorkerImpl::terminateWorkerContext(). (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: add tests Created 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/web/WebEmbeddedWorkerImpl.h ('k') | Source/web/WebEmbeddedWorkerImplTest.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/web/WebEmbeddedWorkerImpl.cpp
diff --git a/Source/web/WebEmbeddedWorkerImpl.cpp b/Source/web/WebEmbeddedWorkerImpl.cpp
index d129a546cefe628ef2ca1138b024ae1d511c6960..454773ce0d33fe3312862959bbf95b728ed3c799 100644
--- a/Source/web/WebEmbeddedWorkerImpl.cpp
+++ b/Source/web/WebEmbeddedWorkerImpl.cpp
@@ -143,6 +143,7 @@ WebEmbeddedWorkerImpl::WebEmbeddedWorkerImpl(PassOwnPtr<WebServiceWorkerContextC
, m_workerInspectorProxy(WorkerInspectorProxy::create())
, m_webView(0)
, m_mainFrame(0)
+ , m_loadingShadowPage(false)
, m_askedToTerminate(false)
, m_pauseAfterDownloadState(DontPauseAfterDownload)
, m_waitingForDebuggerState(NotWaitingForDebugger)
@@ -196,15 +197,20 @@ void WebEmbeddedWorkerImpl::terminateWorkerContext()
if (m_askedToTerminate)
return;
m_askedToTerminate = true;
+ if (m_loadingShadowPage) {
+ // This deletes 'this'.
+ m_workerContextClient->workerContextFailedToStart();
+ return;
+ }
if (m_mainScriptLoader) {
m_mainScriptLoader->cancel();
m_mainScriptLoader.clear();
- // This may delete 'this'.
+ // This deletes 'this'.
m_workerContextClient->workerContextFailedToStart();
return;
}
if (m_pauseAfterDownloadState == IsPausedAfterDownload) {
- // This may delete 'this'.
+ // This deletes 'this'.
m_workerContextClient->workerContextFailedToStart();
return;
}
@@ -326,6 +332,7 @@ void WebEmbeddedWorkerImpl::loadShadowPage()
CString content("");
int length = static_cast<int>(content.length());
RefPtr<SharedBuffer> buffer(SharedBuffer::create(content.data(), length));
+ m_loadingShadowPage = true;
m_mainFrame->frame()->loader().load(FrameLoadRequest(0, ResourceRequest(m_workerStartData.scriptURL), SubstituteData(buffer, "text/html", "UTF-8", KURL())));
}
@@ -343,6 +350,9 @@ void WebEmbeddedWorkerImpl::didFinishDocumentLoad(WebLocalFrame* frame)
ASSERT(!m_networkProvider);
ASSERT(m_mainFrame);
ASSERT(m_workerContextClient);
+ ASSERT(m_loadingShadowPage);
+ ASSERT(!m_askedToTerminate);
+ m_loadingShadowPage = false;
m_networkProvider = adoptPtr(m_workerContextClient->createServiceWorkerNetworkProvider(frame->dataSource()));
m_mainScriptLoader = Loader::create();
m_mainScriptLoader->load(
@@ -375,7 +385,7 @@ void WebEmbeddedWorkerImpl::onScriptLoaderFinished()
if (m_mainScriptLoader->failed()) {
m_mainScriptLoader.clear();
- // This may delete 'this'.
+ // This deletes 'this'.
m_workerContextClient->workerContextFailedToStart();
return;
}
« no previous file with comments | « Source/web/WebEmbeddedWorkerImpl.h ('k') | Source/web/WebEmbeddedWorkerImplTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698