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

Side by Side Diff: chrome/browser/autocomplete/autocomplete.cc

Issue 119116: Fix crash due to AutocompletePopup trying to draw the old results when they w... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 6 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 "chrome/browser/autocomplete/autocomplete.h" 5 #include "chrome/browser/autocomplete/autocomplete.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "app/l10n_util.h" 9 #include "app/l10n_util.h"
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 747 matching lines...) Expand 10 before | Expand all | Expand 10 after
758 latest_result_.Validate(); 758 latest_result_.Validate();
759 #endif 759 #endif
760 760
761 if (is_synchronous_pass) { 761 if (is_synchronous_pass) {
762 if (!max_delay_timer_.IsRunning()) { 762 if (!max_delay_timer_.IsRunning()) {
763 max_delay_timer_.Start( 763 max_delay_timer_.Start(
764 TimeDelta::FromMilliseconds(kResultUpdateMaxDelayMs), 764 TimeDelta::FromMilliseconds(kResultUpdateMaxDelayMs),
765 this, &AutocompleteController::CommitResult); 765 this, &AutocompleteController::CommitResult);
766 } 766 }
767 767
768 result_.CopyFrom(latest_result_);
769 NotificationService::current()->Notify( 768 NotificationService::current()->Notify(
770 NotificationType::AUTOCOMPLETE_CONTROLLER_SYNCHRONOUS_MATCHES_AVAILABLE, 769 NotificationType::AUTOCOMPLETE_CONTROLLER_SYNCHRONOUS_MATCHES_AVAILABLE,
771 Source<AutocompleteController>(this), NotificationService::NoDetails()); 770 Source<AutocompleteController>(this),
771 Details<const AutocompleteResult>(&latest_result_));
772 } 772 }
773 773
774 if (done_) { 774 if (done_) {
775 CommitResult(); 775 CommitResult();
776 } else if (!update_pending_) { 776 } else if (!update_pending_) {
777 // Coalesce the results for the next kPopupCoalesceMs milliseconds. 777 // Coalesce the results for the next kPopupCoalesceMs milliseconds.
778 update_pending_ = true; 778 update_pending_ = true;
779 coalesce_timer_.Stop(); 779 coalesce_timer_.Stop();
780 coalesce_timer_.Start(TimeDelta::FromMilliseconds(kResultCoalesceMs), this, 780 coalesce_timer_.Start(TimeDelta::FromMilliseconds(kResultCoalesceMs), this,
781 &AutocompleteController::CommitResult); 781 &AutocompleteController::CommitResult);
782 } 782 }
783 } 783 }
784 784
785 void AutocompleteController::CommitResult() { 785 void AutocompleteController::CommitResult() {
786 // The max update interval timer either needs to be reset (if more updates 786 // The max update interval timer either needs to be reset (if more updates
787 // are to come) or stopped (when we're done with the query). The coalesce 787 // are to come) or stopped (when we're done with the query). The coalesce
788 // timer should always just be stopped. 788 // timer should always just be stopped.
789 update_pending_ = false; 789 update_pending_ = false;
790 coalesce_timer_.Stop(); 790 coalesce_timer_.Stop();
791 if (done_) 791 if (done_)
792 max_delay_timer_.Stop(); 792 max_delay_timer_.Stop();
793 else 793 else
794 max_delay_timer_.Reset(); 794 max_delay_timer_.Reset();
795 795
796 result_.CopyFrom(latest_result_); 796 result_.CopyFrom(latest_result_);
797 NotificationService::current()->Notify( 797 NotificationService::current()->Notify(
798 NotificationType::AUTOCOMPLETE_CONTROLLER_RESULT_UPDATED, 798 NotificationType::AUTOCOMPLETE_CONTROLLER_RESULT_UPDATED,
799 Source<AutocompleteController>(this), NotificationService::NoDetails()); 799 Source<AutocompleteController>(this),
800 Details<const AutocompleteResult>(&result_));
800 } 801 }
801 802
802 ACMatches AutocompleteController::GetMatchesNotInLatestResult( 803 ACMatches AutocompleteController::GetMatchesNotInLatestResult(
803 const AutocompleteProvider* provider) const { 804 const AutocompleteProvider* provider) const {
804 DCHECK(provider); 805 DCHECK(provider);
805 806
806 // Determine the set of destination URLs. 807 // Determine the set of destination URLs.
807 std::set<GURL> destination_urls; 808 std::set<GURL> destination_urls;
808 for (AutocompleteResult::const_iterator i(latest_result_.begin()); 809 for (AutocompleteResult::const_iterator i(latest_result_.begin());
809 i != latest_result_.end(); ++i) 810 i != latest_result_.end(); ++i)
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
889 match.contents_class.push_back( 890 match.contents_class.push_back(
890 ACMatchClassification(keyword_offset + input_.text().size(), 891 ACMatchClassification(keyword_offset + input_.text().size(),
891 ACMatchClassification::NONE)); 892 ACMatchClassification::NONE));
892 } 893 }
893 match.destination_url = 894 match.destination_url =
894 HistoryUI::GetHistoryURLWithSearchText(input_.text()); 895 HistoryUI::GetHistoryURLWithSearchText(input_.text());
895 match.transition = PageTransition::AUTO_BOOKMARK; 896 match.transition = PageTransition::AUTO_BOOKMARK;
896 match.provider = history_contents_provider_; 897 match.provider = history_contents_provider_;
897 latest_result_.AddMatch(match); 898 latest_result_.AddMatch(match);
898 } 899 }
OLDNEW
« no previous file with comments | « chrome/browser/autocomplete/autocomplete.h ('k') | chrome/browser/autocomplete/autocomplete_popup_model.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698