| 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 "content/renderer/render_widget.h" | 5 #include "content/renderer/render_widget.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/debug/trace_event.h" | 9 #include "base/debug/trace_event.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 587 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 598 // As two different kinds of events could cause us to postpone an ack | 598 // As two different kinds of events could cause us to postpone an ack |
| 599 // we send it now, if we have one pending. The Browser should never | 599 // we send it now, if we have one pending. The Browser should never |
| 600 // send us the same kind of event we are delaying the ack for. | 600 // send us the same kind of event we are delaying the ack for. |
| 601 Send(pending_input_event_ack_.release()); | 601 Send(pending_input_event_ack_.release()); |
| 602 } | 602 } |
| 603 pending_input_event_ack_.reset(response); | 603 pending_input_event_ack_.reset(response); |
| 604 } else { | 604 } else { |
| 605 Send(response); | 605 Send(response); |
| 606 } | 606 } |
| 607 | 607 |
| 608 #if defined(OS_ANDROID) |
| 609 // Allow the IME to be shown when the focus changes as a consequence |
| 610 // of a processed touch end event. |
| 611 if (input_event->type == WebInputEvent::TouchEnd && processed) |
| 612 UpdateTextInputState(SHOW_IME_IF_NEEDED); |
| 613 #endif |
| 614 |
| 608 handling_input_event_ = false; | 615 handling_input_event_ = false; |
| 609 | 616 |
| 610 if (!prevent_default) { | 617 if (!prevent_default) { |
| 611 if (WebInputEvent::isKeyboardEventType(input_event->type)) | 618 if (WebInputEvent::isKeyboardEventType(input_event->type)) |
| 612 DidHandleKeyEvent(); | 619 DidHandleKeyEvent(); |
| 613 if (WebInputEvent::isMouseEventType(input_event->type)) | 620 if (WebInputEvent::isMouseEventType(input_event->type)) |
| 614 DidHandleMouseEvent(*(static_cast<const WebMouseEvent*>(input_event))); | 621 DidHandleMouseEvent(*(static_cast<const WebMouseEvent*>(input_event))); |
| 615 if (WebInputEvent::isTouchEventType(input_event->type)) | 622 if (WebInputEvent::isTouchEventType(input_event->type)) |
| 616 DidHandleTouchEvent(*(static_cast<const WebTouchEvent*>(input_event))); | 623 DidHandleTouchEvent(*(static_cast<const WebTouchEvent*>(input_event))); |
| 617 } | 624 } |
| (...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 866 AnimateIfNeeded(); | 873 AnimateIfNeeded(); |
| 867 | 874 |
| 868 // Layout may generate more invalidation. It may also enable the | 875 // Layout may generate more invalidation. It may also enable the |
| 869 // GPU acceleration, so make sure to run layout before we send the | 876 // GPU acceleration, so make sure to run layout before we send the |
| 870 // GpuRenderingActivated message. | 877 // GpuRenderingActivated message. |
| 871 webwidget_->layout(); | 878 webwidget_->layout(); |
| 872 | 879 |
| 873 // The following two can result in further layout and possibly | 880 // The following two can result in further layout and possibly |
| 874 // enable GPU acceleration so they need to be called before any painting | 881 // enable GPU acceleration so they need to be called before any painting |
| 875 // is done. | 882 // is done. |
| 876 UpdateTextInputState(); | 883 UpdateTextInputState(DO_NOT_SHOW_IME); |
| 877 UpdateSelectionBounds(); | 884 UpdateSelectionBounds(); |
| 878 | 885 |
| 879 // Suppress painting if nothing is dirty. This has to be done after updating | 886 // Suppress painting if nothing is dirty. This has to be done after updating |
| 880 // animations running layout as these may generate further invalidations. | 887 // animations running layout as these may generate further invalidations. |
| 881 if (!paint_aggregator_.HasPendingUpdate()) { | 888 if (!paint_aggregator_.HasPendingUpdate()) { |
| 882 TRACE_EVENT0("renderer", "EarlyOut_NoPendingUpdate"); | 889 TRACE_EVENT0("renderer", "EarlyOut_NoPendingUpdate"); |
| 883 webwidget_->instrumentCancelFrame(); | 890 webwidget_->instrumentCancelFrame(); |
| 884 return; | 891 return; |
| 885 } | 892 } |
| 886 | 893 |
| (...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1156 } | 1163 } |
| 1157 | 1164 |
| 1158 void RenderWidget::willBeginCompositorFrame() { | 1165 void RenderWidget::willBeginCompositorFrame() { |
| 1159 TRACE_EVENT0("gpu", "RenderWidget::willBeginCompositorFrame"); | 1166 TRACE_EVENT0("gpu", "RenderWidget::willBeginCompositorFrame"); |
| 1160 | 1167 |
| 1161 DCHECK(RenderThreadImpl::current()->compositor_thread()); | 1168 DCHECK(RenderThreadImpl::current()->compositor_thread()); |
| 1162 | 1169 |
| 1163 // The following two can result in further layout and possibly | 1170 // The following two can result in further layout and possibly |
| 1164 // enable GPU acceleration so they need to be called before any painting | 1171 // enable GPU acceleration so they need to be called before any painting |
| 1165 // is done. | 1172 // is done. |
| 1166 UpdateTextInputState(); | 1173 UpdateTextInputState(DO_NOT_SHOW_IME); |
| 1167 UpdateSelectionBounds(); | 1174 UpdateSelectionBounds(); |
| 1168 | 1175 |
| 1169 WillInitiatePaint(); | 1176 WillInitiatePaint(); |
| 1170 } | 1177 } |
| 1171 | 1178 |
| 1172 void RenderWidget::didBecomeReadyForAdditionalInput() { | 1179 void RenderWidget::didBecomeReadyForAdditionalInput() { |
| 1173 TRACE_EVENT0("renderer", "RenderWidget::didBecomeReadyForAdditionalInput"); | 1180 TRACE_EVENT0("renderer", "RenderWidget::didBecomeReadyForAdditionalInput"); |
| 1174 if (pending_input_event_ack_.get()) | 1181 if (pending_input_event_ack_.get()) |
| 1175 Send(pending_input_event_ack_.release()); | 1182 Send(pending_input_event_ack_.release()); |
| 1176 } | 1183 } |
| (...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1630 } | 1637 } |
| 1631 | 1638 |
| 1632 void RenderWidget::set_next_paint_is_restore_ack() { | 1639 void RenderWidget::set_next_paint_is_restore_ack() { |
| 1633 next_paint_flags_ |= ViewHostMsg_UpdateRect_Flags::IS_RESTORE_ACK; | 1640 next_paint_flags_ |= ViewHostMsg_UpdateRect_Flags::IS_RESTORE_ACK; |
| 1634 } | 1641 } |
| 1635 | 1642 |
| 1636 void RenderWidget::set_next_paint_is_repaint_ack() { | 1643 void RenderWidget::set_next_paint_is_repaint_ack() { |
| 1637 next_paint_flags_ |= ViewHostMsg_UpdateRect_Flags::IS_REPAINT_ACK; | 1644 next_paint_flags_ |= ViewHostMsg_UpdateRect_Flags::IS_REPAINT_ACK; |
| 1638 } | 1645 } |
| 1639 | 1646 |
| 1640 void RenderWidget::UpdateTextInputState() { | 1647 void RenderWidget::UpdateTextInputState(ShowIme show_ime) { |
| 1641 if (!input_method_is_active_) | 1648 bool show_ime_if_needed = (show_ime == SHOW_IME_IF_NEEDED); |
| 1649 if (!show_ime_if_needed && !input_method_is_active_) |
| 1642 return; | 1650 return; |
| 1643 ui::TextInputType new_type = GetTextInputType(); | 1651 ui::TextInputType new_type = GetTextInputType(); |
| 1644 WebKit::WebTextInputInfo new_info; | 1652 WebKit::WebTextInputInfo new_info; |
| 1645 if (webwidget_) | 1653 if (webwidget_) |
| 1646 new_info = webwidget_->textInputInfo(); | 1654 new_info = webwidget_->textInputInfo(); |
| 1647 | 1655 |
| 1648 bool new_can_compose_inline = CanComposeInline(); | 1656 bool new_can_compose_inline = CanComposeInline(); |
| 1649 | 1657 |
| 1650 // Only sends text input params if they are changed. | 1658 // Only sends text input params if they are changed or if the ime should be |
| 1651 if (text_input_type_ != new_type || text_input_info_ != new_info | 1659 // shown. |
| 1652 || can_compose_inline_ != new_can_compose_inline) { | 1660 if (show_ime_if_needed || (text_input_type_ != new_type |
| 1661 || text_input_info_ != new_info |
| 1662 || can_compose_inline_ != new_can_compose_inline)) { |
| 1653 ViewHostMsg_TextInputState_Params p; | 1663 ViewHostMsg_TextInputState_Params p; |
| 1654 p.type = new_type; | 1664 p.type = new_type; |
| 1655 p.value = new_info.value.utf8(); | 1665 p.value = new_info.value.utf8(); |
| 1656 p.selection_start = new_info.selectionStart; | 1666 p.selection_start = new_info.selectionStart; |
| 1657 p.selection_end = new_info.selectionEnd; | 1667 p.selection_end = new_info.selectionEnd; |
| 1658 p.composition_start = new_info.compositionStart; | 1668 p.composition_start = new_info.compositionStart; |
| 1659 p.composition_end = new_info.compositionEnd; | 1669 p.composition_end = new_info.compositionEnd; |
| 1660 p.can_compose_inline = new_can_compose_inline; | 1670 p.can_compose_inline = new_can_compose_inline; |
| 1671 p.show_ime_if_needed = show_ime_if_needed; |
| 1661 Send(new ViewHostMsg_TextInputStateChanged(routing_id(), p)); | 1672 Send(new ViewHostMsg_TextInputStateChanged(routing_id(), p)); |
| 1662 | 1673 |
| 1663 text_input_info_ = new_info; | 1674 text_input_info_ = new_info; |
| 1664 text_input_type_ = new_type; | 1675 text_input_type_ = new_type; |
| 1665 can_compose_inline_ = new_can_compose_inline; | 1676 can_compose_inline_ = new_can_compose_inline; |
| 1666 } | 1677 } |
| 1667 } | 1678 } |
| 1668 | 1679 |
| 1669 void RenderWidget::GetSelectionBounds(gfx::Rect* start, gfx::Rect* end) { | 1680 void RenderWidget::GetSelectionBounds(gfx::Rect* start, gfx::Rect* end) { |
| 1670 WebRect start_webrect; | 1681 WebRect start_webrect; |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1852 pending_smooth_scroll_gestures_.insert(std::make_pair(id, callback)); | 1863 pending_smooth_scroll_gestures_.insert(std::make_pair(id, callback)); |
| 1853 } | 1864 } |
| 1854 | 1865 |
| 1855 bool RenderWidget::WillHandleMouseEvent(const WebKit::WebMouseEvent& event) { | 1866 bool RenderWidget::WillHandleMouseEvent(const WebKit::WebMouseEvent& event) { |
| 1856 return false; | 1867 return false; |
| 1857 } | 1868 } |
| 1858 | 1869 |
| 1859 bool RenderWidget::WebWidgetHandlesCompositorScheduling() const { | 1870 bool RenderWidget::WebWidgetHandlesCompositorScheduling() const { |
| 1860 return false; | 1871 return false; |
| 1861 } | 1872 } |
| OLD | NEW |