Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(640)

Side by Side Diff: content/renderer/render_widget.cc

Issue 2333813002: Introduce WebInputMethodController to blink (Closed)
Patch Set: Moved ConfirmCompositionBehavior to WebInputMethodController Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "content/renderer/render_widget.h" 5 #include "content/renderer/render_widget.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 #include "skia/ext/platform_canvas.h" 56 #include "skia/ext/platform_canvas.h"
57 #include "third_party/WebKit/public/platform/WebCursorInfo.h" 57 #include "third_party/WebKit/public/platform/WebCursorInfo.h"
58 #include "third_party/WebKit/public/platform/WebPoint.h" 58 #include "third_party/WebKit/public/platform/WebPoint.h"
59 #include "third_party/WebKit/public/platform/WebRect.h" 59 #include "third_party/WebKit/public/platform/WebRect.h"
60 #include "third_party/WebKit/public/platform/WebSize.h" 60 #include "third_party/WebKit/public/platform/WebSize.h"
61 #include "third_party/WebKit/public/platform/WebString.h" 61 #include "third_party/WebKit/public/platform/WebString.h"
62 #include "third_party/WebKit/public/platform/scheduler/renderer/render_widget_sc heduling_state.h" 62 #include "third_party/WebKit/public/platform/scheduler/renderer/render_widget_sc heduling_state.h"
63 #include "third_party/WebKit/public/platform/scheduler/renderer/renderer_schedul er.h" 63 #include "third_party/WebKit/public/platform/scheduler/renderer/renderer_schedul er.h"
64 #include "third_party/WebKit/public/web/WebDeviceEmulationParams.h" 64 #include "third_party/WebKit/public/web/WebDeviceEmulationParams.h"
65 #include "third_party/WebKit/public/web/WebFrameWidget.h" 65 #include "third_party/WebKit/public/web/WebFrameWidget.h"
66 #include "third_party/WebKit/public/web/WebInputMethodController.h"
66 #include "third_party/WebKit/public/web/WebLocalFrame.h" 67 #include "third_party/WebKit/public/web/WebLocalFrame.h"
67 #include "third_party/WebKit/public/web/WebNode.h" 68 #include "third_party/WebKit/public/web/WebNode.h"
68 #include "third_party/WebKit/public/web/WebPagePopup.h" 69 #include "third_party/WebKit/public/web/WebPagePopup.h"
69 #include "third_party/WebKit/public/web/WebPopupMenuInfo.h" 70 #include "third_party/WebKit/public/web/WebPopupMenuInfo.h"
70 #include "third_party/WebKit/public/web/WebRange.h" 71 #include "third_party/WebKit/public/web/WebRange.h"
71 #include "third_party/WebKit/public/web/WebRuntimeFeatures.h" 72 #include "third_party/WebKit/public/web/WebRuntimeFeatures.h"
72 #include "third_party/WebKit/public/web/WebView.h" 73 #include "third_party/WebKit/public/web/WebView.h"
73 #include "third_party/WebKit/public/web/WebWidget.h" 74 #include "third_party/WebKit/public/web/WebWidget.h"
74 #include "third_party/skia/include/core/SkShader.h" 75 #include "third_party/skia/include/core/SkShader.h"
75 #include "ui/base/ui_base_switches.h" 76 #include "ui/base/ui_base_switches.h"
(...skipping 18 matching lines...) Expand all
94 #include "content/public/common/mojo_shell_connection.h" 95 #include "content/public/common/mojo_shell_connection.h"
95 #include "content/renderer/mus/render_widget_mus_connection.h" 96 #include "content/renderer/mus/render_widget_mus_connection.h"
96 #endif 97 #endif
97 98
98 using blink::WebCompositionUnderline; 99 using blink::WebCompositionUnderline;
99 using blink::WebCursorInfo; 100 using blink::WebCursorInfo;
100 using blink::WebDeviceEmulationParams; 101 using blink::WebDeviceEmulationParams;
101 using blink::WebGestureEvent; 102 using blink::WebGestureEvent;
102 using blink::WebInputEvent; 103 using blink::WebInputEvent;
103 using blink::WebInputEventResult; 104 using blink::WebInputEventResult;
105 using blink::WebInputMethodController;
104 using blink::WebKeyboardEvent; 106 using blink::WebKeyboardEvent;
105 using blink::WebMouseEvent; 107 using blink::WebMouseEvent;
106 using blink::WebMouseWheelEvent; 108 using blink::WebMouseWheelEvent;
107 using blink::WebNavigationPolicy; 109 using blink::WebNavigationPolicy;
108 using blink::WebNode; 110 using blink::WebNode;
109 using blink::WebPagePopup; 111 using blink::WebPagePopup;
110 using blink::WebPoint; 112 using blink::WebPoint;
111 using blink::WebPopupType; 113 using blink::WebPopupType;
112 using blink::WebRange; 114 using blink::WebRange;
113 using blink::WebRect; 115 using blink::WebRect;
(...skipping 1279 matching lines...) Expand 10 before | Expand all | Expand 10 after
1393 } 1395 }
1394 #endif 1396 #endif
1395 if (replacement_range.IsValid()) { 1397 if (replacement_range.IsValid()) {
1396 GetWebWidget()->applyReplacementRange( 1398 GetWebWidget()->applyReplacementRange(
1397 WebRange(replacement_range.start(), replacement_range.length())); 1399 WebRange(replacement_range.start(), replacement_range.length()));
1398 } 1400 }
1399 1401
1400 if (!ShouldHandleImeEvent()) 1402 if (!ShouldHandleImeEvent())
1401 return; 1403 return;
1402 ImeEventGuard guard(this); 1404 ImeEventGuard guard(this);
1403 if (!GetWebWidget()->setComposition( 1405 if (!GetInputMethodController() ||
lfg 2016/09/16 20:17:09 Why do we need these guards? When do we call this
EhsanK 2016/09/20 15:38:29 It will return nullptr if the focused frame is NOT
1406 !GetInputMethodController()->setComposition(
1404 text, WebVector<WebCompositionUnderline>(underlines), selection_start, 1407 text, WebVector<WebCompositionUnderline>(underlines), selection_start,
1405 selection_end)) { 1408 selection_end)) {
1406 // If we failed to set the composition text, then we need to let the browser 1409 // If we failed to set the composition text, then we need to let the browser
1407 // process to cancel the input method's ongoing composition session, to make 1410 // process to cancel the input method's ongoing composition session, to make
1408 // sure we are in a consistent state. 1411 // sure we are in a consistent state.
1409 Send(new InputHostMsg_ImeCancelComposition(routing_id())); 1412 Send(new InputHostMsg_ImeCancelComposition(routing_id()));
1410 } 1413 }
1411 UpdateCompositionInfo(false /* not an immediate request */); 1414 UpdateCompositionInfo(false /* not an immediate request */);
1412 } 1415 }
1413 1416
1414 void RenderWidget::OnImeCommitText(const base::string16& text, 1417 void RenderWidget::OnImeCommitText(const base::string16& text,
1415 const gfx::Range& replacement_range, 1418 const gfx::Range& replacement_range,
1416 int relative_cursor_pos) { 1419 int relative_cursor_pos) {
1417 #if defined(ENABLE_PLUGINS) 1420 #if defined(ENABLE_PLUGINS)
1418 if (focused_pepper_plugin_) { 1421 if (focused_pepper_plugin_) {
1419 focused_pepper_plugin_->render_frame()->OnImeCommitText( 1422 focused_pepper_plugin_->render_frame()->OnImeCommitText(
1420 text, replacement_range, relative_cursor_pos); 1423 text, replacement_range, relative_cursor_pos);
1421 return; 1424 return;
1422 } 1425 }
1423 #endif 1426 #endif
1424 if (replacement_range.IsValid()) { 1427 if (replacement_range.IsValid()) {
1425 GetWebWidget()->applyReplacementRange( 1428 GetWebWidget()->applyReplacementRange(
1426 WebRange(replacement_range.start(), replacement_range.length())); 1429 WebRange(replacement_range.start(), replacement_range.length()));
1427 } 1430 }
1428 1431
1429 if (!ShouldHandleImeEvent()) 1432 if (!ShouldHandleImeEvent())
1430 return; 1433 return;
1431 ImeEventGuard guard(this); 1434 ImeEventGuard guard(this);
1432 input_handler_->set_handling_input_event(true); 1435 input_handler_->set_handling_input_event(true);
1433 GetWebWidget()->commitText(text, relative_cursor_pos); 1436 if (GetInputMethodController())
1437 GetInputMethodController()->commitText(text, relative_cursor_pos);
1434 input_handler_->set_handling_input_event(false); 1438 input_handler_->set_handling_input_event(false);
1435 UpdateCompositionInfo(false /* not an immediate request */); 1439 UpdateCompositionInfo(false /* not an immediate request */);
1436 } 1440 }
1437 1441
1438 void RenderWidget::OnImeFinishComposingText(bool keep_selection) { 1442 void RenderWidget::OnImeFinishComposingText(bool keep_selection) {
1439 #if defined(ENABLE_PLUGINS) 1443 #if defined(ENABLE_PLUGINS)
1440 if (focused_pepper_plugin_) { 1444 if (focused_pepper_plugin_) {
1441 focused_pepper_plugin_->render_frame()->OnImeFinishComposingText( 1445 focused_pepper_plugin_->render_frame()->OnImeFinishComposingText(
1442 keep_selection); 1446 keep_selection);
1443 return; 1447 return;
1444 } 1448 }
1445 #endif 1449 #endif
1446 1450
1447 if (!ShouldHandleImeEvent()) 1451 if (!ShouldHandleImeEvent())
1448 return; 1452 return;
1449 ImeEventGuard guard(this); 1453 ImeEventGuard guard(this);
1450 input_handler_->set_handling_input_event(true); 1454 input_handler_->set_handling_input_event(true);
1451 GetWebWidget()->finishComposingText(keep_selection 1455 if (GetInputMethodController()) {
1452 ? WebWidget::KeepSelection 1456 GetInputMethodController()->finishComposingText(
1453 : WebWidget::DoNotKeepSelection); 1457 keep_selection ? WebInputMethodController::KeepSelection
1458 : WebInputMethodController::DoNotKeepSelection);
1459 }
1454 input_handler_->set_handling_input_event(false); 1460 input_handler_->set_handling_input_event(false);
1455 UpdateCompositionInfo(false /* not an immediate request */); 1461 UpdateCompositionInfo(false /* not an immediate request */);
1456 } 1462 }
1457 1463
1458 void RenderWidget::OnDeviceScaleFactorChanged() { 1464 void RenderWidget::OnDeviceScaleFactorChanged() {
1459 if (!compositor_) 1465 if (!compositor_)
1460 return; 1466 return;
1461 if (IsUseZoomForDSFEnabled()) 1467 if (IsUseZoomForDSFEnabled())
1462 compositor_->SetPaintedDeviceScaleFactor(GetOriginalDeviceScaleFactor()); 1468 compositor_->SetPaintedDeviceScaleFactor(GetOriginalDeviceScaleFactor());
1463 else 1469 else
(...skipping 509 matching lines...) Expand 10 before | Expand all | Expand 10 after
1973 return web_screen_info; 1979 return web_screen_info;
1974 } 1980 }
1975 1981
1976 void RenderWidget::resetInputMethod() { 1982 void RenderWidget::resetInputMethod() {
1977 ImeEventGuard guard(this); 1983 ImeEventGuard guard(this);
1978 // If the last text input type is not None, then we should finish any 1984 // If the last text input type is not None, then we should finish any
1979 // ongoing composition regardless of the new text input type. 1985 // ongoing composition regardless of the new text input type.
1980 if (text_input_info_.type != blink::WebTextInputTypeNone) { 1986 if (text_input_info_.type != blink::WebTextInputTypeNone) {
1981 // If a composition text exists, then we need to let the browser process 1987 // If a composition text exists, then we need to let the browser process
1982 // to cancel the input method's ongoing composition session. 1988 // to cancel the input method's ongoing composition session.
1983 if (GetWebWidget()->finishComposingText(WebWidget::DoNotKeepSelection)) 1989 if (GetInputMethodController() &&
1990 GetInputMethodController()->finishComposingText(
1991 WebInputMethodController::DoNotKeepSelection))
1984 Send(new InputHostMsg_ImeCancelComposition(routing_id())); 1992 Send(new InputHostMsg_ImeCancelComposition(routing_id()));
1985 } 1993 }
1986 1994
1987 UpdateCompositionInfo(false /* not an immediate request */); 1995 UpdateCompositionInfo(false /* not an immediate request */);
1988 } 1996 }
1989 1997
1990 #if defined(OS_ANDROID) 1998 #if defined(OS_ANDROID)
1991 void RenderWidget::showUnhandledTapUIIfNeeded( 1999 void RenderWidget::showUnhandledTapUIIfNeeded(
1992 const WebPoint& tapped_position, 2000 const WebPoint& tapped_position,
1993 const WebNode& tapped_node, 2001 const WebNode& tapped_node,
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
2148 2156
2149 bool RenderWidget::isPointerLocked() { 2157 bool RenderWidget::isPointerLocked() {
2150 return mouse_lock_dispatcher_->IsMouseLockedTo( 2158 return mouse_lock_dispatcher_->IsMouseLockedTo(
2151 webwidget_mouse_lock_target_.get()); 2159 webwidget_mouse_lock_target_.get());
2152 } 2160 }
2153 2161
2154 blink::WebWidget* RenderWidget::GetWebWidget() const { 2162 blink::WebWidget* RenderWidget::GetWebWidget() const {
2155 return webwidget_internal_; 2163 return webwidget_internal_;
2156 } 2164 }
2157 2165
2166 blink::WebInputMethodController* RenderWidget::GetInputMethodController()
2167 const {
2168 return GetWebWidget()->isWebFrameWidget()
lfg 2016/09/16 20:17:09 Should these be a DCHECK instead of returning null
EhsanK 2016/09/20 15:38:29 I think for now that we only use WebInputMethodCon
2169 ? static_cast<blink::WebFrameWidget*>(GetWebWidget())
2170 ->getActiveWebInputMethodController()
2171 : nullptr;
2172 }
2173
2158 } // namespace content 2174 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698