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

Unified Diff: content/browser/service_worker/service_worker_register_job.cc

Issue 62203007: Implement memory-persistent registration (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Working version Created 7 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/service_worker/service_worker_register_job.cc
diff --git a/content/browser/service_worker/service_worker_register_job.cc b/content/browser/service_worker/service_worker_register_job.cc
new file mode 100644
index 0000000000000000000000000000000000000000..7d92e9397082f77f37610d5110b05660405ddda8
--- /dev/null
+++ b/content/browser/service_worker/service_worker_register_job.cc
@@ -0,0 +1,80 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/service_worker/service_worker_register_job.h"
+
+#include "content/browser/service_worker/service_worker_registration.h"
+#include "content/public/browser/browser_thread.h"
+#include "url/gurl.h"
+
+namespace content {
+
+ServiceWorkerRegisterJob::ServiceWorkerRegisterJob(
+ const base::WeakPtr<ServiceWorkerStorage>& storage,
+ const RegistrationCompleteCallback& callback)
+ : storage_(storage), callback_(callback), weak_factory_(this) {}
+ServiceWorkerRegisterJob::~ServiceWorkerRegisterJob() {}
+
+void ServiceWorkerRegisterJob::StartRegister(const GURL& pattern,
+ const GURL& script_url) {
+ storage_->FindRegistrationForPattern(
+ pattern,
+ base::Bind(
+ &ServiceWorkerRegisterJob::UnregisterPatternAndContinue,
+ weak_factory_.GetWeakPtr(),
+ pattern,
+ script_url,
+ base::Bind(&ServiceWorkerRegisterJob::RegisterPatternAndContinue,
+ weak_factory_.GetWeakPtr(),
+ pattern,
+ script_url,
+ base::Bind(&ServiceWorkerRegisterJob::RegisterComplete,
+ weak_factory_.GetWeakPtr()))));
kinuko 2013/11/25 08:17:10 In this way of chaining when something very bad ha
alecflett 2013/11/26 00:19:14 yes - though if we add the status field like you s
kinuko 2013/11/26 08:02:00 Ok, with status code we can short-cut, which may n
+}
+
+void ServiceWorkerRegisterJob::StartUnregister(const GURL& pattern) {
+ storage_->FindRegistrationForPattern(
+ pattern,
+ base::Bind(&ServiceWorkerRegisterJob::UnregisterPatternAndContinue,
+ weak_factory_.GetWeakPtr(),
+ pattern,
+ GURL(),
+ base::Bind(&ServiceWorkerRegisterJob::UnregisterComplete,
+ weak_factory_.GetWeakPtr())));
+}
+
+void ServiceWorkerRegisterJob::UnregisterComplete() {
+ callback_.Run(this, NULL);
+}
+void ServiceWorkerRegisterJob::RegisterComplete(
+ const scoped_refptr<ServiceWorkerRegistration>& registration) {
+ callback_.Run(this, registration.get());
+}
+
+void ServiceWorkerRegisterJob::RegisterPatternAndContinue(
+ const GURL& pattern,
+ const GURL& script_url,
+ const ServiceWorkerStorage::ResponseCallback callback) {
+ if (storage_) {
kinuko 2013/11/25 08:17:10 storage_ owns this job, so technically this should
alecflett 2013/11/26 00:19:14 Well this allows storage_ to go away in the middle
kinuko 2013/11/26 08:02:00 But storage class does own this Job instance via S
+ scoped_refptr<ServiceWorkerRegistration> registration =
+ storage_->RegisterInternal(pattern, script_url);
+ BrowserThread::PostTask(
+ BrowserThread::IO, FROM_HERE, base::Bind(callback, registration));
+ }
+}
+
+void ServiceWorkerRegisterJob::UnregisterPatternAndContinue(
+ const GURL& pattern,
+ const GURL& new_script_url,
+ const base::Closure& callback,
+ const scoped_refptr<ServiceWorkerRegistration>& previous_registration) {
+ if (previous_registration &&
+ (new_script_url.is_empty() ||
+ previous_registration->script_url() != new_script_url)) {
+ storage_->UnregisterInternal(pattern);
+ }
+ BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, callback);
+}
+
+} // namespace content

Powered by Google App Engine
This is Rietveld 408576698