Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / content / browser / service_worker / service_worker_request_handler.h
index e495abe..91afd26 100644 (file)
@@ -8,10 +8,15 @@
 #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/common/service_worker/service_worker_types.h"
+#include "content/public/common/request_context_frame_type.h"
+#include "content/public/common/request_context_type.h"
 #include "content/public/common/resource_type.h"
 #include "net/url_request/url_request_job_factory.h"
+#include "third_party/WebKit/public/platform/WebServiceWorkerResponseType.h"
 
 namespace net {
 class NetworkDelegate;
@@ -19,12 +24,14 @@ class URLRequest;
 class URLRequestInterceptor;
 }
 
-namespace webkit_blob {
+namespace storage {
 class BlobStorageContext;
 }
 
 namespace content {
 
+class ResourceContext;
+class ResourceRequestBody;
 class ServiceWorkerContextCore;
 class ServiceWorkerContextWrapper;
 class ServiceWorkerProviderHost;
@@ -43,10 +50,16 @@ class CONTENT_EXPORT ServiceWorkerRequestHandler
   static void InitializeHandler(
       net::URLRequest* request,
       ServiceWorkerContextWrapper* context_wrapper,
-      webkit_blob::BlobStorageContext* blob_storage_context,
+      storage::BlobStorageContext* blob_storage_context,
       int process_id,
       int provider_id,
-      ResourceType resource_type);
+      bool skip_service_worker,
+      FetchRequestMode request_mode,
+      FetchCredentialsMode credentials_mode,
+      ResourceType resource_type,
+      RequestContextType request_context_type,
+      RequestContextFrameType frame_type,
+      scoped_refptr<ResourceRequestBody> body);
 
   // Returns the handler attached to |request|. This may return NULL
   // if no handler is attached.
@@ -54,29 +67,42 @@ class CONTENT_EXPORT ServiceWorkerRequestHandler
       net::URLRequest* request);
 
   // Creates a protocol interceptor for ServiceWorker.
-  static scoped_ptr<net::URLRequestInterceptor> CreateInterceptor();
+  static scoped_ptr<net::URLRequestInterceptor> CreateInterceptor(
+      ResourceContext* resource_context);
+
+  // Returns true if the request falls into the scope of a ServiceWorker.
+  // It's only reliable after the ServiceWorkerRequestHandler MaybeCreateJob
+  // method runs to completion for this request. The AppCache handler uses
+  // this to avoid colliding with ServiceWorkers.
+  static bool IsControlledByServiceWorker(net::URLRequest* request);
 
-  virtual ~ServiceWorkerRequestHandler();
+  ~ServiceWorkerRequestHandler() override;
 
   // Called via custom URLRequestJobFactory.
   virtual net::URLRequestJob* MaybeCreateJob(
       net::URLRequest* request,
-      net::NetworkDelegate* network_delegate) = 0;
+      net::NetworkDelegate* network_delegate,
+      ResourceContext* context) = 0;
 
   virtual void GetExtraResponseInfo(
       bool* was_fetched_via_service_worker,
-      GURL* original_url_via_service_worker) const = 0;
+      bool* was_fallback_required_by_service_worker,
+      GURL* original_url_via_service_worker,
+      blink::WebServiceWorkerResponseType* response_type_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,
-      base::WeakPtr<webkit_blob::BlobStorageContext> blob_storage_context,
+      base::WeakPtr<storage::BlobStorageContext> blob_storage_context,
       ResourceType resource_type);
 
   base::WeakPtr<ServiceWorkerContextCore> context_;
   base::WeakPtr<ServiceWorkerProviderHost> provider_host_;
-  base::WeakPtr<webkit_blob::BlobStorageContext> blob_storage_context_;
+  base::WeakPtr<storage::BlobStorageContext> blob_storage_context_;
   ResourceType resource_type_;
 
  private: