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

Side by Side Diff: content/browser/renderer_host/text_input_manager.h

Issue 2130133004: Tracking text selection on the browser side in OOPIF. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Initialize/Clear TextSelection for each view + make GetTextSelection() const. Created 4 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 // 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 #ifndef CONTENT_BROWSER_RENDERER_HOST_TEXT_INPUT_MANAGER_H__ 5 #ifndef CONTENT_BROWSER_RENDERER_HOST_TEXT_INPUT_MANAGER_H__
6 #define CONTENT_BROWSER_RENDERER_HOST_TEXT_INPUT_MANAGER_H__ 6 #define CONTENT_BROWSER_RENDERER_HOST_TEXT_INPUT_MANAGER_H__
7 7
8 #include <unordered_map> 8 #include <unordered_map>
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/observer_list.h" 11 #include "base/observer_list.h"
12 #include "base/strings/string16.h"
12 #include "content/common/content_export.h" 13 #include "content/common/content_export.h"
13 #include "content/common/text_input_state.h" 14 #include "content/common/text_input_state.h"
14 #include "ui/gfx/geometry/rect.h" 15 #include "ui/gfx/geometry/rect.h"
16 #include "ui/gfx/range/range.h"
15 #include "ui/gfx/selection_bound.h" 17 #include "ui/gfx/selection_bound.h"
16 18
17 struct ViewHostMsg_SelectionBounds_Params; 19 struct ViewHostMsg_SelectionBounds_Params;
18 20
19 namespace gfx {
20 class Range;
21 }
22
23 namespace content { 21 namespace content {
24 22
25 class RenderWidgetHostImpl; 23 class RenderWidgetHostImpl;
26 class RenderWidgetHostView; 24 class RenderWidgetHostView;
27 class RenderWidgetHostViewBase; 25 class RenderWidgetHostViewBase;
28 class WebContents; 26 class WebContents;
29 27
30 // A class which receives updates of TextInputState from multiple sources and 28 // A class which receives updates of TextInputState from multiple sources and
31 // decides what the new TextInputState is. It also notifies the observers when 29 // decides what the new TextInputState is. It also notifies the observers when
32 // text input state is updated. 30 // text input state is updated.
(...skipping 18 matching lines...) Expand all
51 TextInputManager* text_input_manager, 49 TextInputManager* text_input_manager,
52 RenderWidgetHostViewBase* updated_view) {} 50 RenderWidgetHostViewBase* updated_view) {}
53 // Called when |updated_view| has changed its SelectionRegion. 51 // Called when |updated_view| has changed its SelectionRegion.
54 virtual void OnSelectionBoundsChanged( 52 virtual void OnSelectionBoundsChanged(
55 TextInputManager* text_input_manager, 53 TextInputManager* text_input_manager,
56 RenderWidgetHostViewBase* updated_view) {} 54 RenderWidgetHostViewBase* updated_view) {}
57 // Called when |updated_view| has changed its CompositionRangeInfo. 55 // Called when |updated_view| has changed its CompositionRangeInfo.
58 virtual void OnImeCompositionRangeChanged( 56 virtual void OnImeCompositionRangeChanged(
59 TextInputManager* text_input_manager, 57 TextInputManager* text_input_manager,
60 RenderWidgetHostViewBase* updated_view) {} 58 RenderWidgetHostViewBase* updated_view) {}
59 // Called when the text selection for the |updated_view_| has changed.
60 virtual void OnTextSelectionChanged(
61 TextInputManager* text_input_manager,
62 RenderWidgetHostViewBase* updated_view) {}
61 }; 63 };
62 64
65 // This struct is used to store text selection related information for views.
66 struct TextSelection {
67 TextSelection();
68 TextSelection(const TextSelection& other);
69 ~TextSelection();
70
71 // The offset of the text stored in |text| relative to the start of the web
72 // page.
73 size_t offset;
74
75 // The current selection range relative to the start of the web page.
76 gfx::Range range;
77
78 // The text inside and around the current selection range.
79 base::string16 text;
80 };
81
63 TextInputManager(); 82 TextInputManager();
64 ~TextInputManager(); 83 ~TextInputManager();
65 84
66 // Returns the currently active widget, i.e., the RWH which is associated with 85 // Returns the currently active widget, i.e., the RWH which is associated with
67 // |active_view_|. 86 // |active_view_|.
68 RenderWidgetHostImpl* GetActiveWidget() const; 87 RenderWidgetHostImpl* GetActiveWidget() const;
69 88
70 // --------------------------------------------------------------------------- 89 // ---------------------------------------------------------------------------
71 // The following methods can be used to obtain information about IME-related 90 // The following methods can be used to obtain information about IME-related
72 // state for the active RenderWidgetHost. If the active widget is nullptr, the 91 // state for the active RenderWidgetHost. If the active widget is nullptr, the
73 // methods below will return nullptr as well. 92 // methods below will return nullptr as well.
74 // Users of these methods should not hold on to the pointers as they become 93 // Users of these methods should not hold on to the pointers as they become
75 // dangling if the TextInputManager or |active_view_| are destroyed. 94 // dangling if the TextInputManager or |active_view_| are destroyed.
76 95
77 // Returns the currently stored TextInputState. An state of nullptr can be 96 // Returns the currently stored TextInputState. An state of nullptr can be
78 // interpreted as a ui::TextInputType of ui::TEXT_INPUT_TYPE_NONE. 97 // interpreted as a ui::TextInputType of ui::TEXT_INPUT_TYPE_NONE.
79 const TextInputState* GetTextInputState() const; 98 const TextInputState* GetTextInputState() const;
80 99
81 // Returns the rect between selection bounds. 100 // Returns the rect between selection bounds.
82 gfx::Rect GetSelectionBoundsRect() const; 101 gfx::Rect GetSelectionBoundsRect() const;
83 102
84 // Returns a vector of rects representing the character bounds. 103 // Returns a vector of rects representing the character bounds.
85 const std::vector<gfx::Rect>* GetCompositionCharacterBounds() const; 104 const std::vector<gfx::Rect>* GetCompositionCharacterBounds() const;
86 105
106 // The following method returns the text selection state for the given |view|.
107 // If |view| == nullptr, it will assume |active_view_| and return its state.
108 // In the case of |active_view_| == nullptr, the method will return nullptr.
109 const TextSelection* GetTextSelection(
110 RenderWidgetHostViewBase* view = nullptr) const;
111
87 // --------------------------------------------------------------------------- 112 // ---------------------------------------------------------------------------
88 // The following methods are called by RWHVs on the tab to update their IME- 113 // The following methods are called by RWHVs on the tab to update their IME-
89 // related state. 114 // related state.
90 115
91 // Updates the TextInputState for |view|. 116 // Updates the TextInputState for |view|.
92 void UpdateTextInputState(RenderWidgetHostViewBase* view, 117 void UpdateTextInputState(RenderWidgetHostViewBase* view,
93 const TextInputState& state); 118 const TextInputState& state);
94 119
95 // The current IME composition has been cancelled on the renderer side for 120 // The current IME composition has been cancelled on the renderer side for
96 // the widget corresponding to |view|. 121 // the widget corresponding to |view|.
97 void ImeCancelComposition(RenderWidgetHostViewBase* view); 122 void ImeCancelComposition(RenderWidgetHostViewBase* view);
98 123
99 // Updates the selection bounds for the |view|. In Aura, selection bounds are 124 // Updates the selection bounds for the |view|. In Aura, selection bounds are
100 // used to provide the InputMethod with the position of the caret, e.g., in 125 // used to provide the InputMethod with the position of the caret, e.g., in
101 // setting the position of the ui::ImeWindow. 126 // setting the position of the ui::ImeWindow.
102 void SelectionBoundsChanged(RenderWidgetHostViewBase* view, 127 void SelectionBoundsChanged(RenderWidgetHostViewBase* view,
103 const ViewHostMsg_SelectionBounds_Params& params); 128 const ViewHostMsg_SelectionBounds_Params& params);
104 129
105 // Called when the composition range and/or character bounds have changed. 130 // Called when the composition range and/or character bounds have changed.
106 void ImeCompositionRangeChanged( 131 void ImeCompositionRangeChanged(
107 RenderWidgetHostViewBase* view, 132 RenderWidgetHostViewBase* view,
108 const gfx::Range& range, 133 const gfx::Range& range,
109 const std::vector<gfx::Rect>& character_bounds); 134 const std::vector<gfx::Rect>& character_bounds);
110 135
136 // Updates the new text selection information for the |view|.
137 void SelectionChanged(RenderWidgetHostViewBase* view,
138 const base::string16& text,
139 size_t offset,
140 const gfx::Range& range);
141
111 // Registers the given |view| for tracking its TextInputState. This is called 142 // Registers the given |view| for tracking its TextInputState. This is called
112 // by any view which has updates in its TextInputState (whether tab's RWHV or 143 // by any view which has updates in its TextInputState (whether tab's RWHV or
113 // that of a child frame). The |view| must unregister itself before being 144 // that of a child frame). The |view| must unregister itself before being
114 // destroyed (i.e., call TextInputManager::Unregister). 145 // destroyed (i.e., call TextInputManager::Unregister).
115 void Register(RenderWidgetHostViewBase* view); 146 void Register(RenderWidgetHostViewBase* view);
116 147
117 // Clears the TextInputState from the |view|. If |view == active_view_|, this 148 // Clears the TextInputState from the |view|. If |view == active_view_|, this
118 // call will lead to a TextInputState update since the TextInputState.type 149 // call will lead to a TextInputState update since the TextInputState.type
119 // should be reset to none. 150 // should be reset to none.
120 void Unregister(RenderWidgetHostViewBase* view); 151 void Unregister(RenderWidgetHostViewBase* view);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 // It will be nullptr if no such view exists. Note that the active view 201 // It will be nullptr if no such view exists. Note that the active view
171 // cannot have a |TextInputState.type| of ui::TEXT_INPUT_TYPE_NONE. 202 // cannot have a |TextInputState.type| of ui::TEXT_INPUT_TYPE_NONE.
172 RenderWidgetHostViewBase* active_view_; 203 RenderWidgetHostViewBase* active_view_;
173 204
174 // The following maps track corresponding IME state for views. For each view, 205 // The following maps track corresponding IME state for views. For each view,
175 // the values in the map are initialized and cleared in Register and 206 // the values in the map are initialized and cleared in Register and
176 // Unregister methods, respectively. 207 // Unregister methods, respectively.
177 ViewMap<TextInputState> text_input_state_map_; 208 ViewMap<TextInputState> text_input_state_map_;
178 ViewMap<SelectionRegion> selection_region_map_; 209 ViewMap<SelectionRegion> selection_region_map_;
179 ViewMap<CompositionRangeInfo> composition_range_info_map_; 210 ViewMap<CompositionRangeInfo> composition_range_info_map_;
211 ViewMap<TextSelection> text_selection_map_;
180 212
181 base::ObserverList<Observer> observer_list_; 213 base::ObserverList<Observer> observer_list_;
182 214
183 DISALLOW_COPY_AND_ASSIGN(TextInputManager); 215 DISALLOW_COPY_AND_ASSIGN(TextInputManager);
184 }; 216 };
185 } 217 }
186 218
187 #endif // CONTENT_BROWSER_RENDERER_HOST_TEXT_INPUT_MANAGER_H__ 219 #endif // CONTENT_BROWSER_RENDERER_HOST_TEXT_INPUT_MANAGER_H__
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_base.cc ('k') | content/browser/renderer_host/text_input_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698