Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / content / browser / service_worker / service_worker_request_handler.cc
index 1ad1f3c..4fbd76e 100644 (file)
@@ -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,91 +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_->AssociateVersion(NULL);
-  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_->AssociateVersion(registration->active_version());
-  job_->ForwardToServiceWorker();
-}
-
-void ServiceWorkerRequestHandler::PrepareForSubResource() {
-  DCHECK(job_.get());
-  DCHECK(context_);
-  DCHECK(provider_host_->associated_version());
-  job_->ForwardToServiceWorker();
+      resource_type_(resource_type) {
 }
 
 }  // namespace content