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

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

Issue 326403002: Merge ViewHostMsg_TextInputTypeChanged and ViewHostMsg_TextInputStateChanged into one. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fixed. Created 6 years, 6 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
« no previous file with comments | « content/renderer/render_widget.h ('k') | content/test/test_render_view_host.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 1173 matching lines...) Expand 10 before | Expand all | Expand 10 after
1184 } 1184 }
1185 1185
1186 void RenderWidget::willBeginCompositorFrame() { 1186 void RenderWidget::willBeginCompositorFrame() {
1187 TRACE_EVENT0("gpu", "RenderWidget::willBeginCompositorFrame"); 1187 TRACE_EVENT0("gpu", "RenderWidget::willBeginCompositorFrame");
1188 1188
1189 DCHECK(RenderThreadImpl::current()->compositor_message_loop_proxy().get()); 1189 DCHECK(RenderThreadImpl::current()->compositor_message_loop_proxy().get());
1190 1190
1191 // The following two can result in further layout and possibly 1191 // The following two can result in further layout and possibly
1192 // enable GPU acceleration so they need to be called before any painting 1192 // enable GPU acceleration so they need to be called before any painting
1193 // is done. 1193 // is done.
1194 UpdateTextInputType();
1195 #if defined(OS_ANDROID)
1196 UpdateTextInputState(NO_SHOW_IME, FROM_NON_IME); 1194 UpdateTextInputState(NO_SHOW_IME, FROM_NON_IME);
1197 #endif
1198 UpdateSelectionBounds(); 1195 UpdateSelectionBounds();
1199 } 1196 }
1200 1197
1201 void RenderWidget::didBecomeReadyForAdditionalInput() { 1198 void RenderWidget::didBecomeReadyForAdditionalInput() {
1202 TRACE_EVENT0("renderer", "RenderWidget::didBecomeReadyForAdditionalInput"); 1199 TRACE_EVENT0("renderer", "RenderWidget::didBecomeReadyForAdditionalInput");
1203 FlushPendingInputEventAck(); 1200 FlushPendingInputEventAck();
1204 } 1201 }
1205 1202
1206 void RenderWidget::DidCommitCompositorFrame() { 1203 void RenderWidget::DidCommitCompositorFrame() {
1207 FOR_EACH_OBSERVER(RenderFrameImpl, swapped_out_frames_, 1204 FOR_EACH_OBSERVER(RenderFrameImpl, swapped_out_frames_,
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
1637 handling_ime_event_ = false; 1634 handling_ime_event_ = false;
1638 // While handling an ime event, text input state and selection bounds updates 1635 // While handling an ime event, text input state and selection bounds updates
1639 // are ignored. These must explicitly be updated once finished handling the 1636 // are ignored. These must explicitly be updated once finished handling the
1640 // ime event. 1637 // ime event.
1641 UpdateSelectionBounds(); 1638 UpdateSelectionBounds();
1642 #if defined(OS_ANDROID) 1639 #if defined(OS_ANDROID)
1643 UpdateTextInputState(NO_SHOW_IME, FROM_IME); 1640 UpdateTextInputState(NO_SHOW_IME, FROM_IME);
1644 #endif 1641 #endif
1645 } 1642 }
1646 1643
1647 void RenderWidget::UpdateTextInputType() {
1648 // On Windows, not only an IME but also an on-screen keyboard relies on the
1649 // latest TextInputType to optimize its layout and functionality. Thus
1650 // |input_method_is_active_| is no longer an appropriate condition to suppress
1651 // TextInputTypeChanged IPC on Windows.
1652 // TODO(yukawa, yoichio): Consider to stop checking |input_method_is_active_|
1653 // on other platforms as well as Windows if the overhead is acceptable.
1654 #if !defined(OS_WIN)
1655 if (!input_method_is_active_)
1656 return;
1657 #endif
1658
1659 ui::TextInputType new_type = GetTextInputType();
1660 if (IsDateTimeInput(new_type))
1661 return; // Not considered as a text input field in WebKit/Chromium.
1662
1663 bool new_can_compose_inline = CanComposeInline();
1664
1665 blink::WebTextInputInfo new_info;
1666 if (webwidget_)
1667 new_info = webwidget_->textInputInfo();
1668 const ui::TextInputMode new_mode = ConvertInputMode(new_info.inputMode);
1669
1670 if (text_input_type_ != new_type
1671 || can_compose_inline_ != new_can_compose_inline
1672 || text_input_mode_ != new_mode) {
1673 Send(new ViewHostMsg_TextInputTypeChanged(routing_id(),
1674 new_type,
1675 new_mode,
1676 new_can_compose_inline));
1677 text_input_type_ = new_type;
1678 can_compose_inline_ = new_can_compose_inline;
1679 text_input_mode_ = new_mode;
1680 }
1681 }
1682
1683 #if defined(OS_ANDROID) || defined(USE_AURA)
1684 void RenderWidget::UpdateTextInputState(ShowIme show_ime, 1644 void RenderWidget::UpdateTextInputState(ShowIme show_ime,
1685 ChangeSource change_source) { 1645 ChangeSource change_source) {
1686 if (handling_ime_event_) 1646 if (handling_ime_event_)
1687 return; 1647 return;
1688 if (show_ime == NO_SHOW_IME && !input_method_is_active_) 1648 if (show_ime == NO_SHOW_IME && !input_method_is_active_)
1689 return; 1649 return;
1690 ui::TextInputType new_type = GetTextInputType(); 1650 ui::TextInputType new_type = GetTextInputType();
1691 if (IsDateTimeInput(new_type)) 1651 if (IsDateTimeInput(new_type))
1692 return; // Not considered as a text input field in WebKit/Chromium. 1652 return; // Not considered as a text input field in WebKit/Chromium.
1693 1653
1694 blink::WebTextInputInfo new_info; 1654 blink::WebTextInputInfo new_info;
1695 if (webwidget_) 1655 if (webwidget_)
1696 new_info = webwidget_->textInputInfo(); 1656 new_info = webwidget_->textInputInfo();
1657 const ui::TextInputMode new_mode = ConvertInputMode(new_info.inputMode);
1697 1658
1698 bool new_can_compose_inline = CanComposeInline(); 1659 bool new_can_compose_inline = CanComposeInline();
1699 1660
1700 // Only sends text input params if they are changed or if the ime should be 1661 // Only sends text input params if they are changed or if the ime should be
1701 // shown. 1662 // shown.
1702 if (show_ime == SHOW_IME_IF_NEEDED || 1663 if (show_ime == SHOW_IME_IF_NEEDED ||
1703 (text_input_type_ != new_type || 1664 (text_input_type_ != new_type ||
1665 text_input_mode_ != new_mode ||
1704 text_input_info_ != new_info || 1666 text_input_info_ != new_info ||
1705 can_compose_inline_ != new_can_compose_inline) 1667 can_compose_inline_ != new_can_compose_inline)
1706 #if defined(OS_ANDROID) 1668 #if defined(OS_ANDROID)
1707 || text_field_is_dirty_ 1669 || text_field_is_dirty_
1708 #endif 1670 #endif
1709 ) { 1671 ) {
1710 ViewHostMsg_TextInputState_Params p; 1672 ViewHostMsg_TextInputState_Params p;
1711 p.type = new_type; 1673 p.type = new_type;
1674 p.mode = new_mode;
1712 p.value = new_info.value.utf8(); 1675 p.value = new_info.value.utf8();
1713 p.selection_start = new_info.selectionStart; 1676 p.selection_start = new_info.selectionStart;
1714 p.selection_end = new_info.selectionEnd; 1677 p.selection_end = new_info.selectionEnd;
1715 p.composition_start = new_info.compositionStart; 1678 p.composition_start = new_info.compositionStart;
1716 p.composition_end = new_info.compositionEnd; 1679 p.composition_end = new_info.compositionEnd;
1717 p.can_compose_inline = new_can_compose_inline; 1680 p.can_compose_inline = new_can_compose_inline;
1718 p.show_ime_if_needed = (show_ime == SHOW_IME_IF_NEEDED); 1681 p.show_ime_if_needed = (show_ime == SHOW_IME_IF_NEEDED);
1719 #if defined(USE_AURA) 1682 #if defined(USE_AURA)
1720 p.is_non_ime_change = true; 1683 p.is_non_ime_change = true;
1721 #endif 1684 #endif
1722 #if defined(OS_ANDROID) 1685 #if defined(OS_ANDROID)
1723 p.is_non_ime_change = (change_source == FROM_NON_IME) || 1686 p.is_non_ime_change = (change_source == FROM_NON_IME) ||
1724 text_field_is_dirty_; 1687 text_field_is_dirty_;
1725 if (p.is_non_ime_change) 1688 if (p.is_non_ime_change)
1726 IncrementOutstandingImeEventAcks(); 1689 IncrementOutstandingImeEventAcks();
1727 text_field_is_dirty_ = false; 1690 text_field_is_dirty_ = false;
1728 #endif 1691 #endif
1729 #if defined(USE_AURA)
1730 Send(new ViewHostMsg_TextInputTypeChanged(routing_id(),
1731 new_type,
1732 text_input_mode_,
1733 new_can_compose_inline));
1734 #endif
1735 Send(new ViewHostMsg_TextInputStateChanged(routing_id(), p)); 1692 Send(new ViewHostMsg_TextInputStateChanged(routing_id(), p));
1736 1693
1737 text_input_info_ = new_info; 1694 text_input_info_ = new_info;
1738 text_input_type_ = new_type; 1695 text_input_type_ = new_type;
1696 text_input_mode_ = new_mode;
1739 can_compose_inline_ = new_can_compose_inline; 1697 can_compose_inline_ = new_can_compose_inline;
1740 } 1698 }
1741 } 1699 }
1742 #endif
1743 1700
1744 void RenderWidget::GetSelectionBounds(gfx::Rect* focus, gfx::Rect* anchor) { 1701 void RenderWidget::GetSelectionBounds(gfx::Rect* focus, gfx::Rect* anchor) {
1745 WebRect focus_webrect; 1702 WebRect focus_webrect;
1746 WebRect anchor_webrect; 1703 WebRect anchor_webrect;
1747 webwidget_->selectionBounds(focus_webrect, anchor_webrect); 1704 webwidget_->selectionBounds(focus_webrect, anchor_webrect);
1748 *focus = focus_webrect; 1705 *focus = focus_webrect;
1749 *anchor = anchor_webrect; 1706 *anchor = anchor_webrect;
1750 } 1707 }
1751 1708
1752 void RenderWidget::UpdateSelectionBounds() { 1709 void RenderWidget::UpdateSelectionBounds() {
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
2113 void RenderWidget::RegisterVideoHoleFrame(RenderFrameImpl* frame) { 2070 void RenderWidget::RegisterVideoHoleFrame(RenderFrameImpl* frame) {
2114 video_hole_frames_.AddObserver(frame); 2071 video_hole_frames_.AddObserver(frame);
2115 } 2072 }
2116 2073
2117 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) { 2074 void RenderWidget::UnregisterVideoHoleFrame(RenderFrameImpl* frame) {
2118 video_hole_frames_.RemoveObserver(frame); 2075 video_hole_frames_.RemoveObserver(frame);
2119 } 2076 }
2120 #endif // defined(VIDEO_HOLE) 2077 #endif // defined(VIDEO_HOLE)
2121 2078
2122 } // namespace content 2079 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_widget.h ('k') | content/test/test_render_view_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698