diff options
author | jsbell@chromium.org <jsbell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-23 19:47:26 +0000 |
---|---|---|
committer | jsbell@chromium.org <jsbell@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-23 19:47:26 +0000 |
commit | 70bc8cbb3010df498184fd95e771161cf9149330 (patch) | |
tree | ad34a26546200bfe946360f836c9f67adb044c47 /content/browser/service_worker | |
parent | a263ff59f18b9ab39601fafe4e60e44e9a20d20f (diff) | |
download | chromium_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')
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); } |