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 |