Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(252)

Side by Side Diff: chrome/renderer/searchbox/searchbox_extension.cc

Issue 11421079: Persist the Instant API to committed search result pages. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Kittens live! Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 306
307 return content::RenderView::FromWebView(webview); 307 return content::RenderView::FromWebView(webview);
308 } 308 }
309 309
310 // static 310 // static
311 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetQuery( 311 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetQuery(
312 const v8::Arguments& args) { 312 const v8::Arguments& args) {
313 content::RenderView* render_view = GetRenderView(); 313 content::RenderView* render_view = GetRenderView();
314 if (!render_view) return v8::Undefined(); 314 if (!render_view) return v8::Undefined();
315 315
316 DVLOG(1) << "GetQuery: '" << SearchBox::Get(render_view)->query() << "'"; 316 DVLOG(1) << render_view << " GetQuery: '"
317 << SearchBox::Get(render_view)->query() << "'";
317 return UTF16ToV8String(SearchBox::Get(render_view)->query()); 318 return UTF16ToV8String(SearchBox::Get(render_view)->query());
318 } 319 }
319 320
320 // static 321 // static
321 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetVerbatim( 322 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetVerbatim(
322 const v8::Arguments& args) { 323 const v8::Arguments& args) {
323 content::RenderView* render_view = GetRenderView(); 324 content::RenderView* render_view = GetRenderView();
324 if (!render_view) return v8::Undefined(); 325 if (!render_view) return v8::Undefined();
325 326
326 DVLOG(1) << "GetVerbatim: " << SearchBox::Get(render_view)->verbatim(); 327 DVLOG(1) << render_view << " GetVerbatim: "
328 << SearchBox::Get(render_view)->verbatim();
327 return v8::Boolean::New(SearchBox::Get(render_view)->verbatim()); 329 return v8::Boolean::New(SearchBox::Get(render_view)->verbatim());
328 } 330 }
329 331
330 // static 332 // static
331 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetSelectionStart( 333 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetSelectionStart(
332 const v8::Arguments& args) { 334 const v8::Arguments& args) {
333 content::RenderView* render_view = GetRenderView(); 335 content::RenderView* render_view = GetRenderView();
334 if (!render_view) return v8::Undefined(); 336 if (!render_view) return v8::Undefined();
335 337
336 return v8::Uint32::New(SearchBox::Get(render_view)->selection_start()); 338 return v8::Uint32::New(SearchBox::Get(render_view)->selection_start());
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
377 const v8::Arguments& args) { 379 const v8::Arguments& args) {
378 content::RenderView* render_view = GetRenderView(); 380 content::RenderView* render_view = GetRenderView();
379 if (!render_view) return v8::Undefined(); 381 if (!render_view) return v8::Undefined();
380 382
381 return v8::Int32::New(SearchBox::Get(render_view)->GetRect().height()); 383 return v8::Int32::New(SearchBox::Get(render_view)->GetRect().height());
382 } 384 }
383 385
384 // static 386 // static
385 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetAutocompleteResults( 387 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetAutocompleteResults(
386 const v8::Arguments& args) { 388 const v8::Arguments& args) {
387 DVLOG(1) << "GetAutocompleteResults";
388 content::RenderView* render_view = GetRenderView(); 389 content::RenderView* render_view = GetRenderView();
389 if (!render_view) return v8::Undefined(); 390 if (!render_view) return v8::Undefined();
390 391
392 DVLOG(1) << render_view << " GetAutocompleteResults";
391 const std::vector<InstantAutocompleteResult>& results = 393 const std::vector<InstantAutocompleteResult>& results =
392 SearchBox::Get(render_view)->GetAutocompleteResults(); 394 SearchBox::Get(render_view)->GetAutocompleteResults();
393 const size_t results_base = SearchBox::Get(render_view)->results_base(); 395 size_t results_base = SearchBox::Get(render_view)->results_base();
394 396
395 v8::Handle<v8::Array> results_array = v8::Array::New(results.size()); 397 v8::Handle<v8::Array> results_array = v8::Array::New(results.size());
396 for (size_t i = 0; i < results.size(); ++i) { 398 for (size_t i = 0; i < results.size(); ++i) {
397 v8::Handle<v8::Object> result = v8::Object::New(); 399 v8::Handle<v8::Object> result = v8::Object::New();
398 result->Set(v8::String::New("provider"), 400 result->Set(v8::String::New("provider"),
399 UTF16ToV8String(results[i].provider)); 401 UTF16ToV8String(results[i].provider));
400 result->Set(v8::String::New("type"), UTF16ToV8String(results[i].type)); 402 result->Set(v8::String::New("type"), UTF16ToV8String(results[i].type));
401 result->Set(v8::String::New("contents"), 403 result->Set(v8::String::New("contents"),
402 UTF16ToV8String(results[i].description)); 404 UTF16ToV8String(results[i].description));
403 result->Set(v8::String::New("destination_url"), 405 result->Set(v8::String::New("destination_url"),
(...skipping 10 matching lines...) Expand all
414 return results_array; 416 return results_array;
415 } 417 }
416 418
417 // static 419 // static
418 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetContext( 420 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetContext(
419 const v8::Arguments& args) { 421 const v8::Arguments& args) {
420 content::RenderView* render_view = GetRenderView(); 422 content::RenderView* render_view = GetRenderView();
421 if (!render_view) return v8::Undefined(); 423 if (!render_view) return v8::Undefined();
422 424
423 const chrome::search::Mode& mode = SearchBox::Get(render_view)->mode(); 425 const chrome::search::Mode& mode = SearchBox::Get(render_view)->mode();
424 DVLOG(1) << "GetContext: " << mode.origin << ":" << mode.mode; 426 DVLOG(1) << render_view << " GetContext: " << mode.origin << ":" << mode.mode;
425 v8::Handle<v8::Object> context = v8::Object::New(); 427 v8::Handle<v8::Object> context = v8::Object::New();
426 context->Set(v8::String::New("isNewTabPage"), 428 context->Set(v8::String::New("isNewTabPage"),
427 v8::Boolean::New(mode.is_ntp())); 429 v8::Boolean::New(mode.is_ntp()));
428 return context; 430 return context;
429 } 431 }
430 432
431 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetThemeBackgroundInfo( 433 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetThemeBackgroundInfo(
432 const v8::Arguments& args) { 434 const v8::Arguments& args) {
433 DVLOG(1) << "GetThemeBackgroundInfo";
434 content::RenderView* render_view = GetRenderView(); 435 content::RenderView* render_view = GetRenderView();
435 if (!render_view) return v8::Undefined(); 436 if (!render_view) return v8::Undefined();
436 437
438 DVLOG(1) << render_view << " GetThemeBackgroundInfo";
437 const ThemeBackgroundInfo& theme_info = 439 const ThemeBackgroundInfo& theme_info =
438 SearchBox::Get(render_view)->GetThemeBackgroundInfo(); 440 SearchBox::Get(render_view)->GetThemeBackgroundInfo();
439 v8::Handle<v8::Object> info = v8::Object::New(); 441 v8::Handle<v8::Object> info = v8::Object::New();
440 442
441 // The theme background color is in RGBA format "rgba(R,G,B,A)" where R, G and 443 // The theme background color is in RGBA format "rgba(R,G,B,A)" where R, G and
442 // B are between 0 and 255 inclusive, and A is a double between 0 and 1 444 // B are between 0 and 255 inclusive, and A is a double between 0 and 1
443 // inclusive. 445 // inclusive.
444 // This is the CSS "background-color" format. 446 // This is the CSS "background-color" format.
445 // Value is always valid. 447 // Value is always valid.
446 info->Set(v8::String::New("colorRgba"), UTF8ToV8String( 448 info->Set(v8::String::New("colorRgba"), UTF8ToV8String(
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 523
522 return info; 524 return info;
523 } 525 }
524 526
525 527
526 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetThemeAreaHeight( 528 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetThemeAreaHeight(
527 const v8::Arguments& args) { 529 const v8::Arguments& args) {
528 content::RenderView* render_view = GetRenderView(); 530 content::RenderView* render_view = GetRenderView();
529 if (!render_view) return v8::Undefined(); 531 if (!render_view) return v8::Undefined();
530 532
531 DVLOG(1) << "GetThemeAreaHeight: " 533 DVLOG(1) << render_view << " GetThemeAreaHeight: "
532 << SearchBox::Get(render_view)->GetThemeAreaHeight(); 534 << SearchBox::Get(render_view)->GetThemeAreaHeight();
533 return v8::Int32::New(SearchBox::Get(render_view)->GetThemeAreaHeight()); 535 return v8::Int32::New(SearchBox::Get(render_view)->GetThemeAreaHeight());
534 } 536 }
535 537
536 // static 538 // static
537 v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateContentWindow( 539 v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateContentWindow(
538 const v8::Arguments& args) { 540 const v8::Arguments& args) {
539 content::RenderView* render_view = GetRenderView(); 541 content::RenderView* render_view = GetRenderView();
540 if (!render_view || !args.Length()) return v8::Undefined(); 542 if (!render_view || !args.Length()) return v8::Undefined();
541 543
(...skipping 12 matching lines...) Expand all
554 WebKit::WebURLRequest request(destination_url); 556 WebKit::WebURLRequest request(destination_url);
555 render_view->GetWebView()->mainFrame()->loadRequest(request); 557 render_view->GetWebView()->mainFrame()->loadRequest(request);
556 } 558 }
557 559
558 return v8::Undefined(); 560 return v8::Undefined();
559 } 561 }
560 562
561 // static 563 // static
562 v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetSuggestions( 564 v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetSuggestions(
563 const v8::Arguments& args) { 565 const v8::Arguments& args) {
564 DVLOG(1) << "SetSuggestions";
565 content::RenderView* render_view = GetRenderView(); 566 content::RenderView* render_view = GetRenderView();
566 if (!render_view || !args.Length()) return v8::Undefined(); 567 if (!render_view || !args.Length()) return v8::Undefined();
567 568
569 DVLOG(1) << render_view << " SetSuggestions";
568 v8::Handle<v8::Object> suggestion_json = args[0]->ToObject(); 570 v8::Handle<v8::Object> suggestion_json = args[0]->ToObject();
569 571
570 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW; 572 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW;
571 InstantSuggestionType type = INSTANT_SUGGESTION_SEARCH; 573 InstantSuggestionType type = INSTANT_SUGGESTION_SEARCH;
572 v8::Handle<v8::Value> complete_value = 574 v8::Handle<v8::Value> complete_value =
573 suggestion_json->Get(v8::String::New("complete_behavior")); 575 suggestion_json->Get(v8::String::New("complete_behavior"));
574 if (complete_value->Equals(v8::String::New("now"))) { 576 if (complete_value->Equals(v8::String::New("now"))) {
575 behavior = INSTANT_COMPLETE_NOW; 577 behavior = INSTANT_COMPLETE_NOW;
576 } else if (complete_value->Equals(v8::String::New("never"))) { 578 } else if (complete_value->Equals(v8::String::New("never"))) {
577 behavior = INSTANT_COMPLETE_NEVER; 579 behavior = INSTANT_COMPLETE_NEVER;
(...skipping 15 matching lines...) Expand all
593 } 595 }
594 596
595 SearchBox::Get(render_view)->SetSuggestions(suggestions); 597 SearchBox::Get(render_view)->SetSuggestions(suggestions);
596 598
597 return v8::Undefined(); 599 return v8::Undefined();
598 } 600 }
599 601
600 // static 602 // static
601 v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetQuerySuggestion( 603 v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetQuerySuggestion(
602 const v8::Arguments& args) { 604 const v8::Arguments& args) {
603 DVLOG(1) << "SetQuerySuggestion";
604 content::RenderView* render_view = GetRenderView(); 605 content::RenderView* render_view = GetRenderView();
605 if (!render_view || args.Length() < 2) return v8::Undefined(); 606 if (!render_view || args.Length() < 2) return v8::Undefined();
606 607
608 DVLOG(1) << render_view << " SetQuerySuggestion";
607 string16 text = V8ValueToUTF16(args[0]); 609 string16 text = V8ValueToUTF16(args[0]);
608 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW; 610 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW;
609 InstantSuggestionType type = INSTANT_SUGGESTION_URL; 611 InstantSuggestionType type = INSTANT_SUGGESTION_URL;
610 612
611 if (args[1]->Uint32Value() == 2) { 613 if (args[1]->Uint32Value() == 2) {
612 behavior = INSTANT_COMPLETE_NEVER; 614 behavior = INSTANT_COMPLETE_NEVER;
613 type = INSTANT_SUGGESTION_SEARCH; 615 type = INSTANT_SUGGESTION_SEARCH;
614 } 616 }
615 617
616 std::vector<InstantSuggestion> suggestions; 618 std::vector<InstantSuggestion> suggestions;
617 suggestions.push_back(InstantSuggestion(text, behavior, type)); 619 suggestions.push_back(InstantSuggestion(text, behavior, type));
618 SearchBox::Get(render_view)->SetSuggestions(suggestions); 620 SearchBox::Get(render_view)->SetSuggestions(suggestions);
619 621
620 return v8::Undefined(); 622 return v8::Undefined();
621 } 623 }
622 624
623 // static 625 // static
624 v8::Handle<v8::Value> 626 v8::Handle<v8::Value>
625 SearchBoxExtensionWrapper::SetQuerySuggestionFromAutocompleteResult( 627 SearchBoxExtensionWrapper::SetQuerySuggestionFromAutocompleteResult(
626 const v8::Arguments& args) { 628 const v8::Arguments& args) {
627 DVLOG(1) << "SetQuerySuggestionFromAutocompleteResult";
628 content::RenderView* render_view = GetRenderView(); 629 content::RenderView* render_view = GetRenderView();
629 if (!render_view || !args.Length()) return v8::Undefined(); 630 if (!render_view || !args.Length()) return v8::Undefined();
630 631
632 DVLOG(1) << render_view << " SetQuerySuggestionFromAutocompleteResult";
631 const InstantAutocompleteResult* result = SearchBox::Get(render_view)-> 633 const InstantAutocompleteResult* result = SearchBox::Get(render_view)->
632 GetAutocompleteResultWithId(args[0]->Uint32Value()); 634 GetAutocompleteResultWithId(args[0]->Uint32Value());
633 if (!result) return v8::Undefined(); 635 if (!result) return v8::Undefined();
634 636
635 // We only support selecting autocomplete results that are URLs. 637 // We only support selecting autocomplete results that are URLs.
636 string16 text = result->destination_url; 638 string16 text = result->destination_url;
637 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW; 639 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW;
638 InstantSuggestionType type = INSTANT_SUGGESTION_URL; 640 InstantSuggestionType type = INSTANT_SUGGESTION_URL;
639 641
640 std::vector<InstantSuggestion> suggestions; 642 std::vector<InstantSuggestion> suggestions;
641 suggestions.push_back(InstantSuggestion(text, behavior, type)); 643 suggestions.push_back(InstantSuggestion(text, behavior, type));
642 SearchBox::Get(render_view)->SetSuggestions(suggestions); 644 SearchBox::Get(render_view)->SetSuggestions(suggestions);
643 645
644 return v8::Undefined(); 646 return v8::Undefined();
645 } 647 }
646 648
647 // static 649 // static
648 v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetQuery( 650 v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetQuery(
649 const v8::Arguments& args) { 651 const v8::Arguments& args) {
650 DVLOG(1) << "SetQuery";
651 content::RenderView* render_view = GetRenderView(); 652 content::RenderView* render_view = GetRenderView();
652 if (!render_view || args.Length() < 2) return v8::Undefined(); 653 if (!render_view || args.Length() < 2) return v8::Undefined();
653 654
655 DVLOG(1) << render_view << " SetQuery";
654 string16 text = V8ValueToUTF16(args[0]); 656 string16 text = V8ValueToUTF16(args[0]);
655 InstantCompleteBehavior behavior = INSTANT_COMPLETE_REPLACE; 657 InstantCompleteBehavior behavior = INSTANT_COMPLETE_REPLACE;
656 InstantSuggestionType type = INSTANT_SUGGESTION_SEARCH; 658 InstantSuggestionType type = INSTANT_SUGGESTION_SEARCH;
657 659
658 if (args[1]->Uint32Value() == 1) 660 if (args[1]->Uint32Value() == 1)
659 type = INSTANT_SUGGESTION_URL; 661 type = INSTANT_SUGGESTION_URL;
660 662
661 std::vector<InstantSuggestion> suggestions; 663 std::vector<InstantSuggestion> suggestions;
662 suggestions.push_back(InstantSuggestion(text, behavior, type)); 664 suggestions.push_back(InstantSuggestion(text, behavior, type));
663 SearchBox::Get(render_view)->SetSuggestions(suggestions); 665 SearchBox::Get(render_view)->SetSuggestions(suggestions);
664 666
665 return v8::Undefined(); 667 return v8::Undefined();
666 } 668 }
667 669
668 v8::Handle<v8::Value> 670 v8::Handle<v8::Value>
669 SearchBoxExtensionWrapper::SetQueryFromAutocompleteResult( 671 SearchBoxExtensionWrapper::SetQueryFromAutocompleteResult(
670 const v8::Arguments& args) { 672 const v8::Arguments& args) {
671 DVLOG(1) << "SetQueryFromAutocompleteResult";
672 content::RenderView* render_view = GetRenderView(); 673 content::RenderView* render_view = GetRenderView();
673 if (!render_view || !args.Length()) return v8::Undefined(); 674 if (!render_view || !args.Length()) return v8::Undefined();
674 675
676 DVLOG(1) << render_view << " SetQueryFromAutocompleteResult";
675 const InstantAutocompleteResult* result = SearchBox::Get(render_view)-> 677 const InstantAutocompleteResult* result = SearchBox::Get(render_view)->
676 GetAutocompleteResultWithId(args[0]->Uint32Value()); 678 GetAutocompleteResultWithId(args[0]->Uint32Value());
677 if (!result) return v8::Undefined(); 679 if (!result) return v8::Undefined();
678 680
679 // We only support selecting autocomplete results that are URLs. 681 // We only support selecting autocomplete results that are URLs.
680 string16 text = result->destination_url; 682 string16 text = result->destination_url;
681 InstantCompleteBehavior behavior = INSTANT_COMPLETE_REPLACE; 683 InstantCompleteBehavior behavior = INSTANT_COMPLETE_REPLACE;
682 // TODO(jered): Distinguish between history URLs and search provider 684 // TODO(jered): Distinguish between history URLs and search provider
683 // navsuggest URLs so that we can do proper accounting on history URLs. 685 // navsuggest URLs so that we can do proper accounting on history URLs.
684 InstantSuggestionType type = INSTANT_SUGGESTION_URL; 686 InstantSuggestionType type = INSTANT_SUGGESTION_URL;
685 687
686 std::vector<InstantSuggestion> suggestions; 688 std::vector<InstantSuggestion> suggestions;
687 suggestions.push_back(InstantSuggestion(text, behavior, type)); 689 suggestions.push_back(InstantSuggestion(text, behavior, type));
688 SearchBox::Get(render_view)->SetSuggestions(suggestions); 690 SearchBox::Get(render_view)->SetSuggestions(suggestions);
689 691
690 return v8::Undefined(); 692 return v8::Undefined();
691 } 693 }
692 694
693 // static 695 // static
694 v8::Handle<v8::Value> SearchBoxExtensionWrapper::Show( 696 v8::Handle<v8::Value> SearchBoxExtensionWrapper::Show(
695 const v8::Arguments& args) { 697 const v8::Arguments& args) {
696 DVLOG(1) << "ShowInstantPreview";
697 content::RenderView* render_view = GetRenderView(); 698 content::RenderView* render_view = GetRenderView();
698 if (!render_view || args.Length() < 2) return v8::Undefined(); 699 if (!render_view || args.Length() < 2) return v8::Undefined();
699 700
701 DVLOG(1) << render_view << " ShowInstantPreview";
700 InstantShownReason reason = INSTANT_SHOWN_NOT_SPECIFIED; 702 InstantShownReason reason = INSTANT_SHOWN_NOT_SPECIFIED;
701 switch (args[0]->Uint32Value()) { 703 switch (args[0]->Uint32Value()) {
702 case 1: reason = INSTANT_SHOWN_CUSTOM_NTP_CONTENT; break; 704 case 1: reason = INSTANT_SHOWN_CUSTOM_NTP_CONTENT; break;
703 case 2: reason = INSTANT_SHOWN_QUERY_SUGGESTIONS; break; 705 case 2: reason = INSTANT_SHOWN_QUERY_SUGGESTIONS; break;
704 case 3: reason = INSTANT_SHOWN_ZERO_SUGGESTIONS; break; 706 case 3: reason = INSTANT_SHOWN_ZERO_SUGGESTIONS; break;
705 } 707 }
706 708
707 int height = 100; 709 int height = 100;
708 InstantSizeUnits units = INSTANT_SIZE_PERCENT; 710 InstantSizeUnits units = INSTANT_SIZE_PERCENT;
709 if (args[1]->IsInt32()) { 711 if (args[1]->IsInt32()) {
710 height = args[1]->Int32Value(); 712 height = args[1]->Int32Value();
711 units = INSTANT_SIZE_PIXELS; 713 units = INSTANT_SIZE_PIXELS;
712 } 714 }
713 715
714 SearchBox::Get(render_view)->ShowInstantPreview(reason, height, units); 716 SearchBox::Get(render_view)->ShowInstantPreview(reason, height, units);
715 717
716 return v8::Undefined(); 718 return v8::Undefined();
717 } 719 }
718 720
719 // static 721 // static
720 void SearchBoxExtension::DispatchChange(WebKit::WebFrame* frame) { 722 void SearchBoxExtension::DispatchChange(WebKit::WebFrame* frame) {
721 DVLOG(1) << "DispatchChange";
722 Dispatch(frame, kDispatchChangeEventScript); 723 Dispatch(frame, kDispatchChangeEventScript);
723 } 724 }
724 725
725 // static 726 // static
726 void SearchBoxExtension::DispatchSubmit(WebKit::WebFrame* frame) { 727 void SearchBoxExtension::DispatchSubmit(WebKit::WebFrame* frame) {
727 Dispatch(frame, kDispatchSubmitEventScript); 728 Dispatch(frame, kDispatchSubmitEventScript);
728 } 729 }
729 730
730 // static 731 // static
731 void SearchBoxExtension::DispatchCancel(WebKit::WebFrame* frame) { 732 void SearchBoxExtension::DispatchCancel(WebKit::WebFrame* frame) {
732 Dispatch(frame, kDispatchCancelEventScript); 733 Dispatch(frame, kDispatchCancelEventScript);
733 } 734 }
734 735
735 // static 736 // static
736 void SearchBoxExtension::DispatchResize(WebKit::WebFrame* frame) { 737 void SearchBoxExtension::DispatchResize(WebKit::WebFrame* frame) {
737 Dispatch(frame, kDispatchResizeEventScript); 738 Dispatch(frame, kDispatchResizeEventScript);
738 } 739 }
739 740
740 // static 741 // static
741 bool SearchBoxExtension::PageSupportsInstant(WebKit::WebFrame* frame) { 742 bool SearchBoxExtension::PageSupportsInstant(WebKit::WebFrame* frame) {
742 if (!frame) return false; 743 if (!frame) return false;
743 744
744 v8::Handle<v8::Value> v = frame->executeScriptAndReturnValue( 745 v8::Handle<v8::Value> v = frame->executeScriptAndReturnValue(
745 WebKit::WebScriptSource(kSupportsInstantScript)); 746 WebKit::WebScriptSource(kSupportsInstantScript));
746 bool supports_instant = !v.IsEmpty() && v->BooleanValue(); 747 return !v.IsEmpty() && v->BooleanValue();
747
748 // Send a resize message to tell the page that Chrome is actively using the
749 // searchbox API with it. The page uses the message to transition from
750 // "homepage" mode to "search" mode.
751 if (supports_instant)
752 DispatchResize(frame);
753
754 DVLOG(1) << "PageSupportsInstant: " << supports_instant;
755 return supports_instant;
756 } 748 }
757 749
758 // static 750 // static
759 void SearchBoxExtension::DispatchAutocompleteResults(WebKit::WebFrame* frame) { 751 void SearchBoxExtension::DispatchAutocompleteResults(WebKit::WebFrame* frame) {
760 DVLOG(1) << "DispatchAutocompleteResults";
761 Dispatch(frame, kDispatchAutocompleteResultsEventScript); 752 Dispatch(frame, kDispatchAutocompleteResultsEventScript);
762 } 753 }
763 754
764 // static 755 // static
765 void SearchBoxExtension::DispatchUpOrDownKeyPress(WebKit::WebFrame* frame, 756 void SearchBoxExtension::DispatchUpOrDownKeyPress(WebKit::WebFrame* frame,
766 int count) { 757 int count) {
767 Dispatch(frame, WebKit::WebString::fromUTF8( 758 Dispatch(frame, WebKit::WebString::fromUTF8(
768 base::StringPrintf(kDispatchUpOrDownKeyPressEventScript, abs(count), 759 base::StringPrintf(kDispatchUpOrDownKeyPressEventScript, abs(count),
769 count < 0 ? ui::VKEY_UP : ui::VKEY_DOWN))); 760 count < 0 ? ui::VKEY_UP : ui::VKEY_DOWN)));
770 } 761 }
771 762
772 // static 763 // static
773 void SearchBoxExtension::DispatchContextChange(WebKit::WebFrame* frame) { 764 void SearchBoxExtension::DispatchContextChange(WebKit::WebFrame* frame) {
774 DVLOG(1) << "DispatchContextChange";
775 Dispatch(frame, kDispatchContextChangeEventScript); 765 Dispatch(frame, kDispatchContextChangeEventScript);
776 } 766 }
777 767
778 // static 768 // static
779 void SearchBoxExtension::DispatchThemeChange(WebKit::WebFrame* frame) { 769 void SearchBoxExtension::DispatchThemeChange(WebKit::WebFrame* frame) {
780 Dispatch(frame, kDispatchThemeChangeEventScript); 770 Dispatch(frame, kDispatchThemeChangeEventScript);
781 } 771 }
782 772
783 // static 773 // static
784 void SearchBoxExtension::DispatchThemeAreaHeightChange( 774 void SearchBoxExtension::DispatchThemeAreaHeightChange(
785 WebKit::WebFrame* frame) { 775 WebKit::WebFrame* frame) {
786 Dispatch(frame, kDispatchThemeAreaHeightChangeEventScript); 776 Dispatch(frame, kDispatchThemeAreaHeightChangeEventScript);
787 } 777 }
788 778
789 // static 779 // static
790 v8::Extension* SearchBoxExtension::Get() { 780 v8::Extension* SearchBoxExtension::Get() {
791 return new SearchBoxExtensionWrapper(ResourceBundle::GetSharedInstance(). 781 return new SearchBoxExtensionWrapper(ResourceBundle::GetSharedInstance().
792 GetRawDataResource(IDR_SEARCHBOX_API)); 782 GetRawDataResource(IDR_SEARCHBOX_API));
793 } 783 }
794 784
795 } // namespace extensions_v8 785 } // namespace extensions_v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698