Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(593)

Unified Diff: Source/core/html/HTMLLinkElement.cpp

Issue 15415004: Refactoring: Make LinkStyle instantiation lazy (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Removed m_disabled Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/html/HTMLLinkElement.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/html/HTMLLinkElement.cpp
diff --git a/Source/core/html/HTMLLinkElement.cpp b/Source/core/html/HTMLLinkElement.cpp
index 63d28e96c0a9284d23d8a635214a1f6a81bc10b9..a8009adcb7d77d70aa3df855c7adfb4d2d62e149 100644
--- a/Source/core/html/HTMLLinkElement.cpp
+++ b/Source/core/html/HTMLLinkElement.cpp
@@ -63,7 +63,6 @@ static LinkEventSender& linkLoadEventSender()
inline HTMLLinkElement::HTMLLinkElement(const QualifiedName& tagName, Document* document, bool createdByParser)
: HTMLElement(tagName, document)
- , m_link(adoptPtr(new LinkStyle(this)))
, m_linkLoader(this)
, m_sizes(DOMSettableTokenList::create())
, m_createdByParser(createdByParser)
@@ -105,13 +104,17 @@ void HTMLLinkElement::parseAttribute(const QualifiedName& name, const AtomicStri
} else if (name == mediaAttr) {
m_media = value.string().lower();
process();
- } else if (name == disabledAttr)
- m_link->setDisabledState(!value.isNull());
- else if (name == onbeforeloadAttr)
+ } else if (name == disabledAttr) {
+ if (LinkStyle* link = linkStyle())
+ link->setDisabledState(!value.isNull());
+ } else if (name == onbeforeloadAttr)
setAttributeEventListener(eventNames().beforeloadEvent, createAttributeEventListener(this, name, value));
else {
- if (name == titleAttr)
- m_link->setSheetTitle(value);
+ if (name == titleAttr) {
+ if (LinkStyle* link = linkStyle())
+ link->setSheetTitle(value);
+ }
+
HTMLElement::parseAttribute(name, value);
}
}
@@ -139,17 +142,27 @@ bool HTMLLinkElement::shouldLoadLink()
return continueLoad;
}
-bool HTMLLinkElement::shouldProcessStyle()
+LinkStyle* HTMLLinkElement::linkStyleToProcess()
{
- bool should = inDocument() && !m_isInShadowTree;
- ASSERT(should || !m_link->hasSheet());
- return should;
+ bool visible = inDocument() && !m_isInShadowTree;
+ if (!visible) {
+ ASSERT(!linkStyle() || !linkStyle()->hasSheet());
+ return 0;
+ }
+
+ if (!m_link) {
+ m_link = adoptPtr(new LinkStyle(this));
+ if (fastHasAttribute(disabledAttr))
+ m_link->setDisabledState(true);
+ }
+
+ return m_link.get();
}
void HTMLLinkElement::process()
{
- if (shouldProcessStyle())
- m_link->process();
+ if (LinkStyle* link = linkStyleToProcess())
+ link->process();
}
Node::InsertionNotificationRequest HTMLLinkElement::insertedInto(ContainerNode* insertionPoint)
@@ -177,12 +190,13 @@ void HTMLLinkElement::removedFrom(ContainerNode* insertionPoint)
m_linkLoader.released();
if (m_isInShadowTree) {
- ASSERT(!m_link->hasSheet());
+ ASSERT(!linkStyle() || !linkStyle()->hasSheet());
return;
}
document()->styleSheetCollection()->removeStyleSheetCandidateNode(this);
- m_link->ownerRemoved();
+ if (LinkStyle* link = linkStyle())
+ link->ownerRemoved();
if (document()->renderer())
document()->styleResolverChanged(DeferRecalcStyle);
@@ -196,7 +210,7 @@ void HTMLLinkElement::finishParsingChildren()
bool HTMLLinkElement::styleSheetIsLoading() const
{
- return m_link->styleSheetIsLoading();
+ return linkStyle() && linkStyle()->styleSheetIsLoading();
}
void HTMLLinkElement::linkLoaded()
@@ -231,12 +245,14 @@ void HTMLLinkElement::didSendDOMContentLoadedForLinkPrerender()
bool HTMLLinkElement::sheetLoaded()
{
- return m_link->sheetLoaded();
+ ASSERT(linkStyle());
+ return linkStyle()->sheetLoaded();
}
void HTMLLinkElement::notifyLoadedSheetAndAllCriticalSubresources(bool errorOccurred)
{
- m_link->notifyLoadedSheetAndAllCriticalSubresources(errorOccurred);
+ ASSERT(linkStyle());
+ linkStyle()->notifyLoadedSheetAndAllCriticalSubresources(errorOccurred);
}
void HTMLLinkElement::dispatchPendingLoadEvents()
@@ -247,7 +263,8 @@ void HTMLLinkElement::dispatchPendingLoadEvents()
void HTMLLinkElement::dispatchPendingEvent(LinkEventSender* eventSender)
{
ASSERT_UNUSED(eventSender, eventSender == &linkLoadEventSender());
- if (m_link->hasLoadedSheet())
+ ASSERT(linkStyle());
+ if (linkStyle()->hasLoadedSheet())
linkLoaded();
else
linkLoadingErrored();
@@ -255,7 +272,8 @@ void HTMLLinkElement::dispatchPendingEvent(LinkEventSender* eventSender)
void HTMLLinkElement::startLoadingDynamicSheet()
{
- m_link->startLoadingDynamicSheet();
+ ASSERT(linkStyle());
+ linkStyle()->startLoadingDynamicSheet();
}
bool HTMLLinkElement::isURLAttribute(const Attribute& attribute) const
« no previous file with comments | « Source/core/html/HTMLLinkElement.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698