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

Unified Diff: Source/core/dom/DocumentStyleSheetCollection.cpp

Issue 139273002: Refactoring: Extract StyleSheetCandidate from DocumentStyleSheetCollection (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Updated to ToT Created 6 years, 11 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/core.gypi ('k') | Source/core/dom/StyleEngine.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/dom/DocumentStyleSheetCollection.cpp
diff --git a/Source/core/dom/DocumentStyleSheetCollection.cpp b/Source/core/dom/DocumentStyleSheetCollection.cpp
index 944213825715afa717a5b62a35c8e167f44aaf54..c72f071fccd36d18a5c38f9bef27606e9d01dd22 100644
--- a/Source/core/dom/DocumentStyleSheetCollection.cpp
+++ b/Source/core/dom/DocumentStyleSheetCollection.cpp
@@ -36,6 +36,7 @@
#include "core/dom/Element.h"
#include "core/dom/ProcessingInstruction.h"
#include "core/dom/StyleEngine.h"
+#include "core/dom/StyleSheetCandidate.h"
#include "core/html/HTMLIFrameElement.h"
#include "core/html/HTMLLinkElement.h"
#include "core/html/HTMLStyleElement.h"
@@ -58,82 +59,40 @@ void DocumentStyleSheetCollection::collectStyleSheetsFromCandidates(StyleEngine*
DocumentOrderedList::iterator end = m_styleSheetCandidateNodes.end();
for (DocumentOrderedList::iterator it = begin; it != end; ++it) {
Node* n = *it;
- StyleSheet* sheet = 0;
- CSSStyleSheet* activeSheet = 0;
- if (n->nodeType() == Node::PROCESSING_INSTRUCTION_NODE && !document()->isHTMLDocument()) {
+ StyleSheetCandidate candidate(*n);
+
+ if (candidate.isXSL()) {
// Processing instruction (XML documents only).
// We don't support linking to embedded CSS stylesheets, see <https://bugs.webkit.org/show_bug.cgi?id=49281> for discussion.
- ProcessingInstruction* pi = toProcessingInstruction(n);
// Don't apply XSL transforms to already transformed documents -- <rdar://problem/4132806>
- if (RuntimeEnabledFeatures::xsltEnabled() && pi->isXSL() && !document()->transformSourceDocument()) {
+ if (RuntimeEnabledFeatures::xsltEnabled() && !document()->transformSourceDocument()) {
+ ProcessingInstruction* pi = toProcessingInstruction(n);
// Don't apply XSL transforms until loading is finished.
if (!document()->parsing() && !pi->isLoading())
document()->applyXSLTransform(pi);
return;
}
- sheet = pi->sheet();
- if (sheet && !sheet->disabled() && sheet->isCSSStyleSheet())
- activeSheet = toCSSStyleSheet(sheet);
- } else if ((n->isHTMLElement() && (n->hasTagName(linkTag) || n->hasTagName(styleTag))) || (n->isSVGElement() && n->hasTagName(SVGNames::styleTag))) {
- Element* e = toElement(n);
- AtomicString title = e->getAttribute(titleAttr);
- bool enabledViaScript = false;
- if (e->hasLocalName(linkTag)) {
- // <LINK> element
- HTMLLinkElement* linkElement = toHTMLLinkElement(n);
- enabledViaScript = linkElement->isEnabledViaScript();
- if (!linkElement->isDisabled() && linkElement->styleSheetIsLoading()) {
- // it is loading but we should still decide which style sheet set to use
- if (!enabledViaScript && !title.isEmpty() && engine->preferredStylesheetSetName().isEmpty()) {
- const AtomicString& rel = e->getAttribute(relAttr);
- if (!rel.contains("alternate")) {
- engine->setPreferredStylesheetSetName(title);
- engine->setSelectedStylesheetSetName(title);
- }
- }
-
- continue;
- }
- sheet = linkElement->sheet();
- if (!sheet)
- title = nullAtom;
- } else if (n->isSVGElement() && n->hasTagName(SVGNames::styleTag)) {
- sheet = toSVGStyleElement(n)->sheet();
- } else {
- sheet = toHTMLStyleElement(n)->sheet();
- }
- if (sheet && !sheet->disabled() && sheet->isCSSStyleSheet())
- activeSheet = toCSSStyleSheet(sheet);
-
- // Check to see if this sheet belongs to a styleset
- // (thus making it PREFERRED or ALTERNATE rather than
- // PERSISTENT).
- AtomicString rel = e->getAttribute(relAttr);
- if (!enabledViaScript && sheet && !title.isEmpty()) {
- // Yes, we have a title.
- if (engine->preferredStylesheetSetName().isEmpty()) {
- // No preferred set has been established. If
- // we are NOT an alternate sheet, then establish
- // us as the preferred set. Otherwise, just ignore
- // this sheet.
- if (e->hasLocalName(styleTag) || !rel.contains("alternate")) {
- engine->setPreferredStylesheetSetName(title);
- engine->setSelectedStylesheetSetName(title);
- }
- }
- if (title != engine->preferredStylesheetSetName())
- activeSheet = 0;
- }
+ continue;
+ }
- if (rel.contains("alternate") && title.isEmpty())
- activeSheet = 0;
+ if (candidate.isEnabledAndLoading()) {
+ // it is loading but we should still decide which style sheet set to use
+ if (candidate.hasPreferrableName(engine->preferredStylesheetSetName()))
+ engine->selectStylesheetSetName(candidate.title());
+ continue;
}
- if (sheet && collectFor == CollectForList)
+ StyleSheet* sheet = candidate.sheet();
+ if (!sheet)
+ continue;
+
+ if (candidate.hasPreferrableName(engine->preferredStylesheetSetName()))
+ engine->selectStylesheetSetName(candidate.title());
+ if (collectFor == CollectForList)
collection.appendSheetForList(sheet);
- if (activeSheet)
- collection.appendActiveStyleSheet(activeSheet);
+ if (candidate.canBeActivated(engine->preferredStylesheetSetName()))
+ collection.appendActiveStyleSheet(toCSSStyleSheet(sheet));
}
}
« no previous file with comments | « Source/core/core.gypi ('k') | Source/core/dom/StyleEngine.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698