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

Unified Diff: third_party/WebKit/Source/core/dom/Document.cpp

Issue 2390543002: Reflow comments in core/dom/. (Closed)
Patch Set: Reformat comments in core/dom/. 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/dom/Document.h ('k') | third_party/WebKit/Source/core/dom/DocumentInit.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/dom/Document.cpp
diff --git a/third_party/WebKit/Source/core/dom/Document.cpp b/third_party/WebKit/Source/core/dom/Document.cpp
index 057fd604a4591a6a3b1b756751885dff49275c5b..edecda6ba994935a308e864a4b511d98288d9a2b 100644
--- a/third_party/WebKit/Source/core/dom/Document.cpp
+++ b/third_party/WebKit/Source/core/dom/Document.cpp
@@ -3,8 +3,10 @@
* (C) 1999 Antti Koivisto (koivisto@kde.org)
* (C) 2001 Dirk Mueller (mueller@kde.org)
* (C) 2006 Alexey Proskuryakov (ap@webkit.org)
- * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All rights reserved.
- * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All
+ * rights reserved.
+ * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved.
+ * (http://www.torchmobile.com/)
* Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved.
* Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
* Copyright (C) Research In Motion Limited 2010-2011. All rights reserved.
@@ -266,25 +268,36 @@ using namespace HTMLNames;
static const unsigned cMaxWriteRecursionDepth = 21;
-// This amount of time must have elapsed before we will even consider scheduling a layout without a delay.
-// FIXME: For faster machines this value can really be lowered to 200. 250 is adequate, but a little high
-// for dual G5s. :)
+// This amount of time must have elapsed before we will even consider scheduling
+// a layout without a delay.
+// FIXME: For faster machines this value can really be lowered to 200. 250 is
+// adequate, but a little high for dual G5s. :)
static const int cLayoutScheduleThreshold = 250;
// DOM Level 2 says (letters added):
//
// a) Name start characters must have one of the categories Ll, Lu, Lo, Lt, Nl.
-// b) Name characters other than Name-start characters must have one of the categories Mc, Me, Mn, Lm, or Nd.
-// c) Characters in the compatibility area (i.e. with character code greater than #xF900 and less than #xFFFE) are not allowed in XML names.
-// d) Characters which have a font or compatibility decomposition (i.e. those with a "compatibility formatting tag" in field 5 of the database -- marked by field 5 beginning with a "<") are not allowed.
-// e) The following characters are treated as name-start characters rather than name characters, because the property file classifies them as Alphabetic: [#x02BB-#x02C1], #x0559, #x06E5, #x06E6.
-// f) Characters #x20DD-#x20E0 are excluded (in accordance with Unicode, section 5.14).
-// g) Character #x00B7 is classified as an extender, because the property list so identifies it.
-// h) Character #x0387 is added as a name character, because #x00B7 is its canonical equivalent.
+// b) Name characters other than Name-start characters must have one of the
+// categories Mc, Me, Mn, Lm, or Nd.
+// c) Characters in the compatibility area (i.e. with character code greater
+// than #xF900 and less than #xFFFE) are not allowed in XML names.
+// d) Characters which have a font or compatibility decomposition (i.e. those
+// with a "compatibility formatting tag" in field 5 of the database -- marked
+// by field 5 beginning with a "<") are not allowed.
+// e) The following characters are treated as name-start characters rather than
+// name characters, because the property file classifies them as Alphabetic:
+// [#x02BB-#x02C1], #x0559, #x06E5, #x06E6.
+// f) Characters #x20DD-#x20E0 are excluded (in accordance with Unicode, section
+// 5.14).
+// g) Character #x00B7 is classified as an extender, because the property list
+// so identifies it.
+// h) Character #x0387 is added as a name character, because #x00B7 is its
+// canonical equivalent.
// i) Characters ':' and '_' are allowed as name-start characters.
// j) Characters '-' and '.' are allowed as name characters.
//
-// It also contains complete tables. If we decide it's better, we could include those instead of the following code.
+// It also contains complete tables. If we decide it's better, we could include
+// those instead of the following code.
static inline bool isValidNameStart(UChar32 c) {
// rule (e) above
@@ -350,7 +363,8 @@ static bool shouldInheritSecurityOriginFromOwner(const KURL& url) {
// http://www.whatwg.org/specs/web-apps/current-work/#origin-0
//
// If a Document has the address "about:blank"
- // The origin of the Document is the origin it was assigned when its browsing context was created.
+ // The origin of the Document is the origin it was assigned when its
+ // browsing context was created.
//
// Note: We generalize this to all "blank" URLs and invalid URLs because we
// treat all of these URLs as about:blank.
@@ -384,11 +398,13 @@ static void runAutofocusTask(ExecutionContext* context) {
}
}
-// These are logged to UMA, so don't re-arrange them without creating a new histogram.
+// These are logged to UMA, so don't re-arrange them without creating a new
+// histogram.
enum DocumentVisibilityForDeferredLoading {
Created,
WouldLoadBecauseVisible,
- // TODO(dgrogan): Add WouldLoadBecauseTopOrLeft, WouldLoadBecauseDisplayNone, etc
+ // TODO(dgrogan): Add WouldLoadBecauseTopOrLeft, WouldLoadBecauseDisplayNone,
+ // etc
DocumentVisibilityForDeferredLoadingEnd
};
@@ -528,10 +544,10 @@ Document::Document(const DocumentInit& initializer,
// m_fetcher.
m_styleEngine = StyleEngine::create(*this);
- // The parent's parser should be suspended together with all the other objects,
- // else this new Document would have a new ExecutionContext which suspended state
- // would not match the one from the parent, and could start loading resources
- // ignoring the defersLoading flag.
+ // The parent's parser should be suspended together with all the other
+ // objects, else this new Document would have a new ExecutionContext which
+ // suspended state would not match the one from the parent, and could start
+ // loading resources ignoring the defersLoading flag.
DCHECK(!parentDocument() ||
!parentDocument()->activeDOMObjectsAreSuspended());
@@ -936,7 +952,8 @@ Node* Document::importNode(Node* importedNode,
case kDocumentFragmentNode: {
if (importedNode->isShadowRoot()) {
// ShadowRoot nodes should not be explicitly importable.
- // Either they are imported along with their host node, or created implicitly.
+ // Either they are imported along with their host node, or created
+ // implicitly.
exceptionState.throwDOMException(
NotSupportedError,
"The node provided is a shadow root, which may not be imported.");
@@ -1014,18 +1031,18 @@ Node* Document::adoptNode(Node* source, ExceptionState& exceptionState) {
bool Document::hasValidNamespaceForElements(const QualifiedName& qName) {
// These checks are from DOM Core Level 2, createElementNS
// http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-DocCrElNS
- if (!qName.prefix().isEmpty() &&
- qName.namespaceURI().isNull()) // createElementNS(null, "html:div")
+ // createElementNS(null, "html:div")
+ if (!qName.prefix().isEmpty() && qName.namespaceURI().isNull())
return false;
+ // createElementNS("http://www.example.com", "xml:lang")
if (qName.prefix() == xmlAtom &&
- qName.namespaceURI() !=
- XMLNames::
- xmlNamespaceURI) // createElementNS("http://www.example.com", "xml:lang")
+ qName.namespaceURI() != XMLNames::xmlNamespaceURI)
return false;
// Required by DOM Level 3 Core and unspecified by DOM Level 2 Core:
// http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#ID-DocCrElNS
- // createElementNS("http://www.w3.org/2000/xmlns/", "foo:bar"), createElementNS(null, "xmlns:bar"), createElementNS(null, "xmlns")
+ // createElementNS("http://www.w3.org/2000/xmlns/", "foo:bar"),
+ // createElementNS(null, "xmlns:bar"), createElementNS(null, "xmlns")
if (qName.prefix() == xmlnsAtom ||
(qName.prefix().isEmpty() && qName.localName() == xmlnsAtom))
return qName.namespaceURI() == XMLNSNames::xmlnsNamespaceURI;
@@ -1041,7 +1058,8 @@ Element* Document::createElement(const QualifiedName& qName,
CreateElementFlags flags) {
Element* e = nullptr;
- // FIXME: Use registered namespaces and look up in a hash to find the right factory.
+ // FIXME: Use registered namespaces and look up in a hash to find the right
+ // factory.
if (qName.namespaceURI() == xhtmlNamespaceURI)
e = HTMLElementFactory::createHTMLElement(qName.localName(), *this, 0,
flags);
@@ -1314,8 +1332,9 @@ void Document::setTitle(const String& title) {
}
void Document::setTitleElement(Element* titleElement) {
- // If the root element is an svg element in the SVG namespace, then let value be the child text content
- // of the first title element in the SVG namespace that is a child of the root element.
+ // If the root element is an svg element in the SVG namespace, then let value
+ // be the child text content of the first title element in the SVG namespace
+ // that is a child of the root element.
if (isSVGSVGElement(documentElement())) {
m_titleElement = Traversal<SVGTitleElement>::firstChild(*documentElement());
} else {
@@ -1324,8 +1343,8 @@ void Document::setTitleElement(Element* titleElement) {
else
m_titleElement = titleElement;
- // If the root element isn't an svg element in the SVG namespace and the title element is
- // in the SVG namespace, it is ignored.
+ // If the root element isn't an svg element in the SVG namespace and the
+ // title element is in the SVG namespace, it is ignored.
if (isSVGTitleElement(m_titleElement)) {
m_titleElement = nullptr;
return;
@@ -1505,7 +1524,8 @@ bool Document::needsFullLayoutTreeUpdate() const {
return true;
if (needsStyleInvalidation())
return true;
- // FIXME: The childNeedsDistributionRecalc bit means either self or children, we should fix that.
+ // FIXME: The childNeedsDistributionRecalc bit means either self or children,
+ // we should fix that.
if (childNeedsDistributionRecalc())
return true;
if (DocumentAnimations::needsAnimationTimingUpdate(*this))
@@ -1518,7 +1538,8 @@ bool Document::shouldScheduleLayoutTreeUpdate() const {
return false;
if (inStyleRecalc())
return false;
- // InPreLayout will recalc style itself. There's no reason to schedule another recalc.
+ // InPreLayout will recalc style itself. There's no reason to schedule another
+ // recalc.
if (m_lifecycle.state() == DocumentLifecycle::InPreLayout)
return false;
if (!shouldScheduleLayout())
@@ -1600,7 +1621,8 @@ void Document::inheritHtmlAndBodyElementStyles(StyleRecalcChange change) {
const ComputedStyle* backgroundStyle = documentElementStyle.get();
// http://www.w3.org/TR/css3-background/#body-background
- // <html> root element with no background steals background from its first <body> child.
+ // <html> root element with no background steals background from its first
+ // <body> child.
// Also see LayoutBoxModelObject::backgroundStolenForBeingBody()
if (isHTMLHtmlElement(documentElement()) && isHTMLBodyElement(body) &&
!backgroundStyle->hasBackground())
@@ -1611,12 +1633,13 @@ void Document::inheritHtmlAndBodyElementStyles(StyleRecalcChange change) {
for (auto currentLayer = &backgroundLayers; currentLayer;
currentLayer = currentLayer->next()) {
// http://www.w3.org/TR/css3-background/#root-background
- // The root element background always have painting area of the whole canvas.
+ // The root element background always have painting area of the whole
+ // canvas.
currentLayer->setClip(BorderFillBox);
// The root element doesn't scroll. It always propagates its layout overflow
- // to the viewport. Positioning background against either box is equivalent to
- // positioning against the scrolled box of the viewport.
+ // to the viewport. Positioning background against either box is equivalent
+ // to positioning against the scrolled box of the viewport.
if (currentLayer->attachment() == ScrollBackgroundAttachment)
currentLayer->setAttachment(LocalBackgroundAttachment);
}
@@ -1630,21 +1653,23 @@ void Document::inheritHtmlAndBodyElementStyles(StyleRecalcChange change) {
DCHECK_EQ(element, documentElement());
overflowStyle = documentElementStyle.get();
- // The body element has its own scrolling box, independent from the viewport.
- // This is a bit of a weird edge case in the CSS spec that we might want to try to
- // eliminate some day (eg. for ScrollTopLeftInterop - see http://crbug.com/157855).
+ // The body element has its own scrolling box, independent from the
+ // viewport. This is a bit of a weird edge case in the CSS spec that we
+ // might want to try to eliminate some day (eg. for ScrollTopLeftInterop -
+ // see http://crbug.com/157855).
if (bodyStyle && !bodyStyle->isOverflowVisible())
UseCounter::count(*this, UseCounter::BodyScrollsInAdditionToViewport);
}
}
- // Resolved rem units are stored in the matched properties cache so we need to make sure to
- // invalidate the cache if the documentElement needed to reattach or the font size changed
- // and then trigger a full document recalc. We also need to clear it here since the
- // call to styleForElement on the body above can cache bad values for rem units if the
- // documentElement's style was dirty. We could keep track of which elements depend on
- // rem units like we do for viewport styles, but we assume root font size changes are
- // rare and just invalidate the cache for now.
+ // Resolved rem units are stored in the matched properties cache so we need to
+ // make sure to invalidate the cache if the documentElement needed to reattach
+ // or the font size changed and then trigger a full document recalc. We also
+ // need to clear it here since the call to styleForElement on the body above
+ // can cache bad values for rem units if the documentElement's style was
+ // dirty. We could keep track of which elements depend on rem units like we do
+ // for viewport styles, but we assume root font size changes are rare and just
+ // invalidate the cache for now.
if (styleEngine().usesRemUnits() &&
(documentElement()->needsAttach() ||
!documentElement()->computedStyle() ||
@@ -1664,15 +1689,17 @@ void Document::inheritHtmlAndBodyElementStyles(StyleRecalcChange change) {
overflowAnchor = overflowStyle->overflowAnchor();
overflowX = overflowStyle->overflowX();
overflowY = overflowStyle->overflowY();
- // Visible overflow on the viewport is meaningless, and the spec says to treat it as 'auto':
+ // Visible overflow on the viewport is meaningless, and the spec says to
+ // treat it as 'auto':
if (overflowX == OverflowVisible)
overflowX = OverflowAuto;
if (overflowY == OverflowVisible)
overflowY = OverflowAuto;
if (overflowAnchor == AnchorVisible)
overflowAnchor = AnchorAuto;
- // Column-gap is (ab)used by the current paged overflow implementation (in lack of other
- // ways to specify gaps between pages), so we have to propagate it too.
+ // Column-gap is (ab)used by the current paged overflow implementation (in
+ // lack of other ways to specify gaps between pages), so we have to
+ // propagate it too.
columnGap = overflowStyle->columnGap();
}
@@ -1753,9 +1780,10 @@ void Document::updateStyleAndLayoutTree() {
DCHECK(isMainThread());
ScriptForbiddenScope forbidScript;
- // We should forbid script execution for plugins here because update while layout is changing,
- // HTMLPlugin element can be reattached and plugin can be destroyed. Plugin can execute scripts
- // on destroy. It produces crash without PluginScriptForbiddenScope: crbug.com/550427.
+ // We should forbid script execution for plugins here because update while
+ // layout is changing, HTMLPlugin element can be reattached and plugin can be
+ // destroyed. Plugin can execute scripts on destroy. It produces crash without
+ // PluginScriptForbiddenScope: crbug.com/550427.
PluginScriptForbiddenScope pluginForbidScript;
if (!view() || !isActive())
@@ -1766,9 +1794,10 @@ void Document::updateStyleAndLayoutTree() {
if (!needsLayoutTreeUpdate()) {
if (lifecycle().state() < DocumentLifecycle::StyleClean) {
- // needsLayoutTreeUpdate may change to false without any actual layout tree update.
- // For example, needsAnimationTimingUpdate may change to false when time elapses.
- // Advance lifecycle to StyleClean because style is actually clean now.
+ // needsLayoutTreeUpdate may change to false without any actual layout
+ // tree update. For example, needsAnimationTimingUpdate may change to
+ // false when time elapses. Advance lifecycle to StyleClean because style
+ // is actually clean now.
lifecycle().advanceTo(DocumentLifecycle::InStyleRecalc);
lifecycle().advanceTo(DocumentLifecycle::StyleClean);
}
@@ -1778,9 +1807,10 @@ void Document::updateStyleAndLayoutTree() {
if (inStyleRecalc())
return;
- // Entering here from inside layout, paint etc. would be catastrophic since recalcStyle can
- // tear down the layout tree or (unfortunately) run script. Kill the whole layoutObject if
- // someone managed to get into here in states not allowing tree mutations.
+ // Entering here from inside layout, paint etc. would be catastrophic since
+ // recalcStyle can tear down the layout tree or (unfortunately) run
+ // script. Kill the whole layoutObject if someone managed to get into here in
+ // states not allowing tree mutations.
RELEASE_ASSERT(lifecycle().stateAllowsTreeMutations());
TRACE_EVENT_BEGIN1("blink,devtools.timeline", "UpdateLayoutTree", "beginData",
@@ -1798,19 +1828,23 @@ void Document::updateStyleAndLayoutTree() {
updateStyleInvalidationIfNeeded();
// FIXME: We should update style on our ancestor chain before proceeding
- // however doing so currently causes several tests to crash, as LocalFrame::setDocument calls Document::attach
- // before setting the LocalDOMWindow on the LocalFrame, or the SecurityOrigin on the document. The attach, in turn
- // resolves style (here) and then when we resolve style on the parent chain, we may end up
- // re-attaching our containing iframe, which when asked HTMLFrameElementBase::isURLAllowed
- // hits a null-dereference due to security code always assuming the document has a SecurityOrigin.
+ // however doing so currently causes several tests to crash, as
+ // LocalFrame::setDocument calls Document::attach before setting the
+ // LocalDOMWindow on the LocalFrame, or the SecurityOrigin on the
+ // document. The attach, in turn resolves style (here) and then when we
+ // resolve style on the parent chain, we may end up re-attaching our
+ // containing iframe, which when asked HTMLFrameElementBase::isURLAllowed hits
+ // a null-dereference due to security code always assuming the document has a
+ // SecurityOrigin.
updateStyle();
notifyLayoutTreeOfSubtreeChanges();
- // As a result of the style recalculation, the currently hovered element might have been
- // detached (for example, by setting display:none in the :hover style), schedule another mouseMove event
- // to check if any other elements ended up under the mouse pointer due to re-layout.
+ // As a result of the style recalculation, the currently hovered element might
+ // have been detached (for example, by setting display:none in the :hover
+ // style), schedule another mouseMove event to check if any other elements
+ // ended up under the mouse pointer due to re-layout.
if (hoverNode() && !hoverNode()->layoutObject() && frame())
frame()->eventHandler().dispatchFakeMouseMoveEventSoon();
@@ -1848,10 +1882,11 @@ void Document::updateStyle() {
NthIndexCache nthIndexCache(*this);
- // FIXME: Cannot access the ensureStyleResolver() before calling styleForDocument below because
- // apparently the StyleResolver's constructor has side effects. We should fix it.
- // See printing/setPrinting.html, printing/width-overflow.html though they only fail on
- // mac when accessing the resolver by what appears to be a viewport size difference.
+ // FIXME: Cannot access the ensureStyleResolver() before calling
+ // styleForDocument below because apparently the StyleResolver's constructor
+ // has side effects. We should fix it. See printing/setPrinting.html,
+ // printing/width-overflow.html though they only fail on mac when accessing
+ // the resolver by what appears to be a viewport size difference.
if (change == Force) {
m_hasNodesWithPlaceholderStyle = false;
@@ -2034,22 +2069,24 @@ void Document::updateStyleAndLayoutTreeIgnorePendingStylesheets() {
StyleEngine::IgnoringPendingStylesheet ignoring(styleEngine());
if (styleEngine().hasPendingScriptBlockingSheets()) {
- // FIXME: We are willing to attempt to suppress painting with outdated style info only once.
- // Our assumption is that it would be dangerous to try to stop it a second time, after page
- // content has already been loaded and displayed with accurate style information. (Our
- // suppression involves blanking the whole page at the moment. If it were more refined, we
- // might be able to do something better.) It's worth noting though that this entire method
- // is a hack, since what we really want to do is suspend JS instead of doing a layout with
- // inaccurate information.
+ // FIXME: We are willing to attempt to suppress painting with outdated style
+ // info only once. Our assumption is that it would be dangerous to try to
+ // stop it a second time, after page content has already been loaded and
+ // displayed with accurate style information. (Our suppression involves
+ // blanking the whole page at the moment. If it were more refined, we might
+ // be able to do something better.) It's worth noting though that this
+ // entire method is a hack, since what we really want to do is suspend JS
+ // instead of doing a layout with inaccurate information.
HTMLElement* bodyElement = body();
if (bodyElement && !bodyElement->layoutObject() &&
m_pendingSheetLayout == NoLayoutWithPendingSheets) {
m_pendingSheetLayout = DidLayoutWithPendingSheets;
styleEngine().resolverChanged(FullStyleUpdate);
} else if (m_hasNodesWithPlaceholderStyle) {
- // If new nodes have been added or style recalc has been done with style sheets still
- // pending, some nodes may not have had their real style calculated yet. Normally this
- // gets cleaned when style sheets arrive but here we need up-to-date style immediately.
+ // If new nodes have been added or style recalc has been done with style
+ // sheets still pending, some nodes may not have had their real style
+ // calculated yet. Normally this gets cleaned when style sheets arrive
+ // but here we need up-to-date style immediately.
setNeedsStyleRecalc(SubtreeStyleChange,
StyleChangeReasonForTracing::create(
StyleChangeReason::CleanupPlaceholderStyles));
@@ -2120,7 +2157,8 @@ void Document::pageSizeAndMarginsInPixels(int pageIndex,
}
pageSize = DoubleSize(width, height);
- // The percentage is calculated with respect to the width even for margin top and bottom.
+ // The percentage is calculated with respect to the width even for margin top
+ // and bottom.
// http://www.w3.org/TR/CSS2/box.html#margin-properties
marginTop = style->marginTop().isAuto()
? marginTop
@@ -2213,7 +2251,8 @@ void Document::initialize() {
ContainerNode::attachLayoutTree();
- // The TextAutosizer can't update layout view info while the Document is detached, so update now in case anything changed.
+ // The TextAutosizer can't update layout view info while the Document is
+ // detached, so update now in case anything changed.
if (TextAutosizer* autosizer = textAutosizer())
autosizer->updatePageInfo();
@@ -2230,17 +2269,18 @@ void Document::shutdown() {
if (!isActive())
return;
- // Frame navigation can cause a new Document to be attached. Don't allow that, since that will
- // cause a situation where LocalFrame still has a Document attached after this finishes!
- // Normally, it shouldn't actually be possible to trigger navigation here. However, plugins
- // (see below) can cause lots of crazy things to happen, since plugin detach involves nested
- // message loops.
+ // Frame navigation can cause a new Document to be attached. Don't allow that,
+ // since that will cause a situation where LocalFrame still has a Document
+ // attached after this finishes! Normally, it shouldn't actually be possible
+ // to trigger navigation here. However, plugins (see below) can cause lots of
+ // crazy things to happen, since plugin detach involves nested message loops.
FrameNavigationDisabler navigationDisabler(*m_frame);
- // Defer widget updates to avoid plugins trying to run script inside ScriptForbiddenScope,
- // which will crash the renderer after https://crrev.com/200984
+ // Defer widget updates to avoid plugins trying to run script inside
+ // ScriptForbiddenScope, which will crash the renderer after
+ // https://crrev.com/200984
HTMLFrameOwnerElement::UpdateSuspendScope suspendWidgetHierarchyUpdates;
- // Don't allow script to run in the middle of detachLayoutTree() because a detaching Document is not in a
- // consistent state.
+ // Don't allow script to run in the middle of detachLayoutTree() because a
+ // detaching Document is not in a consistent state.
ScriptForbiddenScope forbidScript;
view()->dispose();
m_markers->prepareForDestruction();
@@ -2269,7 +2309,8 @@ void Document::shutdown() {
if (svgExtensions())
accessSVGExtensions().pauseAnimations();
- // FIXME: This shouldn't be needed once LocalDOMWindow becomes ExecutionContext.
+ // FIXME: This shouldn't be needed once LocalDOMWindow becomes
+ // ExecutionContext.
if (m_domWindow)
m_domWindow->clearEventQueue();
@@ -2351,11 +2392,11 @@ void Document::shutdown() {
// created by DOMImplementation::createDocument().
ExecutionContext::notifyContextDestroyed();
- // This is required, as our LocalFrame might delete itself as soon as it detaches
- // us. However, this violates Node::detachLayoutTree() semantics, as it's never
- // possible to re-attach. Eventually Document::detachLayoutTree() should be renamed,
- // or this setting of the frame to 0 could be made explicit in each of the
- // callers of Document::detachLayoutTree().
+ // This is required, as our LocalFrame might delete itself as soon as it
+ // detaches us. However, this violates Node::detachLayoutTree() semantics, as
+ // it's never possible to re-attach. Eventually Document::detachLayoutTree()
+ // should be renamed, or this setting of the frame to 0 could be made explicit
+ // in each of the callers of Document::detachLayoutTree().
m_frame = nullptr;
}
@@ -2401,9 +2442,10 @@ AXObjectCache* Document::axObjectCache() const {
return 0;
// The only document that actually has a AXObjectCache is the top-level
- // document. This is because we need to be able to get from any WebCoreAXObject
- // to any other WebCoreAXObject on the same page. Using a single cache allows
- // lookups across nested webareas (i.e. multiple documents).
+ // document. This is because we need to be able to get from any
+ // WebCoreAXObject to any other WebCoreAXObject on the same page. Using a
+ // single cache allows lookups across nested webareas (i.e. multiple
+ // documents).
Document& cacheOwner = this->axObjectCacheOwner();
// If the document has already been detached, do not make a new axObjectCache.
@@ -2627,10 +2669,11 @@ HTMLHeadElement* Document::head() const {
Element* Document::viewportDefiningElement(
const ComputedStyle* rootStyle) const {
- // If a BODY element sets non-visible overflow, it is to be propagated to the viewport, as long
- // as the following conditions are all met:
+ // If a BODY element sets non-visible overflow, it is to be propagated to the
+ // viewport, as long as the following conditions are all met:
// (1) The root element is HTML.
- // (2) It is the primary BODY element (we only assert for this, expecting callers to behave).
+ // (2) It is the primary BODY element (we only assert for this, expecting
+ // callers to behave).
// (3) The root element has visible overflow.
// Otherwise it's the root element's properties that are to be propagated.
Element* rootElement = documentElement();
@@ -2686,7 +2729,8 @@ void Document::close() {
if (!m_frame) {
// Because we have no frame, we don't know if all loading has completed,
// so we just call implicitClose() immediately. FIXME: This might fire
- // the load event prematurely <http://bugs.webkit.org/show_bug.cgi?id=14568>.
+ // the load event prematurely
+ // <http://bugs.webkit.org/show_bug.cgi?id=14568>.
implicitClose();
return;
}
@@ -2719,11 +2763,12 @@ void Document::implicitClose() {
HTMLStyleElement::dispatchPendingLoadEvents();
}
- // JS running below could remove the frame or destroy the LayoutView so we call
- // those two functions repeatedly and don't save them on the stack.
+ // JS running below could remove the frame or destroy the LayoutView so we
+ // call those two functions repeatedly and don't save them on the stack.
- // To align the HTML load event and the SVGLoad event for the outermost <svg> element, fire it from
- // here, instead of doing it from SVGElement::finishedParsingChildren.
+ // To align the HTML load event and the SVGLoad event for the outermost <svg>
+ // element, fire it from here, instead of doing it from
+ // SVGElement::finishedParsingChildren.
if (svgExtensions())
accessSVGExtensions().dispatchSVGLoadEventToOutermostSVGElements();
@@ -2746,14 +2791,16 @@ void Document::implicitClose() {
if (frame()->navigationScheduler().locationChangePending() &&
elapsedTime() < cLayoutScheduleThreshold) {
- // Just bail out. Before or during the onload we were shifted to another page.
- // The old i-Bench suite does this. When this happens don't bother painting or laying out.
+ // Just bail out. Before or during the onload we were shifted to another
+ // page. The old i-Bench suite does this. When this happens don't bother
+ // painting or laying out.
m_loadEventProgress = LoadEventCompleted;
return;
}
// We used to force a synchronous display and flush here. This really isn't
- // necessary and can in fact be actively harmful if pages are loading at a rate of > 60fps
+ // necessary and can in fact be actively harmful if pages are loading at a
+ // rate of > 60fps
// (if your platform is syncing flushes and limiting them to 60fps).
if (!localOwner() || (localOwner()->layoutObject() &&
!localOwner()->layoutObject()->needsLayout())) {
@@ -2873,7 +2920,8 @@ void Document::dispatchUnloadEvents() {
if (!m_frame)
return;
- // Don't remove event listeners from a transitional empty document (see https://bugs.webkit.org/show_bug.cgi?id=28716 for more information).
+ // Don't remove event listeners from a transitional empty document (see
+ // https://bugs.webkit.org/show_bug.cgi?id=28716 for more information).
bool keepEventListeners =
m_frame->loader().provisionalDocumentLoader() &&
m_frame->shouldReuseDefaultView(
@@ -3069,9 +3117,11 @@ KURL Document::validBaseElementURL() const {
void Document::updateBaseURL() {
KURL oldBaseURL = m_baseURL;
- // DOM 3 Core: When the Document supports the feature "HTML" [DOM Level 2 HTML], the base URI is computed using
- // first the value of the href attribute of the HTML BASE element if any, and the value of the documentURI attribute
- // from the Document interface otherwise (which we store, preparsed, in m_url).
+ // DOM 3 Core: When the Document supports the feature "HTML" [DOM Level 2
+ // HTML], the base URI is computed using first the value of the href attribute
+ // of the HTML BASE element if any, and the value of the documentURI attribute
+ // from the Document interface otherwise (which we store, preparsed, in
+ // m_url).
if (!m_baseElementURL.isEmpty())
m_baseURL = m_baseElementURL;
else if (!m_baseURLOverride.isEmpty())
@@ -3092,7 +3142,8 @@ void Document::updateBaseURL() {
if (!equalIgnoringFragmentIdentifier(oldBaseURL, m_baseURL)) {
// Base URL change changes any relative visited links.
- // FIXME: There are other URLs in the tree that would need to be re-evaluated on dynamic base URL change. Style should be invalidated too.
+ // FIXME: There are other URLs in the tree that would need to be
+ // re-evaluated on dynamic base URL change. Style should be invalidated too.
for (HTMLAnchorElement& anchor :
Traversal<HTMLAnchorElement>::startsAfter(*this))
anchor.invalidateCachedVisitedLinkHash();
@@ -3105,7 +3156,8 @@ void Document::setBaseURLOverride(const KURL& url) {
}
void Document::processBaseElement() {
- // Find the first href attribute in a base element and the first target attribute in a base element.
+ // Find the first href attribute in a base element and the first target
+ // attribute in a base element.
const AtomicString* href = 0;
const AtomicString* target = 0;
for (HTMLBaseElement* base = Traversal<HTMLBaseElement>::firstWithin(*this);
@@ -3126,7 +3178,8 @@ void Document::processBaseElement() {
UseCounter::ContentSecurityPolicyWithBaseElement);
}
- // FIXME: Since this doesn't share code with completeURL it may not handle encodings correctly.
+ // FIXME: Since this doesn't share code with completeURL it may not handle
+ // encodings correctly.
KURL baseElementURL;
if (href) {
String strippedHref = stripLeadingAndTrailingHTMLSpaces(*href);
@@ -3259,7 +3312,8 @@ void Document::setViewportDescription(
return;
m_viewportDescription = viewportDescription;
- // The UA-defined min-width is considered specifically by Android WebView quirks mode.
+ // The UA-defined min-width is considered specifically by Android WebView
+ // quirks mode.
if (!viewportDescription.isSpecifiedByAuthor())
m_viewportDefaultMinWidth = viewportDescription.minWidth;
}
@@ -3315,11 +3369,11 @@ MouseEventWithHitTestResults Document::prepareMouseEvent(
const PlatformMouseEvent& event) {
DCHECK(layoutViewItem().isNull() || layoutViewItem().isLayoutView());
- // LayoutView::hitTest causes a layout, and we don't want to hit that until the first
- // layout because until then, there is nothing shown on the screen - the user can't
- // have intentionally clicked on something belonging to this page. Furthermore,
- // mousemove events before the first layout should not lead to a premature layout()
- // happening, which could show a flash of white.
+ // LayoutView::hitTest causes a layout, and we don't want to hit that until
+ // the first layout because until then, there is nothing shown on the screen -
+ // the user can't have intentionally clicked on something belonging to this
+ // page. Furthermore, mousemove events before the first layout should not
+ // lead to a premature layout() happening, which could show a flash of white.
// See also the similar code in EventHandler::hitTestResultAtPoint.
if (layoutViewItem().isNull() || !view() || !view()->didFirstLayout())
return MouseEventWithHitTestResults(event,
@@ -3583,8 +3637,8 @@ void Document::styleResolverMayHaveChanged() {
if (didLayoutWithPendingStylesheets() &&
!styleEngine().hasPendingScriptBlockingSheets()) {
- // We need to manually repaint because we avoid doing all repaints in layout or style
- // recalc while sheets are still loading to avoid FOUC.
+ // We need to manually repaint because we avoid doing all repaints in layout
+ // or style recalc while sheets are still loading to avoid FOUC.
m_pendingSheetLayout = IgnoreLayoutWithPendingSheets;
DCHECK(!layoutViewItem().isNull() || importsController());
@@ -3697,7 +3751,8 @@ bool Document::setFocusedElement(Element* prpNewFocusedElement,
if (oldFocusedElement) {
oldFocusedElement->setFocus(false);
- // Dispatch the blur event and let the node do any other blur related activities (important for text fields)
+ // Dispatch the blur event and let the node do any other blur related
+ // activities (important for text fields)
// If page lost focus, blur event will have already been dispatched
if (page() && (page()->focusController().isFocused())) {
oldFocusedElement->dispatchBlurEvent(newFocusedElement, params.type,
@@ -3709,15 +3764,17 @@ bool Document::setFocusedElement(Element* prpNewFocusedElement,
newFocusedElement = nullptr;
}
- oldFocusedElement->dispatchFocusOutEvent(
- EventTypeNames::focusout, newFocusedElement,
- params
- .sourceCapabilities); // DOM level 3 name for the bubbling blur event.
- // FIXME: We should remove firing DOMFocusOutEvent event when we are sure no content depends
- // on it, probably when <rdar://problem/8503958> is resolved.
- oldFocusedElement->dispatchFocusOutEvent(
- EventTypeNames::DOMFocusOut, newFocusedElement,
- params.sourceCapabilities); // DOM level 2 name for compatibility.
+ // 'focusout' is a DOM level 3 name for the bubbling blur event.
+ oldFocusedElement->dispatchFocusOutEvent(EventTypeNames::focusout,
+ newFocusedElement,
+ params.sourceCapabilities);
+ // 'DOMFocusOut' is a DOM level 2 name for compatibility.
+ // FIXME: We should remove firing DOMFocusOutEvent event when we are sure
+ // no content depends on it, probably when <rdar://problem/8503958> is
+ // resolved.
+ oldFocusedElement->dispatchFocusOutEvent(EventTypeNames::DOMFocusOut,
+ newFocusedElement,
+ params.sourceCapabilities);
if (m_focusedElement) {
// handler shifted focus
@@ -3757,8 +3814,10 @@ bool Document::setFocusedElement(Element* prpNewFocusedElement,
cancelFocusAppearanceUpdate();
m_focusedElement->updateFocusAppearance(params.selectionBehavior);
- // Dispatch the focus event and let the node do any other focus related activities (important for text fields)
- // If page lost focus, event will be dispatched on page focus, don't duplicate
+ // Dispatch the focus event and let the node do any other focus related
+ // activities (important for text fields)
+ // If page lost focus, event will be dispatched on page focus, don't
+ // duplicate
if (page() && (page()->focusController().isFocused())) {
m_focusedElement->dispatchFocusEvent(oldFocusedElement, params.type,
params.sourceCapabilities);
@@ -3768,9 +3827,10 @@ bool Document::setFocusedElement(Element* prpNewFocusedElement,
focusChangeBlocked = true;
goto SetFocusedElementDone;
}
- m_focusedElement->dispatchFocusInEvent(
- EventTypeNames::focusin, oldFocusedElement, params.type,
- params.sourceCapabilities); // DOM level 3 bubbling focus event.
+ // DOM level 3 bubbling focus event.
+ m_focusedElement->dispatchFocusInEvent(EventTypeNames::focusin,
+ oldFocusedElement, params.type,
+ params.sourceCapabilities);
if (m_focusedElement != newFocusedElement) {
// handler shifted focus
@@ -3778,11 +3838,12 @@ bool Document::setFocusedElement(Element* prpNewFocusedElement,
goto SetFocusedElementDone;
}
- // FIXME: We should remove firing DOMFocusInEvent event when we are sure no content depends
- // on it, probably when <rdar://problem/8503958> is m.
- m_focusedElement->dispatchFocusInEvent(
- EventTypeNames::DOMFocusIn, oldFocusedElement, params.type,
- params.sourceCapabilities); // DOM level 2 for compatibility.
+ // For DOM level 2 compatibility.
+ // FIXME: We should remove firing DOMFocusInEvent event when we are sure
+ // no content depends on it, probably when <rdar://problem/8503958> is m.
+ m_focusedElement->dispatchFocusInEvent(EventTypeNames::DOMFocusIn,
+ oldFocusedElement, params.type,
+ params.sourceCapabilities);
if (m_focusedElement != newFocusedElement) {
// handler shifted focus
@@ -3814,7 +3875,8 @@ bool Document::setFocusedElement(Element* prpNewFocusedElement,
}
if (!focusChangeBlocked && m_focusedElement) {
- // Create the AXObject cache in a focus change because Chromium relies on it.
+ // Create the AXObject cache in a focus change because Chromium relies on
+ // it.
if (AXObjectCache* cache = axObjectCache())
cache->handleFocusedUIElementChanged(oldFocusedElement,
newFocusedElement);
@@ -3929,8 +3991,8 @@ void Document::attachNodeIterator(NodeIterator* ni) {
}
void Document::detachNodeIterator(NodeIterator* ni) {
- // The node iterator can be detached without having been attached if its root node didn't have a document
- // when the iterator was created, but has it now.
+ // The node iterator can be detached without having been attached if its root
+ // node didn't have a document when the iterator was created, but has it now.
m_nodeIterators.remove(ni);
}
@@ -4070,7 +4132,8 @@ void Document::enqueueUniqueAnimationFrameEvent(Event* event) {
}
void Document::enqueueScrollEventForNode(Node* target) {
- // Per the W3C CSSOM View Module only scroll events fired at the document should bubble.
+ // Per the W3C CSSOM View Module only scroll events fired at the document
+ // should bubble.
Event* scrollEvent = target->isDocumentNode()
? Event::createBubble(EventTypeNames::scroll)
: Event::create(EventTypeNames::scroll);
@@ -4192,7 +4255,8 @@ void Document::addListenerTypeIfNeeded(const AtomicString& eventType) {
HTMLFrameOwnerElement* Document::localOwner() const {
if (!frame())
return 0;
- // FIXME: This probably breaks the attempts to layout after a load is finished in implicitClose(), and probably tons of other things...
+ // FIXME: This probably breaks the attempts to layout after a load is finished
+ // in implicitClose(), and probably tons of other things...
return frame()->deprecatedLocalOwner();
}
@@ -4365,8 +4429,8 @@ const KURL Document::firstPartyForCookies() const {
if (!frame())
return SecurityOrigin::urlWithUniqueSecurityOrigin();
- // TODO(mkwst): This doesn't correctly handle sandboxed documents; we want to look at their URL,
- // but we can't because we don't know what it is.
+ // TODO(mkwst): This doesn't correctly handle sandboxed documents; we want to
+ // look at their URL, but we can't because we don't know what it is.
Frame* top = frame()->tree().top();
KURL topDocumentURL =
top->isLocalFrame()
@@ -4377,9 +4441,9 @@ const KURL Document::firstPartyForCookies() const {
topDocumentURL.protocol()))
return topDocumentURL;
- // We're intentionally using the URL of each document rather than the document's SecurityOrigin.
- // Sandboxing a document into a unique origin shouldn't effect first-/third-party status for
- // cookies and site data.
+ // We're intentionally using the URL of each document rather than the
+ // document's SecurityOrigin. Sandboxing a document into a unique origin
+ // shouldn't effect first-/third-party status for cookies and site data.
const OriginAccessEntry& accessEntry =
top->isLocalFrame()
? toLocalFrame(top)->document()->accessEntryFromURL()
@@ -4387,13 +4451,15 @@ const KURL Document::firstPartyForCookies() const {
OriginAccessEntry::AllowRegisterableDomains);
const Frame* currentFrame = frame();
while (currentFrame) {
- // Skip over srcdoc documents, as they are always same-origin with their closest non-srcdoc parent.
+ // Skip over srcdoc documents, as they are always same-origin with their
+ // closest non-srcdoc parent.
while (currentFrame->isLocalFrame() &&
toLocalFrame(currentFrame)->document()->isSrcdocDocument())
currentFrame = currentFrame->tree().parent();
DCHECK(currentFrame);
- // We use 'matchesDomain' here, as it turns out that some folks embed HTTPS login forms
+ // We use 'matchesDomain' here, as it turns out that some folks embed HTTPS
+ // login forms
// into HTTP pages; we should allow this kind of upgrade.
if (accessEntry.matchesDomain(
*currentFrame->securityContext()->getSecurityOrigin()) ==
@@ -4588,12 +4654,12 @@ bool Document::parseQualifiedName(const AtomicString& qualifiedName,
}
void Document::setEncodingData(const DocumentEncodingData& newData) {
- // It's possible for the encoding of the document to change while we're decoding
- // data. That can only occur while we're processing the <head> portion of the
- // document. There isn't much user-visible content in the <head>, but there is
- // the <title> element. This function detects that situation and re-decodes the
- // document's title so that the user doesn't see an incorrectly decoded title
- // in the title bar.
+ // It's possible for the encoding of the document to change while we're
+ // decoding data. That can only occur while we're processing the <head>
+ // portion of the document. There isn't much user-visible content in the
+ // <head>, but there is the <title> element. This function detects that
+ // situation and re-decodes the document's title so that the user doesn't see
+ // an incorrectly decoded title in the title bar.
if (m_titleElement && encoding() != newData.encoding() &&
!ElementTraversal::firstWithin(*m_titleElement) &&
encoding() == Latin1Encoding() &&
@@ -4608,7 +4674,8 @@ void Document::setEncodingData(const DocumentEncodingData& newData) {
DCHECK(newData.encoding().isValid());
m_encodingData = newData;
- // FIXME: Should be removed as part of https://code.google.com/p/chromium/issues/detail?id=319643
+ // FIXME: Should be removed as part of
+ // https://code.google.com/p/chromium/issues/detail?id=319643
bool shouldUseVisualOrdering = m_encodingData.encoding().usesVisualOrdering();
if (shouldUseVisualOrdering != m_visuallyOrdered) {
m_visuallyOrdered = shouldUseVisualOrdering;
@@ -4635,7 +4702,8 @@ KURL Document::completeURLWithOverride(const String& url,
// See also [CSS]StyleSheet::completeURL(const String&)
if (url.isNull())
return KURL();
- // This logic is deliberately spread over many statements in an attempt to track down http://crbug.com/312410.
+ // This logic is deliberately spread over many statements in an attempt to
+ // track down http://crbug.com/312410.
const KURL& baseURL = baseURLForOverride(baseURLOverride);
if (!encoding().isValid())
return KURL(baseURL, url);
@@ -4643,7 +4711,8 @@ KURL Document::completeURLWithOverride(const String& url,
}
const KURL& Document::baseURLForOverride(const KURL& baseURLOverride) const {
- // This logic is deliberately spread over many statements in an attempt to track down http://crbug.com/312410.
+ // This logic is deliberately spread over many statements in an attempt to
+ // track down http://crbug.com/312410.
const KURL* baseURLFromParent = 0;
bool shouldUseParentBaseURL = baseURLOverride.isEmpty();
if (!shouldUseParentBaseURL) {
@@ -4869,8 +4938,8 @@ Document* Document::parentDocument() const {
}
Document& Document::topDocument() const {
- // FIXME: Not clear what topDocument() should do in the OOPI case--should it return the topmost
- // available Document, or something else?
+ // FIXME: Not clear what topDocument() should do in the OOPI case--should it
+ // return the topmost available Document, or something else?
Document* doc = const_cast<Document*>(this);
for (HTMLFrameOwnerElement* element = doc->localOwner(); element;
element = doc->localOwner())
@@ -4984,8 +5053,8 @@ void Document::finishedParsing() {
setParsingState(InDOMContentLoaded);
DocumentParserTiming::from(*this).markParserStop();
- // FIXME: DOMContentLoaded is dispatched synchronously, but this should be dispatched in a queued task,
- // See https://crbug.com/425790
+ // FIXME: DOMContentLoaded is dispatched synchronously, but this should be
+ // dispatched in a queued task, see https://crbug.com/425790
if (!m_documentTiming.domContentLoadedEventStart())
m_documentTiming.markDomContentLoadedEventStart();
dispatchEvent(Event::createBubble(EventTypeNames::DOMContentLoaded));
@@ -4994,24 +5063,27 @@ void Document::finishedParsing() {
setParsingState(FinishedParsing);
// Ensure Custom Element callbacks are drained before DOMContentLoaded.
- // FIXME: Remove this ad-hoc checkpoint when DOMContentLoaded is dispatched in a
- // queued task, which will do a checkpoint anyway. https://crbug.com/425790
+ // FIXME: Remove this ad-hoc checkpoint when DOMContentLoaded is dispatched in
+ // a queued task, which will do a checkpoint anyway. https://crbug.com/425790
Microtask::performCheckpoint(V8PerIsolateData::mainThreadIsolate());
if (LocalFrame* frame = this->frame()) {
- // Don't update the layout tree if we haven't requested the main resource yet to avoid
- // adding extra latency. Note that the first layout tree update can be expensive since it
- // triggers the parsing of the default stylesheets which are compiled-in.
+ // Don't update the layout tree if we haven't requested the main resource
+ // yet to avoid adding extra latency. Note that the first layout tree update
+ // can be expensive since it triggers the parsing of the default stylesheets
+ // which are compiled-in.
const bool mainResourceWasAlreadyRequested =
frame->loader().stateMachine()->committedFirstRealDocumentLoad();
- // FrameLoader::finishedParsing() might end up calling Document::implicitClose() if all
- // resource loads are complete. HTMLObjectElements can start loading their resources from
- // post attach callbacks triggered by recalcStyle(). This means if we parse out an <object>
- // tag and then reach the end of the document without updating styles, we might not have yet
- // started the resource load and might fire the window load event too early. To avoid this
- // we force the styles to be up to date before calling FrameLoader::finishedParsing().
- // See https://bugs.webkit.org/show_bug.cgi?id=36864 starting around comment 35.
+ // FrameLoader::finishedParsing() might end up calling
+ // Document::implicitClose() if all resource loads are
+ // complete. HTMLObjectElements can start loading their resources from post
+ // attach callbacks triggered by recalcStyle(). This means if we parse out
+ // an <object> tag and then reach the end of the document without updating
+ // styles, we might not have yet started the resource load and might fire
+ // the window load event too early. To avoid this we force the styles to be
+ // up to date before calling FrameLoader::finishedParsing(). See
+ // https://bugs.webkit.org/show_bug.cgi?id=36864 starting around comment 35.
if (mainResourceWasAlreadyRequested)
updateStyleAndLayoutTree();
@@ -5025,10 +5097,12 @@ void Document::finishedParsing() {
InspectorInstrumentation::domContentLoadedEventFired(frame);
}
- // Schedule dropping of the ElementDataCache. We keep it alive for a while after parsing finishes
- // so that dynamically inserted content can also benefit from sharing optimizations.
- // Note that we don't refresh the timer on cache access since that could lead to huge caches being kept
- // alive indefinitely by something innocuous like JS setting .innerHTML repeatedly on a timer.
+ // Schedule dropping of the ElementDataCache. We keep it alive for a while
+ // after parsing finishes so that dynamically inserted content can also
+ // benefit from sharing optimizations. Note that we don't refresh the timer
+ // on cache access since that could lead to huge caches being kept alive
+ // indefinitely by something innocuous like JS setting .innerHTML repeatedly
+ // on a timer.
m_elementDataCacheClearTimer.startOneShot(10, BLINK_FROM_HERE);
// Parser should have picked up all preloads by now
@@ -5061,7 +5135,8 @@ Vector<IconURL> Document::iconURLs(int iconTypesMask) {
IconURL firstTouchPrecomposedIcon;
Vector<IconURL> secondaryIcons;
- // Start from the last child node so that icons seen later take precedence as required by the spec.
+ // Start from the last child node so that icons seen later take precedence as
+ // required by the spec.
for (HTMLLinkElement* linkElement =
head() ? Traversal<HTMLLinkElement>::firstChild(*head()) : 0;
linkElement;
@@ -5124,7 +5199,8 @@ HTMLLinkElement* Document::linkManifest() const {
if (!head)
return 0;
- // The first link element with a manifest rel must be used. Others are ignored.
+ // The first link element with a manifest rel must be used. Others are
+ // ignored.
for (HTMLLinkElement* linkElement =
Traversal<HTMLLinkElement>::firstChild(*head);
linkElement;
@@ -5214,10 +5290,11 @@ void Document::initSecurityContext(const DocumentInit& initializer) {
}
if (importsController()) {
- // If this document is an HTML import, grab a reference to it's master document's Content
- // Security Policy. We don't call 'initContentSecurityPolicy' in this case, as we can't
- // rebind the master document's policy object: its ExecutionContext needs to remain tied
- // to the master document.
+ // If this document is an HTML import, grab a reference to it's master
+ // document's Content Security Policy. We don't call
+ // 'initContentSecurityPolicy' in this case, as we can't rebind the master
+ // document's policy object: its ExecutionContext needs to remain tied to
+ // the master document.
setContentSecurityPolicy(
importsController()->master()->contentSecurityPolicy());
} else {
@@ -5229,15 +5306,18 @@ void Document::initSecurityContext(const DocumentInit& initializer) {
if (Settings* settings = initializer.settings()) {
if (!settings->webSecurityEnabled()) {
- // Web security is turned off. We should let this document access every other document. This is used primary by testing
- // harnesses for web sites.
+ // Web security is turned off. We should let this document access every
+ // other document. This is used primary by testing harnesses for web
+ // sites.
getSecurityOrigin()->grantUniversalAccess();
} else if (getSecurityOrigin()->isLocal()) {
if (settings->allowUniversalAccessFromFileURLs()) {
- // Some clients want local URLs to have universal access, but that setting is dangerous for other clients.
+ // Some clients want local URLs to have universal access, but that
+ // setting is dangerous for other clients.
getSecurityOrigin()->grantUniversalAccess();
} else if (!settings->allowFileAccessFromFileURLs()) {
- // Some clients do not want local URLs to have access to other local URLs.
+ // Some clients do not want local URLs to have access to other local
+ // URLs.
getSecurityOrigin()->blockLocalAccessFromLocalOrigin();
}
}
@@ -5288,10 +5368,12 @@ bool Document::allowInlineEventHandler(Node* node,
listener->code(), contextURL, contextLine))
return false;
- // HTML says that inline script needs browsing context to create its execution environment.
+ // HTML says that inline script needs browsing context to create its execution
+ // environment.
// http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#event-handler-attributes
- // Also, if the listening node came from other document, which happens on context-less event dispatching,
- // we also need to ask the owner document of the node.
+ // Also, if the listening node came from other document, which happens on
+ // context-less event dispatching, we also need to ask the owner document of
+ // the node.
LocalFrame* frame = executingFrame();
if (!frame)
return false;
@@ -5463,7 +5545,8 @@ void Document::addConsoleMessage(ConsoleMessage* consoleMessage) {
m_frame->console().addMessage(consoleMessage);
}
-// FIXME(crbug.com/305497): This should be removed after ExecutionContext-LocalDOMWindow migration.
+// FIXME(crbug.com/305497): This should be removed after
+// ExecutionContext-LocalDOMWindow migration.
void Document::postTask(const WebTraceLocation& location,
std::unique_ptr<ExecutionContextTask> task,
const String& taskNameForInstrumentation) {
@@ -5601,7 +5684,8 @@ void Document::loadEventDelayTimerFired(TimerBase*) {
}
void Document::loadPluginsSoon() {
- // FIXME: Remove this timer once we don't need to compute layout to load plugins.
+ // FIXME: Remove this timer once we don't need to compute layout to load
+ // plugins.
if (!m_pluginLoadingTimer.isActive())
m_pluginLoadingTimer.startOneShot(0, BLINK_FROM_HERE);
}
@@ -5613,7 +5697,8 @@ void Document::pluginLoadingTimerFired(TimerBase*) {
ScriptedAnimationController& Document::ensureScriptedAnimationController() {
if (!m_scriptedAnimationController) {
m_scriptedAnimationController = ScriptedAnimationController::create(this);
- // We need to make sure that we don't start up the animation controller on a background tab, for example.
+ // We need to make sure that we don't start up the animation controller on a
+ // background tab, for example.
if (!page())
m_scriptedAnimationController->suspend();
}
@@ -5665,7 +5750,8 @@ Touch* Document::createTouch(DOMWindow* window,
double radiusY,
float rotationAngle,
float force) const {
- // Match behavior from when these types were integers, and avoid surprises from someone explicitly
+ // Match behavior from when these types were integers, and avoid surprises
+ // from someone explicitly
// passing Infinity/NaN.
if (!std::isfinite(pageX))
pageX = 0;
@@ -5690,8 +5776,9 @@ Touch* Document::createTouch(DOMWindow* window,
// FIXME: It's not clear from the documentation at
// http://developer.apple.com/library/safari/#documentation/UserExperience/Reference/DocumentAdditionsReference/DocumentAdditions/DocumentAdditions.html
- // when this method should throw and nor is it by inspection of iOS behavior. It would be nice to verify any cases where it throws under iOS
- // and implement them here. See https://bugs.webkit.org/show_bug.cgi?id=47819
+ // when this method should throw and nor is it by inspection of iOS behavior.
+ // It would be nice to verify any cases where it throws under iOS and
+ // implement them here. See https://bugs.webkit.org/show_bug.cgi?id=47819
LocalFrame* frame = window && window->isLocalDOMWindow()
? blink::toLocalDOMWindow(window)->frame()
: this->frame();
@@ -5813,8 +5900,9 @@ void Document::updateHoverActiveState(const HitTestRequest& request,
updateDistribution();
Element* oldActiveElement = activeHoverElement();
if (oldActiveElement && !request.active()) {
- // The oldActiveElement layoutObject is null, dropped on :active by setting display: none,
- // for instance. We still need to clear the ActiveChain as the mouse is released.
+ // The oldActiveElement layoutObject is null, dropped on :active by setting
+ // display: none, for instance. We still need to clear the ActiveChain as
+ // the mouse is released.
for (Node* node = oldActiveElement; node;
node = FlatTreeTraversal::parent(*node)) {
DCHECK(!node->isTextNode());
@@ -5827,8 +5915,8 @@ void Document::updateHoverActiveState(const HitTestRequest& request,
if (!oldActiveElement && newActiveElement &&
!newActiveElement->isDisabledFormControl() && request.active() &&
!request.touchMove()) {
- // We are setting the :active chain and freezing it. If future moves happen, they
- // will need to reference this chain.
+ // We are setting the :active chain and freezing it. If future moves
+ // happen, they will need to reference this chain.
for (Node* node = newActiveElement; node;
node = FlatTreeTraversal::parent(*node)) {
DCHECK(!node->isTextNode());
@@ -5837,13 +5925,13 @@ void Document::updateHoverActiveState(const HitTestRequest& request,
setActiveHoverElement(newActiveElement);
}
}
- // If the mouse has just been pressed, set :active on the chain. Those (and only those)
- // nodes should remain :active until the mouse is released.
+ // If the mouse has just been pressed, set :active on the chain. Those (and
+ // only those) nodes should remain :active until the mouse is released.
bool allowActiveChanges = !oldActiveElement && activeHoverElement();
- // If the mouse is down and if this is a mouse move event, we want to restrict changes in
- // :hover/:active to only apply to elements that are in the :active chain that we froze
- // at the time the mouse went down.
+ // If the mouse is down and if this is a mouse move event, we want to restrict
+ // changes in :hover/:active to only apply to elements that are in the :active
+ // chain that we froze at the time the mouse went down.
bool mustBeInActiveChain = request.active() && request.move();
Node* oldHoverNode = hoverNode();
@@ -5871,9 +5959,11 @@ void Document::updateHoverActiveState(const HitTestRequest& request,
HeapVector<Member<Node>, 32> nodesToAddToChain;
if (oldHoverObj != newHoverObj) {
- // If the old hovered node is not nil but it's layoutObject is, it was probably detached as part of the :hover style
- // (for instance by setting display:none in the :hover pseudo-class). In this case, the old hovered element (and its ancestors)
- // must be updated, to ensure it's normal style is re-applied.
+ // If the old hovered node is not nil but it's layoutObject is, it was
+ // probably detached as part of the :hover style (for instance by setting
+ // display:none in the :hover pseudo-class). In this case, the old hovered
+ // element (and its ancestors) must be updated, to ensure it's normal style
+ // is re-applied.
if (oldHoverNode && !oldHoverObj) {
for (Node& node : NodeTraversal::inclusiveAncestorsOf(*oldHoverNode)) {
if (!mustBeInActiveChain ||
@@ -5882,7 +5972,8 @@ void Document::updateHoverActiveState(const HitTestRequest& request,
}
}
- // The old hover path only needs to be cleared up to (and not including) the common ancestor;
+ // The old hover path only needs to be cleared up to (and not including) the
+ // common ancestor;
for (LayoutObject* curr = oldHoverObj; curr && curr != ancestor;
curr = curr->hoverAncestor()) {
if (curr->node() && !curr->isText() &&
@@ -5890,7 +5981,8 @@ void Document::updateHoverActiveState(const HitTestRequest& request,
nodesToRemoveFromChain.append(curr->node());
}
- // TODO(mustaq): The two loops above may push a single node twice into nodesToRemoveFromChain. There must be a better way.
+ // TODO(mustaq): The two loops above may push a single node twice into
+ // nodesToRemoveFromChain. There must be a better way.
}
// Now set the hover state for our new object up to the root.
@@ -5908,7 +6000,8 @@ void Document::updateHoverActiveState(const HitTestRequest& request,
bool sawCommonAncestor = false;
size_t addCount = nodesToAddToChain.size();
for (size_t i = 0; i < addCount; ++i) {
- // Elements past the common ancestor do not change hover state, but might change active state.
+ // Elements past the common ancestor do not change hover state, but might
+ // change active state.
if (ancestorNode && nodesToAddToChain[i] == ancestorNode)
sawCommonAncestor = true;
if (allowActiveChanges)
@@ -6069,7 +6162,8 @@ v8::Local<v8::Object> Document::wrap(v8::Isolate* isolate,
const WrapperTypeInfo* wrapperType = wrapperTypeInfo();
if (frame() && frame()->script().initializeMainWorld()) {
- // initializeMainWorld may have created a wrapper for the object, retry from the start.
+ // initializeMainWorld may have created a wrapper for the object, retry from
+ // the start.
v8::Local<v8::Object> wrapper = DOMDataStore::getWrapper(this, isolate);
if (!wrapper.IsEmpty())
return wrapper;
« no previous file with comments | « third_party/WebKit/Source/core/dom/Document.h ('k') | third_party/WebKit/Source/core/dom/DocumentInit.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698