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

Unified Diff: third_party/WebKit/Source/core/html/LinkStyle.cpp

Issue 2426513003: Refactor LinkStyle out of HTMLLinkElement (Closed)
Patch Set: Review comment Created 4 years, 2 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 | « third_party/WebKit/Source/core/html/LinkStyle.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/html/LinkStyle.cpp
diff --git a/third_party/WebKit/Source/core/html/HTMLLinkElement.cpp b/third_party/WebKit/Source/core/html/LinkStyle.cpp
similarity index 54%
copy from third_party/WebKit/Source/core/html/HTMLLinkElement.cpp
copy to third_party/WebKit/Source/core/html/LinkStyle.cpp
index 7b5cfd145bd2136c74b40fc4c2ef13be5512615f..b005d916dcdc822cd6e0d3419bf676959fc4fa00 100644
--- a/third_party/WebKit/Source/core/html/HTMLLinkElement.cpp
+++ b/third_party/WebKit/Source/core/html/LinkStyle.cpp
@@ -1,65 +1,20 @@
-/*
- * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
- * (C) 1999 Antti Koivisto (koivisto@kde.org)
- * (C) 2001 Dirk Mueller (mueller@kde.org)
- * Copyright (C) 2003, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights
- * reserved.
- * Copyright (C) 2009 Rob Buis (rwlbuis@gmail.com)
- * Copyright (C) 2011 Google Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
-#include "core/html/HTMLLinkElement.h"
+#include "core/html/LinkStyle.h"
-#include "bindings/core/v8/ScriptEventListener.h"
-#include "core/HTMLNames.h"
-#include "core/css/MediaList.h"
-#include "core/css/MediaQueryEvaluator.h"
#include "core/css/StyleSheetContents.h"
-#include "core/css/resolver/StyleResolver.h"
-#include "core/dom/Attribute.h"
-#include "core/dom/Document.h"
-#include "core/dom/StyleEngine.h"
-#include "core/dom/TaskRunnerHelper.h"
-#include "core/events/Event.h"
#include "core/fetch/CSSStyleSheetResource.h"
-#include "core/fetch/FetchRequest.h"
-#include "core/fetch/ResourceFetcher.h"
-#include "core/frame/FrameView.h"
#include "core/frame/LocalFrame.h"
#include "core/frame/SubresourceIntegrity.h"
-#include "core/frame/UseCounter.h"
#include "core/frame/csp/ContentSecurityPolicy.h"
#include "core/html/CrossOriginAttribute.h"
-#include "core/html/LinkManifest.h"
-#include "core/html/imports/LinkImport.h"
-#include "core/inspector/ConsoleMessage.h"
-#include "core/loader/FrameLoader.h"
+#include "core/html/HTMLLinkElement.h"
#include "core/loader/FrameLoaderClient.h"
-#include "core/loader/NetworkHintsInterface.h"
-#include "core/origin_trials/OriginTrials.h"
-#include "core/style/StyleInheritedData.h"
#include "platform/ContentType.h"
#include "platform/Histogram.h"
#include "platform/MIMETypeRegistry.h"
-#include "platform/RuntimeEnabledFeatures.h"
-#include "public/platform/WebIconSizesParser.h"
-#include "public/platform/WebSize.h"
-#include "wtf/StdLibExtras.h"
namespace blink {
@@ -71,319 +26,6 @@ static bool styleSheetTypeIsSupported(const String& type) {
MIMETypeRegistry::isSupportedStyleSheetMIMEType(trimmedType);
}
-inline HTMLLinkElement::HTMLLinkElement(Document& document,
- bool createdByParser)
- : HTMLElement(linkTag, document),
- m_linkLoader(LinkLoader::create(this)),
- m_sizes(DOMTokenList::create(this)),
- m_relList(RelList::create(this)),
- m_createdByParser(createdByParser) {}
-
-HTMLLinkElement* HTMLLinkElement::create(Document& document,
- bool createdByParser) {
- return new HTMLLinkElement(document, createdByParser);
-}
-
-HTMLLinkElement::~HTMLLinkElement() {}
-
-void HTMLLinkElement::parseAttribute(const QualifiedName& name,
- const AtomicString& oldValue,
- const AtomicString& value) {
- if (name == relAttr) {
- m_relAttribute = LinkRelAttribute(value);
- m_relList->setRelValues(value);
- process();
- } else if (name == hrefAttr) {
- // Log href attribute before logging resource fetching in process().
- logUpdateAttributeIfIsolatedWorldAndInDocument("link", hrefAttr, oldValue,
- value);
- process();
- } else if (name == typeAttr) {
- m_type = value;
- process();
- } else if (name == asAttr) {
- m_as = value;
- process();
- } else if (name == sizesAttr) {
- m_sizes->setValue(value);
- } else if (name == mediaAttr) {
- m_media = value.lower();
- process();
- } else if (name == scopeAttr) {
- m_scope = value;
- process();
- } else if (name == disabledAttr) {
- UseCounter::count(document(), UseCounter::HTMLLinkElementDisabled);
- if (LinkStyle* link = linkStyle())
- link->setDisabledState(!value.isNull());
- } else {
- if (name == titleAttr) {
- if (LinkStyle* link = linkStyle())
- link->setSheetTitle(value, StyleEngine::UpdateActiveSheets);
- }
-
- HTMLElement::parseAttribute(name, oldValue, value);
- }
-}
-
-bool HTMLLinkElement::shouldLoadLink() {
- return isInDocumentTree() || (isConnected() && m_relAttribute.isStyleSheet());
-}
-
-bool HTMLLinkElement::loadLink(const String& type,
- const String& as,
- const String& media,
- const KURL& url) {
- return m_linkLoader->loadLink(
- m_relAttribute,
- crossOriginAttributeValue(fastGetAttribute(HTMLNames::crossoriginAttr)),
- type, as, media, url, document(), NetworkHintsInterfaceImpl());
-}
-
-LinkResource* HTMLLinkElement::linkResourceToProcess() {
- if (!shouldLoadLink()) {
- DCHECK(!linkStyle() || !linkStyle()->hasSheet());
- return nullptr;
- }
-
- if (!m_link) {
- if (m_relAttribute.isImport()) {
- m_link = LinkImport::create(this);
- } else if (m_relAttribute.isManifest()) {
- m_link = LinkManifest::create(this);
- } else if (m_relAttribute.isServiceWorker() &&
- OriginTrials::linkServiceWorkerEnabled(getExecutionContext())) {
- if (document().frame())
- m_link = document()
- .frame()
- ->loader()
- .client()
- ->createServiceWorkerLinkResource(this);
- } else {
- LinkStyle* link = LinkStyle::create(this);
- if (fastHasAttribute(disabledAttr)) {
- UseCounter::count(document(), UseCounter::HTMLLinkElementDisabled);
- link->setDisabledState(true);
- }
- m_link = link;
- }
- }
-
- return m_link.get();
-}
-
-LinkStyle* HTMLLinkElement::linkStyle() const {
- if (!m_link || m_link->type() != LinkResource::Style)
- return nullptr;
- return static_cast<LinkStyle*>(m_link.get());
-}
-
-LinkImport* HTMLLinkElement::linkImport() const {
- if (!m_link || m_link->type() != LinkResource::Import)
- return nullptr;
- return static_cast<LinkImport*>(m_link.get());
-}
-
-Document* HTMLLinkElement::import() const {
- if (LinkImport* link = linkImport())
- return link->importedDocument();
- return nullptr;
-}
-
-void HTMLLinkElement::process() {
- if (LinkResource* link = linkResourceToProcess())
- link->process();
-}
-
-Node::InsertionNotificationRequest HTMLLinkElement::insertedInto(
- ContainerNode* insertionPoint) {
- HTMLElement::insertedInto(insertionPoint);
- logAddElementIfIsolatedWorldAndInDocument("link", relAttr, hrefAttr);
- if (!insertionPoint->isConnected())
- return InsertionDone;
- DCHECK(isConnected());
- if (!shouldLoadLink()) {
- DCHECK(isInShadowTree());
- String message = "HTML element <link> is ignored in shadow tree.";
- document().addConsoleMessage(
- ConsoleMessage::create(JSMessageSource, WarningMessageLevel, message));
- return InsertionDone;
- }
-
- document().styleEngine().addStyleSheetCandidateNode(*this);
-
- process();
-
- if (m_link)
- m_link->ownerInserted();
-
- return InsertionDone;
-}
-
-void HTMLLinkElement::removedFrom(ContainerNode* insertionPoint) {
- // Store the result of isConnected() here before Node::removedFrom(..) clears
- // the flags.
- bool wasConnected = isConnected();
- HTMLElement::removedFrom(insertionPoint);
- if (!insertionPoint->isConnected())
- return;
-
- m_linkLoader->released();
-
- if (!wasConnected) {
- DCHECK(!linkStyle() || !linkStyle()->hasSheet());
- return;
- }
- document().styleEngine().removeStyleSheetCandidateNode(*this);
-
- StyleSheet* removedSheet = sheet();
-
- if (m_link)
- m_link->ownerRemoved();
-
- document().styleEngine().setNeedsActiveStyleUpdate(removedSheet,
- FullStyleUpdate);
-}
-
-void HTMLLinkElement::finishParsingChildren() {
- m_createdByParser = false;
- HTMLElement::finishParsingChildren();
-}
-
-bool HTMLLinkElement::styleSheetIsLoading() const {
- return linkStyle() && linkStyle()->styleSheetIsLoading();
-}
-
-void HTMLLinkElement::linkLoaded() {
- dispatchEvent(Event::create(EventTypeNames::load));
-}
-
-void HTMLLinkElement::linkLoadingErrored() {
- dispatchEvent(Event::create(EventTypeNames::error));
-}
-
-void HTMLLinkElement::didStartLinkPrerender() {
- dispatchEvent(Event::create(EventTypeNames::webkitprerenderstart));
-}
-
-void HTMLLinkElement::didStopLinkPrerender() {
- dispatchEvent(Event::create(EventTypeNames::webkitprerenderstop));
-}
-
-void HTMLLinkElement::didSendLoadForLinkPrerender() {
- dispatchEvent(Event::create(EventTypeNames::webkitprerenderload));
-}
-
-void HTMLLinkElement::didSendDOMContentLoadedForLinkPrerender() {
- dispatchEvent(Event::create(EventTypeNames::webkitprerenderdomcontentloaded));
-}
-
-void HTMLLinkElement::valueWasSet() {
- setSynchronizedLazyAttribute(HTMLNames::sizesAttr, m_sizes->value());
- WebVector<WebSize> webIconSizes =
- WebIconSizesParser::parseIconSizes(m_sizes->value());
- m_iconSizes.resize(webIconSizes.size());
- for (size_t i = 0; i < webIconSizes.size(); ++i)
- m_iconSizes[i] = webIconSizes[i];
- process();
-}
-
-bool HTMLLinkElement::sheetLoaded() {
- DCHECK(linkStyle());
- return linkStyle()->sheetLoaded();
-}
-
-void HTMLLinkElement::notifyLoadedSheetAndAllCriticalSubresources(
- LoadedSheetErrorStatus errorStatus) {
- DCHECK(linkStyle());
- linkStyle()->notifyLoadedSheetAndAllCriticalSubresources(errorStatus);
-}
-
-void HTMLLinkElement::dispatchPendingEvent(
- std::unique_ptr<IncrementLoadEventDelayCount>) {
- DCHECK(m_link);
- if (m_link->hasLoaded())
- linkLoaded();
- else
- linkLoadingErrored();
-}
-
-void HTMLLinkElement::scheduleEvent() {
- TaskRunnerHelper::get(TaskType::DOMManipulation, &document())
- ->postTask(
- BLINK_FROM_HERE,
- WTF::bind(&HTMLLinkElement::dispatchPendingEvent,
- wrapPersistent(this),
- passed(IncrementLoadEventDelayCount::create(document()))));
-}
-
-void HTMLLinkElement::startLoadingDynamicSheet() {
- DCHECK(linkStyle());
- linkStyle()->startLoadingDynamicSheet();
-}
-
-bool HTMLLinkElement::isURLAttribute(const Attribute& attribute) const {
- return attribute.name().localName() == hrefAttr ||
- HTMLElement::isURLAttribute(attribute);
-}
-
-bool HTMLLinkElement::hasLegalLinkAttribute(const QualifiedName& name) const {
- return name == hrefAttr || HTMLElement::hasLegalLinkAttribute(name);
-}
-
-const QualifiedName& HTMLLinkElement::subResourceAttributeName() const {
- // If the link element is not css, ignore it.
- if (equalIgnoringCase(getAttribute(typeAttr), "text/css")) {
- // FIXME: Add support for extracting links of sub-resources which
- // are inside style-sheet such as @import, @font-face, url(), etc.
- return hrefAttr;
- }
- return HTMLElement::subResourceAttributeName();
-}
-
-KURL HTMLLinkElement::href() const {
- return document().completeURL(getAttribute(hrefAttr));
-}
-
-const AtomicString& HTMLLinkElement::rel() const {
- return getAttribute(relAttr);
-}
-
-const AtomicString& HTMLLinkElement::type() const {
- return getAttribute(typeAttr);
-}
-
-bool HTMLLinkElement::async() const {
- return fastHasAttribute(HTMLNames::asyncAttr);
-}
-
-IconType HTMLLinkElement::getIconType() const {
- return m_relAttribute.getIconType();
-}
-
-const Vector<IntSize>& HTMLLinkElement::iconSizes() const {
- return m_iconSizes;
-}
-
-DOMTokenList* HTMLLinkElement::sizes() const {
- return m_sizes.get();
-}
-
-DEFINE_TRACE(HTMLLinkElement) {
- visitor->trace(m_link);
- visitor->trace(m_sizes);
- visitor->trace(m_linkLoader);
- visitor->trace(m_relList);
- HTMLElement::trace(visitor);
- LinkLoaderClient::trace(visitor);
- DOMTokenListObserver::trace(visitor);
-}
-
-DEFINE_TRACE_WRAPPERS(HTMLLinkElement) {
- visitor->traceWrappers(m_relList);
- HTMLElement::traceWrappers(visitor);
-}
-
LinkStyle* LinkStyle::create(HTMLLinkElement* owner) {
return new LinkStyle(owner);
}
@@ -520,9 +162,10 @@ void LinkStyle::setCSSStyleSheet(
styleSheet->notifyLoadedSheet(cachedStyleSheet);
styleSheet->checkLoaded();
- if (styleSheet->isCacheableForResource())
+ if (styleSheet->isCacheableForResource()) {
const_cast<CSSStyleSheetResource*>(cachedStyleSheet)
->saveParsedStyleSheet(styleSheet);
+ }
clearResource();
}
@@ -656,9 +299,10 @@ void LinkStyle::process() {
if (!document().contentSecurityPolicy()->allowImageFromSource(
builder.url()))
return;
- if (document().frame() && document().frame()->loader().client())
+ if (document().frame() && document().frame()->loader().client()) {
document().frame()->loader().client()->dispatchDidChangeIcons(
m_owner->relAttribute().getIconType());
+ }
}
if (!m_owner->loadLink(type, as, media, builder.url()))
@@ -680,9 +324,10 @@ void LinkStyle::process() {
String title = m_owner->title();
if (!title.isEmpty() && !m_owner->isAlternate() &&
- m_disabledState != EnabledViaScript && m_owner->isInDocumentTree())
+ m_disabledState != EnabledViaScript && m_owner->isInDocumentTree()) {
document().styleEngine().setPreferredStylesheetSetNameIfNotSet(
title, StyleEngine::DontUpdateActiveSheets);
+ }
bool mediaQueryMatches = true;
LocalFrame* frame = loadingFrame();
@@ -752,9 +397,10 @@ void LinkStyle::setSheetTitle(
return;
KURL href = m_owner->getNonEmptyURLAttribute(hrefAttr);
- if (href.isValid() && !href.isEmpty())
+ if (href.isValid() && !href.isEmpty()) {
document().styleEngine().setPreferredStylesheetSetNameIfNotSet(
title, updateActiveSheets);
+ }
}
void LinkStyle::ownerRemoved() {
« no previous file with comments | « third_party/WebKit/Source/core/html/LinkStyle.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698