| Index: third_party/WebKit/Source/modules/serviceworkers/FetchEvent.cpp
|
| diff --git a/third_party/WebKit/Source/modules/serviceworkers/FetchEvent.cpp b/third_party/WebKit/Source/modules/serviceworkers/FetchEvent.cpp
|
| index a464f19d1283bdba45958c5665c665ec52c8d3cb..d3b3a9bdcdad51d87c46550a1b5a6a01ad2ece72 100644
|
| --- a/third_party/WebKit/Source/modules/serviceworkers/FetchEvent.cpp
|
| +++ b/third_party/WebKit/Source/modules/serviceworkers/FetchEvent.cpp
|
| @@ -15,6 +15,7 @@
|
| #include "modules/serviceworkers/ServiceWorkerGlobalScope.h"
|
| #include "platform/bindings/ScriptState.h"
|
| #include "platform/bindings/V8PrivateProperty.h"
|
| +#include "platform/instrumentation/tracing/TraceEvent.h"
|
| #include "platform/loader/fetch/ResourceTimingInfo.h"
|
| #include "platform/network/NetworkUtils.h"
|
| #include "platform/wtf/PtrUtil.h"
|
| @@ -81,6 +82,7 @@ FetchEvent::FetchEvent(ScriptState* script_state,
|
| ExecutionContext::From(script_state),
|
| this,
|
| PreloadResponseProperty::kPreloadResponse)) {
|
| + TRACE_EVENT0("ServiceWorker", "FetchEvent::FetchEvent");
|
| if (!navigation_preload_sent)
|
| preload_response_property_->ResolveWithUndefined();
|
|
|
| @@ -113,19 +115,43 @@ void FetchEvent::OnNavigationPreloadResponse(
|
| ScriptState* script_state,
|
| std::unique_ptr<WebURLResponse> response,
|
| std::unique_ptr<WebDataConsumerHandle> data_consume_handle) {
|
| + TRACE_EVENT0("ServiceWorker", "FetchEvent::OnNavigationPreloadResponse");
|
| if (!script_state->ContextIsValid())
|
| return;
|
| DCHECK(preload_response_property_);
|
| DCHECK(!preload_response_);
|
| ScriptState::Scope scope(script_state);
|
| preload_response_ = std::move(response);
|
| - FetchResponseData* response_data =
|
| - data_consume_handle
|
| - ? FetchResponseData::CreateWithBuffer(new BodyStreamBuffer(
|
| - script_state, new BytesConsumerForDataConsumerHandle(
|
| - ExecutionContext::From(script_state),
|
| - std::move(data_consume_handle))))
|
| - : FetchResponseData::Create();
|
| + FetchResponseData* response_data;
|
| + {
|
| + if (data_consume_handle) {
|
| + BytesConsumerForDataConsumerHandle* bytes_consumer;
|
| + {
|
| + TRACE_EVENT0("ServiceWorker",
|
| + "FetchEvent::OnNavigationPreloadResponse "
|
| + "BytesConsumerForDataConsumerHandle");
|
| + bytes_consumer = new BytesConsumerForDataConsumerHandle(
|
| + ExecutionContext::From(script_state),
|
| + std::move(data_consume_handle));
|
| + }
|
| + BodyStreamBuffer* buffer;
|
| + {
|
| + TRACE_EVENT0(
|
| + "ServiceWorker",
|
| + "FetchEvent::OnNavigationPreloadResponse BodyStreamBuffer");
|
| + buffer = new BodyStreamBuffer(script_state, bytes_consumer);
|
| + }
|
| + TRACE_EVENT0("ServiceWorker",
|
| + "FetchEvent::OnNavigationPreloadResponse "
|
| + "FetchResponseData::CreateWithBuffer");
|
| + response_data = FetchResponseData::CreateWithBuffer(buffer);
|
| + } else {
|
| + TRACE_EVENT0(
|
| + "ServiceWorker",
|
| + "FetchEvent::OnNavigationPreloadResponse FetchResponseData::Create");
|
| + response_data = FetchResponseData::Create();
|
| + }
|
| + }
|
| Vector<KURL> url_list(1);
|
| url_list[0] = preload_response_->Url();
|
| response_data->SetURLList(url_list);
|
| @@ -138,12 +164,23 @@ void FetchEvent::OnNavigationPreloadResponse(
|
| for (const auto& header : headers) {
|
| response_data->HeaderList()->Append(header.key, header.value);
|
| }
|
| - FetchResponseData* tainted_response =
|
| - NetworkUtils::IsRedirectResponseCode(preload_response_->HttpStatusCode())
|
| - ? response_data->CreateOpaqueRedirectFilteredResponse()
|
| - : response_data->CreateBasicFilteredResponse();
|
| - preload_response_property_->Resolve(
|
| - Response::Create(ExecutionContext::From(script_state), tainted_response));
|
| + FetchResponseData* tainted_response;
|
| + {
|
| + TRACE_EVENT0(
|
| + "ServiceWorker",
|
| + "FetchEvent::OnNavigationPreloadResponse CreateBasicFilteredResponse");
|
| + tainted_response =
|
| + NetworkUtils::IsRedirectResponseCode(
|
| + preload_response_->HttpStatusCode())
|
| + ? response_data->CreateOpaqueRedirectFilteredResponse()
|
| + : response_data->CreateBasicFilteredResponse();
|
| + }
|
| + {
|
| + TRACE_EVENT0("ServiceWorker",
|
| + "FetchEvent::OnNavigationPreloadResponse Resolve");
|
| + preload_response_property_->Resolve(Response::Create(
|
| + ExecutionContext::From(script_state), tainted_response));
|
| + }
|
| }
|
|
|
| void FetchEvent::OnNavigationPreloadError(
|
|
|