void LinkLoader::createLinkPreloadResourceClient(Resource* resource)
{
    if (!resource)
        return;
    switch (resource->getType()) {
    case Resource::Image:
        m_linkPreloadResourceClient = LinkPreloadImageResourceClient::create(this, toImageResource(resource));
        break;
    case Resource::Script:
        m_linkPreloadResourceClient = LinkPreloadScriptResourceClient::create(this, toScriptResource(resource));
        break;
    case Resource::CSSStyleSheet:
        m_linkPreloadResourceClient = LinkPreloadStyleResourceClient::create(this, toCSSStyleSheetResource(resource));
        break;
    case Resource::Font:
        m_linkPreloadResourceClient = LinkPreloadFontResourceClient::create(this, toFontResource(resource));
        break;
    case Resource::Media:
    case Resource::TextTrack:
    case Resource::Raw:
    case Resource::LinkPreload:
        m_linkPreloadResourceClient = LinkPreloadRawResourceClient::create(this, toRawResource(resource));
        break;
    default:
        ASSERT_NOT_REACHED();
    }
}
示例#2
0
static void cachedResourcesForDocument(Document* document, Vector<Resource*>& result)
{
    const ResourceFetcher::DocumentResourceMap& allResources = document->fetcher()->allResources();
    ResourceFetcher::DocumentResourceMap::const_iterator end = allResources.end();
    for (ResourceFetcher::DocumentResourceMap::const_iterator it = allResources.begin(); it != end; ++it) {
        Resource* cachedResource = it->value.get();

        switch (cachedResource->type()) {
        case Resource::Image:
            // Skip images that were not auto loaded (images disabled in the user agent).
            if (toImageResource(cachedResource)->stillNeedsLoad())
                continue;
            break;
        case Resource::Font:
            // Skip fonts that were referenced in CSS but never used/downloaded.
            if (toFontResource(cachedResource)->stillNeedsLoad())
                continue;
            break;
        default:
            // All other Resource types download immediately.
            break;
        }

        result.append(cachedResource);
    }
}
示例#3
0
MockImageResourceClient::MockImageResourceClient(ImageResource* resource)
    : MockResourceClient(resource),
      m_imageChangedCount(0),
      m_encodedSizeOnLastImageChanged(0),
      m_imageNotifyFinishedCount(0),
      m_encodedSizeOnImageNotifyFinished(0) {
  toImageResource(m_resource)->getContent()->addObserver(this);
}
ResourcePtr<ImageResource> ImageResource::fetch(FetchRequest& request, ResourceFetcher* fetcher)
{
    if (request.resourceRequest().requestContext() == WebURLRequest::RequestContextUnspecified)
        request.mutableResourceRequest().setRequestContext(WebURLRequest::RequestContextImage);
    if (fetcher->context().pageDismissalEventBeingDispatched()) {
        KURL requestURL = request.resourceRequest().url();
        if (requestURL.isValid() && fetcher->context().canRequest(Resource::Image, request.resourceRequest(), requestURL, request.options(), request.forPreload(), request.originRestriction()))
            fetcher->context().sendImagePing(requestURL);
        return 0;
    }

    if (fetcher->clientDefersImage(request.resourceRequest().url()))
        request.setDefer(FetchRequest::DeferredByClient);

    return toImageResource(fetcher->requestResource(request, ImageResourceFactory()));
}
示例#5
0
void ImageResource::switchClientsToRevalidatedResource()
{
    ASSERT(resourceToRevalidate());
    ASSERT(resourceToRevalidate()->isImage());
    // Pending container size requests need to be transferred to the revalidated resource.
    if (!m_pendingContainerSizeRequests.isEmpty()) {
        // A copy of pending size requests is needed as they are deleted during Resource::switchClientsToRevalidateResource().
        ContainerSizeRequests switchContainerSizeRequests;
        for (const auto& containerSizeRequest : m_pendingContainerSizeRequests)
            switchContainerSizeRequests.set(containerSizeRequest.key, containerSizeRequest.value);
        Resource::switchClientsToRevalidatedResource();
        ImageResource* revalidatedImageResource = toImageResource(resourceToRevalidate());
        for (const auto& containerSizeRequest : switchContainerSizeRequests)
            revalidatedImageResource->setContainerSizeForLayoutObject(containerSizeRequest.key, containerSizeRequest.value.first, containerSizeRequest.value.second);
        return;
    }

    Resource::switchClientsToRevalidatedResource();
}
示例#6
0
ResourcePtr<ImageResource> ResourceFetcher::fetchImage(FetchRequest& request)
{
    request.setDefer(clientDefersImage(request.resourceRequest().url()) ? FetchRequest::DeferredByClient : FetchRequest::NoDefer);
    ResourcePtr<Resource> resource = requestResource(Resource::Image, request);
    return resource && resource->type() == Resource::Image ? toImageResource(resource) : 0;
}
示例#7
0
void MockImageResourceClient::dispose() {
  if (m_resource)
    toImageResource(m_resource)->getContent()->removeObserver(this);
  MockResourceClient::dispose();
}
示例#8
0
void MockImageResourceClient::removeAsClient() {
  toImageResource(m_resource)->getContent()->removeObserver(this);
  MockResourceClient::removeAsClient();
}