Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 187 #include "core/loader/NavigationScheduler.h" | 187 #include "core/loader/NavigationScheduler.h" |
| 188 #include "core/loader/appcache/ApplicationCacheHost.h" | 188 #include "core/loader/appcache/ApplicationCacheHost.h" |
| 189 #include "core/origin_trials/DocumentOriginTrialContext.h" | 189 #include "core/origin_trials/DocumentOriginTrialContext.h" |
| 190 #include "core/page/ChromeClient.h" | 190 #include "core/page/ChromeClient.h" |
| 191 #include "core/page/EventWithHitTestResults.h" | 191 #include "core/page/EventWithHitTestResults.h" |
| 192 #include "core/page/FocusController.h" | 192 #include "core/page/FocusController.h" |
| 193 #include "core/page/FrameTree.h" | 193 #include "core/page/FrameTree.h" |
| 194 #include "core/page/Page.h" | 194 #include "core/page/Page.h" |
| 195 #include "core/page/PointerLockController.h" | 195 #include "core/page/PointerLockController.h" |
| 196 #include "core/page/scrolling/ScrollingCoordinator.h" | 196 #include "core/page/scrolling/ScrollingCoordinator.h" |
| 197 #include "core/page/scrolling/ViewportScrollCallback.h" | |
| 197 #include "core/svg/SVGDocumentExtensions.h" | 198 #include "core/svg/SVGDocumentExtensions.h" |
| 198 #include "core/svg/SVGTitleElement.h" | 199 #include "core/svg/SVGTitleElement.h" |
| 199 #include "core/svg/SVGUseElement.h" | 200 #include "core/svg/SVGUseElement.h" |
| 200 #include "core/timing/DOMWindowPerformance.h" | 201 #include "core/timing/DOMWindowPerformance.h" |
| 201 #include "core/timing/Performance.h" | 202 #include "core/timing/Performance.h" |
| 202 #include "core/workers/SharedWorkerRepositoryClient.h" | 203 #include "core/workers/SharedWorkerRepositoryClient.h" |
| 203 #include "core/xml/parser/XMLDocumentParser.h" | 204 #include "core/xml/parser/XMLDocumentParser.h" |
| 204 #include "platform/DateComponents.h" | 205 #include "platform/DateComponents.h" |
| 205 #include "platform/EventDispatchForbiddenScope.h" | 206 #include "platform/EventDispatchForbiddenScope.h" |
| 206 #include "platform/Histogram.h" | 207 #include "platform/Histogram.h" |
| (...skipping 487 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 694 | 695 |
| 695 return domWindow()->location(); | 696 return domWindow()->location(); |
| 696 } | 697 } |
| 697 | 698 |
| 698 void Document::childrenChanged(const ChildrenChange& change) | 699 void Document::childrenChanged(const ChildrenChange& change) |
| 699 { | 700 { |
| 700 ContainerNode::childrenChanged(change); | 701 ContainerNode::childrenChanged(change); |
| 701 m_documentElement = ElementTraversal::firstWithin(*this); | 702 m_documentElement = ElementTraversal::firstWithin(*this); |
| 702 } | 703 } |
| 703 | 704 |
| 705 void Document::updateViewportApplyScroll() | |
| 706 { | |
| 707 if (!m_documentElement | |
| 708 || !m_documentElement->isHTMLElement() | |
| 709 || ownerElement()) | |
| 710 return; | |
| 711 | |
| 712 Element* newScrollingElement = scrollingElement(); | |
| 713 | |
| 714 // If there is no scrolling element (in QuirksMode and body is scrollable), | |
| 715 // install the viewport scroll callback on the <HTML> element. | |
| 716 if (!newScrollingElement) | |
| 717 newScrollingElement = m_documentElement; | |
| 718 | |
| 719 if (newScrollingElement == m_oldScrollingElement) | |
| 720 return; | |
| 721 | |
| 722 ScrollStateCallback* applyScroll = nullptr; | |
| 723 | |
| 724 // If the scrolling element changed, remove the apply scroll from the | |
| 725 // old one and keep it to put on the new scrolling element. | |
| 726 if (m_oldScrollingElement) { | |
|
tdresser
2016/04/05 19:31:12
Ah, is this why we need m_oldScrollingElement to b
bokan
2016/04/06 15:21:01
Ah, TBH I did that out of habit and hadn't thought
bokan
2016/04/07 01:27:15
Ok, as far as I can tell there's no way to detach
| |
| 727 applyScroll = m_oldScrollingElement->getApplyScroll(); | |
| 728 m_oldScrollingElement->removeApplyScroll(); | |
| 729 } | |
| 730 | |
| 731 if (newScrollingElement) { | |
| 732 if (!applyScroll) | |
| 733 applyScroll = new ViewportScrollCallback(*this, *frameHost()); | |
|
tdresser
2016/04/05 19:31:12
This is going to end up looking pretty different o
bokan
2016/04/06 15:21:01
Acknowledged.
| |
| 734 | |
| 735 newScrollingElement->setApplyScroll( | |
| 736 applyScroll, | |
| 737 "disable-native-scroll"); | |
|
tdresser
2016/04/05 19:31:12
Add a comment indicating why we disable-native-scr
bokan
2016/04/06 15:21:01
Done.
| |
| 738 } | |
| 739 | |
| 740 m_oldScrollingElement = newScrollingElement; | |
| 741 } | |
| 742 | |
| 704 AtomicString Document::convertLocalName(const AtomicString& name) | 743 AtomicString Document::convertLocalName(const AtomicString& name) |
| 705 { | 744 { |
| 706 return isHTMLDocument() ? name.lower() : name; | 745 return isHTMLDocument() ? name.lower() : name; |
| 707 } | 746 } |
| 708 | 747 |
| 709 RawPtr<Element> Document::createElement(const AtomicString& name, ExceptionState & exceptionState) | 748 RawPtr<Element> Document::createElement(const AtomicString& name, ExceptionState & exceptionState) |
| 710 { | 749 { |
| 711 if (!isValidName(name)) { | 750 if (!isValidName(name)) { |
| 712 exceptionState.throwDOMException(InvalidCharacterError, "The tag name pr ovided ('" + name + "') is not a valid name."); | 751 exceptionState.throwDOMException(InvalidCharacterError, "The tag name pr ovided ('" + name + "') is not a valid name."); |
| 713 return nullptr; | 752 return nullptr; |
| (...skipping 1259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1973 | 2012 |
| 1974 if (frameView->needsLayout()) | 2013 if (frameView->needsLayout()) |
| 1975 frameView->layout(); | 2014 frameView->layout(); |
| 1976 | 2015 |
| 1977 if (lifecycle().state() < DocumentLifecycle::LayoutClean) | 2016 if (lifecycle().state() < DocumentLifecycle::LayoutClean) |
| 1978 lifecycle().advanceTo(DocumentLifecycle::LayoutClean); | 2017 lifecycle().advanceTo(DocumentLifecycle::LayoutClean); |
| 1979 } | 2018 } |
| 1980 | 2019 |
| 1981 void Document::layoutUpdated() | 2020 void Document::layoutUpdated() |
| 1982 { | 2021 { |
| 2022 updateViewportApplyScroll(); | |
|
bokan
2016/04/04 21:44:38
This is the wrong place for this. Because scrollin
| |
| 2023 | |
| 1983 // Plugins can run script inside layout which can detach the page. | 2024 // Plugins can run script inside layout which can detach the page. |
| 1984 // TODO(esprehn): Can this still happen now that all plugins are out of | 2025 // TODO(esprehn): Can this still happen now that all plugins are out of |
| 1985 // process? | 2026 // process? |
| 1986 if (frame() && frame()->page()) | 2027 if (frame() && frame()->page()) |
| 1987 frame()->page()->chromeClient().layoutUpdated(frame()); | 2028 frame()->page()->chromeClient().layoutUpdated(frame()); |
| 1988 | 2029 |
| 1989 markers().updateRenderedRectsForMarkers(); | 2030 markers().updateRenderedRectsForMarkers(); |
| 1990 | 2031 |
| 1991 // The layout system may perform layouts with pending stylesheets. When | 2032 // The layout system may perform layouts with pending stylesheets. When |
| 1992 // recording first layout time, we ignore these layouts, since painting is | 2033 // recording first layout time, we ignore these layouts, since painting is |
| (...skipping 3992 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5985 visitor->trace(m_styleEngine); | 6026 visitor->trace(m_styleEngine); |
| 5986 visitor->trace(m_formController); | 6027 visitor->trace(m_formController); |
| 5987 visitor->trace(m_visitedLinkState); | 6028 visitor->trace(m_visitedLinkState); |
| 5988 visitor->trace(m_frame); | 6029 visitor->trace(m_frame); |
| 5989 visitor->trace(m_domWindow); | 6030 visitor->trace(m_domWindow); |
| 5990 visitor->trace(m_fetcher); | 6031 visitor->trace(m_fetcher); |
| 5991 visitor->trace(m_parser); | 6032 visitor->trace(m_parser); |
| 5992 visitor->trace(m_contextFeatures); | 6033 visitor->trace(m_contextFeatures); |
| 5993 visitor->trace(m_styleSheetList); | 6034 visitor->trace(m_styleSheetList); |
| 5994 visitor->trace(m_documentTiming); | 6035 visitor->trace(m_documentTiming); |
| 6036 visitor->trace(m_oldScrollingElement); | |
| 5995 visitor->trace(m_mediaQueryMatcher); | 6037 visitor->trace(m_mediaQueryMatcher); |
| 5996 visitor->trace(m_scriptedAnimationController); | 6038 visitor->trace(m_scriptedAnimationController); |
| 5997 visitor->trace(m_scriptedIdleTaskController); | 6039 visitor->trace(m_scriptedIdleTaskController); |
| 5998 visitor->trace(m_taskRunner); | 6040 visitor->trace(m_taskRunner); |
| 5999 visitor->trace(m_textAutosizer); | 6041 visitor->trace(m_textAutosizer); |
| 6000 visitor->trace(m_registrationContext); | 6042 visitor->trace(m_registrationContext); |
| 6001 visitor->trace(m_customElementMicrotaskRunQueue); | 6043 visitor->trace(m_customElementMicrotaskRunQueue); |
| 6002 visitor->trace(m_elementDataCache); | 6044 visitor->trace(m_elementDataCache); |
| 6003 visitor->trace(m_associatedFormControls); | 6045 visitor->trace(m_associatedFormControls); |
| 6004 visitor->trace(m_useElementsNeedingUpdate); | 6046 visitor->trace(m_useElementsNeedingUpdate); |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 6030 #ifndef NDEBUG | 6072 #ifndef NDEBUG |
| 6031 using namespace blink; | 6073 using namespace blink; |
| 6032 void showLiveDocumentInstances() | 6074 void showLiveDocumentInstances() |
| 6033 { | 6075 { |
| 6034 Document::WeakDocumentSet& set = Document::liveDocumentSet(); | 6076 Document::WeakDocumentSet& set = Document::liveDocumentSet(); |
| 6035 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); | 6077 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); |
| 6036 for (Document* document : set) | 6078 for (Document* document : set) |
| 6037 fprintf(stderr, "- Document %p URL: %s\n", document, document->url().get String().utf8().data()); | 6079 fprintf(stderr, "- Document %p URL: %s\n", document, document->url().get String().utf8().data()); |
| 6038 } | 6080 } |
| 6039 #endif | 6081 #endif |
| OLD | NEW |