#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() {}
}
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