Index: Source/core/loader/LinkLoader.cpp |
diff --git a/Source/core/loader/LinkLoader.cpp b/Source/core/loader/LinkLoader.cpp |
index 8517a62cfd7317e91e39c4ab83a5f08b72ce5e10..adbc51ea2ef82865a5e9ef0fbc4168ae271d940d 100644 |
--- a/Source/core/loader/LinkLoader.cpp |
+++ b/Source/core/loader/LinkLoader.cpp |
@@ -36,13 +36,25 @@ |
#include "core/dom/Document.h" |
#include "core/fetch/FetchRequest.h" |
#include "core/fetch/ResourceFetcher.h" |
+#include "core/frame/Settings.h" |
#include "core/html/LinkRelAttribute.h" |
#include "core/loader/PrerenderHandle.h" |
-#include "core/frame/Settings.h" |
+#include "platform/Prerender.h" |
#include "platform/network/DNS.h" |
namespace WebCore { |
+static unsigned prerenderRelTypesFromRelAttribute(const LinkRelAttribute& relAttribute) |
+{ |
+ unsigned result = 0; |
+ if (relAttribute.isLinkPrerender()) |
+ result |= PrerenderRelTypePrerender; |
+ if (relAttribute.isLinkNext()) |
+ result |= PrerenderRelTypeNext; |
+ |
+ return result; |
+} |
+ |
LinkLoader::LinkLoader(LinkLoaderClient* client) |
: m_client(client) |
, m_linkLoadTimer(this, &LinkLoader::linkLoadTimerFired) |
@@ -119,13 +131,14 @@ bool LinkLoader::loadLink(const LinkRelAttribute& relAttribute, const AtomicStri |
setResource(document.fetcher()->fetchLinkResource(type, linkRequest)); |
} |
- if (relAttribute.isLinkPrerender()) { |
+ if (const unsigned prerenderRelTypes = prerenderRelTypesFromRelAttribute(relAttribute)) { |
if (!m_prerender) { |
- m_prerender = PrerenderHandle::create(document, this, href); |
+ m_prerender = PrerenderHandle::create(document, this, href, prerenderRelTypes); |
} else if (m_prerender->url() != href) { |
m_prerender->cancel(); |
- m_prerender = PrerenderHandle::create(document, this, href); |
+ m_prerender = PrerenderHandle::create(document, this, href, prerenderRelTypes); |
} |
+ // TODO(gavinp): Handle changes to rel types of existing prerenders. |
} else if (m_prerender) { |
m_prerender->cancel(); |
m_prerender.clear(); |