void WebChromeClient::focusedFrameChanged(Frame* frame) { WebFrameLoaderClient* webFrameLoaderClient = frame ? toWebFrameLoaderClient(frame->loader()->client()) : 0; WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; WebProcess::shared().connection()->send(Messages::WebPageProxy::FocusedFrameChanged(webFrame ? webFrame->frameID() : 0), m_page->pageID()); }
WebFrame* WebFrame::fromCoreFrame(Frame& frame) { auto* webFrameLoaderClient = toWebFrameLoaderClient(frame.loader().client()); if (!webFrameLoaderClient) return nullptr; return webFrameLoaderClient->webFrame(); }
void WebChromeClient::print(Frame* frame) { WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client()); WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; ASSERT(webFrame); m_page->sendSync(Messages::WebPageProxy::PrintFrame(webFrame->frameID()), Messages::WebPageProxy::PrintFrame::Reply()); }
WebFrame* WebFrame::parentFrame() const { if (!m_coreFrame || !m_coreFrame->ownerElement()) return 0; WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(m_coreFrame->ownerElement()->document().frame()->loader().client()); return webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; }
WebFrame* InjectedBundleHitTestResult::targetFrame() const { Frame* frame = m_hitTestResult.targetFrame(); if (!frame) return 0; WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader().client()); return webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; }
void WebEditorClient::textFieldDidEndEditing(Element* element) { if (!isHTMLInputElement(element)) return; WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(element->document().frame()->loader().client()); WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; ASSERT(webFrame); m_page->injectedBundleFormClient().textFieldDidEndEditing(m_page, toHTMLInputElement(element), webFrame); }
void WebEditorClient::textDidChangeInTextArea(Element* element) { if (!isHTMLTextAreaElement(element)) return; WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(element->document().frame()->loader().client()); WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; ASSERT(webFrame); m_page->injectedBundleFormClient().textDidChangeInTextArea(m_page, toHTMLTextAreaElement(element), webFrame); }
void WebEditorClient::textWillBeDeletedInTextField(Element* element) { if (!isHTMLInputElement(element)) return; WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(element->document().frame()->loader().client()); WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; ASSERT(webFrame); m_page->injectedBundleFormClient().shouldPerformActionInTextField(m_page, toHTMLInputElement(element), WKInputFieldActionTypeInsertDelete, webFrame); }
void WebChromeClient::runJavaScriptAlert(Frame* frame, const String& alertText) { WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client()); WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; ASSERT(webFrame); // Notify the bundle client. m_page->injectedBundleUIClient().willRunJavaScriptAlert(m_page, alertText, webFrame); unsigned syncSendFlags = (WebCore::AXObjectCache::accessibilityEnabled()) ? CoreIPC::SpinRunLoopWhileWaitingForReply : 0; WebProcess::shared().connection()->sendSync(Messages::WebPageProxy::RunJavaScriptAlert(webFrame->frameID(), alertText), Messages::WebPageProxy::RunJavaScriptAlert::Reply(), m_page->pageID(), CoreIPC::Connection::NoTimeout, syncSendFlags); }
bool WebChromeClient::runBeforeUnloadConfirmPanel(const String& message, Frame* frame) { WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client()); WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; ASSERT(webFrame); bool shouldClose = false; if (!WebProcess::shared().connection()->sendSync(Messages::WebPageProxy::RunBeforeUnloadConfirmPanel(message, webFrame->frameID()), Messages::WebPageProxy::RunBeforeUnloadConfirmPanel::Reply(shouldClose), m_page->pageID())) return false; return shouldClose; }
WebFrame* WebFrame::frameForContext(JSContextRef context) { JSObjectRef globalObjectRef = JSContextGetGlobalObject(context); JSC::JSObject* globalObjectObj = toJS(globalObjectRef); if (strcmp(globalObjectObj->classInfo()->className, "JSDOMWindowShell") != 0) return 0; Frame* coreFrame = static_cast<JSDOMWindowShell*>(globalObjectObj)->window()->impl().frame(); WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(coreFrame->loader().client()); return webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; }
PassRefPtr<WebFrame> InjectedBundleNodeHandle::htmlIFrameElementContentFrame() { if (!m_node->hasTagName(iframeTag)) return 0; Frame* frame = toHTMLIFrameElement(m_node.get())->contentFrame(); if (!frame) return 0; WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader().client()); return webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; }
PassRefPtr<WebFrame> InjectedBundleNodeHandle::documentFrame() { if (!m_node->isDocumentNode()) return 0; Frame* frame = static_cast<Document*>(m_node.get())->frame(); if (!frame) return 0; WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader().client()); return webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; }
WebFrame* InjectedBundleHitTestResult::frame() const { Node* node = m_hitTestResult.innerNonSharedNode(); if (!node) return 0; Frame* frame = node->document().frame(); if (!frame) return 0; WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader().client()); return webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; }
void WebEditorClient::textDidChangeInTextField(Element* element) { if (!isHTMLInputElement(element)) return; if (!UserTypingGestureIndicator::processingUserTypingGesture() || UserTypingGestureIndicator::focusedElementAtGestureStart() != element) return; WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(element->document().frame()->loader().client()); WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; ASSERT(webFrame); m_page->injectedBundleFormClient().textDidChangeInTextField(m_page, toHTMLInputElement(element), webFrame); }
void WebChromeClient::runOpenPanel(Frame* frame, PassRefPtr<FileChooser> prpFileChooser) { if (m_page->activeOpenPanelResultListener()) return; RefPtr<FileChooser> fileChooser = prpFileChooser; m_page->setActiveOpenPanelResultListener(WebOpenPanelResultListener::create(m_page, fileChooser.get())); WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client()); WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; ASSERT(webFrame); m_page->send(Messages::WebPageProxy::RunOpenPanel(webFrame->frameID(), fileChooser->settings())); }
bool WebEditorClient::doTextFieldCommandFromEvent(Element* element, KeyboardEvent* event) { if (!isHTMLInputElement(element)) return false; WKInputFieldActionType actionType = static_cast<WKInputFieldActionType>(0); if (!getActionTypeForKeyEvent(event, actionType)) return false; WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(element->document().frame()->loader().client()); WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; ASSERT(webFrame); return m_page->injectedBundleFormClient().shouldPerformActionInTextField(m_page, toHTMLInputElement(element), actionType, webFrame); }
bool WebChromeClient::runJavaScriptPrompt(Frame* frame, const String& message, const String& defaultValue, String& result) { WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client()); WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; ASSERT(webFrame); // Notify the bundle client. m_page->injectedBundleUIClient().willRunJavaScriptPrompt(m_page, message, defaultValue, webFrame); unsigned syncSendFlags = (WebCore::AXObjectCache::accessibilityEnabled()) ? CoreIPC::SpinRunLoopWhileWaitingForReply : 0; if (!WebProcess::shared().connection()->sendSync(Messages::WebPageProxy::RunJavaScriptPrompt(webFrame->frameID(), message, defaultValue), Messages::WebPageProxy::RunJavaScriptPrompt::Reply(result), m_page->pageID(), CoreIPC::Connection::NoTimeout, syncSendFlags)) return false; return !result.isNull(); }
void WebChromeClient::focusedElementChanged(Element* element) { if (!element) return; if (!isHTMLInputElement(element)) return; HTMLInputElement* inputElement = toHTMLInputElement(element); if (!inputElement->isText()) return; WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(element->document().frame()->loader().client()); WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; ASSERT(webFrame); m_page->injectedBundleFormClient().didFocusTextField(m_page, inputElement, webFrame); }
void WebChromeClient::focusedNodeChanged(Node* node) { if (!node) return; if (!node->hasTagName(inputTag)) return; HTMLInputElement* inputElement = static_cast<HTMLInputElement*>(node); if (!inputElement->isText()) return; WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(node->document()->frame()->loader()->client()); WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; ASSERT(webFrame); m_page->injectedBundleFormClient().didFocusTextField(m_page, inputElement, webFrame); }
RetainPtr<CFDataRef> WebFrame::webArchiveData(FrameFilterFunction callback, void* context) { RefPtr<LegacyWebArchive> archive = LegacyWebArchive::create(coreFrame()->document(), [this, callback, context](Frame& frame) -> bool { if (!callback) return true; WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame.loader().client()); WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; ASSERT(webFrame); return callback(toAPI(this), toAPI(webFrame), context); }); if (!archive) return nullptr; return archive->rawDataRepresentation(); }
void GeolocationPermissionRequestManager::startRequestForGeolocation(Geolocation* geolocation) { uint64_t geolocationID = generateGeolocationID(); m_geolocationToIDMap.set(geolocation, geolocationID); m_idToGeolocationMap.set(geolocationID, geolocation); Frame* frame = geolocation->frame(); WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client()); WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; ASSERT(webFrame); SecurityOrigin* origin = frame->document()->securityOrigin(); m_page->send(Messages::WebPageProxy::RequestGeolocationPermissionForFrame(geolocationID, webFrame->frameID(), origin->databaseIdentifier())); }
PassRefPtr<API::Array> WebFrame::childFrames() { if (!m_coreFrame) return API::Array::create(); size_t size = m_coreFrame->tree().childCount(); if (!size) return API::Array::create(); Vector<RefPtr<API::Object>> vector; vector.reserveInitialCapacity(size); for (Frame* child = m_coreFrame->tree().firstChild(); child; child = child->tree().nextSibling()) { WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(child->loader().client()); WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; ASSERT(webFrame); vector.uncheckedAppend(webFrame); } return API::Array::create(std::move(vector)); }
String WebFrame::contentsAsString() const { if (!m_coreFrame) return String(); if (isFrameSet()) { StringBuilder builder; for (Frame* child = m_coreFrame->tree().firstChild(); child; child = child->tree().nextSibling()) { if (!builder.isEmpty()) builder.append(' '); WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(child->loader().client()); WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; ASSERT(webFrame); builder.append(webFrame->contentsAsString()); } // FIXME: It may make sense to use toStringPreserveCapacity() here. return builder.toString(); } Document* document = m_coreFrame->document(); if (!document) return String(); RefPtr<Element> documentElement = document->documentElement(); if (!documentElement) return String(); RefPtr<Range> range = document->createRange(); ExceptionCode ec = 0; range->selectNode(documentElement.get(), ec); if (ec) return String(); return plainText(range.get()); }
void WebChromeClient::exceededDatabaseQuota(Frame* frame, const String& databaseName, DatabaseDetails details) { WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(frame->loader()->client()); WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; ASSERT(webFrame); SecurityOrigin* origin = frame->document()->securityOrigin(); DatabaseManager& dbManager = DatabaseManager::manager(); uint64_t currentQuota = dbManager.quotaForOrigin(origin); uint64_t currentOriginUsage = dbManager.usageForOrigin(origin); uint64_t newQuota = 0; RefPtr<WebSecurityOrigin> webSecurityOrigin = WebSecurityOrigin::createFromDatabaseIdentifier(origin->databaseIdentifier()); newQuota = m_page->injectedBundleUIClient().didExceedDatabaseQuota(m_page, webSecurityOrigin.get(), databaseName, details.displayName(), currentQuota, currentOriginUsage, details.currentUsage(), details.expectedUsage()); if (!newQuota) { WebProcess::shared().connection()->sendSync( Messages::WebPageProxy::ExceededDatabaseQuota(webFrame->frameID(), origin->databaseIdentifier(), databaseName, details.displayName(), currentQuota, currentOriginUsage, details.currentUsage(), details.expectedUsage()), Messages::WebPageProxy::ExceededDatabaseQuota::Reply(newQuota), m_page->pageID()); } dbManager.setQuota(origin, newQuota); }
void WebLoaderStrategy::scheduleLoad(ResourceLoader* resourceLoader, CachedResource* resource, bool shouldClearReferrerOnHTTPSToHTTPRedirect) { ASSERT(resourceLoader); ResourceLoadIdentifier identifier = resourceLoader->identifier(); ASSERT(identifier); #if ENABLE(WEB_ARCHIVE) || ENABLE(MHTML) // If the DocumentLoader schedules this as an archive resource load, // then we should remember the ResourceLoader in our records but not schedule it in the NetworkProcess. if (resourceLoader->documentLoader()->scheduleArchiveLoad(resourceLoader, resourceLoader->request())) { LOG(NetworkScheduling, "(WebProcess) WebLoaderStrategy::scheduleLoad, url '%s' will be handled as an archive resource.", resourceLoader->url().string().utf8().data()); m_webResourceLoaders.set(identifier, WebResourceLoader::create(resourceLoader)); return; } #endif if (resourceLoader->documentLoader()->applicationCacheHost()->maybeLoadResource(resourceLoader, resourceLoader->request(), resourceLoader->request().url())) { LOG(NetworkScheduling, "(WebProcess) WebLoaderStrategy::scheduleLoad, url '%s' will be loaded from application cache.", resourceLoader->url().string().utf8().data()); m_webResourceLoaders.set(identifier, WebResourceLoader::create(resourceLoader)); return; } if (resourceLoader->request().url().protocolIsData()) { LOG(NetworkScheduling, "(WebProcess) WebLoaderStrategy::scheduleLoad, url '%s' will be loaded as data.", resourceLoader->url().string().utf8().data()); startLocalLoad(*resourceLoader); return; } #if USE(QUICK_LOOK) if (resourceLoader->request().url().protocolIs(QLPreviewProtocol())) { LOG(NetworkScheduling, "(WebProcess) WebLoaderStrategy::scheduleLoad, url '%s' will be handled as a QuickLook resource.", resourceLoader->url().string().utf8().data()); startLocalLoad(*resourceLoader); return; } #endif #if USE(SOUP) // For apps that call g_resource_load in a web extension. // https://blogs.gnome.org/alexl/2012/01/26/resources-in-glib/ if (resourceLoader->request().url().protocolIs("resource")) { LOG(NetworkScheduling, "(WebProcess) WebLoaderStrategy::scheduleLoad, url '%s' will be handled as a GResource.", resourceLoader->url().string().utf8().data()); startLocalLoad(*resourceLoader); return; } #endif LOG(NetworkScheduling, "(WebProcess) WebLoaderStrategy::scheduleLoad, url '%s' will be scheduled with the NetworkProcess with priority %d", resourceLoader->url().string().latin1().data(), static_cast<int>(resourceLoader->request().priority())); ContentSniffingPolicy contentSniffingPolicy = resourceLoader->shouldSniffContent() ? SniffContent : DoNotSniffContent; StoredCredentials allowStoredCredentials = resourceLoader->shouldUseCredentialStorage() ? AllowStoredCredentials : DoNotAllowStoredCredentials; // FIXME: Some entities in WebCore use WebCore's "EmptyFrameLoaderClient" instead of having a proper WebFrameLoaderClient. // EmptyFrameLoaderClient shouldn't exist and everything should be using a WebFrameLoaderClient, // but in the meantime we have to make sure not to mis-cast. WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(resourceLoader->frameLoader()->client()); WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; WebPage* webPage = webFrame ? webFrame->page() : 0; NetworkResourceLoadParameters loadParameters; loadParameters.identifier = identifier; loadParameters.webPageID = webPage ? webPage->pageID() : 0; loadParameters.webFrameID = webFrame ? webFrame->frameID() : 0; loadParameters.sessionID = webPage ? webPage->sessionID() : SessionID::defaultSessionID(); loadParameters.request = resourceLoader->request(); loadParameters.contentSniffingPolicy = contentSniffingPolicy; loadParameters.allowStoredCredentials = allowStoredCredentials; // If there is no WebFrame then this resource cannot be authenticated with the client. loadParameters.clientCredentialPolicy = (webFrame && webPage && resourceLoader->isAllowedToAskUserForCredentials()) ? AskClientForAllCredentials : DoNotAskClientForAnyCredentials; loadParameters.shouldClearReferrerOnHTTPSToHTTPRedirect = shouldClearReferrerOnHTTPSToHTTPRedirect; loadParameters.defersLoading = resourceLoader->defersLoading(); loadParameters.needsCertificateInfo = resourceLoader->shouldIncludeCertificateInfo(); loadParameters.maximumBufferingTime = maximumBufferingTime(resource); ASSERT((loadParameters.webPageID && loadParameters.webFrameID) || loadParameters.clientCredentialPolicy == DoNotAskClientForAnyCredentials); if (!WebProcess::singleton().networkConnection()->connection()->send(Messages::NetworkConnectionToWebProcess::ScheduleResourceLoad(loadParameters), 0)) { WEBLOADERSTRATEGY_LOG_ALWAYS_ERROR("WebLoaderStrategy::scheduleLoad: Unable to schedule resource with the NetworkProcess with priority = %d, pageID = %llu, frameID = %llu", static_cast<int>(resourceLoader->request().priority()), static_cast<unsigned long long>(loadParameters.webPageID), static_cast<unsigned long long>(loadParameters.webFrameID)); // We probably failed to schedule this load with the NetworkProcess because it had crashed. // This load will never succeed so we will schedule it to fail asynchronously. scheduleInternallyFailedLoad(resourceLoader); return; } auto webResourceLoader = WebResourceLoader::create(resourceLoader); WEBLOADERSTRATEGY_LOG_ALWAYS("WebLoaderStrategy::scheduleLoad: Resource will be scheduled with the NetworkProcess with priority = %d, pageID = %llu, frameID = %llu, WebResourceLoader = %p", static_cast<int>(resourceLoader->request().priority()), static_cast<unsigned long long>(loadParameters.webPageID), static_cast<unsigned long long>(loadParameters.webFrameID), webResourceLoader.ptr()); m_webResourceLoaders.set(identifier, WTFMove(webResourceLoader)); }
void WebResourceLoadScheduler::scheduleLoad(ResourceLoader* resourceLoader, CachedResource* resource, bool shouldClearReferrerOnHTTPSToHTTPRedirect) { ASSERT(resourceLoader); ResourceLoadIdentifier identifier = resourceLoader->identifier(); ASSERT(identifier); #if ENABLE(WEB_ARCHIVE) || ENABLE(MHTML) // If the DocumentLoader schedules this as an archive resource load, // then we should remember the ResourceLoader in our records but not schedule it in the NetworkProcess. if (resourceLoader->documentLoader()->scheduleArchiveLoad(resourceLoader, resourceLoader->request())) { LOG(NetworkScheduling, "(WebProcess) WebResourceLoadScheduler::scheduleLoad, url '%s' will be handled as an archive resource.", resourceLoader->url().string().utf8().data()); m_webResourceLoaders.set(identifier, WebResourceLoader::create(resourceLoader)); return; } #endif if (resourceLoader->documentLoader()->applicationCacheHost()->maybeLoadResource(resourceLoader, resourceLoader->request(), resourceLoader->request().url())) { LOG(NetworkScheduling, "(WebProcess) WebResourceLoadScheduler::scheduleLoad, url '%s' will be loaded from application cache.", resourceLoader->url().string().utf8().data()); m_webResourceLoaders.set(identifier, WebResourceLoader::create(resourceLoader)); return; } #if USE(QUICK_LOOK) if (maybeLoadQuickLookResource(*resourceLoader)) { LOG(NetworkScheduling, "(WebProcess) WebResourceLoadScheduler::scheduleLoad, url '%s' will be handled as a QuickLook resource.", resourceLoader->url().string().utf8().data()); m_webResourceLoaders.set(identifier, WebResourceLoader::create(resourceLoader)); return; } #endif LOG(NetworkScheduling, "(WebProcess) WebResourceLoadScheduler::scheduleLoad, url '%s' will be scheduled with the NetworkProcess with priority %i", resourceLoader->url().string().utf8().data(), resourceLoader->request().priority()); ContentSniffingPolicy contentSniffingPolicy = resourceLoader->shouldSniffContent() ? SniffContent : DoNotSniffContent; StoredCredentials allowStoredCredentials = resourceLoader->shouldUseCredentialStorage() ? AllowStoredCredentials : DoNotAllowStoredCredentials; // FIXME: Some entities in WebCore use WebCore's "EmptyFrameLoaderClient" instead of having a proper WebFrameLoaderClient. // EmptyFrameLoaderClient shouldn't exist and everything should be using a WebFrameLoaderClient, // but in the meantime we have to make sure not to mis-cast. WebFrameLoaderClient* webFrameLoaderClient = toWebFrameLoaderClient(resourceLoader->frameLoader()->client()); WebFrame* webFrame = webFrameLoaderClient ? webFrameLoaderClient->webFrame() : 0; WebPage* webPage = webFrame ? webFrame->page() : 0; NetworkResourceLoadParameters loadParameters; loadParameters.identifier = identifier; loadParameters.webPageID = webPage ? webPage->pageID() : 0; loadParameters.webFrameID = webFrame ? webFrame->frameID() : 0; loadParameters.sessionID = webPage ? webPage->sessionID() : SessionID::defaultSessionID(); loadParameters.request = resourceLoader->request(); loadParameters.contentSniffingPolicy = contentSniffingPolicy; loadParameters.allowStoredCredentials = allowStoredCredentials; // If there is no WebFrame then this resource cannot be authenticated with the client. loadParameters.clientCredentialPolicy = (webFrame && webPage) ? resourceLoader->clientCredentialPolicy() : DoNotAskClientForAnyCredentials; loadParameters.shouldClearReferrerOnHTTPSToHTTPRedirect = shouldClearReferrerOnHTTPSToHTTPRedirect; loadParameters.isMainResource = resource && resource->type() == CachedResource::MainResource; loadParameters.defersLoading = resourceLoader->defersLoading(); loadParameters.needsCertificateInfo = loadParameters.isMainResource; loadParameters.maximumBufferingTime = maximumBufferingTime(resource); ASSERT((loadParameters.webPageID && loadParameters.webFrameID) || loadParameters.clientCredentialPolicy == DoNotAskClientForAnyCredentials); if (!WebProcess::shared().networkConnection()->connection()->send(Messages::NetworkConnectionToWebProcess::ScheduleResourceLoad(loadParameters), 0)) { // We probably failed to schedule this load with the NetworkProcess because it had crashed. // This load will never succeed so we will schedule it to fail asynchronously. scheduleInternallyFailedLoad(resourceLoader); return; } m_webResourceLoaders.set(identifier, WebResourceLoader::create(resourceLoader)); notifyDidScheduleResourceRequest(resourceLoader); }