| 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;
|
| +}
|
| +
|
| 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);
|
| }
|
|
|