summaryrefslogtreecommitdiffstats
path: root/Source/WebCore/html/HTMLLinkElement.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/html/HTMLLinkElement.cpp')
-rw-r--r--Source/WebCore/html/HTMLLinkElement.cpp40
1 files changed, 26 insertions, 14 deletions
diff --git a/Source/WebCore/html/HTMLLinkElement.cpp b/Source/WebCore/html/HTMLLinkElement.cpp
index 4673109..223fcf6 100644
--- a/Source/WebCore/html/HTMLLinkElement.cpp
+++ b/Source/WebCore/html/HTMLLinkElement.cpp
@@ -61,6 +61,7 @@ inline HTMLLinkElement::HTMLLinkElement(const QualifiedName& tagName, Document*
, m_pendingSheetType(None)
{
ASSERT(hasTagName(linkTag));
+ setIeForbidsInsertHTML();
}
PassRefPtr<HTMLLinkElement> HTMLLinkElement::create(const QualifiedName& tagName, Document* document, bool createdByParser)
@@ -74,10 +75,10 @@ HTMLLinkElement::~HTMLLinkElement()
m_sheet->clearOwnerNode();
if (m_cachedSheet) {
- m_cachedSheet->removeClient(this);
+ m_cachedSheet->removeClient(this);
removePendingSheet();
}
-
+
#if ENABLE(LINK_PREFETCH)
if (m_cachedLinkResource)
m_cachedLinkResource->removeClient(this);
@@ -164,6 +165,7 @@ void HTMLLinkElement::tokenizeRelAttribute(const AtomicString& rel, RelAttribute
relAttribute.m_isDNSPrefetch = false;
#if ENABLE(LINK_PREFETCH)
relAttribute.m_isLinkPrefetch = false;
+ relAttribute.m_isLinkPrerender = false;
relAttribute.m_isLinkSubresource = false;
#endif
#ifdef ANDROID_APPLE_TOUCH_ICON
@@ -202,6 +204,8 @@ void HTMLLinkElement::tokenizeRelAttribute(const AtomicString& rel, RelAttribute
#if ENABLE(LINK_PREFETCH)
else if (equalIgnoringCase(*it, "prefetch"))
relAttribute.m_isLinkPrefetch = true;
+ else if (equalIgnoringCase(*it, "prerender"))
+ relAttribute.m_isLinkPrerender = true;
else if (equalIgnoringCase(*it, "subresource"))
relAttribute.m_isLinkSubresource = true;
#endif
@@ -232,7 +236,7 @@ void HTMLLinkElement::process()
// IE extension: location of small icon for locationbar / bookmarks
// We'll record this URL per document, even if we later only use it in top level frames
if (m_relAttribute.m_isIcon && m_url.isValid() && !m_url.isEmpty()) {
- if (!checkBeforeLoadEvent())
+ if (!checkBeforeLoadEvent())
return;
document()->setIconURL(m_url.string(), type);
}
@@ -254,28 +258,35 @@ void HTMLLinkElement::process()
}
#if ENABLE(LINK_PREFETCH)
- if ((m_relAttribute.m_isLinkPrefetch || m_relAttribute.m_isLinkSubresource) && m_url.isValid() && document()->frame()) {
+ if ((m_relAttribute.m_isLinkPrefetch || m_relAttribute.m_isLinkPrerender || m_relAttribute.m_isLinkSubresource) && m_url.isValid() && document()->frame()) {
if (!checkBeforeLoadEvent())
return;
ResourceLoadPriority priority = ResourceLoadPriorityUnresolved;
- if (m_relAttribute.m_isLinkSubresource)
+ CachedResource::Type type = CachedResource::LinkPrefetch;
+ // We only make one request to the cachedresourcelodaer if multiple rel types are
+ // specified.
+ if (m_relAttribute.m_isLinkSubresource) {
priority = ResourceLoadPriorityLow;
+ type = CachedResource::LinkSubresource;
+ } else if (m_relAttribute.m_isLinkPrerender)
+ type = CachedResource::LinkPrerender;
- m_cachedLinkResource = document()->cachedResourceLoader()->requestLinkResource(m_url, priority);
+ ResourceRequest linkRequest(document()->completeURL(m_url));
+ m_cachedLinkResource = document()->cachedResourceLoader()->requestLinkResource(type, linkRequest, priority);
if (m_cachedLinkResource)
m_cachedLinkResource->addClient(this);
}
#endif
bool acceptIfTypeContainsTextCSS = document()->page() && document()->page()->settings() && document()->page()->settings()->treatsAnyTextCSSLinkAsStylesheet();
-
- if (m_disabledState != Disabled && (m_relAttribute.m_isStyleSheet || (acceptIfTypeContainsTextCSS && type.contains("text/css")))
+
+ if (m_disabledState != Disabled && (m_relAttribute.m_isStyleSheet || (acceptIfTypeContainsTextCSS && type.contains("text/css")))
&& document()->frame() && m_url.isValid()) {
-
+
String charset = getAttribute(charsetAttr);
if (charset.isEmpty() && document()->frame())
charset = document()->charset();
-
+
if (m_cachedSheet) {
removePendingSheet();
m_cachedSheet->removeClient(this);
@@ -302,8 +313,9 @@ void HTMLLinkElement::process()
// Load stylesheets that are not needed for the rendering immediately with low priority.
ResourceLoadPriority priority = blocking ? ResourceLoadPriorityUnresolved : ResourceLoadPriorityVeryLow;
- m_cachedSheet = document()->cachedResourceLoader()->requestCSSStyleSheet(m_url, charset, priority);
-
+ ResourceRequest request(document()->completeURL(m_url));
+ m_cachedSheet = document()->cachedResourceLoader()->requestCSSStyleSheet(request, charset, priority);
+
if (m_cachedSheet)
m_cachedSheet->addClient(this);
else {
@@ -495,10 +507,10 @@ void HTMLLinkElement::addSubresourceAttributeURLs(ListHashSet<KURL>& urls) const
if (!m_relAttribute.m_isStyleSheet)
return;
-
+
// Append the URL of this link element.
addSubresourceURL(urls, href());
-
+
// Walk the URLs linked by the linked-to stylesheet.
if (StyleSheet* styleSheet = const_cast<HTMLLinkElement*>(this)->sheet())
styleSheet->addSubresourceStyleURLs(urls);