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 #ifndef CONTENT_BROWSER_FIND_REQUEST_MANAGER_H_ | 5 #ifndef CONTENT_BROWSER_FIND_REQUEST_MANAGER_H_ |
6 #define CONTENT_BROWSER_FIND_REQUEST_MANAGER_H_ | 6 #define CONTENT_BROWSER_FIND_REQUEST_MANAGER_H_ |
7 | 7 |
8 #include <queue> | 8 #include <queue> |
9 #include <unordered_map> | 9 #include <unordered_map> |
10 #include <unordered_set> | 10 #include <unordered_set> |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
117 // Called when an informative response (a response with enough information to | 117 // Called when an informative response (a response with enough information to |
118 // be able to route subsequent find requests) comes in for the find request | 118 // be able to route subsequent find requests) comes in for the find request |
119 // with ID |request_id|. Advances the |find_request_queue_| if appropriate. | 119 // with ID |request_id|. Advances the |find_request_queue_| if appropriate. |
120 void AdvanceQueue(int request_id); | 120 void AdvanceQueue(int request_id); |
121 | 121 |
122 // Sends a find IPC containing the find request |request| to the RenderFrame | 122 // Sends a find IPC containing the find request |request| to the RenderFrame |
123 // associated with |rfh|. | 123 // associated with |rfh|. |
124 void SendFindIPC(const FindRequest& request, RenderFrameHost* rfh); | 124 void SendFindIPC(const FindRequest& request, RenderFrameHost* rfh); |
125 | 125 |
126 // Sends the find results (as they currently are) to the WebContents. | 126 // Sends the find results (as they currently are) to the WebContents. |
127 void NotifyFindReply(int request_id, bool final_update) const; | 127 void NotifyFindReply(int request_id, bool final_update); |
128 | 128 |
129 // Returns the initial frame in search order. This will be either the first | 129 // Returns the initial frame in search order. This will be either the first |
130 // frame, if searching forward, or the last frame, if searching backward. | 130 // frame, if searching forward, or the last frame, if searching backward. |
131 RenderFrameHost* GetInitialFrame(bool forward) const; | 131 RenderFrameHost* GetInitialFrame(bool forward) const; |
132 | 132 |
133 // Traverses the frame tree to find and return the next RenderFrameHost after | 133 // Traverses the frame tree to find and return the next RenderFrameHost after |
134 // |from_rfh| in search order. |forward| indicates whether the frame tree | 134 // |from_rfh| in search order. |forward| indicates whether the frame tree |
135 // should be traversed forward (if true) or backward (if false). If | 135 // should be traversed forward (if true) or backward (if false). If |
136 // |matches_only| is set, then the frame tree will be traversed until the | 136 // |matches_only| is set, then the frame tree will be traversed until the |
137 // first frame is found for which matches have been found. If |wrap| is set, | 137 // first frame is found for which matches have been found. If |wrap| is set, |
(...skipping 13 matching lines...) Expand all Loading... |
151 // Returns whether |rfh| is in the set of frames being searched in the current | 151 // Returns whether |rfh| is in the set of frames being searched in the current |
152 // find session. | 152 // find session. |
153 bool CheckFrame(RenderFrameHost* rfh) const; | 153 bool CheckFrame(RenderFrameHost* rfh) const; |
154 | 154 |
155 // Computes and updates |active_match_ordinal_| based on |active_frame_| and | 155 // Computes and updates |active_match_ordinal_| based on |active_frame_| and |
156 // |relative_active_match_ordinal_|. | 156 // |relative_active_match_ordinal_|. |
157 void UpdateActiveMatchOrdinal(); | 157 void UpdateActiveMatchOrdinal(); |
158 | 158 |
159 // Called when all pending find replies have been received for the find | 159 // Called when all pending find replies have been received for the find |
160 // request with ID |request_id|. The final update was received from |rfh|. | 160 // request with ID |request_id|. The final update was received from |rfh|. |
161 void FinalUpdate(int request_id, RenderFrameHost* rfh); | 161 // |
| 162 // Note that this is the final update for this particular find request, but |
| 163 // not necessarily for all issued requests. If there are still pending replies |
| 164 // expected for a previous find request, then the outgoing find reply issued |
| 165 // from this function will not be marked final. |
| 166 void FinalUpdateReceived(int request_id, RenderFrameHost* rfh); |
162 | 167 |
163 #if defined(OS_ANDROID) | 168 #if defined(OS_ANDROID) |
164 // Called when a nearest find result reply is no longer pending for a frame. | 169 // Called when a nearest find result reply is no longer pending for a frame. |
165 void RemoveNearestFindResultPendingReply(RenderFrameHost* rfh); | 170 void RemoveNearestFindResultPendingReply(RenderFrameHost* rfh); |
166 | 171 |
167 // Called when a find match rects reply is no longer pending for a frame. | 172 // Called when a find match rects reply is no longer pending for a frame. |
168 void RemoveFindMatchRectsPendingReply(RenderFrameHost* rfh); | 173 void RemoveFindMatchRectsPendingReply(RenderFrameHost* rfh); |
169 | 174 |
170 // State related to ActivateNearestFindResult requests. | 175 // State related to ActivateNearestFindResult requests. |
171 struct ActivateNearestFindResultState { | 176 struct ActivateNearestFindResultState { |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
245 // The request ID of the initial find request in the current find-in-page | 250 // The request ID of the initial find request in the current find-in-page |
246 // session, which uniquely identifies this session. Request IDs are included | 251 // session, which uniquely identifies this session. Request IDs are included |
247 // in all find-related IPCs, which allows reply IPCs containing results from | 252 // in all find-related IPCs, which allows reply IPCs containing results from |
248 // previous sessions (with |request_id| < |current_session_id_|) to be easily | 253 // previous sessions (with |request_id| < |current_session_id_|) to be easily |
249 // identified and ignored. | 254 // identified and ignored. |
250 int current_session_id_; | 255 int current_session_id_; |
251 | 256 |
252 // The current find request. | 257 // The current find request. |
253 FindRequest current_request_; | 258 FindRequest current_request_; |
254 | 259 |
255 // The set of frames that are still expected to reply to a pending find | 260 // The set of frames that are still expected to reply to a pending initial |
256 // request. Frames are removed from |pending_replies_| when their reply with | 261 // find request. Frames are removed from |pending_initial_replies_| when their |
257 // |final_update| set to true is received. | 262 // reply to the initial find request is received with |final_update| set to |
258 std::unordered_set<RenderFrameHost*> pending_replies_; | 263 // true. |
| 264 std::unordered_set<RenderFrameHost*> pending_initial_replies_; |
| 265 |
| 266 // The frame (if any) that is still expected to reply to the last pending |
| 267 // "find next" request. |
| 268 RenderFrameHost* pending_find_next_reply_; |
259 | 269 |
260 // Indicates whether an update to the active match ordinal is expected. Once | 270 // Indicates whether an update to the active match ordinal is expected. Once |
261 // set, |pending_active_match_ordinal_| will not reset until an update to the | 271 // set, |pending_active_match_ordinal_| will not reset until an update to the |
262 // active match ordinal is received in response to the find request with ID | 272 // active match ordinal is received in response to the find request with ID |
263 // |current_request_.id| (the latest request). | 273 // |current_request_.id| (the latest request). |
264 bool pending_active_match_ordinal_; | 274 bool pending_active_match_ordinal_; |
265 | 275 |
266 // The number of matches found in each frame. There will necessarily be | 276 // The number of matches found in each frame. There will necessarily be |
267 // entries in this map for every frame that is being (or has been) searched in | 277 // entries in this map for every frame that is being (or has been) searched in |
268 // the current find session, and no other frames. | 278 // the current find session, and no other frames. |
(...skipping 12 matching lines...) Expand all Loading... |
281 | 291 |
282 // The overall active match ordinal for the current find-in-page session. | 292 // The overall active match ordinal for the current find-in-page session. |
283 int active_match_ordinal_; | 293 int active_match_ordinal_; |
284 | 294 |
285 // The rectangle around the active match, in screen coordinates. | 295 // The rectangle around the active match, in screen coordinates. |
286 gfx::Rect selection_rect_; | 296 gfx::Rect selection_rect_; |
287 | 297 |
288 // Find requests are queued here when previous requests need to be handled | 298 // Find requests are queued here when previous requests need to be handled |
289 // before these ones can be properly routed. | 299 // before these ones can be properly routed. |
290 std::queue<FindRequest> find_request_queue_; | 300 std::queue<FindRequest> find_request_queue_; |
| 301 |
| 302 // Keeps track of the find request ID of the last find reply reported via |
| 303 // NotifyFindReply(). |
| 304 int last_reported_id_; |
291 }; | 305 }; |
292 | 306 |
293 } // namespace content | 307 } // namespace content |
294 | 308 |
295 #endif // CONTENT_BROWSER_FIND_REQUEST_MANAGER_H_ | 309 #endif // CONTENT_BROWSER_FIND_REQUEST_MANAGER_H_ |
OLD | NEW |