Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(536)

Unified Diff: third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp

Issue 2899973003: [wip]devtools
Patch Set: cleanup Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp
diff --git a/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp b/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp
index dc0f1bcb799dcf223df370b0c09ae2217958734f..fef3007ef8338ba07b2fb3c8e0e6261c5c08f282 100644
--- a/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp
+++ b/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp
@@ -51,6 +51,7 @@
#include "core/loader/ThreadableLoaderClient.h"
#include "core/page/Page.h"
#include "core/probe/CoreProbes.h"
+#include "core/workers/WorkerGlobalScope.h"
#include "core/xmlhttprequest/XMLHttpRequest.h"
#include "platform/RuntimeEnabledFeatures.h"
#include "platform/blob/BlobData.h"
@@ -548,6 +549,7 @@ InspectorNetworkAgent::~InspectorNetworkAgent() {}
DEFINE_TRACE(InspectorNetworkAgent) {
visitor->Trace(inspected_frames_);
+ visitor->Trace(execution_context_);
visitor->Trace(resources_data_);
visitor->Trace(replay_xhrs_);
visitor->Trace(replay_xhrs_to_be_deleted_);
@@ -574,13 +576,13 @@ void InspectorNetworkAgent::ShouldBlockRequest(const ResourceRequest& request,
}
void InspectorNetworkAgent::DidBlockRequest(
- LocalFrame* frame,
+ ExecutionContext* execution_context,
const ResourceRequest& request,
DocumentLoader* loader,
const FetchInitiatorInfo& initiator_info,
ResourceRequestBlockedReason reason) {
unsigned long identifier = CreateUniqueIdentifier();
- WillSendRequestInternal(frame, identifier, loader, request,
+ WillSendRequestInternal(execution_context, identifier, loader, request,
ResourceResponse(), initiator_info);
String request_id = IdentifiersFactory::RequestId(identifier);
@@ -602,14 +604,14 @@ void InspectorNetworkAgent::DidChangeResourcePriority(
}
void InspectorNetworkAgent::WillSendRequestInternal(
- LocalFrame* frame,
+ ExecutionContext* execution_context,
unsigned long identifier,
DocumentLoader* loader,
const ResourceRequest& request,
const ResourceResponse& redirect_response,
const FetchInitiatorInfo& initiator_info) {
String request_id = IdentifiersFactory::RequestId(identifier);
- String loader_id = IdentifiersFactory::LoaderId(loader);
+ String loader_id = loader ? IdentifiersFactory::LoaderId(loader) : "";
resources_data_->ResourceCreated(request_id, loader_id, request.Url());
InspectorPageAgent::ResourceType type = InspectorPageAgent::kOtherResource;
@@ -621,12 +623,14 @@ void InspectorNetworkAgent::WillSendRequestInternal(
resources_data_->SetResourceType(request_id, type);
}
- String frame_id =
- loader->GetFrame() ? IdentifiersFactory::FrameId(loader->GetFrame()) : "";
+ String frame_id = loader && loader->GetFrame()
+ ? IdentifiersFactory::FrameId(loader->GetFrame())
+ : "";
std::unique_ptr<protocol::Network::Initiator> initiator_object =
- BuildInitiatorObject(
- loader->GetFrame() ? loader->GetFrame()->GetDocument() : 0,
- initiator_info);
+ BuildInitiatorObject(loader && loader->GetFrame()
+ ? loader->GetFrame()->GetDocument()
+ : nullptr,
+ initiator_info);
if (initiator_info.name == FetchInitiatorTypeNames::document) {
FrameNavigationInitiatorMap::iterator it =
frame_navigation_initiator_map_.find(frame_id);
@@ -637,8 +641,14 @@ void InspectorNetworkAgent::WillSendRequestInternal(
std::unique_ptr<protocol::Network::Request> request_info(
BuildObjectForResourceRequest(request));
- request_info->setMixedContentType(MixedContentTypeForContextType(
- MixedContentChecker::ContextTypeForInspector(frame, request)));
+ // |loader| is null while inspecting worker if off-main-thread-fetch is
+ // enabled. TODO(horo): Refactor MixedContentChecker and set mixed content
+ // type even if |loader| is null.
+ if (loader) {
+ request_info->setMixedContentType(MixedContentTypeForContextType(
+ MixedContentChecker::ContextTypeForInspector(loader->GetFrame(),
+ request)));
+ }
request_info->setReferrerPolicy(
GetReferrerPolicy(request.GetReferrerPolicy()));
@@ -646,17 +656,29 @@ void InspectorNetworkAgent::WillSendRequestInternal(
request_info->setIsLinkPreload(true);
String resource_type = InspectorPageAgent::ResourceTypeJson(type);
- GetFrontend()->requestWillBeSent(
- request_id, frame_id, loader_id,
- UrlWithoutFragment(loader->Url()).GetString(), std::move(request_info),
- MonotonicallyIncreasingTime(), CurrentTime(), std::move(initiator_object),
- BuildObjectForResourceResponse(redirect_response), resource_type);
+ String documentURL =
+ loader ? UrlWithoutFragment(loader->Url()).GetString()
+ : UrlWithoutFragment(execution_context->Url()).GetString();
+ if (!frame_id.IsEmpty()) {
+ GetFrontend()->requestWillBeSent(
+ request_id, loader_id, documentURL, std::move(request_info),
+ MonotonicallyIncreasingTime(), CurrentTime(),
+ std::move(initiator_object),
+ BuildObjectForResourceResponse(redirect_response), resource_type,
+ frame_id);
+ } else {
+ GetFrontend()->requestWillBeSent(
+ request_id, loader_id, documentURL, std::move(request_info),
+ MonotonicallyIncreasingTime(), CurrentTime(),
+ std::move(initiator_object),
+ BuildObjectForResourceResponse(redirect_response), resource_type);
+ }
if (pending_xhr_replay_data_ && !pending_xhr_replay_data_->Async())
GetFrontend()->flush();
}
void InspectorNetworkAgent::WillSendRequest(
- LocalFrame* frame,
+ ExecutionContext* execution_context,
unsigned long identifier,
DocumentLoader* loader,
ResourceRequest& request,
@@ -696,8 +718,8 @@ void InspectorNetworkAgent::WillSendRequest(
if (state_->booleanProperty(NetworkAgentState::kBypassServiceWorker, false))
request.SetServiceWorkerMode(WebURLRequest::ServiceWorkerMode::kNone);
- WillSendRequestInternal(frame, identifier, loader, request, redirect_response,
- initiator_info);
+ WillSendRequestInternal(execution_context, identifier, loader, request,
+ redirect_response, initiator_info);
if (!host_id_.IsEmpty())
request.AddHTTPHeaderField(
@@ -711,7 +733,6 @@ void InspectorNetworkAgent::MarkResourceAsCached(unsigned long identifier) {
}
void InspectorNetworkAgent::DidReceiveResourceResponse(
- LocalFrame* frame,
unsigned long identifier,
DocumentLoader* loader,
const ResourceResponse& response,
@@ -747,7 +768,9 @@ void InspectorNetworkAgent::DidReceiveResourceResponse(
// doesn't affect Resource lifetime.
if (cached_resource)
resources_data_->AddResource(request_id, cached_resource);
- String frame_id = IdentifiersFactory::FrameId(frame);
+ String frame_id = loader && loader->GetFrame()
+ ? IdentifiersFactory::FrameId(loader->GetFrame())
+ : "";
String loader_id = loader ? IdentifiersFactory::LoaderId(loader) : "";
resources_data_->ResponseReceived(request_id, frame_id, response);
resources_data_->SetResourceType(request_id, type);
@@ -761,24 +784,32 @@ void InspectorNetworkAgent::DidReceiveResourceResponse(
response_security_details->certificate);
}
- if (resource_response && !resource_is_empty)
- GetFrontend()->responseReceived(request_id, frame_id, loader_id,
- MonotonicallyIncreasingTime(),
- InspectorPageAgent::ResourceTypeJson(type),
- std::move(resource_response));
+ if (resource_response && !resource_is_empty) {
+ if (!frame_id.IsEmpty()) {
+ GetFrontend()->responseReceived(
+ request_id, loader_id, MonotonicallyIncreasingTime(),
+ InspectorPageAgent::ResourceTypeJson(type),
+ std::move(resource_response), frame_id);
+ } else {
+ GetFrontend()->responseReceived(
+ request_id, loader_id, MonotonicallyIncreasingTime(),
+ InspectorPageAgent::ResourceTypeJson(type),
+ std::move(resource_response));
+ }
+ }
// If we revalidated the resource and got Not modified, send content length
// following didReceiveResponse as there will be no calls to didReceiveData
// from the network stack.
if (is_not_modified && cached_resource && cached_resource->EncodedSize())
- DidReceiveData(frame, identifier, 0, cached_resource->EncodedSize());
+ DidReceiveData(identifier, loader, 0, cached_resource->EncodedSize());
}
static bool IsErrorStatusCode(int status_code) {
return status_code >= 400;
}
-void InspectorNetworkAgent::DidReceiveData(LocalFrame*,
- unsigned long identifier,
+void InspectorNetworkAgent::DidReceiveData(unsigned long identifier,
+ DocumentLoader* loader,
const char* data,
int data_length) {
String request_id = IdentifiersFactory::RequestId(identifier);
@@ -800,15 +831,14 @@ void InspectorNetworkAgent::DidReceiveData(LocalFrame*,
}
void InspectorNetworkAgent::DidReceiveEncodedDataLength(
- LocalFrame*,
unsigned long identifier,
int encoded_data_length) {
String request_id = IdentifiersFactory::RequestId(identifier);
resources_data_->AddPendingEncodedDataLength(request_id, encoded_data_length);
}
-void InspectorNetworkAgent::DidFinishLoading(LocalFrame*,
- unsigned long identifier,
+void InspectorNetworkAgent::DidFinishLoading(unsigned long identifier,
+ DocumentLoader*,
double monotonic_finish_time,
int64_t encoded_data_length,
int64_t decoded_body_length) {
@@ -845,8 +875,8 @@ void InspectorNetworkAgent::DidReceiveCORSRedirectResponse(
const ResourceResponse& response,
Resource* resource) {
// Update the response and finish loading
- DidReceiveResourceResponse(frame, identifier, loader, response, resource);
- DidFinishLoading(frame, identifier, 0,
+ DidReceiveResourceResponse(identifier, loader, response, resource);
+ DidFinishLoading(identifier, loader, 0,
WebURLLoaderClient::kUnknownEncodedDataLength, 0);
}
@@ -1248,6 +1278,8 @@ bool InspectorNetworkAgent::CanGetResponseBodyBlob(const String& request_id) {
resource_data ? resource_data->DownloadedFileBlob() : nullptr;
if (!blob)
return false;
+ if (execution_context_)
+ return true;
LocalFrame* frame = IdentifiersFactory::FrameById(inspected_frames_,
resource_data->FrameId());
return frame && frame->GetDocument();
@@ -1259,12 +1291,17 @@ void InspectorNetworkAgent::GetResponseBodyBlob(
NetworkResourcesData::ResourceData const* resource_data =
resources_data_->Data(request_id);
BlobDataHandle* blob = resource_data->DownloadedFileBlob();
- LocalFrame* frame = IdentifiersFactory::FrameById(inspected_frames_,
- resource_data->FrameId());
- Document* document = frame->GetDocument();
InspectorFileReaderLoaderClient* client = new InspectorFileReaderLoaderClient(
blob, resource_data->MimeType(), resource_data->TextEncodingName(),
std::move(callback));
+ if (execution_context_) {
+ client->Start(execution_context_);
+ return;
+ }
+ DCHECK(inspected_frames_);
+ LocalFrame* frame = IdentifiersFactory::FrameById(inspected_frames_,
+ resource_data->FrameId());
+ Document* document = frame->GetDocument();
client->Start(document);
}
@@ -1401,7 +1438,7 @@ Response InspectorNetworkAgent::setCacheDisabled(bool cache_disabled) {
// We should extract network cache state into a global entity which can be
// queried from FrameLoader and other places.
state_->setBoolean(NetworkAgentState::kCacheDisabled, cache_disabled);
- if (cache_disabled)
+ if (cache_disabled && IsMainThread())
GetMemoryCache()->EvictResources();
return Response::OK();
}
@@ -1438,6 +1475,8 @@ Response InspectorNetworkAgent::getCertificate(
void InspectorNetworkAgent::DidCommitLoad(LocalFrame* frame,
DocumentLoader* loader) {
+ DCHECK(inspected_frames_);
+ DCHECK(IsMainThread());
if (loader->GetFrame() != inspected_frames_->Root())
return;
@@ -1491,11 +1530,14 @@ bool InspectorNetworkAgent::FetchResourceContent(Document* document,
const KURL& url,
String* content,
bool* base64_encoded) {
+ DCHECK(document);
+ DCHECK(IsMainThread());
// First try to fetch content from the cached resource.
Resource* cached_resource = document->Fetcher()->CachedResource(url);
- if (!cached_resource)
+ if (!cached_resource) {
cached_resource = GetMemoryCache()->ResourceForURL(
url, document->Fetcher()->GetCacheIdentifier());
+ }
if (cached_resource && InspectorPageAgent::CachedResourceContent(
cached_resource, content, base64_encoded))
return true;
@@ -1523,6 +1565,7 @@ void InspectorNetworkAgent::RemoveFinishedReplayXHRFired(TimerBase*) {
InspectorNetworkAgent::InspectorNetworkAgent(InspectedFrames* inspected_frames)
: inspected_frames_(inspected_frames),
+ execution_context_(nullptr),
resources_data_(
NetworkResourcesData::Create(g_maximum_total_buffer_size,
g_maximum_resource_buffer_size)),
@@ -1531,7 +1574,24 @@ InspectorNetworkAgent::InspectorNetworkAgent(InspectedFrames* inspected_frames)
TaskRunnerHelper::Get(TaskType::kUnspecedLoading,
inspected_frames->Root()),
this,
- &InspectorNetworkAgent::RemoveFinishedReplayXHRFired) {}
+ &InspectorNetworkAgent::RemoveFinishedReplayXHRFired) {
+ DCHECK(IsMainThread());
+}
+
+InspectorNetworkAgent::InspectorNetworkAgent(
+ ExecutionContext* execution_context)
+ : inspected_frames_(nullptr),
+ execution_context_(execution_context),
+ resources_data_(
+ NetworkResourcesData::Create(g_maximum_total_buffer_size,
+ g_maximum_resource_buffer_size)),
+ pending_request_(nullptr),
+ remove_finished_replay_xhr_timer_(
+ TaskRunnerHelper::Get(TaskType::kUnspecedLoading, execution_context),
+ this,
+ &InspectorNetworkAgent::RemoveFinishedReplayXHRFired) {
+ DCHECK(!IsMainThread());
+}
void InspectorNetworkAgent::ShouldForceCORSPreflight(bool* result) {
if (state_->booleanProperty(NetworkAgentState::kCacheDisabled, false))

Powered by Google App Engine
This is Rietveld 408576698