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

Side by Side Diff: Source/core/events/EventPath.cpp

Issue 406213002: If the media controls are visible they should always grab clicks (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Test added - now looking for LGTM or detailed comments. 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google 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 are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Neither the name of Google Inc. nor the names of its 10 * * Neither the name of Google Inc. nor the names of its
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 return referenceNode->parentNode(); 51 return referenceNode->parentNode();
52 52
53 return referenceNode; 53 return referenceNode;
54 } 54 }
55 55
56 static inline bool inTheSameScope(ShadowRoot* shadowRoot, EventTarget* target) 56 static inline bool inTheSameScope(ShadowRoot* shadowRoot, EventTarget* target)
57 { 57 {
58 return target->toNode() && target->toNode()->treeScope().rootNode() == shado wRoot; 58 return target->toNode() && target->toNode()->treeScope().rootNode() == shado wRoot;
59 } 59 }
60 60
61 static inline EventDispatchBehavior determineDispatchBehavior(Event* event, Shad owRoot* shadowRoot, EventTarget* target) 61 static inline EventDispatchBehavior determineDispatchBehavior(Event* event, Node * current, EventTarget* target)
62 { 62 {
63 ShadowRoot* shadowRoot = current->containingShadowRoot();
64 if (!shadowRoot)
65 return RetargetEvent;
63 // WebKit never allowed selectstart event to cross the the shadow DOM bounda ry. 66 // WebKit never allowed selectstart event to cross the the shadow DOM bounda ry.
64 // Changing this breaks existing sites. 67 // Changing this breaks existing sites.
65 // See https://bugs.webkit.org/show_bug.cgi?id=52195 for details. 68 // See https://bugs.webkit.org/show_bug.cgi?id=52195 for details.
66 const AtomicString eventType = event->type(); 69 const AtomicString eventType = event->type();
67 if (inTheSameScope(shadowRoot, target) 70 if (inTheSameScope(shadowRoot, target)
68 && (eventType == EventTypeNames::abort 71 && (eventType == EventTypeNames::abort
69 || eventType == EventTypeNames::change 72 || eventType == EventTypeNames::change
70 || eventType == EventTypeNames::error 73 || eventType == EventTypeNames::error
71 || eventType == EventTypeNames::load 74 || eventType == EventTypeNames::load
72 || eventType == EventTypeNames::reset 75 || eventType == EventTypeNames::reset
73 || eventType == EventTypeNames::resize 76 || eventType == EventTypeNames::resize
74 || eventType == EventTypeNames::scroll 77 || eventType == EventTypeNames::scroll
75 || eventType == EventTypeNames::select 78 || eventType == EventTypeNames::select
76 || eventType == EventTypeNames::selectstart)) 79 || eventType == EventTypeNames::selectstart))
77 return StayInsideShadowDOM; 80 return StayInsideShadowDOM;
78 81
82 if (current->keepEventInShadowDOM(event))
83 return StayInsideShadowDOM;
84
79 return RetargetEvent; 85 return RetargetEvent;
80 } 86 }
81 87
82 EventPath::EventPath(Event* event) 88 EventPath::EventPath(Event* event)
83 : m_node(nullptr) 89 : m_node(nullptr)
84 , m_event(event) 90 , m_event(event)
85 { 91 {
86 } 92 }
87 93
88 EventPath::EventPath(Node* node) 94 EventPath::EventPath(Node* node)
(...skipping 22 matching lines...) Expand all
111 void EventPath::calculatePath() 117 void EventPath::calculatePath()
112 { 118 {
113 ASSERT(m_node); 119 ASSERT(m_node);
114 ASSERT(m_nodeEventContexts.isEmpty()); 120 ASSERT(m_nodeEventContexts.isEmpty());
115 m_node->document().updateDistributionForNodeIfNeeded(const_cast<Node*>(m_nod e.get())); 121 m_node->document().updateDistributionForNodeIfNeeded(const_cast<Node*>(m_nod e.get()));
116 122
117 Node* current = m_node; 123 Node* current = m_node;
118 addNodeEventContext(current); 124 addNodeEventContext(current);
119 if (!m_node->inDocument()) 125 if (!m_node->inDocument())
120 return; 126 return;
127 bool stopAtShadowRoot = false;
121 while (current) { 128 while (current) {
122 if (current->isShadowRoot() && m_event && determineDispatchBehavior(m_ev ent, toShadowRoot(current), m_node) == StayInsideShadowDOM) 129 if (m_event && determineDispatchBehavior(m_event, current, m_node) == St ayInsideShadowDOM)
hayato 2014/07/30 03:19:11 After the patch, determineDispatchBehavior will be
aberent 2014/07/31 10:52:47 See discussion on main review thread.
130 stopAtShadowRoot = true;
131 if (current->isShadowRoot() && stopAtShadowRoot)
123 break; 132 break;
124 WillBeHeapVector<RawPtrWillBeMember<InsertionPoint>, 8> insertionPoints; 133 WillBeHeapVector<RawPtrWillBeMember<InsertionPoint>, 8> insertionPoints;
125 collectDestinationInsertionPoints(*current, insertionPoints); 134 collectDestinationInsertionPoints(*current, insertionPoints);
126 if (!insertionPoints.isEmpty()) { 135 if (!insertionPoints.isEmpty()) {
127 for (size_t i = 0; i < insertionPoints.size(); ++i) { 136 for (size_t i = 0; i < insertionPoints.size(); ++i) {
128 InsertionPoint* insertionPoint = insertionPoints[i]; 137 InsertionPoint* insertionPoint = insertionPoints[i];
129 if (insertionPoint->isShadowInsertionPoint()) { 138 if (insertionPoint->isShadowInsertionPoint()) {
130 ShadowRoot* containingShadowRoot = insertionPoint->containin gShadowRoot(); 139 ShadowRoot* containingShadowRoot = insertionPoint->containin gShadowRoot();
131 ASSERT(containingShadowRoot); 140 ASSERT(containingShadowRoot);
132 if (!containingShadowRoot->isOldest()) 141 if (!containingShadowRoot->isOldest())
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 357
349 void EventPath::trace(Visitor* visitor) 358 void EventPath::trace(Visitor* visitor)
350 { 359 {
351 visitor->trace(m_nodeEventContexts); 360 visitor->trace(m_nodeEventContexts);
352 visitor->trace(m_node); 361 visitor->trace(m_node);
353 visitor->trace(m_event); 362 visitor->trace(m_event);
354 visitor->trace(m_treeScopeEventContexts); 363 visitor->trace(m_treeScopeEventContexts);
355 } 364 }
356 365
357 } // namespace 366 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698