| Index: chrome/renderer/searchbox/searchbox_extension.cc
|
| diff --git a/chrome/renderer/searchbox/searchbox_extension.cc b/chrome/renderer/searchbox/searchbox_extension.cc
|
| index 7606a1905ab7633118fe01304f5c9a146a94bec8..524ae548354af881fcfb32d516389c3333802736 100644
|
| --- a/chrome/renderer/searchbox/searchbox_extension.cc
|
| +++ b/chrome/renderer/searchbox/searchbox_extension.cc
|
| @@ -79,16 +79,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 {
|
| @@ -573,25 +563,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);
|
| @@ -750,11 +740,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 {
|
| // Resolve the URL.
|
| @@ -787,12 +777,13 @@ v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateNewTabPage(
|
| if (!render_view || !args.Length()) return v8::Undefined();
|
|
|
| GURL destination_url;
|
| - content::PageTransition transition = content::PAGE_TRANSITION_TYPED;
|
| + content::PageTransition transition = content::PAGE_TRANSITION_AUTO_BOOKMARK;
|
| if (args[0]->IsNumber()) {
|
| - destination_url = MostVisitedItemIDToURL(
|
| - SearchBox::Get(render_view)->GetMostVisitedItems(),
|
| - args[0]->Uint32Value());
|
| - transition = content::PAGE_TRANSITION_AUTO_BOOKMARK;
|
| + InstantMostVisitedItem item;
|
| + if (SearchBox::Get(render_view)->GetMostVisitedItemWithID(
|
| + args[0]->IntegerValue(), &item)) {
|
| + destination_url = item.url;
|
| + }
|
| } else {
|
| destination_url = GURL(V8ValueToUTF16(args[0]));
|
| }
|
| @@ -903,12 +894,14 @@ v8::Handle<v8::Value>
|
| if (!render_view || !args.Length()) return v8::Undefined();
|
|
|
| DVLOG(1) << render_view << " SetSuggestionFromAutocompleteResult";
|
| - 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;
|
|
|
| @@ -951,12 +944,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.
|
| @@ -1003,8 +998,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
|
| @@ -1018,27 +1013,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);
|
|
|