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/chromeos/extensions/input_method_api.h" | 5 #include "chrome/browser/chromeos/extensions/input_method_api.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/lazy_instance.h" | 8 #include "base/lazy_instance.h" |
9 #include "base/values.h" | 9 #include "base/values.h" |
| 10 #include "chrome/browser/chromeos/extensions/dictionary_event_router.h" |
10 #include "chrome/browser/chromeos/extensions/input_method_event_router.h" | 11 #include "chrome/browser/chromeos/extensions/input_method_event_router.h" |
11 #include "chrome/browser/chromeos/input_method/input_method_util.h" | 12 #include "chrome/browser/chromeos/input_method/input_method_util.h" |
12 #include "chrome/browser/extensions/api/input_ime/input_ime_api.h" | 13 #include "chrome/browser/extensions/api/input_ime/input_ime_api.h" |
13 #include "chrome/browser/spellchecker/spellcheck_factory.h" | 14 #include "chrome/browser/spellchecker/spellcheck_factory.h" |
14 #include "chrome/browser/spellchecker/spellcheck_service.h" | 15 #include "chrome/browser/spellchecker/spellcheck_service.h" |
15 #include "chromeos/chromeos_switches.h" | 16 #include "chromeos/chromeos_switches.h" |
16 #include "extensions/browser/extension_function_registry.h" | 17 #include "extensions/browser/extension_function_registry.h" |
17 #include "extensions/browser/extension_system.h" | 18 #include "extensions/browser/extension_system.h" |
18 #include "extensions/common/value_builder.h" | 19 #include "extensions/common/value_builder.h" |
19 #include "ui/base/ime/chromeos/extension_ime_util.h" | 20 #include "ui/base/ime/chromeos/extension_ime_util.h" |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 // - Already in the dictionary. | 151 // - Already in the dictionary. |
151 // - Not a UTF8 string. | 152 // - Not a UTF8 string. |
152 // - Longer than 99 bytes (MAX_CUSTOM_DICTIONARY_WORD_BYTES). | 153 // - Longer than 99 bytes (MAX_CUSTOM_DICTIONARY_WORD_BYTES). |
153 // - Leading/trailing whitespace. | 154 // - Leading/trailing whitespace. |
154 // - Empty. | 155 // - Empty. |
155 return RespondNow(Error("Unable to add invalid word to dictionary.")); | 156 return RespondNow(Error("Unable to add invalid word to dictionary.")); |
156 #endif | 157 #endif |
157 } | 158 } |
158 | 159 |
159 // static | 160 // static |
| 161 const char InputMethodAPI::kOnDictionaryChanged[] = |
| 162 "inputMethodPrivate.onDictionaryChanged"; |
| 163 |
| 164 // static |
| 165 const char InputMethodAPI::kOnDictionaryLoaded[] = |
| 166 "inputMethodPrivate.onDictionaryLoaded"; |
| 167 |
| 168 // static |
160 const char InputMethodAPI::kOnInputMethodChanged[] = | 169 const char InputMethodAPI::kOnInputMethodChanged[] = |
161 "inputMethodPrivate.onChanged"; | 170 "inputMethodPrivate.onChanged"; |
162 | 171 |
163 InputMethodAPI::InputMethodAPI(content::BrowserContext* context) | 172 InputMethodAPI::InputMethodAPI(content::BrowserContext* context) |
164 : context_(context) { | 173 : context_(context) { |
165 EventRouter::Get(context_)->RegisterObserver(this, kOnInputMethodChanged); | 174 EventRouter::Get(context_)->RegisterObserver(this, kOnInputMethodChanged); |
| 175 EventRouter::Get(context_)->RegisterObserver(this, kOnDictionaryChanged); |
| 176 EventRouter::Get(context_)->RegisterObserver(this, kOnDictionaryLoaded); |
166 ExtensionFunctionRegistry* registry = | 177 ExtensionFunctionRegistry* registry = |
167 ExtensionFunctionRegistry::GetInstance(); | 178 ExtensionFunctionRegistry::GetInstance(); |
168 registry->RegisterFunction<GetInputMethodConfigFunction>(); | 179 registry->RegisterFunction<GetInputMethodConfigFunction>(); |
169 registry->RegisterFunction<GetCurrentInputMethodFunction>(); | 180 registry->RegisterFunction<GetCurrentInputMethodFunction>(); |
170 registry->RegisterFunction<SetCurrentInputMethodFunction>(); | 181 registry->RegisterFunction<SetCurrentInputMethodFunction>(); |
171 registry->RegisterFunction<GetInputMethodsFunction>(); | 182 registry->RegisterFunction<GetInputMethodsFunction>(); |
172 registry->RegisterFunction<FetchAllDictionaryWordsFunction>(); | 183 registry->RegisterFunction<FetchAllDictionaryWordsFunction>(); |
173 registry->RegisterFunction<AddWordToDictionaryFunction>(); | 184 registry->RegisterFunction<AddWordToDictionaryFunction>(); |
174 } | 185 } |
175 | 186 |
(...skipping 10 matching lines...) Expand all Loading... |
186 } | 197 } |
187 | 198 |
188 void InputMethodAPI::Shutdown() { | 199 void InputMethodAPI::Shutdown() { |
189 // UnregisterObserver may have already been called in OnListenerAdded, | 200 // UnregisterObserver may have already been called in OnListenerAdded, |
190 // but it is safe to call it more than once. | 201 // but it is safe to call it more than once. |
191 EventRouter::Get(context_)->UnregisterObserver(this); | 202 EventRouter::Get(context_)->UnregisterObserver(this); |
192 } | 203 } |
193 | 204 |
194 void InputMethodAPI::OnListenerAdded( | 205 void InputMethodAPI::OnListenerAdded( |
195 const extensions::EventListenerInfo& details) { | 206 const extensions::EventListenerInfo& details) { |
196 DCHECK(!input_method_event_router_.get()); | 207 if (details.event_name == kOnInputMethodChanged) { |
197 input_method_event_router_.reset( | 208 if (!input_method_event_router_.get()) { |
198 new chromeos::ExtensionInputMethodEventRouter(context_)); | 209 input_method_event_router_.reset( |
199 EventRouter::Get(context_)->UnregisterObserver(this); | 210 new chromeos::ExtensionInputMethodEventRouter(context_)); |
| 211 } |
| 212 } else if (details.event_name == kOnDictionaryChanged || |
| 213 details.event_name == kOnDictionaryLoaded) { |
| 214 if (!dictionary_event_router_.get()) { |
| 215 dictionary_event_router_.reset( |
| 216 new chromeos::ExtensionDictionaryEventRouter(context_)); |
| 217 } |
| 218 } |
200 } | 219 } |
201 | 220 |
202 static base::LazyInstance<BrowserContextKeyedAPIFactory<InputMethodAPI> > | 221 static base::LazyInstance<BrowserContextKeyedAPIFactory<InputMethodAPI> > |
203 g_factory = LAZY_INSTANCE_INITIALIZER; | 222 g_factory = LAZY_INSTANCE_INITIALIZER; |
204 | 223 |
205 // static | 224 // static |
206 BrowserContextKeyedAPIFactory<InputMethodAPI>* | 225 BrowserContextKeyedAPIFactory<InputMethodAPI>* |
207 InputMethodAPI::GetFactoryInstance() { | 226 InputMethodAPI::GetFactoryInstance() { |
208 return g_factory.Pointer(); | 227 return g_factory.Pointer(); |
209 } | 228 } |
210 | 229 |
211 } // namespace extensions | 230 } // namespace extensions |
OLD | NEW |