Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / content / browser / service_worker / service_worker_fetch_dispatcher.cc
index cc920c2..7ed3051 100644 (file)
@@ -5,31 +5,21 @@
 #include "content/browser/service_worker/service_worker_fetch_dispatcher.h"
 
 #include "base/bind.h"
+#include "base/debug/trace_event.h"
 #include "content/browser/service_worker/service_worker_version.h"
-#include "content/public/browser/resource_request_info.h"
-#include "content/public/common/page_transition_types.h"
-#include "net/url_request/url_request.h"
 
 namespace content {
 
 ServiceWorkerFetchDispatcher::ServiceWorkerFetchDispatcher(
-    net::URLRequest* request,
+    scoped_ptr<ServiceWorkerFetchRequest> request,
     ServiceWorkerVersion* version,
-    const FetchCallback& callback)
+    const base::Closure& prepare_callback,
+    const FetchCallback& fetch_callback)
     : version_(version),
-      callback_(callback),
+      prepare_callback_(prepare_callback),
+      fetch_callback_(fetch_callback),
+      request_(request.Pass()),
       weak_factory_(this) {
-  request_.url = request->url();
-  request_.method = request->method();
-  const net::HttpRequestHeaders& headers = request->extra_request_headers();
-  for (net::HttpRequestHeaders::Iterator it(headers); it.GetNext();)
-    request_.headers[it.name()] = it.value();
-  request_.referrer = GURL(request->referrer());
-  const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request);
-  if (info) {
-    request_.is_reload = PageTransitionCoreTypeIs(info->GetPageTransition(),
-                                                 PAGE_TRANSITION_RELOAD);
-  }
 }
 
 ServiceWorkerFetchDispatcher::~ServiceWorkerFetchDispatcher() {}
@@ -68,19 +58,35 @@ void ServiceWorkerFetchDispatcher::DidFailActivation() {
 }
 
 void ServiceWorkerFetchDispatcher::DispatchFetchEvent() {
+  TRACE_EVENT_ASYNC_BEGIN0(
+      "ServiceWorker",
+      "ServiceWorkerFetchDispatcher::DispatchFetchEvent",
+      request_.get());
   version_->DispatchFetchEvent(
-      request_,
+      *request_.get(),
+      base::Bind(&ServiceWorkerFetchDispatcher::DidPrepare,
+                 weak_factory_.GetWeakPtr()),
       base::Bind(&ServiceWorkerFetchDispatcher::DidFinish,
                  weak_factory_.GetWeakPtr()));
 }
 
+void ServiceWorkerFetchDispatcher::DidPrepare() {
+  DCHECK(!prepare_callback_.is_null());
+  base::Closure prepare_callback = prepare_callback_;
+  prepare_callback.Run();
+}
+
 void ServiceWorkerFetchDispatcher::DidFinish(
     ServiceWorkerStatusCode status,
     ServiceWorkerFetchEventResult fetch_result,
     const ServiceWorkerResponse& response) {
-  DCHECK(!callback_.is_null());
-  FetchCallback callback = callback_;
-  callback.Run(status, fetch_result, response);
+  TRACE_EVENT_ASYNC_END0(
+      "ServiceWorker",
+      "ServiceWorkerFetchDispatcher::DispatchFetchEvent",
+      request_.get());
+  DCHECK(!fetch_callback_.is_null());
+  FetchCallback fetch_callback = fetch_callback_;
+  fetch_callback.Run(status, fetch_result, response);
 }
 
 }  // namespace content