| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "extensions/browser/api/virtual_keyboard_private/virtual_keyboard_priva
te_api.h" | 5 #include "extensions/browser/api/virtual_keyboard_private/virtual_keyboard_priva
te_api.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
| 11 #include "base/strings/string16.h" | 11 #include "base/strings/string16.h" |
| 12 #include "extensions/browser/api/extensions_api_client.h" | 12 #include "extensions/browser/api/extensions_api_client.h" |
| 13 #include "extensions/browser/api/virtual_keyboard_private/virtual_keyboard_deleg
ate.h" | 13 #include "extensions/browser/api/virtual_keyboard_private/virtual_keyboard_deleg
ate.h" |
| 14 #include "extensions/browser/extension_function_registry.h" | 14 #include "extensions/browser/extension_function_registry.h" |
| 15 #include "extensions/common/api/virtual_keyboard_private.h" | 15 #include "extensions/common/api/virtual_keyboard_private.h" |
| 16 #include "ui/events/event.h" | 16 #include "ui/events/event.h" |
| 17 | 17 |
| 18 namespace SetMode = extensions::api::virtual_keyboard_private::SetMode; | |
| 19 namespace SetRequestedKeyboardState = | |
| 20 extensions::api::virtual_keyboard_private::SetKeyboardState; | |
| 21 | |
| 22 namespace extensions { | 18 namespace extensions { |
| 23 | 19 |
| 24 namespace { | 20 namespace { |
| 25 | 21 |
| 26 const char kNotYetImplementedError[] = | 22 const char kNotYetImplementedError[] = |
| 27 "API is not implemented on this platform."; | 23 "API is not implemented on this platform."; |
| 28 const char kVirtualKeyboardNotEnabled[] = | 24 const char kVirtualKeyboardNotEnabled[] = |
| 29 "The virtual keyboard is not enabled."; | 25 "The virtual keyboard is not enabled."; |
| 26 const char kUnknownError[] = "Unknown error."; |
| 30 | 27 |
| 31 typedef BrowserContextKeyedAPIFactory<VirtualKeyboardAPI> factory; | 28 namespace keyboard = api::virtual_keyboard_private; |
| 32 | |
| 33 VirtualKeyboardDelegate* GetDelegate(SyncExtensionFunction* f) { | |
| 34 VirtualKeyboardAPI* api = factory::Get(f->browser_context()); | |
| 35 DCHECK(api); | |
| 36 return api ? api->delegate() : nullptr; | |
| 37 } | |
| 38 | 29 |
| 39 } // namespace | 30 } // namespace |
| 40 | 31 |
| 41 bool VirtualKeyboardPrivateInsertTextFunction::RunSync() { | 32 bool VirtualKeyboardPrivateFunction::PreRunValidation(std::string* error) { |
| 42 VirtualKeyboardDelegate* delegate = GetDelegate(this); | 33 if (!UIThreadExtensionFunction::PreRunValidation(error)) |
| 43 if (delegate) { | 34 return false; |
| 44 base::string16 text; | 35 |
| 45 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &text)); | 36 VirtualKeyboardAPI* api = |
| 46 return delegate->InsertText(text); | 37 BrowserContextKeyedAPIFactory<VirtualKeyboardAPI>::Get(browser_context()); |
| 38 DCHECK(api); |
| 39 delegate_ = api->delegate(); |
| 40 if (!delegate_) { |
| 41 *error = kNotYetImplementedError; |
| 42 return false; |
| 47 } | 43 } |
| 48 error_ = kNotYetImplementedError; | 44 return true; |
| 49 return false; | |
| 50 } | 45 } |
| 51 | 46 |
| 52 bool VirtualKeyboardPrivateSendKeyEventFunction::RunSync() { | 47 VirtualKeyboardPrivateFunction::~VirtualKeyboardPrivateFunction() {} |
| 53 VirtualKeyboardDelegate* delegate = GetDelegate(this); | |
| 54 if (delegate) { | |
| 55 base::Value* options_value = nullptr; | |
| 56 base::DictionaryValue* params = nullptr; | |
| 57 std::string type; | |
| 58 int char_value; | |
| 59 int key_code; | |
| 60 std::string key_name; | |
| 61 int modifiers; | |
| 62 | 48 |
| 63 EXTENSION_FUNCTION_VALIDATE(args_->Get(0, &options_value)); | 49 ExtensionFunction::ResponseAction |
| 64 EXTENSION_FUNCTION_VALIDATE(options_value->GetAsDictionary(¶ms)); | 50 VirtualKeyboardPrivateInsertTextFunction::Run() { |
| 65 EXTENSION_FUNCTION_VALIDATE(params->GetString("type", &type)); | 51 base::string16 text; |
| 66 EXTENSION_FUNCTION_VALIDATE(params->GetInteger("charValue", &char_value)); | 52 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &text)); |
| 67 EXTENSION_FUNCTION_VALIDATE(params->GetInteger("keyCode", &key_code)); | 53 if (!delegate()->InsertText(text)) |
| 68 EXTENSION_FUNCTION_VALIDATE(params->GetString("keyName", &key_name)); | 54 return RespondNow(Error(kUnknownError)); |
| 69 EXTENSION_FUNCTION_VALIDATE(params->GetInteger("modifiers", &modifiers)); | 55 return RespondNow(NoArguments()); |
| 70 return delegate->SendKeyEvent( | |
| 71 type, char_value, key_code, key_name, modifiers); | |
| 72 } | |
| 73 error_ = kNotYetImplementedError; | |
| 74 return false; | |
| 75 } | 56 } |
| 76 | 57 |
| 77 bool VirtualKeyboardPrivateHideKeyboardFunction::RunSync() { | 58 ExtensionFunction::ResponseAction |
| 78 VirtualKeyboardDelegate* delegate = GetDelegate(this); | 59 VirtualKeyboardPrivateSendKeyEventFunction::Run() { |
| 79 if (delegate) | 60 std::unique_ptr<keyboard::SendKeyEvent::Params> params( |
| 80 return delegate->HideKeyboard(); | 61 keyboard::SendKeyEvent::Params::Create(*args_)); |
| 81 error_ = kNotYetImplementedError; | 62 EXTENSION_FUNCTION_VALIDATE(params); |
| 82 return false; | 63 EXTENSION_FUNCTION_VALIDATE(params->key_event.modifiers); |
| 64 const keyboard::VirtualKeyboardEvent& event = params->key_event; |
| 65 if (!delegate()->SendKeyEvent(keyboard::ToString(event.type), |
| 66 event.char_value, event.key_code, |
| 67 event.key_name, *event.modifiers)) { |
| 68 return RespondNow(Error(kUnknownError)); |
| 69 } |
| 70 return RespondNow(NoArguments()); |
| 83 } | 71 } |
| 84 | 72 |
| 85 bool VirtualKeyboardPrivateSetHotrodKeyboardFunction::RunSync() { | 73 ExtensionFunction::ResponseAction |
| 86 VirtualKeyboardDelegate* delegate = GetDelegate(this); | 74 VirtualKeyboardPrivateHideKeyboardFunction::Run() { |
| 87 if (delegate) { | 75 if (!delegate()->HideKeyboard()) |
| 88 bool enable; | 76 return RespondNow(Error(kUnknownError)); |
| 89 EXTENSION_FUNCTION_VALIDATE(args_->GetBoolean(0, &enable)); | 77 return RespondNow(NoArguments()); |
| 90 delegate->SetHotrodKeyboard(enable); | |
| 91 return true; | |
| 92 } | |
| 93 error_ = kNotYetImplementedError; | |
| 94 return false; | |
| 95 } | 78 } |
| 96 | 79 |
| 97 bool VirtualKeyboardPrivateLockKeyboardFunction::RunSync() { | 80 ExtensionFunction::ResponseAction |
| 98 VirtualKeyboardDelegate* delegate = GetDelegate(this); | 81 VirtualKeyboardPrivateSetHotrodKeyboardFunction::Run() { |
| 99 if (delegate) { | 82 bool enable = false; |
| 100 bool lock; | 83 EXTENSION_FUNCTION_VALIDATE(args_->GetBoolean(0, &enable)); |
| 101 EXTENSION_FUNCTION_VALIDATE(args_->GetBoolean(0, &lock)); | 84 delegate()->SetHotrodKeyboard(enable); |
| 102 return delegate->LockKeyboard(lock); | 85 return RespondNow(NoArguments()); |
| 103 } | |
| 104 error_ = kNotYetImplementedError; | |
| 105 return false; | |
| 106 } | 86 } |
| 107 | 87 |
| 108 bool VirtualKeyboardPrivateKeyboardLoadedFunction::RunSync() { | 88 ExtensionFunction::ResponseAction |
| 109 VirtualKeyboardDelegate* delegate = GetDelegate(this); | 89 VirtualKeyboardPrivateLockKeyboardFunction::Run() { |
| 110 if (delegate) | 90 bool lock = false; |
| 111 return delegate->OnKeyboardLoaded(); | 91 EXTENSION_FUNCTION_VALIDATE(args_->GetBoolean(0, &lock)); |
| 112 error_ = kNotYetImplementedError; | 92 if (!delegate()->LockKeyboard(lock)) |
| 113 return false; | 93 return RespondNow(Error(kUnknownError)); |
| 94 return RespondNow(NoArguments()); |
| 114 } | 95 } |
| 115 | 96 |
| 116 bool VirtualKeyboardPrivateGetKeyboardConfigFunction::RunSync() { | 97 ExtensionFunction::ResponseAction |
| 117 VirtualKeyboardDelegate* delegate = GetDelegate(this); | 98 VirtualKeyboardPrivateKeyboardLoadedFunction::Run() { |
| 118 if (delegate) { | 99 if (!delegate()->OnKeyboardLoaded()) |
| 119 std::unique_ptr<base::DictionaryValue> results(new base::DictionaryValue()); | 100 return RespondNow(Error(kUnknownError)); |
| 120 if (delegate->GetKeyboardConfig(results.get())) { | 101 return RespondNow(NoArguments()); |
| 121 SetResult(std::move(results)); | |
| 122 return true; | |
| 123 } | |
| 124 } | |
| 125 return false; | |
| 126 } | 102 } |
| 127 | 103 |
| 128 bool VirtualKeyboardPrivateOpenSettingsFunction::RunSync() { | 104 ExtensionFunction::ResponseAction |
| 129 VirtualKeyboardDelegate* delegate = GetDelegate(this); | 105 VirtualKeyboardPrivateGetKeyboardConfigFunction::Run() { |
| 130 if (delegate) { | 106 std::unique_ptr<base::DictionaryValue> results(new base::DictionaryValue()); |
| 131 if (delegate->IsLanguageSettingsEnabled()) | 107 if (!delegate()->GetKeyboardConfig(results.get())) |
| 132 return delegate->ShowLanguageSettings(); | 108 return RespondNow(Error(kUnknownError)); |
| 133 return false; | 109 return RespondNow(OneArgument(std::move(results))); |
| 134 } | |
| 135 error_ = kNotYetImplementedError; | |
| 136 return false; | |
| 137 } | 110 } |
| 138 | 111 |
| 139 bool VirtualKeyboardPrivateSetModeFunction::RunSync() { | 112 ExtensionFunction::ResponseAction |
| 140 VirtualKeyboardDelegate* delegate = GetDelegate(this); | 113 VirtualKeyboardPrivateOpenSettingsFunction::Run() { |
| 141 if (delegate) { | 114 if (!delegate()->IsLanguageSettingsEnabled() || |
| 142 std::unique_ptr<SetMode::Params> params = SetMode::Params::Create(*args_); | 115 !delegate()->ShowLanguageSettings()) { |
| 143 EXTENSION_FUNCTION_VALIDATE(params); | 116 return RespondNow(Error(kUnknownError)); |
| 144 if (!delegate->SetVirtualKeyboardMode(params->mode)) { | |
| 145 error_ = kVirtualKeyboardNotEnabled; | |
| 146 return false; | |
| 147 } else { | |
| 148 return true; | |
| 149 } | |
| 150 } | 117 } |
| 151 error_ = kNotYetImplementedError; | 118 return RespondNow(NoArguments()); |
| 152 return false; | |
| 153 } | 119 } |
| 154 | 120 |
| 155 bool VirtualKeyboardPrivateSetKeyboardStateFunction::RunSync() { | 121 ExtensionFunction::ResponseAction VirtualKeyboardPrivateSetModeFunction::Run() { |
| 156 VirtualKeyboardDelegate* delegate = GetDelegate(this); | 122 std::unique_ptr<keyboard::SetMode::Params> params = |
| 157 if (delegate) { | 123 keyboard::SetMode::Params::Create(*args_); |
| 158 std::unique_ptr<SetRequestedKeyboardState::Params> params = | 124 EXTENSION_FUNCTION_VALIDATE(params); |
| 159 SetRequestedKeyboardState::Params::Create(*args_); | 125 if (!delegate()->SetVirtualKeyboardMode(params->mode)) |
| 160 EXTENSION_FUNCTION_VALIDATE(params); | 126 return RespondNow(Error(kVirtualKeyboardNotEnabled)); |
| 161 if (!delegate->SetRequestedKeyboardState(params->state)) { | 127 return RespondNow(NoArguments()); |
| 162 error_ = kVirtualKeyboardNotEnabled; | 128 } |
| 163 return false; | 129 |
| 164 } else { | 130 ExtensionFunction::ResponseAction |
| 165 return true; | 131 VirtualKeyboardPrivateSetKeyboardStateFunction::Run() { |
| 166 } | 132 std::unique_ptr<keyboard::SetKeyboardState::Params> params = |
| 167 } | 133 keyboard::SetKeyboardState::Params::Create(*args_); |
| 168 error_ = kNotYetImplementedError; | 134 EXTENSION_FUNCTION_VALIDATE(params); |
| 169 return false; | 135 if (!delegate()->SetRequestedKeyboardState(params->state)) |
| 136 return RespondNow(Error(kVirtualKeyboardNotEnabled)); |
| 137 return RespondNow(NoArguments()); |
| 170 } | 138 } |
| 171 | 139 |
| 172 VirtualKeyboardAPI::VirtualKeyboardAPI(content::BrowserContext* context) { | 140 VirtualKeyboardAPI::VirtualKeyboardAPI(content::BrowserContext* context) { |
| 173 delegate_ = | 141 delegate_ = ExtensionsAPIClient::Get()->CreateVirtualKeyboardDelegate(); |
| 174 extensions::ExtensionsAPIClient::Get()->CreateVirtualKeyboardDelegate(); | |
| 175 } | 142 } |
| 176 | 143 |
| 177 VirtualKeyboardAPI::~VirtualKeyboardAPI() { | 144 VirtualKeyboardAPI::~VirtualKeyboardAPI() { |
| 178 } | 145 } |
| 179 | 146 |
| 180 static base::LazyInstance<BrowserContextKeyedAPIFactory<VirtualKeyboardAPI>> | 147 static base::LazyInstance<BrowserContextKeyedAPIFactory<VirtualKeyboardAPI>> |
| 181 g_factory = LAZY_INSTANCE_INITIALIZER; | 148 g_factory = LAZY_INSTANCE_INITIALIZER; |
| 182 | 149 |
| 183 // static | 150 // static |
| 184 BrowserContextKeyedAPIFactory<VirtualKeyboardAPI>* | 151 BrowserContextKeyedAPIFactory<VirtualKeyboardAPI>* |
| 185 VirtualKeyboardAPI::GetFactoryInstance() { | 152 VirtualKeyboardAPI::GetFactoryInstance() { |
| 186 return g_factory.Pointer(); | 153 return g_factory.Pointer(); |
| 187 } | 154 } |
| 188 | 155 |
| 189 } // namespace extensions | 156 } // namespace extensions |
| OLD | NEW |