| 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/string_number_conversions.h" | 7 #include "base/string_number_conversions.h" |
| 8 #include "base/stringprintf.h" | 8 #include "base/stringprintf.h" |
| 9 #include "chrome/common/extensions/extension.h" | 9 #include "chrome/common/extensions/extension.h" |
| 10 #include "chrome/renderer/searchbox/searchbox.h" | 10 #include "chrome/renderer/searchbox/searchbox.h" |
| (...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 312 | 312 |
| 313 return content::RenderView::FromWebView(webview); | 313 return content::RenderView::FromWebView(webview); |
| 314 } | 314 } |
| 315 | 315 |
| 316 // static | 316 // static |
| 317 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetQuery( | 317 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetQuery( |
| 318 const v8::Arguments& args) { | 318 const v8::Arguments& args) { |
| 319 content::RenderView* render_view = GetRenderView(); | 319 content::RenderView* render_view = GetRenderView(); |
| 320 if (!render_view) return v8::Undefined(); | 320 if (!render_view) return v8::Undefined(); |
| 321 | 321 |
| 322 DVLOG(1) << "GetQuery: '" << SearchBox::Get(render_view)->query() << "'"; | 322 DVLOG(1) << render_view << " GetQuery: '" |
| 323 << SearchBox::Get(render_view)->query() << "'"; |
| 323 return UTF16ToV8String(SearchBox::Get(render_view)->query()); | 324 return UTF16ToV8String(SearchBox::Get(render_view)->query()); |
| 324 } | 325 } |
| 325 | 326 |
| 326 // static | 327 // static |
| 327 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetVerbatim( | 328 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetVerbatim( |
| 328 const v8::Arguments& args) { | 329 const v8::Arguments& args) { |
| 329 content::RenderView* render_view = GetRenderView(); | 330 content::RenderView* render_view = GetRenderView(); |
| 330 if (!render_view) return v8::Undefined(); | 331 if (!render_view) return v8::Undefined(); |
| 331 | 332 |
| 332 DVLOG(1) << "GetVerbatim: " << SearchBox::Get(render_view)->verbatim(); | 333 DVLOG(1) << render_view << " GetVerbatim: " |
| 334 << SearchBox::Get(render_view)->verbatim(); |
| 333 return v8::Boolean::New(SearchBox::Get(render_view)->verbatim()); | 335 return v8::Boolean::New(SearchBox::Get(render_view)->verbatim()); |
| 334 } | 336 } |
| 335 | 337 |
| 336 // static | 338 // static |
| 337 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetSelectionStart( | 339 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetSelectionStart( |
| 338 const v8::Arguments& args) { | 340 const v8::Arguments& args) { |
| 339 content::RenderView* render_view = GetRenderView(); | 341 content::RenderView* render_view = GetRenderView(); |
| 340 if (!render_view) return v8::Undefined(); | 342 if (!render_view) return v8::Undefined(); |
| 341 | 343 |
| 342 return v8::Uint32::New(SearchBox::Get(render_view)->selection_start()); | 344 return v8::Uint32::New(SearchBox::Get(render_view)->selection_start()); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 383 const v8::Arguments& args) { | 385 const v8::Arguments& args) { |
| 384 content::RenderView* render_view = GetRenderView(); | 386 content::RenderView* render_view = GetRenderView(); |
| 385 if (!render_view) return v8::Undefined(); | 387 if (!render_view) return v8::Undefined(); |
| 386 | 388 |
| 387 return v8::Int32::New(SearchBox::Get(render_view)->GetRect().height()); | 389 return v8::Int32::New(SearchBox::Get(render_view)->GetRect().height()); |
| 388 } | 390 } |
| 389 | 391 |
| 390 // static | 392 // static |
| 391 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetAutocompleteResults( | 393 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetAutocompleteResults( |
| 392 const v8::Arguments& args) { | 394 const v8::Arguments& args) { |
| 393 DVLOG(1) << "GetAutocompleteResults"; | |
| 394 content::RenderView* render_view = GetRenderView(); | 395 content::RenderView* render_view = GetRenderView(); |
| 395 if (!render_view) return v8::Undefined(); | 396 if (!render_view) return v8::Undefined(); |
| 396 | 397 |
| 398 DVLOG(1) << render_view << " GetAutocompleteResults"; |
| 397 const std::vector<InstantAutocompleteResult>& results = | 399 const std::vector<InstantAutocompleteResult>& results = |
| 398 SearchBox::Get(render_view)->GetAutocompleteResults(); | 400 SearchBox::Get(render_view)->GetAutocompleteResults(); |
| 399 const size_t results_base = SearchBox::Get(render_view)->results_base(); | 401 size_t results_base = SearchBox::Get(render_view)->results_base(); |
| 400 | 402 |
| 401 v8::Handle<v8::Array> results_array = v8::Array::New(results.size()); | 403 v8::Handle<v8::Array> results_array = v8::Array::New(results.size()); |
| 402 for (size_t i = 0; i < results.size(); ++i) { | 404 for (size_t i = 0; i < results.size(); ++i) { |
| 403 v8::Handle<v8::Object> result = v8::Object::New(); | 405 v8::Handle<v8::Object> result = v8::Object::New(); |
| 404 result->Set(v8::String::New("provider"), | 406 result->Set(v8::String::New("provider"), |
| 405 UTF16ToV8String(results[i].provider)); | 407 UTF16ToV8String(results[i].provider)); |
| 406 result->Set(v8::String::New("type"), UTF16ToV8String(results[i].type)); | 408 result->Set(v8::String::New("type"), UTF16ToV8String(results[i].type)); |
| 407 result->Set(v8::String::New("contents"), | 409 result->Set(v8::String::New("contents"), |
| 408 UTF16ToV8String(results[i].description)); | 410 UTF16ToV8String(results[i].description)); |
| 409 result->Set(v8::String::New("destination_url"), | 411 result->Set(v8::String::New("destination_url"), |
| (...skipping 10 matching lines...) Expand all Loading... |
| 420 return results_array; | 422 return results_array; |
| 421 } | 423 } |
| 422 | 424 |
| 423 // static | 425 // static |
| 424 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetContext( | 426 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetContext( |
| 425 const v8::Arguments& args) { | 427 const v8::Arguments& args) { |
| 426 content::RenderView* render_view = GetRenderView(); | 428 content::RenderView* render_view = GetRenderView(); |
| 427 if (!render_view) return v8::Undefined(); | 429 if (!render_view) return v8::Undefined(); |
| 428 | 430 |
| 429 const chrome::search::Mode& mode = SearchBox::Get(render_view)->mode(); | 431 const chrome::search::Mode& mode = SearchBox::Get(render_view)->mode(); |
| 430 DVLOG(1) << "GetContext: " << mode.origin << ":" << mode.mode; | 432 DVLOG(1) << render_view << " GetContext: " << mode.origin << ":" << mode.mode; |
| 431 v8::Handle<v8::Object> context = v8::Object::New(); | 433 v8::Handle<v8::Object> context = v8::Object::New(); |
| 432 context->Set(v8::String::New("isNewTabPage"), | 434 context->Set(v8::String::New("isNewTabPage"), |
| 433 v8::Boolean::New(mode.is_ntp())); | 435 v8::Boolean::New(mode.is_ntp())); |
| 434 return context; | 436 return context; |
| 435 } | 437 } |
| 436 | 438 |
| 437 // static | 439 // static |
| 438 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetDisplayInstantResults( | 440 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetDisplayInstantResults( |
| 439 const v8::Arguments& args) { | 441 const v8::Arguments& args) { |
| 440 content::RenderView* render_view = GetRenderView(); | 442 content::RenderView* render_view = GetRenderView(); |
| 441 if (!render_view) return v8::Undefined(); | 443 if (!render_view) return v8::Undefined(); |
| 442 | 444 |
| 443 bool display_instant_results = | 445 bool display_instant_results = |
| 444 SearchBox::Get(render_view)->display_instant_results(); | 446 SearchBox::Get(render_view)->display_instant_results(); |
| 445 DVLOG(1) << "GetDisplayInstantResults: " << display_instant_results; | 447 DVLOG(1) << "GetDisplayInstantResults: " << display_instant_results; |
| 446 return v8::Boolean::New(display_instant_results); | 448 return v8::Boolean::New(display_instant_results); |
| 447 } | 449 } |
| 448 | 450 |
| 449 // static | 451 // static |
| 450 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetThemeBackgroundInfo( | 452 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetThemeBackgroundInfo( |
| 451 const v8::Arguments& args) { | 453 const v8::Arguments& args) { |
| 452 DVLOG(1) << "GetThemeBackgroundInfo"; | |
| 453 content::RenderView* render_view = GetRenderView(); | 454 content::RenderView* render_view = GetRenderView(); |
| 454 if (!render_view) return v8::Undefined(); | 455 if (!render_view) return v8::Undefined(); |
| 455 | 456 |
| 457 DVLOG(1) << render_view << " GetThemeBackgroundInfo"; |
| 456 const ThemeBackgroundInfo& theme_info = | 458 const ThemeBackgroundInfo& theme_info = |
| 457 SearchBox::Get(render_view)->GetThemeBackgroundInfo(); | 459 SearchBox::Get(render_view)->GetThemeBackgroundInfo(); |
| 458 v8::Handle<v8::Object> info = v8::Object::New(); | 460 v8::Handle<v8::Object> info = v8::Object::New(); |
| 459 | 461 |
| 460 // The theme background color is in RGBA format "rgba(R,G,B,A)" where R, G and | 462 // The theme background color is in RGBA format "rgba(R,G,B,A)" where R, G and |
| 461 // B are between 0 and 255 inclusive, and A is a double between 0 and 1 | 463 // B are between 0 and 255 inclusive, and A is a double between 0 and 1 |
| 462 // inclusive. | 464 // inclusive. |
| 463 // This is the CSS "background-color" format. | 465 // This is the CSS "background-color" format. |
| 464 // Value is always valid. | 466 // Value is always valid. |
| 465 info->Set(v8::String::New("colorRgba"), UTF8ToV8String( | 467 info->Set(v8::String::New("colorRgba"), UTF8ToV8String( |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 540 | 542 |
| 541 return info; | 543 return info; |
| 542 } | 544 } |
| 543 | 545 |
| 544 // static | 546 // static |
| 545 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetThemeAreaHeight( | 547 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetThemeAreaHeight( |
| 546 const v8::Arguments& args) { | 548 const v8::Arguments& args) { |
| 547 content::RenderView* render_view = GetRenderView(); | 549 content::RenderView* render_view = GetRenderView(); |
| 548 if (!render_view) return v8::Undefined(); | 550 if (!render_view) return v8::Undefined(); |
| 549 | 551 |
| 550 DVLOG(1) << "GetThemeAreaHeight: " | 552 DVLOG(1) << render_view << " GetThemeAreaHeight: " |
| 551 << SearchBox::Get(render_view)->GetThemeAreaHeight(); | 553 << SearchBox::Get(render_view)->GetThemeAreaHeight(); |
| 552 return v8::Int32::New(SearchBox::Get(render_view)->GetThemeAreaHeight()); | 554 return v8::Int32::New(SearchBox::Get(render_view)->GetThemeAreaHeight()); |
| 553 } | 555 } |
| 554 | 556 |
| 555 // static | 557 // static |
| 556 v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateContentWindow( | 558 v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateContentWindow( |
| 557 const v8::Arguments& args) { | 559 const v8::Arguments& args) { |
| 558 content::RenderView* render_view = GetRenderView(); | 560 content::RenderView* render_view = GetRenderView(); |
| 559 if (!render_view || !args.Length()) return v8::Undefined(); | 561 if (!render_view || !args.Length()) return v8::Undefined(); |
| 560 | 562 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 573 WebKit::WebURLRequest request(destination_url); | 575 WebKit::WebURLRequest request(destination_url); |
| 574 render_view->GetWebView()->mainFrame()->loadRequest(request); | 576 render_view->GetWebView()->mainFrame()->loadRequest(request); |
| 575 } | 577 } |
| 576 | 578 |
| 577 return v8::Undefined(); | 579 return v8::Undefined(); |
| 578 } | 580 } |
| 579 | 581 |
| 580 // static | 582 // static |
| 581 v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetSuggestions( | 583 v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetSuggestions( |
| 582 const v8::Arguments& args) { | 584 const v8::Arguments& args) { |
| 583 DVLOG(1) << "SetSuggestions"; | |
| 584 content::RenderView* render_view = GetRenderView(); | 585 content::RenderView* render_view = GetRenderView(); |
| 585 if (!render_view || !args.Length()) return v8::Undefined(); | 586 if (!render_view || !args.Length()) return v8::Undefined(); |
| 586 | 587 |
| 588 DVLOG(1) << render_view << " SetSuggestions"; |
| 587 v8::Handle<v8::Object> suggestion_json = args[0]->ToObject(); | 589 v8::Handle<v8::Object> suggestion_json = args[0]->ToObject(); |
| 588 | 590 |
| 589 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW; | 591 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW; |
| 590 InstantSuggestionType type = INSTANT_SUGGESTION_SEARCH; | 592 InstantSuggestionType type = INSTANT_SUGGESTION_SEARCH; |
| 591 v8::Handle<v8::Value> complete_value = | 593 v8::Handle<v8::Value> complete_value = |
| 592 suggestion_json->Get(v8::String::New("complete_behavior")); | 594 suggestion_json->Get(v8::String::New("complete_behavior")); |
| 593 if (complete_value->Equals(v8::String::New("now"))) { | 595 if (complete_value->Equals(v8::String::New("now"))) { |
| 594 behavior = INSTANT_COMPLETE_NOW; | 596 behavior = INSTANT_COMPLETE_NOW; |
| 595 } else if (complete_value->Equals(v8::String::New("never"))) { | 597 } else if (complete_value->Equals(v8::String::New("never"))) { |
| 596 behavior = INSTANT_COMPLETE_NEVER; | 598 behavior = INSTANT_COMPLETE_NEVER; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 612 } | 614 } |
| 613 | 615 |
| 614 SearchBox::Get(render_view)->SetSuggestions(suggestions); | 616 SearchBox::Get(render_view)->SetSuggestions(suggestions); |
| 615 | 617 |
| 616 return v8::Undefined(); | 618 return v8::Undefined(); |
| 617 } | 619 } |
| 618 | 620 |
| 619 // static | 621 // static |
| 620 v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetQuerySuggestion( | 622 v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetQuerySuggestion( |
| 621 const v8::Arguments& args) { | 623 const v8::Arguments& args) { |
| 622 DVLOG(1) << "SetQuerySuggestion"; | |
| 623 content::RenderView* render_view = GetRenderView(); | 624 content::RenderView* render_view = GetRenderView(); |
| 624 if (!render_view || args.Length() < 2) return v8::Undefined(); | 625 if (!render_view || args.Length() < 2) return v8::Undefined(); |
| 625 | 626 |
| 627 DVLOG(1) << render_view << " SetQuerySuggestion"; |
| 626 string16 text = V8ValueToUTF16(args[0]); | 628 string16 text = V8ValueToUTF16(args[0]); |
| 627 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW; | 629 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW; |
| 628 InstantSuggestionType type = INSTANT_SUGGESTION_URL; | 630 InstantSuggestionType type = INSTANT_SUGGESTION_URL; |
| 629 | 631 |
| 630 if (args[1]->Uint32Value() == 2) { | 632 if (args[1]->Uint32Value() == 2) { |
| 631 behavior = INSTANT_COMPLETE_NEVER; | 633 behavior = INSTANT_COMPLETE_NEVER; |
| 632 type = INSTANT_SUGGESTION_SEARCH; | 634 type = INSTANT_SUGGESTION_SEARCH; |
| 633 } | 635 } |
| 634 | 636 |
| 635 std::vector<InstantSuggestion> suggestions; | 637 std::vector<InstantSuggestion> suggestions; |
| 636 suggestions.push_back(InstantSuggestion(text, behavior, type)); | 638 suggestions.push_back(InstantSuggestion(text, behavior, type)); |
| 637 SearchBox::Get(render_view)->SetSuggestions(suggestions); | 639 SearchBox::Get(render_view)->SetSuggestions(suggestions); |
| 638 | 640 |
| 639 return v8::Undefined(); | 641 return v8::Undefined(); |
| 640 } | 642 } |
| 641 | 643 |
| 642 // static | 644 // static |
| 643 v8::Handle<v8::Value> | 645 v8::Handle<v8::Value> |
| 644 SearchBoxExtensionWrapper::SetQuerySuggestionFromAutocompleteResult( | 646 SearchBoxExtensionWrapper::SetQuerySuggestionFromAutocompleteResult( |
| 645 const v8::Arguments& args) { | 647 const v8::Arguments& args) { |
| 646 DVLOG(1) << "SetQuerySuggestionFromAutocompleteResult"; | |
| 647 content::RenderView* render_view = GetRenderView(); | 648 content::RenderView* render_view = GetRenderView(); |
| 648 if (!render_view || !args.Length()) return v8::Undefined(); | 649 if (!render_view || !args.Length()) return v8::Undefined(); |
| 649 | 650 |
| 651 DVLOG(1) << render_view << " SetQuerySuggestionFromAutocompleteResult"; |
| 650 const InstantAutocompleteResult* result = SearchBox::Get(render_view)-> | 652 const InstantAutocompleteResult* result = SearchBox::Get(render_view)-> |
| 651 GetAutocompleteResultWithId(args[0]->Uint32Value()); | 653 GetAutocompleteResultWithId(args[0]->Uint32Value()); |
| 652 if (!result) return v8::Undefined(); | 654 if (!result) return v8::Undefined(); |
| 653 | 655 |
| 654 // We only support selecting autocomplete results that are URLs. | 656 // We only support selecting autocomplete results that are URLs. |
| 655 string16 text = result->destination_url; | 657 string16 text = result->destination_url; |
| 656 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW; | 658 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW; |
| 657 InstantSuggestionType type = INSTANT_SUGGESTION_URL; | 659 InstantSuggestionType type = INSTANT_SUGGESTION_URL; |
| 658 | 660 |
| 659 std::vector<InstantSuggestion> suggestions; | 661 std::vector<InstantSuggestion> suggestions; |
| 660 suggestions.push_back(InstantSuggestion(text, behavior, type)); | 662 suggestions.push_back(InstantSuggestion(text, behavior, type)); |
| 661 SearchBox::Get(render_view)->SetSuggestions(suggestions); | 663 SearchBox::Get(render_view)->SetSuggestions(suggestions); |
| 662 | 664 |
| 663 return v8::Undefined(); | 665 return v8::Undefined(); |
| 664 } | 666 } |
| 665 | 667 |
| 666 // static | 668 // static |
| 667 v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetQuery( | 669 v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetQuery( |
| 668 const v8::Arguments& args) { | 670 const v8::Arguments& args) { |
| 669 DVLOG(1) << "SetQuery"; | |
| 670 content::RenderView* render_view = GetRenderView(); | 671 content::RenderView* render_view = GetRenderView(); |
| 671 if (!render_view || args.Length() < 2) return v8::Undefined(); | 672 if (!render_view || args.Length() < 2) return v8::Undefined(); |
| 672 | 673 |
| 674 DVLOG(1) << render_view << " SetQuery"; |
| 673 string16 text = V8ValueToUTF16(args[0]); | 675 string16 text = V8ValueToUTF16(args[0]); |
| 674 InstantCompleteBehavior behavior = INSTANT_COMPLETE_REPLACE; | 676 InstantCompleteBehavior behavior = INSTANT_COMPLETE_REPLACE; |
| 675 InstantSuggestionType type = INSTANT_SUGGESTION_SEARCH; | 677 InstantSuggestionType type = INSTANT_SUGGESTION_SEARCH; |
| 676 | 678 |
| 677 if (args[1]->Uint32Value() == 1) | 679 if (args[1]->Uint32Value() == 1) |
| 678 type = INSTANT_SUGGESTION_URL; | 680 type = INSTANT_SUGGESTION_URL; |
| 679 | 681 |
| 680 std::vector<InstantSuggestion> suggestions; | 682 std::vector<InstantSuggestion> suggestions; |
| 681 suggestions.push_back(InstantSuggestion(text, behavior, type)); | 683 suggestions.push_back(InstantSuggestion(text, behavior, type)); |
| 682 SearchBox::Get(render_view)->SetSuggestions(suggestions); | 684 SearchBox::Get(render_view)->SetSuggestions(suggestions); |
| 683 | 685 |
| 684 return v8::Undefined(); | 686 return v8::Undefined(); |
| 685 } | 687 } |
| 686 | 688 |
| 687 v8::Handle<v8::Value> | 689 v8::Handle<v8::Value> |
| 688 SearchBoxExtensionWrapper::SetQueryFromAutocompleteResult( | 690 SearchBoxExtensionWrapper::SetQueryFromAutocompleteResult( |
| 689 const v8::Arguments& args) { | 691 const v8::Arguments& args) { |
| 690 DVLOG(1) << "SetQueryFromAutocompleteResult"; | |
| 691 content::RenderView* render_view = GetRenderView(); | 692 content::RenderView* render_view = GetRenderView(); |
| 692 if (!render_view || !args.Length()) return v8::Undefined(); | 693 if (!render_view || !args.Length()) return v8::Undefined(); |
| 693 | 694 |
| 695 DVLOG(1) << render_view << " SetQueryFromAutocompleteResult"; |
| 694 const InstantAutocompleteResult* result = SearchBox::Get(render_view)-> | 696 const InstantAutocompleteResult* result = SearchBox::Get(render_view)-> |
| 695 GetAutocompleteResultWithId(args[0]->Uint32Value()); | 697 GetAutocompleteResultWithId(args[0]->Uint32Value()); |
| 696 if (!result) return v8::Undefined(); | 698 if (!result) return v8::Undefined(); |
| 697 | 699 |
| 698 // We only support selecting autocomplete results that are URLs. | 700 // We only support selecting autocomplete results that are URLs. |
| 699 string16 text = result->destination_url; | 701 string16 text = result->destination_url; |
| 700 InstantCompleteBehavior behavior = INSTANT_COMPLETE_REPLACE; | 702 InstantCompleteBehavior behavior = INSTANT_COMPLETE_REPLACE; |
| 701 // TODO(jered): Distinguish between history URLs and search provider | 703 // TODO(jered): Distinguish between history URLs and search provider |
| 702 // navsuggest URLs so that we can do proper accounting on history URLs. | 704 // navsuggest URLs so that we can do proper accounting on history URLs. |
| 703 InstantSuggestionType type = INSTANT_SUGGESTION_URL; | 705 InstantSuggestionType type = INSTANT_SUGGESTION_URL; |
| 704 | 706 |
| 705 std::vector<InstantSuggestion> suggestions; | 707 std::vector<InstantSuggestion> suggestions; |
| 706 suggestions.push_back(InstantSuggestion(text, behavior, type)); | 708 suggestions.push_back(InstantSuggestion(text, behavior, type)); |
| 707 SearchBox::Get(render_view)->SetSuggestions(suggestions); | 709 SearchBox::Get(render_view)->SetSuggestions(suggestions); |
| 708 | 710 |
| 709 return v8::Undefined(); | 711 return v8::Undefined(); |
| 710 } | 712 } |
| 711 | 713 |
| 712 // static | 714 // static |
| 713 v8::Handle<v8::Value> SearchBoxExtensionWrapper::Show( | 715 v8::Handle<v8::Value> SearchBoxExtensionWrapper::Show( |
| 714 const v8::Arguments& args) { | 716 const v8::Arguments& args) { |
| 715 DVLOG(1) << "ShowInstantPreview"; | |
| 716 content::RenderView* render_view = GetRenderView(); | 717 content::RenderView* render_view = GetRenderView(); |
| 717 if (!render_view || args.Length() < 2) return v8::Undefined(); | 718 if (!render_view || args.Length() < 2) return v8::Undefined(); |
| 718 | 719 |
| 720 DVLOG(1) << render_view << " ShowInstantPreview"; |
| 719 InstantShownReason reason = INSTANT_SHOWN_NOT_SPECIFIED; | 721 InstantShownReason reason = INSTANT_SHOWN_NOT_SPECIFIED; |
| 720 switch (args[0]->Uint32Value()) { | 722 switch (args[0]->Uint32Value()) { |
| 721 case 1: reason = INSTANT_SHOWN_CUSTOM_NTP_CONTENT; break; | 723 case 1: reason = INSTANT_SHOWN_CUSTOM_NTP_CONTENT; break; |
| 722 case 2: reason = INSTANT_SHOWN_QUERY_SUGGESTIONS; break; | 724 case 2: reason = INSTANT_SHOWN_QUERY_SUGGESTIONS; break; |
| 723 case 3: reason = INSTANT_SHOWN_ZERO_SUGGESTIONS; break; | 725 case 3: reason = INSTANT_SHOWN_ZERO_SUGGESTIONS; break; |
| 724 } | 726 } |
| 725 | 727 |
| 726 int height = 100; | 728 int height = 100; |
| 727 InstantSizeUnits units = INSTANT_SIZE_PERCENT; | 729 InstantSizeUnits units = INSTANT_SIZE_PERCENT; |
| 728 if (args[1]->IsInt32()) { | 730 if (args[1]->IsInt32()) { |
| 729 height = args[1]->Int32Value(); | 731 height = args[1]->Int32Value(); |
| 730 units = INSTANT_SIZE_PIXELS; | 732 units = INSTANT_SIZE_PIXELS; |
| 731 } | 733 } |
| 732 | 734 |
| 733 SearchBox::Get(render_view)->ShowInstantPreview(reason, height, units); | 735 SearchBox::Get(render_view)->ShowInstantPreview(reason, height, units); |
| 734 | 736 |
| 735 return v8::Undefined(); | 737 return v8::Undefined(); |
| 736 } | 738 } |
| 737 | 739 |
| 738 // static | 740 // static |
| 739 void SearchBoxExtension::DispatchChange(WebKit::WebFrame* frame) { | 741 void SearchBoxExtension::DispatchChange(WebKit::WebFrame* frame) { |
| 740 DVLOG(1) << "DispatchChange"; | |
| 741 Dispatch(frame, kDispatchChangeEventScript); | 742 Dispatch(frame, kDispatchChangeEventScript); |
| 742 } | 743 } |
| 743 | 744 |
| 744 // static | 745 // static |
| 745 void SearchBoxExtension::DispatchSubmit(WebKit::WebFrame* frame) { | 746 void SearchBoxExtension::DispatchSubmit(WebKit::WebFrame* frame) { |
| 746 Dispatch(frame, kDispatchSubmitEventScript); | 747 Dispatch(frame, kDispatchSubmitEventScript); |
| 747 } | 748 } |
| 748 | 749 |
| 749 // static | 750 // static |
| 750 void SearchBoxExtension::DispatchCancel(WebKit::WebFrame* frame) { | 751 void SearchBoxExtension::DispatchCancel(WebKit::WebFrame* frame) { |
| 751 Dispatch(frame, kDispatchCancelEventScript); | 752 Dispatch(frame, kDispatchCancelEventScript); |
| 752 } | 753 } |
| 753 | 754 |
| 754 // static | 755 // static |
| 755 void SearchBoxExtension::DispatchResize(WebKit::WebFrame* frame) { | 756 void SearchBoxExtension::DispatchResize(WebKit::WebFrame* frame) { |
| 756 Dispatch(frame, kDispatchResizeEventScript); | 757 Dispatch(frame, kDispatchResizeEventScript); |
| 757 } | 758 } |
| 758 | 759 |
| 759 // static | 760 // static |
| 760 bool SearchBoxExtension::PageSupportsInstant(WebKit::WebFrame* frame) { | 761 bool SearchBoxExtension::PageSupportsInstant(WebKit::WebFrame* frame) { |
| 761 if (!frame) return false; | 762 if (!frame) return false; |
| 762 | 763 |
| 763 v8::Handle<v8::Value> v = frame->executeScriptAndReturnValue( | 764 v8::Handle<v8::Value> v = frame->executeScriptAndReturnValue( |
| 764 WebKit::WebScriptSource(kSupportsInstantScript)); | 765 WebKit::WebScriptSource(kSupportsInstantScript)); |
| 765 bool supports_instant = !v.IsEmpty() && v->BooleanValue(); | 766 return !v.IsEmpty() && v->BooleanValue(); |
| 766 | |
| 767 // Send a resize message to tell the page that Chrome is actively using the | |
| 768 // searchbox API with it. The page uses the message to transition from | |
| 769 // "homepage" mode to "search" mode. | |
| 770 if (supports_instant) | |
| 771 DispatchResize(frame); | |
| 772 | |
| 773 DVLOG(1) << "PageSupportsInstant: " << supports_instant; | |
| 774 return supports_instant; | |
| 775 } | 767 } |
| 776 | 768 |
| 777 // static | 769 // static |
| 778 void SearchBoxExtension::DispatchAutocompleteResults(WebKit::WebFrame* frame) { | 770 void SearchBoxExtension::DispatchAutocompleteResults(WebKit::WebFrame* frame) { |
| 779 DVLOG(1) << "DispatchAutocompleteResults"; | |
| 780 Dispatch(frame, kDispatchAutocompleteResultsEventScript); | 771 Dispatch(frame, kDispatchAutocompleteResultsEventScript); |
| 781 } | 772 } |
| 782 | 773 |
| 783 // static | 774 // static |
| 784 void SearchBoxExtension::DispatchUpOrDownKeyPress(WebKit::WebFrame* frame, | 775 void SearchBoxExtension::DispatchUpOrDownKeyPress(WebKit::WebFrame* frame, |
| 785 int count) { | 776 int count) { |
| 786 Dispatch(frame, WebKit::WebString::fromUTF8( | 777 Dispatch(frame, WebKit::WebString::fromUTF8( |
| 787 base::StringPrintf(kDispatchUpOrDownKeyPressEventScript, abs(count), | 778 base::StringPrintf(kDispatchUpOrDownKeyPressEventScript, abs(count), |
| 788 count < 0 ? ui::VKEY_UP : ui::VKEY_DOWN))); | 779 count < 0 ? ui::VKEY_UP : ui::VKEY_DOWN))); |
| 789 } | 780 } |
| 790 | 781 |
| 791 // static | 782 // static |
| 792 void SearchBoxExtension::DispatchContextChange(WebKit::WebFrame* frame) { | 783 void SearchBoxExtension::DispatchContextChange(WebKit::WebFrame* frame) { |
| 793 DVLOG(1) << "DispatchContextChange"; | |
| 794 Dispatch(frame, kDispatchContextChangeEventScript); | 784 Dispatch(frame, kDispatchContextChangeEventScript); |
| 795 } | 785 } |
| 796 | 786 |
| 797 // static | 787 // static |
| 798 void SearchBoxExtension::DispatchThemeChange(WebKit::WebFrame* frame) { | 788 void SearchBoxExtension::DispatchThemeChange(WebKit::WebFrame* frame) { |
| 799 Dispatch(frame, kDispatchThemeChangeEventScript); | 789 Dispatch(frame, kDispatchThemeChangeEventScript); |
| 800 } | 790 } |
| 801 | 791 |
| 802 // static | 792 // static |
| 803 void SearchBoxExtension::DispatchThemeAreaHeightChange( | 793 void SearchBoxExtension::DispatchThemeAreaHeightChange( |
| 804 WebKit::WebFrame* frame) { | 794 WebKit::WebFrame* frame) { |
| 805 Dispatch(frame, kDispatchThemeAreaHeightChangeEventScript); | 795 Dispatch(frame, kDispatchThemeAreaHeightChangeEventScript); |
| 806 } | 796 } |
| 807 | 797 |
| 808 // static | 798 // static |
| 809 v8::Extension* SearchBoxExtension::Get() { | 799 v8::Extension* SearchBoxExtension::Get() { |
| 810 return new SearchBoxExtensionWrapper(ResourceBundle::GetSharedInstance(). | 800 return new SearchBoxExtensionWrapper(ResourceBundle::GetSharedInstance(). |
| 811 GetRawDataResource(IDR_SEARCHBOX_API)); | 801 GetRawDataResource(IDR_SEARCHBOX_API)); |
| 812 } | 802 } |
| 813 | 803 |
| 814 } // namespace extensions_v8 | 804 } // namespace extensions_v8 |
| OLD | NEW |