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

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

Powered by Google App Engine
This is Rietveld 408576698