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

Side by Side Diff: third_party/WebKit/Source/web/TextFinder.cpp

Issue 2904833002: LayoutObject::AbsoluteBoundingBoxRectForRange() should take EphemeralRange (Closed)
Patch Set: RebasedAndUpdatedWithComments Created 3 years, 7 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) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 // column where the next hit has been found. Doing this when autosizing is 163 // column where the next hit has been found. Doing this when autosizing is
164 // not set will result in a zoom reset on small devices. 164 // not set will result in a zoom reset on small devices.
165 if (OwnerFrame() 165 if (OwnerFrame()
166 .GetFrame() 166 .GetFrame()
167 ->GetDocument() 167 ->GetDocument()
168 ->GetTextAutosizer() 168 ->GetTextAutosizer()
169 ->PageNeedsAutosizing()) { 169 ->PageNeedsAutosizing()) {
170 OwnerFrame().ViewImpl()->ZoomToFindInPageRect( 170 OwnerFrame().ViewImpl()->ZoomToFindInPageRect(
171 OwnerFrame().GetFrameView()->ContentsToRootFrame( 171 OwnerFrame().GetFrameView()->ContentsToRootFrame(
172 EnclosingIntRect(LayoutObject::AbsoluteBoundingBoxRectForRange( 172 EnclosingIntRect(LayoutObject::AbsoluteBoundingBoxRectForRange(
173 active_match_.Get())))); 173 EphemeralRange(active_match_.Get())))));
174 } 174 }
175 175
176 bool was_active_frame = current_active_match_frame_; 176 bool was_active_frame = current_active_match_frame_;
177 current_active_match_frame_ = true; 177 current_active_match_frame_ = true;
178 178
179 bool is_active = SetMarkerActive(active_match_.Get(), true); 179 bool is_active = SetMarkerActive(active_match_.Get(), true);
180 if (active_now) 180 if (active_now)
181 *active_now = is_active; 181 *active_now = is_active;
182 182
183 // Make sure no node is focused. See http://crbug.com/38700. 183 // Make sure no node is focused. See http://crbug.com/38700.
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after
533 contents_size_for_current_find_match_rects_ = current_contents_size; 533 contents_size_for_current_find_match_rects_ = current_contents_size;
534 find_match_rects_are_valid_ = false; 534 find_match_rects_are_valid_ = false;
535 } 535 }
536 536
537 size_t dead_matches = 0; 537 size_t dead_matches = 0;
538 for (FindMatch& match : find_matches_cache_) { 538 for (FindMatch& match : find_matches_cache_) {
539 if (!match.range_->BoundaryPointsValid() || 539 if (!match.range_->BoundaryPointsValid() ||
540 !match.range_->startContainer()->isConnected()) 540 !match.range_->startContainer()->isConnected())
541 match.rect_ = FloatRect(); 541 match.rect_ = FloatRect();
542 else if (!find_match_rects_are_valid_) 542 else if (!find_match_rects_are_valid_)
543 match.rect_ = FindInPageRectFromRange(match.range_.Get()); 543 match.rect_ = FindInPageRectFromRange(EphemeralRange(match.range_.Get()));
544 544
545 if (match.rect_.IsEmpty()) 545 if (match.rect_.IsEmpty())
546 ++dead_matches; 546 ++dead_matches;
547 } 547 }
548 548
549 // Remove any invalid matches from the cache. 549 // Remove any invalid matches from the cache.
550 if (dead_matches) { 550 if (dead_matches) {
551 HeapVector<FindMatch> filtered_matches; 551 HeapVector<FindMatch> filtered_matches;
552 filtered_matches.ReserveCapacity(find_matches_cache_.size() - dead_matches); 552 filtered_matches.ReserveCapacity(find_matches_cache_.size() - dead_matches);
553 553
(...skipping 14 matching lines...) Expand all
568 ->EnsureTextFinder() 568 ->EnsureTextFinder()
569 .find_match_rects_are_valid_ = false; 569 .find_match_rects_are_valid_ = false;
570 570
571 find_match_rects_are_valid_ = true; 571 find_match_rects_are_valid_ = true;
572 } 572 }
573 573
574 WebFloatRect TextFinder::ActiveFindMatchRect() { 574 WebFloatRect TextFinder::ActiveFindMatchRect() {
575 if (!current_active_match_frame_ || !active_match_) 575 if (!current_active_match_frame_ || !active_match_)
576 return WebFloatRect(); 576 return WebFloatRect();
577 577
578 return WebFloatRect(FindInPageRectFromRange(ActiveMatch())); 578 return WebFloatRect(FindInPageRectFromRange(EphemeralRange(ActiveMatch())));
579 } 579 }
580 580
581 void TextFinder::FindMatchRects(WebVector<WebFloatRect>& output_rects) { 581 void TextFinder::FindMatchRects(WebVector<WebFloatRect>& output_rects) {
582 UpdateFindMatchRects(); 582 UpdateFindMatchRects();
583 583
584 Vector<WebFloatRect> match_rects; 584 Vector<WebFloatRect> match_rects;
585 match_rects.ReserveCapacity(match_rects.size() + find_matches_cache_.size()); 585 match_rects.ReserveCapacity(match_rects.size() + find_matches_cache_.size());
586 for (const FindMatch& match : find_matches_cache_) { 586 for (const FindMatch& match : find_matches_cache_) {
587 DCHECK(!match.rect_.IsEmpty()); 587 DCHECK(!match.rect_.IsEmpty());
588 match_rects.push_back(match.rect_); 588 match_rects.push_back(match.rect_);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
647 647
648 // Clear any user selection, to make sure Find Next continues on from the 648 // Clear any user selection, to make sure Find Next continues on from the
649 // match we just activated. 649 // match we just activated.
650 OwnerFrame().GetFrame()->Selection().Clear(); 650 OwnerFrame().GetFrame()->Selection().Clear();
651 651
652 // Make sure no node is focused. See http://crbug.com/38700. 652 // Make sure no node is focused. See http://crbug.com/38700.
653 OwnerFrame().GetFrame()->GetDocument()->ClearFocusedElement(); 653 OwnerFrame().GetFrame()->GetDocument()->ClearFocusedElement();
654 } 654 }
655 655
656 IntRect active_match_rect; 656 IntRect active_match_rect;
657 IntRect active_match_bounding_box = EnclosingIntRect( 657 IntRect active_match_bounding_box =
658 LayoutObject::AbsoluteBoundingBoxRectForRange(active_match_.Get())); 658 EnclosingIntRect(LayoutObject::AbsoluteBoundingBoxRectForRange(
659 EphemeralRange(active_match_.Get())));
659 660
660 if (!active_match_bounding_box.IsEmpty()) { 661 if (!active_match_bounding_box.IsEmpty()) {
661 if (active_match_->FirstNode() && 662 if (active_match_->FirstNode() &&
662 active_match_->FirstNode()->GetLayoutObject()) { 663 active_match_->FirstNode()->GetLayoutObject()) {
663 active_match_->FirstNode()->GetLayoutObject()->ScrollRectToVisible( 664 active_match_->FirstNode()->GetLayoutObject()->ScrollRectToVisible(
664 LayoutRect(active_match_bounding_box), 665 LayoutRect(active_match_bounding_box),
665 ScrollAlignment::kAlignCenterIfNeeded, 666 ScrollAlignment::kAlignCenterIfNeeded,
666 ScrollAlignment::kAlignCenterIfNeeded, kUserScroll); 667 ScrollAlignment::kAlignCenterIfNeeded, kUserScroll);
667 } 668 }
668 669
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
793 794
794 DEFINE_TRACE(TextFinder) { 795 DEFINE_TRACE(TextFinder) {
795 visitor->Trace(owner_frame_); 796 visitor->Trace(owner_frame_);
796 visitor->Trace(active_match_); 797 visitor->Trace(active_match_);
797 visitor->Trace(resume_scoping_from_range_); 798 visitor->Trace(resume_scoping_from_range_);
798 visitor->Trace(deferred_scoping_work_); 799 visitor->Trace(deferred_scoping_work_);
799 visitor->Trace(find_matches_cache_); 800 visitor->Trace(find_matches_cache_);
800 } 801 }
801 802
802 } // namespace blink 803 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutObject.cpp ('k') | third_party/WebKit/Source/web/tests/TextFinderTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698