Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / content / browser / service_worker / service_worker_request_handler.h
index be35738..4e03fbc 100644 (file)
@@ -6,27 +6,32 @@
 #define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_REQUEST_HANDLER_H_
 
 #include "base/basictypes.h"
-
 #include "base/memory/weak_ptr.h"
 #include "base/supports_user_data.h"
+#include "base/time/time.h"
 #include "content/common/content_export.h"
 #include "content/common/service_worker/service_worker_status_code.h"
+#include "content/public/common/resource_type.h"
 #include "net/url_request/url_request_job_factory.h"
-#include "webkit/common/resource_type.h"
 
 namespace net {
 class NetworkDelegate;
 class URLRequest;
+class URLRequestInterceptor;
+}
+
+namespace storage {
+class BlobStorageContext;
 }
 
 namespace content {
 
+class ResourceRequestBody;
 class ServiceWorkerContextCore;
 class ServiceWorkerContextWrapper;
 class ServiceWorkerProviderHost;
-class ServiceWorkerRegistration;
-class ServiceWorkerURLRequestJob;
 
+// Abstract base class for routing network requests to ServiceWorkers.
 // Created one per URLRequest and attached to each request.
 class CONTENT_EXPORT ServiceWorkerRequestHandler
     : public base::SupportsUserData::Data {
@@ -40,9 +45,12 @@ class CONTENT_EXPORT ServiceWorkerRequestHandler
   static void InitializeHandler(
       net::URLRequest* request,
       ServiceWorkerContextWrapper* context_wrapper,
+      storage::BlobStorageContext* blob_storage_context,
       int process_id,
       int provider_id,
-      ResourceType::Type resource_type);
+      bool skip_service_worker,
+      ResourceType resource_type,
+      scoped_refptr<ResourceRequestBody> body);
 
   // Returns the handler attached to |request|. This may return NULL
   // if no handler is attached.
@@ -50,40 +58,35 @@ class CONTENT_EXPORT ServiceWorkerRequestHandler
       net::URLRequest* request);
 
   // Creates a protocol interceptor for ServiceWorker.
-  static scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>
-      CreateInterceptor();
+  static scoped_ptr<net::URLRequestInterceptor> CreateInterceptor();
 
   virtual ~ServiceWorkerRequestHandler();
 
   // Called via custom URLRequestJobFactory.
-  net::URLRequestJob* MaybeCreateJob(
+  virtual net::URLRequestJob* MaybeCreateJob(
       net::URLRequest* request,
-      net::NetworkDelegate* network_delegate);
+      net::NetworkDelegate* network_delegate) = 0;
 
- private:
-  typedef ServiceWorkerRequestHandler self;
+  virtual void GetExtraResponseInfo(
+      bool* was_fetched_via_service_worker,
+      GURL* original_url_via_service_worker,
+      base::TimeTicks* fetch_start_time,
+      base::TimeTicks* fetch_ready_time,
+      base::TimeTicks* fetch_end_time) const = 0;
 
+ protected:
   ServiceWorkerRequestHandler(
       base::WeakPtr<ServiceWorkerContextCore> context,
       base::WeakPtr<ServiceWorkerProviderHost> provider_host,
-      ResourceType::Type resource_type);
-
-  // For main resource case.
-  void PrepareForMainResource(const GURL& url);
-  void DidLookupRegistrationForMainResource(
-      ServiceWorkerStatusCode status,
-      const scoped_refptr<ServiceWorkerRegistration>& registration);
-
-  // For sub resource case.
-  void PrepareForSubResource();
+      base::WeakPtr<storage::BlobStorageContext> blob_storage_context,
+      ResourceType resource_type);
 
   base::WeakPtr<ServiceWorkerContextCore> context_;
   base::WeakPtr<ServiceWorkerProviderHost> provider_host_;
-  ResourceType::Type resource_type_;
-  scoped_refptr<ServiceWorkerURLRequestJob> job_;
-
-  base::WeakPtrFactory<ServiceWorkerRequestHandler> weak_factory_;
+  base::WeakPtr<storage::BlobStorageContext> blob_storage_context_;
+  ResourceType resource_type_;
 
+ private:
   DISALLOW_COPY_AND_ASSIGN(ServiceWorkerRequestHandler);
 };