| 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 |