Chromium Code Reviews| Index: chrome/renderer/searchbox/searchbox.cc |
| diff --git a/chrome/renderer/searchbox/searchbox.cc b/chrome/renderer/searchbox/searchbox.cc |
| index 348e894c10f0eb085743fb247910e5f3bdc04957..61718479824c53fa855dc606026db9ac03a418f5 100644 |
| --- a/chrome/renderer/searchbox/searchbox.cc |
| +++ b/chrome/renderer/searchbox/searchbox.cc |
| @@ -12,18 +12,23 @@ |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityPolicy.h" |
| #include "third_party/WebKit/Source/WebKit/chromium/public/WebView.h" |
| +namespace { |
| +// Size of the results cache. |
| +const size_t kMaxInstantAutocompleteResultItemCacheSize = 100; |
|
palmer
2013/03/21 22:58:04
Yes, given this, linear search is not bad (and pos
Shishir
2013/03/21 23:38:41
Please see reply in the restricted_id.h file.
|
| +} |
| + |
| SearchBox::SearchBox(content::RenderView* render_view) |
| : content::RenderViewObserver(render_view), |
| content::RenderViewObserverTracker<SearchBox>(render_view), |
| verbatim_(false), |
| selection_start_(0), |
| selection_end_(0), |
| - results_base_(0), |
| start_margin_(0), |
| - last_results_base_(0), |
| is_key_capture_enabled_(false), |
| display_instant_results_(false), |
| - omnibox_font_size_(0) { |
| + omnibox_font_size_(0), |
| + autocomplete_results_cache_(kMaxInstantAutocompleteResultItemCacheSize), |
| + most_visited_items_cache_(kMaxInstantMostVisitedItemCacheSize) { |
| } |
| SearchBox::~SearchBox() { |
| @@ -75,12 +80,14 @@ void SearchBox::NavigateToURL(const GURL& url, |
| url, transition, disposition)); |
| } |
| -void SearchBox::DeleteMostVisitedItem(uint64 most_visited_item_id) { |
| +void SearchBox::DeleteMostVisitedItem( |
| + InstantRestrictedID most_visited_item_id) { |
| render_view()->Send(new ChromeViewHostMsg_SearchBoxDeleteMostVisitedItem( |
| render_view()->GetRoutingID(), most_visited_item_id)); |
| } |
| -void SearchBox::UndoMostVisitedDeletion(uint64 most_visited_item_id) { |
| +void SearchBox::UndoMostVisitedDeletion( |
| + InstantRestrictedID most_visited_item_id) { |
| render_view()->Send(new ChromeViewHostMsg_SearchBoxUndoMostVisitedDeletion( |
| render_view()->GetRoutingID(), most_visited_item_id)); |
| } |
| @@ -115,24 +122,16 @@ gfx::Rect SearchBox::GetPopupBounds() const { |
| static_cast<int>(popup_bounds_.height() / zoom)); |
| } |
| -const std::vector<InstantAutocompleteResult>& |
| - SearchBox::GetAutocompleteResults() { |
| - // Remember the last requested autocomplete_results to account for race |
| - // conditions between autocomplete providers returning new data and the user |
| - // clicking on a suggestion. |
| - last_autocomplete_results_ = autocomplete_results_; |
| - last_results_base_ = results_base_; |
| - return autocomplete_results_; |
| +void SearchBox::GetAutocompleteResults( |
| + std::vector<InstantAutocompleteResultIDPair>* results) const { |
| + autocomplete_results_cache_.GetCurrentItems(results); |
| } |
| -const InstantAutocompleteResult* SearchBox::GetAutocompleteResultWithId( |
| - size_t autocomplete_result_id) const { |
| - if (autocomplete_result_id < last_results_base_ || |
| - autocomplete_result_id >= |
| - last_results_base_ + last_autocomplete_results_.size()) |
| - return NULL; |
| - return &last_autocomplete_results_[ |
| - autocomplete_result_id - last_results_base_]; |
| +bool SearchBox::GetAutocompleteResultWithID( |
| + InstantRestrictedID autocomplete_result_id, |
| + InstantAutocompleteResult* result) const { |
| + return autocomplete_results_cache_.GetItemWithRestrictedID( |
| + autocomplete_result_id, result); |
| } |
| const ThemeBackgroundInfo& SearchBox::GetThemeBackgroundInfo() { |
| @@ -257,8 +256,7 @@ void SearchBox::OnDetermineIfPageSupportsInstant() { |
| void SearchBox::OnAutocompleteResults( |
| const std::vector<InstantAutocompleteResult>& results) { |
| - results_base_ += autocomplete_results_.size(); |
| - autocomplete_results_ = results; |
| + autocomplete_results_cache_.AddItems(results); |
| if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) { |
| DVLOG(1) << render_view() << " OnAutocompleteResults"; |
| extensions_v8::SearchBoxExtension::DispatchAutocompleteResults( |
| @@ -348,10 +346,8 @@ void SearchBox::Reset() { |
| verbatim_ = false; |
| selection_start_ = 0; |
| selection_end_ = 0; |
| - results_base_ = 0; |
| popup_bounds_ = gfx::Rect(); |
| start_margin_ = 0; |
| - autocomplete_results_.clear(); |
| is_key_capture_enabled_ = false; |
| theme_info_ = ThemeBackgroundInfo(); |
| // Don't reset display_instant_results_ to prevent clearing it on committed |
| @@ -362,8 +358,8 @@ void SearchBox::Reset() { |
| } |
| void SearchBox::OnMostVisitedChanged( |
| - const std::vector<InstantMostVisitedItem>& items) { |
| - most_visited_items_ = items; |
| + const std::vector<InstantMostVisitedItemIDPair>& items) { |
| + most_visited_items_cache_.AddItemsWithRestrictedID(items); |
| if (render_view()->GetWebView() && render_view()->GetWebView()->mainFrame()) { |
| extensions_v8::SearchBoxExtension::DispatchMostVisitedChanged( |
| @@ -371,7 +367,14 @@ void SearchBox::OnMostVisitedChanged( |
| } |
| } |
| -const std::vector<InstantMostVisitedItem>& |
| -SearchBox::GetMostVisitedItems() const { |
| - return most_visited_items_; |
| +void SearchBox::GetMostVisitedItems( |
| + std::vector<InstantMostVisitedItemIDPair>* items) const { |
| + return most_visited_items_cache_.GetCurrentItems(items); |
| +} |
| + |
| +bool SearchBox::GetMostVisitedItemWithID( |
| + InstantRestrictedID most_visited_item_id, |
| + InstantMostVisitedItem* item) const { |
| + return most_visited_items_cache_.GetItemWithRestrictedID(most_visited_item_id, |
| + item); |
| } |