| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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/browser/extensions/extension_input_ime_api.h" | 5 #include "chrome/browser/extensions/extension_input_ime_api.h" |
| 6 | 6 |
| 7 #include "base/json/json_writer.h" | 7 #include "base/json/json_writer.h" |
| 8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
| 9 #include "base/string_number_conversions.h" | 9 #include "base/string_number_conversions.h" |
| 10 #include "base/values.h" | 10 #include "base/values.h" |
| (...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 460 : next_request_id_(1) { | 460 : next_request_id_(1) { |
| 461 } | 461 } |
| 462 | 462 |
| 463 ExtensionInputImeEventRouter::~ExtensionInputImeEventRouter() {} | 463 ExtensionInputImeEventRouter::~ExtensionInputImeEventRouter() {} |
| 464 | 464 |
| 465 bool SetCompositionFunction::RunImpl() { | 465 bool SetCompositionFunction::RunImpl() { |
| 466 chromeos::InputMethodEngine* engine = | 466 chromeos::InputMethodEngine* engine = |
| 467 ExtensionInputImeEventRouter::GetInstance()-> | 467 ExtensionInputImeEventRouter::GetInstance()-> |
| 468 GetActiveEngine(extension_id()); | 468 GetActiveEngine(extension_id()); |
| 469 if (!engine) { | 469 if (!engine) { |
| 470 result_.reset(Value::CreateBooleanValue(false)); | 470 SetResult(Value::CreateBooleanValue(false)); |
| 471 return true; | 471 return true; |
| 472 } | 472 } |
| 473 | 473 |
| 474 DictionaryValue* args; | 474 DictionaryValue* args; |
| 475 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args)); | 475 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args)); |
| 476 int context_id; | 476 int context_id; |
| 477 std::string text; | 477 std::string text; |
| 478 int selection_start; | 478 int selection_start; |
| 479 int selection_end; | 479 int selection_end; |
| 480 int cursor; | 480 int cursor; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 524 chromeos::InputMethodEngine::SEGMENT_STYLE_UNDERLINE; | 524 chromeos::InputMethodEngine::SEGMENT_STYLE_UNDERLINE; |
| 525 } else if (style == keys::kStyleDoubleUnderline) { | 525 } else if (style == keys::kStyleDoubleUnderline) { |
| 526 segments.back().style = | 526 segments.back().style = |
| 527 chromeos::InputMethodEngine::SEGMENT_STYLE_DOUBLE_UNDERLINE; | 527 chromeos::InputMethodEngine::SEGMENT_STYLE_DOUBLE_UNDERLINE; |
| 528 } | 528 } |
| 529 } | 529 } |
| 530 } | 530 } |
| 531 | 531 |
| 532 if (engine->SetComposition(context_id, text.c_str(), selection_start, | 532 if (engine->SetComposition(context_id, text.c_str(), selection_start, |
| 533 selection_end, cursor, segments, &error_)) { | 533 selection_end, cursor, segments, &error_)) { |
| 534 result_.reset(Value::CreateBooleanValue(true)); | 534 SetResult(Value::CreateBooleanValue(true)); |
| 535 } else { | 535 } else { |
| 536 result_.reset(Value::CreateBooleanValue(false)); | 536 SetResult(Value::CreateBooleanValue(false)); |
| 537 } | 537 } |
| 538 return true; | 538 return true; |
| 539 } | 539 } |
| 540 | 540 |
| 541 bool ClearCompositionFunction::RunImpl() { | 541 bool ClearCompositionFunction::RunImpl() { |
| 542 chromeos::InputMethodEngine* engine = | 542 chromeos::InputMethodEngine* engine = |
| 543 ExtensionInputImeEventRouter::GetInstance()-> | 543 ExtensionInputImeEventRouter::GetInstance()-> |
| 544 GetActiveEngine(extension_id()); | 544 GetActiveEngine(extension_id()); |
| 545 if (!engine) { | 545 if (!engine) { |
| 546 result_.reset(Value::CreateBooleanValue(false)); | 546 SetResult(Value::CreateBooleanValue(false)); |
| 547 return true; | 547 return true; |
| 548 } | 548 } |
| 549 | 549 |
| 550 DictionaryValue* args; | 550 DictionaryValue* args; |
| 551 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args)); | 551 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args)); |
| 552 int context_id; | 552 int context_id; |
| 553 | 553 |
| 554 EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kContextIdKey, | 554 EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kContextIdKey, |
| 555 &context_id)); | 555 &context_id)); |
| 556 | 556 |
| 557 if (engine->ClearComposition(context_id, &error_)) { | 557 if (engine->ClearComposition(context_id, &error_)) { |
| 558 result_.reset(Value::CreateBooleanValue(true)); | 558 SetResult(Value::CreateBooleanValue(true)); |
| 559 } else { | 559 } else { |
| 560 result_.reset(Value::CreateBooleanValue(false)); | 560 SetResult(Value::CreateBooleanValue(false)); |
| 561 } | 561 } |
| 562 return true; | 562 return true; |
| 563 } | 563 } |
| 564 | 564 |
| 565 bool CommitTextFunction::RunImpl() { | 565 bool CommitTextFunction::RunImpl() { |
| 566 // TODO(zork): Support committing when not active. | 566 // TODO(zork): Support committing when not active. |
| 567 chromeos::InputMethodEngine* engine = | 567 chromeos::InputMethodEngine* engine = |
| 568 ExtensionInputImeEventRouter::GetInstance()-> | 568 ExtensionInputImeEventRouter::GetInstance()-> |
| 569 GetActiveEngine(extension_id()); | 569 GetActiveEngine(extension_id()); |
| 570 if (!engine) { | 570 if (!engine) { |
| 571 result_.reset(Value::CreateBooleanValue(false)); | 571 SetResult(Value::CreateBooleanValue(false)); |
| 572 return true; | 572 return true; |
| 573 } | 573 } |
| 574 | 574 |
| 575 DictionaryValue* args; | 575 DictionaryValue* args; |
| 576 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args)); | 576 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args)); |
| 577 int context_id; | 577 int context_id; |
| 578 std::string text; | 578 std::string text; |
| 579 | 579 |
| 580 EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kContextIdKey, | 580 EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kContextIdKey, |
| 581 &context_id)); | 581 &context_id)); |
| 582 EXTENSION_FUNCTION_VALIDATE(args->GetString(keys::kTextKey, &text)); | 582 EXTENSION_FUNCTION_VALIDATE(args->GetString(keys::kTextKey, &text)); |
| 583 | 583 |
| 584 if (engine->CommitText(context_id, text.c_str(), &error_)) { | 584 if (engine->CommitText(context_id, text.c_str(), &error_)) { |
| 585 result_.reset(Value::CreateBooleanValue(true)); | 585 SetResult(Value::CreateBooleanValue(true)); |
| 586 } else { | 586 } else { |
| 587 result_.reset(Value::CreateBooleanValue(false)); | 587 SetResult(Value::CreateBooleanValue(false)); |
| 588 } | 588 } |
| 589 return true; | 589 return true; |
| 590 } | 590 } |
| 591 | 591 |
| 592 bool SetCandidateWindowPropertiesFunction::RunImpl() { | 592 bool SetCandidateWindowPropertiesFunction::RunImpl() { |
| 593 DictionaryValue* args; | 593 DictionaryValue* args; |
| 594 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args)); | 594 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args)); |
| 595 | 595 |
| 596 std::string engine_id; | 596 std::string engine_id; |
| 597 EXTENSION_FUNCTION_VALIDATE(args->GetString(keys::kEngineIdKey, &engine_id)); | 597 EXTENSION_FUNCTION_VALIDATE(args->GetString(keys::kEngineIdKey, &engine_id)); |
| 598 | 598 |
| 599 chromeos::InputMethodEngine* engine = | 599 chromeos::InputMethodEngine* engine = |
| 600 ExtensionInputImeEventRouter::GetInstance()->GetEngine(extension_id(), | 600 ExtensionInputImeEventRouter::GetInstance()->GetEngine(extension_id(), |
| 601 engine_id); | 601 engine_id); |
| 602 if (!engine) { | 602 if (!engine) { |
| 603 result_.reset(Value::CreateBooleanValue(false)); | 603 SetResult(Value::CreateBooleanValue(false)); |
| 604 return true; | 604 return true; |
| 605 } | 605 } |
| 606 | 606 |
| 607 DictionaryValue* properties; | 607 DictionaryValue* properties; |
| 608 EXTENSION_FUNCTION_VALIDATE(args->GetDictionary(keys::kPropertiesKey, | 608 EXTENSION_FUNCTION_VALIDATE(args->GetDictionary(keys::kPropertiesKey, |
| 609 &properties)); | 609 &properties)); |
| 610 | 610 |
| 611 if (properties->HasKey(keys::kVisibleKey)) { | 611 if (properties->HasKey(keys::kVisibleKey)) { |
| 612 bool visible; | 612 bool visible; |
| 613 EXTENSION_FUNCTION_VALIDATE(properties->GetBoolean(keys::kVisibleKey, | 613 EXTENSION_FUNCTION_VALIDATE(properties->GetBoolean(keys::kVisibleKey, |
| 614 &visible)); | 614 &visible)); |
| 615 if (!engine->SetCandidateWindowVisible(visible, &error_)) { | 615 if (!engine->SetCandidateWindowVisible(visible, &error_)) { |
| 616 result_.reset(Value::CreateBooleanValue(false)); | 616 SetResult(Value::CreateBooleanValue(false)); |
| 617 return true; | 617 return true; |
| 618 } | 618 } |
| 619 } | 619 } |
| 620 | 620 |
| 621 if (properties->HasKey(keys::kCursorVisibleKey)) { | 621 if (properties->HasKey(keys::kCursorVisibleKey)) { |
| 622 bool visible; | 622 bool visible; |
| 623 EXTENSION_FUNCTION_VALIDATE(properties->GetBoolean(keys::kCursorVisibleKey, | 623 EXTENSION_FUNCTION_VALIDATE(properties->GetBoolean(keys::kCursorVisibleKey, |
| 624 &visible)); | 624 &visible)); |
| 625 engine->SetCandidateWindowCursorVisible(visible); | 625 engine->SetCandidateWindowCursorVisible(visible); |
| 626 } | 626 } |
| (...skipping 20 matching lines...) Expand all Loading... |
| 647 } | 647 } |
| 648 | 648 |
| 649 if (properties->HasKey(keys::kAuxiliaryTextVisibleKey)) { | 649 if (properties->HasKey(keys::kAuxiliaryTextVisibleKey)) { |
| 650 bool visible; | 650 bool visible; |
| 651 EXTENSION_FUNCTION_VALIDATE(properties->GetBoolean( | 651 EXTENSION_FUNCTION_VALIDATE(properties->GetBoolean( |
| 652 keys::kAuxiliaryTextVisibleKey, | 652 keys::kAuxiliaryTextVisibleKey, |
| 653 &visible)); | 653 &visible)); |
| 654 engine->SetCandidateWindowAuxTextVisible(visible); | 654 engine->SetCandidateWindowAuxTextVisible(visible); |
| 655 } | 655 } |
| 656 | 656 |
| 657 result_.reset(Value::CreateBooleanValue(true)); | 657 SetResult(Value::CreateBooleanValue(true)); |
| 658 | 658 |
| 659 return true; | 659 return true; |
| 660 } | 660 } |
| 661 | 661 |
| 662 #if defined(OS_CHROMEOS) | 662 #if defined(OS_CHROMEOS) |
| 663 bool SetCandidatesFunction::ReadCandidates( | 663 bool SetCandidatesFunction::ReadCandidates( |
| 664 ListValue* candidates, | 664 ListValue* candidates, |
| 665 std::vector<chromeos::InputMethodEngine::Candidate>* output) { | 665 std::vector<chromeos::InputMethodEngine::Candidate>* output) { |
| 666 for (size_t i = 0; i < candidates->GetSize(); ++i) { | 666 for (size_t i = 0; i < candidates->GetSize(); ++i) { |
| 667 DictionaryValue* candidate_dict; | 667 DictionaryValue* candidate_dict; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 704 } | 704 } |
| 705 | 705 |
| 706 return true; | 706 return true; |
| 707 } | 707 } |
| 708 | 708 |
| 709 bool SetCandidatesFunction::RunImpl() { | 709 bool SetCandidatesFunction::RunImpl() { |
| 710 chromeos::InputMethodEngine* engine = | 710 chromeos::InputMethodEngine* engine = |
| 711 ExtensionInputImeEventRouter::GetInstance()-> | 711 ExtensionInputImeEventRouter::GetInstance()-> |
| 712 GetActiveEngine(extension_id()); | 712 GetActiveEngine(extension_id()); |
| 713 if (!engine) { | 713 if (!engine) { |
| 714 result_.reset(Value::CreateBooleanValue(false)); | 714 SetResult(Value::CreateBooleanValue(false)); |
| 715 return true; | 715 return true; |
| 716 } | 716 } |
| 717 | 717 |
| 718 DictionaryValue* args; | 718 DictionaryValue* args; |
| 719 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args)); | 719 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args)); |
| 720 | 720 |
| 721 int context_id; | 721 int context_id; |
| 722 std::vector<chromeos::InputMethodEngine::Candidate> candidates; | 722 std::vector<chromeos::InputMethodEngine::Candidate> candidates; |
| 723 | 723 |
| 724 EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kContextIdKey, | 724 EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kContextIdKey, |
| 725 &context_id)); | 725 &context_id)); |
| 726 | 726 |
| 727 ListValue* candidate_list; | 727 ListValue* candidate_list; |
| 728 EXTENSION_FUNCTION_VALIDATE(args->GetList(keys::kCandidatesKey, | 728 EXTENSION_FUNCTION_VALIDATE(args->GetList(keys::kCandidatesKey, |
| 729 &candidate_list)); | 729 &candidate_list)); |
| 730 if (!ReadCandidates(candidate_list, &candidates)) { | 730 if (!ReadCandidates(candidate_list, &candidates)) { |
| 731 error_ = kErrorBadCandidateList; | 731 error_ = kErrorBadCandidateList; |
| 732 return false; | 732 return false; |
| 733 } | 733 } |
| 734 | 734 |
| 735 std::string error; | 735 std::string error; |
| 736 if (engine->SetCandidates(context_id, candidates, &error_)) { | 736 if (engine->SetCandidates(context_id, candidates, &error_)) { |
| 737 result_.reset(Value::CreateBooleanValue(true)); | 737 SetResult(Value::CreateBooleanValue(true)); |
| 738 } else { | 738 } else { |
| 739 result_.reset(Value::CreateBooleanValue(false)); | 739 SetResult(Value::CreateBooleanValue(false)); |
| 740 } | 740 } |
| 741 return true; | 741 return true; |
| 742 } | 742 } |
| 743 | 743 |
| 744 bool SetCursorPositionFunction::RunImpl() { | 744 bool SetCursorPositionFunction::RunImpl() { |
| 745 chromeos::InputMethodEngine* engine = | 745 chromeos::InputMethodEngine* engine = |
| 746 ExtensionInputImeEventRouter::GetInstance()-> | 746 ExtensionInputImeEventRouter::GetInstance()-> |
| 747 GetActiveEngine(extension_id()); | 747 GetActiveEngine(extension_id()); |
| 748 if (!engine) { | 748 if (!engine) { |
| 749 result_.reset(Value::CreateBooleanValue(false)); | 749 SetResult(Value::CreateBooleanValue(false)); |
| 750 return true; | 750 return true; |
| 751 } | 751 } |
| 752 | 752 |
| 753 DictionaryValue* args; | 753 DictionaryValue* args; |
| 754 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args)); | 754 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args)); |
| 755 int context_id; | 755 int context_id; |
| 756 int candidate_id; | 756 int candidate_id; |
| 757 | 757 |
| 758 EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kContextIdKey, | 758 EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kContextIdKey, |
| 759 &context_id)); | 759 &context_id)); |
| 760 EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kCandidateIdKey, | 760 EXTENSION_FUNCTION_VALIDATE(args->GetInteger(keys::kCandidateIdKey, |
| 761 &candidate_id)); | 761 &candidate_id)); |
| 762 | 762 |
| 763 if (engine->SetCursorPosition(context_id, candidate_id, &error_)) { | 763 if (engine->SetCursorPosition(context_id, candidate_id, &error_)) { |
| 764 result_.reset(Value::CreateBooleanValue(true)); | 764 SetResult(Value::CreateBooleanValue(true)); |
| 765 } else { | 765 } else { |
| 766 result_.reset(Value::CreateBooleanValue(false)); | 766 SetResult(Value::CreateBooleanValue(false)); |
| 767 } | 767 } |
| 768 return true; | 768 return true; |
| 769 } | 769 } |
| 770 | 770 |
| 771 bool SetMenuItemsFunction::RunImpl() { | 771 bool SetMenuItemsFunction::RunImpl() { |
| 772 DictionaryValue* args; | 772 DictionaryValue* args; |
| 773 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args)); | 773 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &args)); |
| 774 | 774 |
| 775 std::string engine_id; | 775 std::string engine_id; |
| 776 EXTENSION_FUNCTION_VALIDATE(args->GetString(keys::kEngineIdKey, &engine_id)); | 776 EXTENSION_FUNCTION_VALIDATE(args->GetString(keys::kEngineIdKey, &engine_id)); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 828 | 828 |
| 829 bool handled = false; | 829 bool handled = false; |
| 830 EXTENSION_FUNCTION_VALIDATE(args_->GetBoolean(1, &handled)); | 830 EXTENSION_FUNCTION_VALIDATE(args_->GetBoolean(1, &handled)); |
| 831 | 831 |
| 832 ExtensionInputImeEventRouter::GetInstance()->OnEventHandled( | 832 ExtensionInputImeEventRouter::GetInstance()->OnEventHandled( |
| 833 extension_id(), request_id_str, handled); | 833 extension_id(), request_id_str, handled); |
| 834 | 834 |
| 835 return true; | 835 return true; |
| 836 } | 836 } |
| 837 #endif | 837 #endif |
| OLD | NEW |