Chromium Code Reviews| 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 |