Chromium Code Reviews| Index: Source/web/WebEmbeddedWorkerImpl.cpp |
| diff --git a/Source/web/WebEmbeddedWorkerImpl.cpp b/Source/web/WebEmbeddedWorkerImpl.cpp |
| index d129a546cefe628ef2ca1138b024ae1d511c6960..3c5c9afcdac7d03758c17b5e05a479c0c251b0e9 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,6 +197,11 @@ void WebEmbeddedWorkerImpl::terminateWorkerContext() |
| if (m_askedToTerminate) |
| return; |
| m_askedToTerminate = true; |
| + if (m_loadingShadowPage) { |
| + // This may delete 'this'. |
|
falken
2015/06/16 12:03:43
With the new assert we're really saying "This dele
horo
2015/06/16 23:20:59
Done.
|
| + m_workerContextClient->workerContextFailedToStart(); |
| + return; |
| + } |
| if (m_mainScriptLoader) { |
| m_mainScriptLoader->cancel(); |
| m_mainScriptLoader.clear(); |
| @@ -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( |