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

Side by Side Diff: Source/core/dom/Document.cpp

Issue 889563002: Make RenderObject::style() return a const object (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Updated change after Doug's review. Created 5 years, 10 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « Source/core/dom/Document.h ('k') | Source/core/dom/Element.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org) 5 * (C) 2006 Alexey Proskuryakov (ap@webkit.org)
6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved. 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All r ights reserved.
7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 7 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. 8 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved.
9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 9 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. 10 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved.
(...skipping 1610 matching lines...) Expand 10 before | Expand all | Expand 10 after
1621 FontBuilder fontBuilder(*this); 1621 FontBuilder fontBuilder(*this);
1622 RefPtrWillBeRawPtr<CSSFontSelector> selector = m_styleEngine->fontSelector() ; 1622 RefPtrWillBeRawPtr<CSSFontSelector> selector = m_styleEngine->fontSelector() ;
1623 fontBuilder.createFontForDocument(selector, documentStyle); 1623 fontBuilder.createFontForDocument(selector, documentStyle);
1624 } 1624 }
1625 1625
1626 void Document::inheritHtmlAndBodyElementStyles(StyleRecalcChange change) 1626 void Document::inheritHtmlAndBodyElementStyles(StyleRecalcChange change)
1627 { 1627 {
1628 ASSERT(inStyleRecalc()); 1628 ASSERT(inStyleRecalc());
1629 ASSERT(documentElement()); 1629 ASSERT(documentElement());
1630 1630
1631 RefPtr<LayoutStyle> documentElementStyle = documentElement()->layoutStyle(); 1631 RefPtr<LayoutStyle> documentElementStyle = documentElement()->mutableLayoutS tyle();
1632 if (!documentElementStyle || documentElement()->needsStyleRecalc() || change == Force) 1632 if (!documentElementStyle || documentElement()->needsStyleRecalc() || change == Force)
1633 documentElementStyle = ensureStyleResolver().styleForElement(documentEle ment()); 1633 documentElementStyle = ensureStyleResolver().styleForElement(documentEle ment());
1634 1634
1635 WritingMode rootWritingMode = documentElementStyle->writingMode(); 1635 WritingMode rootWritingMode = documentElementStyle->writingMode();
1636 TextDirection rootDirection = documentElementStyle->direction(); 1636 TextDirection rootDirection = documentElementStyle->direction();
1637 1637
1638 HTMLElement* body = this->body(); 1638 HTMLElement* body = this->body();
1639 RefPtr<LayoutStyle> bodyStyle; 1639 RefPtr<LayoutStyle> bodyStyle;
1640 if (body) { 1640 if (body) {
1641 bodyStyle = body->layoutStyle(); 1641 bodyStyle = body->mutableLayoutStyle();
1642 if (!bodyStyle || body->needsStyleRecalc() || documentElement()->needsSt yleRecalc() || change == Force) 1642 if (!bodyStyle || body->needsStyleRecalc() || documentElement()->needsSt yleRecalc() || change == Force)
1643 bodyStyle = ensureStyleResolver().styleForElement(body, documentElem entStyle.get()); 1643 bodyStyle = ensureStyleResolver().styleForElement(body, documentElem entStyle.get());
1644 rootWritingMode = bodyStyle->writingMode(); 1644 rootWritingMode = bodyStyle->writingMode();
1645 rootDirection = bodyStyle->direction(); 1645 rootDirection = bodyStyle->direction();
1646 } 1646 }
1647 1647
1648 RefPtr<LayoutStyle> overflowStyle; 1648 RefPtr<LayoutStyle> overflowStyle;
1649 if (Element* element = viewportDefiningElement(documentElementStyle.get())) { 1649 if (Element* element = viewportDefiningElement(documentElementStyle.get())) {
1650 if (element == body) { 1650 if (element == body) {
1651 overflowStyle = bodyStyle; 1651 overflowStyle = bodyStyle;
(...skipping 26 matching lines...) Expand all
1678 overflowX = OAUTO; 1678 overflowX = OAUTO;
1679 if (overflowY == OVISIBLE) 1679 if (overflowY == OVISIBLE)
1680 overflowY = OAUTO; 1680 overflowY = OAUTO;
1681 // Column-gap is (ab)used by the current paged overflow implementation ( in lack of other 1681 // Column-gap is (ab)used by the current paged overflow implementation ( in lack of other
1682 // ways to specify gaps between pages), so we have to propagate it too. 1682 // ways to specify gaps between pages), so we have to propagate it too.
1683 columnGap = overflowStyle->columnGap(); 1683 columnGap = overflowStyle->columnGap();
1684 } 1684 }
1685 1685
1686 WebScrollBlocksOn scrollBlocksOn = documentElementStyle->scrollBlocksOn(); 1686 WebScrollBlocksOn scrollBlocksOn = documentElementStyle->scrollBlocksOn();
1687 1687
1688 RefPtr<LayoutStyle> documentStyle = renderView()->style(); 1688 RefPtr<LayoutStyle> documentStyle = renderView()->mutableStyle();
1689 if (documentStyle->writingMode() != rootWritingMode 1689 if (documentStyle->writingMode() != rootWritingMode
1690 || documentStyle->direction() != rootDirection 1690 || documentStyle->direction() != rootDirection
1691 || documentStyle->overflowX() != overflowX 1691 || documentStyle->overflowX() != overflowX
1692 || documentStyle->overflowY() != overflowY 1692 || documentStyle->overflowY() != overflowY
1693 || documentStyle->columnGap() != columnGap 1693 || documentStyle->columnGap() != columnGap
1694 || documentStyle->scrollBlocksOn() != scrollBlocksOn) { 1694 || documentStyle->scrollBlocksOn() != scrollBlocksOn) {
1695 RefPtr<LayoutStyle> newStyle = LayoutStyle::clone(*documentStyle); 1695 RefPtr<LayoutStyle> newStyle = LayoutStyle::clone(*documentStyle);
1696 newStyle->setWritingMode(rootWritingMode); 1696 newStyle->setWritingMode(rootWritingMode);
1697 newStyle->setDirection(rootDirection); 1697 newStyle->setDirection(rootDirection);
1698 newStyle->setColumnGap(columnGap); 1698 newStyle->setColumnGap(columnGap);
1699 newStyle->setOverflowX(overflowX); 1699 newStyle->setOverflowX(overflowX);
1700 newStyle->setOverflowY(overflowY); 1700 newStyle->setOverflowY(overflowY);
1701 newStyle->setScrollBlocksOn(scrollBlocksOn); 1701 newStyle->setScrollBlocksOn(scrollBlocksOn);
1702 renderView()->setStyle(newStyle); 1702 renderView()->setStyle(newStyle);
1703 setupFontBuilder(*newStyle); 1703 setupFontBuilder(*newStyle);
1704 } 1704 }
1705 1705
1706 if (body) { 1706 if (body) {
1707 if (LayoutStyle* style = body->layoutStyle()) { 1707 if (const LayoutStyle* style = body->layoutStyle()) {
1708 if (style->direction() != rootDirection || style->writingMode() != r ootWritingMode) 1708 if (style->direction() != rootDirection || style->writingMode() != r ootWritingMode)
1709 body->setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonF orTracing::create(StyleChangeReason::WritingModeChange)); 1709 body->setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonF orTracing::create(StyleChangeReason::WritingModeChange));
1710 } 1710 }
1711 } 1711 }
1712 1712
1713 if (LayoutStyle* style = documentElement()->layoutStyle()) { 1713 if (const LayoutStyle* style = documentElement()->layoutStyle()) {
1714 if (style->direction() != rootDirection || style->writingMode() != rootW ritingMode) 1714 if (style->direction() != rootDirection || style->writingMode() != rootW ritingMode)
1715 documentElement()->setNeedsStyleRecalc(SubtreeStyleChange, StyleChan geReasonForTracing::create(StyleChangeReason::WritingModeChange)); 1715 documentElement()->setNeedsStyleRecalc(SubtreeStyleChange, StyleChan geReasonForTracing::create(StyleChangeReason::WritingModeChange));
1716 } 1716 }
1717 } 1717 }
1718 1718
1719 void Document::updateRenderTree(StyleRecalcChange change) 1719 void Document::updateRenderTree(StyleRecalcChange change)
1720 { 1720 {
1721 ASSERT(isMainThread()); 1721 ASSERT(isMainThread());
1722 1722
1723 ScriptForbiddenScope forbidScript; 1723 ScriptForbiddenScope forbidScript;
(...skipping 677 matching lines...) Expand 10 before | Expand all | Expand 10 after
2401 2401
2402 HTMLHeadElement* Document::head() const 2402 HTMLHeadElement* Document::head() const
2403 { 2403 {
2404 Node* de = documentElement(); 2404 Node* de = documentElement();
2405 if (!de) 2405 if (!de)
2406 return 0; 2406 return 0;
2407 2407
2408 return Traversal<HTMLHeadElement>::firstChild(*de); 2408 return Traversal<HTMLHeadElement>::firstChild(*de);
2409 } 2409 }
2410 2410
2411 Element* Document::viewportDefiningElement(LayoutStyle* rootStyle) const 2411 Element* Document::viewportDefiningElement(const LayoutStyle* rootStyle) const
2412 { 2412 {
2413 // If a BODY element sets non-visible overflow, it is to be propagated to th e viewport, as long 2413 // If a BODY element sets non-visible overflow, it is to be propagated to th e viewport, as long
2414 // as the following conditions are all met: 2414 // as the following conditions are all met:
2415 // (1) The root element is HTML. 2415 // (1) The root element is HTML.
2416 // (2) It is the primary BODY element (we only assert for this, expecting ca llers to behave). 2416 // (2) It is the primary BODY element (we only assert for this, expecting ca llers to behave).
2417 // (3) The root element has visible overflow. 2417 // (3) The root element has visible overflow.
2418 // Otherwise it's the root element's properties that are to be propagated. 2418 // Otherwise it's the root element's properties that are to be propagated.
2419 Element* rootElement = documentElement(); 2419 Element* rootElement = documentElement();
2420 Element* bodyElement = body(); 2420 Element* bodyElement = body();
2421 if (!rootElement) 2421 if (!rootElement)
(...skipping 1775 matching lines...) Expand 10 before | Expand all | Expand 10 after
4197 } 4197 }
4198 4198
4199 m_encodingData = newData; 4199 m_encodingData = newData;
4200 4200
4201 // FIXME: Should be removed as part of https://code.google.com/p/chromium/is sues/detail?id=319643 4201 // FIXME: Should be removed as part of https://code.google.com/p/chromium/is sues/detail?id=319643
4202 bool shouldUseVisualOrdering = m_encodingData.encoding().usesVisualOrdering( ); 4202 bool shouldUseVisualOrdering = m_encodingData.encoding().usesVisualOrdering( );
4203 if (shouldUseVisualOrdering != m_visuallyOrdered) { 4203 if (shouldUseVisualOrdering != m_visuallyOrdered) {
4204 m_visuallyOrdered = shouldUseVisualOrdering; 4204 m_visuallyOrdered = shouldUseVisualOrdering;
4205 // FIXME: How is possible to not have a renderer here? 4205 // FIXME: How is possible to not have a renderer here?
4206 if (renderView()) 4206 if (renderView())
4207 renderView()->style()->setRTLOrdering(m_visuallyOrdered ? VisualOrde r : LogicalOrder); 4207 renderView()->mutableStyleRef().setRTLOrdering(m_visuallyOrdered ? V isualOrder : LogicalOrder);
4208 setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing::cre ate(StyleChangeReason::VisuallyOrdered)); 4208 setNeedsStyleRecalc(SubtreeStyleChange, StyleChangeReasonForTracing::cre ate(StyleChangeReason::VisuallyOrdered));
4209 } 4209 }
4210 } 4210 }
4211 4211
4212 KURL Document::completeURL(const String& url) const 4212 KURL Document::completeURL(const String& url) const
4213 { 4213 {
4214 return completeURLWithOverride(url, m_baseURL); 4214 return completeURLWithOverride(url, m_baseURL);
4215 } 4215 }
4216 4216
4217 KURL Document::completeURLWithOverride(const String& url, const KURL& baseURLOve rride) const 4217 KURL Document::completeURLWithOverride(const String& url, const KURL& baseURLOve rride) const
(...skipping 1523 matching lines...) Expand 10 before | Expand all | Expand 10 after
5741 #ifndef NDEBUG 5741 #ifndef NDEBUG
5742 using namespace blink; 5742 using namespace blink;
5743 void showLiveDocumentInstances() 5743 void showLiveDocumentInstances()
5744 { 5744 {
5745 WeakDocumentSet& set = liveDocumentSet(); 5745 WeakDocumentSet& set = liveDocumentSet();
5746 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); 5746 fprintf(stderr, "There are %u documents currently alive:\n", set.size());
5747 for (Document* document : set) 5747 for (Document* document : set)
5748 fprintf(stderr, "- Document %p URL: %s\n", document, document->url().str ing().utf8().data()); 5748 fprintf(stderr, "- Document %p URL: %s\n", document, document->url().str ing().utf8().data());
5749 } 5749 }
5750 #endif 5750 #endif
OLDNEW
« no previous file with comments | « Source/core/dom/Document.h ('k') | Source/core/dom/Element.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698