void WebResourceLoadScheduler::scheduleLoad(ResourceLoader* resourceLoader, ResourceLoadPriority priority) { LOG(Network, "(WebProcess) WebResourceLoadScheduler::scheduleLoad, url '%s' priority %i", resourceLoader->url().string().utf8().data(), priority); ASSERT(resourceLoader); ASSERT(priority != ResourceLoadPriorityUnresolved); priority = ResourceLoadPriorityHighest; // If there's a web archive resource for this URL, we don't need to schedule the load since it will never touch the network. if (resourceLoader->documentLoader()->archiveResourceForURL(resourceLoader->request().url())) { startResourceLoader(resourceLoader); return; } ResourceLoadIdentifier identifier; ResourceRequest request = resourceLoader->request(); // We want the network process involved in scheduling data URL loads but it doesn't need to know the full (often long) URL. if (request.url().protocolIsData()) { DEFINE_STATIC_LOCAL(KURL, dataURL, (KURL(), "data:")); request.setURL(dataURL); } if (!WebProcess::shared().networkConnection()->connection()->sendSync(Messages::NetworkConnectionToWebProcess::ScheduleNetworkRequest(request, priority), Messages::NetworkConnectionToWebProcess::ScheduleNetworkRequest::Reply(identifier), 0)) { // FIXME (NetworkProcess): What should we do if this fails? ASSERT_NOT_REACHED(); } resourceLoader->setIdentifier(identifier); m_pendingResourceLoaders.set(identifier, resourceLoader); notifyDidScheduleResourceRequest(resourceLoader); }
void WebResourceLoadScheduler::startResourceLoad(ResourceLoadIdentifier identifier) { RefPtr<ResourceLoader> loader = m_pendingResourceLoaders.take(identifier); ASSERT(loader); LOG(Network, "(WebProcess) WebResourceLoadScheduler::startResourceLoad starting load for '%s'", loader->url().string().utf8().data()); m_activeResourceLoaders.set(identifier, loader); startResourceLoader(loader.get()); }
void WebResourceLoadScheduler::scheduleLoad(ResourceLoader* resourceLoader, ResourceLoadPriority priority) { LOG(NetworkScheduling, "(WebProcess) WebResourceLoadScheduler::scheduleLoad, url '%s' priority %i", resourceLoader->url().string().utf8().data(), priority); ASSERT(resourceLoader); ASSERT(priority != ResourceLoadPriorityUnresolved); priority = ResourceLoadPriorityHighest; // If there's a web archive resource for this URL, we don't need to schedule the load since it will never touch the network. if (resourceLoader->documentLoader()->archiveResourceForURL(resourceLoader->request().url())) { startResourceLoader(resourceLoader); return; } ResourceLoadIdentifier identifier; ResourceRequest request = resourceLoader->request(); // We want the network process involved in scheduling data URL loads but it doesn't need to know the full (often long) URL. if (request.url().protocolIsData()) { DEFINE_STATIC_LOCAL(KURL, dataURL, (KURL(), "data:")); request.setURL(dataURL); } // FIXME (NetworkProcess): When the ResourceLoader asks its FrameLoaderClient about using // credential storage it passes along its identifier. // But at this point it doesn't have the correct identifier yet. // In practice clients we know about don't care about the identifier, but this is another reason // we need to make sure ResourceLoaders get correct identifiers right off the bat. StoredCredentials allowStoredCredentials = resourceLoader->shouldUseCredentialStorage() ? AllowStoredCredentials : DoNotAllowStoredCredentials; NetworkResourceLoadParameters loadParameters(request, priority, resourceLoader->shouldSniffContent() ? SniffContent : DoNotSniffContent, allowStoredCredentials); if (!WebProcess::shared().networkConnection()->connection()->sendSync(Messages::NetworkConnectionToWebProcess::ScheduleResourceLoad(loadParameters), Messages::NetworkConnectionToWebProcess::ScheduleResourceLoad::Reply(identifier), 0)) { // FIXME (NetworkProcess): What should we do if this fails? ASSERT_NOT_REACHED(); } resourceLoader->setIdentifier(identifier); m_webResourceLoaders.set(identifier, WebResourceLoader::create(resourceLoader)); notifyDidScheduleResourceRequest(resourceLoader); }
void WebResourceLoadScheduler::scheduleLoad(ResourceLoader* resourceLoader, ResourceLoadPriority priority) { LOG(NetworkScheduling, "(WebProcess) WebResourceLoadScheduler::scheduleLoad, url '%s' priority %i", resourceLoader->url().string().utf8().data(), priority); ASSERT(resourceLoader); ASSERT(priority != ResourceLoadPriorityUnresolved); priority = ResourceLoadPriorityHighest; // If there's a web archive resource for this URL, we don't need to schedule the load since it will never touch the network. if (resourceLoader->documentLoader()->archiveResourceForURL(resourceLoader->request().url())) { startResourceLoader(resourceLoader); return; } ResourceLoadIdentifier identifier; ResourceRequest request = resourceLoader->request(); // FIXME (NetworkProcess): When the ResourceLoader asks its FrameLoaderClient about using // credential storage it passes along its identifier. // But at this point it doesn't have the correct identifier yet. // In practice clients we know about don't care about the identifier, but this is another reason // we need to make sure ResourceLoaders get correct identifiers right off the bat. StoredCredentials allowStoredCredentials = resourceLoader->shouldUseCredentialStorage() ? AllowStoredCredentials : DoNotAllowStoredCredentials; NetworkResourceLoadParameters loadParameters(request, priority, resourceLoader->shouldSniffContent() ? SniffContent : DoNotSniffContent, allowStoredCredentials, resourceLoader->frameLoader()->frame()->settings()->privateBrowsingEnabled()); if (!WebProcess::shared().networkConnection()->connection()->sendSync(Messages::NetworkConnectionToWebProcess::ScheduleResourceLoad(loadParameters), Messages::NetworkConnectionToWebProcess::ScheduleResourceLoad::Reply(identifier), 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. addUnschedulableLoad(resourceLoader); return; } resourceLoader->setIdentifier(identifier); m_webResourceLoaders.set(identifier, WebResourceLoader::create(resourceLoader)); notifyDidScheduleResourceRequest(resourceLoader); }