| 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 8a530c15fdc46d0dc797a2436d0b8655b7905526..8637a0b1b8f0c845fe1c3a300a3b06ec4c219311 100644
|
| --- a/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp
|
| +++ b/third_party/WebKit/Source/core/inspector/InspectorNetworkAgent.cpp
|
| @@ -574,14 +574,13 @@ void InspectorNetworkAgent::shouldBlockRequest(const ResourceRequest& request,
|
| }
|
|
|
| void InspectorNetworkAgent::didBlockRequest(
|
| - LocalFrame* frame,
|
| const ResourceRequest& request,
|
| DocumentLoader* loader,
|
| const FetchInitiatorInfo& initiatorInfo,
|
| ResourceRequestBlockedReason reason) {
|
| unsigned long identifier = createUniqueIdentifier();
|
| - willSendRequestInternal(frame, identifier, loader, request,
|
| - ResourceResponse(), initiatorInfo);
|
| + willSendRequestInternal(identifier, loader, request, ResourceResponse(),
|
| + initiatorInfo);
|
|
|
| String requestId = IdentifiersFactory::requestId(identifier);
|
| String protocolReason = buildBlockedReason(reason);
|
| @@ -601,14 +600,13 @@ void InspectorNetworkAgent::didChangeResourcePriority(
|
| }
|
|
|
| void InspectorNetworkAgent::willSendRequestInternal(
|
| - LocalFrame* frame,
|
| unsigned long identifier,
|
| DocumentLoader* loader,
|
| const ResourceRequest& request,
|
| const ResourceResponse& redirectResponse,
|
| const FetchInitiatorInfo& initiatorInfo) {
|
| String requestId = IdentifiersFactory::requestId(identifier);
|
| - String loaderId = IdentifiersFactory::loaderId(loader);
|
| + String loaderId = loader ? IdentifiersFactory::loaderId(loader) : "";
|
| m_resourcesData->resourceCreated(requestId, loaderId, request.url());
|
|
|
| InspectorPageAgent::ResourceType type = InspectorPageAgent::OtherResource;
|
| @@ -619,12 +617,13 @@ void InspectorNetworkAgent::willSendRequestInternal(
|
| type = InspectorPageAgent::DocumentResource;
|
| m_resourcesData->setResourceType(requestId, type);
|
| }
|
| -
|
| - String frameId =
|
| - loader->frame() ? IdentifiersFactory::frameId(loader->frame()) : "";
|
| + String frameId = loader && loader->frame()
|
| + ? IdentifiersFactory::frameId(loader->frame())
|
| + : "";
|
| std::unique_ptr<protocol::Network::Initiator> initiatorObject =
|
| - buildInitiatorObject(loader->frame() ? loader->frame()->document() : 0,
|
| - initiatorInfo);
|
| + buildInitiatorObject(
|
| + loader && loader->frame() ? loader->frame()->document() : 0,
|
| + initiatorInfo);
|
| if (initiatorInfo.name == FetchInitiatorTypeNames::document) {
|
| FrameNavigationInitiatorMap::iterator it =
|
| m_frameNavigationInitiatorMap.find(frameId);
|
| @@ -635,8 +634,11 @@ void InspectorNetworkAgent::willSendRequestInternal(
|
| std::unique_ptr<protocol::Network::Request> requestInfo(
|
| buildObjectForResourceRequest(request));
|
|
|
| - requestInfo->setMixedContentType(mixedContentTypeForContextType(
|
| - MixedContentChecker::contextTypeForInspector(frame, request)));
|
| + if (loader) {
|
| + requestInfo->setMixedContentType(mixedContentTypeForContextType(
|
| + MixedContentChecker::contextTypeForInspector(loader->frame(),
|
| + request)));
|
| + }
|
|
|
| requestInfo->setReferrerPolicy(referrerPolicy(request.getReferrerPolicy()));
|
| if (initiatorInfo.isLinkPreload)
|
| @@ -645,15 +647,15 @@ void InspectorNetworkAgent::willSendRequestInternal(
|
| String resourceType = InspectorPageAgent::resourceTypeJson(type);
|
| frontend()->requestWillBeSent(
|
| requestId, frameId, loaderId,
|
| - urlWithoutFragment(loader->url()).getString(), std::move(requestInfo),
|
| - monotonicallyIncreasingTime(), currentTime(), std::move(initiatorObject),
|
| + loader ? urlWithoutFragment(loader->url()).getString() : "",
|
| + std::move(requestInfo), monotonicallyIncreasingTime(), currentTime(),
|
| + std::move(initiatorObject),
|
| buildObjectForResourceResponse(redirectResponse), resourceType);
|
| if (m_pendingXHRReplayData && !m_pendingXHRReplayData->async())
|
| frontend()->flush();
|
| }
|
|
|
| void InspectorNetworkAgent::willSendRequest(
|
| - LocalFrame* frame,
|
| unsigned long identifier,
|
| DocumentLoader* loader,
|
| ResourceRequest& request,
|
| @@ -693,7 +695,7 @@ void InspectorNetworkAgent::willSendRequest(
|
| if (m_state->booleanProperty(NetworkAgentState::bypassServiceWorker, false))
|
| request.setServiceWorkerMode(WebURLRequest::ServiceWorkerMode::None);
|
|
|
| - willSendRequestInternal(frame, identifier, loader, request, redirectResponse,
|
| + willSendRequestInternal(identifier, loader, request, redirectResponse,
|
| initiatorInfo);
|
|
|
| if (!m_hostId.isEmpty())
|
| @@ -711,7 +713,6 @@ void InspectorNetworkAgent::markResourceAsCached(unsigned long identifier) {
|
| }
|
|
|
| void InspectorNetworkAgent::didReceiveResourceResponse(
|
| - LocalFrame* frame,
|
| unsigned long identifier,
|
| DocumentLoader* loader,
|
| const ResourceResponse& response,
|
| @@ -747,7 +748,9 @@ void InspectorNetworkAgent::didReceiveResourceResponse(
|
| // doesn't affect Resource lifetime.
|
| if (cachedResource)
|
| m_resourcesData->addResource(requestId, cachedResource);
|
| - String frameId = IdentifiersFactory::frameId(frame);
|
| + String frameId = loader && loader->frame()
|
| + ? IdentifiersFactory::frameId(loader->frame())
|
| + : "";
|
| String loaderId = loader ? IdentifiersFactory::loaderId(loader) : "";
|
| m_resourcesData->responseReceived(requestId, frameId, response);
|
| m_resourcesData->setResourceType(requestId, type);
|
| @@ -770,15 +773,15 @@ void InspectorNetworkAgent::didReceiveResourceResponse(
|
| // following didReceiveResponse as there will be no calls to didReceiveData
|
| // from the network stack.
|
| if (isNotModified && cachedResource && cachedResource->encodedSize())
|
| - didReceiveData(frame, identifier, 0, cachedResource->encodedSize());
|
| + didReceiveData(identifier, loader, 0, cachedResource->encodedSize());
|
| }
|
|
|
| static bool isErrorStatusCode(int statusCode) {
|
| return statusCode >= 400;
|
| }
|
|
|
| -void InspectorNetworkAgent::didReceiveData(LocalFrame*,
|
| - unsigned long identifier,
|
| +void InspectorNetworkAgent::didReceiveData(unsigned long identifier,
|
| + DocumentLoader* loader,
|
| const char* data,
|
| int dataLength) {
|
| String requestId = IdentifiersFactory::requestId(identifier);
|
| @@ -800,15 +803,14 @@ void InspectorNetworkAgent::didReceiveData(LocalFrame*,
|
| }
|
|
|
| void InspectorNetworkAgent::didReceiveEncodedDataLength(
|
| - LocalFrame*,
|
| unsigned long identifier,
|
| int encodedDataLength) {
|
| String requestId = IdentifiersFactory::requestId(identifier);
|
| m_resourcesData->addPendingEncodedDataLength(requestId, encodedDataLength);
|
| }
|
|
|
| -void InspectorNetworkAgent::didFinishLoading(LocalFrame*,
|
| - unsigned long identifier,
|
| +void InspectorNetworkAgent::didFinishLoading(unsigned long identifier,
|
| + DocumentLoader*,
|
| double monotonicFinishTime,
|
| int64_t encodedDataLength,
|
| int64_t decodedBodyLength) {
|
| @@ -845,8 +847,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);
|
| }
|
|
|
| @@ -932,9 +934,11 @@ void InspectorNetworkAgent::willLoadXHR(XMLHttpRequest* xhr,
|
| void InspectorNetworkAgent::delayedRemoveReplayXHR(XMLHttpRequest* xhr) {
|
| if (!m_replayXHRs.contains(xhr))
|
| return;
|
| + // TODO(horo): |m_removeFinishedReplayXHRTimer| is null on workers.
|
| + DCHECK(m_removeFinishedReplayXHRTimer);
|
| m_replayXHRsToBeDeleted.insert(xhr);
|
| m_replayXHRs.erase(xhr);
|
| - m_removeFinishedReplayXHRTimer.startOneShot(0, BLINK_FROM_HERE);
|
| + m_removeFinishedReplayXHRTimer->startOneShot(0, BLINK_FROM_HERE);
|
| }
|
|
|
| void InspectorNetworkAgent::didFailXHRLoading(ExecutionContext* context,
|
| @@ -1423,7 +1427,7 @@ Response InspectorNetworkAgent::setCacheDisabled(bool cacheDisabled) {
|
| // We should extract network cache state into a global entity which can be
|
| // queried from FrameLoader and other places.
|
| m_state->setBoolean(NetworkAgentState::cacheDisabled, cacheDisabled);
|
| - if (cacheDisabled)
|
| + if (cacheDisabled && isMainThread())
|
| memoryCache()->evictResources();
|
| return Response::OK();
|
| }
|
| @@ -1463,7 +1467,8 @@ void InspectorNetworkAgent::didCommitLoad(LocalFrame* frame,
|
| if (loader->frame() != m_inspectedFrames->root())
|
| return;
|
|
|
| - if (m_state->booleanProperty(NetworkAgentState::cacheDisabled, false))
|
| + if (m_state->booleanProperty(NetworkAgentState::cacheDisabled, false) &&
|
| + isMainThread())
|
| memoryCache()->evictResources(MemoryCache::DoNotEvictUnusedPreloads);
|
|
|
| m_resourcesData->clear(IdentifiersFactory::loaderId(loader));
|
| @@ -1513,9 +1518,10 @@ bool InspectorNetworkAgent::fetchResourceContent(Document* document,
|
| bool* base64Encoded) {
|
| // First try to fetch content from the cached resource.
|
| Resource* cachedResource = document->fetcher()->cachedResource(url);
|
| - if (!cachedResource)
|
| + if (!cachedResource && isMainThread()) {
|
| cachedResource = memoryCache()->resourceForURL(
|
| url, document->fetcher()->getCacheIdentifier());
|
| + }
|
| if (cachedResource && InspectorPageAgent::cachedResourceContent(
|
| cachedResource, content, base64Encoded))
|
| return true;
|
| @@ -1547,10 +1553,13 @@ InspectorNetworkAgent::InspectorNetworkAgent(InspectedFrames* inspectedFrames)
|
| maximumResourceBufferSize)),
|
| m_pendingRequest(nullptr),
|
| m_removeFinishedReplayXHRTimer(
|
| - TaskRunnerHelper::get(TaskType::UnspecedLoading,
|
| - inspectedFrames->root()),
|
| - this,
|
| - &InspectorNetworkAgent::removeFinishedReplayXHRFired) {}
|
| + inspectedFrames
|
| + ? new TaskRunnerTimer<InspectorNetworkAgent>(
|
| + TaskRunnerHelper::get(TaskType::UnspecedLoading,
|
| + inspectedFrames->root()),
|
| + this,
|
| + &InspectorNetworkAgent::removeFinishedReplayXHRFired)
|
| + : nullptr) {}
|
|
|
| void InspectorNetworkAgent::shouldForceCORSPreflight(bool* result) {
|
| if (m_state->booleanProperty(NetworkAgentState::cacheDisabled, false))
|
|
|