summaryrefslogtreecommitdiff
path: root/Source/WebCore/html/HTMLLinkElement.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-03-12 14:11:15 +0100
committerSimon Hausmann <simon.hausmann@nokia.com>2012-03-12 14:11:15 +0100
commitdd91e772430dc294e3bf478c119ef8d43c0a3358 (patch)
tree6f33ce4d5872a5691e0291eb45bf6ab373a5f567 /Source/WebCore/html/HTMLLinkElement.cpp
parentad0d549d4cc13433f77c1ac8f0ab379c83d93f28 (diff)
downloadqtwebkit-dd91e772430dc294e3bf478c119ef8d43c0a3358.tar.gz
Imported WebKit commit 3db4eb1820ac8fb03065d7ea73a4d9db1e8fea1a (http://svn.webkit.org/repository/webkit/trunk@110422)
This includes build fixes for the latest qtbase/qtdeclarative as well as the final QML2 API.
Diffstat (limited to 'Source/WebCore/html/HTMLLinkElement.cpp')
-rw-r--r--Source/WebCore/html/HTMLLinkElement.cpp37
1 files changed, 35 insertions, 2 deletions
diff --git a/Source/WebCore/html/HTMLLinkElement.cpp b/Source/WebCore/html/HTMLLinkElement.cpp
index 1d6536fc5..efe76155a 100644
--- a/Source/WebCore/html/HTMLLinkElement.cpp
+++ b/Source/WebCore/html/HTMLLinkElement.cpp
@@ -31,6 +31,7 @@
#include "CachedResourceLoader.h"
#include "CSSStyleSelector.h"
#include "Document.h"
+#include "EventSender.h"
#include "Frame.h"
#include "FrameLoader.h"
#include "FrameLoaderClient.h"
@@ -51,6 +52,12 @@ namespace WebCore {
using namespace HTMLNames;
+static LinkEventSender& linkLoadEventSender()
+{
+ DEFINE_STATIC_LOCAL(LinkEventSender, sharedLoadEventSender, (eventNames().loadEvent));
+ return sharedLoadEventSender;
+}
+
inline HTMLLinkElement::HTMLLinkElement(const QualifiedName& tagName, Document* document, bool createdByParser)
: HTMLElement(tagName, document)
, m_linkLoader(this)
@@ -59,6 +66,8 @@ inline HTMLLinkElement::HTMLLinkElement(const QualifiedName& tagName, Document*
, m_loading(false)
, m_createdByParser(createdByParser)
, m_isInShadowTree(false)
+ , m_firedLoad(false)
+ , m_loadedSheet(false)
, m_pendingSheetType(None)
{
ASSERT(hasTagName(linkTag));
@@ -81,6 +90,8 @@ HTMLLinkElement::~HTMLLinkElement()
if (inDocument())
document()->removeStyleSheetCandidateNode(this);
+
+ linkLoadEventSender().cancelEvent(this);
}
void HTMLLinkElement::setDisabledState(bool disabled)
@@ -141,12 +152,10 @@ void HTMLLinkElement::parseAttribute(Attribute* attr)
setDisabledState(!attr->isNull());
else if (attr->name() == onbeforeloadAttr)
setAttributeEventListener(eventNames().beforeloadEvent, createAttributeEventListener(this, attr));
-#if ENABLE(LINK_PREFETCH)
else if (attr->name() == onloadAttr)
setAttributeEventListener(eventNames().loadEvent, createAttributeEventListener(this, attr));
else if (attr->name() == onerrorAttr)
setAttributeEventListener(eventNames().errorEvent, createAttributeEventListener(this, attr));
-#endif
else {
if (attr->name() == titleAttr && m_sheet)
m_sheet->setTitle(attr->value());
@@ -330,6 +339,7 @@ void HTMLLinkElement::setCSSStyleSheet(const String& href, const KURL& baseURL,
m_sheet->setMedia(media.get());
m_loading = false;
+ m_sheet->notifyLoadedSheet(sheet);
m_sheet->checkLoaded();
}
@@ -361,6 +371,29 @@ bool HTMLLinkElement::sheetLoaded()
return false;
}
+void HTMLLinkElement::dispatchPendingLoadEvents()
+{
+ linkLoadEventSender().dispatchPendingEvents();
+}
+
+void HTMLLinkElement::dispatchPendingEvent(LinkEventSender* eventSender)
+{
+ ASSERT_UNUSED(eventSender, eventSender == &linkLoadEventSender());
+ if (m_loadedSheet)
+ linkLoaded();
+ else
+ linkLoadingErrored();
+}
+
+void HTMLLinkElement::notifyLoadedSheetAndAllCriticalSubresources(bool errorOccurred)
+{
+ if (m_firedLoad)
+ return;
+ m_loadedSheet = !errorOccurred;
+ linkLoadEventSender().dispatchEventSoon(this);
+ m_firedLoad = true;
+}
+
void HTMLLinkElement::startLoadingDynamicSheet()
{
// We don't support multiple blocking sheets.