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 "content/browser/find_request_manager.h" | 5 #include "content/browser/find_request_manager.h" |
6 | 6 |
7 #include "content/browser/frame_host/render_frame_host_impl.h" | 7 #include "content/browser/frame_host/render_frame_host_impl.h" |
8 #include "content/browser/web_contents/web_contents_impl.h" | 8 #include "content/browser/web_contents/web_contents_impl.h" |
9 #include "content/common/frame_messages.h" | 9 #include "content/common/frame_messages.h" |
10 #include "content/common/input_messages.h" | 10 #include "content/common/input_messages.h" |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 FindRequestManager::FindMatchRectsState::~FindMatchRectsState() {} | 84 FindRequestManager::FindMatchRectsState::~FindMatchRectsState() {} |
85 #endif | 85 #endif |
86 | 86 |
87 // static | 87 // static |
88 const int FindRequestManager::kInvalidId = -1; | 88 const int FindRequestManager::kInvalidId = -1; |
89 | 89 |
90 FindRequestManager::FindRequestManager(WebContentsImpl* web_contents) | 90 FindRequestManager::FindRequestManager(WebContentsImpl* web_contents) |
91 : WebContentsObserver(web_contents), | 91 : WebContentsObserver(web_contents), |
92 contents_(web_contents), | 92 contents_(web_contents), |
93 current_session_id_(kInvalidId), | 93 current_session_id_(kInvalidId), |
| 94 pending_find_next_reply_(nullptr), |
94 pending_active_match_ordinal_(false), | 95 pending_active_match_ordinal_(false), |
95 number_of_matches_(0), | 96 number_of_matches_(0), |
96 active_frame_(nullptr), | 97 active_frame_(nullptr), |
97 relative_active_match_ordinal_(0), | 98 relative_active_match_ordinal_(0), |
98 active_match_ordinal_(0) {} | 99 active_match_ordinal_(0), |
| 100 last_reported_id_(kInvalidId) {} |
99 | 101 |
100 FindRequestManager::~FindRequestManager() {} | 102 FindRequestManager::~FindRequestManager() {} |
101 | 103 |
102 void FindRequestManager::Find(int request_id, | 104 void FindRequestManager::Find(int request_id, |
103 const base::string16& search_text, | 105 const base::string16& search_text, |
104 const blink::WebFindOptions& options) { | 106 const blink::WebFindOptions& options) { |
105 // Every find request must have a unique ID, and these IDs must strictly | 107 // Every find request must have a unique ID, and these IDs must strictly |
106 // increase so that newer requests always have greater IDs than older | 108 // increase so that newer requests always have greater IDs than older |
107 // requests. | 109 // requests. |
108 DCHECK_GT(request_id, current_request_.id); | 110 DCHECK_GT(request_id, current_request_.id); |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 AdvanceQueue(request_id); | 185 AdvanceQueue(request_id); |
184 } | 186 } |
185 | 187 |
186 if (!final_update) { | 188 if (!final_update) { |
187 NotifyFindReply(request_id, false /* final_update */); | 189 NotifyFindReply(request_id, false /* final_update */); |
188 return; | 190 return; |
189 } | 191 } |
190 | 192 |
191 // This is the final update for this frame for the current find operation. | 193 // This is the final update for this frame for the current find operation. |
192 | 194 |
193 pending_replies_.erase(rfh); | 195 pending_initial_replies_.erase(rfh); |
194 if (request_id == current_session_id_ && !pending_replies_.empty()) { | 196 if (request_id == current_session_id_ && !pending_initial_replies_.empty()) { |
195 NotifyFindReply(request_id, false /* final_update */); | 197 NotifyFindReply(request_id, false /* final_update */); |
196 return; | 198 return; |
197 } | 199 } |
198 DCHECK(request_id == current_session_id_ || | |
199 current_request_.options.findNext); | |
200 | 200 |
201 // This is the final update for the current find operation. | 201 // This is the final update for the current find operation. |
202 FinalUpdate(request_id, rfh); | 202 |
| 203 if (request_id == current_request_.id && request_id != current_session_id_) { |
| 204 DCHECK(current_request_.options.findNext); |
| 205 DCHECK_EQ(pending_find_next_reply_, rfh); |
| 206 pending_find_next_reply_ = nullptr; |
| 207 } |
| 208 |
| 209 FinalUpdateReceived(request_id, rfh); |
203 } | 210 } |
204 | 211 |
205 void FindRequestManager::RemoveFrame(RenderFrameHost* rfh) { | 212 void FindRequestManager::RemoveFrame(RenderFrameHost* rfh) { |
206 if (current_session_id_ == kInvalidId || !CheckFrame(rfh)) | 213 if (current_session_id_ == kInvalidId || !CheckFrame(rfh)) |
207 return; | 214 return; |
208 | 215 |
209 // If matches are counted for the frame that is being removed, decrement the | 216 // If matches are counted for the frame that is being removed, decrement the |
210 // match total before erasing that entry. | 217 // match total before erasing that entry. |
211 auto it = matches_per_frame_.find(rfh); | 218 auto it = matches_per_frame_.find(rfh); |
212 if (it != matches_per_frame_.end()) { | 219 if (it != matches_per_frame_.end()) { |
213 number_of_matches_ -= it->second; | 220 number_of_matches_ -= it->second; |
214 matches_per_frame_.erase(it); | 221 matches_per_frame_.erase(it); |
215 } | 222 } |
216 | 223 |
217 // Update the active match ordinal, since it may have changed. | 224 // Update the active match ordinal, since it may have changed. |
218 if (active_frame_ == rfh) { | 225 if (active_frame_ == rfh) { |
219 active_frame_ = nullptr; | 226 active_frame_ = nullptr; |
220 relative_active_match_ordinal_ = 0; | 227 relative_active_match_ordinal_ = 0; |
| 228 selection_rect_ = gfx::Rect(); |
221 } | 229 } |
222 UpdateActiveMatchOrdinal(); | 230 UpdateActiveMatchOrdinal(); |
223 | 231 |
224 #if defined(OS_ANDROID) | 232 #if defined(OS_ANDROID) |
225 // The removed frame may contain the nearest find result known so far. Note | 233 // The removed frame may contain the nearest find result known so far. Note |
226 // that once all queried frames have responded, if this result was the overall | 234 // that once all queried frames have responded, if this result was the overall |
227 // nearest, then no activation will occur. | 235 // nearest, then no activation will occur. |
228 if (rfh == activate_.nearest_frame) | 236 if (rfh == activate_.nearest_frame) |
229 activate_.nearest_frame = nullptr; | 237 activate_.nearest_frame = nullptr; |
230 | 238 |
231 // Match rects in the removed frame are no longer relevant. | 239 // Match rects in the removed frame are no longer relevant. |
232 if (match_rects_.frame_rects.count(rfh)) { | 240 if (match_rects_.frame_rects.count(rfh)) { |
233 match_rects_.frame_rects.erase(rfh); | 241 match_rects_.frame_rects.erase(rfh); |
234 ++match_rects_.known_version; | 242 ++match_rects_.known_version; |
235 } | 243 } |
236 | 244 |
237 // A reply should not be expected from the removed frame. | 245 // A reply should not be expected from the removed frame. |
238 RemoveNearestFindResultPendingReply(rfh); | 246 RemoveNearestFindResultPendingReply(rfh); |
239 RemoveFindMatchRectsPendingReply(rfh); | 247 RemoveFindMatchRectsPendingReply(rfh); |
240 #endif | 248 #endif |
241 | 249 |
242 if (pending_replies_.count(rfh)) { | 250 // If no pending find replies are expected for the removed frame, then just |
| 251 // report the updated results. |
| 252 if (!pending_initial_replies_.count(rfh) && pending_find_next_reply_ != rfh) { |
| 253 bool final_update = |
| 254 pending_initial_replies_.empty() && !pending_find_next_reply_; |
| 255 NotifyFindReply(current_session_id_, final_update); |
| 256 return; |
| 257 } |
| 258 |
| 259 if (pending_initial_replies_.count(rfh)) { |
243 // A reply should not be expected from the removed frame. | 260 // A reply should not be expected from the removed frame. |
244 pending_replies_.erase(rfh); | 261 pending_initial_replies_.erase(rfh); |
245 if (pending_replies_.empty()) { | 262 if (pending_initial_replies_.empty()) { |
246 FinalUpdate(current_request_.id, rfh); | 263 FinalUpdateReceived(current_session_id_, rfh); |
247 return; | |
248 } | 264 } |
249 } | 265 } |
250 | 266 |
251 NotifyFindReply(current_session_id_, | 267 if (pending_find_next_reply_ == rfh) { |
252 pending_replies_.empty() /* final_update */); | 268 // A reply should not be expected from the removed frame. |
| 269 pending_find_next_reply_ = nullptr; |
| 270 FinalUpdateReceived(current_request_.id, rfh); |
| 271 } |
253 } | 272 } |
254 | 273 |
255 #if defined(OS_ANDROID) | 274 #if defined(OS_ANDROID) |
256 void FindRequestManager::ActivateNearestFindResult(float x, float y) { | 275 void FindRequestManager::ActivateNearestFindResult(float x, float y) { |
257 if (current_session_id_ == kInvalidId) | 276 if (current_session_id_ == kInvalidId) |
258 return; | 277 return; |
259 | 278 |
260 activate_ = ActivateNearestFindResultState(x, y); | 279 activate_ = ActivateNearestFindResultState(x, y); |
261 | 280 |
262 // Request from each frame the distance to the nearest find result (in that | 281 // Request from each frame the distance to the nearest find result (in that |
263 // frame) from the point (x, y), defined in find-in-page coordinates. | 282 // frame) from the point (x, y), defined in find-in-page coordinates. |
264 for (FrameTreeNode* node : contents_->GetFrameTree()->Nodes()) { | 283 for (FrameTreeNode* node : contents_->GetFrameTree()->Nodes()) { |
265 RenderFrameHost* rfh = node->current_frame_host(); | 284 RenderFrameHost* rfh = node->current_frame_host(); |
266 | 285 |
267 if (!CheckFrame(rfh)) | 286 if (!CheckFrame(rfh) || !rfh->IsRenderFrameLive()) |
268 continue; | 287 continue; |
269 | 288 |
270 activate_.pending_replies.insert(rfh); | 289 activate_.pending_replies.insert(rfh); |
271 rfh->Send(new FrameMsg_GetNearestFindResult( | 290 rfh->Send(new FrameMsg_GetNearestFindResult( |
272 rfh->GetRoutingID(), activate_.current_request_id, | 291 rfh->GetRoutingID(), activate_.current_request_id, |
273 activate_.x, activate_.y)); | 292 activate_.x, activate_.y)); |
274 } | 293 } |
275 } | 294 } |
276 | 295 |
277 void FindRequestManager::OnGetNearestFindResultReply(RenderFrameHost* rfh, | 296 void FindRequestManager::OnGetNearestFindResultReply(RenderFrameHost* rfh, |
(...skipping 14 matching lines...) Expand all Loading... |
292 } | 311 } |
293 | 312 |
294 void FindRequestManager::RequestFindMatchRects(int current_version) { | 313 void FindRequestManager::RequestFindMatchRects(int current_version) { |
295 match_rects_.pending_replies.clear(); | 314 match_rects_.pending_replies.clear(); |
296 match_rects_.request_version = current_version; | 315 match_rects_.request_version = current_version; |
297 | 316 |
298 // Request the latest find match rects from each frame. | 317 // Request the latest find match rects from each frame. |
299 for (FrameTreeNode* node : contents_->GetFrameTree()->Nodes()) { | 318 for (FrameTreeNode* node : contents_->GetFrameTree()->Nodes()) { |
300 RenderFrameHost* rfh = node->current_frame_host(); | 319 RenderFrameHost* rfh = node->current_frame_host(); |
301 | 320 |
302 if (!CheckFrame(rfh)) | 321 if (!CheckFrame(rfh) || !rfh->IsRenderFrameLive()) |
303 continue; | 322 continue; |
304 | 323 |
305 match_rects_.pending_replies.insert(rfh); | 324 match_rects_.pending_replies.insert(rfh); |
306 auto it = match_rects_.frame_rects.find(rfh); | 325 auto it = match_rects_.frame_rects.find(rfh); |
307 int version = (it != match_rects_.frame_rects.end()) | 326 int version = (it != match_rects_.frame_rects.end()) |
308 ? it->second.version : kInvalidId; | 327 ? it->second.version : kInvalidId; |
309 rfh->Send(new FrameMsg_FindMatchRects(rfh->GetRoutingID(), version)); | 328 rfh->Send(new FrameMsg_FindMatchRects(rfh->GetRoutingID(), version)); |
310 } | 329 } |
311 } | 330 } |
312 | 331 |
(...skipping 23 matching lines...) Expand all Loading... |
336 RemoveFrame(old_host); | 355 RemoveFrame(old_host); |
337 } | 356 } |
338 | 357 |
339 void FindRequestManager::FrameDeleted(RenderFrameHost* rfh) { | 358 void FindRequestManager::FrameDeleted(RenderFrameHost* rfh) { |
340 RemoveFrame(rfh); | 359 RemoveFrame(rfh); |
341 } | 360 } |
342 | 361 |
343 void FindRequestManager::Reset(const FindRequest& initial_request) { | 362 void FindRequestManager::Reset(const FindRequest& initial_request) { |
344 current_session_id_ = initial_request.id; | 363 current_session_id_ = initial_request.id; |
345 current_request_ = initial_request; | 364 current_request_ = initial_request; |
346 pending_replies_.clear(); | 365 pending_initial_replies_.clear(); |
| 366 pending_find_next_reply_ = nullptr; |
347 pending_active_match_ordinal_ = true; | 367 pending_active_match_ordinal_ = true; |
348 matches_per_frame_.clear(); | 368 matches_per_frame_.clear(); |
349 number_of_matches_ = 0; | 369 number_of_matches_ = 0; |
350 active_frame_ = nullptr; | 370 active_frame_ = nullptr; |
351 relative_active_match_ordinal_ = 0; | 371 relative_active_match_ordinal_ = 0; |
352 active_match_ordinal_ = 0; | 372 active_match_ordinal_ = 0; |
353 selection_rect_ = gfx::Rect(); | 373 selection_rect_ = gfx::Rect(); |
| 374 last_reported_id_ = kInvalidId; |
354 #if defined(OS_ANDROID) | 375 #if defined(OS_ANDROID) |
355 activate_ = ActivateNearestFindResultState(); | 376 activate_ = ActivateNearestFindResultState(); |
356 match_rects_.pending_replies.clear(); | 377 match_rects_.pending_replies.clear(); |
357 #endif | 378 #endif |
358 } | 379 } |
359 | 380 |
360 void FindRequestManager::FindInternal(const FindRequest& request) { | 381 void FindRequestManager::FindInternal(const FindRequest& request) { |
361 DCHECK_GT(request.id, current_request_.id); | 382 DCHECK_GT(request.id, current_request_.id); |
362 DCHECK_GT(request.id, current_session_id_); | 383 DCHECK_GT(request.id, current_session_id_); |
363 | 384 |
(...skipping 29 matching lines...) Expand all Loading... |
393 return; | 414 return; |
394 } | 415 } |
395 | 416 |
396 find_request_queue_.pop(); | 417 find_request_queue_.pop(); |
397 if (!find_request_queue_.empty()) | 418 if (!find_request_queue_.empty()) |
398 FindInternal(find_request_queue_.front()); | 419 FindInternal(find_request_queue_.front()); |
399 } | 420 } |
400 | 421 |
401 void FindRequestManager::SendFindIPC(const FindRequest& request, | 422 void FindRequestManager::SendFindIPC(const FindRequest& request, |
402 RenderFrameHost* rfh) { | 423 RenderFrameHost* rfh) { |
403 pending_replies_.insert(rfh); | 424 DCHECK(CheckFrame(rfh)); |
| 425 DCHECK(rfh->IsRenderFrameLive()); |
| 426 |
| 427 if (request.options.findNext) |
| 428 pending_find_next_reply_ = rfh; |
| 429 else |
| 430 pending_initial_replies_.insert(rfh); |
| 431 |
404 rfh->Send(new FrameMsg_Find(rfh->GetRoutingID(), request.id, | 432 rfh->Send(new FrameMsg_Find(rfh->GetRoutingID(), request.id, |
405 request.search_text, request.options)); | 433 request.search_text, request.options)); |
406 } | 434 } |
407 | 435 |
408 void FindRequestManager::NotifyFindReply(int request_id, | 436 void FindRequestManager::NotifyFindReply(int request_id, bool final_update) { |
409 bool final_update) const { | |
410 if (request_id == kInvalidId) { | 437 if (request_id == kInvalidId) { |
411 NOTREACHED(); | 438 NOTREACHED(); |
412 return; | 439 return; |
413 } | 440 } |
414 | 441 |
| 442 // Ensure that replies are not reported with IDs lower than the ID of the |
| 443 // latest request we have results from. |
| 444 if (request_id < last_reported_id_) |
| 445 request_id = last_reported_id_; |
| 446 else |
| 447 last_reported_id_ = request_id; |
| 448 |
415 contents_->NotifyFindReply(request_id, number_of_matches_, selection_rect_, | 449 contents_->NotifyFindReply(request_id, number_of_matches_, selection_rect_, |
416 active_match_ordinal_, final_update); | 450 active_match_ordinal_, final_update); |
417 } | 451 } |
418 | 452 |
419 RenderFrameHost* FindRequestManager::GetInitialFrame(bool forward) const { | 453 RenderFrameHost* FindRequestManager::GetInitialFrame(bool forward) const { |
420 RenderFrameHost* rfh = contents_->GetMainFrame(); | 454 RenderFrameHost* rfh = contents_->GetMainFrame(); |
421 | 455 |
422 if (!forward) | 456 if (!forward) |
423 rfh = GetDeepestLastChild(rfh); | 457 rfh = GetDeepestLastChild(rfh); |
424 | 458 |
425 return rfh; | 459 return rfh; |
426 } | 460 } |
427 | 461 |
428 RenderFrameHost* FindRequestManager::Traverse(RenderFrameHost* from_rfh, | 462 RenderFrameHost* FindRequestManager::Traverse(RenderFrameHost* from_rfh, |
429 bool forward, | 463 bool forward, |
430 bool matches_only, | 464 bool matches_only, |
431 bool wrap) const { | 465 bool wrap) const { |
432 FrameTreeNode* node = | 466 FrameTreeNode* node = |
433 static_cast<RenderFrameHostImpl*>(from_rfh)->frame_tree_node(); | 467 static_cast<RenderFrameHostImpl*>(from_rfh)->frame_tree_node(); |
434 | 468 |
435 while ((node = TraverseNode(node, forward, wrap)) != nullptr) { | 469 while ((node = TraverseNode(node, forward, wrap)) != nullptr) { |
436 if (!CheckFrame(node->current_frame_host())) | 470 if (!CheckFrame(node->current_frame_host())) |
437 continue; | 471 continue; |
438 RenderFrameHost* current_rfh = node->current_frame_host(); | 472 RenderFrameHost* current_rfh = node->current_frame_host(); |
439 if (!matches_only || matches_per_frame_.find(current_rfh)->second || | 473 if (!matches_only || matches_per_frame_.find(current_rfh)->second || |
440 pending_replies_.count(current_rfh)) { | 474 pending_initial_replies_.count(current_rfh)) { |
441 // Note that if there is still a pending reply expected for this frame, | 475 // Note that if there is still a pending reply expected for this frame, |
442 // then it may have unaccounted matches and will not be skipped via | 476 // then it may have unaccounted matches and will not be skipped via |
443 // |matches_only|. | 477 // |matches_only|. |
444 return node->current_frame_host(); | 478 return node->current_frame_host(); |
445 } | 479 } |
446 if (wrap && node->current_frame_host() == from_rfh) | 480 if (wrap && node->current_frame_host() == from_rfh) |
447 return nullptr; | 481 return nullptr; |
448 } | 482 } |
449 | 483 |
450 return nullptr; | 484 return nullptr; |
451 } | 485 } |
452 | 486 |
453 void FindRequestManager::AddFrame(RenderFrameHost* rfh) { | 487 void FindRequestManager::AddFrame(RenderFrameHost* rfh) { |
454 if (!rfh || !rfh->IsRenderFrameLive()) | 488 if (!rfh || !rfh->IsRenderFrameLive()) |
455 return; | 489 return; |
456 | 490 |
457 // A frame that is already being searched should not be added again. | 491 // A frame that is already being searched should not be added again. |
458 DCHECK(!CheckFrame(rfh)); | 492 DCHECK(!CheckFrame(rfh)); |
459 | 493 |
460 matches_per_frame_[rfh] = 0; | 494 matches_per_frame_[rfh] = 0; |
461 | 495 |
462 FindRequest request = current_request_; | 496 FindRequest request = current_request_; |
463 request.id = current_session_id_; | 497 request.id = current_session_id_; |
464 request.options.findNext = false; | 498 request.options.findNext = false; |
465 SendFindIPC(request, rfh); | 499 SendFindIPC(request, rfh); |
466 } | 500 } |
467 | 501 |
468 bool FindRequestManager::CheckFrame(RenderFrameHost* rfh) const { | 502 bool FindRequestManager::CheckFrame(RenderFrameHost* rfh) const { |
469 return rfh && rfh->IsRenderFrameLive() && matches_per_frame_.count(rfh); | 503 return rfh && matches_per_frame_.count(rfh); |
470 } | 504 } |
471 | 505 |
472 void FindRequestManager::UpdateActiveMatchOrdinal() { | 506 void FindRequestManager::UpdateActiveMatchOrdinal() { |
473 active_match_ordinal_ = 0; | 507 active_match_ordinal_ = 0; |
474 | 508 |
475 if (!active_frame_ || !relative_active_match_ordinal_) { | 509 if (!active_frame_ || !relative_active_match_ordinal_) { |
476 DCHECK(!active_frame_ && !relative_active_match_ordinal_); | 510 DCHECK(!active_frame_ && !relative_active_match_ordinal_); |
477 return; | 511 return; |
478 } | 512 } |
479 | 513 |
480 // Traverse the frame tree backwards (in search order) and count all of the | 514 // Traverse the frame tree backwards (in search order) and count all of the |
481 // matches in frames before the frame with the active match, in order to | 515 // matches in frames before the frame with the active match, in order to |
482 // determine the overall active match ordinal. | 516 // determine the overall active match ordinal. |
483 RenderFrameHost* frame = active_frame_; | 517 RenderFrameHost* frame = active_frame_; |
484 while ((frame = Traverse(frame, | 518 while ((frame = Traverse(frame, |
485 false /* forward */, | 519 false /* forward */, |
486 true /* matches_only */, | 520 true /* matches_only */, |
487 false /* wrap */)) != nullptr) { | 521 false /* wrap */)) != nullptr) { |
488 active_match_ordinal_ += matches_per_frame_[frame]; | 522 active_match_ordinal_ += matches_per_frame_[frame]; |
489 } | 523 } |
490 active_match_ordinal_ += relative_active_match_ordinal_; | 524 active_match_ordinal_ += relative_active_match_ordinal_; |
491 } | 525 } |
492 | 526 |
493 void FindRequestManager::FinalUpdate(int request_id, RenderFrameHost* rfh) { | 527 void FindRequestManager::FinalUpdateReceived(int request_id, |
| 528 RenderFrameHost* rfh) { |
494 if (!number_of_matches_ || | 529 if (!number_of_matches_ || |
495 !pending_active_match_ordinal_ || | 530 (active_match_ordinal_ && !pending_active_match_ordinal_) || |
496 request_id != current_request_.id) { | 531 request_id != current_request_.id) { |
497 NotifyFindReply(request_id, true /* final_update */); | 532 // All the find results for |request_id| are in and ready to report. Note |
| 533 // that |final_update| will be set to false if there are still pending |
| 534 // replies expected from the initial find request. |
| 535 NotifyFindReply(request_id, |
| 536 pending_initial_replies_.empty() /* final_update */); |
498 AdvanceQueue(request_id); | 537 AdvanceQueue(request_id); |
499 return; | 538 return; |
500 } | 539 } |
501 | 540 |
502 // There are matches, but no active match was returned, so another find next | 541 // There are matches, but no active match was returned, so another find next |
503 // request must be sent. | 542 // request must be sent. |
504 | 543 |
505 RenderFrameHost* target_rfh; | 544 RenderFrameHost* target_rfh; |
506 if (current_request_.options.findNext) { | 545 if (current_request_.options.findNext) { |
507 // If this was a find next operation, then the active match will be in the | 546 // If this was a find next operation, then the active match will be in the |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
580 aggregate_rects.end(), frame_rects.begin(), frame_rects.end()); | 619 aggregate_rects.end(), frame_rects.begin(), frame_rects.end()); |
581 } | 620 } |
582 } | 621 } |
583 contents_->NotifyFindMatchRectsReply( | 622 contents_->NotifyFindMatchRectsReply( |
584 match_rects_.known_version, aggregate_rects, match_rects_.active_rect); | 623 match_rects_.known_version, aggregate_rects, match_rects_.active_rect); |
585 } | 624 } |
586 } | 625 } |
587 #endif | 626 #endif |
588 | 627 |
589 } // namespace content | 628 } // namespace content |
OLD | NEW |