diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-03-12 14:11:15 +0100 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-03-12 14:11:15 +0100 |
commit | dd91e772430dc294e3bf478c119ef8d43c0a3358 (patch) | |
tree | 6f33ce4d5872a5691e0291eb45bf6ab373a5f567 /Source/WebCore/html/HTMLLinkElement.cpp | |
parent | ad0d549d4cc13433f77c1ac8f0ab379c83d93f28 (diff) | |
download | qtwebkit-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.cpp | 37 |
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. |