summaryrefslogtreecommitdiffstats
path: root/content/browser/service_worker
diff options
context:
space:
mode:
authorjsbell@chromium.org <jsbell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-23 19:47:26 +0000
committerjsbell@chromium.org <jsbell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-23 19:47:26 +0000
commit70bc8cbb3010df498184fd95e771161cf9149330 (patch)
treead34a26546200bfe946360f836c9f67adb044c47 /content/browser/service_worker
parenta263ff59f18b9ab39601fafe4e60e44e9a20d20f (diff)
downloadchromium_src-70bc8cbb3010df498184fd95e771161cf9149330.zip
chromium_src-70bc8cbb3010df498184fd95e771161cf9149330.tar.gz
chromium_src-70bc8cbb3010df498184fd95e771161cf9149330.tar.bz2
Service Worker unregistration should not fail if not found
Spec was recently updated - a unregister call with no matching registration should not fail. This makes unregister calls idempotent and adhere to Promise conventions. https://github.com/slightlyoff/ServiceWorker/issues/233 BUG=365926 Review URL: https://codereview.chromium.org/247773004 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@265709 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/service_worker')
-rw-r--r--content/browser/service_worker/service_worker_browsertest.cc4
-rw-r--r--content/browser/service_worker/service_worker_job_unittest.cc13
-rw-r--r--content/browser/service_worker/service_worker_unregister_job.cc6
3 files changed, 13 insertions, 10 deletions
diff --git a/content/browser/service_worker/service_worker_browsertest.cc b/content/browser/service_worker/service_worker_browsertest.cc
index 1ccb955..6feea38 100644
--- a/content/browser/service_worker/service_worker_browsertest.cc
+++ b/content/browser/service_worker/service_worker_browsertest.cc
@@ -582,14 +582,14 @@ class ServiceWorkerBlackBoxBrowserTest : public ServiceWorkerBrowserTest {
IN_PROC_BROWSER_TEST_F(ServiceWorkerBlackBoxBrowserTest, Registration) {
const std::string kWorkerUrl = "/service_worker/fetch_event.js";
- // Unregistering nothing should return false.
+ // Unregistering nothing should return true.
{
base::RunLoop run_loop;
public_context()->UnregisterServiceWorker(
embedded_test_server()->GetURL("/*"),
RenderProcessID(),
base::Bind(&ServiceWorkerBlackBoxBrowserTest::ExpectResultAndRun,
- false,
+ true,
run_loop.QuitClosure()));
run_loop.Run();
}
diff --git a/content/browser/service_worker/service_worker_job_unittest.cc b/content/browser/service_worker/service_worker_job_unittest.cc
index 39f1b94..de5e612 100644
--- a/content/browser/service_worker/service_worker_job_unittest.cc
+++ b/content/browser/service_worker/service_worker_job_unittest.cc
@@ -272,10 +272,9 @@ TEST_F(ServiceWorkerJobTest, Unregister_NothingRegistered) {
GURL pattern("http://www.example.com/*");
bool called;
- job_coordinator()->Unregister(
- pattern,
- render_process_id_,
- SaveUnregistration(SERVICE_WORKER_ERROR_NOT_FOUND, &called));
+ job_coordinator()->Unregister(pattern,
+ render_process_id_,
+ SaveUnregistration(SERVICE_WORKER_OK, &called));
ASSERT_FALSE(called);
base::RunLoop().RunUntilIdle();
@@ -567,15 +566,13 @@ TEST_F(ServiceWorkerJobTest, ParallelUnreg) {
job_coordinator()->Unregister(
pattern,
render_process_id_,
- SaveUnregistration(SERVICE_WORKER_ERROR_NOT_FOUND,
- &unregistration1_called));
+ SaveUnregistration(SERVICE_WORKER_OK, &unregistration1_called));
bool unregistration2_called = false;
job_coordinator()->Unregister(
pattern,
render_process_id_,
- SaveUnregistration(SERVICE_WORKER_ERROR_NOT_FOUND,
- &unregistration2_called));
+ SaveUnregistration(SERVICE_WORKER_OK, &unregistration2_called));
ASSERT_FALSE(unregistration1_called);
ASSERT_FALSE(unregistration2_called);
diff --git a/content/browser/service_worker/service_worker_unregister_job.cc b/content/browser/service_worker/service_worker_unregister_job.cc
index 9b2addf..5866c78 100644
--- a/content/browser/service_worker/service_worker_unregister_job.cc
+++ b/content/browser/service_worker/service_worker_unregister_job.cc
@@ -59,6 +59,12 @@ void ServiceWorkerUnregisterJob::DeleteExistingRegistration(
return;
}
+ if (status == SERVICE_WORKER_ERROR_NOT_FOUND) {
+ DCHECK(!registration);
+ Complete(SERVICE_WORKER_OK);
+ return;
+ }
+
Complete(status);
}