void InspectorResourceAgent::loadResource(ErrorString* errorString, const String& frameId, const String& urlString, PassRefPtr<LoadResourceCallback> prpCallback) { Frame* frame = m_pageAgent->assertFrame(errorString, frameId); if (!frame) return; Document* document = frame->document(); if (!document) { *errorString = ASCIILiteral("No Document instance for the specified frame"); return; } RefPtr<LoadResourceCallback> callback = prpCallback; URL url = document->completeURL(urlString); ResourceRequest request(url); request.setHTTPMethod(ASCIILiteral("GET")); request.setHiddenFromInspector(true); ThreadableLoaderOptions options; options.setSendLoadCallbacks(SendCallbacks); // So we remove this from m_hiddenRequestIdentifiers on completion. options.setAllowCredentials(AllowStoredCredentials); options.crossOriginRequestPolicy = AllowCrossOriginRequests; // InspectorThreadableLoaderClient deletes itself when the load completes. InspectorThreadableLoaderClient* inspectorThreadableLoaderClient = new InspectorThreadableLoaderClient(callback); RefPtr<DocumentThreadableLoader> loader = DocumentThreadableLoader::create(*document, *inspectorThreadableLoaderClient, request, options); if (!loader) { inspectorThreadableLoaderClient->didFailLoaderCreation(); return; } loader->setDefersLoading(false); // If the load already completed, inspectorThreadableLoaderClient will have been deleted and we will have already called the callback. if (!callback->isActive()) return; inspectorThreadableLoaderClient->setLoader(loader.release()); }
void InspectorNetworkAgent::loadResource(ErrorString& errorString, const String& frameId, const String& urlString, Ref<LoadResourceCallback>&& callback) { Frame* frame = m_pageAgent->assertFrame(errorString, frameId); if (!frame) return; Document* document = frame->document(); if (!document) { errorString = ASCIILiteral("No Document instance for the specified frame"); return; } URL url = document->completeURL(urlString); ResourceRequest request(url); request.setHTTPMethod(ASCIILiteral("GET")); request.setHiddenFromInspector(true); ThreadableLoaderOptions options; options.sendLoadCallbacks = SendCallbacks; // So we remove this from m_hiddenRequestIdentifiers on completion. options.defersLoadingPolicy = DefersLoadingPolicy::DisallowDefersLoading; // So the request is never deferred. options.mode = FetchOptions::Mode::NoCors; options.credentials = FetchOptions::Credentials::SameOrigin; options.contentSecurityPolicyEnforcement = ContentSecurityPolicyEnforcement::DoNotEnforce; // InspectorThreadableLoaderClient deletes itself when the load completes. InspectorThreadableLoaderClient* inspectorThreadableLoaderClient = new InspectorThreadableLoaderClient(callback.copyRef()); auto loader = DocumentThreadableLoader::create(*document, *inspectorThreadableLoaderClient, WTFMove(request), options); if (!loader) { inspectorThreadableLoaderClient->didFailLoaderCreation(); return; } // If the load already completed, inspectorThreadableLoaderClient will have been deleted and we will have already called the callback. if (!callback->isActive()) return; inspectorThreadableLoaderClient->setLoader(WTFMove(loader)); }