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

Side by Side Diff: content/browser/service_worker/service_worker_version.cc

Issue 493373002: ServiceWorker: Add prepare_callback in DispatchFetchEvent to notify the end of SW preparation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Incorporate the reviewers comment Created 6 years, 4 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 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/service_worker/service_worker_version.h" 5 #include "content/browser/service_worker/service_worker_version.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "base/strings/string16.h" 9 #include "base/strings/string16.h"
10 #include "content/browser/service_worker/embedded_worker_instance.h" 10 #include "content/browser/service_worker/embedded_worker_instance.h"
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 base::Bind(&self::DispatchActivateEventAfterStartWorker, 280 base::Bind(&self::DispatchActivateEventAfterStartWorker,
281 weak_factory_.GetWeakPtr(), 281 weak_factory_.GetWeakPtr(),
282 callback))); 282 callback)));
283 } else { 283 } else {
284 DispatchActivateEventAfterStartWorker(callback); 284 DispatchActivateEventAfterStartWorker(callback);
285 } 285 }
286 } 286 }
287 287
288 void ServiceWorkerVersion::DispatchFetchEvent( 288 void ServiceWorkerVersion::DispatchFetchEvent(
289 const ServiceWorkerFetchRequest& request, 289 const ServiceWorkerFetchRequest& request,
290 const FetchCallback& callback) { 290 const base::Closure& prepare_callback,
291 const FetchCallback& fetch_callback) {
291 DCHECK_EQ(ACTIVATED, status()) << status(); 292 DCHECK_EQ(ACTIVATED, status()) << status();
292 293
293 if (running_status() != RUNNING) { 294 if (running_status() != RUNNING) {
294 // Schedule calling this method after starting the worker. 295 // Schedule calling this method after starting the worker.
295 StartWorker(base::Bind(&RunTaskAfterStartWorker, 296 StartWorker(base::Bind(&RunTaskAfterStartWorker,
296 weak_factory_.GetWeakPtr(), 297 weak_factory_.GetWeakPtr(),
297 base::Bind(&RunErrorFetchCallback, callback), 298 base::Bind(&RunErrorFetchCallback, fetch_callback),
298 base::Bind(&self::DispatchFetchEvent, 299 base::Bind(&self::DispatchFetchEvent,
299 weak_factory_.GetWeakPtr(), 300 weak_factory_.GetWeakPtr(),
300 request, callback))); 301 request,
302 prepare_callback,
303 fetch_callback)));
301 return; 304 return;
302 } 305 }
303 306
304 int request_id = fetch_callbacks_.Add(new FetchCallback(callback)); 307 prepare_callback.Run();
308
309 int request_id = fetch_callbacks_.Add(new FetchCallback(fetch_callback));
305 ServiceWorkerStatusCode status = embedded_worker_->SendMessage( 310 ServiceWorkerStatusCode status = embedded_worker_->SendMessage(
306 ServiceWorkerMsg_FetchEvent(request_id, request)); 311 ServiceWorkerMsg_FetchEvent(request_id, request));
307 if (status != SERVICE_WORKER_OK) { 312 if (status != SERVICE_WORKER_OK) {
308 fetch_callbacks_.Remove(request_id); 313 fetch_callbacks_.Remove(request_id);
309 RunSoon(base::Bind(&RunErrorFetchCallback, 314 RunSoon(base::Bind(&RunErrorFetchCallback,
310 callback, 315 fetch_callback,
311 SERVICE_WORKER_ERROR_FAILED)); 316 SERVICE_WORKER_ERROR_FAILED));
312 } 317 }
313 } 318 }
314 319
315 void ServiceWorkerVersion::DispatchSyncEvent(const StatusCallback& callback) { 320 void ServiceWorkerVersion::DispatchSyncEvent(const StatusCallback& callback) {
316 DCHECK_EQ(ACTIVATED, status()) << status(); 321 DCHECK_EQ(ACTIVATED, status()) << status();
317 322
318 if (!CommandLine::ForCurrentProcess()->HasSwitch( 323 if (!CommandLine::ForCurrentProcess()->HasSwitch(
319 switches::kEnableServiceWorkerSync)) { 324 switches::kEnableServiceWorkerSync)) {
320 callback.Run(SERVICE_WORKER_ERROR_ABORT); 325 callback.Run(SERVICE_WORKER_ERROR_ABORT);
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
690 SetStatus(REDUNDANT); 695 SetStatus(REDUNDANT);
691 StopWorker(base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); 696 StopWorker(base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
692 if (!context_) 697 if (!context_)
693 return; 698 return;
694 std::vector<ServiceWorkerDatabase::ResourceRecord> resources; 699 std::vector<ServiceWorkerDatabase::ResourceRecord> resources;
695 script_cache_map_.GetResources(&resources); 700 script_cache_map_.GetResources(&resources);
696 context_->storage()->PurgeResources(resources); 701 context_->storage()->PurgeResources(resources);
697 } 702 }
698 703
699 } // namespace content 704 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698