Chromium Code Reviews| Index: content/browser/service_worker/service_worker_context_core.cc |
| diff --git a/content/browser/service_worker/service_worker_context_core.cc b/content/browser/service_worker/service_worker_context_core.cc |
| index 22ae50070557838d6d3f29d6b7a80abf9bb36805..4eb9d9a448c12cdf5dc3bd7ddcebf178199a4fb4 100644 |
| --- a/content/browser/service_worker/service_worker_context_core.cc |
| +++ b/content/browser/service_worker/service_worker_context_core.cc |
| @@ -6,28 +6,29 @@ |
| #include "base/command_line.h" |
| #include "base/files/file_path.h" |
| +#include "base/strings/string_util.h" |
| #include "content/browser/service_worker/service_worker_provider_host.h" |
| +#include "content/browser/service_worker/service_worker_register_job.h" |
| +#include "content/browser/service_worker/service_worker_registration.h" |
| +#include "content/browser/service_worker/service_worker_storage.h" |
| +#include "content/public/browser/browser_thread.h" |
| #include "content/public/common/content_switches.h" |
| -#include "webkit/browser/quota/quota_manager.h" |
| +#include "url/gurl.h" |
| namespace content { |
| -namespace { |
| - |
| -const base::FilePath::CharType kServiceWorkerDirectory[] = |
| - FILE_PATH_LITERAL("ServiceWorker"); |
| - |
| -} // namespace |
| - |
| ServiceWorkerContextCore::ServiceWorkerContextCore( |
| - const base::FilePath& user_data_directory, |
| + const base::FilePath& path, |
| quota::QuotaManagerProxy* quota_manager_proxy) |
| - : quota_manager_proxy_(quota_manager_proxy) { |
| - if (!user_data_directory.empty()) |
| - path_ = user_data_directory.Append(kServiceWorkerDirectory); |
| -} |
| + : storage_(new ServiceWorkerStorage(path, quota_manager_proxy)), |
| + is_shutdown_(false) {} |
| -ServiceWorkerContextCore::~ServiceWorkerContextCore() { |
| +ServiceWorkerContextCore::~ServiceWorkerContextCore() { DCHECK(is_shutdown_); } |
| + |
| +void ServiceWorkerContextCore::Shutdown() { |
| + storage_->Shutdown(); |
| + storage_.reset(); |
| + is_shutdown_ = true; |
| } |
| ServiceWorkerProviderHost* ServiceWorkerContextCore::GetProviderHost( |
| @@ -67,4 +68,50 @@ bool ServiceWorkerContextCore::IsEnabled() { |
| switches::kEnableServiceWorker); |
| } |
| +void ServiceWorkerContextCore::RegistrationComplete( |
| + const ServiceWorkerContextCore::RegistrationCallback& callback, |
| + ServiceWorkerStorage::RegistrationStatus status, |
| + const scoped_refptr<ServiceWorkerRegistration>& registration) { |
| + if (status != ServiceWorkerStorage::REGISTRATION_OK) |
| + callback.Run(REGISTER_FAILED, -1L); |
| + |
| + callback.Run(REGISTER_COMPLETE, registration->id()); |
| +} |
| + |
| +void ServiceWorkerContextCore::UnregistrationComplete( |
| + const UnregistrationCallback& callback, |
| + ServiceWorkerStorage::RegistrationStatus status) { |
| + // Unregistering a non-existent registration is a no-op. |
| + if (status == ServiceWorkerStorage::REGISTRATION_OK || |
| + status == ServiceWorkerStorage::REGISTRATION_NOT_FOUND) |
| + callback.Run(UNREGISTER_COMPLETE); |
| + else |
| + callback.Run(UNREGISTER_FAILED); |
| +} |
| + |
| +void ServiceWorkerContextCore::RegisterServiceWorker( |
|
kinuko
2013/11/27 03:45:23
nit: method order.
alecflett
2013/12/02 16:11:35
Done.
|
| + const GURL& pattern, |
| + const GURL& script_url, |
| + const RegistrationCallback& callback) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| + |
| + storage_->Register(pattern, |
| + script_url, |
| + base::Bind(&ServiceWorkerContextCore::RegistrationComplete, |
| + AsWeakPtr(), |
| + callback)); |
| +} |
| + |
| +void ServiceWorkerContextCore::UnregisterServiceWorker( |
| + const GURL& pattern, |
| + const UnregistrationCallback& callback) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| + |
| + storage_->Unregister( |
| + pattern, |
| + base::Bind(&ServiceWorkerContextCore::UnregistrationComplete, |
| + AsWeakPtr(), |
| + callback)); |
| +} |
| + |
| } // namespace content |