service_worker_context_wrapper.cc revision effb81e5f8246d0db0270817048dc992db66e9fb
1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/browser/service_worker/service_worker_context_wrapper.h" 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/files/file_path.h" 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/browser/service_worker/service_worker_context_core.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/public/browser/browser_thread.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "webkit/browser/quota/quota_manager_proxy.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace content { 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)ServiceWorkerContextWrapper::ServiceWorkerContextWrapper() { 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)ServiceWorkerContextWrapper::~ServiceWorkerContextWrapper() { 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ServiceWorkerContextWrapper::Init( 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const base::FilePath& user_data_directory, 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) quota::QuotaManagerProxy* quota_manager_proxy) { 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserThread::PostTask( 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserThread::IO, FROM_HERE, 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&ServiceWorkerContextWrapper::Init, this, 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) user_data_directory, 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) make_scoped_refptr(quota_manager_proxy))); 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return; 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(!context_core_); 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context_core_.reset( 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new ServiceWorkerContextCore( 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) user_data_directory, quota_manager_proxy)); 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void ServiceWorkerContextWrapper::Shutdown() { 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserThread::PostTask( 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserThread::IO, FROM_HERE, 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::Bind(&ServiceWorkerContextWrapper::Shutdown, this)); 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return; 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) context_core_.reset(); 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)ServiceWorkerContextCore* ServiceWorkerContextWrapper::context() { 48effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_CURRENTLY_ON(BrowserThread::IO); 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return context_core_.get(); 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 52effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochstatic void FinishRegistrationOnIO( 53effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const ServiceWorkerContext::ResultCallback& continuation, 54effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ServiceWorkerStatusCode status, 55effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch int64 registration_id) { 56effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_CURRENTLY_ON(BrowserThread::IO); 57effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch BrowserThread::PostTask( 58effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch BrowserThread::UI, 59effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch FROM_HERE, 60effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::Bind(continuation, status == SERVICE_WORKER_OK)); 61effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 62effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 63effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid ServiceWorkerContextWrapper::RegisterServiceWorker( 64effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const GURL& pattern, 65effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const GURL& script_url, 66effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch int source_process_id, 67effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const ResultCallback& continuation) { 68effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { 69effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch BrowserThread::PostTask( 70effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch BrowserThread::IO, 71effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch FROM_HERE, 72effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::Bind(&ServiceWorkerContextWrapper::RegisterServiceWorker, 73effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch this, 74effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch pattern, 75effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch script_url, 76effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch source_process_id, 77effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch continuation)); 78effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return; 79effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 80effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 81effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch context()->RegisterServiceWorker( 82effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch pattern, 83effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch script_url, 84effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch source_process_id, 85effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::Bind(&FinishRegistrationOnIO, continuation)); 86effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 87effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 88effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochstatic void FinishUnregistrationOnIO( 89effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const ServiceWorkerContext::ResultCallback& continuation, 90effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ServiceWorkerStatusCode status) { 91effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch DCHECK_CURRENTLY_ON(BrowserThread::IO); 92effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch BrowserThread::PostTask( 93effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch BrowserThread::UI, 94effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch FROM_HERE, 95effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::Bind(continuation, status == SERVICE_WORKER_OK)); 96effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 97effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 98effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid ServiceWorkerContextWrapper::UnregisterServiceWorker( 99effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const GURL& pattern, 100effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch int source_process_id, 101effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch const ResultCallback& continuation) { 102effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { 103effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch BrowserThread::PostTask( 104effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch BrowserThread::IO, 105effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch FROM_HERE, 106effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::Bind(&ServiceWorkerContextWrapper::UnregisterServiceWorker, 107effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch this, 108effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch pattern, 109effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch source_process_id, 110effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch continuation)); 111effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return; 112effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch } 113effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 114effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch context()->UnregisterServiceWorker( 115effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch pattern, 116effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch source_process_id, 117effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch base::Bind(&FinishUnregistrationOnIO, continuation)); 118effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 119effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace content 121