diff options
author | Leon Clarke <leonclarke@google.com> | 2010-03-09 14:12:21 +0000 |
---|---|---|
committer | Leon Clarke <leonclarke@google.com> | 2010-05-04 10:59:37 +0100 |
commit | f91ac8eab3399adb5325701bebe0590a77e49df7 (patch) | |
tree | 04ff055963cf2bfe147998ca3396134b243be38d /WebCore/loader/loader.cpp | |
parent | b97e8541004c77ec0c85f74b896b9d3bdb6de6b4 (diff) | |
download | external_webkit-f91ac8eab3399adb5325701bebe0590a77e49df7.zip external_webkit-f91ac8eab3399adb5325701bebe0590a77e49df7.tar.gz external_webkit-f91ac8eab3399adb5325701bebe0590a77e49df7.tar.bz2 |
Link prefetch support
http://b/issue?id=2268353
Diffstat (limited to 'WebCore/loader/loader.cpp')
-rw-r--r-- | WebCore/loader/loader.cpp | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/WebCore/loader/loader.cpp b/WebCore/loader/loader.cpp index 4d2b474..24f141f 100644 --- a/WebCore/loader/loader.cpp +++ b/WebCore/loader/loader.cpp @@ -88,7 +88,12 @@ static ResourceRequest::TargetType cachedResourceTypeToTargetType(CachedResource return ResourceRequest::TargetIsFontResource; case CachedResource::ImageResource: return ResourceRequest::TargetIsImage; +#if ENABLE(LINK_PREFETCH) + case CachedResource::LinkPrefetch: + return ResourceRequest::TargetIsSubresource; +#endif } + ASSERT_NOT_REACHED(); return ResourceRequest::TargetIsSubresource; } @@ -109,6 +114,10 @@ Loader::Priority Loader::determinePriority(const CachedResource* resource) const return Medium; case CachedResource::ImageResource: return Low; +#if ENABLE(LINK_PREFETCH) + case CachedResource::LinkPrefetch: + return VeryLow; +#endif } ASSERT_NOT_REACHED(); return Low; @@ -138,9 +147,9 @@ void Loader::load(DocLoader* docLoader, CachedResource* resource, bool increment bool hadRequests = host->hasRequests(); Priority priority = determinePriority(resource); host->addRequest(request, priority); - docLoader->incrementRequestCount(); + docLoader->incrementRequestCount(request->cachedResource()); - if (priority > Low || !url.protocolInHTTPFamily() || !hadRequests) { + if (priority > Low || !url.protocolInHTTPFamily() || (priority == Low && !hadRequests)) { // Try to request important resources immediately host->servePendingRequests(priority); } else { @@ -352,6 +361,12 @@ void Loader::Host::servePendingRequests(RequestQueue& requestsPending, bool& ser } } +#if ENABLE(LINK_PREFETCH) + if (request->cachedResource()->type() == CachedResource::LinkPrefetch) { + resourceRequest.setHTTPHeaderField("X-Moz", "prefetch"); + } +#endif + RefPtr<SubresourceLoader> loader = SubresourceLoader::create(docLoader->doc()->frame(), this, resourceRequest, request->shouldDoSecurityCheck(), request->sendResourceLoadCallbacks()); if (loader) { @@ -361,7 +376,7 @@ void Loader::Host::servePendingRequests(RequestQueue& requestsPending, bool& ser printf("HOST %s COUNT %d LOADING %s\n", resourceRequest.url().host().latin1().data(), m_requestsLoading.size(), request->cachedResource()->url().latin1().data()); #endif } else { - docLoader->decrementRequestCount(); + docLoader->decrementRequestCount(request->cachedResource()); docLoader->setLoadInProgress(true); request->cachedResource()->error(); docLoader->setLoadInProgress(false); @@ -385,7 +400,7 @@ void Loader::Host::didFinishLoading(SubresourceLoader* loader) // the docLoader that it will delete when the document gets deleted. RefPtr<Document> protector(docLoader->doc()); if (!request->isMultipart()) - docLoader->decrementRequestCount(); + docLoader->decrementRequestCount(request->cachedResource()); CachedResource* resource = request->cachedResource(); ASSERT(!resource->resourceToRevalidate()); @@ -433,7 +448,7 @@ void Loader::Host::didFail(SubresourceLoader* loader, bool cancelled) // the docLoader that it will delete when the document gets deleted. RefPtr<Document> protector(docLoader->doc()); if (!request->isMultipart()) - docLoader->decrementRequestCount(); + docLoader->decrementRequestCount(request->cachedResource()); CachedResource* resource = request->cachedResource(); @@ -478,7 +493,7 @@ void Loader::Host::didReceiveResponse(SubresourceLoader* loader, const ResourceR // 304 Not modified / Use local copy m_requestsLoading.remove(loader); loader->clearClient(); - request->docLoader()->decrementRequestCount(); + request->docLoader()->decrementRequestCount(request->cachedResource()); // Existing resource is ok, just use it updating the expiration time. cache()->revalidationSucceeded(resource, response); @@ -510,7 +525,7 @@ void Loader::Host::didReceiveResponse(SubresourceLoader* loader, const ResourceR request->setIsMultipart(true); // We don't count multiParts in a DocLoader's request count - request->docLoader()->decrementRequestCount(); + request->docLoader()->decrementRequestCount(request->cachedResource()); // If we get a multipart response, we must have a handle ASSERT(loader->handle()); @@ -559,7 +574,7 @@ void Loader::Host::cancelPendingRequests(RequestQueue& requestsPending, DocLoade if (request->docLoader() == docLoader) { cache()->remove(request->cachedResource()); delete request; - docLoader->decrementRequestCount(); + docLoader->decrementRequestCount(request->cachedResource()); } else remaining.append(request); } |