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

Side by Side Diff: Source/core/page/scrolling/ScrollingCoordinator.cpp

Issue 225903009: Migrate touch events to EventHandlerRegistry (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fixed HTMLInputElement adding handler at document destruction and removed dead oilpan code. Created 6 years, 5 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
OLDNEW
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 761 matching lines...) Expand 10 before | Expand all | Expand 10 after
772 if (subFrame->isLocalFrame()) 772 if (subFrame->isLocalFrame())
773 shouldHandleScrollGestureOnMainThreadRegion.unite(computeShouldHandl eScrollGestureOnMainThreadRegion(toLocalFrame(subFrame), offset)); 773 shouldHandleScrollGestureOnMainThreadRegion.unite(computeShouldHandl eScrollGestureOnMainThreadRegion(toLocalFrame(subFrame), offset));
774 } 774 }
775 775
776 return shouldHandleScrollGestureOnMainThreadRegion; 776 return shouldHandleScrollGestureOnMainThreadRegion;
777 } 777 }
778 778
779 static void accumulateDocumentTouchEventTargetRects(LayerHitTestRects& rects, co nst Document* document) 779 static void accumulateDocumentTouchEventTargetRects(LayerHitTestRects& rects, co nst Document* document)
780 { 780 {
781 ASSERT(document); 781 ASSERT(document);
782 if (!document->touchEventTargets()) 782 const EventTargetSet* targets = document->frameHost()->eventHandlerRegistry( ).eventHandlerTargets(EventHandlerRegistry::TouchEvent);
783 if (!targets)
783 return; 784 return;
784 785
785 const TouchEventTargetSet* targets = document->touchEventTargets(); 786 // If there's a handler on the window, document, html or body element (fairl y common in practice),
786
787 // If there's a handler on the document, html or body element (fairly common in practice),
788 // then we can quickly mark the entire document and skip looking at any othe r handlers. 787 // then we can quickly mark the entire document and skip looking at any othe r handlers.
789 // Note that technically a handler on the body doesn't cover the whole docum ent, but it's 788 // Note that technically a handler on the body doesn't cover the whole docum ent, but it's
790 // reasonable to be conservative and report the whole document anyway. 789 // reasonable to be conservative and report the whole document anyway.
791 // 790 //
792 // Fullscreen HTML5 video when OverlayFullscreenVideo is enabled is implemen ted by replacing the 791 // Fullscreen HTML5 video when OverlayFullscreenVideo is enabled is implemen ted by replacing the
793 // root cc::layer with the video layer so doing this optimization causes the compositor to think 792 // root cc::layer with the video layer so doing this optimization causes the compositor to think
794 // that there are no handlers, therefore skip it. 793 // that there are no handlers, therefore skip it.
795 if (!document->renderView()->compositor()->inOverlayFullscreenVideo()) { 794 if (!document->renderView()->compositor()->inOverlayFullscreenVideo()) {
796 for (TouchEventTargetSet::const_iterator iter = targets->begin(); iter ! = targets->end(); ++iter) { 795 for (EventTargetSet::const_iterator iter = targets->begin(); iter != tar gets->end(); ++iter) {
797 Node* target = iter->key; 796 EventTarget* target = iter->key;
798 if (target == document || target == document->documentElement() || t arget == document->body()) { 797 Node* node = target->toNode();
798 if (target->toDOMWindow() || node == document || node == document->d ocumentElement() || node == document->body()) {
799 if (RenderView* rendererView = document->renderView()) { 799 if (RenderView* rendererView = document->renderView()) {
800 rendererView->computeLayerHitTestRects(rects); 800 rendererView->computeLayerHitTestRects(rects);
801 } 801 }
802 return; 802 return;
803 } 803 }
804 } 804 }
805 } 805 }
806 806
807 for (TouchEventTargetSet::const_iterator iter = targets->begin(); iter != ta rgets->end(); ++iter) { 807 for (EventTargetSet::const_iterator iter = targets->begin(); iter != targets ->end(); ++iter) {
808 const Node* target = iter->key; 808 EventTarget* target = iter->key;
809 if (!target->inDocument()) 809 Node* node = target->toNode();
810 if (!node || !node->inDocument())
810 continue; 811 continue;
811 812
812 if (target->isDocumentNode() && target != document) { 813 if (node->isDocumentNode() && node != document) {
813 accumulateDocumentTouchEventTargetRects(rects, toDocument(target)); 814 accumulateDocumentTouchEventTargetRects(rects, toDocument(node));
814 } else if (RenderObject* renderer = target->renderer()) { 815 } else if (RenderObject* renderer = node->renderer()) {
815 // If the set also contains one of our ancestor nodes then processin g 816 // If the set also contains one of our ancestor nodes then processin g
816 // this node would be redundant. 817 // this node would be redundant.
817 bool hasTouchEventTargetAncestor = false; 818 bool hasTouchEventTargetAncestor = false;
818 for (Node* ancestor = target->parentNode(); ancestor && !hasTouchEve ntTargetAncestor; ancestor = ancestor->parentNode()) { 819 for (Node* ancestor = node->parentNode(); ancestor && !hasTouchEvent TargetAncestor; ancestor = ancestor->parentNode()) {
819 if (targets->contains(ancestor)) 820 if (targets->contains(ancestor))
820 hasTouchEventTargetAncestor = true; 821 hasTouchEventTargetAncestor = true;
821 } 822 }
822 if (!hasTouchEventTargetAncestor) { 823 if (!hasTouchEventTargetAncestor) {
823 // Walk up the tree to the outermost non-composited scrollable l ayer. 824 // Walk up the tree to the outermost non-composited scrollable l ayer.
824 RenderLayer* enclosingNonCompositedScrollLayer = 0; 825 RenderLayer* enclosingNonCompositedScrollLayer = 0;
825 for (RenderLayer* parent = renderer->enclosingLayer(); parent && parent->compositingState() == NotComposited; parent = parent->parent()) { 826 for (RenderLayer* parent = renderer->enclosingLayer(); parent && parent->compositingState() == NotComposited; parent = parent->parent()) {
826 if (parent->scrollsOverflow()) 827 if (parent->scrollsOverflow())
827 enclosingNonCompositedScrollLayer = parent; 828 enclosingNonCompositedScrollLayer = parent;
828 } 829 }
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
982 bool frameIsScrollable = frameView && frameView->isScrollable(); 983 bool frameIsScrollable = frameView && frameView->isScrollable();
983 if (frameIsScrollable != m_wasFrameScrollable) 984 if (frameIsScrollable != m_wasFrameScrollable)
984 return true; 985 return true;
985 986
986 if (WebLayer* scrollLayer = frameView ? toWebLayer(frameView->layerForScroll ing()) : 0) 987 if (WebLayer* scrollLayer = frameView ? toWebLayer(frameView->layerForScroll ing()) : 0)
987 return blink::WebSize(frameView->contentsSize()) != scrollLayer->bounds( ); 988 return blink::WebSize(frameView->contentsSize()) != scrollLayer->bounds( );
988 return false; 989 return false;
989 } 990 }
990 991
991 } // namespace WebCore 992 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698