Skip to content
  • gavinp@chromium.org's avatar
    Add Prerenderer, PrerenderHandle and a chromium interface for Prerendering. · af445b98
    gavinp@chromium.org authored
    https://bugs.webkit.org/show_bug.cgi?id=85005
    
    Reviewed by Adam Barth.
    
    Source/Platform:
    
    * Platform.gypi:
    * chromium/public/WebPrerender.h:
    (WebKit::WebPrerender::referrer):
    (WebCore):
    (WebPrerender):
    * chromium/public/WebPrerenderingSupport.h:
    (WebKit):
    (WebPrerenderingSupport):
    * chromium/public/WebURLRequest.h:
    * chromium/src/WebPrerenderingSupport.cpp: Added.
    (WebKit):
    (WebKit::WebPrerenderingSupport::initialize):
    (WebKit::WebPrerenderingSupport::shutdown):
    (WebKit::WebPrerenderingSupport::current):
    
    Source/WebCore:
    
    The prerender case isn't quite a resource load, and using resource loading to
    retrieve them has constrained the API, and unnecessarily complicated the loader.
    
    The new Prerenderer and PrerenderHandle let <link rel=prerender...> elements signal
    removal and unload to their platform.
    
    No new tests, as this interface requires a full platform to work, and doesn't affect layout.  Test
    it with your platform when implemented for it.
    
    * GNUmakefile.list.am:
    * Target.pri:
    * WebCore.gypi:
    * WebCore.vcproj/WebCore.vcproj:
    * WebCore.xcodeproj/project.pbxproj:
    * dom/Document.cpp:
    (WebCore::Document::Document):
    * dom/Document.h:
    (WebCore):
    (Document):
    (WebCore::Document::prerenderer):
    * html/HTMLLinkElement.cpp:
    (WebCore::HTMLLinkElement::removedFrom):
    * html/LinkRelAttribute.cpp:
    (WebCore::LinkRelAttribute::LinkRelAttribute):
    * html/LinkRelAttribute.h:
    (LinkRelAttribute):
    * loader/LinkLoader.cpp:
    (WebCore::LinkLoader::loadLink):
    (WebCore::LinkLoader::released):
    * loader/LinkLoader.h:
    (WebCore):
    (LinkLoader):
    * loader/Prerenderer.cpp: Added.
    (WebCore):
    (WebCore::Prerenderer::create):
    (WebCore::Prerenderer::Prerenderer):
    (WebCore::Prerenderer::~Prerenderer):
    (WebCore::Prerenderer::render):
    (WebCore::Prerenderer::stop):
    (WebCore::Prerenderer::suspend):
    (WebCore::Prerenderer::resume):
    (WebCore::Prerenderer::document):
    (WebCore::Prerenderer::client):
    * loader/Prerenderer.h: Copied from Source/Platform/chromium/public/WebPrerender.h.
    (WebCore):
    (Prerenderer):
    * loader/PrerendererClient.cpp: Copied from Source/WebCore/html/LinkRelAttribute.h.
    (WebCore):
    (WebCore::PrerendererClient::supplementName):
    (WebCore::PrerendererClient::from):
    (WebCore::providePrerendererClientTo):
    * loader/PrerendererClient.h: Copied from Source/WebCore/html/LinkRelAttribute.h.
    (WebCore):
    (PrerendererClient):
    (WebCore::PrerendererClient::~PrerendererClient):
    (WebCore::PrerendererClient::PrerendererClient):
    * loader/cache/CachedResource.cpp:
    (WebCore::defaultPriorityForResourceType):
    (WebCore::cachedResourceTypeToTargetType):
    (WebCore::CachedResource::load):
    * loader/cache/CachedResource.h:
    (WebCore::CachedResource::ignoreForRequestCount):
    * loader/cache/CachedResourceLoader.cpp:
    (WebCore::createResource):
    (WebCore::CachedResourceLoader::requestLinkResource):
    (WebCore::CachedResourceLoader::checkInsecureContent):
    (WebCore::CachedResourceLoader::canRequest):
    * platform/PrerenderHandle.h: Copied from Source/Platform/chromium/public/WebPrerender.h.
    (WebCore):
    (PrerenderHandle):
    * platform/chromium/Prerender.cpp: Added.
    (WebCore):
    (WebCore::Prerender::Prerender):
    (WebCore::Prerender::~Prerender):
    (WebCore::Prerender::setState):
    (WebCore::Prerender::add):
    (WebCore::Prerender::cancel):
    (WebCore::Prerender::abandon):
    (WebCore::Prerender::suspend):
    (WebCore::Prerender::resume):
    * platform/chromium/Prerender.h: Copied from Source/Platform/chromium/public/WebPrerender.h.
    (WebCore):
    (Prerender):
    (ExtraData):
    (WebCore::Prerender::ExtraData::~ExtraData):
    (WebCore::Prerender::url):
    (WebCore::Prerender::referrer):
    (WebCore::Prerender::referrerPolicy):
    (WebCore::Prerender::setExtraData):
    (WebCore::Prerender::extraData):
    * platform/chromium/PrerenderHandle.cpp: Copied from Source/Platform/chromium/public/WebPrerender.h.
    (WebCore):
    (WebCore::PrerenderHandle::create):
    (WebCore::PrerenderHandle::PrerenderHandle):
    (WebCore::PrerenderHandle::~PrerenderHandle):
    (WebCore::PrerenderHandle::prerender):
    (WebCore::PrerenderHandle::add):
    (WebCore::PrerenderHandle::cancel):
    (WebCore::PrerenderHandle::abandon):
    (WebCore::PrerenderHandle::suspend):
    (WebCore::PrerenderHandle::resume):
    (WebCore::PrerenderHandle::url):
    (WebCore::PrerenderHandle::referrer):
    (WebCore::PrerenderHandle::referrerPolicy):
    * platform/chromium/support/WebPrerender.cpp: Copied from Source/Platform/chromium/public/WebPrerender.h.
    (WebKit::WebPrerender::WebPrerender):
    (WebKit):
    (WebKit::WebPrerender::~WebPrerender):
    (WebKit::WebPrerender::url):
    (WebKit::WebPrerender::referrer):
    (WebKit::WebPrerender::referrerPolicy):
    (WebKit::WebPrerender::setExtraData):
    (WebKit::WebPrerender::extraData):
    * platform/network/blackberry/ResourceRequest.h:
    * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
    (WebCore::platformTargetTypeForRequest):
    * platform/network/chromium/ResourceRequest.h:
    
    Source/WebKit/chromium:
    
    The prerender case isn't quite a resource load, and using resource loading to
    retrieve them has constrained the API, and unnecessarily complicated the loader.
    
    The new Prerenderer and PrerenderHandle let <link rel=prerender...> elements signal
    removal and unload to their platform.
    
    * WebKit.gyp:
    * public/WebView.h:
    * src/PrerendererClientImpl.cpp: Copied from Source/WebCore/html/LinkRelAttribute.h.
    (WebKit):
    (WebKit::PrerendererClientImpl::PrerendererClientImpl):
    (WebKit::PrerendererClientImpl::willAddPrerender):
    * src/PrerendererClientImpl.h: Copied from Source/WebCore/html/LinkRelAttribute.h.
    (WebCore):
    (WebKit):
    (PrerendererClientImpl):
    * src/WebKit.cpp:
    (WebKit::shutdown):
    * src/WebViewImpl.cpp:
    (WebKit::WebViewImpl::setPrerendererClient):
    (WebKit):
    * src/WebViewImpl.h:
    (WebKit):
    (WebViewImpl):
    
    LayoutTests:
    
    The prerender case isn't quite a resource load, and using resource loading to
    retrieve them has constrained the API, and unnecessarily complicated the loader.
    
    The new Prerenderer and PrerenderHandle let <link rel=prerender...> elements signal
    removal and unload to their platform.
    
    These tests are being removed, and expectations updated, because the old phantom-load
    prerendering interface was susceptible to layout testing, and the new interface requires
    a full platform to test, so it can't really be a layout test.
    
    * fast/dom/HTMLLinkElement/prerender-expected.txt: Removed.
    * fast/dom/HTMLLinkElement/prerender.html: Removed.
    * platform/gtk/test_expectations.txt:
    * platform/mac/Skipped:
    * platform/qt/Skipped:
    * platform/win/Skipped:
    * platform/wincairo/Skipped:
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@117029 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    af445b98