OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 // This file is for non-chromeos (win & linux) functions, such as | 5 // This file is for non-chromeos (win & linux) functions, such as |
6 // chrome.input.ime.activate, chrome.input.ime.createWindow and | 6 // chrome.input.ime.activate, chrome.input.ime.createWindow and |
7 // chrome.input.ime.onSelectionChanged. | 7 // chrome.input.ime.onSelectionChanged. |
8 // TODO(azurewei): May refactor the code structure by using delegate or | 8 // TODO(azurewei): May refactor the code structure by using delegate or |
9 // redesign the API to remove this platform-specific file in the future. | 9 // redesign the API to remove this platform-specific file in the future. |
10 | 10 |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
131 void InputImeAPI::OnExtensionLoaded(content::BrowserContext* browser_context, | 131 void InputImeAPI::OnExtensionLoaded(content::BrowserContext* browser_context, |
132 const Extension* extension) { | 132 const Extension* extension) { |
133 // No-op if called multiple times. | 133 // No-op if called multiple times. |
134 ui::IMEBridge::Initialize(); | 134 ui::IMEBridge::Initialize(); |
135 | 135 |
136 // Set the preference kPrefNeverActivatedSinceLoaded true to indicate | 136 // Set the preference kPrefNeverActivatedSinceLoaded true to indicate |
137 // input.ime.activate API has been never called since loaded. | 137 // input.ime.activate API has been never called since loaded. |
138 Profile* profile = Profile::FromBrowserContext(browser_context); | 138 Profile* profile = Profile::FromBrowserContext(browser_context); |
139 ExtensionPrefs::Get(profile)->UpdateExtensionPref( | 139 ExtensionPrefs::Get(profile)->UpdateExtensionPref( |
140 extension->id(), kPrefNeverActivatedSinceLoaded, | 140 extension->id(), kPrefNeverActivatedSinceLoaded, |
141 new base::FundamentalValue(true)); | 141 new base::Value(true)); |
142 } | 142 } |
143 | 143 |
144 void InputImeAPI::OnExtensionUnloaded(content::BrowserContext* browser_context, | 144 void InputImeAPI::OnExtensionUnloaded(content::BrowserContext* browser_context, |
145 const Extension* extension, | 145 const Extension* extension, |
146 UnloadedExtensionInfo::Reason reason) { | 146 UnloadedExtensionInfo::Reason reason) { |
147 InputImeEventRouter* event_router = | 147 InputImeEventRouter* event_router = |
148 GetInputImeEventRouter(Profile::FromBrowserContext(browser_context)); | 148 GetInputImeEventRouter(Profile::FromBrowserContext(browser_context)); |
149 if (event_router) { | 149 if (event_router) { |
150 // Records the extension is not the last active IME engine. | 150 // Records the extension is not the last active IME engine. |
151 ExtensionPrefs::Get(Profile::FromBrowserContext(browser_context)) | 151 ExtensionPrefs::Get(Profile::FromBrowserContext(browser_context)) |
152 ->UpdateExtensionPref(extension->id(), kPrefLastActiveEngine, | 152 ->UpdateExtensionPref(extension->id(), kPrefLastActiveEngine, |
153 new base::FundamentalValue(false)); | 153 new base::Value(false)); |
154 event_router->DeleteInputMethodEngine(extension->id()); | 154 event_router->DeleteInputMethodEngine(extension->id()); |
155 } | 155 } |
156 } | 156 } |
157 | 157 |
158 void InputImeAPI::OnListenerAdded(const EventListenerInfo& details) {} | 158 void InputImeAPI::OnListenerAdded(const EventListenerInfo& details) {} |
159 | 159 |
160 InputImeEventRouter::InputImeEventRouter(Profile* profile) | 160 InputImeEventRouter::InputImeEventRouter(Profile* profile) |
161 : InputImeEventRouterBase(profile), active_engine_(nullptr) {} | 161 : InputImeEventRouterBase(profile), active_engine_(nullptr) {} |
162 | 162 |
163 InputImeEventRouter::~InputImeEventRouter() { | 163 InputImeEventRouter::~InputImeEventRouter() { |
164 if (active_engine_) | 164 if (active_engine_) |
165 DeleteInputMethodEngine(active_engine_->GetExtensionId()); | 165 DeleteInputMethodEngine(active_engine_->GetExtensionId()); |
166 } | 166 } |
167 | 167 |
168 InputMethodEngineBase* InputImeEventRouter::GetActiveEngine( | 168 InputMethodEngineBase* InputImeEventRouter::GetActiveEngine( |
169 const std::string& extension_id) { | 169 const std::string& extension_id) { |
170 return (ui::IMEBridge::Get()->GetCurrentEngineHandler() && | 170 return (ui::IMEBridge::Get()->GetCurrentEngineHandler() && |
171 active_engine_ && | 171 active_engine_ && |
172 active_engine_->GetExtensionId() == extension_id) | 172 active_engine_->GetExtensionId() == extension_id) |
173 ? active_engine_ | 173 ? active_engine_ |
174 : nullptr; | 174 : nullptr; |
175 } | 175 } |
176 | 176 |
177 void InputImeEventRouter::SetActiveEngine(const std::string& extension_id) { | 177 void InputImeEventRouter::SetActiveEngine(const std::string& extension_id) { |
178 // Records the extension is the last active IME engine. | 178 // Records the extension is the last active IME engine. |
179 ExtensionPrefs::Get(GetProfile()) | 179 ExtensionPrefs::Get(GetProfile()) |
180 ->UpdateExtensionPref(extension_id, kPrefLastActiveEngine, | 180 ->UpdateExtensionPref(extension_id, kPrefLastActiveEngine, |
181 new base::FundamentalValue(true)); | 181 new base::Value(true)); |
182 if (active_engine_) { | 182 if (active_engine_) { |
183 if (active_engine_->GetExtensionId() == extension_id) { | 183 if (active_engine_->GetExtensionId() == extension_id) { |
184 active_engine_->Enable(std::string()); | 184 active_engine_->Enable(std::string()); |
185 ui::IMEBridge::Get()->SetCurrentEngineHandler(active_engine_); | 185 ui::IMEBridge::Get()->SetCurrentEngineHandler(active_engine_); |
186 return; | 186 return; |
187 } | 187 } |
188 // Records the extension is not the last active IME engine. | 188 // Records the extension is not the last active IME engine. |
189 ExtensionPrefs::Get(GetProfile()) | 189 ExtensionPrefs::Get(GetProfile()) |
190 ->UpdateExtensionPref(active_engine_->GetExtensionId(), | 190 ->UpdateExtensionPref(active_engine_->GetExtensionId(), |
191 kPrefLastActiveEngine, | 191 kPrefLastActiveEngine, |
192 new base::FundamentalValue(false)); | 192 new base::Value(false)); |
193 DeleteInputMethodEngine(active_engine_->GetExtensionId()); | 193 DeleteInputMethodEngine(active_engine_->GetExtensionId()); |
194 } | 194 } |
195 | 195 |
196 std::unique_ptr<input_method::InputMethodEngine> engine( | 196 std::unique_ptr<input_method::InputMethodEngine> engine( |
197 new input_method::InputMethodEngine()); | 197 new input_method::InputMethodEngine()); |
198 std::unique_ptr<InputMethodEngineBase::Observer> observer( | 198 std::unique_ptr<InputMethodEngineBase::Observer> observer( |
199 new ImeObserverNonChromeOS(extension_id, GetProfile())); | 199 new ImeObserverNonChromeOS(extension_id, GetProfile())); |
200 engine->Initialize(std::move(observer), extension_id.c_str(), GetProfile()); | 200 engine->Initialize(std::move(observer), extension_id.c_str(), GetProfile()); |
201 engine->Enable(std::string()); | 201 engine->Enable(std::string()); |
202 active_engine_ = engine.release(); | 202 active_engine_ = engine.release(); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 never_activated_since_loaded && | 234 never_activated_since_loaded && |
235 prefs->ReadPrefAsBoolean(extension_id(), kPrefLastActiveEngine, | 235 prefs->ReadPrefAsBoolean(extension_id(), kPrefLastActiveEngine, |
236 &last_active_ime_engine) && | 236 &last_active_ime_engine) && |
237 last_active_ime_engine) { | 237 last_active_ime_engine) { |
238 // If the extension is the last active IME engine, and the API is called at | 238 // If the extension is the last active IME engine, and the API is called at |
239 // loading the extension, we can tell the API is called from restarting | 239 // loading the extension, we can tell the API is called from restarting |
240 // chrome. No need for user gesture checking. | 240 // chrome. No need for user gesture checking. |
241 event_router->SetActiveEngine(extension_id()); | 241 event_router->SetActiveEngine(extension_id()); |
242 ExtensionPrefs::Get(profile)->UpdateExtensionPref( | 242 ExtensionPrefs::Get(profile)->UpdateExtensionPref( |
243 extension_id(), kPrefNeverActivatedSinceLoaded, | 243 extension_id(), kPrefNeverActivatedSinceLoaded, |
244 new base::FundamentalValue(false)); | 244 new base::Value(false)); |
245 return RespondNow(NoArguments()); | 245 return RespondNow(NoArguments()); |
246 } | 246 } |
247 // The API has already been called at least once. | 247 // The API has already been called at least once. |
248 ExtensionPrefs::Get(profile)->UpdateExtensionPref( | 248 ExtensionPrefs::Get(profile)->UpdateExtensionPref( |
249 extension_id(), kPrefNeverActivatedSinceLoaded, | 249 extension_id(), kPrefNeverActivatedSinceLoaded, |
250 new base::FundamentalValue(false)); | 250 new base::Value(false)); |
251 | 251 |
252 // Otherwise, this API is only allowed to be called from a user action. | 252 // Otherwise, this API is only allowed to be called from a user action. |
253 if (!user_gesture()) | 253 if (!user_gesture()) |
254 return RespondNow(Error(kErrorNotCalledFromUserAction)); | 254 return RespondNow(Error(kErrorNotCalledFromUserAction)); |
255 | 255 |
256 // Disable using the warning bubble for testing. | 256 // Disable using the warning bubble for testing. |
257 if (disable_bubble_for_testing_) { | 257 if (disable_bubble_for_testing_) { |
258 event_router->SetActiveEngine(extension_id()); | 258 event_router->SetActiveEngine(extension_id()); |
259 return RespondNow(NoArguments()); | 259 return RespondNow(NoArguments()); |
260 } | 260 } |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
302 Respond(Error(kErrorNoActiveEngine)); | 302 Respond(Error(kErrorNoActiveEngine)); |
303 return; | 303 return; |
304 } | 304 } |
305 event_router->SetActiveEngine(extension_id()); | 305 event_router->SetActiveEngine(extension_id()); |
306 | 306 |
307 if (status == ImeWarningBubblePermissionStatus::GRANTED_AND_NEVER_SHOW) { | 307 if (status == ImeWarningBubblePermissionStatus::GRANTED_AND_NEVER_SHOW) { |
308 // Updates the extension preference if user checks the 'Never show this | 308 // Updates the extension preference if user checks the 'Never show this |
309 // again' check box. So we can activate the extension directly next time. | 309 // again' check box. So we can activate the extension directly next time. |
310 ExtensionPrefs::Get(profile)->UpdateExtensionPref( | 310 ExtensionPrefs::Get(profile)->UpdateExtensionPref( |
311 extension_id(), kPrefWarningBubbleNeverShow, | 311 extension_id(), kPrefWarningBubbleNeverShow, |
312 new base::FundamentalValue(true)); | 312 new base::Value(true)); |
313 } | 313 } |
314 | 314 |
315 Respond(NoArguments()); | 315 Respond(NoArguments()); |
316 } | 316 } |
317 | 317 |
318 ExtensionFunction::ResponseAction InputImeDeactivateFunction::Run() { | 318 ExtensionFunction::ResponseAction InputImeDeactivateFunction::Run() { |
319 if (!IsInputImeEnabled()) | 319 if (!IsInputImeEnabled()) |
320 return RespondNow(Error(kErrorAPIDisabled)); | 320 return RespondNow(Error(kErrorAPIDisabled)); |
321 | 321 |
322 InputMethodEngine* engine = | 322 InputMethodEngine* engine = |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
360 extension(), render_frame_host(), | 360 extension(), render_frame_host(), |
361 options.url.get() ? *options.url : url::kAboutBlankURL, | 361 options.url.get() ? *options.url : url::kAboutBlankURL, |
362 options.window_type == input_ime::WINDOW_TYPE_FOLLOWCURSOR | 362 options.window_type == input_ime::WINDOW_TYPE_FOLLOWCURSOR |
363 ? ui::ImeWindow::FOLLOW_CURSOR | 363 ? ui::ImeWindow::FOLLOW_CURSOR |
364 : ui::ImeWindow::NORMAL, | 364 : ui::ImeWindow::NORMAL, |
365 bounds, &error); | 365 bounds, &error); |
366 if (!frame_id) | 366 if (!frame_id) |
367 return RespondNow(Error(error)); | 367 return RespondNow(Error(error)); |
368 | 368 |
369 std::unique_ptr<base::DictionaryValue> result(new base::DictionaryValue()); | 369 std::unique_ptr<base::DictionaryValue> result(new base::DictionaryValue()); |
370 result->Set("frameId", new base::FundamentalValue(frame_id)); | 370 result->Set("frameId", new base::Value(frame_id)); |
371 | 371 |
372 return RespondNow(OneArgument(std::move(result))); | 372 return RespondNow(OneArgument(std::move(result))); |
373 } | 373 } |
374 | 374 |
375 ExtensionFunction::ResponseAction InputImeShowWindowFunction::Run() { | 375 ExtensionFunction::ResponseAction InputImeShowWindowFunction::Run() { |
376 if (!IsInputImeEnabled()) | 376 if (!IsInputImeEnabled()) |
377 return RespondNow(Error(kErrorAPIDisabled)); | 377 return RespondNow(Error(kErrorAPIDisabled)); |
378 | 378 |
379 InputMethodEngine* engine = | 379 InputMethodEngine* engine = |
380 GetActiveEngine(browser_context(), extension_id()); | 380 GetActiveEngine(browser_context(), extension_id()); |
(...skipping 17 matching lines...) Expand all Loading... |
398 return RespondNow(Error(kErrorNoActiveEngine)); | 398 return RespondNow(Error(kErrorNoActiveEngine)); |
399 | 399 |
400 std::unique_ptr<api::input_ime::HideWindow::Params> params( | 400 std::unique_ptr<api::input_ime::HideWindow::Params> params( |
401 api::input_ime::HideWindow::Params::Create(*args_)); | 401 api::input_ime::HideWindow::Params::Create(*args_)); |
402 EXTENSION_FUNCTION_VALIDATE(params.get()); | 402 EXTENSION_FUNCTION_VALIDATE(params.get()); |
403 engine->HideImeWindow(params->window_id); | 403 engine->HideImeWindow(params->window_id); |
404 return RespondNow(NoArguments()); | 404 return RespondNow(NoArguments()); |
405 } | 405 } |
406 | 406 |
407 } // namespace extensions | 407 } // namespace extensions |
OLD | NEW |