Chromium Code Reviews| Index: chrome/browser/chromeos/extensions/input_method_api.cc |
| diff --git a/chrome/browser/chromeos/extensions/input_method_api.cc b/chrome/browser/chromeos/extensions/input_method_api.cc |
| index 582f8e13195e70b3f2dfad791fb5729c53d45b24..587d2b66dc2a0ce99f93f829722146639544f79d 100644 |
| --- a/chrome/browser/chromeos/extensions/input_method_api.cc |
| +++ b/chrome/browser/chromeos/extensions/input_method_api.cc |
| @@ -9,6 +9,7 @@ |
| #include "chrome/browser/chromeos/extensions/input_method_event_router.h" |
| #include "chrome/browser/extensions/api/input_ime/input_ime_api.h" |
| #include "chromeos/ime/extension_ime_util.h" |
| +#include "chromeos/ime/input_method_descriptor.h" |
| #include "chromeos/ime/input_method_manager.h" |
| #include "extensions/browser/extension_function_registry.h" |
| #include "extensions/browser/extension_system.h" |
| @@ -22,22 +23,63 @@ const char kXkbPrefix[] = "xkb:"; |
| namespace extensions { |
| -GetInputMethodFunction::GetInputMethodFunction() { |
| +bool GetCurrentInputMethodFunction::RunSync() { |
| +#if !defined(OS_CHROMEOS) |
| + NOTREACHED(); |
| + return false; |
| +#else |
| + chromeos::input_method::InputMethodManager* manager = |
| + chromeos::input_method::InputMethodManager::Get(); |
| + SetResult( |
| + base::Value::CreateStringValue(manager->GetCurrentInputMethod().id())); |
|
not at google - send to devlin
2014/06/06 16:36:04
use new base::StringValue not CreateStringValue
Shu Chen
2014/06/07 05:31:09
Done.
|
| + return true; |
| +#endif |
| } |
| -GetInputMethodFunction::~GetInputMethodFunction() { |
| +bool SetCurrentInputMethodFunction::RunSync() { |
| +#if !defined(OS_CHROMEOS) |
|
not at google - send to devlin
2014/06/06 16:36:04
better here (and everywhere) is just EXTENSION_FUN
Shu Chen
2014/06/07 05:31:09
Done.
|
| + NOTREACHED(); |
| + return false; |
| +#else |
| + std::string new_input_method; |
| + EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &new_input_method)); |
| + chromeos::input_method::InputMethodManager* manager = |
| + chromeos::input_method::InputMethodManager::Get(); |
| + const std::vector<std::string>& input_methods = |
| + manager->GetActiveInputMethodIds(); |
| + for (size_t i = 0; i < input_methods.size(); ++i) { |
| + const std::string& input_method = input_methods[i]; |
| + if (input_method == new_input_method) { |
| + manager->ChangeInputMethod(new_input_method); |
| + SetResult(new base::FundamentalValue(true)); |
|
not at google - send to devlin
2014/06/06 16:36:04
i.e. just return true here
Shu Chen
2014/06/07 05:31:09
Done.
|
| + return true; |
| + } |
| + } |
| + SetResult(new base::FundamentalValue(false)); |
| + return true; |
|
not at google - send to devlin
2014/06/06 16:36:04
then here set _error (like "cannot find ime with i
Shu Chen
2014/06/07 05:31:09
Done.
|
| +#endif |
| } |
| -bool GetInputMethodFunction::RunSync() { |
| +bool GetInputMethodsFunction::RunSync() { |
| #if !defined(OS_CHROMEOS) |
| NOTREACHED(); |
| return false; |
| #else |
| + base::ListValue* output = new base::ListValue(); |
| chromeos::input_method::InputMethodManager* manager = |
| chromeos::input_method::InputMethodManager::Get(); |
| - const std::string input_method = InputMethodAPI::GetInputMethodForXkb( |
| - manager->GetCurrentInputMethod().id()); |
| - SetResult(base::Value::CreateStringValue(input_method)); |
| + scoped_ptr<chromeos::input_method::InputMethodDescriptors> input_methods = |
| + manager->GetActiveInputMethods(); |
| + for (size_t i = 0; i < input_methods->size(); ++i) { |
| + const chromeos::input_method::InputMethodDescriptor& input_method = |
| + (*input_methods)[i]; |
| + base::DictionaryValue* val = new base::DictionaryValue(); |
| + val->SetString("id", input_method.id()); |
| + val->SetString("name", input_method.name()); |
| + val->SetString("indicator", input_method.indicator()); |
| + output->Append(val); |
|
not at google - send to devlin
2014/06/06 16:36:04
what you have here is totally fine. but a fun clas
Shu Chen
2014/06/07 05:31:09
Just found that value_builder.cc is only for test
not at google - send to devlin
2014/06/10 19:48:27
bummer. ok, there's actually no reason that should
|
| + } |
| + SetResult(output); |
| return true; |
| #endif |
| } |
| @@ -70,7 +112,9 @@ InputMethodAPI::InputMethodAPI(content::BrowserContext* context) |
| EventRouter::Get(context_)->RegisterObserver(this, kOnInputMethodChanged); |
| ExtensionFunctionRegistry* registry = |
| ExtensionFunctionRegistry::GetInstance(); |
| - registry->RegisterFunction<GetInputMethodFunction>(); |
| + registry->RegisterFunction<GetCurrentInputMethodFunction>(); |
| + registry->RegisterFunction<SetCurrentInputMethodFunction>(); |
| + registry->RegisterFunction<GetInputMethodsFunction>(); |
| registry->RegisterFunction<StartImeFunction>(); |
|
not at google - send to devlin
2014/06/06 16:36:04
you shouldn't actually need these RegisterFunction
not at google - send to devlin
2014/06/06 16:38:11
never mind, looks like the ime private API doesn't
|
| } |