Index: chrome/renderer/searchbox/searchbox_extension.cc |
diff --git a/chrome/renderer/searchbox/searchbox_extension.cc b/chrome/renderer/searchbox/searchbox_extension.cc |
index 25c4e09c1cb55eb41e68681d7746a3f9d8f34710..19f15c38d1eea879d31b60425ce0ccce318a9c90 100644 |
--- a/chrome/renderer/searchbox/searchbox_extension.cc |
+++ b/chrome/renderer/searchbox/searchbox_extension.cc |
@@ -75,16 +75,6 @@ v8::Handle<v8::String> GenerateFaviconURL(uint64 most_visited_item_id) { |
base::Uint64ToString(most_visited_item_id).c_str())); |
} |
-const GURL MostVisitedItemIDToURL( |
- const std::vector<InstantMostVisitedItem>& most_visited_items, |
- uint64 most_visited_item_id) { |
- for (size_t i = 0; i < most_visited_items.size(); ++i) { |
- if (most_visited_items[i].most_visited_item_id == most_visited_item_id) |
- return most_visited_items[i].url; |
- } |
- return GURL(); |
-} |
- |
} // namespace |
namespace extensions_v8 { |
@@ -549,25 +539,25 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetAutocompleteResults( |
if (!render_view) return v8::Undefined(); |
DVLOG(1) << render_view << " GetAutocompleteResults"; |
- const std::vector<InstantAutocompleteResult>& results = |
- SearchBox::Get(render_view)->GetAutocompleteResults(); |
- size_t results_base = SearchBox::Get(render_view)->results_base(); |
+ std::vector<InstantAutocompleteResultIDPair> results; |
+ SearchBox::Get(render_view)->GetAutocompleteResults(&results); |
v8::Handle<v8::Array> results_array = v8::Array::New(results.size()); |
for (size_t i = 0; i < results.size(); ++i) { |
v8::Handle<v8::Object> result = v8::Object::New(); |
result->Set(v8::String::New("provider"), |
- UTF16ToV8String(results[i].provider)); |
- result->Set(v8::String::New("type"), UTF16ToV8String(results[i].type)); |
+ UTF16ToV8String(results[i].second.provider)); |
+ result->Set(v8::String::New("type"), |
+ UTF16ToV8String(results[i].second.type)); |
result->Set(v8::String::New("contents"), |
- UTF16ToV8String(results[i].description)); |
+ UTF16ToV8String(results[i].second.description)); |
result->Set(v8::String::New("destination_url"), |
- UTF16ToV8String(results[i].destination_url)); |
- result->Set(v8::String::New("rid"), v8::Uint32::New(results_base + i)); |
+ UTF16ToV8String(results[i].second.destination_url)); |
+ result->Set(v8::String::New("rid"), v8::Uint32::New(results[i].first)); |
v8::Handle<v8::Object> ranking_data = v8::Object::New(); |
ranking_data->Set(v8::String::New("relevance"), |
- v8::Int32::New(results[i].relevance)); |
+ v8::Int32::New(results[i].second.relevance)); |
result->Set(v8::String::New("rankingData"), ranking_data); |
results_array->Set(i, result); |
@@ -720,11 +710,11 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateSearchBox( |
GURL destination_url; |
content::PageTransition transition = content::PAGE_TRANSITION_TYPED; |
if (args[0]->IsNumber()) { |
- const InstantAutocompleteResult* result = SearchBox::Get(render_view)-> |
- GetAutocompleteResultWithId(args[0]->Uint32Value()); |
- if (result) { |
- destination_url = GURL(result->destination_url); |
- transition = result->transition; |
+ InstantAutocompleteResult result; |
+ if (SearchBox::Get(render_view)->GetAutocompleteResultWithId( |
+ args[0]->IntegerValue(), &result)) { |
+ destination_url = GURL(result.destination_url); |
+ transition = result.transition; |
} |
} else { |
destination_url = GURL(V8ValueToUTF16(args[0])); |
@@ -752,9 +742,11 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateNewTabPage( |
GURL destination_url; |
content::PageTransition transition = content::PAGE_TRANSITION_TYPED; |
if (args[0]->IsNumber()) { |
- destination_url = MostVisitedItemIDToURL( |
- SearchBox::Get(render_view)->GetMostVisitedItems(), |
- args[0]->Uint32Value()); |
+ InstantMostVisitedItem item; |
+ if (SearchBox::Get(render_view)->GetMostVisitedItemWithID( |
+ args[0]->IntegerValue(), &item)) { |
+ destination_url = item.url; |
+ } |
} else { |
destination_url = GURL(V8ValueToUTF16(args[0])); |
} |
@@ -861,12 +853,14 @@ v8::Handle<v8::Value> |
if (!render_view || !args.Length()) return v8::Undefined(); |
DVLOG(1) << render_view << " SetQuerySuggestionFromAutocompleteResult"; |
- const InstantAutocompleteResult* result = SearchBox::Get(render_view)-> |
- GetAutocompleteResultWithId(args[0]->Uint32Value()); |
- if (!result) return v8::Undefined(); |
+ InstantAutocompleteResult result; |
+ if (!SearchBox::Get(render_view)->GetAutocompleteResultWithId( |
+ args[0]->IntegerValue(), &result)) { |
+ return v8::Undefined(); |
+ } |
// We only support selecting autocomplete results that are URLs. |
- string16 text = result->destination_url; |
+ string16 text = result.destination_url; |
InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW; |
InstantSuggestionType type = INSTANT_SUGGESTION_URL; |
@@ -905,12 +899,14 @@ v8::Handle<v8::Value> |
if (!render_view || !args.Length()) return v8::Undefined(); |
DVLOG(1) << render_view << " SetQueryFromAutocompleteResult"; |
- const InstantAutocompleteResult* result = SearchBox::Get(render_view)-> |
- GetAutocompleteResultWithId(args[0]->Uint32Value()); |
- if (!result) return v8::Undefined(); |
+ InstantAutocompleteResult result; |
+ if (!SearchBox::Get(render_view)->GetAutocompleteResultWithId( |
+ args[0]->IntegerValue(), &result)) { |
+ return v8::Undefined(); |
+ } |
// We only support selecting autocomplete results that are URLs. |
- string16 text = result->destination_url; |
+ string16 text = result.destination_url; |
InstantCompleteBehavior behavior = INSTANT_COMPLETE_REPLACE; |
// TODO(jered): Distinguish between history URLs and search provider |
// navsuggest URLs so that we can do proper accounting on history URLs. |
@@ -960,8 +956,8 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetMostVisitedItems( |
const SearchBox* search_box = SearchBox::Get(render_view); |
- const std::vector<InstantMostVisitedItem>& instant_mv_items = |
- search_box->GetMostVisitedItems(); |
+ std::vector<InstantMostVisitedItemIDPair> instant_mv_items; |
+ search_box->GetMostVisitedItems(&instant_mv_items); |
v8::Handle<v8::Array> v8_mv_items = v8::Array::New(instant_mv_items.size()); |
for (size_t i = 0; i < instant_mv_items.size(); ++i) { |
// We set the "dir" attribute of the title, so that in RTL locales, a LTR |
@@ -975,27 +971,26 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetMostVisitedItems( |
// http://yahoo.com is "Yahoo!". In RTL locales, in the New Tab page, the |
// title will be rendered as "!Yahoo" if its "dir" attribute is not set to |
// "ltr". |
+ const InstantMostVisitedItem& mv_item = instant_mv_items[i].second; |
std::string direction; |
- if (base::i18n::StringContainsStrongRTLChars(instant_mv_items[i].title)) |
+ if (base::i18n::StringContainsStrongRTLChars(mv_item.title)) |
direction = kRTLHtmlTextDirection; |
else |
direction = kLTRHtmlTextDirection; |
- string16 title = instant_mv_items[i].title; |
+ string16 title = mv_item.title; |
if (title.empty()) |
- title = UTF8ToUTF16(instant_mv_items[i].url.spec()); |
+ title = UTF8ToUTF16(mv_item.url.spec()); |
+ InstantRestrictedID restricted_id = instant_mv_items[i].first; |
v8::Handle<v8::Object> item = v8::Object::New(); |
- item->Set(v8::String::New("rid"), |
- v8::Int32::New(instant_mv_items[i].most_visited_item_id)); |
+ item->Set(v8::String::New("rid"), v8::Int32::New(restricted_id)); |
item->Set(v8::String::New("thumbnailUrl"), |
- GenerateThumbnailURL(instant_mv_items[i].most_visited_item_id)); |
+ GenerateThumbnailURL(restricted_id)); |
item->Set(v8::String::New("faviconUrl"), |
- GenerateFaviconURL(instant_mv_items[i].most_visited_item_id)); |
- item->Set(v8::String::New("title"), |
- UTF16ToV8String(title)); |
- item->Set(v8::String::New("domain"), |
- UTF8ToV8String(instant_mv_items[i].url.host())); |
+ GenerateFaviconURL(restricted_id)); |
+ item->Set(v8::String::New("title"), UTF16ToV8String(title)); |
+ item->Set(v8::String::New("domain"), UTF8ToV8String(mv_item.url.host())); |
item->Set(v8::String::New("direction"), UTF8ToV8String(direction)); |
v8_mv_items->Set(i, item); |