Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Apple Inc. All rights reserved. | 2 * Copyright (C) 2011 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 778 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 789 if (subFrame->isLocalFrame()) | 789 if (subFrame->isLocalFrame()) |
| 790 shouldHandleScrollGestureOnMainThreadRegion.unite(computeShouldHandl eScrollGestureOnMainThreadRegion(toLocalFrame(subFrame), offset)); | 790 shouldHandleScrollGestureOnMainThreadRegion.unite(computeShouldHandl eScrollGestureOnMainThreadRegion(toLocalFrame(subFrame), offset)); |
| 791 } | 791 } |
| 792 | 792 |
| 793 return shouldHandleScrollGestureOnMainThreadRegion; | 793 return shouldHandleScrollGestureOnMainThreadRegion; |
| 794 } | 794 } |
| 795 | 795 |
| 796 static void accumulateDocumentTouchEventTargetRects(LayerHitTestRects& rects, co nst Document* document) | 796 static void accumulateDocumentTouchEventTargetRects(LayerHitTestRects& rects, co nst Document* document) |
| 797 { | 797 { |
| 798 ASSERT(document); | 798 ASSERT(document); |
| 799 if (!document->touchEventTargets()) | 799 const EventTargetSet* targets = document->frameHost()->eventHandlerRegistry( ).eventHandlerTargets(EventHandlerRegistry::TouchEvent); |
| 800 if (!targets) | |
| 800 return; | 801 return; |
| 801 | 802 |
| 802 const TouchEventTargetSet* targets = document->touchEventTargets(); | 803 // If there's a handler on the window, document, html or body element (fairl y common in practice), |
| 803 | |
| 804 // If there's a handler on the document, html or body element (fairly common in practice), | |
| 805 // then we can quickly mark the entire document and skip looking at any othe r handlers. | 804 // then we can quickly mark the entire document and skip looking at any othe r handlers. |
| 806 // Note that technically a handler on the body doesn't cover the whole docum ent, but it's | 805 // Note that technically a handler on the body doesn't cover the whole docum ent, but it's |
| 807 // reasonable to be conservative and report the whole document anyway. | 806 // reasonable to be conservative and report the whole document anyway. |
| 808 // | 807 // |
| 809 // Fullscreen HTML5 video when OverlayFullscreenVideo is enabled is implemen ted by replacing the | 808 // Fullscreen HTML5 video when OverlayFullscreenVideo is enabled is implemen ted by replacing the |
| 810 // root cc::layer with the video layer so doing this optimization causes the compositor to think | 809 // root cc::layer with the video layer so doing this optimization causes the compositor to think |
| 811 // that there are no handlers, therefore skip it. | 810 // that there are no handlers, therefore skip it. |
| 812 if (!document->renderView()->compositor()->inOverlayFullscreenVideo()) { | 811 if (!document->renderView()->compositor()->inOverlayFullscreenVideo()) { |
| 813 for (TouchEventTargetSet::const_iterator iter = targets->begin(); iter ! = targets->end(); ++iter) { | 812 for (EventTargetSet::const_iterator iter = targets->begin(); iter != tar gets->end(); ++iter) { |
| 814 Node* target = iter->key; | 813 EventTarget* target = iter->key; |
| 815 if (target == document || target == document->documentElement() || t arget == document->body()) { | 814 Node* node = target->toNode(); |
| 815 if (target->toDOMWindow() || node == document || node == document->d ocumentElement() || node == document->body()) { | |
| 816 if (RenderView* rendererView = document->renderView()) { | 816 if (RenderView* rendererView = document->renderView()) { |
| 817 rendererView->computeLayerHitTestRects(rects); | 817 rendererView->computeLayerHitTestRects(rects); |
| 818 } | 818 } |
| 819 return; | 819 return; |
| 820 } | 820 } |
| 821 } | 821 } |
| 822 } | 822 } |
| 823 | 823 |
| 824 for (TouchEventTargetSet::const_iterator iter = targets->begin(); iter != ta rgets->end(); ++iter) { | 824 for (EventTargetSet::const_iterator iter = targets->begin(); iter != targets ->end(); ++iter) { |
| 825 const Node* target = iter->key; | 825 EventTarget* target = iter->key; |
| 826 if (!target->inDocument()) | 826 Node* node = target->toNode(); |
| 827 if (!node->inDocument()) | |
|
Rick Byers
2014/06/19 17:10:36
I'd also check for null node here. There are a LO
Sami
2014/06/27 17:58:51
Well spotted, I'll add a fail-safe.
| |
| 827 continue; | 828 continue; |
| 828 | 829 |
| 829 if (target->isDocumentNode() && target != document) { | 830 if (node->isDocumentNode() && node != document) { |
| 830 accumulateDocumentTouchEventTargetRects(rects, toDocument(target)); | 831 accumulateDocumentTouchEventTargetRects(rects, toDocument(node)); |
| 831 } else if (RenderObject* renderer = target->renderer()) { | 832 } else if (RenderObject* renderer = node->renderer()) { |
| 832 // If the set also contains one of our ancestor nodes then processin g | 833 // If the set also contains one of our ancestor nodes then processin g |
| 833 // this node would be redundant. | 834 // this node would be redundant. |
| 834 bool hasTouchEventTargetAncestor = false; | 835 bool hasTouchEventTargetAncestor = false; |
| 835 for (Node* ancestor = target->parentNode(); ancestor && !hasTouchEve ntTargetAncestor; ancestor = ancestor->parentNode()) { | 836 for (Node* ancestor = node->parentNode(); ancestor && !hasTouchEvent TargetAncestor; ancestor = ancestor->parentNode()) { |
| 836 if (targets->contains(ancestor)) | 837 if (targets->contains(ancestor)) |
| 837 hasTouchEventTargetAncestor = true; | 838 hasTouchEventTargetAncestor = true; |
| 838 } | 839 } |
| 839 if (!hasTouchEventTargetAncestor) { | 840 if (!hasTouchEventTargetAncestor) { |
| 840 // Walk up the tree to the outermost non-composited scrollable l ayer. | 841 // Walk up the tree to the outermost non-composited scrollable l ayer. |
| 841 RenderLayer* enclosingNonCompositedScrollLayer = 0; | 842 RenderLayer* enclosingNonCompositedScrollLayer = 0; |
| 842 for (RenderLayer* parent = renderer->enclosingLayer(); parent && parent->compositingState() == NotComposited; parent = parent->parent()) { | 843 for (RenderLayer* parent = renderer->enclosingLayer(); parent && parent->compositingState() == NotComposited; parent = parent->parent()) { |
| 843 if (parent->scrollsOverflow()) | 844 if (parent->scrollsOverflow()) |
| 844 enclosingNonCompositedScrollLayer = parent; | 845 enclosingNonCompositedScrollLayer = parent; |
| 845 } | 846 } |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 999 bool frameIsScrollable = frameView && frameView->isScrollable(); | 1000 bool frameIsScrollable = frameView && frameView->isScrollable(); |
| 1000 if (frameIsScrollable != m_wasFrameScrollable) | 1001 if (frameIsScrollable != m_wasFrameScrollable) |
| 1001 return true; | 1002 return true; |
| 1002 | 1003 |
| 1003 if (WebLayer* scrollLayer = frameView ? toWebLayer(frameView->layerForScroll ing()) : 0) | 1004 if (WebLayer* scrollLayer = frameView ? toWebLayer(frameView->layerForScroll ing()) : 0) |
| 1004 return blink::WebSize(frameView->contentsSize()) != scrollLayer->bounds( ); | 1005 return blink::WebSize(frameView->contentsSize()) != scrollLayer->bounds( ); |
| 1005 return false; | 1006 return false; |
| 1006 } | 1007 } |
| 1007 | 1008 |
| 1008 } // namespace WebCore | 1009 } // namespace WebCore |
| OLD | NEW |