OLD | NEW |
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 491 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
502 return v8::Boolean::New(base::i18n::IsRTL()); | 502 return v8::Boolean::New(base::i18n::IsRTL()); |
503 } | 503 } |
504 | 504 |
505 // static | 505 // static |
506 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetAutocompleteResults( | 506 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetAutocompleteResults( |
507 const v8::Arguments& args) { | 507 const v8::Arguments& args) { |
508 content::RenderView* render_view = GetRenderView(); | 508 content::RenderView* render_view = GetRenderView(); |
509 if (!render_view) return v8::Undefined(); | 509 if (!render_view) return v8::Undefined(); |
510 | 510 |
511 DVLOG(1) << render_view << " GetAutocompleteResults"; | 511 DVLOG(1) << render_view << " GetAutocompleteResults"; |
512 const std::vector<InstantAutocompleteResult>& results = | 512 std::vector<std::pair<size_t, InstantAutocompleteResult> > results; |
513 SearchBox::Get(render_view)->GetAutocompleteResults(); | 513 SearchBox::Get(render_view)->GetAutocompleteResults(&results); |
514 size_t results_base = SearchBox::Get(render_view)->results_base(); | |
515 | 514 |
516 v8::Handle<v8::Array> results_array = v8::Array::New(results.size()); | 515 v8::Handle<v8::Array> results_array = v8::Array::New(results.size()); |
517 for (size_t i = 0; i < results.size(); ++i) { | 516 for (size_t i = 0; i < results.size(); ++i) { |
518 v8::Handle<v8::Object> result = v8::Object::New(); | 517 v8::Handle<v8::Object> result = v8::Object::New(); |
519 result->Set(v8::String::New("provider"), | 518 result->Set(v8::String::New("provider"), |
520 UTF16ToV8String(results[i].provider)); | 519 UTF16ToV8String(results[i].second.provider)); |
521 result->Set(v8::String::New("type"), UTF16ToV8String(results[i].type)); | 520 result->Set(v8::String::New("type"), |
| 521 UTF16ToV8String(results[i].second.type)); |
522 result->Set(v8::String::New("contents"), | 522 result->Set(v8::String::New("contents"), |
523 UTF16ToV8String(results[i].description)); | 523 UTF16ToV8String(results[i].second.description)); |
524 result->Set(v8::String::New("destination_url"), | 524 result->Set(v8::String::New("destination_url"), |
525 UTF16ToV8String(results[i].destination_url)); | 525 UTF16ToV8String(results[i].second.destination_url)); |
526 result->Set(v8::String::New("rid"), v8::Uint32::New(results_base + i)); | 526 result->Set(v8::String::New("rid"), v8::Uint32::New(results[i].first)); |
527 | 527 |
528 v8::Handle<v8::Object> ranking_data = v8::Object::New(); | 528 v8::Handle<v8::Object> ranking_data = v8::Object::New(); |
529 ranking_data->Set(v8::String::New("relevance"), | 529 ranking_data->Set(v8::String::New("relevance"), |
530 v8::Int32::New(results[i].relevance)); | 530 v8::Int32::New(results[i].second.relevance)); |
531 result->Set(v8::String::New("rankingData"), ranking_data); | 531 result->Set(v8::String::New("rankingData"), ranking_data); |
532 | 532 |
533 results_array->Set(i, result); | 533 results_array->Set(i, result); |
534 } | 534 } |
535 return results_array; | 535 return results_array; |
536 } | 536 } |
537 | 537 |
538 // static | 538 // static |
539 v8::Handle<v8::Value> SearchBoxExtensionWrapper::IsKeyCaptureEnabled( | 539 v8::Handle<v8::Value> SearchBoxExtensionWrapper::IsKeyCaptureEnabled( |
540 const v8::Arguments& args) { | 540 const v8::Arguments& args) { |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
677 | 677 |
678 // static | 678 // static |
679 v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateContentWindow( | 679 v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateContentWindow( |
680 const v8::Arguments& args) { | 680 const v8::Arguments& args) { |
681 content::RenderView* render_view = GetRenderView(); | 681 content::RenderView* render_view = GetRenderView(); |
682 if (!render_view || !args.Length()) return v8::Undefined(); | 682 if (!render_view || !args.Length()) return v8::Undefined(); |
683 | 683 |
684 GURL destination_url; | 684 GURL destination_url; |
685 content::PageTransition transition = content::PAGE_TRANSITION_TYPED; | 685 content::PageTransition transition = content::PAGE_TRANSITION_TYPED; |
686 if (args[0]->IsNumber()) { | 686 if (args[0]->IsNumber()) { |
687 const InstantAutocompleteResult* result = SearchBox::Get(render_view)-> | 687 InstantAutocompleteResult result; |
688 GetAutocompleteResultWithId(args[0]->Uint32Value()); | 688 if (SearchBox::Get(render_view)->GetAutocompleteResultWithId( |
689 if (result) { | 689 args[0]->Uint32Value(), &result)) { |
690 destination_url = GURL(result->destination_url); | 690 destination_url = GURL(result.destination_url); |
691 transition = result->transition; | 691 transition = result.transition; |
692 } | 692 } |
693 } else { | 693 } else { |
694 destination_url = GURL(V8ValueToUTF16(args[0])); | 694 destination_url = GURL(V8ValueToUTF16(args[0])); |
695 } | 695 } |
696 | 696 |
697 // Navigate the main frame. | 697 // Navigate the main frame. |
698 if (destination_url.is_valid()) { | 698 if (destination_url.is_valid()) { |
699 WindowOpenDisposition disposition = CURRENT_TAB; | 699 WindowOpenDisposition disposition = CURRENT_TAB; |
700 if (args[1]->Uint32Value() == 2) | 700 if (args[1]->Uint32Value() == 2) |
701 disposition = NEW_BACKGROUND_TAB; | 701 disposition = NEW_BACKGROUND_TAB; |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
768 } | 768 } |
769 | 769 |
770 // static | 770 // static |
771 v8::Handle<v8::Value> | 771 v8::Handle<v8::Value> |
772 SearchBoxExtensionWrapper::SetQuerySuggestionFromAutocompleteResult( | 772 SearchBoxExtensionWrapper::SetQuerySuggestionFromAutocompleteResult( |
773 const v8::Arguments& args) { | 773 const v8::Arguments& args) { |
774 content::RenderView* render_view = GetRenderView(); | 774 content::RenderView* render_view = GetRenderView(); |
775 if (!render_view || !args.Length()) return v8::Undefined(); | 775 if (!render_view || !args.Length()) return v8::Undefined(); |
776 | 776 |
777 DVLOG(1) << render_view << " SetQuerySuggestionFromAutocompleteResult"; | 777 DVLOG(1) << render_view << " SetQuerySuggestionFromAutocompleteResult"; |
778 const InstantAutocompleteResult* result = SearchBox::Get(render_view)-> | 778 InstantAutocompleteResult result; |
779 GetAutocompleteResultWithId(args[0]->Uint32Value()); | 779 if (!SearchBox::Get(render_view)->GetAutocompleteResultWithId( |
780 if (!result) return v8::Undefined(); | 780 args[0]->Uint32Value(), &result)) { |
| 781 return v8::Undefined(); |
| 782 } |
781 | 783 |
782 // We only support selecting autocomplete results that are URLs. | 784 // We only support selecting autocomplete results that are URLs. |
783 string16 text = result->destination_url; | 785 string16 text = result.destination_url; |
784 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW; | 786 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW; |
785 InstantSuggestionType type = INSTANT_SUGGESTION_URL; | 787 InstantSuggestionType type = INSTANT_SUGGESTION_URL; |
786 | 788 |
787 std::vector<InstantSuggestion> suggestions; | 789 std::vector<InstantSuggestion> suggestions; |
788 suggestions.push_back(InstantSuggestion(text, behavior, type)); | 790 suggestions.push_back(InstantSuggestion(text, behavior, type)); |
789 SearchBox::Get(render_view)->SetSuggestions(suggestions); | 791 SearchBox::Get(render_view)->SetSuggestions(suggestions); |
790 | 792 |
791 return v8::Undefined(); | 793 return v8::Undefined(); |
792 } | 794 } |
793 | 795 |
(...skipping 18 matching lines...) Expand all Loading... |
812 return v8::Undefined(); | 814 return v8::Undefined(); |
813 } | 815 } |
814 | 816 |
815 v8::Handle<v8::Value> | 817 v8::Handle<v8::Value> |
816 SearchBoxExtensionWrapper::SetQueryFromAutocompleteResult( | 818 SearchBoxExtensionWrapper::SetQueryFromAutocompleteResult( |
817 const v8::Arguments& args) { | 819 const v8::Arguments& args) { |
818 content::RenderView* render_view = GetRenderView(); | 820 content::RenderView* render_view = GetRenderView(); |
819 if (!render_view || !args.Length()) return v8::Undefined(); | 821 if (!render_view || !args.Length()) return v8::Undefined(); |
820 | 822 |
821 DVLOG(1) << render_view << " SetQueryFromAutocompleteResult"; | 823 DVLOG(1) << render_view << " SetQueryFromAutocompleteResult"; |
822 const InstantAutocompleteResult* result = SearchBox::Get(render_view)-> | 824 InstantAutocompleteResult result; |
823 GetAutocompleteResultWithId(args[0]->Uint32Value()); | 825 if (!SearchBox::Get(render_view)->GetAutocompleteResultWithId( |
824 if (!result) return v8::Undefined(); | 826 args[0]->Uint32Value(), &result)) { |
| 827 return v8::Undefined(); |
| 828 } |
825 | 829 |
826 // We only support selecting autocomplete results that are URLs. | 830 // We only support selecting autocomplete results that are URLs. |
827 string16 text = result->destination_url; | 831 string16 text = result.destination_url; |
828 InstantCompleteBehavior behavior = INSTANT_COMPLETE_REPLACE; | 832 InstantCompleteBehavior behavior = INSTANT_COMPLETE_REPLACE; |
829 // TODO(jered): Distinguish between history URLs and search provider | 833 // TODO(jered): Distinguish between history URLs and search provider |
830 // navsuggest URLs so that we can do proper accounting on history URLs. | 834 // navsuggest URLs so that we can do proper accounting on history URLs. |
831 InstantSuggestionType type = INSTANT_SUGGESTION_URL; | 835 InstantSuggestionType type = INSTANT_SUGGESTION_URL; |
832 | 836 |
833 std::vector<InstantSuggestion> suggestions; | 837 std::vector<InstantSuggestion> suggestions; |
834 suggestions.push_back(InstantSuggestion(text, behavior, type)); | 838 suggestions.push_back(InstantSuggestion(text, behavior, type)); |
835 SearchBox::Get(render_view)->SetSuggestions(suggestions); | 839 SearchBox::Get(render_view)->SetSuggestions(suggestions); |
836 | 840 |
837 return v8::Undefined(); | 841 return v8::Undefined(); |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1028 void SearchBoxExtension::DispatchThemeChange(WebKit::WebFrame* frame) { | 1032 void SearchBoxExtension::DispatchThemeChange(WebKit::WebFrame* frame) { |
1029 Dispatch(frame, kDispatchThemeChangeEventScript); | 1033 Dispatch(frame, kDispatchThemeChangeEventScript); |
1030 } | 1034 } |
1031 | 1035 |
1032 // static | 1036 // static |
1033 void SearchBoxExtension::DispatchMostVisitedChanged( | 1037 void SearchBoxExtension::DispatchMostVisitedChanged( |
1034 WebKit::WebFrame* frame) { | 1038 WebKit::WebFrame* frame) { |
1035 Dispatch(frame, kDispatchMostVisitedChangedScript); | 1039 Dispatch(frame, kDispatchMostVisitedChangedScript); |
1036 } | 1040 } |
1037 } // namespace extensions_v8 | 1041 } // namespace extensions_v8 |
OLD | NEW |