OLD | NEW |
---|---|
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "core/input/MouseEventManager.h" | 5 #include "core/input/MouseEventManager.h" |
6 | 6 |
7 #include "core/clipboard/DataObject.h" | 7 #include "core/clipboard/DataObject.h" |
8 #include "core/clipboard/DataTransfer.h" | 8 #include "core/clipboard/DataTransfer.h" |
9 #include "core/dom/Element.h" | 9 #include "core/dom/Element.h" |
10 #include "core/dom/ElementTraversal.h" | 10 #include "core/dom/ElementTraversal.h" |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
251 const bool should_dispatch_click_event = | 251 const bool should_dispatch_click_event = |
252 click_count_ > 0 && !context_menu_event && mev.InnerNode() && | 252 click_count_ > 0 && !context_menu_event && mev.InnerNode() && |
253 click_node_ && mev.InnerNode()->CanParticipateInFlatTree() && | 253 click_node_ && mev.InnerNode()->CanParticipateInFlatTree() && |
254 click_node_->CanParticipateInFlatTree() && | 254 click_node_->CanParticipateInFlatTree() && |
255 !(frame_->GetEventHandler() | 255 !(frame_->GetEventHandler() |
256 .GetSelectionController() | 256 .GetSelectionController() |
257 .HasExtendedSelection() && | 257 .HasExtendedSelection() && |
258 IsLinkSelection(mev)); | 258 IsLinkSelection(mev)); |
259 if (should_dispatch_click_event) { | 259 if (should_dispatch_click_event) { |
260 Node* click_target_node = nullptr; | 260 Node* click_target_node = nullptr; |
261 // Updates distribution because a 'mouseup' event listener can make the | 261 // A click event should be fired even when a text node has been removed in |
262 // tree dirty at dispatchMouseEvent() invocation above. | 262 // mouseup event. |
263 // Unless distribution is updated, commonAncestor would hit ASSERT. | 263 if ((mev.InnerNode()->IsTextNode() && click_node_->isConnected() && |
tkent
2017/04/11 04:16:14
I think this code has the following unexpected beh
tkent
2017/04/11 04:24:15
Maybe a logic would be:
Node* mouseup_node = mev.
| |
264 if (click_node_ == mev.InnerNode()) { | 264 !mev.InnerNode()->isConnected()) || |
kochi
2017/04/11 04:25:00
(I am not sure and just checking) - Isn't click_no
| |
265 click_node_ == mev.InnerNode()) { | |
kochi
2017/04/11 04:25:00
I'd guess "click_node_ == mev.InnerNode()" is the
| |
265 click_target_node = click_node_; | 266 click_target_node = click_node_; |
266 click_target_node->UpdateDistribution(); | |
267 } else if (click_node_->GetDocument() == mev.InnerNode()->GetDocument()) { | 267 } else if (click_node_->GetDocument() == mev.InnerNode()->GetDocument()) { |
268 // Updates distribution because a 'mouseup' event listener can make the | |
269 // tree dirty at dispatchMouseEvent() invocation above. | |
270 // Unless distribution is updated, commonAncestor would hit ASSERT. | |
268 click_node_->UpdateDistribution(); | 271 click_node_->UpdateDistribution(); |
269 mev.InnerNode()->UpdateDistribution(); | 272 mev.InnerNode()->UpdateDistribution(); |
270 click_target_node = mev.InnerNode()->CommonAncestor( | 273 click_target_node = mev.InnerNode()->CommonAncestor( |
271 *click_node_, EventHandlingUtil::ParentForClickEvent); | 274 *click_node_, EventHandlingUtil::ParentForClickEvent); |
272 } | 275 } |
273 if (click_target_node) { | 276 if (click_target_node) { |
274 click_event_result = DispatchMouseEvent( | 277 click_event_result = DispatchMouseEvent( |
275 click_target_node, | 278 click_target_node, |
276 !RuntimeEnabledFeatures::auxclickEnabled() || | 279 !RuntimeEnabledFeatures::auxclickEnabled() || |
277 (mev.Event().button == WebPointerProperties::Button::kLeft) | 280 (mev.Event().button == WebPointerProperties::Button::kLeft) |
(...skipping 761 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1039 | 1042 |
1040 void MouseEventManager::SetClickCount(int click_count) { | 1043 void MouseEventManager::SetClickCount(int click_count) { |
1041 click_count_ = click_count; | 1044 click_count_ = click_count; |
1042 } | 1045 } |
1043 | 1046 |
1044 bool MouseEventManager::MouseDownMayStartDrag() { | 1047 bool MouseEventManager::MouseDownMayStartDrag() { |
1045 return mouse_down_may_start_drag_; | 1048 return mouse_down_may_start_drag_; |
1046 } | 1049 } |
1047 | 1050 |
1048 } // namespace blink | 1051 } // namespace blink |
OLD | NEW |