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 |