void AssociatedURLLoader::loadAsynchronously(const WebURLRequest& request, WebURLLoaderClient* client) { ASSERT(!m_loader); ASSERT(!m_client); m_client = client; ASSERT(m_client); bool allowLoad = true; WebURLRequest newRequest(request); if (m_options.untrustedHTTP) { WebString method = newRequest.httpMethod(); allowLoad = isValidHTTPToken(method) && FetchUtils::isUsefulMethod(method); if (allowLoad) { newRequest.setHTTPMethod(FetchUtils::normalizeMethod(method)); HTTPRequestHeaderValidator validator; newRequest.visitHTTPHeaderFields(&validator); allowLoad = validator.isSafe(); } } m_clientAdapter = ClientAdapter::create(this, m_client, m_options); if (allowLoad) { ThreadableLoaderOptions options; options.preflightPolicy = static_cast<PreflightPolicy>(m_options.preflightPolicy); options.crossOriginRequestPolicy = static_cast<CrossOriginRequestPolicy>(m_options.crossOriginRequestPolicy); ResourceLoaderOptions resourceLoaderOptions; resourceLoaderOptions.allowCredentials = m_options.allowCredentials ? AllowStoredCredentials : DoNotAllowStoredCredentials; resourceLoaderOptions.dataBufferingPolicy = DoNotBufferData; const ResourceRequest& webcoreRequest = newRequest.toResourceRequest(); if (webcoreRequest.requestContext() == WebURLRequest::RequestContextUnspecified) { // FIXME: We load URLs without setting a TargetType (and therefore a request context) in several // places in content/ (P2PPortAllocatorSession::AllocateLegacyRelaySession, for example). Remove // this once those places are patched up. newRequest.setRequestContext(WebURLRequest::RequestContextInternal); } Document* webcoreDocument = m_frameImpl->frame()->document(); ASSERT(webcoreDocument); m_loader = DocumentThreadableLoader::create(*webcoreDocument, m_clientAdapter.get(), webcoreRequest, options, resourceLoaderOptions); } if (!m_loader) { // FIXME: return meaningful error codes. m_clientAdapter->setDelayedError(ResourceError()); } m_clientAdapter->enableErrorNotifications(); }
void AssociatedURLLoader::loadAsynchronously(const WebURLRequest& request, WebURLLoaderClient* client) { ASSERT(!m_client); m_client = client; ASSERT(m_client); bool allowLoad = true; WebURLRequest newRequest(request); if (m_options.untrustedHTTP) { WebString method = newRequest.httpMethod(); allowLoad = isValidHTTPToken(method) && XMLHttpRequest::isAllowedHTTPMethod(method); if (allowLoad) { newRequest.setHTTPMethod(XMLHttpRequest::uppercaseKnownHTTPMethod(method)); HTTPRequestHeaderValidator validator; newRequest.visitHTTPHeaderFields(&validator); allowLoad = validator.isSafe(); } } m_clientAdapter = ClientAdapter::create(this, m_client, m_options); if (allowLoad) { ThreadableLoaderOptions options; options.sendLoadCallbacks = SendCallbacks; // Always send callbacks. options.sniffContent = m_options.sniffContent ? SniffContent : DoNotSniffContent; options.allowCredentials = m_options.allowCredentials ? AllowStoredCredentials : DoNotAllowStoredCredentials; options.preflightPolicy = m_options.forcePreflight ? ForcePreflight : ConsiderPreflight; options.crossOriginRequestPolicy = static_cast<WebCore::CrossOriginRequestPolicy>(m_options.crossOriginRequestPolicy); options.dataBufferingPolicy = DoNotBufferData; const ResourceRequest& webcoreRequest = newRequest.toResourceRequest(); Document* webcoreDocument = m_frameImpl->frame()->document(); m_loader = DocumentThreadableLoader::create(webcoreDocument, m_clientAdapter.get(), webcoreRequest, options); } else { // FIXME: return meaningful error codes. m_clientAdapter->setDelayedError(ResourceError()); } m_clientAdapter->enableErrorNotifications(); }