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 #include "blimp/engine/feature/engine_render_widget_feature.h" | 5 #include "blimp/engine/feature/engine_render_widget_feature.h" |
6 | 6 |
7 #include "base/numerics/safe_conversions.h" | 7 #include "base/numerics/safe_conversions.h" |
8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
9 #include "blimp/common/create_blimp_message.h" | 9 #include "blimp/common/create_blimp_message.h" |
10 #include "blimp/common/proto/blimp_message.pb.h" | 10 #include "blimp/common/proto/blimp_message.pb.h" |
11 #include "blimp/common/proto/compositor.pb.h" | 11 #include "blimp/common/proto/compositor.pb.h" |
12 #include "blimp/common/proto/input.pb.h" | 12 #include "blimp/common/proto/input.pb.h" |
13 #include "blimp/common/proto/render_widget.pb.h" | 13 #include "blimp/common/proto/render_widget.pb.h" |
14 #include "blimp/net/input_message_converter.h" | 14 #include "blimp/net/input_message_converter.h" |
15 #include "content/public/browser/render_widget_host.h" | 15 #include "content/public/browser/render_widget_host.h" |
16 #include "content/public/browser/render_widget_host_view.h" | 16 #include "content/public/browser/render_widget_host_view.h" |
17 #include "net/base/net_errors.h" | 17 #include "net/base/net_errors.h" |
18 #include "third_party/WebKit/public/web/WebInputEvent.h" | 18 #include "third_party/WebKit/public/web/WebInputEvent.h" |
| 19 #include "ui/events/event.h" |
| 20 #include "ui/events/keycodes/dom/dom_code.h" |
19 | 21 |
20 namespace blimp { | 22 namespace blimp { |
21 namespace engine { | 23 namespace engine { |
22 | 24 |
23 EngineRenderWidgetFeature::EngineRenderWidgetFeature(SettingsManager* settings) | 25 EngineRenderWidgetFeature::EngineRenderWidgetFeature(SettingsManager* settings) |
24 : settings_manager_(settings) { | 26 : settings_manager_(settings) { |
25 DCHECK(settings_manager_); | 27 DCHECK(settings_manager_); |
26 settings_manager_->AddObserver(this); | 28 settings_manager_->AddObserver(this); |
27 } | 29 } |
28 | 30 |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
222 message->compositor().payload().data(), | 224 message->compositor().payload().data(), |
223 payload.size()); | 225 payload.size()); |
224 delegate->OnCompositorMessageReceived(render_widget_host, payload); | 226 delegate->OnCompositorMessageReceived(render_widget_host, payload); |
225 } | 227 } |
226 break; | 228 break; |
227 case BlimpMessage::kIme: | 229 case BlimpMessage::kIme: |
228 DCHECK(message->ime().type() == ImeMessage::SET_TEXT); | 230 DCHECK(message->ime().type() == ImeMessage::SET_TEXT); |
229 render_widget_host = | 231 render_widget_host = |
230 GetRenderWidgetHost(target_tab_id, message->ime().render_widget_id()); | 232 GetRenderWidgetHost(target_tab_id, message->ime().render_widget_id()); |
231 if (render_widget_host && render_widget_host->GetView()) { | 233 if (render_widget_host && render_widget_host->GetView()) { |
232 SetTextFromIME(render_widget_host->GetView()->GetTextInputClient(), | 234 SetTextFromIME(render_widget_host, message->ime().ime_text(), |
233 message->ime().ime_text()); | 235 message->ime().auto_submit()); |
234 } | 236 } |
235 break; | 237 break; |
236 default: | 238 default: |
237 NOTREACHED(); | 239 NOTREACHED(); |
238 } | 240 } |
239 | 241 |
240 callback.Run(net::OK); | 242 callback.Run(net::OK); |
241 } | 243 } |
242 | 244 |
243 void EngineRenderWidgetFeature::OnWebPreferencesChanged() { | 245 void EngineRenderWidgetFeature::OnWebPreferencesChanged() { |
244 for (TabMap::iterator tab_it = tabs_.begin(); tab_it != tabs_.end(); | 246 for (TabMap::iterator tab_it = tabs_.begin(); tab_it != tabs_.end(); |
245 tab_it++) { | 247 tab_it++) { |
246 RenderWidgetMaps render_widget_maps = tab_it->second; | 248 RenderWidgetMaps render_widget_maps = tab_it->second; |
247 RenderWidgetToIdMap render_widget_to_id = render_widget_maps.first; | 249 RenderWidgetToIdMap render_widget_to_id = render_widget_maps.first; |
248 for (RenderWidgetToIdMap::iterator it = render_widget_to_id.begin(); | 250 for (RenderWidgetToIdMap::iterator it = render_widget_to_id.begin(); |
249 it != render_widget_to_id.end(); it++) { | 251 it != render_widget_to_id.end(); it++) { |
250 content::RenderWidgetHost* render_widget_host = it->first; | 252 content::RenderWidgetHost* render_widget_host = it->first; |
251 content::RenderViewHost* render_view_host = | 253 content::RenderViewHost* render_view_host = |
252 content::RenderViewHost::From(render_widget_host); | 254 content::RenderViewHost::From(render_widget_host); |
253 if (render_view_host) | 255 if (render_view_host) |
254 render_view_host->OnWebkitPreferencesChanged(); | 256 render_view_host->OnWebkitPreferencesChanged(); |
255 } | 257 } |
256 } | 258 } |
257 } | 259 } |
258 | 260 |
259 void EngineRenderWidgetFeature::SetTextFromIME(ui::TextInputClient* client, | 261 void EngineRenderWidgetFeature::SetTextFromIME( |
260 std::string text) { | 262 content::RenderWidgetHost* render_widget_host, |
261 if (client && client->GetTextInputType() != ui::TEXT_INPUT_TYPE_NONE) { | 263 std::string text, |
262 // Clear out any existing text first and then insert new text entered | 264 bool auto_submit) { |
263 // through IME. | 265 ui::TextInputClient* client = |
264 gfx::Range text_range; | 266 render_widget_host->GetView()->GetTextInputClient(); |
265 client->GetTextRange(&text_range); | 267 DCHECK(client); |
266 client->ExtendSelectionAndDelete(text_range.length(), text_range.length()); | |
267 | 268 |
268 client->InsertText(base::UTF8ToUTF16(text)); | 269 if (!client || client->GetTextInputType() == ui::TEXT_INPUT_TYPE_NONE) |
| 270 return; |
| 271 |
| 272 // Clear out any existing text first and then insert new text entered |
| 273 // through IME. |
| 274 gfx::Range text_range; |
| 275 client->GetTextRange(&text_range); |
| 276 client->ExtendSelectionAndDelete(text_range.length(), text_range.length()); |
| 277 |
| 278 client->InsertText(base::UTF8ToUTF16(text)); |
| 279 |
| 280 if (auto_submit) { |
| 281 // Send a synthetic key event to the renderer notifying that user has hit |
| 282 // Return key. This should submit the current form. |
| 283 ui::KeyEvent press(ui::ET_KEY_PRESSED, ui::VKEY_RETURN, ui::DomCode::ENTER, |
| 284 0); |
| 285 ui::KeyEvent char_event('\r', ui::VKEY_RETURN, 0); |
| 286 ui::KeyEvent release(ui::ET_KEY_RELEASED, ui::VKEY_RETURN, |
| 287 ui::DomCode::ENTER, 0); |
| 288 render_widget_host->ForwardKeyboardEvent( |
| 289 content::NativeWebKeyboardEvent(press)); |
| 290 render_widget_host->ForwardKeyboardEvent( |
| 291 content::NativeWebKeyboardEvent(char_event)); |
| 292 render_widget_host->ForwardKeyboardEvent( |
| 293 content::NativeWebKeyboardEvent(release)); |
269 } | 294 } |
270 } | 295 } |
271 | 296 |
272 EngineRenderWidgetFeature::RenderWidgetMessageDelegate* | 297 EngineRenderWidgetFeature::RenderWidgetMessageDelegate* |
273 EngineRenderWidgetFeature::FindDelegate(const int tab_id) { | 298 EngineRenderWidgetFeature::FindDelegate(const int tab_id) { |
274 DelegateMap::const_iterator it = delegates_.find(tab_id); | 299 DelegateMap::const_iterator it = delegates_.find(tab_id); |
275 if (it != delegates_.end()) | 300 if (it != delegates_.end()) |
276 return it->second; | 301 return it->second; |
277 return nullptr; | 302 return nullptr; |
278 } | 303 } |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 IdToRenderWidgetMap::const_iterator widget_id_it = | 386 IdToRenderWidgetMap::const_iterator widget_id_it = |
362 id_to_render_widget->find(render_widget_id); | 387 id_to_render_widget->find(render_widget_id); |
363 if (widget_id_it == id_to_render_widget->end()) | 388 if (widget_id_it == id_to_render_widget->end()) |
364 return nullptr; | 389 return nullptr; |
365 | 390 |
366 return widget_id_it->second; | 391 return widget_id_it->second; |
367 } | 392 } |
368 | 393 |
369 } // namespace engine | 394 } // namespace engine |
370 } // namespace blimp | 395 } // namespace blimp |
OLD | NEW |