Changeset 117029 in webkit
- Timestamp:
- May 14, 2012 9:42:52 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 2 deleted
- 36 edited
- 10 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r117026 r117029 1 2012-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 1 26 2012-05-14 Eric Seidel <eric@webkit.org> 2 27 -
trunk/LayoutTests/platform/gtk/test_expectations.txt
r116957 r117029 837 837 BUGWKGTK : fast/dom/HTMLLinkElement/prefetch-onerror.html = FAIL 838 838 BUGWKGTK : fast/dom/HTMLLinkElement/prefetch-onload.html = FAIL 839 BUGWKGTK : fast/dom/HTMLLinkElement/prerender.html = FAIL840 839 BUGWKGTK : fast/dom/HTMLLinkElement/subresource.html = FAIL 841 840 -
trunk/LayoutTests/platform/mac/Skipped
r116957 r117029 194 194 fast/dom/HTMLLinkElement/prefetch-onload.html 195 195 fast/dom/HTMLLinkElement/prefetch-too-many-clients.html 196 fast/dom/HTMLLinkElement/prerender.html197 196 fast/dom/HTMLLinkElement/subresource.html 198 197 http/tests/misc/link-rel-prefetch-and-subresource.html -
trunk/LayoutTests/platform/qt/Skipped
r116957 r117029 145 145 fast/dom/HTMLLinkElement/prefetch-onload.html 146 146 fast/dom/HTMLLinkElement/prefetch-too-many-clients.html 147 fast/dom/HTMLLinkElement/prerender.html148 147 fast/dom/HTMLLinkElement/subresource.html 149 148 http/tests/misc/link-rel-prefetch-and-subresource.html -
trunk/LayoutTests/platform/win/Skipped
r116957 r117029 1098 1098 fast/dom/HTMLLinkElement/prefetch-too-many-clients.html 1099 1099 http/tests/misc/link-rel-prefetch-and-subresource.html 1100 fast/dom/HTMLLinkElement/prerender.html1101 1100 fast/dom/HTMLLinkElement/subresource.html 1102 1101 http/tests/misc/prefetch-purpose.html -
trunk/LayoutTests/platform/wincairo/Skipped
r116847 r117029 1613 1613 fast/dom/HTMLLinkElement/prefetch-too-many-clients.html 1614 1614 http/tests/misc/link-rel-prefetch-and-subresource.html 1615 fast/dom/HTMLLinkElement/prerender.html1616 1615 fast/dom/HTMLLinkElement/subresource.html 1617 1616 http/tests/misc/prefetch-purpose.html -
trunk/Source/Platform/ChangeLog
r116865 r117029 1 2012-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 1 23 2012-05-12 Sheriff Bot <webkit.review.bot@gmail.com> 2 24 -
trunk/Source/Platform/Platform.gypi
r116865 r117029 94 94 'chromium/public/WebThreadSafeData.h', 95 95 'chromium/public/WebTransformationMatrix.h', 96 'chromium/public/WebPrerender.h', 96 97 'chromium/public/WebURL.h', 97 98 'chromium/public/WebURLError.h', … … 107 108 'chromium/src/WebCString.cpp', 108 109 'chromium/src/WebFloatQuad.cpp', 110 'chromium/src/WebPrerenderingSupport.cpp', 109 111 'chromium/src/WebString.cpp', 110 112 'chromium/src/WebVideoFrame.cpp', -
trunk/Source/Platform/chromium/public/WebPrerender.h
r115739 r117029 42 42 #endif 43 43 44 namespace WebCore { 45 class Prerender; 46 } 47 44 48 namespace WebKit { 45 49 46 // This thunk implementation of WebPrerender exists only for staging; this will allow47 // the Chromium side of the Prerendering API to land, and then later we can atomicly48 // switch WebKit to prerender, and finally remove the old phantom-request prerender49 // implementation from Chromium.50 // FIXME: Put the actual implementation here after the Chromium side of this API51 // lands.52 50 class WebPrerender { 53 51 public: … … 56 54 virtual ~ExtraData() { } 57 55 }; 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; 63 68 64 69 private: 65 WebPrerender() { } 66 ~WebPrerender() { } 70 WebPrerender(); 71 72 WebPrivatePtr<WebCore::Prerender> m_private; 67 73 }; 68 74 -
trunk/Source/Platform/chromium/public/WebPrerenderingSupport.h
r115703 r117029 38 38 class WebPrerender; 39 39 40 // This thunk implementation of WebPrerenderingSupport exists only for staging; this will41 // allow the Chromium side of the Prerendering API to land, and then later we can atomicly42 // switch WebKit to prerender, and finally remove the old phantom-request prerender43 // implementation from Chromium.44 // FIXME: Put the actual implementation here after the Chromium side of this API45 // lands.46 40 class WebPrerenderingSupport { 47 41 public: 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(); 51 45 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; 55 56 56 57 protected: 57 58 WebPrerenderingSupport() { } 58 59 virtual ~WebPrerenderingSupport() { } 60 61 private: 62 static WebPrerenderingSupport* s_platform; 59 63 }; 60 64 -
trunk/Source/Platform/chromium/public/WebURLRequest.h
r115206 r117029 70 70 TargetIsSharedWorker = 10, 71 71 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, 77 79 }; 78 80 -
trunk/Source/Platform/chromium/src/WebPrerenderingSupport.cpp
r117028 r117029 1 1 /* 2 * Copyright (C) 201 1Google Inc. All rights reserved.2 * Copyright (C) 2012 Google Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 27 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 *30 29 */ 31 30 32 #ifndef LinkRelAttribute_h 33 #define LinkRelAttribute_h 31 #include <public/WebPrerenderingSupport.h> 34 32 35 #include "IconURL.h" 33 namespace WebKit { 36 34 37 namespace WebCore { 35 WebPrerenderingSupport* WebPrerenderingSupport::s_platform = 0; 38 36 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 37 void WebPrerenderingSupport::initialize(WebPrerenderingSupport* platform) 38 { 39 s_platform = platform; 55 40 } 56 41 57 #endif 42 void WebPrerenderingSupport::shutdown() 43 { 44 s_platform = 0; 45 } 58 46 47 WebPrerenderingSupport* WebPrerenderingSupport::current() 48 { 49 return s_platform; 50 } 51 52 } -
trunk/Source/WebCore/ChangeLog
r117028 r117029 1 2012-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 1 126 2012-05-14 Luke Macpherson <macpherson@chromium.org> 2 127 -
trunk/Source/WebCore/GNUmakefile.list.am
r116974 r117029 2851 2851 Source/WebCore/loader/PolicyChecker.cpp \ 2852 2852 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 \ 2853 2857 Source/WebCore/loader/ProgressTracker.cpp \ 2854 2858 Source/WebCore/loader/ProgressTracker.h \ … … 3548 3552 Source/WebCore/platform/PopupMenu.h \ 3549 3553 Source/WebCore/platform/PopupMenuStyle.h \ 3554 Source/WebCore/platform/PrerenderHandle.h \ 3550 3555 Source/WebCore/platform/PurgeableBuffer.h \ 3551 3556 Source/WebCore/platform/PurgePriority.h \ -
trunk/Source/WebCore/Target.pri
r116974 r117029 985 985 loader/PolicyChecker.cpp \ 986 986 loader/ProgressTracker.cpp \ 987 loader/Prerenderer.cpp \ 988 loader/PrerendererClient.cpp \ 987 989 loader/NavigationScheduler.cpp \ 988 990 loader/ResourceLoader.cpp \ … … 2108 2110 loader/NetscapePlugInStreamLoader.h \ 2109 2111 loader/PlaceholderDocument.h \ 2112 loader/Prerenderer.h \ 2113 loader/PrerendererClient.h \ 2110 2114 loader/ProgressTracker.h \ 2111 2115 loader/ResourceLoader.h \ … … 2393 2397 platform/Widget.h \ 2394 2398 platform/PlatformStrategies.h \ 2399 platform/PrerenderHandle.h \ 2395 2400 platform/LocalizedStrings.h \ 2396 2401 plugins/DOMMimeTypeArray.h \ -
trunk/Source/WebCore/WebCore.gypi
r116994 r117029 2871 2871 'loader/PolicyCallback.cpp', 2872 2872 'loader/PolicyChecker.cpp', 2873 'loader/Prerenderer.cpp', 2874 'loader/Prerenderer.h', 2875 'loader/PrerendererClient.cpp', 2876 'loader/PrerendererClient.h', 2873 2877 'loader/ProgressTracker.cpp', 2874 2878 'loader/ResourceLoadNotifier.cpp', … … 3157 3161 'platform/PlatformTouchEvent.h', 3158 3162 'platform/PlatformTouchPoint.h', 3163 'platform/PrerenderHandle.h', 3159 3164 'platform/PurgeableBuffer.h', 3160 3165 'platform/ReferrerPolicy.h', … … 3336 3341 'platform/chromium/PopupListBox.h', 3337 3342 'platform/chromium/PopupMenuPrivate.h', 3343 'platform/chromium/Prerender.cpp', 3344 'platform/chromium/Prerender.h', 3345 'platform/chromium/PrerenderHandle.cpp', 3338 3346 'platform/chromium/SSLKeyGeneratorChromium.cpp', 3339 3347 'platform/chromium/ScrollbarThemeChromium.cpp', … … 8296 8304 'platform/chromium/support/WebMediaStreamSource.cpp', 8297 8305 'platform/chromium/support/WebMediaStreamSourcesRequest.cpp', 8306 'platform/chromium/support/WebPrerender.cpp', 8298 8307 'platform/chromium/support/WebThreadSafeData.cpp', 8299 8308 'platform/chromium/support/WebTransformationMatrix.cpp', -
trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj
r116974 r117029 27063 27063 </File> 27064 27064 <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 27065 27081 RelativePath="..\loader\ProgressTracker.cpp" 27066 27082 > … … 27944 27960 <File 27945 27961 RelativePath="..\platform\PopupMenuStyle.h" 27962 > 27963 </File> 27964 <File 27965 RelativePath="..\platform\PrerenderHandle.h" 27946 27966 > 27947 27967 </File> -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r117018 r117029 3608 3608 9831AE4A154225C900FE2644 /* ReferrerPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 9831AE49154225A200FE2644 /* ReferrerPolicy.h */; settings = {ATTRIBUTES = (Private, ); }; }; 3609 3609 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 */; }; 3610 3615 985BB96D13A94058007A0B69 /* LinkRelAttribute.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 985BB96B13A94058007A0B69 /* LinkRelAttribute.cpp */; }; 3611 3616 985BB96E13A94058007A0B69 /* LinkRelAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = 985BB96C13A94058007A0B69 /* LinkRelAttribute.h */; }; … … 10660 10665 9831AE49154225A200FE2644 /* ReferrerPolicy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReferrerPolicy.h; sourceTree = "<group>"; }; 10661 10666 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>"; }; 10662 10672 985BB96B13A94058007A0B69 /* LinkRelAttribute.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LinkRelAttribute.cpp; sourceTree = "<group>"; }; 10663 10673 985BB96C13A94058007A0B69 /* LinkRelAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LinkRelAttribute.h; sourceTree = "<group>"; }; … … 14143 14153 24F54EAA101FE914000AE741 /* ApplicationCacheHost.cpp */, 14144 14154 24F54EAB101FE914000AE741 /* ApplicationCacheHost.h */, 14155 9856F8C81549E82400B04F3A /* Prerenderer.cpp */, 14156 9856F8C91549E82400B04F3A /* Prerenderer.h */, 14157 9856F8CA1549E82400B04F3A /* PrerendererClient.cpp */, 14158 9856F8CB1549E82400B04F3A /* PrerendererClient.h */, 14145 14159 1A8F6BB50DB55CDC001DB794 /* ApplicationCacheResource.cpp */, 14146 14160 1A8F6BB60DB55CDC001DB794 /* ApplicationCacheResource.h */, … … 14934 14948 49E912A60EFAC906009D0CAF /* Animation.h */, 14935 14949 49E912A70EFAC906009D0CAF /* AnimationList.cpp */, 14950 9856F8D01549E84F00B04F3A /* PrerenderHandle.h */, 14936 14951 49E912A80EFAC906009D0CAF /* AnimationList.h */, 14937 14952 0F580FAE149800D400FB5BD8 /* AnimationUtilities.h */, … … 24886 24901 977E2E0F12F0FC9C00C13379 /* XSSAuditor.h in Headers */, 24887 24902 FD537353137B651800008DCE /* ZeroPole.h in Headers */, 24903 9856F8CD1549E82400B04F3A /* Prerenderer.h in Headers */, 24904 9856F8CF1549E82400B04F3A /* PrerendererClient.h in Headers */, 24905 9856F8D11549E84F00B04F3A /* PrerenderHandle.h in Headers */, 24888 24906 FD8C46EC154608E700A5910C /* AudioScheduledSourceNode.h in Headers */, 24889 24907 71A57DF2154BE25C0009D120 /* SVGPathUtilities.h in Headers */, … … 27908 27926 977E2E0E12F0FC9C00C13379 /* XSSAuditor.cpp in Sources */, 27909 27927 FD537352137B651800008DCE /* ZeroPole.cpp in Sources */, 27928 9856F8CC1549E82400B04F3A /* Prerenderer.cpp in Sources */, 27929 9856F8CE1549E82400B04F3A /* PrerendererClient.cpp in Sources */, 27910 27930 FD8C46EB154608E700A5910C /* AudioScheduledSourceNode.cpp in Sources */, 27911 27931 71A57DF1154BE25C0009D120 /* SVGPathUtilities.cpp in Sources */, -
trunk/Source/WebCore/dom/Document.cpp
r116927 r117029 208 208 #endif 209 209 210 #if ENABLE(LINK_PRERENDER) 211 #include "Prerenderer.h" 212 #endif 213 210 214 using namespace std; 211 215 using namespace WTF; … … 511 515 512 516 m_cachedResourceLoader = adoptPtr(new CachedResourceLoader(this)); 513 517 #if ENABLE(LINK_PRERENDER) 518 m_prerenderer = Prerenderer::create(this); 519 #endif 514 520 m_visuallyOrdered = false; 515 521 m_bParsing = false; -
trunk/Source/WebCore/dom/Document.h
r116746 r117029 168 168 #endif 169 169 170 #if ENABLE(LINK_PRERENDER) 171 class Prerenderer; 172 #endif 173 170 174 typedef int ExceptionCode; 171 175 … … 1154 1158 IntSize viewportSize() const; 1155 1159 1160 #if ENABLE(LINK_PRERENDER) 1161 Prerenderer* prerenderer() { return m_prerenderer.get(); } 1162 #endif 1163 1156 1164 protected: 1157 1165 Document(Frame*, const KURL&, bool isXHTML, bool isHTML); … … 1498 1506 Timer<Document> m_pendingTasksTimer; 1499 1507 Vector<OwnPtr<Task> > m_pendingTasks; 1508 1509 #if ENABLE(LINK_PRERENDER) 1510 OwnPtr<Prerenderer> m_prerenderer; 1511 #endif 1512 1500 1513 bool m_scheduledTasksAreSuspended; 1501 1514 -
trunk/Source/WebCore/html/HTMLLinkElement.cpp
r116430 r117029 266 266 return; 267 267 268 m_linkLoader.released(); 269 268 270 if (m_isInShadowTree) { 269 271 ASSERT(!m_sheet); -
trunk/Source/WebCore/html/LinkRelAttribute.cpp
r95901 r117029 42 42 #if ENABLE(LINK_PREFETCH) 43 43 , m_isLinkPrefetch(false) 44 , m_isLinkSubresource(false) 45 #endif 46 #if ENABLE(LINK_PRERENDER) 44 47 , m_isLinkPrerender(false) 45 , m_isLinkSubresource(false)46 48 #endif 47 49 { … … 55 57 #if ENABLE(LINK_PREFETCH) 56 58 , m_isLinkPrefetch(false) 59 , m_isLinkSubresource(false) 60 #endif 61 #if ENABLE(LINK_PRERENDER) 57 62 , m_isLinkPrerender(false) 58 , m_isLinkSubresource(false)59 63 #endif 60 64 { … … 97 101 else if (equalIgnoringCase(*it, "prefetch")) 98 102 m_isLinkPrefetch = true; 103 else if (equalIgnoringCase(*it, "subresource")) 104 m_isLinkSubresource = true; 105 #endif 106 #if ENABLE(LINK_PRERENDER) 99 107 else if (equalIgnoringCase(*it, "prerender")) 100 108 m_isLinkPrerender = true; 101 else if (equalIgnoringCase(*it, "subresource"))102 m_isLinkSubresource = true;103 109 #endif 104 110 } -
trunk/Source/WebCore/html/LinkRelAttribute.h
r95901 r117029 45 45 #if ENABLE(LINK_PREFETCH) 46 46 bool m_isLinkPrefetch; 47 bool m_isLinkSubresource; 48 #endif 49 #if ENABLE(LINK_PRERENDER) 47 50 bool m_isLinkPrerender; 48 bool m_isLinkSubresource;49 51 #endif 50 52 -
trunk/Source/WebCore/loader/LinkLoader.cpp
r115215 r117029 44 44 #include "Settings.h" 45 45 #include "StyleResolver.h" 46 47 #if ENABLE(LINK_PRERENDER) 48 #include "PrerenderHandle.h" 49 #include "Prerenderer.h" 50 #endif 46 51 47 52 namespace WebCore { … … 104 109 105 110 #if ENABLE(LINK_PREFETCH) 106 if ((relAttribute.m_isLinkPrefetch || relAttribute.m_isLink Prerender || relAttribute.m_isLinkSubresource) && href.isValid() && document->frame()) {111 if ((relAttribute.m_isLinkPrefetch || relAttribute.m_isLinkSubresource) && href.isValid() && document->frame()) { 107 112 if (!m_client->shouldLoadLink()) 108 113 return false; … … 114 119 priority = ResourceLoadPriorityLow; 115 120 type = CachedResource::LinkSubresource; 116 } else if (relAttribute.m_isLinkPrerender) 117 type = CachedResource::LinkPrerender; 118 121 } 119 122 ResourceRequest linkRequest(document->completeURL(href)); 120 123 … … 128 131 } 129 132 #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 130 140 return true; 131 141 } 132 142 143 void 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 } 133 154 134 155 } -
trunk/Source/WebCore/loader/LinkLoader.h
r95901 r117029 38 38 #include "Timer.h" 39 39 40 #include <wtf/RefPtr.h> 41 40 42 namespace WebCore { 41 43 42 44 struct LinkRelAttribute; 45 #if ENABLE(LINK_PRERENDER) 46 class PrerenderHandle; 47 #endif 43 48 44 49 // The LinkLoader can load link rel types icon, dns-prefetch, subresource, prefetch and prerender. … … 51 56 virtual void notifyFinished(CachedResource*); 52 57 58 void released(); 53 59 bool loadLink(const LinkRelAttribute&, const String& type, const String& sizes, const KURL&, Document*); 54 60 … … 62 68 Timer<LinkLoader> m_linkLoadTimer; 63 69 Timer<LinkLoader> m_linkLoadingErrorTimer; 70 71 #if ENABLE(LINK_PRERENDER) 72 RefPtr<PrerenderHandle> m_prerenderHandle; 73 #endif 64 74 }; 65 75 -
trunk/Source/WebCore/loader/Prerenderer.h
r117028 r117029 27 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 * 29 30 */ 30 31 31 #ifndef WebPrerender_h32 #define WebPrerender_h32 #ifndef Prerenderer_h 33 #define Prerenderer_h 33 34 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) 39 36 40 #if WEBKIT_IMPLEMENTATION 37 #include "ActiveDOMObject.h" 38 #include "KURL.h" 39 #include <wtf/OwnPtr.h> 40 #include <wtf/PassOwnPtr.h> 41 41 #include <wtf/PassRefPtr.h> 42 #endif 42 #include <wtf/RefPtr.h> 43 #include <wtf/SinglyLinkedList.h> 44 #include <wtf/Vector.h> 43 45 44 namespace Web Kit{46 namespace WebCore { 45 47 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 { 48 class Document; 49 class PrerenderHandle; 50 class PrerendererClient; 51 class Page; 52 53 class Prerenderer : public ActiveDOMObject { 54 WTF_MAKE_NONCOPYABLE(Prerenderer); 53 55 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; } 56 virtual ~Prerenderer(); 57 58 PassRefPtr<PrerenderHandle> render(const KURL&); 59 60 static PassOwnPtr<Prerenderer> create(Document*); 63 61 64 62 private: 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; 67 79 }; 68 80 69 } // namespace WebKit81 } 70 82 71 #endif // WebPrerender_h 83 #endif // ENABLE(LINK_PRERENDER) 84 85 #endif // Prerenderer_h -
trunk/Source/WebCore/loader/PrerendererClient.cpp
r117028 r117029 1 1 /* 2 * Copyright (C) 201 1Google Inc. All rights reserved.2 * Copyright (C) 2012 Google Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 30 30 */ 31 31 32 #i fndef LinkRelAttribute_h33 # define LinkRelAttribute_h32 #include "config.h" 33 #include "PrerendererClient.h" 34 34 35 #include "IconURL.h" 35 #include "Page.h" 36 #include "Supplementable.h" 37 #include <wtf/text/AtomicString.h> 38 39 #if ENABLE(LINK_PRERENDER) 36 40 37 41 namespace WebCore { 38 42 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 44 const AtomicString& PrerendererClient::supplementName() 45 { 46 DEFINE_STATIC_LOCAL(AtomicString, name, ("PrerendererClient")); 47 return name; 48 } 50 49 51 LinkRelAttribute(); 52 explicit LinkRelAttribute(const String&); 53 }; 54 50 // static 51 PrerendererClient* PrerendererClient::from(Page* page) 52 { 53 PrerendererClient* supplement = static_cast<PrerendererClient*>(Supplement<Page>::from(page, supplementName())); 54 ASSERT(supplement); 55 return supplement; 56 } 57 58 void providePrerendererClientTo(Page* page, PrerendererClient* client) 59 { 60 PrerendererClient::provideTo(page, PrerendererClient::supplementName(), adoptPtr(client)); 61 } 62 55 63 } 56 64 57 65 #endif 58 -
trunk/Source/WebCore/loader/PrerendererClient.h
r117028 r117029 1 1 /* 2 * Copyright (C) 201 1Google Inc. All rights reserved.2 * Copyright (C) 2012 Google Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 30 30 */ 31 31 32 #ifndef LinkRelAttribute_h33 #define LinkRelAttribute_h32 #ifndef PrerendererClient_h 33 #define PrerendererClient_h 34 34 35 #include "IconURL.h" 35 #if ENABLE(LINK_PRERENDER) 36 37 #include "Supplementable.h" 38 #include <wtf/PassRefPtr.h> 36 39 37 40 namespace WebCore { 38 41 39 struct LinkRelAttribute { 42 class Document; 43 class Page; 44 class PrerenderHandle; 45 46 class PrerendererClient : public Supplement<Page> { 40 47 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 48 virtual ~PrerendererClient() { } 50 49 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 55 protected: 56 PrerendererClient() { } 53 57 }; 54 55 }56 58 57 #endif 59 void providePrerendererClientTo(Page*, PrerendererClient*); 58 60 61 } // namespace WebCore 62 63 #endif // ENABLED(LINK_PRERENDER) 64 65 #endif // PrerendererClient_h -
trunk/Source/WebCore/loader/cache/CachedResource.cpp
r111610 r117029 74 74 case CachedResource::LinkPrefetch: 75 75 return ResourceLoadPriorityVeryLow; 76 case CachedResource::LinkPrerender:77 return ResourceLoadPriorityVeryLow;78 76 case CachedResource::LinkSubresource: 79 77 return ResourceLoadPriorityVeryLow; … … 115 113 case CachedResource::LinkPrefetch: 116 114 return ResourceRequest::TargetIsPrefetch; 117 case CachedResource::LinkPrerender:118 return ResourceRequest::TargetIsPrerender;119 115 case CachedResource::LinkSubresource: 120 116 return ResourceRequest::TargetIsSubresource; … … 221 217 222 218 #if ENABLE(LINK_PREFETCH) 223 if (type() == CachedResource::LinkPrefetch || type() == CachedResource::Link Prerender || type() == CachedResource::LinkSubresource)219 if (type() == CachedResource::LinkPrefetch || type() == CachedResource::LinkSubresource) 224 220 m_resourceRequest.setHTTPHeaderField("Purpose", "prefetch"); 225 221 #endif -
trunk/Source/WebCore/loader/cache/CachedResource.h
r112245 r117029 75 75 #if ENABLE(LINK_PREFETCH) 76 76 , LinkPrefetch 77 , LinkPrerender78 77 , LinkSubresource 79 78 #endif … … 151 150 #if ENABLE(LINK_PREFETCH) 152 151 || type() == LinkPrefetch 153 || type() == LinkPrerender154 152 || type() == LinkSubresource 155 153 #endif -
trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp
r116719 r117029 89 89 case CachedResource::LinkPrefetch: 90 90 return new CachedResource(request, CachedResource::LinkPrefetch); 91 case CachedResource::LinkPrerender:92 return new CachedResource(request, CachedResource::LinkPrerender);93 91 case CachedResource::LinkSubresource: 94 92 return new CachedResource(request, CachedResource::LinkSubresource); … … 237 235 { 238 236 ASSERT(frame()); 239 ASSERT(type == CachedResource::LinkPrefetch || type == CachedResource::Link Prerender || type == CachedResource::LinkSubresource);237 ASSERT(type == CachedResource::LinkPrefetch || type == CachedResource::LinkSubresource); 240 238 return requestResource(type, request, String(), defaultCachedResourceOptions(), priority); 241 239 } … … 283 281 #if ENABLE(LINK_PREFETCH) 284 282 case CachedResource::LinkPrefetch: 285 case CachedResource::LinkPrerender:286 283 case CachedResource::LinkSubresource: 287 284 // Prefetch cannot affect the current document. … … 312 309 #if ENABLE(LINK_PREFETCH) 313 310 case CachedResource::LinkPrefetch: 314 case CachedResource::LinkPrerender:315 311 case CachedResource::LinkSubresource: 316 312 #endif … … 382 378 #if ENABLE(LINK_PREFETCH) 383 379 case CachedResource::LinkPrefetch: 384 case CachedResource::LinkPrerender:385 380 case CachedResource::LinkSubresource: 386 381 #endif -
trunk/Source/WebCore/platform/PrerenderHandle.h
r117028 r117029 27 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 * 29 30 */ 30 31 31 #ifndef WebPrerender_h32 #define WebPrerender_h32 #ifndef PrerenderHandle_h 33 #define PrerenderHandle_h 33 34 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) 39 36 40 #i f WEBKIT_IMPLEMENTATION37 #include "ReferrerPolicy.h" 41 38 #include <wtf/PassRefPtr.h> 42 #endif 39 #include <wtf/RefCounted.h> 40 #include <wtf/RefPtr.h> 41 #include <wtf/text/WTFString.h> 43 42 44 namespace Web Kit{43 namespace WebCore { 45 44 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 { 45 class KURL; 46 class Prerender; 47 48 class PrerenderHandle : public RefCounted<PrerenderHandle> { 49 WTF_MAKE_NONCOPYABLE(PrerenderHandle); 53 50 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; } 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; 63 76 64 77 private: 65 WebPrerender() { }66 ~WebPrerender() { }78 PrerenderHandle(const KURL&, const String& referrer, ReferrerPolicy); 79 RefPtr<Prerender> m_prerender; 67 80 }; 68 81 69 } // namespace Web Kit82 } // namespace WebCore 70 83 71 #endif // WebPrerender_h 84 #endif // ENABLE(LINK_PRERENDER) 85 86 #endif // PrerenderHandle_h -
trunk/Source/WebCore/platform/chromium/Prerender.h
r117028 r117029 27 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 * 29 30 */ 30 31 31 #ifndef WebPrerender_h32 #define WebPrerender_h32 #ifndef Prerender_h 33 #define Prerender_h 33 34 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> 39 44 40 #if WEBKIT_IMPLEMENTATION 41 #include <wtf/PassRefPtr.h> 42 #endif 45 #if ENABLE(LINK_PRERENDER) 43 46 44 namespace Web Kit{47 namespace WebCore { 45 48 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 { 49 class Prerender : public RefCounted<Prerender> { 50 WTF_MAKE_NONCOPYABLE(Prerender); 53 51 public: 54 class ExtraData {52 class ExtraData : public RefCounted<ExtraData> { 55 53 public: 56 54 virtual ~ExtraData() { } 57 55 }; 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(); } 63 72 64 73 private: 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 67 90 }; 68 91 69 } // namespace WebKit92 } 70 93 71 #endif // WebPrerender_h 94 #endif // ENABLE(LINK_PRERENDER) 95 96 #endif // Prerender_h -
trunk/Source/WebCore/platform/chromium/PrerenderHandle.cpp
r117028 r117029 27 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 * 29 30 */ 30 31 31 #i fndef WebPrerender_h32 # define WebPrerender_h32 #include "config.h" 33 #include "PrerenderHandle.h" 33 34 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) 39 36 40 #if WEBKIT_IMPLEMENTATION 37 #include "KURL.h" 38 #include "Prerender.h" 39 #include "ReferrerPolicy.h" 41 40 #include <wtf/PassRefPtr.h> 42 # endif41 #include <wtf/text/WTFString.h> 43 42 44 namespace Web Kit{43 namespace WebCore { 45 44 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; } 45 PassRefPtr<PrerenderHandle> PrerenderHandle::create(const KURL& url, const String& referrer, ReferrerPolicy policy) 46 { 47 return adoptRef(new PrerenderHandle(url, referrer, policy)); 48 } 63 49 64 private: 65 WebPrerender() { }66 ~WebPrerender() { } 67 } ;50 PrerenderHandle::PrerenderHandle(const KURL& url, const String& referrer, ReferrerPolicy policy) 51 : m_prerender(adoptRef(new Prerender(url, referrer, policy))) 52 { 53 } 68 54 69 } // namespace WebKit 55 PrerenderHandle::~PrerenderHandle() 56 { 57 } 70 58 71 #endif // WebPrerender_h 59 Prerender* PrerenderHandle::prerender() 60 { 61 return m_prerender.get(); 62 } 63 64 void PrerenderHandle::add() 65 { 66 prerender()->add(); 67 } 68 69 void PrerenderHandle::cancel() 70 { 71 prerender()->cancel(); 72 } 73 74 void PrerenderHandle::abandon() 75 { 76 prerender()->abandon(); 77 } 78 79 void PrerenderHandle::suspend() 80 { 81 prerender()->suspend(); 82 } 83 84 void PrerenderHandle::resume() 85 { 86 prerender()->resume(); 87 } 88 89 const KURL& PrerenderHandle::url() const 90 { 91 return m_prerender->url(); 92 } 93 94 const String& PrerenderHandle::referrer() const 95 { 96 return m_prerender->url(); 97 } 98 99 ReferrerPolicy 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 29 29 */ 30 30 31 #ifndef WebPrerender_h 32 #define WebPrerender_h 31 #include "config.h" 32 #include <public/WebPrerender.h> 33 #include <wtf/PassRefPtr.h> 33 34 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) 39 36 40 #if WEBKIT_IMPLEMENTATION 41 #include <wtf/PassRefPtr.h> 42 #endif 37 #include "Prerender.h" 43 38 44 39 namespace WebKit { 45 40 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 { 41 namespace { 42 43 class ExtraDataContainer : public WebCore::Prerender::ExtraData { 53 44 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; } 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(); } 63 50 64 51 private: 65 WebPrerender() { } 66 ~WebPrerender() { } 52 explicit ExtraDataContainer(WebPrerender::ExtraData* extraData) 53 : m_extraData(adoptPtr(extraData)) 54 { 55 } 56 57 OwnPtr<WebPrerender::ExtraData> m_extraData; 67 58 }; 59 60 } // anon namespace 61 62 WebPrerender::WebPrerender(PassRefPtr<WebCore::Prerender> prerender) 63 : m_private(prerender) 64 { 65 } 66 67 WebPrerender::~WebPrerender() 68 { 69 m_private.reset(); 70 } 71 72 WebURL WebPrerender::url() const 73 { 74 return WebURL(m_private->url()); 75 } 76 77 WebString WebPrerender::referrer() const 78 { 79 return m_private->referrer(); 80 } 81 82 WebReferrerPolicy WebPrerender::referrerPolicy() const 83 { 84 return static_cast<WebReferrerPolicy>(m_private->referrerPolicy()); 85 } 86 87 void WebPrerender::setExtraData(WebPrerender::ExtraData* extraData) 88 { 89 m_private->setExtraData(ExtraDataContainer::create(extraData)); 90 } 91 92 const 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 } 68 99 69 100 } // namespace WebKit 70 101 71 #endif // WebPrerender_h102 #endif // ENABLED(LINK_PRERENDER) -
trunk/Source/WebCore/platform/network/blackberry/ResourceRequest.h
r116418 r117029 46 46 TargetIsSharedWorker, 47 47 TargetIsPrefetch, 48 TargetIsPrerender,49 48 TargetIsFavicon, 50 49 TargetIsXHR, -
trunk/Source/WebCore/platform/network/blackberry/ResourceRequestBlackBerry.cpp
r116418 r117029 86 86 return NetworkRequest::TargetIsImage; 87 87 case ResourceRequest::TargetIsPrefetch: 88 return NetworkRequest::TargetIsSubresource;89 case ResourceRequest::TargetIsPrerender:90 88 return NetworkRequest::TargetIsSubresource; 91 89 case ResourceRequest::TargetIsXHR: -
trunk/Source/WebCore/platform/network/chromium/ResourceRequest.h
r99015 r117029 54 54 TargetIsSharedWorker, 55 55 TargetIsPrefetch, 56 TargetIsPrerender,57 56 TargetIsFavicon, 58 57 TargetIsXHR, -
trunk/Source/WebKit/chromium/ChangeLog
r117028 r117029 1 2012-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 1 33 2012-05-14 Luke Macpherson <macpherson@chromium.org> 2 34 -
trunk/Source/WebKit/chromium/WebKit.gyp
r116865 r117029 434 434 'src/NonCompositedContentHost.cpp', 435 435 'src/NonCompositedContentHost.h', 436 'src/PrerendererClientImpl.h', 437 'src/PrerendererClientImpl.cpp', 436 438 'src/android/WebInputEventFactory.cpp', 437 439 'src/linux/WebFontInfo.cpp', -
trunk/Source/WebKit/chromium/public/WebView.h
r115703 r117029 108 108 virtual void setDevToolsAgentClient(WebDevToolsAgentClient*) = 0; 109 109 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; 113 111 virtual void setSpellCheckClient(WebSpellCheckClient*) = 0; 114 112 virtual void addTextFieldDecoratorClient(WebTextFieldDecoratorClient*) = 0; -
trunk/Source/WebKit/chromium/src/PrerendererClientImpl.cpp
r117028 r117029 1 1 /* 2 * Copyright (C) 201 1Google Inc. All rights reserved.2 * Copyright (C) 2012 Google Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 30 30 */ 31 31 32 #i fndef LinkRelAttribute_h33 # define LinkRelAttribute_h32 #include "config.h" 33 #include "PrerendererClientImpl.h" 34 34 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> 36 43 37 namespace Web Core{44 namespace WebKit { 38 45 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 46 PrerendererClientImpl::PrerendererClientImpl(WebPrerendererClient* client) 47 : m_client(client) 48 { 55 49 } 56 50 57 #endif 51 void PrerendererClientImpl::willAddPrerender(WebCore::PrerenderHandle* prerenderHandle) 52 { 53 if (!m_client) 54 return; 55 WebPrerender webPrerender(prerenderHandle->prerender()); 56 m_client->willAddPrerender(&webPrerender); 57 } 58 58 59 } -
trunk/Source/WebKit/chromium/src/PrerendererClientImpl.h
r117028 r117029 1 1 /* 2 * Copyright (C) 201 1Google Inc. All rights reserved.2 * Copyright (C) 2012 Google Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 30 30 */ 31 31 32 #ifndef LinkRelAttribute_h33 #define LinkRelAttribute_h32 #ifndef PrerendererClientImpl_h 33 #define PrerendererClientImpl_h 34 34 35 #include "IconURL.h" 35 #include "PrerendererClient.h" 36 #include <wtf/Noncopyable.h> 37 #include <wtf/PassRefPtr.h> 36 38 37 39 namespace 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 40 class PrerenderHandle; 55 41 } 56 42 57 #endif 43 namespace WebKit { 58 44 45 class WebPrerendererClient; 46 47 class PrerendererClientImpl : public WebCore::PrerendererClient { 48 WTF_MAKE_NONCOPYABLE(PrerendererClientImpl); 49 public: 50 explicit PrerendererClientImpl(WebPrerendererClient*); 51 52 void willAddPrerender(WebCore::PrerenderHandle*) OVERRIDE; 53 54 private: 55 WebPrerendererClient* m_client; 56 }; 57 58 } 59 60 #endif // PrerendererClientImpl_h -
trunk/Source/WebKit/chromium/src/WebKit.cpp
r114458 r117029 47 47 #include "v8.h" 48 48 #include <public/Platform.h> 49 #include <public/WebPrerenderingSupport.h> 49 50 #include <wtf/Assertions.h> 50 51 #include <wtf/MainThread.h> … … 164 165 s_webKitPlatformSupport = 0; 165 166 Platform::shutdown(); 167 WebPrerenderingSupport::shutdown(); 166 168 } 167 169 -
trunk/Source/WebKit/chromium/src/WebViewImpl.cpp
r116835 r117029 100 100 #include "PopupContainer.h" 101 101 #include "PopupMenuClient.h" 102 #include "PrerendererClientImpl.h" 102 103 #include "ProgressTracker.h" 103 104 #include "RenderLayerCompositor.h" … … 322 323 } 323 324 325 void WebViewImpl::setPrerendererClient(WebPrerendererClient* prerendererClient) 326 { 327 providePrerendererClientTo(m_page.get(), new PrerendererClientImpl(prerendererClient)); 328 } 329 324 330 void WebViewImpl::setSpellCheckClient(WebSpellCheckClient* spellCheckClient) 325 331 { -
trunk/Source/WebKit/chromium/src/WebViewImpl.h
r116835 r117029 92 92 class GeolocationClientProxy; 93 93 class NonCompositedContentHost; 94 class PrerendererClientImpl; 94 95 class SpeechInputClientImpl; 95 96 class SpeechRecognitionClientProxy; … … 102 103 class WebGestureEvent; 103 104 class WebPagePopupImpl; 105 class WebPrerendererClient; 104 106 class WebImage; 105 107 class WebKeyboardEvent; … … 162 164 virtual void setDevToolsAgentClient(WebDevToolsAgentClient*); 163 165 virtual void setPermissionClient(WebPermissionClient*); 166 virtual void setPrerendererClient(WebPrerendererClient*) OVERRIDE; 164 167 virtual void setSpellCheckClient(WebSpellCheckClient*); 165 168 virtual void addTextFieldDecoratorClient(WebTextFieldDecoratorClient*) OVERRIDE;
Note: See TracChangeset
for help on using the changeset viewer.