Changeset 117029 in webkit


Ignore:
Timestamp:
May 14, 2012 9:42:52 PM (12 years ago)
Author:
gavinp@chromium.org
Message:

Add Prerenderer, PrerenderHandle and a chromium interface for Prerendering.
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:
Location:
trunk
Files:
2 added
2 deleted
36 edited
10 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r117026 r117029  
     12012-05-14  Gavin Peters  <gavinp@chromium.org>
     2
     3        Add Prerenderer, PrerenderHandle and a chromium interface for Prerendering.
     4        https://bugs.webkit.org/show_bug.cgi?id=85005
     5
     6        Reviewed by Adam Barth.
     7
     8        The prerender case isn't quite a resource load, and using resource loading to
     9        retrieve them has constrained the API, and unnecessarily complicated the loader.
     10
     11        The new Prerenderer and PrerenderHandle let <link rel=prerender...> elements signal
     12        removal and unload to their platform.
     13
     14        These tests are being removed, and expectations updated, because the old phantom-load
     15        prerendering interface was susceptible to layout testing, and the new interface requires
     16        a full platform to test, so it can't really be a layout test.
     17
     18        * fast/dom/HTMLLinkElement/prerender-expected.txt: Removed.
     19        * fast/dom/HTMLLinkElement/prerender.html: Removed.
     20        * platform/gtk/test_expectations.txt:
     21        * platform/mac/Skipped:
     22        * platform/qt/Skipped:
     23        * platform/win/Skipped:
     24        * platform/wincairo/Skipped:
     25
    1262012-05-14  Eric Seidel  <eric@webkit.org>
    227
  • trunk/LayoutTests/platform/gtk/test_expectations.txt

    r116957 r117029  
    837837BUGWKGTK : fast/dom/HTMLLinkElement/prefetch-onerror.html = FAIL
    838838BUGWKGTK : fast/dom/HTMLLinkElement/prefetch-onload.html = FAIL
    839 BUGWKGTK : fast/dom/HTMLLinkElement/prerender.html = FAIL
    840839BUGWKGTK : fast/dom/HTMLLinkElement/subresource.html = FAIL
    841840
  • trunk/LayoutTests/platform/mac/Skipped

    r116957 r117029  
    194194fast/dom/HTMLLinkElement/prefetch-onload.html
    195195fast/dom/HTMLLinkElement/prefetch-too-many-clients.html
    196 fast/dom/HTMLLinkElement/prerender.html
    197196fast/dom/HTMLLinkElement/subresource.html
    198197http/tests/misc/link-rel-prefetch-and-subresource.html
  • trunk/LayoutTests/platform/qt/Skipped

    r116957 r117029  
    145145fast/dom/HTMLLinkElement/prefetch-onload.html
    146146fast/dom/HTMLLinkElement/prefetch-too-many-clients.html
    147 fast/dom/HTMLLinkElement/prerender.html
    148147fast/dom/HTMLLinkElement/subresource.html
    149148http/tests/misc/link-rel-prefetch-and-subresource.html
  • trunk/LayoutTests/platform/win/Skipped

    r116957 r117029  
    10981098fast/dom/HTMLLinkElement/prefetch-too-many-clients.html
    10991099http/tests/misc/link-rel-prefetch-and-subresource.html
    1100 fast/dom/HTMLLinkElement/prerender.html
    11011100fast/dom/HTMLLinkElement/subresource.html
    11021101http/tests/misc/prefetch-purpose.html
  • trunk/LayoutTests/platform/wincairo/Skipped

    r116847 r117029  
    16131613fast/dom/HTMLLinkElement/prefetch-too-many-clients.html
    16141614http/tests/misc/link-rel-prefetch-and-subresource.html
    1615 fast/dom/HTMLLinkElement/prerender.html
    16161615fast/dom/HTMLLinkElement/subresource.html
    16171616http/tests/misc/prefetch-purpose.html
  • trunk/Source/Platform/ChangeLog

    r116865 r117029  
     12012-05-14  Gavin Peters  <gavinp@chromium.org>
     2
     3        Add Prerenderer, PrerenderHandle and a chromium interface for Prerendering.
     4        https://bugs.webkit.org/show_bug.cgi?id=85005
     5
     6        Reviewed by Adam Barth.
     7
     8        * Platform.gypi:
     9        * chromium/public/WebPrerender.h:
     10        (WebKit::WebPrerender::referrer):
     11        (WebCore):
     12        (WebPrerender):
     13        * chromium/public/WebPrerenderingSupport.h:
     14        (WebKit):
     15        (WebPrerenderingSupport):
     16        * chromium/public/WebURLRequest.h:
     17        * chromium/src/WebPrerenderingSupport.cpp: Added.
     18        (WebKit):
     19        (WebKit::WebPrerenderingSupport::initialize):
     20        (WebKit::WebPrerenderingSupport::shutdown):
     21        (WebKit::WebPrerenderingSupport::current):
     22
    1232012-05-12  Sheriff Bot  <webkit.review.bot@gmail.com>
    224
  • trunk/Source/Platform/Platform.gypi

    r116865 r117029  
    9494            'chromium/public/WebThreadSafeData.h',
    9595            'chromium/public/WebTransformationMatrix.h',
     96            'chromium/public/WebPrerender.h',
    9697            'chromium/public/WebURL.h',
    9798            'chromium/public/WebURLError.h',
     
    107108            'chromium/src/WebCString.cpp',
    108109            'chromium/src/WebFloatQuad.cpp',
     110            'chromium/src/WebPrerenderingSupport.cpp',
    109111            'chromium/src/WebString.cpp',
    110112            'chromium/src/WebVideoFrame.cpp',
  • trunk/Source/Platform/chromium/public/WebPrerender.h

    r115739 r117029  
    4242#endif
    4343
     44namespace WebCore {
     45class Prerender;
     46}
     47
    4448namespace WebKit {
    4549
    46 // This thunk implementation of WebPrerender exists only for staging; this will allow
    47 // the Chromium side of the Prerendering API to land, and then later we can atomicly
    48 // switch WebKit to prerender, and finally remove the old phantom-request prerender
    49 // implementation from Chromium.
    50 // FIXME: Put the actual implementation here after the Chromium side of this API
    51 // lands.
    5250class WebPrerender {
    5351public:
     
    5654        virtual ~ExtraData() { }
    5755    };
    58     WebURL url() const { return WebURL(); }
    59     WebString referrer() const { return WebString(); }
    60     WebReferrerPolicy referrerPolicy() const { return WebReferrerPolicy(); }
    61     void setExtraData(ExtraData*) { }
    62     const ExtraData* extraData() const { return 0; }
     56
     57#if WEBKIT_IMPLEMENTATION
     58    explicit WebPrerender(PassRefPtr<WebCore::Prerender>);
     59    ~WebPrerender();
     60#endif
     61
     62    WEBKIT_EXPORT WebURL url() const;
     63    WEBKIT_EXPORT WebString referrer() const;
     64    WEBKIT_EXPORT WebReferrerPolicy referrerPolicy() const;
     65
     66    WEBKIT_EXPORT void setExtraData(ExtraData*);
     67    WEBKIT_EXPORT const ExtraData* extraData() const;
    6368
    6469private:
    65     WebPrerender() { }
    66     ~WebPrerender() { }
     70    WebPrerender();
     71
     72    WebPrivatePtr<WebCore::Prerender> m_private;
    6773};
    6874
  • trunk/Source/Platform/chromium/public/WebPrerenderingSupport.h

    r115703 r117029  
    3838class WebPrerender;
    3939
    40 // This thunk implementation of WebPrerenderingSupport exists only for staging; this will
    41 // allow the Chromium side of the Prerendering API to land, and then later we can atomicly
    42 // switch WebKit to prerender, and finally remove the old phantom-request prerender
    43 // implementation from Chromium.
    44 // FIXME: Put the actual implementation here after the Chromium side of this API
    45 // lands.
    4640class WebPrerenderingSupport {
    4741public:
    48     static void initialize(WebPrerenderingSupport*) { }
    49     static void shutdown() { }
    50     static WebPrerenderingSupport* current() { return 0; }
     42    WEBKIT_EXPORT static void initialize(WebPrerenderingSupport*);
     43    WEBKIT_EXPORT static void shutdown();
     44    WEBKIT_EXPORT static WebPrerenderingSupport* current();
    5145
    52     virtual void add(const WebPrerender&) { }
    53     virtual void cancel(const WebPrerender&) { }
    54     virtual void abandon(const WebPrerender&) { }
     46    // A prerender link element is added when it is inserted into a document.
     47    virtual void add(const WebPrerender&) = 0;
     48
     49    // A prerender is canceled when it is removed from a document.
     50    virtual void cancel(const WebPrerender&) = 0;
     51
     52    // A prerender is abandoned when it's navigated away from or suspended in the page cache. This
     53    // is a weaker signal than cancel(), since the launcher hasn't indicated that the prerender isn't
     54    // wanted, and we may end up using it after, for instance, a short redirect chain.
     55    virtual void abandon(const WebPrerender&) = 0;
    5556
    5657protected:
    5758    WebPrerenderingSupport() { }
    5859    virtual ~WebPrerenderingSupport() { }
     60
     61private:
     62    static WebPrerenderingSupport* s_platform;
    5963};
    6064
  • trunk/Source/Platform/chromium/public/WebURLRequest.h

    r115206 r117029  
    7070        TargetIsSharedWorker = 10,
    7171        TargetIsPrefetch = 11,
    72         TargetIsPrerender = 12,
    73         TargetIsFavicon = 13,
    74         TargetIsXHR = 14,
    75         TargetIsTextTrack = 15,
    76         TargetIsUnspecified = 16,
     72        TargetIsFavicon = 12,
     73        TargetIsXHR = 13,
     74        TargetIsTextTrack = 14,
     75        TargetIsUnspecified = 15,
     76        // FIXME: This old enum value is only being left in while prerendering is staging into chromium. After http://codereview.chromium.org/10244007/
     77        // lands, this should be removed.
     78        TargetIsPrerender = TargetIsUnspecified,
    7779    };
    7880
  • trunk/Source/Platform/chromium/src/WebPrerenderingSupport.cpp

    r117028 r117029  
    11/*
    2  * Copyright (C) 2011 Google Inc. All rights reserved.
     2 * Copyright (C) 2012 Google Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2727 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    2828 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    29  *
    3029 */
    3130
    32 #ifndef LinkRelAttribute_h
    33 #define LinkRelAttribute_h
     31#include <public/WebPrerenderingSupport.h>
    3432
    35 #include "IconURL.h"
     33namespace WebKit {
    3634
    37 namespace WebCore {
     35WebPrerenderingSupport* WebPrerenderingSupport::s_platform = 0;
    3836
    39 struct LinkRelAttribute {
    40 public:
    41     bool m_isStyleSheet;
    42     IconType m_iconType;
    43     bool m_isAlternate;
    44     bool m_isDNSPrefetch;
    45 #if ENABLE(LINK_PREFETCH)
    46     bool m_isLinkPrefetch;
    47     bool m_isLinkPrerender;
    48     bool m_isLinkSubresource;
    49 #endif
    50 
    51     LinkRelAttribute();
    52     explicit LinkRelAttribute(const String&);
    53 };
    54    
     37void WebPrerenderingSupport::initialize(WebPrerenderingSupport* platform)
     38{
     39    s_platform = platform;
    5540}
    5641
    57 #endif
     42void WebPrerenderingSupport::shutdown()
     43{
     44    s_platform = 0;
     45}
    5846
     47WebPrerenderingSupport* WebPrerenderingSupport::current()
     48{
     49    return s_platform;
     50}
     51
     52}
  • trunk/Source/WebCore/ChangeLog

    r117028 r117029  
     12012-05-14  Gavin Peters  <gavinp@chromium.org>
     2
     3        Add Prerenderer, PrerenderHandle and a chromium interface for Prerendering.
     4        https://bugs.webkit.org/show_bug.cgi?id=85005
     5
     6        Reviewed by Adam Barth.
     7
     8        The prerender case isn't quite a resource load, and using resource loading to
     9        retrieve them has constrained the API, and unnecessarily complicated the loader.
     10
     11        The new Prerenderer and PrerenderHandle let <link rel=prerender...> elements signal
     12        removal and unload to their platform.
     13
     14        No new tests, as this interface requires a full platform to work, and doesn't affect layout.  Test
     15        it with your platform when implemented for it.
     16
     17        * GNUmakefile.list.am:
     18        * Target.pri:
     19        * WebCore.gypi:
     20        * WebCore.vcproj/WebCore.vcproj:
     21        * WebCore.xcodeproj/project.pbxproj:
     22        * dom/Document.cpp:
     23        (WebCore::Document::Document):
     24        * dom/Document.h:
     25        (WebCore):
     26        (Document):
     27        (WebCore::Document::prerenderer):
     28        * html/HTMLLinkElement.cpp:
     29        (WebCore::HTMLLinkElement::removedFrom):
     30        * html/LinkRelAttribute.cpp:
     31        (WebCore::LinkRelAttribute::LinkRelAttribute):
     32        * html/LinkRelAttribute.h:
     33        (LinkRelAttribute):
     34        * loader/LinkLoader.cpp:
     35        (WebCore::LinkLoader::loadLink):
     36        (WebCore::LinkLoader::released):
     37        * loader/LinkLoader.h:
     38        (WebCore):
     39        (LinkLoader):
     40        * loader/Prerenderer.cpp: Added.
     41        (WebCore):
     42        (WebCore::Prerenderer::create):
     43        (WebCore::Prerenderer::Prerenderer):
     44        (WebCore::Prerenderer::~Prerenderer):
     45        (WebCore::Prerenderer::render):
     46        (WebCore::Prerenderer::stop):
     47        (WebCore::Prerenderer::suspend):
     48        (WebCore::Prerenderer::resume):
     49        (WebCore::Prerenderer::document):
     50        (WebCore::Prerenderer::client):
     51        * loader/Prerenderer.h: Copied from Source/Platform/chromium/public/WebPrerender.h.
     52        (WebCore):
     53        (Prerenderer):
     54        * loader/PrerendererClient.cpp: Copied from Source/WebCore/html/LinkRelAttribute.h.
     55        (WebCore):
     56        (WebCore::PrerendererClient::supplementName):
     57        (WebCore::PrerendererClient::from):
     58        (WebCore::providePrerendererClientTo):
     59        * loader/PrerendererClient.h: Copied from Source/WebCore/html/LinkRelAttribute.h.
     60        (WebCore):
     61        (PrerendererClient):
     62        (WebCore::PrerendererClient::~PrerendererClient):
     63        (WebCore::PrerendererClient::PrerendererClient):
     64        * loader/cache/CachedResource.cpp:
     65        (WebCore::defaultPriorityForResourceType):
     66        (WebCore::cachedResourceTypeToTargetType):
     67        (WebCore::CachedResource::load):
     68        * loader/cache/CachedResource.h:
     69        (WebCore::CachedResource::ignoreForRequestCount):
     70        * loader/cache/CachedResourceLoader.cpp:
     71        (WebCore::createResource):
     72        (WebCore::CachedResourceLoader::requestLinkResource):
     73        (WebCore::CachedResourceLoader::checkInsecureContent):
     74        (WebCore::CachedResourceLoader::canRequest):
     75        * platform/PrerenderHandle.h: Copied from Source/Platform/chromium/public/WebPrerender.h.
     76        (WebCore):
     77        (PrerenderHandle):
     78        * platform/chromium/Prerender.cpp: Added.
     79        (WebCore):
     80        (WebCore::Prerender::Prerender):
     81        (WebCore::Prerender::~Prerender):
     82        (WebCore::Prerender::setState):
     83        (WebCore::Prerender::add):
     84        (WebCore::Prerender::cancel):
     85        (WebCore::Prerender::abandon):
     86        (WebCore::Prerender::suspend):
     87        (WebCore::Prerender::resume):
     88        * platform/chromium/Prerender.h: Copied from Source/Platform/chromium/public/WebPrerender.h.
     89        (WebCore):
     90        (Prerender):
     91        (ExtraData):
     92        (WebCore::Prerender::ExtraData::~ExtraData):
     93        (WebCore::Prerender::url):
     94        (WebCore::Prerender::referrer):
     95        (WebCore::Prerender::referrerPolicy):
     96        (WebCore::Prerender::setExtraData):
     97        (WebCore::Prerender::extraData):
     98        * platform/chromium/PrerenderHandle.cpp: Copied from Source/Platform/chromium/public/WebPrerender.h.
     99        (WebCore):
     100        (WebCore::PrerenderHandle::create):
     101        (WebCore::PrerenderHandle::PrerenderHandle):
     102        (WebCore::PrerenderHandle::~PrerenderHandle):
     103        (WebCore::PrerenderHandle::prerender):
     104        (WebCore::PrerenderHandle::add):
     105        (WebCore::PrerenderHandle::cancel):
     106        (WebCore::PrerenderHandle::abandon):
     107        (WebCore::PrerenderHandle::suspend):
     108        (WebCore::PrerenderHandle::resume):
     109        (WebCore::PrerenderHandle::url):
     110        (WebCore::PrerenderHandle::referrer):
     111        (WebCore::PrerenderHandle::referrerPolicy):
     112        * platform/chromium/support/WebPrerender.cpp: Copied from Source/Platform/chromium/public/WebPrerender.h.
     113        (WebKit::WebPrerender::WebPrerender):
     114        (WebKit):
     115        (WebKit::WebPrerender::~WebPrerender):
     116        (WebKit::WebPrerender::url):
     117        (WebKit::WebPrerender::referrer):
     118        (WebKit::WebPrerender::referrerPolicy):
     119        (WebKit::WebPrerender::setExtraData):
     120        (WebKit::WebPrerender::extraData):
     121        * platform/network/blackberry/ResourceRequest.h:
     122        * platform/network/blackberry/ResourceRequestBlackBerry.cpp:
     123        (WebCore::platformTargetTypeForRequest):
     124        * platform/network/chromium/ResourceRequest.h:
     125
    11262012-05-14  Luke Macpherson  <macpherson@chromium.org>
    2127
  • trunk/Source/WebCore/GNUmakefile.list.am

    r116974 r117029  
    28512851        Source/WebCore/loader/PolicyChecker.cpp \
    28522852        Source/WebCore/loader/PolicyChecker.h \
     2853        Source/WebCore/loader/Prerenderer.cpp \
     2854        Source/WebCore/loader/Prerenderer.h \
     2855        Source/WebCore/loader/PrerendererClient.cpp \
     2856        Source/WebCore/loader/PrerendererClient.h \
    28532857        Source/WebCore/loader/ProgressTracker.cpp \
    28542858        Source/WebCore/loader/ProgressTracker.h \
     
    35483552        Source/WebCore/platform/PopupMenu.h \
    35493553        Source/WebCore/platform/PopupMenuStyle.h \
     3554        Source/WebCore/platform/PrerenderHandle.h \
    35503555        Source/WebCore/platform/PurgeableBuffer.h \
    35513556        Source/WebCore/platform/PurgePriority.h \
  • trunk/Source/WebCore/Target.pri

    r116974 r117029  
    985985    loader/PolicyChecker.cpp \
    986986    loader/ProgressTracker.cpp \
     987    loader/Prerenderer.cpp \
     988    loader/PrerendererClient.cpp \
    987989    loader/NavigationScheduler.cpp \
    988990    loader/ResourceLoader.cpp \
     
    21082110    loader/NetscapePlugInStreamLoader.h \
    21092111    loader/PlaceholderDocument.h \
     2112    loader/Prerenderer.h \
     2113    loader/PrerendererClient.h \
    21102114    loader/ProgressTracker.h \
    21112115    loader/ResourceLoader.h \
     
    23932397    platform/Widget.h \
    23942398    platform/PlatformStrategies.h \
     2399    platform/PrerenderHandle.h \
    23952400    platform/LocalizedStrings.h \
    23962401    plugins/DOMMimeTypeArray.h \
  • trunk/Source/WebCore/WebCore.gypi

    r116994 r117029  
    28712871            'loader/PolicyCallback.cpp',
    28722872            'loader/PolicyChecker.cpp',
     2873            'loader/Prerenderer.cpp',
     2874            'loader/Prerenderer.h',
     2875            'loader/PrerendererClient.cpp',
     2876            'loader/PrerendererClient.h',
    28732877            'loader/ProgressTracker.cpp',
    28742878            'loader/ResourceLoadNotifier.cpp',
     
    31573161            'platform/PlatformTouchEvent.h',
    31583162            'platform/PlatformTouchPoint.h',
     3163            'platform/PrerenderHandle.h',
    31593164            'platform/PurgeableBuffer.h',
    31603165            'platform/ReferrerPolicy.h',
     
    33363341            'platform/chromium/PopupListBox.h',
    33373342            'platform/chromium/PopupMenuPrivate.h',
     3343            'platform/chromium/Prerender.cpp',
     3344            'platform/chromium/Prerender.h',
     3345            'platform/chromium/PrerenderHandle.cpp',
    33383346            'platform/chromium/SSLKeyGeneratorChromium.cpp',
    33393347            'platform/chromium/ScrollbarThemeChromium.cpp',
     
    82968304            'platform/chromium/support/WebMediaStreamSource.cpp',
    82978305            'platform/chromium/support/WebMediaStreamSourcesRequest.cpp',
     8306            'platform/chromium/support/WebPrerender.cpp',
    82988307            'platform/chromium/support/WebThreadSafeData.cpp',
    82998308            'platform/chromium/support/WebTransformationMatrix.cpp',
  • trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj

    r116974 r117029  
    2706327063                        </File>
    2706427064                        <File
     27065                                RelativePath="..\loader\Prerenderer.cpp"
     27066                                >
     27067                        </File>
     27068                        <File
     27069                                RelativePath="..\loader\Prerenderer.h"
     27070                                >
     27071                        </File>
     27072                        <File
     27073                                RelativePath="..\loader\PrerendererClient.cpp"
     27074                                >
     27075                        </File>
     27076                        <File
     27077                                RelativePath="..\loader\PrerendererClient.h"
     27078                                >
     27079                        </File>
     27080                        <File
    2706527081                                RelativePath="..\loader\ProgressTracker.cpp"
    2706627082                                >
     
    2794427960                        <File
    2794527961                                RelativePath="..\platform\PopupMenuStyle.h"
     27962                                >
     27963                        </File>
     27964                        <File
     27965                                RelativePath="..\platform\PrerenderHandle.h"
    2794627966                                >
    2794727967                        </File>
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r117018 r117029  
    36083608                9831AE4A154225C900FE2644 /* ReferrerPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 9831AE49154225A200FE2644 /* ReferrerPolicy.h */; settings = {ATTRIBUTES = (Private, ); }; };
    36093609                984264F112D5280A000D88A4 /* LinkLoaderClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 984264EF12D5280A000D88A4 /* LinkLoaderClient.h */; };
     3610                9856F8CC1549E82400B04F3A /* Prerenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9856F8C81549E82400B04F3A /* Prerenderer.cpp */; };
     3611                9856F8CD1549E82400B04F3A /* Prerenderer.h in Headers */ = {isa = PBXBuildFile; fileRef = 9856F8C91549E82400B04F3A /* Prerenderer.h */; };
     3612                9856F8CE1549E82400B04F3A /* PrerendererClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9856F8CA1549E82400B04F3A /* PrerendererClient.cpp */; };
     3613                9856F8CF1549E82400B04F3A /* PrerendererClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 9856F8CB1549E82400B04F3A /* PrerendererClient.h */; };
     3614                9856F8D11549E84F00B04F3A /* PrerenderHandle.h in Headers */ = {isa = PBXBuildFile; fileRef = 9856F8D01549E84F00B04F3A /* PrerenderHandle.h */; };
    36103615                985BB96D13A94058007A0B69 /* LinkRelAttribute.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 985BB96B13A94058007A0B69 /* LinkRelAttribute.cpp */; };
    36113616                985BB96E13A94058007A0B69 /* LinkRelAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = 985BB96C13A94058007A0B69 /* LinkRelAttribute.h */; };
     
    1066010665                9831AE49154225A200FE2644 /* ReferrerPolicy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReferrerPolicy.h; sourceTree = "<group>"; };
    1066110666                984264EF12D5280A000D88A4 /* LinkLoaderClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinkLoaderClient.h; sourceTree = "<group>"; };
     10667                9856F8C81549E82400B04F3A /* Prerenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Prerenderer.cpp; path = loader/Prerenderer.cpp; sourceTree = SOURCE_ROOT; };
     10668                9856F8C91549E82400B04F3A /* Prerenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Prerenderer.h; path = loader/Prerenderer.h; sourceTree = SOURCE_ROOT; };
     10669                9856F8CA1549E82400B04F3A /* PrerendererClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = PrerendererClient.cpp; path = loader/PrerendererClient.cpp; sourceTree = SOURCE_ROOT; };
     10670                9856F8CB1549E82400B04F3A /* PrerendererClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = PrerendererClient.h; path = loader/PrerendererClient.h; sourceTree = SOURCE_ROOT; };
     10671                9856F8D01549E84F00B04F3A /* PrerenderHandle.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrerenderHandle.h; sourceTree = "<group>"; };
    1066210672                985BB96B13A94058007A0B69 /* LinkRelAttribute.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LinkRelAttribute.cpp; sourceTree = "<group>"; };
    1066310673                985BB96C13A94058007A0B69 /* LinkRelAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinkRelAttribute.h; sourceTree = "<group>"; };
     
    1414314153                                24F54EAA101FE914000AE741 /* ApplicationCacheHost.cpp */,
    1414414154                                24F54EAB101FE914000AE741 /* ApplicationCacheHost.h */,
     14155                                9856F8C81549E82400B04F3A /* Prerenderer.cpp */,
     14156                                9856F8C91549E82400B04F3A /* Prerenderer.h */,
     14157                                9856F8CA1549E82400B04F3A /* PrerendererClient.cpp */,
     14158                                9856F8CB1549E82400B04F3A /* PrerendererClient.h */,
    1414514159                                1A8F6BB50DB55CDC001DB794 /* ApplicationCacheResource.cpp */,
    1414614160                                1A8F6BB60DB55CDC001DB794 /* ApplicationCacheResource.h */,
     
    1493414948                                49E912A60EFAC906009D0CAF /* Animation.h */,
    1493514949                                49E912A70EFAC906009D0CAF /* AnimationList.cpp */,
     14950                                9856F8D01549E84F00B04F3A /* PrerenderHandle.h */,
    1493614951                                49E912A80EFAC906009D0CAF /* AnimationList.h */,
    1493714952                                0F580FAE149800D400FB5BD8 /* AnimationUtilities.h */,
     
    2488624901                                977E2E0F12F0FC9C00C13379 /* XSSAuditor.h in Headers */,
    2488724902                                FD537353137B651800008DCE /* ZeroPole.h in Headers */,
     24903                                9856F8CD1549E82400B04F3A /* Prerenderer.h in Headers */,
     24904                                9856F8CF1549E82400B04F3A /* PrerendererClient.h in Headers */,
     24905                                9856F8D11549E84F00B04F3A /* PrerenderHandle.h in Headers */,
    2488824906                                FD8C46EC154608E700A5910C /* AudioScheduledSourceNode.h in Headers */,
    2488924907                                71A57DF2154BE25C0009D120 /* SVGPathUtilities.h in Headers */,
     
    2790827926                                977E2E0E12F0FC9C00C13379 /* XSSAuditor.cpp in Sources */,
    2790927927                                FD537352137B651800008DCE /* ZeroPole.cpp in Sources */,
     27928                                9856F8CC1549E82400B04F3A /* Prerenderer.cpp in Sources */,
     27929                                9856F8CE1549E82400B04F3A /* PrerendererClient.cpp in Sources */,
    2791027930                                FD8C46EB154608E700A5910C /* AudioScheduledSourceNode.cpp in Sources */,
    2791127931                                71A57DF1154BE25C0009D120 /* SVGPathUtilities.cpp in Sources */,
  • trunk/Source/WebCore/dom/Document.cpp

    r116927 r117029  
    208208#endif
    209209
     210#if ENABLE(LINK_PRERENDER)
     211#include "Prerenderer.h"
     212#endif
     213
    210214using namespace std;
    211215using namespace WTF;
     
    511515
    512516    m_cachedResourceLoader = adoptPtr(new CachedResourceLoader(this));
    513 
     517#if ENABLE(LINK_PRERENDER)
     518    m_prerenderer = Prerenderer::create(this);
     519#endif
    514520    m_visuallyOrdered = false;
    515521    m_bParsing = false;
  • trunk/Source/WebCore/dom/Document.h

    r116746 r117029  
    168168#endif
    169169
     170#if ENABLE(LINK_PRERENDER)
     171class Prerenderer;
     172#endif
     173
    170174typedef int ExceptionCode;
    171175
     
    11541158    IntSize viewportSize() const;
    11551159
     1160#if ENABLE(LINK_PRERENDER)
     1161    Prerenderer* prerenderer() { return m_prerenderer.get(); }
     1162#endif
     1163
    11561164protected:
    11571165    Document(Frame*, const KURL&, bool isXHTML, bool isHTML);
     
    14981506    Timer<Document> m_pendingTasksTimer;
    14991507    Vector<OwnPtr<Task> > m_pendingTasks;
     1508
     1509#if ENABLE(LINK_PRERENDER)
     1510    OwnPtr<Prerenderer> m_prerenderer;
     1511#endif
     1512
    15001513    bool m_scheduledTasksAreSuspended;
    15011514   
  • trunk/Source/WebCore/html/HTMLLinkElement.cpp

    r116430 r117029  
    266266        return;
    267267
     268    m_linkLoader.released();
     269
    268270    if (m_isInShadowTree) {
    269271        ASSERT(!m_sheet);
  • trunk/Source/WebCore/html/LinkRelAttribute.cpp

    r95901 r117029  
    4242#if ENABLE(LINK_PREFETCH)
    4343    , m_isLinkPrefetch(false)
     44    , m_isLinkSubresource(false)
     45#endif
     46#if ENABLE(LINK_PRERENDER)
    4447    , m_isLinkPrerender(false)
    45     , m_isLinkSubresource(false)
    4648#endif
    4749{
     
    5557#if ENABLE(LINK_PREFETCH)
    5658    , m_isLinkPrefetch(false)
     59    , m_isLinkSubresource(false)
     60#endif
     61#if ENABLE(LINK_PRERENDER)
    5762    , m_isLinkPrerender(false)
    58     , m_isLinkSubresource(false)
    5963#endif
    6064{
     
    97101            else if (equalIgnoringCase(*it, "prefetch"))
    98102              m_isLinkPrefetch = true;
     103            else if (equalIgnoringCase(*it, "subresource"))
     104              m_isLinkSubresource = true;
     105#endif
     106#if ENABLE(LINK_PRERENDER)
    99107            else if (equalIgnoringCase(*it, "prerender"))
    100108              m_isLinkPrerender = true;
    101             else if (equalIgnoringCase(*it, "subresource"))
    102               m_isLinkSubresource = true;
    103109#endif
    104110        }
  • trunk/Source/WebCore/html/LinkRelAttribute.h

    r95901 r117029  
    4545#if ENABLE(LINK_PREFETCH)
    4646    bool m_isLinkPrefetch;
     47    bool m_isLinkSubresource;
     48#endif
     49#if ENABLE(LINK_PRERENDER)
    4750    bool m_isLinkPrerender;
    48     bool m_isLinkSubresource;
    4951#endif
    5052
  • trunk/Source/WebCore/loader/LinkLoader.cpp

    r115215 r117029  
    4444#include "Settings.h"
    4545#include "StyleResolver.h"
     46
     47#if ENABLE(LINK_PRERENDER)
     48#include "PrerenderHandle.h"
     49#include "Prerenderer.h"
     50#endif
    4651
    4752namespace WebCore {
     
    104109
    105110#if ENABLE(LINK_PREFETCH)
    106     if ((relAttribute.m_isLinkPrefetch || relAttribute.m_isLinkPrerender || relAttribute.m_isLinkSubresource) && href.isValid() && document->frame()) {
     111    if ((relAttribute.m_isLinkPrefetch || relAttribute.m_isLinkSubresource) && href.isValid() && document->frame()) {
    107112        if (!m_client->shouldLoadLink())
    108113            return false;
     
    114119            priority = ResourceLoadPriorityLow;
    115120            type = CachedResource::LinkSubresource;
    116         } else if (relAttribute.m_isLinkPrerender)
    117             type = CachedResource::LinkPrerender;
    118 
     121        }
    119122        ResourceRequest linkRequest(document->completeURL(href));
    120123       
     
    128131    }
    129132#endif
     133
     134#if ENABLE(LINK_PRERENDER)
     135    if (relAttribute.m_isLinkPrerender) {
     136        ASSERT(!m_prerenderHandle);
     137        m_prerenderHandle = document->prerenderer()->render(href);
     138    }
     139#endif
    130140    return true;
    131141}
    132142
     143void LinkLoader::released()
     144{
     145    // Only prerenders need treatment here; other links either use the CachedResource interface, or are notionally
     146    // atomic (dns prefetch).
     147#if ENABLE(LINK_PRERENDER)
     148    if (m_prerenderHandle) {
     149        m_prerenderHandle->cancel();
     150        m_prerenderHandle.clear();
     151    }
     152#endif
     153}
    133154
    134155}
  • trunk/Source/WebCore/loader/LinkLoader.h

    r95901 r117029  
    3838#include "Timer.h"
    3939
     40#include <wtf/RefPtr.h>
     41
    4042namespace WebCore {
    4143
    4244struct LinkRelAttribute;
     45#if ENABLE(LINK_PRERENDER)
     46class PrerenderHandle;
     47#endif
    4348
    4449// The LinkLoader can load link rel types icon, dns-prefetch, subresource, prefetch and prerender.
     
    5156    virtual void notifyFinished(CachedResource*);
    5257   
     58    void released();
    5359    bool loadLink(const LinkRelAttribute&, const String& type, const String& sizes, const KURL&, Document*);
    5460
     
    6268    Timer<LinkLoader> m_linkLoadTimer;
    6369    Timer<LinkLoader> m_linkLoadingErrorTimer;
     70
     71#if ENABLE(LINK_PRERENDER)
     72    RefPtr<PrerenderHandle> m_prerenderHandle;
     73#endif
    6474};
    6575   
  • trunk/Source/WebCore/loader/Prerenderer.h

    r117028 r117029  
    2727 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    2828 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29 *
    2930 */
    3031
    31 #ifndef WebPrerender_h
    32 #define WebPrerender_h
     32#ifndef Prerenderer_h
     33#define Prerenderer_h
    3334
    34 #include "WebCommon.h"
    35 #include "WebPrivatePtr.h"
    36 #include "WebReferrerPolicy.h"
    37 #include "WebString.h"
    38 #include "WebURL.h"
     35#if ENABLE(LINK_PRERENDER)
    3936
    40 #if WEBKIT_IMPLEMENTATION
     37#include "ActiveDOMObject.h"
     38#include "KURL.h"
     39#include <wtf/OwnPtr.h>
     40#include <wtf/PassOwnPtr.h>
    4141#include <wtf/PassRefPtr.h>
    42 #endif
     42#include <wtf/RefPtr.h>
     43#include <wtf/SinglyLinkedList.h>
     44#include <wtf/Vector.h>
    4345
    44 namespace WebKit {
     46namespace WebCore {
    4547
    46 // This thunk implementation of WebPrerender exists only for staging; this will allow
    47 // the Chromium side of the Prerendering API to land, and then later we can atomicly
    48 // switch WebKit to prerender, and finally remove the old phantom-request prerender
    49 // implementation from Chromium.
    50 // FIXME: Put the actual implementation here after the Chromium side of this API
    51 // lands.
    52 class WebPrerender {
     48class Document;
     49class PrerenderHandle;
     50class PrerendererClient;
     51class Page;
     52
     53class Prerenderer : public ActiveDOMObject {
     54    WTF_MAKE_NONCOPYABLE(Prerenderer);
    5355public:
    54     class ExtraData {
    55     public:
    56         virtual ~ExtraData() { }
    57     };
    58     WebURL url() const { return WebURL(); }
    59     WebString referrer() const { return WebString(); }
    60     WebReferrerPolicy referrerPolicy() const { return WebReferrerPolicy(); }
    61     void setExtraData(ExtraData*) { }
    62     const ExtraData* extraData() const { return 0; }
     56    virtual ~Prerenderer();
     57
     58    PassRefPtr<PrerenderHandle> render(const KURL&);
     59
     60    static PassOwnPtr<Prerenderer> create(Document*);
    6361
    6462private:
    65     WebPrerender() { }
    66     ~WebPrerender() { }
     63    typedef Vector<RefPtr<PrerenderHandle> > HandleVector;
     64    typedef Vector<KURL> KURLVector;
     65
     66    explicit Prerenderer(Document*);
     67
     68    virtual bool canSuspend() const OVERRIDE { return true; }
     69    virtual void stop() OVERRIDE;
     70    virtual void suspend(ReasonForSuspension) OVERRIDE;
     71    virtual void resume() OVERRIDE;
     72
     73    Document* document();
     74    PrerendererClient* client();
     75
     76    PrerendererClient* m_client;
     77    HandleVector m_activeHandles;
     78    HandleVector m_suspendedHandles;
    6779};
    6880
    69 } // namespace WebKit
     81}
    7082
    71 #endif // WebPrerender_h
     83#endif // ENABLE(LINK_PRERENDER)
     84
     85#endif // Prerenderer_h
  • trunk/Source/WebCore/loader/PrerendererClient.cpp

    r117028 r117029  
    11/*
    2  * Copyright (C) 2011 Google Inc. All rights reserved.
     2 * Copyright (C) 2012 Google Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3030 */
    3131
    32 #ifndef LinkRelAttribute_h
    33 #define LinkRelAttribute_h
     32#include "config.h"
     33#include "PrerendererClient.h"
    3434
    35 #include "IconURL.h"
     35#include "Page.h"
     36#include "Supplementable.h"
     37#include <wtf/text/AtomicString.h>
     38
     39#if ENABLE(LINK_PRERENDER)
    3640
    3741namespace WebCore {
    3842
    39 struct LinkRelAttribute {
    40 public:
    41     bool m_isStyleSheet;
    42     IconType m_iconType;
    43     bool m_isAlternate;
    44     bool m_isDNSPrefetch;
    45 #if ENABLE(LINK_PREFETCH)
    46     bool m_isLinkPrefetch;
    47     bool m_isLinkPrerender;
    48     bool m_isLinkSubresource;
    49 #endif
     43// static
     44const AtomicString& PrerendererClient::supplementName()
     45{
     46    DEFINE_STATIC_LOCAL(AtomicString, name, ("PrerendererClient"));
     47    return name;
     48}
    5049
    51     LinkRelAttribute();
    52     explicit LinkRelAttribute(const String&);
    53 };
    54    
     50// static
     51PrerendererClient* PrerendererClient::from(Page* page)
     52{
     53    PrerendererClient* supplement = static_cast<PrerendererClient*>(Supplement<Page>::from(page, supplementName()));
     54    ASSERT(supplement);
     55    return supplement;
     56}
     57
     58void providePrerendererClientTo(Page* page, PrerendererClient* client)
     59{
     60    PrerendererClient::provideTo(page, PrerendererClient::supplementName(), adoptPtr(client));
     61}
     62
    5563}
    5664
    5765#endif
    58 
  • trunk/Source/WebCore/loader/PrerendererClient.h

    r117028 r117029  
    11/*
    2  * Copyright (C) 2011 Google Inc. All rights reserved.
     2 * Copyright (C) 2012 Google Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3030 */
    3131
    32 #ifndef LinkRelAttribute_h
    33 #define LinkRelAttribute_h
     32#ifndef PrerendererClient_h
     33#define PrerendererClient_h
    3434
    35 #include "IconURL.h"
     35#if ENABLE(LINK_PRERENDER)
     36
     37#include "Supplementable.h"
     38#include <wtf/PassRefPtr.h>
    3639
    3740namespace WebCore {
    3841
    39 struct LinkRelAttribute {
     42class Document;
     43class Page;
     44class PrerenderHandle;
     45
     46class PrerendererClient : public Supplement<Page> {
    4047public:
    41     bool m_isStyleSheet;
    42     IconType m_iconType;
    43     bool m_isAlternate;
    44     bool m_isDNSPrefetch;
    45 #if ENABLE(LINK_PREFETCH)
    46     bool m_isLinkPrefetch;
    47     bool m_isLinkPrerender;
    48     bool m_isLinkSubresource;
    49 #endif
     48    virtual ~PrerendererClient() { }
    5049
    51     LinkRelAttribute();
    52     explicit LinkRelAttribute(const String&);
     50    virtual void willAddPrerender(PrerenderHandle*) = 0;
     51
     52    static const AtomicString& supplementName();
     53    static PrerendererClient* from(Page*);
     54
     55protected:
     56    PrerendererClient() { }
    5357};
    54    
    55 }
    5658
    57 #endif
     59void providePrerendererClientTo(Page*, PrerendererClient*);
    5860
     61} // namespace WebCore
     62
     63#endif // ENABLED(LINK_PRERENDER)
     64
     65#endif // PrerendererClient_h
  • trunk/Source/WebCore/loader/cache/CachedResource.cpp

    r111610 r117029  
    7474        case CachedResource::LinkPrefetch:
    7575            return ResourceLoadPriorityVeryLow;
    76         case CachedResource::LinkPrerender:
    77             return ResourceLoadPriorityVeryLow;
    7876        case CachedResource::LinkSubresource:
    7977            return ResourceLoadPriorityVeryLow;
     
    115113    case CachedResource::LinkPrefetch:
    116114        return ResourceRequest::TargetIsPrefetch;
    117     case CachedResource::LinkPrerender:
    118         return ResourceRequest::TargetIsPrerender;
    119115    case CachedResource::LinkSubresource:
    120116        return ResourceRequest::TargetIsSubresource;
     
    221217
    222218#if ENABLE(LINK_PREFETCH)
    223     if (type() == CachedResource::LinkPrefetch || type() == CachedResource::LinkPrerender || type() == CachedResource::LinkSubresource)
     219    if (type() == CachedResource::LinkPrefetch || type() == CachedResource::LinkSubresource)
    224220        m_resourceRequest.setHTTPHeaderField("Purpose", "prefetch");
    225221#endif
  • trunk/Source/WebCore/loader/cache/CachedResource.h

    r112245 r117029  
    7575#if ENABLE(LINK_PREFETCH)
    7676        , LinkPrefetch
    77         , LinkPrerender
    7877        , LinkSubresource
    7978#endif
     
    151150#if ENABLE(LINK_PREFETCH)
    152151            || type() == LinkPrefetch
    153             || type() == LinkPrerender
    154152            || type() == LinkSubresource
    155153#endif
  • trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp

    r116719 r117029  
    8989    case CachedResource::LinkPrefetch:
    9090        return new CachedResource(request, CachedResource::LinkPrefetch);
    91     case CachedResource::LinkPrerender:
    92         return new CachedResource(request, CachedResource::LinkPrerender);
    9391    case CachedResource::LinkSubresource:
    9492        return new CachedResource(request, CachedResource::LinkSubresource);
     
    237235{
    238236    ASSERT(frame());
    239     ASSERT(type == CachedResource::LinkPrefetch || type == CachedResource::LinkPrerender || type == CachedResource::LinkSubresource);
     237    ASSERT(type == CachedResource::LinkPrefetch || type == CachedResource::LinkSubresource);
    240238    return requestResource(type, request, String(), defaultCachedResourceOptions(), priority);
    241239}
     
    283281#if ENABLE(LINK_PREFETCH)
    284282    case CachedResource::LinkPrefetch:
    285     case CachedResource::LinkPrerender:
    286283    case CachedResource::LinkSubresource:
    287284        // Prefetch cannot affect the current document.
     
    312309#if ENABLE(LINK_PREFETCH)
    313310    case CachedResource::LinkPrefetch:
    314     case CachedResource::LinkPrerender:
    315311    case CachedResource::LinkSubresource:
    316312#endif
     
    382378#if ENABLE(LINK_PREFETCH)
    383379    case CachedResource::LinkPrefetch:
    384     case CachedResource::LinkPrerender:
    385380    case CachedResource::LinkSubresource:
    386381#endif
  • trunk/Source/WebCore/platform/PrerenderHandle.h

    r117028 r117029  
    2727 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    2828 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29 *
    2930 */
    3031
    31 #ifndef WebPrerender_h
    32 #define WebPrerender_h
     32#ifndef PrerenderHandle_h
     33#define PrerenderHandle_h
    3334
    34 #include "WebCommon.h"
    35 #include "WebPrivatePtr.h"
    36 #include "WebReferrerPolicy.h"
    37 #include "WebString.h"
    38 #include "WebURL.h"
     35#if ENABLE(LINK_PRERENDER)
    3936
    40 #if WEBKIT_IMPLEMENTATION
     37#include "ReferrerPolicy.h"
    4138#include <wtf/PassRefPtr.h>
    42 #endif
     39#include <wtf/RefCounted.h>
     40#include <wtf/RefPtr.h>
     41#include <wtf/text/WTFString.h>
    4342
    44 namespace WebKit {
     43namespace WebCore {
    4544
    46 // This thunk implementation of WebPrerender exists only for staging; this will allow
    47 // the Chromium side of the Prerendering API to land, and then later we can atomicly
    48 // switch WebKit to prerender, and finally remove the old phantom-request prerender
    49 // implementation from Chromium.
    50 // FIXME: Put the actual implementation here after the Chromium side of this API
    51 // lands.
    52 class WebPrerender {
     45class KURL;
     46class Prerender;
     47
     48class PrerenderHandle : public RefCounted<PrerenderHandle> {
     49    WTF_MAKE_NONCOPYABLE(PrerenderHandle);
    5350public:
    54     class ExtraData {
    55     public:
    56         virtual ~ExtraData() { }
    57     };
    58     WebURL url() const { return WebURL(); }
    59     WebString referrer() const { return WebString(); }
    60     WebReferrerPolicy referrerPolicy() const { return WebReferrerPolicy(); }
    61     void setExtraData(ExtraData*) { }
    62     const ExtraData* extraData() const { return 0; }
     51    static PassRefPtr<PrerenderHandle> create(const KURL&, const String& referrer, ReferrerPolicy);
     52    ~PrerenderHandle();
     53
     54    Prerender* prerender();
     55
     56    // FIXME: one day there will be events here, and we will be a PrerenderClient.
     57
     58    // A prerender link element is added when it is inserted into a document.
     59    void add();
     60
     61    // A prerender is abandoned when it's navigated away from. This is is a weaker signal
     62    // than cancel(), since the launcher hasn't indicated that the prerender isn't wanted,
     63    // and we may end up using it after, for instance, a short redirect chain.
     64    void abandon();
     65
     66    // A prerender is canceled when it is removed from a document.
     67    void cancel();
     68
     69    // A prerender is suspended along with the DOM containing its linkloader & prerenderer.
     70    void suspend();
     71    void resume();
     72
     73    const KURL& url() const;
     74    const String& referrer() const;
     75    ReferrerPolicy referrerPolicy() const;
    6376
    6477private:
    65     WebPrerender() { }
    66     ~WebPrerender() { }
     78    PrerenderHandle(const KURL&, const String& referrer, ReferrerPolicy);
     79    RefPtr<Prerender> m_prerender;
    6780};
    6881
    69 } // namespace WebKit
     82} // namespace WebCore
    7083
    71 #endif // WebPrerender_h
     84#endif // ENABLE(LINK_PRERENDER)
     85
     86#endif // PrerenderHandle_h
  • trunk/Source/WebCore/platform/chromium/Prerender.h

    r117028 r117029  
    2727 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    2828 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29 *
    2930 */
    3031
    31 #ifndef WebPrerender_h
    32 #define WebPrerender_h
     32#ifndef Prerender_h
     33#define Prerender_h
    3334
    34 #include "WebCommon.h"
    35 #include "WebPrivatePtr.h"
    36 #include "WebReferrerPolicy.h"
    37 #include "WebString.h"
    38 #include "WebURL.h"
     35#include "KURL.h"
     36#include "ReferrerPolicy.h"
     37#include <public/WebSize.h>
     38#include <wtf/OwnPtr.h>
     39#include <wtf/PassOwnPtr.h>
     40#include <wtf/PassRefPtr.h>
     41#include <wtf/RefCounted.h>
     42#include <wtf/RefPtr.h>
     43#include <wtf/text/WTFString.h>
    3944
    40 #if WEBKIT_IMPLEMENTATION
    41 #include <wtf/PassRefPtr.h>
    42 #endif
     45#if ENABLE(LINK_PRERENDER)
    4346
    44 namespace WebKit {
     47namespace WebCore {
    4548
    46 // This thunk implementation of WebPrerender exists only for staging; this will allow
    47 // the Chromium side of the Prerendering API to land, and then later we can atomicly
    48 // switch WebKit to prerender, and finally remove the old phantom-request prerender
    49 // implementation from Chromium.
    50 // FIXME: Put the actual implementation here after the Chromium side of this API
    51 // lands.
    52 class WebPrerender {
     49class Prerender : public RefCounted<Prerender> {
     50    WTF_MAKE_NONCOPYABLE(Prerender);
    5351public:
    54     class ExtraData {
     52    class ExtraData : public RefCounted<ExtraData> {
    5553    public:
    5654        virtual ~ExtraData() { }
    5755    };
    58     WebURL url() const { return WebURL(); }
    59     WebString referrer() const { return WebString(); }
    60     WebReferrerPolicy referrerPolicy() const { return WebReferrerPolicy(); }
    61     void setExtraData(ExtraData*) { }
    62     const ExtraData* extraData() const { return 0; }
     56
     57    Prerender(const KURL&, const String& referrer, ReferrerPolicy);
     58    ~Prerender();
     59
     60    void add();
     61    void cancel();
     62    void abandon();
     63    void suspend();
     64    void resume();
     65
     66    const KURL& url() const { return m_url; }
     67    const String& referrer() const { return m_referrer; }
     68    ReferrerPolicy referrerPolicy() const { return m_referrerPolicy; }
     69
     70    void setExtraData(PassRefPtr<ExtraData> extraData) { m_extraData = extraData; }
     71    ExtraData* extraData() { return m_extraData.get(); }
    6372
    6473private:
    65     WebPrerender() { }
    66     ~WebPrerender() { }
     74    enum State {
     75        Inactive,
     76        Active,
     77    };
     78
     79    void setState(State);
     80
     81    const KURL m_url;
     82    const String m_referrer;
     83    const ReferrerPolicy m_referrerPolicy;
     84
     85    RefPtr<ExtraData> m_extraData;
     86
     87#ifndef NDEBUG
     88    State m_state;
     89#endif
    6790};
    6891
    69 } // namespace WebKit
     92}
    7093
    71 #endif // WebPrerender_h
     94#endif // ENABLE(LINK_PRERENDER)
     95
     96#endif // Prerender_h
  • trunk/Source/WebCore/platform/chromium/PrerenderHandle.cpp

    r117028 r117029  
    2727 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    2828 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29 *
    2930 */
    3031
    31 #ifndef WebPrerender_h
    32 #define WebPrerender_h
     32#include "config.h"
     33#include "PrerenderHandle.h"
    3334
    34 #include "WebCommon.h"
    35 #include "WebPrivatePtr.h"
    36 #include "WebReferrerPolicy.h"
    37 #include "WebString.h"
    38 #include "WebURL.h"
     35#if ENABLE(LINK_PRERENDER)
    3936
    40 #if WEBKIT_IMPLEMENTATION
     37#include "KURL.h"
     38#include "Prerender.h"
     39#include "ReferrerPolicy.h"
    4140#include <wtf/PassRefPtr.h>
    42 #endif
     41#include <wtf/text/WTFString.h>
    4342
    44 namespace WebKit {
     43namespace WebCore {
    4544
    46 // This thunk implementation of WebPrerender exists only for staging; this will allow
    47 // the Chromium side of the Prerendering API to land, and then later we can atomicly
    48 // switch WebKit to prerender, and finally remove the old phantom-request prerender
    49 // implementation from Chromium.
    50 // FIXME: Put the actual implementation here after the Chromium side of this API
    51 // lands.
    52 class WebPrerender {
    53 public:
    54     class ExtraData {
    55     public:
    56         virtual ~ExtraData() { }
    57     };
    58     WebURL url() const { return WebURL(); }
    59     WebString referrer() const { return WebString(); }
    60     WebReferrerPolicy referrerPolicy() const { return WebReferrerPolicy(); }
    61     void setExtraData(ExtraData*) { }
    62     const ExtraData* extraData() const { return 0; }
     45PassRefPtr<PrerenderHandle> PrerenderHandle::create(const KURL& url, const String& referrer, ReferrerPolicy policy)
     46{
     47    return adoptRef(new PrerenderHandle(url, referrer, policy));
     48}
    6349
    64 private:
    65     WebPrerender() { }
    66     ~WebPrerender() { }
    67 };
     50PrerenderHandle::PrerenderHandle(const KURL& url, const String& referrer, ReferrerPolicy policy)
     51    : m_prerender(adoptRef(new Prerender(url, referrer, policy)))
     52{
     53}
    6854
    69 } // namespace WebKit
     55PrerenderHandle::~PrerenderHandle()
     56{
     57}
    7058
    71 #endif // WebPrerender_h
     59Prerender* PrerenderHandle::prerender()
     60{
     61    return m_prerender.get();
     62}
     63
     64void PrerenderHandle::add()
     65{
     66    prerender()->add();
     67}
     68
     69void PrerenderHandle::cancel()
     70{
     71    prerender()->cancel();
     72}
     73
     74void PrerenderHandle::abandon()
     75{
     76    prerender()->abandon();
     77}
     78
     79void PrerenderHandle::suspend()
     80{
     81    prerender()->suspend();
     82}
     83
     84void PrerenderHandle::resume()
     85{
     86    prerender()->resume();
     87}
     88
     89const KURL& PrerenderHandle::url() const
     90{
     91    return m_prerender->url();
     92}
     93
     94const String& PrerenderHandle::referrer() const
     95{
     96    return m_prerender->url();
     97}
     98
     99ReferrerPolicy PrerenderHandle::referrerPolicy() const
     100{
     101    return m_prerender->referrerPolicy();
     102}
     103
     104}
     105
     106#endif // ENABLE(LINK_PRERENDER)
  • trunk/Source/WebCore/platform/chromium/support/WebPrerender.cpp

    r117028 r117029  
    2929 */
    3030
    31 #ifndef WebPrerender_h
    32 #define WebPrerender_h
     31#include "config.h"
     32#include <public/WebPrerender.h>
     33#include <wtf/PassRefPtr.h>
    3334
    34 #include "WebCommon.h"
    35 #include "WebPrivatePtr.h"
    36 #include "WebReferrerPolicy.h"
    37 #include "WebString.h"
    38 #include "WebURL.h"
     35#if ENABLE(LINK_PRERENDER)
    3936
    40 #if WEBKIT_IMPLEMENTATION
    41 #include <wtf/PassRefPtr.h>
    42 #endif
     37#include "Prerender.h"
    4338
    4439namespace WebKit {
    4540
    46 // This thunk implementation of WebPrerender exists only for staging; this will allow
    47 // the Chromium side of the Prerendering API to land, and then later we can atomicly
    48 // switch WebKit to prerender, and finally remove the old phantom-request prerender
    49 // implementation from Chromium.
    50 // FIXME: Put the actual implementation here after the Chromium side of this API
    51 // lands.
    52 class WebPrerender {
     41namespace {
     42
     43class ExtraDataContainer : public WebCore::Prerender::ExtraData {
    5344public:
    54     class ExtraData {
    55     public:
    56         virtual ~ExtraData() { }
    57     };
    58     WebURL url() const { return WebURL(); }
    59     WebString referrer() const { return WebString(); }
    60     WebReferrerPolicy referrerPolicy() const { return WebReferrerPolicy(); }
    61     void setExtraData(ExtraData*) { }
    62     const ExtraData* extraData() const { return 0; }
     45    static PassRefPtr<ExtraDataContainer> create(WebPrerender::ExtraData* extraData) { return adoptRef(new ExtraDataContainer(extraData)); }
     46
     47    virtual ~ExtraDataContainer() { }
     48
     49    WebPrerender::ExtraData* extraData() const { return m_extraData.get(); }
    6350
    6451private:
    65     WebPrerender() { }
    66     ~WebPrerender() { }
     52    explicit ExtraDataContainer(WebPrerender::ExtraData* extraData)
     53        : m_extraData(adoptPtr(extraData))
     54    {
     55    }
     56
     57    OwnPtr<WebPrerender::ExtraData> m_extraData;
    6758};
     59
     60} // anon namespace
     61
     62WebPrerender::WebPrerender(PassRefPtr<WebCore::Prerender> prerender)
     63    : m_private(prerender)
     64{
     65}
     66
     67WebPrerender::~WebPrerender()
     68{
     69    m_private.reset();
     70}
     71
     72WebURL WebPrerender::url() const
     73{
     74    return WebURL(m_private->url());
     75}
     76
     77WebString WebPrerender::referrer() const
     78{
     79    return m_private->referrer();
     80}
     81
     82WebReferrerPolicy WebPrerender::referrerPolicy() const
     83{
     84    return static_cast<WebReferrerPolicy>(m_private->referrerPolicy());
     85}
     86
     87void WebPrerender::setExtraData(WebPrerender::ExtraData* extraData)
     88{
     89    m_private->setExtraData(ExtraDataContainer::create(extraData));
     90}
     91
     92const WebPrerender::ExtraData* WebPrerender::extraData() const
     93{
     94    RefPtr<WebCore::Prerender::ExtraData> webcoreExtraData = m_private->extraData();
     95    if (!webcoreExtraData)
     96        return 0;
     97    return static_cast<ExtraDataContainer*>(webcoreExtraData.get())->extraData();
     98}
    6899
    69100} // namespace WebKit
    70101
    71 #endif // WebPrerender_h
     102#endif // ENABLED(LINK_PRERENDER)
  • trunk/Source/WebCore/platform/network/blackberry/ResourceRequest.h

    r116418 r117029  
    4646        TargetIsSharedWorker,
    4747        TargetIsPrefetch,
    48         TargetIsPrerender,
    4948        TargetIsFavicon,
    5049        TargetIsXHR,
  • trunk/Source/WebCore/platform/network/blackberry/ResourceRequestBlackBerry.cpp

    r116418 r117029  
    8686        return NetworkRequest::TargetIsImage;
    8787    case ResourceRequest::TargetIsPrefetch:
    88         return NetworkRequest::TargetIsSubresource;
    89     case ResourceRequest::TargetIsPrerender:
    9088        return NetworkRequest::TargetIsSubresource;
    9189    case ResourceRequest::TargetIsXHR:
  • trunk/Source/WebCore/platform/network/chromium/ResourceRequest.h

    r99015 r117029  
    5454            TargetIsSharedWorker,
    5555            TargetIsPrefetch,
    56             TargetIsPrerender,
    5756            TargetIsFavicon,
    5857            TargetIsXHR,
  • trunk/Source/WebKit/chromium/ChangeLog

    r117028 r117029  
     12012-05-14  Gavin Peters  <gavinp@chromium.org>
     2
     3        Add Prerenderer, PrerenderHandle and a chromium interface for Prerendering.
     4        https://bugs.webkit.org/show_bug.cgi?id=85005
     5
     6        Reviewed by Adam Barth.
     7
     8        The prerender case isn't quite a resource load, and using resource loading to
     9        retrieve them has constrained the API, and unnecessarily complicated the loader.
     10
     11        The new Prerenderer and PrerenderHandle let <link rel=prerender...> elements signal
     12        removal and unload to their platform.
     13
     14        * WebKit.gyp:
     15        * public/WebView.h:
     16        * src/PrerendererClientImpl.cpp: Copied from Source/WebCore/html/LinkRelAttribute.h.
     17        (WebKit):
     18        (WebKit::PrerendererClientImpl::PrerendererClientImpl):
     19        (WebKit::PrerendererClientImpl::willAddPrerender):
     20        * src/PrerendererClientImpl.h: Copied from Source/WebCore/html/LinkRelAttribute.h.
     21        (WebCore):
     22        (WebKit):
     23        (PrerendererClientImpl):
     24        * src/WebKit.cpp:
     25        (WebKit::shutdown):
     26        * src/WebViewImpl.cpp:
     27        (WebKit::WebViewImpl::setPrerendererClient):
     28        (WebKit):
     29        * src/WebViewImpl.h:
     30        (WebKit):
     31        (WebViewImpl):
     32
    1332012-05-14  Luke Macpherson  <macpherson@chromium.org>
    234
  • trunk/Source/WebKit/chromium/WebKit.gyp

    r116865 r117029  
    434434                'src/NonCompositedContentHost.cpp',
    435435                'src/NonCompositedContentHost.h',
     436                'src/PrerendererClientImpl.h',
     437                'src/PrerendererClientImpl.cpp',
    436438                'src/android/WebInputEventFactory.cpp',
    437439                'src/linux/WebFontInfo.cpp',
  • trunk/Source/WebKit/chromium/public/WebView.h

    r115703 r117029  
    108108    virtual void setDevToolsAgentClient(WebDevToolsAgentClient*) = 0;
    109109    virtual void setPermissionClient(WebPermissionClient*) = 0;
    110     // FIXME: After the Prerendering API lands in chrome, remove this staging thunk
    111     // for setPrerendererClient().
    112     virtual void setPrerendererClient(WebPrerendererClient*) { }
     110    virtual void setPrerendererClient(WebPrerendererClient*) = 0;
    113111    virtual void setSpellCheckClient(WebSpellCheckClient*) = 0;
    114112    virtual void addTextFieldDecoratorClient(WebTextFieldDecoratorClient*) = 0;
  • trunk/Source/WebKit/chromium/src/PrerendererClientImpl.cpp

    r117028 r117029  
    11/*
    2  * Copyright (C) 2011 Google Inc. All rights reserved.
     2 * Copyright (C) 2012 Google Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3030 */
    3131
    32 #ifndef LinkRelAttribute_h
    33 #define LinkRelAttribute_h
     32#include "config.h"
     33#include "PrerendererClientImpl.h"
    3434
    35 #include "IconURL.h"
     35#include "Document.h"
     36#include "Frame.h"
     37#include "Prerender.h"
     38#include "PrerenderHandle.h"
     39#include "WebPrerendererClient.h"
     40#include "WebViewImpl.h"
     41#include <public/WebPrerender.h>
     42#include <wtf/PassRefPtr.h>
    3643
    37 namespace WebCore {
     44namespace WebKit {
    3845
    39 struct LinkRelAttribute {
    40 public:
    41     bool m_isStyleSheet;
    42     IconType m_iconType;
    43     bool m_isAlternate;
    44     bool m_isDNSPrefetch;
    45 #if ENABLE(LINK_PREFETCH)
    46     bool m_isLinkPrefetch;
    47     bool m_isLinkPrerender;
    48     bool m_isLinkSubresource;
    49 #endif
    50 
    51     LinkRelAttribute();
    52     explicit LinkRelAttribute(const String&);
    53 };
    54    
     46PrerendererClientImpl::PrerendererClientImpl(WebPrerendererClient* client)
     47    : m_client(client)
     48{
    5549}
    5650
    57 #endif
     51void PrerendererClientImpl::willAddPrerender(WebCore::PrerenderHandle* prerenderHandle)
     52{
     53    if (!m_client)
     54        return;
     55    WebPrerender webPrerender(prerenderHandle->prerender());
     56    m_client->willAddPrerender(&webPrerender);
     57}
    5858
     59}
  • trunk/Source/WebKit/chromium/src/PrerendererClientImpl.h

    r117028 r117029  
    11/*
    2  * Copyright (C) 2011 Google Inc. All rights reserved.
     2 * Copyright (C) 2012 Google Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3030 */
    3131
    32 #ifndef LinkRelAttribute_h
    33 #define LinkRelAttribute_h
     32#ifndef PrerendererClientImpl_h
     33#define PrerendererClientImpl_h
    3434
    35 #include "IconURL.h"
     35#include "PrerendererClient.h"
     36#include <wtf/Noncopyable.h>
     37#include <wtf/PassRefPtr.h>
    3638
    3739namespace WebCore {
    38 
    39 struct LinkRelAttribute {
    40 public:
    41     bool m_isStyleSheet;
    42     IconType m_iconType;
    43     bool m_isAlternate;
    44     bool m_isDNSPrefetch;
    45 #if ENABLE(LINK_PREFETCH)
    46     bool m_isLinkPrefetch;
    47     bool m_isLinkPrerender;
    48     bool m_isLinkSubresource;
    49 #endif
    50 
    51     LinkRelAttribute();
    52     explicit LinkRelAttribute(const String&);
    53 };
    54    
     40class PrerenderHandle;
    5541}
    5642
    57 #endif
     43namespace WebKit {
    5844
     45class WebPrerendererClient;
     46
     47class PrerendererClientImpl : public WebCore::PrerendererClient {
     48    WTF_MAKE_NONCOPYABLE(PrerendererClientImpl);
     49public:
     50    explicit PrerendererClientImpl(WebPrerendererClient*);
     51
     52    void willAddPrerender(WebCore::PrerenderHandle*) OVERRIDE;
     53
     54private:
     55    WebPrerendererClient* m_client;
     56};
     57
     58}
     59
     60#endif // PrerendererClientImpl_h
  • trunk/Source/WebKit/chromium/src/WebKit.cpp

    r114458 r117029  
    4747#include "v8.h"
    4848#include <public/Platform.h>
     49#include <public/WebPrerenderingSupport.h>
    4950#include <wtf/Assertions.h>
    5051#include <wtf/MainThread.h>
     
    164165    s_webKitPlatformSupport = 0;
    165166    Platform::shutdown();
     167    WebPrerenderingSupport::shutdown();
    166168}
    167169
  • trunk/Source/WebKit/chromium/src/WebViewImpl.cpp

    r116835 r117029  
    100100#include "PopupContainer.h"
    101101#include "PopupMenuClient.h"
     102#include "PrerendererClientImpl.h"
    102103#include "ProgressTracker.h"
    103104#include "RenderLayerCompositor.h"
     
    322323}
    323324
     325void WebViewImpl::setPrerendererClient(WebPrerendererClient* prerendererClient)
     326{
     327    providePrerendererClientTo(m_page.get(), new PrerendererClientImpl(prerendererClient));
     328}
     329
    324330void WebViewImpl::setSpellCheckClient(WebSpellCheckClient* spellCheckClient)
    325331{
  • trunk/Source/WebKit/chromium/src/WebViewImpl.h

    r116835 r117029  
    9292class GeolocationClientProxy;
    9393class NonCompositedContentHost;
     94class PrerendererClientImpl;
    9495class SpeechInputClientImpl;
    9596class SpeechRecognitionClientProxy;
     
    102103class WebGestureEvent;
    103104class WebPagePopupImpl;
     105class WebPrerendererClient;
    104106class WebImage;
    105107class WebKeyboardEvent;
     
    162164    virtual void setDevToolsAgentClient(WebDevToolsAgentClient*);
    163165    virtual void setPermissionClient(WebPermissionClient*);
     166    virtual void setPrerendererClient(WebPrerendererClient*) OVERRIDE;
    164167    virtual void setSpellCheckClient(WebSpellCheckClient*);
    165168    virtual void addTextFieldDecoratorClient(WebTextFieldDecoratorClient*) OVERRIDE;
Note: See TracChangeset for help on using the changeset viewer.