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

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

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