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

Side by Side Diff: third_party/WebKit/Source/core/dom/Document.cpp

Issue 2821303005: [selectors4] Use common ancestor strategy for :focus-within (Closed)
Patch Set: Created 3 years, 8 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) 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 6 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2011, 2012 Apple Inc. All
7 * rights reserved. 7 * rights reserved.
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved.
9 * (http://www.torchmobile.com/) 9 * (http://www.torchmobile.com/)
10 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved. 10 * Copyright (C) 2008, 2009, 2011, 2012 Google Inc. All rights reserved.
(...skipping 4036 matching lines...) Expand 10 before | Expand all | Expand 10 after
4047 if (NodeChildRemovalTracker::IsBeingRemoved(new_focused_element)) 4047 if (NodeChildRemovalTracker::IsBeingRemoved(new_focused_element))
4048 return true; 4048 return true;
4049 4049
4050 if (focused_element_ == new_focused_element) 4050 if (focused_element_ == new_focused_element)
4051 return true; 4051 return true;
4052 4052
4053 bool focus_change_blocked = false; 4053 bool focus_change_blocked = false;
4054 Element* old_focused_element = focused_element_; 4054 Element* old_focused_element = focused_element_;
4055 focused_element_ = nullptr; 4055 focused_element_ = nullptr;
4056 4056
4057 Node* ancestor = (old_focused_element && old_focused_element->isConnected() &&
4058 new_focused_element)
4059 ? FlatTreeTraversal::CommonAncestor(*old_focused_element,
4060 *new_focused_element)
4061 : nullptr;
4062
4057 // Remove focus from the existing focus node (if any) 4063 // Remove focus from the existing focus node (if any)
4058 if (old_focused_element) { 4064 if (old_focused_element) {
4059 old_focused_element->SetFocused(false, params.type); 4065 old_focused_element->SetFocused(false, params.type, ancestor);
4060 4066
4061 // Dispatch the blur event and let the node do any other blur related 4067 // Dispatch the blur event and let the node do any other blur related
4062 // activities (important for text fields) 4068 // activities (important for text fields)
4063 // If page lost focus, blur event will have already been dispatched 4069 // If page lost focus, blur event will have already been dispatched
4064 if (GetPage() && (GetPage()->GetFocusController().IsFocused())) { 4070 if (GetPage() && (GetPage()->GetFocusController().IsFocused())) {
4065 old_focused_element->DispatchBlurEvent(new_focused_element, params.type, 4071 old_focused_element->DispatchBlurEvent(new_focused_element, params.type,
4066 params.source_capabilities); 4072 params.source_capabilities);
4067 if (focused_element_) { 4073 if (focused_element_) {
4068 // handler shifted focus 4074 // handler shifted focus
4069 focus_change_blocked = true; 4075 focus_change_blocked = true;
(...skipping 26 matching lines...) Expand all
4096 if (IsRootEditableElement(*new_focused_element) && 4102 if (IsRootEditableElement(*new_focused_element) &&
4097 !AcceptsEditingFocus(*new_focused_element)) { 4103 !AcceptsEditingFocus(*new_focused_element)) {
4098 // delegate blocks focus change 4104 // delegate blocks focus change
4099 focus_change_blocked = true; 4105 focus_change_blocked = true;
4100 goto SetFocusedElementDone; 4106 goto SetFocusedElementDone;
4101 } 4107 }
4102 // Set focus on the new node 4108 // Set focus on the new node
4103 focused_element_ = new_focused_element; 4109 focused_element_ = new_focused_element;
4104 SetSequentialFocusNavigationStartingPoint(focused_element_.Get()); 4110 SetSequentialFocusNavigationStartingPoint(focused_element_.Get());
4105 4111
4106 focused_element_->SetFocused(true, params.type); 4112 focused_element_->SetFocused(true, params.type, ancestor);
4113
4107 // Element::setFocused for frames can dispatch events. 4114 // Element::setFocused for frames can dispatch events.
4108 if (focused_element_ != new_focused_element) { 4115 if (focused_element_ != new_focused_element) {
4109 focus_change_blocked = true; 4116 focus_change_blocked = true;
4110 goto SetFocusedElementDone; 4117 goto SetFocusedElementDone;
4111 } 4118 }
4112 CancelFocusAppearanceUpdate(); 4119 CancelFocusAppearanceUpdate();
4113 focused_element_->UpdateFocusAppearance(params.selection_behavior); 4120 focused_element_->UpdateFocusAppearance(params.selection_behavior);
4114 4121
4115 // Dispatch the focus event and let the node do any other focus related 4122 // Dispatch the focus event and let the node do any other focus related
4116 // activities (important for text fields) 4123 // activities (important for text fields)
(...skipping 2535 matching lines...) Expand 10 before | Expand all | Expand 10 after
6652 } 6659 }
6653 6660
6654 void showLiveDocumentInstances() { 6661 void showLiveDocumentInstances() {
6655 WeakDocumentSet& set = liveDocumentSet(); 6662 WeakDocumentSet& set = liveDocumentSet();
6656 fprintf(stderr, "There are %u documents currently alive:\n", set.size()); 6663 fprintf(stderr, "There are %u documents currently alive:\n", set.size());
6657 for (blink::Document* document : set) 6664 for (blink::Document* document : set)
6658 fprintf(stderr, "- Document %p URL: %s\n", document, 6665 fprintf(stderr, "- Document %p URL: %s\n", document,
6659 document->Url().GetString().Utf8().Data()); 6666 document->Url().GetString().Utf8().Data());
6660 } 6667 }
6661 #endif 6668 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698