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

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

Issue 12771013: Instant: Make clicks on Most Visited items work. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Cancel 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 276 matching lines...) Expand 10 before | Expand all | Expand 10 after
287 // Gets whether the browser is capturing key strokes. 287 // Gets whether the browser is capturing key strokes.
288 static v8::Handle<v8::Value> IsKeyCaptureEnabled(const v8::Arguments& args); 288 static v8::Handle<v8::Value> IsKeyCaptureEnabled(const v8::Arguments& args);
289 289
290 // Gets the font family of the text in the omnibox. 290 // Gets the font family of the text in the omnibox.
291 static v8::Handle<v8::Value> GetFont(const v8::Arguments& args); 291 static v8::Handle<v8::Value> GetFont(const v8::Arguments& args);
292 292
293 // Gets the font size of the text in the omnibox. 293 // Gets the font size of the text in the omnibox.
294 static v8::Handle<v8::Value> GetFontSize(const v8::Arguments& args); 294 static v8::Handle<v8::Value> GetFontSize(const v8::Arguments& args);
295 295
296 // Navigates the window to a URL represented by either a URL string or a 296 // Navigates the window to a URL represented by either a URL string or a
297 // restricted ID. 297 // restricted ID. The two variants handle restricted IDs in their
298 // respective namespaces.
299 static v8::Handle<v8::Value> NavigateSearchBox(const v8::Arguments& args);
300 static v8::Handle<v8::Value> NavigateNewTabPage(const v8::Arguments& args);
301 // DEPRECATED: TODO(sreeram): Remove when google.com no longer uses this.
298 static v8::Handle<v8::Value> NavigateContentWindow(const v8::Arguments& args); 302 static v8::Handle<v8::Value> NavigateContentWindow(const v8::Arguments& args);
299 303
300 // Sets ordered suggestions. Valid for current |value|. 304 // Sets ordered suggestions. Valid for current |value|.
301 static v8::Handle<v8::Value> SetSuggestions(const v8::Arguments& args); 305 static v8::Handle<v8::Value> SetSuggestions(const v8::Arguments& args);
302 306
303 // Sets the text to be autocompleted into the search box. 307 // Sets the text to be autocompleted into the search box.
304 static v8::Handle<v8::Value> SetQuerySuggestion(const v8::Arguments& args); 308 static v8::Handle<v8::Value> SetQuerySuggestion(const v8::Arguments& args);
305 309
306 // Like |SetQuerySuggestion| but uses a restricted ID to identify the text. 310 // Like |SetQuerySuggestion| but uses a restricted autocomplete result ID to
311 // identify the text.
307 static v8::Handle<v8::Value> SetQuerySuggestionFromAutocompleteResult( 312 static v8::Handle<v8::Value> SetQuerySuggestionFromAutocompleteResult(
308 const v8::Arguments& args); 313 const v8::Arguments& args);
309 314
310 // Sets the search box text, completely replacing what the user typed. 315 // Sets the search box text, completely replacing what the user typed.
311 static v8::Handle<v8::Value> SetQuery(const v8::Arguments& args); 316 static v8::Handle<v8::Value> SetQuery(const v8::Arguments& args);
312 317
313 // Like |SetQuery| but uses a restricted ID to identify the text. 318 // Like |SetQuery| but uses a restricted autocomplete result ID to identify
319 // the text.
314 static v8::Handle<v8::Value> SetQueryFromAutocompleteResult( 320 static v8::Handle<v8::Value> SetQueryFromAutocompleteResult(
315 const v8::Arguments& args); 321 const v8::Arguments& args);
316 322
317 // Requests the overlay be shown with the specified contents and height. 323 // Requests the overlay be shown with the specified contents and height.
318 static v8::Handle<v8::Value> ShowOverlay(const v8::Arguments& args); 324 static v8::Handle<v8::Value> ShowOverlay(const v8::Arguments& args);
319 325
320 // Sets the focus to the omnibox. 326 // Sets the focus to the omnibox.
321 static v8::Handle<v8::Value> FocusOmnibox(const v8::Arguments& args); 327 static v8::Handle<v8::Value> FocusOmnibox(const v8::Arguments& args);
322 328
323 // Start capturing user key strokes. 329 // Start capturing user key strokes.
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 if (name->Equals(v8::String::New("GetDisplayInstantResults"))) 382 if (name->Equals(v8::String::New("GetDisplayInstantResults")))
377 return v8::FunctionTemplate::New(GetDisplayInstantResults); 383 return v8::FunctionTemplate::New(GetDisplayInstantResults);
378 if (name->Equals(v8::String::New("GetThemeBackgroundInfo"))) 384 if (name->Equals(v8::String::New("GetThemeBackgroundInfo")))
379 return v8::FunctionTemplate::New(GetThemeBackgroundInfo); 385 return v8::FunctionTemplate::New(GetThemeBackgroundInfo);
380 if (name->Equals(v8::String::New("IsKeyCaptureEnabled"))) 386 if (name->Equals(v8::String::New("IsKeyCaptureEnabled")))
381 return v8::FunctionTemplate::New(IsKeyCaptureEnabled); 387 return v8::FunctionTemplate::New(IsKeyCaptureEnabled);
382 if (name->Equals(v8::String::New("GetFont"))) 388 if (name->Equals(v8::String::New("GetFont")))
383 return v8::FunctionTemplate::New(GetFont); 389 return v8::FunctionTemplate::New(GetFont);
384 if (name->Equals(v8::String::New("GetFontSize"))) 390 if (name->Equals(v8::String::New("GetFontSize")))
385 return v8::FunctionTemplate::New(GetFontSize); 391 return v8::FunctionTemplate::New(GetFontSize);
392 if (name->Equals(v8::String::New("NavigateSearchBox")))
393 return v8::FunctionTemplate::New(NavigateSearchBox);
394 if (name->Equals(v8::String::New("NavigateNewTabPage")))
395 return v8::FunctionTemplate::New(NavigateNewTabPage);
386 if (name->Equals(v8::String::New("NavigateContentWindow"))) 396 if (name->Equals(v8::String::New("NavigateContentWindow")))
387 return v8::FunctionTemplate::New(NavigateContentWindow); 397 return v8::FunctionTemplate::New(NavigateContentWindow);
388 if (name->Equals(v8::String::New("SetSuggestions"))) 398 if (name->Equals(v8::String::New("SetSuggestions")))
389 return v8::FunctionTemplate::New(SetSuggestions); 399 return v8::FunctionTemplate::New(SetSuggestions);
390 if (name->Equals(v8::String::New("SetQuerySuggestion"))) 400 if (name->Equals(v8::String::New("SetQuerySuggestion")))
391 return v8::FunctionTemplate::New(SetQuerySuggestion); 401 return v8::FunctionTemplate::New(SetQuerySuggestion);
392 if (name->Equals(v8::String::New("SetQuerySuggestionFromAutocompleteResult"))) 402 if (name->Equals(v8::String::New("SetQuerySuggestionFromAutocompleteResult")))
393 return v8::FunctionTemplate::New(SetQuerySuggestionFromAutocompleteResult); 403 return v8::FunctionTemplate::New(SetQuerySuggestionFromAutocompleteResult);
394 if (name->Equals(v8::String::New("SetQuery"))) 404 if (name->Equals(v8::String::New("SetQuery")))
395 return v8::FunctionTemplate::New(SetQuery); 405 return v8::FunctionTemplate::New(SetQuery);
(...skipping 277 matching lines...) Expand 10 before | Expand all | Expand 10 after
673 // static 683 // static
674 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetFontSize( 684 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetFontSize(
675 const v8::Arguments& args) { 685 const v8::Arguments& args) {
676 content::RenderView* render_view = GetRenderView(); 686 content::RenderView* render_view = GetRenderView();
677 if (!render_view) return v8::Undefined(); 687 if (!render_view) return v8::Undefined();
678 688
679 return v8::Uint32::New(SearchBox::Get(render_view)->omnibox_font_size()); 689 return v8::Uint32::New(SearchBox::Get(render_view)->omnibox_font_size());
680 } 690 }
681 691
682 // static 692 // static
683 v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateContentWindow( 693 v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateSearchBox(
684 const v8::Arguments& args) { 694 const v8::Arguments& args) {
685 content::RenderView* render_view = GetRenderView(); 695 content::RenderView* render_view = GetRenderView();
686 if (!render_view || !args.Length()) return v8::Undefined(); 696 if (!render_view || !args.Length()) return v8::Undefined();
687 697
688 GURL destination_url; 698 GURL destination_url;
689 content::PageTransition transition = content::PAGE_TRANSITION_TYPED; 699 content::PageTransition transition = content::PAGE_TRANSITION_TYPED;
690 if (args[0]->IsNumber()) { 700 if (args[0]->IsNumber()) {
691 const InstantAutocompleteResult* result = SearchBox::Get(render_view)-> 701 const InstantAutocompleteResult* result = SearchBox::Get(render_view)->
692 GetAutocompleteResultWithId(args[0]->Uint32Value()); 702 GetAutocompleteResultWithId(args[0]->Uint32Value());
693 if (result) { 703 if (result) {
694 destination_url = GURL(result->destination_url); 704 destination_url = GURL(result->destination_url);
695 transition = result->transition; 705 transition = result->transition;
696 } 706 }
697 } else { 707 } else {
698 destination_url = GURL(V8ValueToUTF16(args[0])); 708 destination_url = GURL(V8ValueToUTF16(args[0]));
699 } 709 }
700 710
711 DVLOG(1) << render_view << " NavigateSearchBox: " << destination_url;
712
701 // Navigate the main frame. 713 // Navigate the main frame.
702 if (destination_url.is_valid()) { 714 if (destination_url.is_valid()) {
703 WindowOpenDisposition disposition = CURRENT_TAB; 715 WindowOpenDisposition disposition = CURRENT_TAB;
716 if (args[1]->Uint32Value() == 2)
717 disposition = NEW_BACKGROUND_TAB;
718 SearchBox::Get(render_view)->NavigateToURL(
719 destination_url, transition, disposition);
720 }
721 return v8::Undefined();
722 }
723
724 // static
725 v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateNewTabPage(
726 const v8::Arguments& args) {
727 content::RenderView* render_view = GetRenderView();
728 if (!render_view || !args.Length()) return v8::Undefined();
729
730 GURL destination_url;
731 content::PageTransition transition = content::PAGE_TRANSITION_TYPED;
732 if (args[0]->IsNumber()) {
733 destination_url = GURL(SearchBox::Get(render_view)->MostVisitedItemIDToURL(
734 args[0]->Uint32Value()));
735 } else {
736 destination_url = GURL(V8ValueToUTF16(args[0]));
737 }
738
739 DVLOG(1) << render_view << " NavigateNewTabPage: " << destination_url;
740
741 // Navigate the main frame.
742 if (destination_url.is_valid()) {
743 WindowOpenDisposition disposition = CURRENT_TAB;
704 if (args[1]->Uint32Value() == 2) 744 if (args[1]->Uint32Value() == 2)
705 disposition = NEW_BACKGROUND_TAB; 745 disposition = NEW_BACKGROUND_TAB;
706 SearchBox::Get(render_view)->NavigateToURL( 746 SearchBox::Get(render_view)->NavigateToURL(
707 destination_url, transition, disposition); 747 destination_url, transition, disposition);
708 } 748 }
709 return v8::Undefined(); 749 return v8::Undefined();
710 } 750 }
711 751
712 // static 752 // static
753 v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateContentWindow(
754 const v8::Arguments& args) {
755 content::RenderView* render_view = GetRenderView();
756 if (!render_view || !args.Length()) return v8::Undefined();
757
758 DVLOG(1) << render_view << " NavigateContentWindow; query="
759 << SearchBox::Get(render_view)->query();
760
761 // If the query is blank and verbatim is false, this must be the NTP. If the
762 // user were clicking on an autocomplete suggestion, either the query would
763 // be non-blank, or it would be blank due to SetQueryFromAutocompleteResult()
764 // but verbatim would be true.
765 if (SearchBox::Get(render_view)->query().empty() &&
766 !SearchBox::Get(render_view)->verbatim())
767 return NavigateNewTabPage(args);
768 return NavigateSearchBox(args);
769 }
770
771 // static
713 v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetSuggestions( 772 v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetSuggestions(
714 const v8::Arguments& args) { 773 const v8::Arguments& args) {
715 content::RenderView* render_view = GetRenderView(); 774 content::RenderView* render_view = GetRenderView();
716 if (!render_view || !args.Length()) return v8::Undefined(); 775 if (!render_view || !args.Length()) return v8::Undefined();
717 776
718 DVLOG(1) << render_view << " SetSuggestions"; 777 DVLOG(1) << render_view << " SetSuggestions";
719 v8::Handle<v8::Object> suggestion_json = args[0]->ToObject(); 778 v8::Handle<v8::Object> suggestion_json = args[0]->ToObject();
720 779
721 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW; 780 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW;
722 InstantSuggestionType type = INSTANT_SUGGESTION_SEARCH; 781 InstantSuggestionType type = INSTANT_SUGGESTION_SEARCH;
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
876 935
877 DVLOG(1) << render_view << " GetMostVisitedItems"; 936 DVLOG(1) << render_view << " GetMostVisitedItems";
878 937
879 const std::vector<MostVisitedItem>& items = 938 const std::vector<MostVisitedItem>& items =
880 SearchBox::Get(render_view)->GetMostVisitedItems(); 939 SearchBox::Get(render_view)->GetMostVisitedItems();
881 v8::Handle<v8::Array> items_array = v8::Array::New(items.size()); 940 v8::Handle<v8::Array> items_array = v8::Array::New(items.size());
882 for (size_t i = 0; i < items.size(); ++i) { 941 for (size_t i = 0; i < items.size(); ++i) {
883 942
884 const string16 url = UTF8ToUTF16(items[i].url.spec()); 943 const string16 url = UTF8ToUTF16(items[i].url.spec());
885 const string16 host = UTF8ToUTF16(items[i].url.host()); 944 const string16 host = UTF8ToUTF16(items[i].url.host());
886 int restrict_id = 945 int most_visited_item_id =
887 SearchBox::Get(render_view)->UrlToRestrictedId(url); 946 SearchBox::Get(render_view)->URLToMostVisitedItemID(url);
888 947
889 // We set the "dir" attribute of the title, so that in RTL locales, a LTR 948 // We set the "dir" attribute of the title, so that in RTL locales, a LTR
890 // title is rendered left-to-right and truncated from the right. For 949 // title is rendered left-to-right and truncated from the right. For
891 // example, the title of http://msdn.microsoft.com/en-us/default.aspx is 950 // example, the title of http://msdn.microsoft.com/en-us/default.aspx is
892 // "MSDN: Microsoft developer network". In RTL locales, in the New Tab 951 // "MSDN: Microsoft developer network". In RTL locales, in the New Tab
893 // page, if the "dir" of this title is not specified, it takes Chrome UI's 952 // page, if the "dir" of this title is not specified, it takes Chrome UI's
894 // directionality. So the title will be truncated as "soft developer 953 // directionality. So the title will be truncated as "soft developer
895 // network". Setting the "dir" attribute as "ltr" renders the truncated 954 // network". Setting the "dir" attribute as "ltr" renders the truncated
896 // title as "MSDN: Microsoft D...". As another example, the title of 955 // title as "MSDN: Microsoft D...". As another example, the title of
897 // http://yahoo.com is "Yahoo!". In RTL locales, in the New Tab page, the 956 // http://yahoo.com is "Yahoo!". In RTL locales, in the New Tab page, the
898 // title will be rendered as "!Yahoo" if its "dir" attribute is not set to 957 // title will be rendered as "!Yahoo" if its "dir" attribute is not set to
899 // "ltr". 958 // "ltr".
900 std::string direction; 959 std::string direction;
901 if (base::i18n::StringContainsStrongRTLChars(items[i].title)) 960 if (base::i18n::StringContainsStrongRTLChars(items[i].title))
902 direction = kRTLHtmlTextDirection; 961 direction = kRTLHtmlTextDirection;
903 else 962 else
904 direction = kLTRHtmlTextDirection; 963 direction = kLTRHtmlTextDirection;
905 964
906 string16 title = items[i].title; 965 string16 title = items[i].title;
907 if (title.empty()) 966 if (title.empty())
908 title = url; 967 title = url;
909 968
910 v8::Handle<v8::Object> item = v8::Object::New(); 969 v8::Handle<v8::Object> item = v8::Object::New();
911 item->Set(v8::String::New("rid"), 970 item->Set(v8::String::New("rid"),
912 v8::Int32::New(restrict_id)); 971 v8::Int32::New(most_visited_item_id));
913 item->Set(v8::String::New("thumbnailUrl"), 972 item->Set(v8::String::New("thumbnailUrl"),
914 UTF16ToV8String(SearchBox::Get(render_view)-> 973 UTF16ToV8String(SearchBox::Get(render_view)->
915 GenerateThumbnailUrl(restrict_id))); 974 GenerateThumbnailUrl(most_visited_item_id)));
916 item->Set(v8::String::New("faviconUrl"), 975 item->Set(v8::String::New("faviconUrl"),
917 UTF16ToV8String(SearchBox::Get(render_view)-> 976 UTF16ToV8String(SearchBox::Get(render_view)->
918 GenerateFaviconUrl(restrict_id))); 977 GenerateFaviconUrl(most_visited_item_id)));
919 item->Set(v8::String::New("title"), 978 item->Set(v8::String::New("title"),
920 UTF16ToV8String(title)); 979 UTF16ToV8String(title));
921 item->Set(v8::String::New("domain"), UTF16ToV8String(host)); 980 item->Set(v8::String::New("domain"), UTF16ToV8String(host));
922 item->Set(v8::String::New("direction"), 981 item->Set(v8::String::New("direction"),
923 UTF8ToV8String(direction)); 982 UTF8ToV8String(direction));
924 983
925 items_array->Set(i, item); 984 items_array->Set(i, item);
926 } 985 }
927 return items_array; 986 return items_array;
928 } 987 }
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
1067 void SearchBoxExtension::DispatchThemeChange(WebKit::WebFrame* frame) { 1126 void SearchBoxExtension::DispatchThemeChange(WebKit::WebFrame* frame) {
1068 Dispatch(frame, kDispatchThemeChangeEventScript); 1127 Dispatch(frame, kDispatchThemeChangeEventScript);
1069 } 1128 }
1070 1129
1071 // static 1130 // static
1072 void SearchBoxExtension::DispatchMostVisitedChanged( 1131 void SearchBoxExtension::DispatchMostVisitedChanged(
1073 WebKit::WebFrame* frame) { 1132 WebKit::WebFrame* frame) {
1074 Dispatch(frame, kDispatchMostVisitedChangedScript); 1133 Dispatch(frame, kDispatchMostVisitedChangedScript);
1075 } 1134 }
1076 } // namespace extensions_v8 1135 } // 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