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

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

Issue 1675613002: service worker: use 200 OK for update requests even in the no update case (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: asan and fix win compile? Created 4 years, 10 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) 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 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 } 81 }
82 82
83 WebEmbeddedWorkerImpl::WebEmbeddedWorkerImpl(PassOwnPtr<WebServiceWorkerContextC lient> client, PassOwnPtr<WebWorkerContentSettingsClientProxy> ContentSettingsCl ient) 83 WebEmbeddedWorkerImpl::WebEmbeddedWorkerImpl(PassOwnPtr<WebServiceWorkerContextC lient> client, PassOwnPtr<WebWorkerContentSettingsClientProxy> ContentSettingsCl ient)
84 : m_workerContextClient(client) 84 : m_workerContextClient(client)
85 , m_contentSettingsClient(ContentSettingsClient) 85 , m_contentSettingsClient(ContentSettingsClient)
86 , m_workerInspectorProxy(WorkerInspectorProxy::create()) 86 , m_workerInspectorProxy(WorkerInspectorProxy::create())
87 , m_webView(nullptr) 87 , m_webView(nullptr)
88 , m_mainFrame(nullptr) 88 , m_mainFrame(nullptr)
89 , m_loadingShadowPage(false) 89 , m_loadingShadowPage(false)
90 , m_askedToTerminate(false) 90 , m_askedToTerminate(false)
91 , m_pauseAfterDownloadState(DontPauseAfterDownload)
91 , m_waitingForDebuggerState(NotWaitingForDebugger) 92 , m_waitingForDebuggerState(NotWaitingForDebugger)
92 { 93 {
93 runningWorkerInstances().add(this); 94 runningWorkerInstances().add(this);
94 } 95 }
95 96
96 WebEmbeddedWorkerImpl::~WebEmbeddedWorkerImpl() 97 WebEmbeddedWorkerImpl::~WebEmbeddedWorkerImpl()
97 { 98 {
98 // Prevent onScriptLoaderFinished from deleting 'this'. 99 // Prevent onScriptLoaderFinished from deleting 'this'.
99 m_askedToTerminate = true; 100 m_askedToTerminate = true;
100 101
(...skipping 16 matching lines...) Expand all
117 m_mainFrame->close(); 118 m_mainFrame->close();
118 if (m_loaderProxy) 119 if (m_loaderProxy)
119 m_loaderProxy->detachProvider(this); 120 m_loaderProxy->detachProvider(this);
120 } 121 }
121 122
122 void WebEmbeddedWorkerImpl::startWorkerContext( 123 void WebEmbeddedWorkerImpl::startWorkerContext(
123 const WebEmbeddedWorkerStartData& data) 124 const WebEmbeddedWorkerStartData& data)
124 { 125 {
125 ASSERT(!m_askedToTerminate); 126 ASSERT(!m_askedToTerminate);
126 ASSERT(!m_mainScriptLoader); 127 ASSERT(!m_mainScriptLoader);
128 ASSERT(m_pauseAfterDownloadState == DontPauseAfterDownload);
127 m_workerStartData = data; 129 m_workerStartData = data;
130 if (data.pauseAfterDownloadMode == WebEmbeddedWorkerStartData::PauseAfterDow nload)
131 m_pauseAfterDownloadState = DoPauseAfterDownload;
128 prepareShadowPageForLoader(); 132 prepareShadowPageForLoader();
129 } 133 }
130 134
131 void WebEmbeddedWorkerImpl::terminateWorkerContext() 135 void WebEmbeddedWorkerImpl::terminateWorkerContext()
132 { 136 {
133 if (m_askedToTerminate) 137 if (m_askedToTerminate)
134 return; 138 return;
135 m_askedToTerminate = true; 139 m_askedToTerminate = true;
136 if (m_loadingShadowPage) { 140 if (m_loadingShadowPage) {
137 // This deletes 'this'. 141 // This deletes 'this'.
138 m_workerContextClient->workerContextFailedToStart(); 142 m_workerContextClient->workerContextFailedToStart();
139 return; 143 return;
140 } 144 }
141 if (m_mainScriptLoader) { 145 if (m_mainScriptLoader) {
142 m_mainScriptLoader->cancel(); 146 m_mainScriptLoader->cancel();
143 m_mainScriptLoader.clear(); 147 m_mainScriptLoader.clear();
144 // This deletes 'this'. 148 // This deletes 'this'.
145 m_workerContextClient->workerContextFailedToStart(); 149 m_workerContextClient->workerContextFailedToStart();
146 return; 150 return;
147 } 151 }
148 if (!m_workerThread) { 152 if (!m_workerThread) {
149 // The worker thread has not been created yet if the worker is asked to 153 // The worker thread has not been created yet if the worker is asked to
150 // terminate during waiting for debugger. 154 // terminate during waiting for debugger or paused after download.
151 ASSERT(m_workerStartData.waitForDebuggerMode == WebEmbeddedWorkerStartDa ta::WaitForDebugger); 155 ASSERT(m_workerStartData.waitForDebuggerMode == WebEmbeddedWorkerStartDa ta::WaitForDebugger || m_pauseAfterDownloadState == IsPausedAfterDownload);
152 // This deletes 'this'. 156 // This deletes 'this'.
153 m_workerContextClient->workerContextFailedToStart(); 157 m_workerContextClient->workerContextFailedToStart();
154 return; 158 return;
155 } 159 }
156 m_workerThread->terminate(); 160 m_workerThread->terminate();
157 m_workerInspectorProxy->workerThreadTerminated(); 161 m_workerInspectorProxy->workerThreadTerminated();
158 } 162 }
159 163
164 void WebEmbeddedWorkerImpl::resumeAfterDownload()
165 {
166 ASSERT(!m_askedToTerminate);
167 ASSERT(m_pauseAfterDownloadState == IsPausedAfterDownload);
168
169 m_pauseAfterDownloadState = DontPauseAfterDownload;
170 startWorkerThread();
171 }
172
160 void WebEmbeddedWorkerImpl::attachDevTools(const WebString& hostId, int sessionI d) 173 void WebEmbeddedWorkerImpl::attachDevTools(const WebString& hostId, int sessionI d)
161 { 174 {
162 WebDevToolsAgent* devtoolsAgent = m_mainFrame->devToolsAgent(); 175 WebDevToolsAgent* devtoolsAgent = m_mainFrame->devToolsAgent();
163 if (devtoolsAgent) 176 if (devtoolsAgent)
164 devtoolsAgent->attach(hostId, sessionId); 177 devtoolsAgent->attach(hostId, sessionId);
165 } 178 }
166 179
167 void WebEmbeddedWorkerImpl::reattachDevTools(const WebString& hostId, int sessio nId, const WebString& savedState) 180 void WebEmbeddedWorkerImpl::reattachDevTools(const WebString& hostId, int sessio nId, const WebString& savedState)
168 { 181 {
169 WebDevToolsAgent* devtoolsAgent = m_mainFrame->devToolsAgent(); 182 WebDevToolsAgent* devtoolsAgent = m_mainFrame->devToolsAgent();
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
230 settings->setStrictMixedContentChecking(true); 243 settings->setStrictMixedContentChecking(true);
231 settings->setAllowDisplayOfInsecureContent(false); 244 settings->setAllowDisplayOfInsecureContent(false);
232 settings->setAllowRunningOfInsecureContent(false); 245 settings->setAllowRunningOfInsecureContent(false);
233 m_mainFrame = toWebLocalFrameImpl(WebLocalFrame::create(WebTreeScopeType::Do cument, this)); 246 m_mainFrame = toWebLocalFrameImpl(WebLocalFrame::create(WebTreeScopeType::Do cument, this));
234 m_webView->setMainFrame(m_mainFrame.get()); 247 m_webView->setMainFrame(m_mainFrame.get());
235 m_mainFrame->setDevToolsAgentClient(this); 248 m_mainFrame->setDevToolsAgentClient(this);
236 249
237 // If we were asked to wait for debugger then it is the good time to do that . 250 // If we were asked to wait for debugger then it is the good time to do that .
238 m_workerContextClient->workerReadyForInspection(); 251 m_workerContextClient->workerReadyForInspection();
239 if (m_workerStartData.waitForDebuggerMode == WebEmbeddedWorkerStartData::Wai tForDebugger) { 252 if (m_workerStartData.waitForDebuggerMode == WebEmbeddedWorkerStartData::Wai tForDebugger) {
240 m_waitingForDebuggerState = WaitingForDebuggerBeforeLoadingScript; 253 m_waitingForDebuggerState = WaitingForDebugger;
241 return; 254 return;
242 } 255 }
243 256
244 loadShadowPage(); 257 loadShadowPage();
245 } 258 }
246 259
247 void WebEmbeddedWorkerImpl::loadShadowPage() 260 void WebEmbeddedWorkerImpl::loadShadowPage()
248 { 261 {
249 // Construct substitute data source for the 'shadow page'. We only need it 262 // Construct substitute data source for the 'shadow page'. We only need it
250 // to have same origin as the worker so the loading checks work correctly. 263 // to have same origin as the worker so the loading checks work correctly.
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 // invoked and |this| might have been deleted at this point. 297 // invoked and |this| might have been deleted at this point.
285 } 298 }
286 299
287 void WebEmbeddedWorkerImpl::sendProtocolMessage(int sessionId, int callId, const WebString& message, const WebString& state) 300 void WebEmbeddedWorkerImpl::sendProtocolMessage(int sessionId, int callId, const WebString& message, const WebString& state)
288 { 301 {
289 m_workerContextClient->sendDevToolsMessage(sessionId, callId, message, state ); 302 m_workerContextClient->sendDevToolsMessage(sessionId, callId, message, state );
290 } 303 }
291 304
292 void WebEmbeddedWorkerImpl::resumeStartup() 305 void WebEmbeddedWorkerImpl::resumeStartup()
293 { 306 {
294 WaitingForDebuggerState waitingForDebuggerState = m_waitingForDebuggerState; 307 bool wasWaiting = (m_waitingForDebuggerState == WaitingForDebugger);
295 m_waitingForDebuggerState = NotWaitingForDebugger; 308 m_waitingForDebuggerState = NotWaitingForDebugger;
296 if (waitingForDebuggerState == WaitingForDebuggerBeforeLoadingScript) 309 if (wasWaiting)
297 loadShadowPage(); 310 loadShadowPage();
298 else if (waitingForDebuggerState == WaitingForDebuggerAfterScriptLoaded)
299 startWorkerThread();
300 } 311 }
301 312
302 void WebEmbeddedWorkerImpl::onScriptLoaderFinished() 313 void WebEmbeddedWorkerImpl::onScriptLoaderFinished()
303 { 314 {
304 ASSERT(m_mainScriptLoader); 315 ASSERT(m_mainScriptLoader);
305
306 if (m_askedToTerminate) 316 if (m_askedToTerminate)
307 return; 317 return;
308 318
309 if (m_mainScriptLoader->failed()) { 319 if (m_mainScriptLoader->failed()) {
310 m_mainScriptLoader.clear(); 320 m_mainScriptLoader.clear();
311 // This deletes 'this'. 321 // This deletes 'this'.
312 m_workerContextClient->workerContextFailedToStart(); 322 m_workerContextClient->workerContextFailedToStart();
313 return; 323 return;
314 } 324 }
315 m_workerContextClient->workerScriptLoaded(); 325 m_workerContextClient->workerScriptLoaded();
316 326
317 DEFINE_STATIC_LOCAL(CustomCountHistogram, scriptSizeHistogram, ("ServiceWork er.ScriptSize", 1000, 5000000, 50)); 327 DEFINE_STATIC_LOCAL(CustomCountHistogram, scriptSizeHistogram, ("ServiceWork er.ScriptSize", 1000, 5000000, 50));
318 scriptSizeHistogram.count(m_mainScriptLoader->script().length()); 328 scriptSizeHistogram.count(m_mainScriptLoader->script().length());
319 if (m_mainScriptLoader->cachedMetadata()) { 329 if (m_mainScriptLoader->cachedMetadata()) {
320 DEFINE_STATIC_LOCAL(CustomCountHistogram, scriptCachedMetadataSizeHistog ram, ("ServiceWorker.ScriptCachedMetadataSize", 1000, 50000000, 50)); 330 DEFINE_STATIC_LOCAL(CustomCountHistogram, scriptCachedMetadataSizeHistog ram, ("ServiceWorker.ScriptCachedMetadataSize", 1000, 50000000, 50));
321 scriptCachedMetadataSizeHistogram.count(m_mainScriptLoader->cachedMetada ta()->size()); 331 scriptCachedMetadataSizeHistogram.count(m_mainScriptLoader->cachedMetada ta()->size());
322 } 332 }
323 333
334 if (m_pauseAfterDownloadState == DoPauseAfterDownload) {
335 m_pauseAfterDownloadState = IsPausedAfterDownload;
336 return;
337 }
324 startWorkerThread(); 338 startWorkerThread();
325 } 339 }
326 340
327 void WebEmbeddedWorkerImpl::startWorkerThread() 341 void WebEmbeddedWorkerImpl::startWorkerThread()
328 { 342 {
343 ASSERT(m_pauseAfterDownloadState == DontPauseAfterDownload);
329 ASSERT(!m_askedToTerminate); 344 ASSERT(!m_askedToTerminate);
330 345
331 Document* document = m_mainFrame->frame()->document(); 346 Document* document = m_mainFrame->frame()->document();
332 347
333 WorkerThreadStartMode startMode = DontPauseWorkerGlobalScopeOnStart; 348 WorkerThreadStartMode startMode = DontPauseWorkerGlobalScopeOnStart;
334 if (InspectorInstrumentation::shouldPauseDedicatedWorkerOnStart(document)) 349 if (InspectorInstrumentation::shouldPauseDedicatedWorkerOnStart(document))
335 startMode = PauseWorkerGlobalScopeOnStart; 350 startMode = PauseWorkerGlobalScopeOnStart;
336 351
337 // FIXME: this document's origin is pristine and without any extra privilege s. (crbug.com/254993) 352 // FIXME: this document's origin is pristine and without any extra privilege s. (crbug.com/254993)
338 SecurityOrigin* starterOrigin = document->securityOrigin(); 353 SecurityOrigin* starterOrigin = document->securityOrigin();
(...skipping 21 matching lines...) Expand all
360 m_mainScriptLoader.clear(); 375 m_mainScriptLoader.clear();
361 376
362 m_workerGlobalScopeProxy = ServiceWorkerGlobalScopeProxy::create(*this, *doc ument, *m_workerContextClient); 377 m_workerGlobalScopeProxy = ServiceWorkerGlobalScopeProxy::create(*this, *doc ument, *m_workerContextClient);
363 m_loaderProxy = WorkerLoaderProxy::create(this); 378 m_loaderProxy = WorkerLoaderProxy::create(this);
364 m_workerThread = ServiceWorkerThread::create(m_loaderProxy, *m_workerGlobalS copeProxy); 379 m_workerThread = ServiceWorkerThread::create(m_loaderProxy, *m_workerGlobalS copeProxy);
365 m_workerThread->start(startupData.release()); 380 m_workerThread->start(startupData.release());
366 m_workerInspectorProxy->workerThreadCreated(document, m_workerThread.get(), scriptURL); 381 m_workerInspectorProxy->workerThreadCreated(document, m_workerThread.get(), scriptURL);
367 } 382 }
368 383
369 } // namespace blink 384 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/web/WebEmbeddedWorkerImpl.h ('k') | third_party/WebKit/Source/web/WebEmbeddedWorkerImplTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698