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(); } }
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); } }
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())); }
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(); }
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; }
void MockImageResourceClient::dispose() { if (m_resource) toImageResource(m_resource)->getContent()->removeObserver(this); MockResourceClient::dispose(); }
void MockImageResourceClient::removeAsClient() { toImageResource(m_resource)->getContent()->removeObserver(this); MockResourceClient::removeAsClient(); }