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

Side by Side Diff: chrome/renderer/searchbox/searchbox_extension.cc

Issue 12498002: InstantExtended: Adding InstantRestrictedIDCache. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixing android compile error. Created 7 years, 9 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
« no previous file with comments | « chrome/renderer/searchbox/searchbox.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 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/renderer/searchbox/searchbox_extension.h" 5 #include "chrome/renderer/searchbox/searchbox_extension.h"
6 6
7 #include "base/i18n/rtl.h" 7 #include "base/i18n/rtl.h"
8 #include "base/stringprintf.h" 8 #include "base/stringprintf.h"
9 #include "base/strings/string_number_conversions.h" 9 #include "base/strings/string_number_conversions.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 base::StringPrintf("chrome-search://thumb/%s", 72 base::StringPrintf("chrome-search://thumb/%s",
73 base::Uint64ToString(most_visited_item_id).c_str())); 73 base::Uint64ToString(most_visited_item_id).c_str()));
74 } 74 }
75 75
76 v8::Handle<v8::String> GenerateFaviconURL(uint64 most_visited_item_id) { 76 v8::Handle<v8::String> GenerateFaviconURL(uint64 most_visited_item_id) {
77 return UTF8ToV8String( 77 return UTF8ToV8String(
78 base::StringPrintf("chrome-search://favicon/%s", 78 base::StringPrintf("chrome-search://favicon/%s",
79 base::Uint64ToString(most_visited_item_id).c_str())); 79 base::Uint64ToString(most_visited_item_id).c_str()));
80 } 80 }
81 81
82 const GURL MostVisitedItemIDToURL(
83 const std::vector<InstantMostVisitedItem>& most_visited_items,
84 uint64 most_visited_item_id) {
85 for (size_t i = 0; i < most_visited_items.size(); ++i) {
86 if (most_visited_items[i].most_visited_item_id == most_visited_item_id)
87 return most_visited_items[i].url;
88 }
89 return GURL();
90 }
91
92 } // namespace 82 } // namespace
93 83
94 namespace extensions_v8 { 84 namespace extensions_v8 {
95 85
96 static const char kSearchBoxExtensionName[] = "v8/EmbeddedSearch"; 86 static const char kSearchBoxExtensionName[] = "v8/EmbeddedSearch";
97 87
98 static const char kDispatchChangeEventScript[] = 88 static const char kDispatchChangeEventScript[] =
99 "if (window.chrome &&" 89 "if (window.chrome &&"
100 " window.chrome.embeddedSearch &&" 90 " window.chrome.embeddedSearch &&"
101 " window.chrome.embeddedSearch.searchBox &&" 91 " window.chrome.embeddedSearch.searchBox &&"
(...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 return v8::Boolean::New(base::i18n::IsRTL()); 556 return v8::Boolean::New(base::i18n::IsRTL());
567 } 557 }
568 558
569 // static 559 // static
570 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetAutocompleteResults( 560 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetAutocompleteResults(
571 const v8::Arguments& args) { 561 const v8::Arguments& args) {
572 content::RenderView* render_view = GetRenderView(); 562 content::RenderView* render_view = GetRenderView();
573 if (!render_view) return v8::Undefined(); 563 if (!render_view) return v8::Undefined();
574 564
575 DVLOG(1) << render_view << " GetAutocompleteResults"; 565 DVLOG(1) << render_view << " GetAutocompleteResults";
576 const std::vector<InstantAutocompleteResult>& results = 566 std::vector<InstantAutocompleteResultIDPair> results;
577 SearchBox::Get(render_view)->GetAutocompleteResults(); 567 SearchBox::Get(render_view)->GetAutocompleteResults(&results);
578 size_t results_base = SearchBox::Get(render_view)->results_base();
579 568
580 v8::Handle<v8::Array> results_array = v8::Array::New(results.size()); 569 v8::Handle<v8::Array> results_array = v8::Array::New(results.size());
581 for (size_t i = 0; i < results.size(); ++i) { 570 for (size_t i = 0; i < results.size(); ++i) {
582 v8::Handle<v8::Object> result = v8::Object::New(); 571 v8::Handle<v8::Object> result = v8::Object::New();
583 result->Set(v8::String::New("provider"), 572 result->Set(v8::String::New("provider"),
584 UTF16ToV8String(results[i].provider)); 573 UTF16ToV8String(results[i].second.provider));
585 result->Set(v8::String::New("type"), UTF16ToV8String(results[i].type)); 574 result->Set(v8::String::New("type"),
575 UTF16ToV8String(results[i].second.type));
586 result->Set(v8::String::New("contents"), 576 result->Set(v8::String::New("contents"),
587 UTF16ToV8String(results[i].description)); 577 UTF16ToV8String(results[i].second.description));
588 result->Set(v8::String::New("destination_url"), 578 result->Set(v8::String::New("destination_url"),
589 UTF16ToV8String(results[i].destination_url)); 579 UTF16ToV8String(results[i].second.destination_url));
590 result->Set(v8::String::New("rid"), v8::Uint32::New(results_base + i)); 580 result->Set(v8::String::New("rid"), v8::Uint32::New(results[i].first));
591 581
592 v8::Handle<v8::Object> ranking_data = v8::Object::New(); 582 v8::Handle<v8::Object> ranking_data = v8::Object::New();
593 ranking_data->Set(v8::String::New("relevance"), 583 ranking_data->Set(v8::String::New("relevance"),
594 v8::Int32::New(results[i].relevance)); 584 v8::Int32::New(results[i].second.relevance));
595 result->Set(v8::String::New("rankingData"), ranking_data); 585 result->Set(v8::String::New("rankingData"), ranking_data);
596 586
597 results_array->Set(i, result); 587 results_array->Set(i, result);
598 } 588 }
599 return results_array; 589 return results_array;
600 } 590 }
601 591
602 // static 592 // static
603 v8::Handle<v8::Value> SearchBoxExtensionWrapper::IsKeyCaptureEnabled( 593 v8::Handle<v8::Value> SearchBoxExtensionWrapper::IsKeyCaptureEnabled(
604 const v8::Arguments& args) { 594 const v8::Arguments& args) {
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
743 733
744 // static 734 // static
745 v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateSearchBox( 735 v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateSearchBox(
746 const v8::Arguments& args) { 736 const v8::Arguments& args) {
747 content::RenderView* render_view = GetRenderView(); 737 content::RenderView* render_view = GetRenderView();
748 if (!render_view || !args.Length()) return v8::Undefined(); 738 if (!render_view || !args.Length()) return v8::Undefined();
749 739
750 GURL destination_url; 740 GURL destination_url;
751 content::PageTransition transition = content::PAGE_TRANSITION_TYPED; 741 content::PageTransition transition = content::PAGE_TRANSITION_TYPED;
752 if (args[0]->IsNumber()) { 742 if (args[0]->IsNumber()) {
753 const InstantAutocompleteResult* result = SearchBox::Get(render_view)-> 743 InstantAutocompleteResult result;
754 GetAutocompleteResultWithId(args[0]->Uint32Value()); 744 if (SearchBox::Get(render_view)->GetAutocompleteResultWithID(
755 if (result) { 745 args[0]->IntegerValue(), &result)) {
756 destination_url = GURL(result->destination_url); 746 destination_url = GURL(result.destination_url);
757 transition = result->transition; 747 transition = result.transition;
758 } 748 }
759 } else { 749 } else {
760 // Resolve the URL. 750 // Resolve the URL.
761 const string16& possibly_relative_url = V8ValueToUTF16(args[0]); 751 const string16& possibly_relative_url = V8ValueToUTF16(args[0]);
762 WebKit::WebView* webview = render_view->GetWebView(); 752 WebKit::WebView* webview = render_view->GetWebView();
763 if (!possibly_relative_url.empty() && webview) { 753 if (!possibly_relative_url.empty() && webview) {
764 GURL current_url(webview->mainFrame()->document().url()); 754 GURL current_url(webview->mainFrame()->document().url());
765 destination_url = current_url.Resolve(possibly_relative_url); 755 destination_url = current_url.Resolve(possibly_relative_url);
766 } 756 }
767 } 757 }
(...skipping 12 matching lines...) Expand all
780 return v8::Undefined(); 770 return v8::Undefined();
781 } 771 }
782 772
783 // static 773 // static
784 v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateNewTabPage( 774 v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateNewTabPage(
785 const v8::Arguments& args) { 775 const v8::Arguments& args) {
786 content::RenderView* render_view = GetRenderView(); 776 content::RenderView* render_view = GetRenderView();
787 if (!render_view || !args.Length()) return v8::Undefined(); 777 if (!render_view || !args.Length()) return v8::Undefined();
788 778
789 GURL destination_url; 779 GURL destination_url;
790 content::PageTransition transition = content::PAGE_TRANSITION_TYPED; 780 content::PageTransition transition = content::PAGE_TRANSITION_AUTO_BOOKMARK;
791 if (args[0]->IsNumber()) { 781 if (args[0]->IsNumber()) {
792 destination_url = MostVisitedItemIDToURL( 782 InstantMostVisitedItem item;
793 SearchBox::Get(render_view)->GetMostVisitedItems(), 783 if (SearchBox::Get(render_view)->GetMostVisitedItemWithID(
794 args[0]->Uint32Value()); 784 args[0]->IntegerValue(), &item)) {
795 transition = content::PAGE_TRANSITION_AUTO_BOOKMARK; 785 destination_url = item.url;
786 }
796 } else { 787 } else {
797 destination_url = GURL(V8ValueToUTF16(args[0])); 788 destination_url = GURL(V8ValueToUTF16(args[0]));
798 } 789 }
799 790
800 DVLOG(1) << render_view << " NavigateNewTabPage: " << destination_url; 791 DVLOG(1) << render_view << " NavigateNewTabPage: " << destination_url;
801 792
802 // Navigate the main frame. 793 // Navigate the main frame.
803 if (destination_url.is_valid()) { 794 if (destination_url.is_valid()) {
804 WindowOpenDisposition disposition = CURRENT_TAB; 795 WindowOpenDisposition disposition = CURRENT_TAB;
805 if (args[1]->Uint32Value() == 2) 796 if (args[1]->Uint32Value() == 2)
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
896 } 887 }
897 888
898 // static 889 // static
899 v8::Handle<v8::Value> 890 v8::Handle<v8::Value>
900 SearchBoxExtensionWrapper::SetSuggestionFromAutocompleteResult( 891 SearchBoxExtensionWrapper::SetSuggestionFromAutocompleteResult(
901 const v8::Arguments& args) { 892 const v8::Arguments& args) {
902 content::RenderView* render_view = GetRenderView(); 893 content::RenderView* render_view = GetRenderView();
903 if (!render_view || !args.Length()) return v8::Undefined(); 894 if (!render_view || !args.Length()) return v8::Undefined();
904 895
905 DVLOG(1) << render_view << " SetSuggestionFromAutocompleteResult"; 896 DVLOG(1) << render_view << " SetSuggestionFromAutocompleteResult";
906 const InstantAutocompleteResult* result = SearchBox::Get(render_view)-> 897 InstantAutocompleteResult result;
907 GetAutocompleteResultWithId(args[0]->Uint32Value()); 898 if (!SearchBox::Get(render_view)->GetAutocompleteResultWithID(
908 if (!result) return v8::Undefined(); 899 args[0]->IntegerValue(), &result)) {
900 return v8::Undefined();
901 }
909 902
910 // We only support selecting autocomplete results that are URLs. 903 // We only support selecting autocomplete results that are URLs.
911 string16 text = result->destination_url; 904 string16 text = result.destination_url;
912 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW; 905 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW;
913 InstantSuggestionType type = INSTANT_SUGGESTION_URL; 906 InstantSuggestionType type = INSTANT_SUGGESTION_URL;
914 907
915 SearchBox* search_box = SearchBox::Get(render_view); 908 SearchBox* search_box = SearchBox::Get(render_view);
916 std::vector<InstantSuggestion> suggestions; 909 std::vector<InstantSuggestion> suggestions;
917 suggestions.push_back( 910 suggestions.push_back(
918 InstantSuggestion(text, behavior, type, search_box->query())); 911 InstantSuggestion(text, behavior, type, search_box->query()));
919 search_box->SetSuggestions(suggestions); 912 search_box->SetSuggestions(suggestions);
920 913
921 return v8::Undefined(); 914 return v8::Undefined();
(...skipping 22 matching lines...) Expand all
944 return v8::Undefined(); 937 return v8::Undefined();
945 } 938 }
946 939
947 v8::Handle<v8::Value> 940 v8::Handle<v8::Value>
948 SearchBoxExtensionWrapper::SetQueryFromAutocompleteResult( 941 SearchBoxExtensionWrapper::SetQueryFromAutocompleteResult(
949 const v8::Arguments& args) { 942 const v8::Arguments& args) {
950 content::RenderView* render_view = GetRenderView(); 943 content::RenderView* render_view = GetRenderView();
951 if (!render_view || !args.Length()) return v8::Undefined(); 944 if (!render_view || !args.Length()) return v8::Undefined();
952 945
953 DVLOG(1) << render_view << " SetQueryFromAutocompleteResult"; 946 DVLOG(1) << render_view << " SetQueryFromAutocompleteResult";
954 const InstantAutocompleteResult* result = SearchBox::Get(render_view)-> 947 InstantAutocompleteResult result;
955 GetAutocompleteResultWithId(args[0]->Uint32Value()); 948 if (!SearchBox::Get(render_view)->GetAutocompleteResultWithID(
956 if (!result) return v8::Undefined(); 949 args[0]->IntegerValue(), &result)) {
950 return v8::Undefined();
951 }
957 952
958 // We only support selecting autocomplete results that are URLs. 953 // We only support selecting autocomplete results that are URLs.
959 string16 text = result->destination_url; 954 string16 text = result.destination_url;
960 InstantCompleteBehavior behavior = INSTANT_COMPLETE_REPLACE; 955 InstantCompleteBehavior behavior = INSTANT_COMPLETE_REPLACE;
961 // TODO(jered): Distinguish between history URLs and search provider 956 // TODO(jered): Distinguish between history URLs and search provider
962 // navsuggest URLs so that we can do proper accounting on history URLs. 957 // navsuggest URLs so that we can do proper accounting on history URLs.
963 InstantSuggestionType type = INSTANT_SUGGESTION_URL; 958 InstantSuggestionType type = INSTANT_SUGGESTION_URL;
964 959
965 SearchBox* search_box = SearchBox::Get(render_view); 960 SearchBox* search_box = SearchBox::Get(render_view);
966 std::vector<InstantSuggestion> suggestions; 961 std::vector<InstantSuggestion> suggestions;
967 suggestions.push_back( 962 suggestions.push_back(
968 InstantSuggestion(text, behavior, type, search_box->query())); 963 InstantSuggestion(text, behavior, type, search_box->query()));
969 search_box->SetSuggestions(suggestions); 964 search_box->SetSuggestions(suggestions);
(...skipping 26 matching lines...) Expand all
996 // static 991 // static
997 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetMostVisitedItems( 992 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetMostVisitedItems(
998 const v8::Arguments& args) { 993 const v8::Arguments& args) {
999 content::RenderView* render_view = GetRenderView(); 994 content::RenderView* render_view = GetRenderView();
1000 if (!render_view) 995 if (!render_view)
1001 return v8::Undefined(); 996 return v8::Undefined();
1002 DVLOG(1) << render_view << " GetMostVisitedItems"; 997 DVLOG(1) << render_view << " GetMostVisitedItems";
1003 998
1004 const SearchBox* search_box = SearchBox::Get(render_view); 999 const SearchBox* search_box = SearchBox::Get(render_view);
1005 1000
1006 const std::vector<InstantMostVisitedItem>& instant_mv_items = 1001 std::vector<InstantMostVisitedItemIDPair> instant_mv_items;
1007 search_box->GetMostVisitedItems(); 1002 search_box->GetMostVisitedItems(&instant_mv_items);
1008 v8::Handle<v8::Array> v8_mv_items = v8::Array::New(instant_mv_items.size()); 1003 v8::Handle<v8::Array> v8_mv_items = v8::Array::New(instant_mv_items.size());
1009 for (size_t i = 0; i < instant_mv_items.size(); ++i) { 1004 for (size_t i = 0; i < instant_mv_items.size(); ++i) {
1010 // We set the "dir" attribute of the title, so that in RTL locales, a LTR 1005 // We set the "dir" attribute of the title, so that in RTL locales, a LTR
1011 // title is rendered left-to-right and truncated from the right. For 1006 // title is rendered left-to-right and truncated from the right. For
1012 // example, the title of http://msdn.microsoft.com/en-us/default.aspx is 1007 // example, the title of http://msdn.microsoft.com/en-us/default.aspx is
1013 // "MSDN: Microsoft developer network". In RTL locales, in the New Tab 1008 // "MSDN: Microsoft developer network". In RTL locales, in the New Tab
1014 // page, if the "dir" of this title is not specified, it takes Chrome UI's 1009 // page, if the "dir" of this title is not specified, it takes Chrome UI's
1015 // directionality. So the title will be truncated as "soft developer 1010 // directionality. So the title will be truncated as "soft developer
1016 // network". Setting the "dir" attribute as "ltr" renders the truncated 1011 // network". Setting the "dir" attribute as "ltr" renders the truncated
1017 // title as "MSDN: Microsoft D...". As another example, the title of 1012 // title as "MSDN: Microsoft D...". As another example, the title of
1018 // http://yahoo.com is "Yahoo!". In RTL locales, in the New Tab page, the 1013 // http://yahoo.com is "Yahoo!". In RTL locales, in the New Tab page, the
1019 // title will be rendered as "!Yahoo" if its "dir" attribute is not set to 1014 // title will be rendered as "!Yahoo" if its "dir" attribute is not set to
1020 // "ltr". 1015 // "ltr".
1016 const InstantMostVisitedItem& mv_item = instant_mv_items[i].second;
1021 std::string direction; 1017 std::string direction;
1022 if (base::i18n::StringContainsStrongRTLChars(instant_mv_items[i].title)) 1018 if (base::i18n::StringContainsStrongRTLChars(mv_item.title))
1023 direction = kRTLHtmlTextDirection; 1019 direction = kRTLHtmlTextDirection;
1024 else 1020 else
1025 direction = kLTRHtmlTextDirection; 1021 direction = kLTRHtmlTextDirection;
1026 1022
1027 string16 title = instant_mv_items[i].title; 1023 string16 title = mv_item.title;
1028 if (title.empty()) 1024 if (title.empty())
1029 title = UTF8ToUTF16(instant_mv_items[i].url.spec()); 1025 title = UTF8ToUTF16(mv_item.url.spec());
1030 1026
1027 InstantRestrictedID restricted_id = instant_mv_items[i].first;
1031 v8::Handle<v8::Object> item = v8::Object::New(); 1028 v8::Handle<v8::Object> item = v8::Object::New();
1032 item->Set(v8::String::New("rid"), 1029 item->Set(v8::String::New("rid"), v8::Int32::New(restricted_id));
1033 v8::Int32::New(instant_mv_items[i].most_visited_item_id));
1034 item->Set(v8::String::New("thumbnailUrl"), 1030 item->Set(v8::String::New("thumbnailUrl"),
1035 GenerateThumbnailURL(instant_mv_items[i].most_visited_item_id)); 1031 GenerateThumbnailURL(restricted_id));
1036 item->Set(v8::String::New("faviconUrl"), 1032 item->Set(v8::String::New("faviconUrl"),
1037 GenerateFaviconURL(instant_mv_items[i].most_visited_item_id)); 1033 GenerateFaviconURL(restricted_id));
1038 item->Set(v8::String::New("title"), 1034 item->Set(v8::String::New("title"), UTF16ToV8String(title));
1039 UTF16ToV8String(title)); 1035 item->Set(v8::String::New("domain"), UTF8ToV8String(mv_item.url.host()));
1040 item->Set(v8::String::New("domain"),
1041 UTF8ToV8String(instant_mv_items[i].url.host()));
1042 item->Set(v8::String::New("direction"), UTF8ToV8String(direction)); 1036 item->Set(v8::String::New("direction"), UTF8ToV8String(direction));
1043 1037
1044 v8_mv_items->Set(i, item); 1038 v8_mv_items->Set(i, item);
1045 } 1039 }
1046 return v8_mv_items; 1040 return v8_mv_items;
1047 } 1041 }
1048 1042
1049 // static 1043 // static
1050 v8::Handle<v8::Value> SearchBoxExtensionWrapper::DeleteMostVisitedItem( 1044 v8::Handle<v8::Value> SearchBoxExtensionWrapper::DeleteMostVisitedItem(
1051 const v8::Arguments& args) { 1045 const v8::Arguments& args) {
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
1212 void SearchBoxExtension::DispatchMostVisitedChanged( 1206 void SearchBoxExtension::DispatchMostVisitedChanged(
1213 WebKit::WebFrame* frame) { 1207 WebKit::WebFrame* frame) {
1214 Dispatch(frame, kDispatchMostVisitedChangedScript); 1208 Dispatch(frame, kDispatchMostVisitedChangedScript);
1215 } 1209 }
1216 1210
1217 void SearchBoxExtension::DispatchBarsHidden(WebKit::WebFrame* frame) { 1211 void SearchBoxExtension::DispatchBarsHidden(WebKit::WebFrame* frame) {
1218 Dispatch(frame, kDispatchBarsHiddenEventScript); 1212 Dispatch(frame, kDispatchBarsHiddenEventScript);
1219 } 1213 }
1220 1214
1221 } // namespace extensions_v8 1215 } // namespace extensions_v8
OLDNEW
« no previous file with comments | « chrome/renderer/searchbox/searchbox.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698