Index: content/browser/service_worker/service_worker_request_handler.cc |
diff --git a/content/browser/service_worker/service_worker_request_handler.cc b/content/browser/service_worker/service_worker_request_handler.cc |
index 2e3c5c4623350cef1e8ead5bc3a06fc3afdd739b..4fbd76e78ea4ea37b4121547dcaed7dc927efe1b 100644 |
--- a/content/browser/service_worker/service_worker_request_handler.cc |
+++ b/content/browser/service_worker/service_worker_request_handler.cc |
@@ -59,13 +59,11 @@ void ServiceWorkerRequestHandler::InitializeHandler( |
if (!provider_host) |
return; |
- if (!provider_host->ShouldHandleRequest(resource_type)) |
+ scoped_ptr<ServiceWorkerRequestHandler> handler( |
+ provider_host->CreateRequestHandler(resource_type)); |
+ if (!handler) |
return; |
- scoped_ptr<ServiceWorkerRequestHandler> handler( |
- new ServiceWorkerRequestHandler(context_wrapper->context()->AsWeakPtr(), |
- provider_host->AsWeakPtr(), |
- resource_type)); |
request->SetUserData(&kUserDataKey, handler.release()); |
} |
@@ -84,94 +82,13 @@ ServiceWorkerRequestHandler::CreateInterceptor() { |
ServiceWorkerRequestHandler::~ServiceWorkerRequestHandler() { |
} |
-net::URLRequestJob* ServiceWorkerRequestHandler::MaybeCreateJob( |
- net::URLRequest* request, |
- net::NetworkDelegate* network_delegate) { |
- if (!context_ || !provider_host_) { |
- // We can't do anything other than to fall back to network. |
- job_ = NULL; |
- return NULL; |
- } |
- |
- // This may get called multiple times for original and redirect requests: |
- // A. original request case: job_ is null, no previous location info. |
- // B. redirect or restarted request case: |
- // a) job_ is non-null if the previous location was forwarded to SW. |
- // b) job_ is null if the previous location was fallback. |
- // c) job_ is non-null if additional restart was required to fall back. |
- |
- // We've come here by restart, we already have original request and it |
- // tells we should fallback to network. (Case B-c) |
- if (job_.get() && job_->ShouldFallbackToNetwork()) { |
- job_ = NULL; |
- return NULL; |
- } |
- |
- // It's for original request (A) or redirect case (B-a or B-b). |
- DCHECK(!job_.get() || job_->ShouldForwardToServiceWorker()); |
- |
- job_ = new ServiceWorkerURLRequestJob(request, network_delegate, |
- provider_host_); |
- if (ServiceWorkerUtils::IsMainResourceType(resource_type_)) |
- PrepareForMainResource(request->url()); |
- else |
- PrepareForSubResource(); |
- |
- if (job_->ShouldFallbackToNetwork()) { |
- // If we know we can fallback to network at this point (in case |
- // the storage lookup returned immediately), just return NULL here to |
- // fallback to network. |
- job_ = NULL; |
- return NULL; |
- } |
- |
- return job_.get(); |
-} |
- |
ServiceWorkerRequestHandler::ServiceWorkerRequestHandler( |
base::WeakPtr<ServiceWorkerContextCore> context, |
base::WeakPtr<ServiceWorkerProviderHost> provider_host, |
ResourceType::Type resource_type) |
: context_(context), |
provider_host_(provider_host), |
- resource_type_(resource_type), |
- weak_factory_(this) { |
-} |
- |
-void ServiceWorkerRequestHandler::PrepareForMainResource(const GURL& url) { |
- DCHECK(job_.get()); |
- DCHECK(context_); |
- // The corresponding provider_host may already have associate version in |
- // redirect case, unassociate it now. |
- provider_host_->SetActiveVersion(NULL); |
- provider_host_->SetPendingVersion(NULL); |
- provider_host_->set_document_url(url); |
- context_->storage()->FindRegistrationForDocument( |
- url, |
- base::Bind(&self::DidLookupRegistrationForMainResource, |
- weak_factory_.GetWeakPtr())); |
-} |
- |
-void ServiceWorkerRequestHandler::DidLookupRegistrationForMainResource( |
- ServiceWorkerStatusCode status, |
- const scoped_refptr<ServiceWorkerRegistration>& registration) { |
- DCHECK(job_.get()); |
- if (status != SERVICE_WORKER_OK || !registration->active_version()) { |
- // No registration, or no active version for the registration is available. |
- job_->FallbackToNetwork(); |
- return; |
- } |
- DCHECK(registration); |
- provider_host_->SetActiveVersion(registration->active_version()); |
- provider_host_->SetPendingVersion(registration->pending_version()); |
- job_->ForwardToServiceWorker(); |
-} |
- |
-void ServiceWorkerRequestHandler::PrepareForSubResource() { |
- DCHECK(job_.get()); |
- DCHECK(context_); |
- DCHECK(provider_host_->active_version()); |
- job_->ForwardToServiceWorker(); |
+ resource_type_(resource_type) { |
} |
} // namespace content |