| 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 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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 Loading... |
| 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 const 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)); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 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 // TODO(jered): Remove isNewTabPage, it's deprecated. | 428 // TODO(jered): Remove isNewTabPage, it's deprecated. |
| 427 context->Set(v8::String::New("isNewTabPage"), | 429 context->Set(v8::String::New("isNewTabPage"), |
| 428 v8::Boolean::New(mode.is_ntp())); | 430 v8::Boolean::New(mode.is_ntp())); |
| 429 context->Set(v8::String::New("searchMode"), | 431 context->Set(v8::String::New("searchMode"), |
| 430 v8::Uint32::New(mode.mode)); | 432 v8::Uint32::New(mode.mode)); |
| 431 context->Set(v8::String::New("searchOrigin"), | 433 context->Set(v8::String::New("searchOrigin"), |
| 432 v8::Uint32::New(mode.origin)); | 434 v8::Uint32::New(mode.origin)); |
| 433 return context; | 435 return context; |
| 434 } | 436 } |
| 435 | 437 |
| 436 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetThemeBackgroundInfo( | 438 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetThemeBackgroundInfo( |
| 437 const v8::Arguments& args) { | 439 const v8::Arguments& args) { |
| 438 DVLOG(1) << "GetThemeBackgroundInfo"; | |
| 439 content::RenderView* render_view = GetRenderView(); | 440 content::RenderView* render_view = GetRenderView(); |
| 440 if (!render_view) return v8::Undefined(); | 441 if (!render_view) return v8::Undefined(); |
| 441 | 442 |
| 443 DVLOG(1) << render_view << " GetThemeBackgroundInfo"; |
| 442 const ThemeBackgroundInfo& theme_info = | 444 const ThemeBackgroundInfo& theme_info = |
| 443 SearchBox::Get(render_view)->GetThemeBackgroundInfo(); | 445 SearchBox::Get(render_view)->GetThemeBackgroundInfo(); |
| 444 v8::Handle<v8::Object> info = v8::Object::New(); | 446 v8::Handle<v8::Object> info = v8::Object::New(); |
| 445 | 447 |
| 446 // The theme background color is in RGBA format "rgba(R,G,B,A)" where R, G and | 448 // The theme background color is in RGBA format "rgba(R,G,B,A)" where R, G and |
| 447 // B are between 0 and 255 inclusive, and A is a double between 0 and 1 | 449 // B are between 0 and 255 inclusive, and A is a double between 0 and 1 |
| 448 // inclusive. | 450 // inclusive. |
| 449 // This is the CSS "background-color" format. | 451 // This is the CSS "background-color" format. |
| 450 // Value is always valid. | 452 // Value is always valid. |
| 451 info->Set(v8::String::New("colorRgba"), UTF8ToV8String( | 453 info->Set(v8::String::New("colorRgba"), UTF8ToV8String( |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 526 | 528 |
| 527 return info; | 529 return info; |
| 528 } | 530 } |
| 529 | 531 |
| 530 | 532 |
| 531 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetThemeAreaHeight( | 533 v8::Handle<v8::Value> SearchBoxExtensionWrapper::GetThemeAreaHeight( |
| 532 const v8::Arguments& args) { | 534 const v8::Arguments& args) { |
| 533 content::RenderView* render_view = GetRenderView(); | 535 content::RenderView* render_view = GetRenderView(); |
| 534 if (!render_view) return v8::Undefined(); | 536 if (!render_view) return v8::Undefined(); |
| 535 | 537 |
| 536 DVLOG(1) << "GetThemeAreaHeight: " | 538 DVLOG(1) << render_view << " GetThemeAreaHeight: " |
| 537 << SearchBox::Get(render_view)->GetThemeAreaHeight(); | 539 << SearchBox::Get(render_view)->GetThemeAreaHeight(); |
| 538 return v8::Int32::New(SearchBox::Get(render_view)->GetThemeAreaHeight()); | 540 return v8::Int32::New(SearchBox::Get(render_view)->GetThemeAreaHeight()); |
| 539 } | 541 } |
| 540 | 542 |
| 541 // static | 543 // static |
| 542 v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateContentWindow( | 544 v8::Handle<v8::Value> SearchBoxExtensionWrapper::NavigateContentWindow( |
| 543 const v8::Arguments& args) { | 545 const v8::Arguments& args) { |
| 544 content::RenderView* render_view = GetRenderView(); | 546 content::RenderView* render_view = GetRenderView(); |
| 545 if (!render_view || !args.Length()) return v8::Undefined(); | 547 if (!render_view || !args.Length()) return v8::Undefined(); |
| 546 | 548 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 559 WebKit::WebURLRequest request(destination_url); | 561 WebKit::WebURLRequest request(destination_url); |
| 560 render_view->GetWebView()->mainFrame()->loadRequest(request); | 562 render_view->GetWebView()->mainFrame()->loadRequest(request); |
| 561 } | 563 } |
| 562 | 564 |
| 563 return v8::Undefined(); | 565 return v8::Undefined(); |
| 564 } | 566 } |
| 565 | 567 |
| 566 // static | 568 // static |
| 567 v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetSuggestions( | 569 v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetSuggestions( |
| 568 const v8::Arguments& args) { | 570 const v8::Arguments& args) { |
| 569 DVLOG(1) << "SetSuggestions"; | |
| 570 content::RenderView* render_view = GetRenderView(); | 571 content::RenderView* render_view = GetRenderView(); |
| 571 if (!render_view || !args.Length()) return v8::Undefined(); | 572 if (!render_view || !args.Length()) return v8::Undefined(); |
| 572 | 573 |
| 574 DVLOG(1) << render_view << " SetSuggestions"; |
| 573 v8::Handle<v8::Object> suggestion_json = args[0]->ToObject(); | 575 v8::Handle<v8::Object> suggestion_json = args[0]->ToObject(); |
| 574 | 576 |
| 575 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW; | 577 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW; |
| 576 InstantSuggestionType type = INSTANT_SUGGESTION_SEARCH; | 578 InstantSuggestionType type = INSTANT_SUGGESTION_SEARCH; |
| 577 v8::Handle<v8::Value> complete_value = | 579 v8::Handle<v8::Value> complete_value = |
| 578 suggestion_json->Get(v8::String::New("complete_behavior")); | 580 suggestion_json->Get(v8::String::New("complete_behavior")); |
| 579 if (complete_value->Equals(v8::String::New("now"))) { | 581 if (complete_value->Equals(v8::String::New("now"))) { |
| 580 behavior = INSTANT_COMPLETE_NOW; | 582 behavior = INSTANT_COMPLETE_NOW; |
| 581 } else if (complete_value->Equals(v8::String::New("never"))) { | 583 } else if (complete_value->Equals(v8::String::New("never"))) { |
| 582 behavior = INSTANT_COMPLETE_NEVER; | 584 behavior = INSTANT_COMPLETE_NEVER; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 598 } | 600 } |
| 599 | 601 |
| 600 SearchBox::Get(render_view)->SetSuggestions(suggestions); | 602 SearchBox::Get(render_view)->SetSuggestions(suggestions); |
| 601 | 603 |
| 602 return v8::Undefined(); | 604 return v8::Undefined(); |
| 603 } | 605 } |
| 604 | 606 |
| 605 // static | 607 // static |
| 606 v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetQuerySuggestion( | 608 v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetQuerySuggestion( |
| 607 const v8::Arguments& args) { | 609 const v8::Arguments& args) { |
| 608 DVLOG(1) << "SetQuerySuggestion"; | |
| 609 content::RenderView* render_view = GetRenderView(); | 610 content::RenderView* render_view = GetRenderView(); |
| 610 if (!render_view || args.Length() < 2) return v8::Undefined(); | 611 if (!render_view || args.Length() < 2) return v8::Undefined(); |
| 611 | 612 |
| 613 DVLOG(1) << render_view << " SetQuerySuggestion"; |
| 612 string16 text = V8ValueToUTF16(args[0]); | 614 string16 text = V8ValueToUTF16(args[0]); |
| 613 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW; | 615 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW; |
| 614 InstantSuggestionType type = INSTANT_SUGGESTION_URL; | 616 InstantSuggestionType type = INSTANT_SUGGESTION_URL; |
| 615 | 617 |
| 616 if (args[1]->Uint32Value() == 2) { | 618 if (args[1]->Uint32Value() == 2) { |
| 617 behavior = INSTANT_COMPLETE_NEVER; | 619 behavior = INSTANT_COMPLETE_NEVER; |
| 618 type = INSTANT_SUGGESTION_SEARCH; | 620 type = INSTANT_SUGGESTION_SEARCH; |
| 619 } | 621 } |
| 620 | 622 |
| 621 std::vector<InstantSuggestion> suggestions; | 623 std::vector<InstantSuggestion> suggestions; |
| 622 suggestions.push_back(InstantSuggestion(text, behavior, type)); | 624 suggestions.push_back(InstantSuggestion(text, behavior, type)); |
| 623 SearchBox::Get(render_view)->SetSuggestions(suggestions); | 625 SearchBox::Get(render_view)->SetSuggestions(suggestions); |
| 624 | 626 |
| 625 return v8::Undefined(); | 627 return v8::Undefined(); |
| 626 } | 628 } |
| 627 | 629 |
| 628 // static | 630 // static |
| 629 v8::Handle<v8::Value> | 631 v8::Handle<v8::Value> |
| 630 SearchBoxExtensionWrapper::SetQuerySuggestionFromAutocompleteResult( | 632 SearchBoxExtensionWrapper::SetQuerySuggestionFromAutocompleteResult( |
| 631 const v8::Arguments& args) { | 633 const v8::Arguments& args) { |
| 632 DVLOG(1) << "SetQuerySuggestionFromAutocompleteResult"; | |
| 633 content::RenderView* render_view = GetRenderView(); | 634 content::RenderView* render_view = GetRenderView(); |
| 634 if (!render_view || !args.Length()) return v8::Undefined(); | 635 if (!render_view || !args.Length()) return v8::Undefined(); |
| 635 | 636 |
| 637 DVLOG(1) << render_view << " SetQuerySuggestionFromAutocompleteResult"; |
| 636 const InstantAutocompleteResult* result = SearchBox::Get(render_view)-> | 638 const InstantAutocompleteResult* result = SearchBox::Get(render_view)-> |
| 637 GetAutocompleteResultWithId(args[0]->Uint32Value()); | 639 GetAutocompleteResultWithId(args[0]->Uint32Value()); |
| 638 if (!result) return v8::Undefined(); | 640 if (!result) return v8::Undefined(); |
| 639 | 641 |
| 640 // We only support selecting autocomplete results that are URLs. | 642 // We only support selecting autocomplete results that are URLs. |
| 641 string16 text = result->destination_url; | 643 string16 text = result->destination_url; |
| 642 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW; | 644 InstantCompleteBehavior behavior = INSTANT_COMPLETE_NOW; |
| 643 InstantSuggestionType type = INSTANT_SUGGESTION_URL; | 645 InstantSuggestionType type = INSTANT_SUGGESTION_URL; |
| 644 | 646 |
| 645 std::vector<InstantSuggestion> suggestions; | 647 std::vector<InstantSuggestion> suggestions; |
| 646 suggestions.push_back(InstantSuggestion(text, behavior, type)); | 648 suggestions.push_back(InstantSuggestion(text, behavior, type)); |
| 647 SearchBox::Get(render_view)->SetSuggestions(suggestions); | 649 SearchBox::Get(render_view)->SetSuggestions(suggestions); |
| 648 | 650 |
| 649 return v8::Undefined(); | 651 return v8::Undefined(); |
| 650 } | 652 } |
| 651 | 653 |
| 652 // static | 654 // static |
| 653 v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetQuery( | 655 v8::Handle<v8::Value> SearchBoxExtensionWrapper::SetQuery( |
| 654 const v8::Arguments& args) { | 656 const v8::Arguments& args) { |
| 655 DVLOG(1) << "SetQuery"; | |
| 656 content::RenderView* render_view = GetRenderView(); | 657 content::RenderView* render_view = GetRenderView(); |
| 657 if (!render_view || args.Length() < 2) return v8::Undefined(); | 658 if (!render_view || args.Length() < 2) return v8::Undefined(); |
| 658 | 659 |
| 660 DVLOG(1) << render_view << " SetQuery"; |
| 659 string16 text = V8ValueToUTF16(args[0]); | 661 string16 text = V8ValueToUTF16(args[0]); |
| 660 InstantCompleteBehavior behavior = INSTANT_COMPLETE_REPLACE; | 662 InstantCompleteBehavior behavior = INSTANT_COMPLETE_REPLACE; |
| 661 InstantSuggestionType type = INSTANT_SUGGESTION_SEARCH; | 663 InstantSuggestionType type = INSTANT_SUGGESTION_SEARCH; |
| 662 | 664 |
| 663 if (args[1]->Uint32Value() == 1) | 665 if (args[1]->Uint32Value() == 1) |
| 664 type = INSTANT_SUGGESTION_URL; | 666 type = INSTANT_SUGGESTION_URL; |
| 665 | 667 |
| 666 std::vector<InstantSuggestion> suggestions; | 668 std::vector<InstantSuggestion> suggestions; |
| 667 suggestions.push_back(InstantSuggestion(text, behavior, type)); | 669 suggestions.push_back(InstantSuggestion(text, behavior, type)); |
| 668 SearchBox::Get(render_view)->SetSuggestions(suggestions); | 670 SearchBox::Get(render_view)->SetSuggestions(suggestions); |
| 669 | 671 |
| 670 return v8::Undefined(); | 672 return v8::Undefined(); |
| 671 } | 673 } |
| 672 | 674 |
| 673 v8::Handle<v8::Value> | 675 v8::Handle<v8::Value> |
| 674 SearchBoxExtensionWrapper::SetQueryFromAutocompleteResult( | 676 SearchBoxExtensionWrapper::SetQueryFromAutocompleteResult( |
| 675 const v8::Arguments& args) { | 677 const v8::Arguments& args) { |
| 676 DVLOG(1) << "SetQueryFromAutocompleteResult"; | |
| 677 content::RenderView* render_view = GetRenderView(); | 678 content::RenderView* render_view = GetRenderView(); |
| 678 if (!render_view || !args.Length()) return v8::Undefined(); | 679 if (!render_view || !args.Length()) return v8::Undefined(); |
| 679 | 680 |
| 681 DVLOG(1) << render_view << " SetQueryFromAutocompleteResult"; |
| 680 const InstantAutocompleteResult* result = SearchBox::Get(render_view)-> | 682 const InstantAutocompleteResult* result = SearchBox::Get(render_view)-> |
| 681 GetAutocompleteResultWithId(args[0]->Uint32Value()); | 683 GetAutocompleteResultWithId(args[0]->Uint32Value()); |
| 682 if (!result) return v8::Undefined(); | 684 if (!result) return v8::Undefined(); |
| 683 | 685 |
| 684 // We only support selecting autocomplete results that are URLs. | 686 // We only support selecting autocomplete results that are URLs. |
| 685 string16 text = result->destination_url; | 687 string16 text = result->destination_url; |
| 686 InstantCompleteBehavior behavior = INSTANT_COMPLETE_REPLACE; | 688 InstantCompleteBehavior behavior = INSTANT_COMPLETE_REPLACE; |
| 687 // TODO(jered): Distinguish between history URLs and search provider | 689 // TODO(jered): Distinguish between history URLs and search provider |
| 688 // navsuggest URLs so that we can do proper accounting on history URLs. | 690 // navsuggest URLs so that we can do proper accounting on history URLs. |
| 689 InstantSuggestionType type = INSTANT_SUGGESTION_URL; | 691 InstantSuggestionType type = INSTANT_SUGGESTION_URL; |
| 690 | 692 |
| 691 std::vector<InstantSuggestion> suggestions; | 693 std::vector<InstantSuggestion> suggestions; |
| 692 suggestions.push_back(InstantSuggestion(text, behavior, type)); | 694 suggestions.push_back(InstantSuggestion(text, behavior, type)); |
| 693 SearchBox::Get(render_view)->SetSuggestions(suggestions); | 695 SearchBox::Get(render_view)->SetSuggestions(suggestions); |
| 694 | 696 |
| 695 return v8::Undefined(); | 697 return v8::Undefined(); |
| 696 } | 698 } |
| 697 | 699 |
| 698 // static | 700 // static |
| 699 v8::Handle<v8::Value> SearchBoxExtensionWrapper::Show( | 701 v8::Handle<v8::Value> SearchBoxExtensionWrapper::Show( |
| 700 const v8::Arguments& args) { | 702 const v8::Arguments& args) { |
| 701 DVLOG(1) << "ShowInstantPreview"; | |
| 702 content::RenderView* render_view = GetRenderView(); | 703 content::RenderView* render_view = GetRenderView(); |
| 703 if (!render_view || args.Length() < 2) return v8::Undefined(); | 704 if (!render_view || args.Length() < 2) return v8::Undefined(); |
| 704 | 705 |
| 706 DVLOG(1) << render_view << " ShowInstantPreview"; |
| 705 InstantShownReason reason = INSTANT_SHOWN_NOT_SPECIFIED; | 707 InstantShownReason reason = INSTANT_SHOWN_NOT_SPECIFIED; |
| 706 switch (args[0]->Uint32Value()) { | 708 switch (args[0]->Uint32Value()) { |
| 707 case 1: reason = INSTANT_SHOWN_CUSTOM_NTP_CONTENT; break; | 709 case 1: reason = INSTANT_SHOWN_CUSTOM_NTP_CONTENT; break; |
| 708 case 2: reason = INSTANT_SHOWN_QUERY_SUGGESTIONS; break; | 710 case 2: reason = INSTANT_SHOWN_QUERY_SUGGESTIONS; break; |
| 709 case 3: reason = INSTANT_SHOWN_ZERO_SUGGESTIONS; break; | 711 case 3: reason = INSTANT_SHOWN_ZERO_SUGGESTIONS; break; |
| 710 } | 712 } |
| 711 | 713 |
| 712 int height = 100; | 714 int height = 100; |
| 713 InstantSizeUnits units = INSTANT_SIZE_PERCENT; | 715 InstantSizeUnits units = INSTANT_SIZE_PERCENT; |
| 714 if (args[1]->IsInt32()) { | 716 if (args[1]->IsInt32()) { |
| 715 height = args[1]->Int32Value(); | 717 height = args[1]->Int32Value(); |
| 716 units = INSTANT_SIZE_PIXELS; | 718 units = INSTANT_SIZE_PIXELS; |
| 717 } | 719 } |
| 718 | 720 |
| 719 SearchBox::Get(render_view)->ShowInstantPreview(reason, height, units); | 721 SearchBox::Get(render_view)->ShowInstantPreview(reason, height, units); |
| 720 | 722 |
| 721 return v8::Undefined(); | 723 return v8::Undefined(); |
| 722 } | 724 } |
| 723 | 725 |
| 724 // static | 726 // static |
| 725 void SearchBoxExtension::DispatchChange(WebKit::WebFrame* frame) { | 727 void SearchBoxExtension::DispatchChange(WebKit::WebFrame* frame) { |
| 726 DVLOG(1) << "DispatchChange"; | |
| 727 Dispatch(frame, kDispatchChangeEventScript); | 728 Dispatch(frame, kDispatchChangeEventScript); |
| 728 } | 729 } |
| 729 | 730 |
| 730 // static | 731 // static |
| 731 void SearchBoxExtension::DispatchSubmit(WebKit::WebFrame* frame) { | 732 void SearchBoxExtension::DispatchSubmit(WebKit::WebFrame* frame) { |
| 732 Dispatch(frame, kDispatchSubmitEventScript); | 733 Dispatch(frame, kDispatchSubmitEventScript); |
| 733 } | 734 } |
| 734 | 735 |
| 735 // static | 736 // static |
| 736 void SearchBoxExtension::DispatchCancel(WebKit::WebFrame* frame) { | 737 void SearchBoxExtension::DispatchCancel(WebKit::WebFrame* frame) { |
| 737 Dispatch(frame, kDispatchCancelEventScript); | 738 Dispatch(frame, kDispatchCancelEventScript); |
| 738 } | 739 } |
| 739 | 740 |
| 740 // static | 741 // static |
| 741 void SearchBoxExtension::DispatchResize(WebKit::WebFrame* frame) { | 742 void SearchBoxExtension::DispatchResize(WebKit::WebFrame* frame) { |
| 742 Dispatch(frame, kDispatchResizeEventScript); | 743 Dispatch(frame, kDispatchResizeEventScript); |
| 743 } | 744 } |
| 744 | 745 |
| 745 // static | 746 // static |
| 746 bool SearchBoxExtension::PageSupportsInstant(WebKit::WebFrame* frame) { | 747 bool SearchBoxExtension::PageSupportsInstant(WebKit::WebFrame* frame) { |
| 747 if (!frame) return false; | 748 if (!frame) return false; |
| 748 | 749 |
| 749 v8::Handle<v8::Value> v = frame->executeScriptAndReturnValue( | 750 v8::Handle<v8::Value> v = frame->executeScriptAndReturnValue( |
| 750 WebKit::WebScriptSource(kSupportsInstantScript)); | 751 WebKit::WebScriptSource(kSupportsInstantScript)); |
| 751 bool supports_instant = !v.IsEmpty() && v->BooleanValue(); | 752 return !v.IsEmpty() && v->BooleanValue(); |
| 752 | |
| 753 // Send a resize message to tell the page that Chrome is actively using the | |
| 754 // searchbox API with it. The page uses the message to transition from | |
| 755 // "homepage" mode to "search" mode. | |
| 756 if (supports_instant) | |
| 757 DispatchResize(frame); | |
| 758 | |
| 759 DVLOG(1) << "PageSupportsInstant: " << supports_instant; | |
| 760 return supports_instant; | |
| 761 } | 753 } |
| 762 | 754 |
| 763 // static | 755 // static |
| 764 void SearchBoxExtension::DispatchAutocompleteResults(WebKit::WebFrame* frame) { | 756 void SearchBoxExtension::DispatchAutocompleteResults(WebKit::WebFrame* frame) { |
| 765 DVLOG(1) << "DispatchAutocompleteResults"; | |
| 766 Dispatch(frame, kDispatchAutocompleteResultsEventScript); | 757 Dispatch(frame, kDispatchAutocompleteResultsEventScript); |
| 767 } | 758 } |
| 768 | 759 |
| 769 // static | 760 // static |
| 770 void SearchBoxExtension::DispatchUpOrDownKeyPress(WebKit::WebFrame* frame, | 761 void SearchBoxExtension::DispatchUpOrDownKeyPress(WebKit::WebFrame* frame, |
| 771 int count) { | 762 int count) { |
| 772 Dispatch(frame, WebKit::WebString::fromUTF8( | 763 Dispatch(frame, WebKit::WebString::fromUTF8( |
| 773 base::StringPrintf(kDispatchUpOrDownKeyPressEventScript, abs(count), | 764 base::StringPrintf(kDispatchUpOrDownKeyPressEventScript, abs(count), |
| 774 count < 0 ? ui::VKEY_UP : ui::VKEY_DOWN))); | 765 count < 0 ? ui::VKEY_UP : ui::VKEY_DOWN))); |
| 775 } | 766 } |
| 776 | 767 |
| 777 // static | 768 // static |
| 778 void SearchBoxExtension::DispatchContextChange(WebKit::WebFrame* frame) { | 769 void SearchBoxExtension::DispatchContextChange(WebKit::WebFrame* frame) { |
| 779 DVLOG(1) << "DispatchContextChange"; | |
| 780 Dispatch(frame, kDispatchContextChangeEventScript); | 770 Dispatch(frame, kDispatchContextChangeEventScript); |
| 781 } | 771 } |
| 782 | 772 |
| 783 // static | 773 // static |
| 784 void SearchBoxExtension::DispatchThemeChange(WebKit::WebFrame* frame) { | 774 void SearchBoxExtension::DispatchThemeChange(WebKit::WebFrame* frame) { |
| 785 Dispatch(frame, kDispatchThemeChangeEventScript); | 775 Dispatch(frame, kDispatchThemeChangeEventScript); |
| 786 } | 776 } |
| 787 | 777 |
| 788 // static | 778 // static |
| 789 void SearchBoxExtension::DispatchThemeAreaHeightChange( | 779 void SearchBoxExtension::DispatchThemeAreaHeightChange( |
| 790 WebKit::WebFrame* frame) { | 780 WebKit::WebFrame* frame) { |
| 791 Dispatch(frame, kDispatchThemeAreaHeightChangeEventScript); | 781 Dispatch(frame, kDispatchThemeAreaHeightChangeEventScript); |
| 792 } | 782 } |
| 793 | 783 |
| 794 // static | 784 // static |
| 795 v8::Extension* SearchBoxExtension::Get() { | 785 v8::Extension* SearchBoxExtension::Get() { |
| 796 return new SearchBoxExtensionWrapper(ResourceBundle::GetSharedInstance(). | 786 return new SearchBoxExtensionWrapper(ResourceBundle::GetSharedInstance(). |
| 797 GetRawDataResource(IDR_SEARCHBOX_API)); | 787 GetRawDataResource(IDR_SEARCHBOX_API)); |
| 798 } | 788 } |
| 799 | 789 |
| 800 } // namespace extensions_v8 | 790 } // namespace extensions_v8 |
| OLD | NEW |