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/string_util.h" | 8 #include "base/string_util.h" |
9 #include "base/stringprintf.h" | 9 #include "base/stringprintf.h" |
10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
87 base::StringPrintf("chrome-search://thumb/%s", | 87 base::StringPrintf("chrome-search://thumb/%s", |
88 base::Uint64ToString(most_visited_item_id).c_str())); | 88 base::Uint64ToString(most_visited_item_id).c_str())); |
89 } | 89 } |
90 | 90 |
91 v8::Handle<v8::String> GenerateFaviconURL(uint64 most_visited_item_id) { | 91 v8::Handle<v8::String> GenerateFaviconURL(uint64 most_visited_item_id) { |
92 return UTF8ToV8String( | 92 return UTF8ToV8String( |
93 base::StringPrintf("chrome-search://favicon/%s", | 93 base::StringPrintf("chrome-search://favicon/%s", |
94 base::Uint64ToString(most_visited_item_id).c_str())); | 94 base::Uint64ToString(most_visited_item_id).c_str())); |
95 } | 95 } |
96 | 96 |
97 // If |url| starts with |prefix|, removes |prefix|. | |
98 void StripPrefix(string16* url, const string16& prefix) { | |
99 if (StartsWith(*url, prefix, true)) | |
100 url->erase(0, prefix.length()); | |
101 } | |
102 | |
103 // Removes leading "http://" or "http://www." from |url| unless |user_input| | |
104 // starts with those prefixes. | |
105 void StripURLPrefixes(string16* url, const string16& user_input) { | |
106 string16 trimmed_user_input; | |
107 TrimWhitespace(user_input, TRIM_TRAILING, &trimmed_user_input); | |
108 if (StartsWith(*url, trimmed_user_input, true)) | |
109 return; | |
110 | |
111 StripPrefix(url, ASCIIToUTF16(chrome::kHttpScheme) + ASCIIToUTF16("://")); | |
112 if (StartsWith(*url, trimmed_user_input, true)) | |
113 return; | |
114 | |
115 StripPrefix(url, ASCIIToUTF16("www.")); | |
116 } | |
117 | |
118 // Formats a URL for display to the user. Strips out prefixes like whitespace, | |
119 // "http://" and "www." unless the user input (|query|) matches the prefix. | |
120 // Also removes trailing whitespaces and "/" unless the user input matches the | |
121 // trailing "/". | |
122 void FormatURLForDisplay(string16* url, const string16& query) { | |
123 StripURLPrefixes(url, query); | |
124 | |
125 string16 trimmed_user_input; | |
126 TrimWhitespace(query, TRIM_LEADING, &trimmed_user_input); | |
127 if (EndsWith(*url, trimmed_user_input, true)) | |
128 return; | |
129 | |
130 // Strip a lone trailing slash. | |
131 if (EndsWith(*url, ASCIIToUTF16("/"), true)) | |
132 url->erase(url->length() - 1, 1); | |
133 } | |
134 | |
135 v8::Handle<v8::Object> GenerateNativeSuggestion( | |
samarth
2013/04/05 22:30:25
Comments for what this does, please.
Jered
2013/04/06 02:45:16
Done.
| |
136 const string16& query, | |
137 InstantRestrictedID restricted_id, | |
138 const InstantAutocompleteResult& result) { | |
139 v8::Handle<v8::Object> obj = v8::Object::New(); | |
140 obj->Set(v8::String::New("provider"), UTF16ToV8String(result.provider)); | |
141 obj->Set(v8::String::New("type"), UTF16ToV8String(result.type)); | |
142 obj->Set(v8::String::New("description"), UTF16ToV8String(result.description)); | |
143 obj->Set(v8::String::New("destination_url"), | |
144 UTF16ToV8String(result.destination_url)); | |
145 if (result.search_query.empty()) { | |
146 string16 url = result.destination_url; | |
147 FormatURLForDisplay(&url, query); | |
148 obj->Set(v8::String::New("contents"), UTF16ToV8String(url)); | |
149 } else { | |
150 obj->Set(v8::String::New("contents"), UTF16ToV8String(result.search_query)); | |
151 obj->Set(v8::String::New("is_search"), v8::Boolean::New(true)); | |
152 } | |
153 obj->Set(v8::String::New("rid"), v8::Uint32::New(restricted_id)); | |
154 | |
155 v8::Handle<v8::Object> ranking_data = v8::Object::New(); | |
156 ranking_data->Set(v8::String::New("relevance"), | |
157 v8::Int32::New(result.relevance)); | |
158 obj->Set(v8::String::New("rankingData"), ranking_data); | |
159 return obj; | |
160 } | |
97 } // namespace | 161 } // namespace |
samarth
2013/04/05 22:30:25
nit: keep a blank line before this
Jered
2013/04/06 02:45:16
Done.
| |
98 | 162 |
99 namespace extensions_v8 { | 163 namespace extensions_v8 { |
100 | 164 |
101 static const char kSearchBoxExtensionName[] = "v8/EmbeddedSearch"; | 165 static const char kSearchBoxExtensionName[] = "v8/EmbeddedSearch"; |
102 | 166 |
103 static const char kDispatchChangeEventScript[] = | 167 static const char kDispatchChangeEventScript[] = |
104 "if (window.chrome &&" | 168 "if (window.chrome &&" |
105 " window.chrome.embeddedSearch &&" | 169 " window.chrome.embeddedSearch &&" |
106 " window.chrome.embeddedSearch.searchBox &&" | 170 " window.chrome.embeddedSearch.searchBox &&" |
107 " window.chrome.embeddedSearch.searchBox.onchange &&" | 171 " window.chrome.embeddedSearch.searchBox.onchange &&" |
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
326 | 390 |
327 // Gets whether the browser is capturing key strokes. | 391 // Gets whether the browser is capturing key strokes. |
328 static v8::Handle<v8::Value> IsKeyCaptureEnabled(const v8::Arguments& args); | 392 static v8::Handle<v8::Value> IsKeyCaptureEnabled(const v8::Arguments& args); |
329 | 393 |
330 // Gets the font family of the text in the omnibox. | 394 // Gets the font family of the text in the omnibox. |
331 static v8::Handle<v8::Value> GetFont(const v8::Arguments& args); | 395 static v8::Handle<v8::Value> GetFont(const v8::Arguments& args); |
332 | 396 |
333 // Gets the font size of the text in the omnibox. | 397 // Gets the font size of the text in the omnibox. |
334 static v8::Handle<v8::Value> GetFontSize(const v8::Arguments& args); | 398 static v8::Handle<v8::Value> GetFontSize(const v8::Arguments& args); |
335 | 399 |
336 // Gets the URL prefix for the iframe used to display suggestions. | |
337 static v8::Handle<v8::Value> GetSuggestionIframeURLPrefix( | |
338 const v8::Arguments& args); | |
339 | |
340 // Navigates the window to a URL represented by either a URL string or a | 400 // Navigates the window to a URL represented by either a URL string or a |
341 // restricted ID. The two variants handle restricted IDs in their | 401 // restricted ID. The two variants handle restricted IDs in their |
342 // respective namespaces. | 402 // respective namespaces. |
343 static v8::Handle<v8::Value> NavigateSearchBox(const v8::Arguments& args); | 403 static v8::Handle<v8::Value> NavigateSearchBox(const v8::Arguments& args); |
344 static v8::Handle<v8::Value> NavigateNewTabPage(const v8::Arguments& args); | 404 static v8::Handle<v8::Value> NavigateNewTabPage(const v8::Arguments& args); |
345 // DEPRECATED: TODO(sreeram): Remove when google.com no longer uses this. | 405 // DEPRECATED: TODO(sreeram): Remove when google.com no longer uses this. |
346 static v8::Handle<v8::Value> NavigateContentWindow(const v8::Arguments& args); | 406 static v8::Handle<v8::Value> NavigateContentWindow(const v8::Arguments& args); |
347 | 407 |
348 // Sets ordered suggestions. Valid for current |value|. | 408 // Sets ordered suggestions. Valid for current |value|. |
349 static v8::Handle<v8::Value> SetSuggestions(const v8::Arguments& args); | 409 static v8::Handle<v8::Value> SetSuggestions(const v8::Arguments& args); |
(...skipping 21 matching lines...) Expand all Loading... | |
371 static v8::Handle<v8::Value> FocusOmnibox(const v8::Arguments& args); | 431 static v8::Handle<v8::Value> FocusOmnibox(const v8::Arguments& args); |
372 | 432 |
373 // Start capturing user key strokes. | 433 // Start capturing user key strokes. |
374 static v8::Handle<v8::Value> StartCapturingKeyStrokes( | 434 static v8::Handle<v8::Value> StartCapturingKeyStrokes( |
375 const v8::Arguments& args); | 435 const v8::Arguments& args); |
376 | 436 |
377 // Stop capturing user key strokes. | 437 // Stop capturing user key strokes. |
378 static v8::Handle<v8::Value> StopCapturingKeyStrokes( | 438 static v8::Handle<v8::Value> StopCapturingKeyStrokes( |
379 const v8::Arguments& args); | 439 const v8::Arguments& args); |
380 | 440 |
381 // Set the CSS values for the dropdown. | |
382 static v8::Handle<v8::Value> SetSuggestionStyle(const v8::Arguments& args); | |
383 | |
384 // Undoes the deletion of all Most Visited itens. | 441 // Undoes the deletion of all Most Visited itens. |
385 static v8::Handle<v8::Value> UndoAllMostVisitedDeletions( | 442 static v8::Handle<v8::Value> UndoAllMostVisitedDeletions( |
386 const v8::Arguments& args); | 443 const v8::Arguments& args); |
387 | 444 |
388 // Undoes the deletion of a Most Visited item. | 445 // Undoes the deletion of a Most Visited item. |
389 static v8::Handle<v8::Value> UndoMostVisitedDeletion( | 446 static v8::Handle<v8::Value> UndoMostVisitedDeletion( |
390 const v8::Arguments& args); | 447 const v8::Arguments& args); |
391 | 448 |
392 // Shows any attached bars. | 449 // Shows any attached bars. |
393 static v8::Handle<v8::Value> ShowBars(const v8::Arguments& args); | 450 static v8::Handle<v8::Value> ShowBars(const v8::Arguments& args); |
394 | 451 |
395 // Hides any attached bars. When the bars are hidden, the "onbarshidden" | 452 // Hides any attached bars. When the bars are hidden, the "onbarshidden" |
396 // event is fired to notify the page. | 453 // event is fired to notify the page. |
397 static v8::Handle<v8::Value> HideBars(const v8::Arguments& args); | 454 static v8::Handle<v8::Value> HideBars(const v8::Arguments& args); |
398 | 455 |
399 // Returns true if the Instant page should use iframes to display suggestions. | 456 // Gets the raw data for a suggestion including its content. Only callable |
400 static v8::Handle<v8::Value> ShouldUseIframes(const v8::Arguments& args); | 457 // by chrome-search://suggestion pages. |
458 static v8::Handle<v8::Value> GetSuggestionData(const v8::Arguments& args); | |
401 | 459 |
402 private: | 460 private: |
403 DISALLOW_COPY_AND_ASSIGN(SearchBoxExtensionWrapper); | 461 DISALLOW_COPY_AND_ASSIGN(SearchBoxExtensionWrapper); |
404 }; | 462 }; |
405 | 463 |
406 SearchBoxExtensionWrapper::SearchBoxExtensionWrapper( | 464 SearchBoxExtensionWrapper::SearchBoxExtensionWrapper( |
407 const base::StringPiece& code) | 465 const base::StringPiece& code) |
408 : v8::Extension(kSearchBoxExtensionName, code.data(), 0, 0, code.size()) { | 466 : v8::Extension(kSearchBoxExtensionName, code.data(), 0, 0, code.size()) { |
409 } | 467 } |
410 | 468 |
(...skipping 28 matching lines...) Expand all Loading... | |
439 if (name->Equals(v8::String::New("GetDisplayInstantResults"))) | 497 if (name->Equals(v8::String::New("GetDisplayInstantResults"))) |
440 return v8::FunctionTemplate::New(GetDisplayInstantResults); | 498 return v8::FunctionTemplate::New(GetDisplayInstantResults); |
441 if (name->Equals(v8::String::New("GetThemeBackgroundInfo"))) | 499 if (name->Equals(v8::String::New("GetThemeBackgroundInfo"))) |
442 return v8::FunctionTemplate::New(GetThemeBackgroundInfo); | 500 return v8::FunctionTemplate::New(GetThemeBackgroundInfo); |
443 if (name->Equals(v8::String::New("IsKeyCaptureEnabled"))) | 501 if (name->Equals(v8::String::New("IsKeyCaptureEnabled"))) |
444 return v8::FunctionTemplate::New(IsKeyCaptureEnabled); | 502 return v8::FunctionTemplate::New(IsKeyCaptureEnabled); |
445 if (name->Equals(v8::String::New("GetFont"))) | 503 if (name->Equals(v8::String::New("GetFont"))) |
446 return v8::FunctionTemplate::New(GetFont); | 504 return v8::FunctionTemplate::New(GetFont); |
447 if (name->Equals(v8::String::New("GetFontSize"))) | 505 if (name->Equals(v8::String::New("GetFontSize"))) |
448 return v8::FunctionTemplate::New(GetFontSize); | 506 return v8::FunctionTemplate::New(GetFontSize); |
449 if (name->Equals(v8::String::New("GetSuggestionIframeURLPrefix"))) | |
450 return v8::FunctionTemplate::New(GetSuggestionIframeURLPrefix); | |
451 if (name->Equals(v8::String::New("NavigateSearchBox"))) | 507 if (name->Equals(v8::String::New("NavigateSearchBox"))) |
452 return v8::FunctionTemplate::New(NavigateSearchBox); | 508 return v8::FunctionTemplate::New(NavigateSearchBox); |
453 if (name->Equals(v8::String::New("NavigateNewTabPage"))) | 509 if (name->Equals(v8::String::New("NavigateNewTabPage"))) |
454 return v8::FunctionTemplate::New(NavigateNewTabPage); | 510 return v8::FunctionTemplate::New(NavigateNewTabPage); |
455 if (name->Equals(v8::String::New("NavigateContentWindow"))) | 511 if (name->Equals(v8::String::New("NavigateContentWindow"))) |
456 return v8::FunctionTemplate::New(NavigateContentWindow); | 512 return v8::FunctionTemplate::New(NavigateContentWindow); |
457 if (name->Equals(v8::String::New("SetSuggestions"))) | 513 if (name->Equals(v8::String::New("SetSuggestions"))) |
458 return v8::FunctionTemplate::New(SetSuggestions); | 514 return v8::FunctionTemplate::New(SetSuggestions); |
459 if (name->Equals(v8::String::New("SetSuggestion"))) | 515 if (name->Equals(v8::String::New("SetSuggestion"))) |
460 return v8::FunctionTemplate::New(SetSuggestion); | 516 return v8::FunctionTemplate::New(SetSuggestion); |
461 if (name->Equals(v8::String::New("SetSuggestionFromAutocompleteResult"))) | 517 if (name->Equals(v8::String::New("SetSuggestionFromAutocompleteResult"))) |
462 return v8::FunctionTemplate::New(SetSuggestionFromAutocompleteResult); | 518 return v8::FunctionTemplate::New(SetSuggestionFromAutocompleteResult); |
463 if (name->Equals(v8::String::New("SetQuery"))) | 519 if (name->Equals(v8::String::New("SetQuery"))) |
464 return v8::FunctionTemplate::New(SetQuery); | 520 return v8::FunctionTemplate::New(SetQuery); |
465 if (name->Equals(v8::String::New("SetQueryFromAutocompleteResult"))) | 521 if (name->Equals(v8::String::New("SetQueryFromAutocompleteResult"))) |
466 return v8::FunctionTemplate::New(SetQueryFromAutocompleteResult); | 522 return v8::FunctionTemplate::New(SetQueryFromAutocompleteResult); |
467 if (name->Equals(v8::String::New("ShowOverlay"))) | 523 if (name->Equals(v8::String::New("ShowOverlay"))) |
468 return v8::FunctionTemplate::New(ShowOverlay); | 524 return v8::FunctionTemplate::New(ShowOverlay); |
469 if (name->Equals(v8::String::New("FocusOmnibox"))) | 525 if (name->Equals(v8::String::New("FocusOmnibox"))) |
470 return v8::FunctionTemplate::New(FocusOmnibox); | 526 return v8::FunctionTemplate::New(FocusOmnibox); |
471 if (name->Equals(v8::String::New("StartCapturingKeyStrokes"))) | 527 if (name->Equals(v8::String::New("StartCapturingKeyStrokes"))) |
472 return v8::FunctionTemplate::New(StartCapturingKeyStrokes); | 528 return v8::FunctionTemplate::New(StartCapturingKeyStrokes); |
473 if (name->Equals(v8::String::New("StopCapturingKeyStrokes"))) | 529 if (name->Equals(v8::String::New("StopCapturingKeyStrokes"))) |
474 return v8::FunctionTemplate::New(StopCapturingKeyStrokes); | 530 return v8::FunctionTemplate::New(StopCapturingKeyStrokes); |
475 if (name->Equals(v8::String::New("SetSuggestionStyle"))) | |
476 return v8::FunctionTemplate::New(SetSuggestionStyle); | |
477 if (name->Equals(v8::String::New("UndoAllMostVisitedDeletions"))) | 531 if (name->Equals(v8::String::New("UndoAllMostVisitedDeletions"))) |
478 return v8::FunctionTemplate::New(UndoAllMostVisitedDeletions); | 532 return v8::FunctionTemplate::New(UndoAllMostVisitedDeletions); |
479 if (name->Equals(v8::String::New("UndoMostVisitedDeletion"))) | 533 if (name->Equals(v8::String::New("UndoMostVisitedDeletion"))) |
480 return v8::FunctionTemplate::New(UndoMostVisitedDeletion); | 534 return v8::FunctionTemplate::New(UndoMostVisitedDeletion); |
481 if (name->Equals(v8::String::New("ShowBars"))) | 535 if (name->Equals(v8::String::New("ShowBars"))) |
482 return v8::FunctionTemplate::New(ShowBars); | 536 return v8::FunctionTemplate::New(ShowBars); |
483 if (name->Equals(v8::String::New("HideBars"))) | 537 if (name->Equals(v8::String::New("HideBars"))) |
484 return v8::FunctionTemplate::New(HideBars); | 538 return v8::FunctionTemplate::New(HideBars); |
485 if (name->Equals(v8::String::New("ShouldUseIframes"))) | 539 if (name->Equals(v8::String::New("GetSuggestionData"))) |
486 return v8::FunctionTemplate::New(ShouldUseIframes); | 540 return v8::FunctionTemplate::New(GetSuggestionData); |
487 return v8::Handle<v8::FunctionTemplate>(); | 541 return v8::Handle<v8::FunctionTemplate>(); |
488 } | 542 } |
489 | 543 |
490 // static | 544 // static |
491 content::RenderView* SearchBoxExtensionWrapper::GetRenderView() { | 545 content::RenderView* SearchBoxExtensionWrapper::GetRenderView() { |
492 WebKit::WebFrame* webframe = WebKit::WebFrame::frameForCurrentContext(); | 546 WebKit::WebFrame* webframe = WebKit::WebFrame::frameForCurrentContext(); |
493 if (!webframe) return NULL; | 547 if (!webframe) return NULL; |
494 | 548 |
495 WebKit::WebView* webview = webframe->view(); | 549 WebKit::WebView* webview = webframe->view(); |
496 if (!webview) return NULL; // can happen during closing | 550 if (!webview) return NULL; // can happen during closing |
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
591 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetAutocompleteResults( | 645 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetAutocompleteResults( |
592 const v8::Arguments& args) { | 646 const v8::Arguments& args) { |
593 content::RenderView* render_view = GetRenderView(); | 647 content::RenderView* render_view = GetRenderView(); |
594 if (!render_view) return v8::Undefined(); | 648 if (!render_view) return v8::Undefined(); |
595 | 649 |
596 DVLOG(1) << render_view << " GetAutocompleteResults"; | 650 DVLOG(1) << render_view << " GetAutocompleteResults"; |
597 std::vector<InstantAutocompleteResultIDPair> results; | 651 std::vector<InstantAutocompleteResultIDPair> results; |
598 SearchBox::Get(render_view)->GetAutocompleteResults(&results); | 652 SearchBox::Get(render_view)->GetAutocompleteResults(&results); |
599 | 653 |
600 v8::Handle<v8::Array> results_array = v8::Array::New(results.size()); | 654 v8::Handle<v8::Array> results_array = v8::Array::New(results.size()); |
655 const string16& query = SearchBox::Get(render_view)->query(); | |
601 for (size_t i = 0; i < results.size(); ++i) { | 656 for (size_t i = 0; i < results.size(); ++i) { |
602 v8::Handle<v8::Object> result = v8::Object::New(); | 657 results_array->Set(i, GenerateNativeSuggestion(query, |
603 result->Set(v8::String::New("provider"), | 658 results[i].first, |
604 UTF16ToV8String(results[i].second.provider)); | 659 results[i].second)); |
605 result->Set(v8::String::New("type"), | |
606 UTF16ToV8String(results[i].second.type)); | |
607 result->Set(v8::String::New("description"), | |
608 UTF16ToV8String(results[i].second.description)); | |
609 result->Set(v8::String::New("destination_url"), | |
610 UTF16ToV8String(results[i].second.destination_url)); | |
611 if (results[i].second.search_query.empty()) { | |
612 string16 url = results[i].second.destination_url; | |
613 SearchBox::Get(render_view)->FormatURLForDisplay(&url); | |
614 result->Set(v8::String::New("contents"), UTF16ToV8String(url)); | |
615 } else { | |
616 result->Set(v8::String::New("contents"), | |
617 UTF16ToV8String(results[i].second.search_query)); | |
618 result->Set(v8::String::New("is_search"), v8::Boolean::New(true)); | |
619 } | |
620 result->Set(v8::String::New("rid"), v8::Uint32::New(results[i].first)); | |
621 | |
622 v8::Handle<v8::Object> ranking_data = v8::Object::New(); | |
623 ranking_data->Set(v8::String::New("relevance"), | |
624 v8::Int32::New(results[i].second.relevance)); | |
625 result->Set(v8::String::New("rankingData"), ranking_data); | |
626 | |
627 results_array->Set(i, result); | |
628 } | 660 } |
629 return results_array; | 661 return results_array; |
630 } | 662 } |
631 | 663 |
632 // static | 664 // static |
633 v8::Handle<v8::Value> SearchBoxExtensionWrapper::IsKeyCaptureEnabled( | 665 v8::Handle<v8::Value> SearchBoxExtensionWrapper::IsKeyCaptureEnabled( |
634 const v8::Arguments& args) { | 666 const v8::Arguments& args) { |
635 content::RenderView* render_view = GetRenderView(); | 667 content::RenderView* render_view = GetRenderView(); |
636 if (!render_view) return v8::Undefined(); | 668 if (!render_view) return v8::Undefined(); |
637 | 669 |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
765 // static | 797 // static |
766 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetFontSize( | 798 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetFontSize( |
767 const v8::Arguments& args) { | 799 const v8::Arguments& args) { |
768 content::RenderView* render_view = GetRenderView(); | 800 content::RenderView* render_view = GetRenderView(); |
769 if (!render_view) return v8::Undefined(); | 801 if (!render_view) return v8::Undefined(); |
770 | 802 |
771 return v8::Uint32::New(SearchBox::Get(render_view)->omnibox_font_size()); | 803 return v8::Uint32::New(SearchBox::Get(render_view)->omnibox_font_size()); |
772 } | 804 } |
773 | 805 |
774 // static | 806 // static |
775 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetSuggestionIframeURLPrefix( | |
776 const v8::Arguments& args) { | |
777 content::RenderView* render_view = GetRenderView(); | |
778 if (!render_view) return v8::Undefined(); | |
779 | |
780 return UTF8ToV8String(base::StringPrintf( | |
781 "%s://%s/", | |
782 chrome::kChromeSearchScheme, | |
783 chrome::kChromeSearchSuggestionHost)); | |
784 } | |
785 | |
786 // static | |
787 v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateSearchBox( | 807 v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateSearchBox( |
788 const v8::Arguments& args) { | 808 const v8::Arguments& args) { |
789 content::RenderView* render_view = GetRenderView(); | 809 content::RenderView* render_view = GetRenderView(); |
790 if (!render_view || !args.Length()) return v8::Undefined(); | 810 if (!render_view || !args.Length()) return v8::Undefined(); |
791 | 811 |
792 GURL destination_url; | 812 GURL destination_url; |
793 content::PageTransition transition = content::PAGE_TRANSITION_TYPED; | 813 content::PageTransition transition = content::PAGE_TRANSITION_TYPED; |
794 if (args[0]->IsNumber()) { | 814 if (args[0]->IsNumber()) { |
795 InstantAutocompleteResult result; | 815 InstantAutocompleteResult result; |
796 if (SearchBox::Get(render_view)->GetAutocompleteResultWithID( | 816 if (SearchBox::Get(render_view)->GetAutocompleteResultWithID( |
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1166 return v8::Undefined(); | 1186 return v8::Undefined(); |
1167 } | 1187 } |
1168 | 1188 |
1169 // static | 1189 // static |
1170 v8::Extension* SearchBoxExtension::Get() { | 1190 v8::Extension* SearchBoxExtension::Get() { |
1171 return new SearchBoxExtensionWrapper(ResourceBundle::GetSharedInstance(). | 1191 return new SearchBoxExtensionWrapper(ResourceBundle::GetSharedInstance(). |
1172 GetRawDataResource(IDR_SEARCHBOX_API)); | 1192 GetRawDataResource(IDR_SEARCHBOX_API)); |
1173 } | 1193 } |
1174 | 1194 |
1175 // static | 1195 // static |
1176 v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetSuggestionStyle( | |
1177 const v8::Arguments& args) { | |
1178 content::RenderView* render_view = GetRenderView(); | |
1179 if (!render_view || args.Length() < 2 || !args[0]->IsNumber() || | |
1180 !args[1]->IsNumber()) { | |
1181 return v8::Undefined(); | |
1182 } | |
1183 | |
1184 DVLOG(1) << render_view << " SetSuggestionStyle"; | |
1185 | |
1186 InstantAutocompleteResultStyle style; | |
1187 style.url_color = args[0]->IntegerValue(); | |
1188 style.title_color = args[1]->IntegerValue(); | |
1189 SearchBox::Get(render_view)->SetInstantAutocompleteResultStyle(style); | |
1190 | |
1191 return v8::Undefined(); | |
1192 } | |
1193 | |
1194 // static | |
1195 bool SearchBoxExtension::PageSupportsInstant(WebKit::WebFrame* frame) { | 1196 bool SearchBoxExtension::PageSupportsInstant(WebKit::WebFrame* frame) { |
1196 if (!frame) return false; | 1197 if (!frame) return false; |
1197 v8::HandleScope handle_scope; | 1198 v8::HandleScope handle_scope; |
1198 v8::Handle<v8::Value> v = frame->executeScriptAndReturnValue( | 1199 v8::Handle<v8::Value> v = frame->executeScriptAndReturnValue( |
1199 WebKit::WebScriptSource(kSupportsInstantScript)); | 1200 WebKit::WebScriptSource(kSupportsInstantScript)); |
1200 return !v.IsEmpty() && v->BooleanValue(); | 1201 return !v.IsEmpty() && v->BooleanValue(); |
1201 } | 1202 } |
1202 | 1203 |
1203 v8::Handle<v8::Value> SearchBoxExtensionWrapper::ShowBars( | 1204 v8::Handle<v8::Value> SearchBoxExtensionWrapper::ShowBars( |
1204 const v8::Arguments& args) { | 1205 const v8::Arguments& args) { |
(...skipping 10 matching lines...) Expand all Loading... | |
1215 const v8::Arguments& args) { | 1216 const v8::Arguments& args) { |
1216 content::RenderView* render_view = GetRenderView(); | 1217 content::RenderView* render_view = GetRenderView(); |
1217 if (!render_view) return v8::Undefined(); | 1218 if (!render_view) return v8::Undefined(); |
1218 | 1219 |
1219 DVLOG(1) << render_view << " HideBars"; | 1220 DVLOG(1) << render_view << " HideBars"; |
1220 SearchBox::Get(render_view)->HideBars(); | 1221 SearchBox::Get(render_view)->HideBars(); |
1221 return v8::Undefined(); | 1222 return v8::Undefined(); |
1222 } | 1223 } |
1223 | 1224 |
1224 // static | 1225 // static |
1225 v8::Handle<v8::Value> SearchBoxExtensionWrapper::ShouldUseIframes( | 1226 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetSuggestionData( |
1226 const v8::Arguments& args) { | 1227 const v8::Arguments& args) { |
1227 DVLOG(1) << "ShouldUseIframes"; | 1228 WebKit::WebFrame* webframe = WebKit::WebFrame::frameForCurrentContext(); |
1228 return v8::Boolean::New(SearchBox::ShouldUseIframes()); | 1229 if (!webframe) return v8::Undefined(); |
1230 WebKit::WebView* webview = webframe->view(); | |
1231 if (!webview) return v8::Undefined(); // Can happen during closing. | |
1232 content::RenderView* render_view = content::RenderView::FromWebView(webview); | |
1233 if (!render_view) return v8::Undefined(); | |
1234 | |
1235 // If origin does not match, return undefined. | |
1236 GURL url(webframe->document().url()); | |
1237 if (!(url.SchemeIs(chrome::kChromeSearchScheme) && | |
1238 url.host() == chrome::kChromeSearchSuggestionHost)) | |
samarth
2013/04/05 22:30:25
I've seen both styles in Chrome but I like braces
Jered
2013/04/06 02:45:16
Done.
| |
1239 return v8::Undefined(); | |
1240 | |
1241 // Need an rid argument. | |
1242 if (args.Length() < 1 || !args[0]->IsNumber()) | |
1243 return v8::Undefined(); | |
1244 | |
1245 DVLOG(1) << render_view << " GetSuggestionData"; | |
1246 InstantRestrictedID restricted_id = args[0]->IntegerValue(); | |
1247 InstantAutocompleteResult result; | |
1248 if (!SearchBox::Get(render_view)->GetAutocompleteResultWithID( | |
1249 restricted_id, &result)) { | |
1250 return v8::Undefined(); | |
1251 } | |
1252 const string16& query = SearchBox::Get(render_view)->query(); | |
1253 return GenerateNativeSuggestion(query, restricted_id, result); | |
1229 } | 1254 } |
1230 | 1255 |
1231 // static | 1256 // static |
1232 void SearchBoxExtension::DispatchChange(WebKit::WebFrame* frame) { | 1257 void SearchBoxExtension::DispatchChange(WebKit::WebFrame* frame) { |
1233 Dispatch(frame, kDispatchChangeEventScript); | 1258 Dispatch(frame, kDispatchChangeEventScript); |
1234 } | 1259 } |
1235 | 1260 |
1236 // static | 1261 // static |
1237 void SearchBoxExtension::DispatchSubmit(WebKit::WebFrame* frame) { | 1262 void SearchBoxExtension::DispatchSubmit(WebKit::WebFrame* frame) { |
1238 Dispatch(frame, kDispatchSubmitEventScript); | 1263 Dispatch(frame, kDispatchSubmitEventScript); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1291 void SearchBoxExtension::DispatchMostVisitedChanged( | 1316 void SearchBoxExtension::DispatchMostVisitedChanged( |
1292 WebKit::WebFrame* frame) { | 1317 WebKit::WebFrame* frame) { |
1293 Dispatch(frame, kDispatchMostVisitedChangedScript); | 1318 Dispatch(frame, kDispatchMostVisitedChangedScript); |
1294 } | 1319 } |
1295 | 1320 |
1296 void SearchBoxExtension::DispatchBarsHidden(WebKit::WebFrame* frame) { | 1321 void SearchBoxExtension::DispatchBarsHidden(WebKit::WebFrame* frame) { |
1297 Dispatch(frame, kDispatchBarsHiddenEventScript); | 1322 Dispatch(frame, kDispatchBarsHiddenEventScript); |
1298 } | 1323 } |
1299 | 1324 |
1300 } // namespace extensions_v8 | 1325 } // namespace extensions_v8 |
OLD | NEW |