Commit b9937a42 authored by horo's avatar horo Committed by Commit bot

Use WebURLResponse to pass the navigation preload response from SWContextClient to FetchEvent.

Currently we use WebServiceWorkerResponse to pass the navigation preload
response from ServiceWorkerContextClient::NavigationPreloadRequest to FetchEvent.

But to show the network timing information in DevTool's network tab, we need
the timing information in ResourceResponseInfo in blnik side. So this cl change
the code to use WebURLResponse which contains the timing information.

BUG=649558

Review-Url: https://codereview.chromium.org/2618313003
Cr-Commit-Position: refs/heads/master@{#442813}
parent 07f3c988
......@@ -30,6 +30,7 @@
#include "content/child/service_worker/web_service_worker_registration_impl.h"
#include "content/child/thread_safe_sender.h"
#include "content/child/web_data_consumer_handle_impl.h"
#include "content/child/web_url_loader_impl.h"
#include "content/child/webmessageportchannel_impl.h"
#include "content/common/devtools_messages.h"
#include "content/common/message_port_messages.h"
......@@ -54,6 +55,7 @@
#include "third_party/WebKit/public/platform/WebReferrerPolicy.h"
#include "third_party/WebKit/public/platform/WebSecurityOrigin.h"
#include "third_party/WebKit/public/platform/WebString.h"
#include "third_party/WebKit/public/platform/WebURLResponse.h"
#include "third_party/WebKit/public/platform/modules/notifications/WebNotificationData.h"
#include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWorkerClientQueryOptions.h"
#include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWorkerError.h"
......@@ -258,22 +260,11 @@ class ServiceWorkerContextClient::NavigationPreloadRequest final
mojom::DownloadedTempFilePtr downloaded_file) override {
DCHECK(!response_);
DCHECK(!downloaded_file);
response_ = base::MakeUnique<blink::WebServiceWorkerResponse>();
response_->setURLList(std::vector<blink::WebURL>({url_}));
DCHECK(response_head.headers);
response_->setStatus(response_head.headers->response_code());
response_->setStatusText(
blink::WebString::fromUTF8(response_head.headers->GetStatusText()));
response_->setResponseType(blink::WebServiceWorkerResponseTypeBasic);
size_t iter = 0;
std::string header_name;
std::string header_value;
while (response_head.headers->EnumerateHeaderLines(&iter, &header_name,
&header_value)) {
response_->appendHeader(blink::WebString::fromUTF8(header_name),
blink::WebString::fromUTF8(header_value));
}
response_->setResponseTime(response_head.response_time.ToInternalValue());
response_ = base::MakeUnique<blink::WebURLResponse>();
// TODO(horo): Set report_security_info to true when DevTools is attached.
const bool report_security_info = false;
WebURLLoaderImpl::PopulateURLResponse(url_, response_head, response_.get(),
report_security_info);
MaybeReportResponseToClient();
}
......@@ -343,7 +334,7 @@ class ServiceWorkerContextClient::NavigationPreloadRequest final
mojom::URLLoaderPtr url_loader_;
mojo::Binding<mojom::URLLoaderClient> binding_;
std::unique_ptr<blink::WebServiceWorkerResponse> response_;
std::unique_ptr<blink::WebURLResponse> response_;
mojo::ScopedDataPipeConsumerHandle body_;
bool result_reported_ = false;
};
......@@ -1266,7 +1257,7 @@ void ServiceWorkerContextClient::OnPing() {
void ServiceWorkerContextClient::OnNavigationPreloadResponse(
int fetch_event_id,
std::unique_ptr<blink::WebServiceWorkerResponse> response,
std::unique_ptr<blink::WebURLResponse> response,
std::unique_ptr<blink::WebDataConsumerHandle> data_consumer_handle) {
proxy_->onNavigationPreloadResponse(fetch_event_id, std::move(response),
std::move(data_consumer_handle));
......
......@@ -45,6 +45,7 @@ struct WebServiceWorkerClientQueryOptions;
class WebServiceWorkerContextProxy;
class WebServiceWorkerProvider;
class WebServiceWorkerResponse;
class WebURLResponse;
}
namespace IPC {
......@@ -266,7 +267,7 @@ class ServiceWorkerContextClient : public blink::WebServiceWorkerContextClient,
void OnNavigationPreloadResponse(
int fetch_event_id,
std::unique_ptr<blink::WebServiceWorkerResponse> response,
std::unique_ptr<blink::WebURLResponse> response,
std::unique_ptr<blink::WebDataConsumerHandle> data_consumer_handle);
void OnNavigationPreloadError(
int fetch_event_id,
......
......@@ -12,8 +12,8 @@
#include "modules/fetch/Response.h"
#include "modules/serviceworkers/ServiceWorkerError.h"
#include "modules/serviceworkers/ServiceWorkerGlobalScope.h"
#include "public/platform/WebURLResponse.h"
#include "public/platform/modules/serviceworker/WebServiceWorkerError.h"
#include "public/platform/modules/serviceworker/WebServiceWorkerResponse.h"
#include "wtf/PtrUtil.h"
#include "wtf/RefPtr.h"
......@@ -107,7 +107,7 @@ FetchEvent::FetchEvent(ScriptState* scriptState,
void FetchEvent::onNavigationPreloadResponse(
ScriptState* scriptState,
std::unique_ptr<WebServiceWorkerResponse> response,
std::unique_ptr<WebURLResponse> response,
std::unique_ptr<WebDataConsumerHandle> dataConsumeHandle) {
if (!scriptState->contextIsValid())
return;
......@@ -117,17 +117,17 @@ void FetchEvent::onNavigationPreloadResponse(
new BodyStreamBuffer(scriptState, new BytesConsumerForDataConsumerHandle(
scriptState->getExecutionContext(),
std::move(dataConsumeHandle))));
const WebVector<WebURL>& webURLList = response->urlList();
// Navigation preload doesn't support redirect.
DCHECK_EQ(1u, webURLList.size());
Vector<KURL> urlList(1);
urlList[0] = webURLList[0];
urlList[0] = response->url();
responseData->setURLList(urlList);
responseData->setStatus(response->status());
responseData->setStatusMessage(response->statusText());
responseData->setResponseTime(response->responseTime());
for (const auto& header : response->headers())
responseData->setStatus(response->httpStatusCode());
responseData->setStatusMessage(response->httpStatusText());
responseData->setResponseTime(response->toResourceResponse().responseTime());
const HTTPHeaderMap& headers(
response->toResourceResponse().httpHeaderFields());
for (const auto& header : headers) {
responseData->headerList()->append(header.key, header.value);
}
FetchResponseData* taintedResponse =
responseData->createBasicFilteredResponse();
m_preloadResponseProperty->resolve(
......
......@@ -25,7 +25,7 @@ class RespondWithObserver;
class ScriptState;
class WebDataConsumerHandle;
struct WebServiceWorkerError;
class WebServiceWorkerResponse;
class WebURLResponse;
// A fetch event is dispatched by the client to a service worker's script
// context. RespondWithObserver can be used to notify the client about the
......@@ -55,7 +55,7 @@ class MODULES_EXPORT FetchEvent final : public ExtendableEvent {
ScriptPromise preloadResponse(ScriptState*);
void onNavigationPreloadResponse(ScriptState*,
std::unique_ptr<WebServiceWorkerResponse>,
std::unique_ptr<WebURLResponse>,
std::unique_ptr<WebDataConsumerHandle>);
void onNavigationPreloadError(ScriptState*,
std::unique_ptr<WebServiceWorkerError>);
......
......@@ -64,7 +64,6 @@
#include "public/platform/modules/notifications/WebNotificationData.h"
#include "public/platform/modules/serviceworker/WebServiceWorkerEventResult.h"
#include "public/platform/modules/serviceworker/WebServiceWorkerRequest.h"
#include "public/platform/modules/serviceworker/WebServiceWorkerResponse.h"
#include "public/web/WebSerializedScriptValue.h"
#include "public/web/modules/serviceworker/WebServiceWorkerContextClient.h"
#include "web/WebEmbeddedWorkerImpl.h"
......@@ -200,7 +199,7 @@ void ServiceWorkerGlobalScopeProxy::dispatchFetchEvent(
void ServiceWorkerGlobalScopeProxy::onNavigationPreloadResponse(
int fetchEventID,
std::unique_ptr<WebServiceWorkerResponse> response,
std::unique_ptr<WebURLResponse> response,
std::unique_ptr<WebDataConsumerHandle> dataConsumeHandle) {
FetchEvent* fetchEvent = m_pendingPreloadFetchEvents.take(fetchEventID);
DCHECK(fetchEvent);
......
......@@ -50,7 +50,7 @@ class WebEmbeddedWorkerImpl;
class WebServiceWorkerContextClient;
struct WebServiceWorkerError;
class WebServiceWorkerRequest;
class WebServiceWorkerResponse;
class WebURLResponse;
// This class is created and destructed on the main thread, but live most
// of its time as a resident of the worker thread.
......@@ -113,7 +113,7 @@ class ServiceWorkerGlobalScopeProxy final
bool hasFetchEventHandler() override;
void onNavigationPreloadResponse(
int fetchEventID,
std::unique_ptr<WebServiceWorkerResponse>,
std::unique_ptr<WebURLResponse>,
std::unique_ptr<WebDataConsumerHandle>) override;
void onNavigationPreloadError(
int fetchEventID,
......
......@@ -41,12 +41,12 @@ namespace blink {
class WebDataConsumerHandle;
class WebServiceWorkerRequest;
class WebServiceWorkerResponse;
class WebString;
struct WebNotificationData;
struct WebPaymentAppRequestData;
struct WebServiceWorkerClientInfo;
struct WebServiceWorkerError;
class WebURLResponse;
// A proxy interface to talk to the worker's GlobalScope implementation.
// All methods of this class must be called on the worker thread.
......@@ -102,7 +102,7 @@ class WebServiceWorkerContextProxy {
virtual void onNavigationPreloadResponse(
int fetchEventID,
std::unique_ptr<WebServiceWorkerResponse>,
std::unique_ptr<WebURLResponse>,
std::unique_ptr<WebDataConsumerHandle>) = 0;
virtual void onNavigationPreloadError(
int fetchEventID,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment