Chromium Code Reviews| Index: content/browser/service_worker/service_worker_context_wrapper.cc |
| diff --git a/content/browser/service_worker/service_worker_context_wrapper.cc b/content/browser/service_worker/service_worker_context_wrapper.cc |
| index 5298a24f7a823fa3f444f8e0969e074d601158d5..c5aae6de5c58a9d950f6969c2cd72773cedc9f19 100644 |
| --- a/content/browser/service_worker/service_worker_context_wrapper.cc |
| +++ b/content/browser/service_worker/service_worker_context_wrapper.cc |
| @@ -6,6 +6,7 @@ |
| #include <map> |
| +#include "base/barrier_closure.h" |
| #include "base/files/file_path.h" |
| #include "base/logging.h" |
| #include "base/threading/sequenced_worker_pool.h" |
| @@ -13,6 +14,7 @@ |
| #include "content/browser/service_worker/service_worker_context_core.h" |
| #include "content/browser/service_worker/service_worker_context_observer.h" |
| #include "content/browser/service_worker/service_worker_process_manager.h" |
| +#include "content/browser/service_worker/service_worker_quota_client.h" |
| #include "content/public/browser/browser_context.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "net/url_request/url_request_context_getter.h" |
| @@ -53,6 +55,9 @@ void ServiceWorkerContextWrapper::Init( |
| database_task_runner, |
| disk_cache_thread, |
| quota_manager_proxy); |
| + if (quota_manager_proxy) { |
|
jsbell
2014/10/08 19:26:41
When is this NULL?
dmurph
2014/10/11 00:02:25
Other classes checked if the proxy was null, but i
|
| + quota_manager_proxy->RegisterClient(new ServiceWorkerQuotaClient(this)); |
| + } |
| } |
| void ServiceWorkerContextWrapper::Shutdown() { |
| @@ -183,35 +188,71 @@ void ServiceWorkerContextWrapper::DidGetAllRegistrationsForGetAllOrigins( |
| } |
| namespace { |
|
jsbell
2014/10/08 19:26:41
nit: I think we like having blank lines inside at
dmurph
2014/10/11 00:02:25
clang-format didn't change it
|
| +void SuccessCollectorCallback(const base::Closure& done_closure, |
| + bool* overall_success, bool success) { |
| + if (!success) { |
|
michaeln
2014/10/08 23:09:15
nit: {}'s not needed
dmurph
2014/10/11 00:02:25
I would like them
|
| + *overall_success = false; |
| + } |
| + done_closure.Run(); |
| +} |
| + |
| +void SuccessReportingCallback( |
| + const bool* success, const ServiceWorkerContext::ResultCallback& callback) { |
|
jsbell
2014/10/08 19:26:40
nit: Per chromium style, put each arg on a separat
dmurph
2014/10/11 00:02:25
Done.
|
| + if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { |
|
michaeln
2014/10/08 23:09:15
Do you ever expect this to be called on some other
dmurph
2014/10/11 00:02:25
Yes, this comes from the database runner, so I nee
|
| + BrowserThread::PostTask( |
| + BrowserThread::IO, FROM_HERE, |
| + base::Bind(&SuccessReportingCallback, success, callback)); |
| + return; |
| + } |
| -void EmptySuccessCallback(bool success) { |
| + DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| + bool result = *success; |
| + delete success; |
|
michaeln
2014/10/08 23:09:15
I'm not sure it's safe to assume that the final ca
dmurph
2014/10/11 00:02:25
Done.
|
| + callback.Run(result); |
| } |
| +void EmptySuccessCallback(bool success) {} |
|
jsbell
2014/10/08 19:26:41
nit: leave this with { } wrapped to minimize diff
dmurph
2014/10/11 00:02:25
Done.
|
| } // namespace |
| -void ServiceWorkerContextWrapper::DeleteForOrigin(const GURL& origin_url) { |
| +void ServiceWorkerContextWrapper::DeleteForOrigin( |
| + const GURL& origin_url, const ResultCallback& done) { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| context_core_->storage()->GetAllRegistrations(base::Bind( |
| &ServiceWorkerContextWrapper::DidGetAllRegistrationsForDeleteForOrigin, |
| this, |
| - origin_url)); |
| + origin_url, |
| + done)); |
| +} |
| + |
| +void ServiceWorkerContextWrapper::DeleteForOrigin(const GURL& origin_url) { |
| + DeleteForOrigin(origin_url, base::Bind(&EmptySuccessCallback)); |
| } |
| void ServiceWorkerContextWrapper::DidGetAllRegistrationsForDeleteForOrigin( |
| const GURL& origin, |
| + const ResultCallback& done, |
| const std::vector<ServiceWorkerRegistrationInfo>& registrations) { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| + std::set<GURL> applicable_patterns; |
|
jsbell
2014/10/08 19:26:40
For brevity, how about just 'scopes' ?
(We'll pro
dmurph
2014/10/11 00:02:25
Done.
|
| for (std::vector<ServiceWorkerRegistrationInfo>::const_iterator it = |
| registrations.begin(); |
| it != registrations.end(); |
| ++it) { |
| const ServiceWorkerRegistrationInfo& registration_info = *it; |
| if (origin == registration_info.pattern.GetOrigin()) { |
|
jsbell
2014/10/08 19:26:41
nit: can drop the braces here
dmurph
2014/10/11 00:02:25
I would rather keep them :)
|
| - UnregisterServiceWorker(registration_info.pattern, |
| - base::Bind(&EmptySuccessCallback)); |
| + applicable_patterns.insert(registration_info.pattern); |
| } |
| } |
| + bool *success = new bool(true); |
|
michaeln
2014/10/08 23:09:15
maybe call this overall_success for clarity throug
dmurph
2014/10/11 00:02:25
Done.
|
| + base::Closure barrier = base::BarrierClosure( |
|
michaeln
2014/10/08 23:09:15
neat, hadn't seen barrier closure before
dmurph
2014/10/11 00:02:25
Acknowledged.
|
| + applicable_patterns.size(), |
| + base::Bind(&SuccessReportingCallback, success, done)); |
|
michaeln
2014/10/08 23:09:15
base::Owned(overall_success) here or maybe base::P
dmurph
2014/10/11 00:02:25
Done.
|
| + |
| + for (const GURL& pattern : applicable_patterns) { |
| + UnregisterServiceWorker( |
| + pattern, base::Bind(&SuccessCollectorCallback, barrier, success)); |
|
michaeln
2014/10/08 23:09:15
base::Unretained(overall_success) here?
dmurph
2014/10/11 00:02:25
Unneeded. Only applicable to refcounted objects o
|
| + } |
| } |
| void ServiceWorkerContextWrapper::AddObserver( |