| 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 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 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 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |