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

Side by Side Diff: content/browser/frame_host/render_widget_host_view_guest.cc

Issue 1308273003: Resend unconsumed scroll update from guest back to embedder (WebView Scroll Bubble). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Refactor to avoid changing RenderWidgetHostImpl's interface. Created 5 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "base/bind_helpers.h" 5 #include "base/bind_helpers.h"
6 #include "base/command_line.h" 6 #include "base/command_line.h"
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "cc/surfaces/surface.h" 9 #include "cc/surfaces/surface.h"
10 #include "cc/surfaces/surface_factory.h" 10 #include "cc/surfaces/surface_factory.h"
(...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after
622 ForwardGestureEventToRenderer(*g_it); 622 ForwardGestureEventToRenderer(*g_it);
623 } 623 }
624 } 624 }
625 625
626 RenderWidgetHostViewBase* 626 RenderWidgetHostViewBase*
627 RenderWidgetHostViewGuest::GetOwnerRenderWidgetHostView() const { 627 RenderWidgetHostViewGuest::GetOwnerRenderWidgetHostView() const {
628 return static_cast<RenderWidgetHostViewBase*>( 628 return static_cast<RenderWidgetHostViewBase*>(
629 guest_->GetOwnerRenderWidgetHostView()); 629 guest_->GetOwnerRenderWidgetHostView());
630 } 630 }
631 631
632 void RenderWidgetHostViewGuest::WheelEventAck(
633 const blink::WebMouseWheelEvent& event,
634 InputEventAckState ack_result) {
635 if (ack_result == INPUT_EVENT_ACK_STATE_NOT_CONSUMED)
636 guest_->ResendEventToEmbedder(event);
637 }
638
639 void RenderWidgetHostViewGuest::GestureEventAck(
640 const blink::WebGestureEvent& event,
641 InputEventAckState ack_result) {
642 bool not_consumed = INPUT_EVENT_ACK_STATE_NOT_CONSUMED == ack_result;
643 // GestureScrollBegin/End are always consumed by the guest, so we only
644 // forward GestureScrollUpdate.
645 if (event.type == blink::WebInputEvent::GestureScrollUpdate && not_consumed)
646 guest_->ResendEventToEmbedder(event);
647 }
648
632 void RenderWidgetHostViewGuest::OnHandleInputEvent( 649 void RenderWidgetHostViewGuest::OnHandleInputEvent(
633 RenderWidgetHostImpl* embedder, 650 RenderWidgetHostImpl* embedder,
634 int browser_plugin_instance_id, 651 int browser_plugin_instance_id,
635 const gfx::Rect& guest_window_rect, 652 const gfx::Rect& guest_window_rect,
636 const blink::WebInputEvent* event) { 653 const blink::WebInputEvent* event) {
637 if (blink::WebInputEvent::isMouseEventType(event->type)) { 654 if (blink::WebInputEvent::isMouseEventType(event->type)) {
638 // The mouse events for BrowserPlugin are modified by all 655 // The mouse events for BrowserPlugin are modified by all
639 // the CSS transforms applied on the <object> and embedder. As a result of 656 // the CSS transforms applied on the <object> and embedder. As a result of
640 // this, the coordinates passed on to the guest renderer are potentially 657 // this, the coordinates passed on to the guest renderer are potentially
641 // incorrect to determine the position of the context menu(they are not the 658 // incorrect to determine the position of the context menu(they are not the
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 embedder->GetView()->Focus(); 693 embedder->GetView()->Focus();
677 } 694 }
678 695
679 host_->ForwardTouchEventWithLatencyInfo( 696 host_->ForwardTouchEventWithLatencyInfo(
680 *static_cast<const blink::WebTouchEvent*>(event), 697 *static_cast<const blink::WebTouchEvent*>(event),
681 ui::LatencyInfo()); 698 ui::LatencyInfo());
682 return; 699 return;
683 } 700 }
684 701
685 if (blink::WebInputEvent::isGestureEventType(event->type)) { 702 if (blink::WebInputEvent::isGestureEventType(event->type)) {
686 host_->ForwardGestureEvent( 703 const blink::WebGestureEvent& gesture_event =
687 *static_cast<const blink::WebGestureEvent*>(event)); 704 *static_cast<const blink::WebGestureEvent*>(event);
705
706 // We don't forward innertial GestureScrollUpdates to the guest anymore
Charlie Reis 2015/09/18 04:30:36 nit: inertial
wjmaclean 2015/09/18 15:30:57 Done.
707 // since it now receives GestureFlingStart and will have its own fling
708 // curve generating GestureScrollUpdate events for it.
709 // TODO(wjmaclean): Should we try to avoid creating a fling curve in the
710 // embedder renderer in this case? BrowserPlugin can return 'true' for
711 // handleInputEvent() on a GestureFlingStart, and we could use this as
712 // a signal to let the guest handle the fling, though we'd need to be
713 // sure other plugins would behave appropriately (i.e. return 'false').
714 if (gesture_event.type == blink::WebInputEvent::GestureScrollUpdate &&
715 gesture_event.data.scrollUpdate.inertial) {
716 return;
717 }
718 host_->ForwardGestureEvent(gesture_event);
688 return; 719 return;
689 } 720 }
690 } 721 }
691 722
692 } // namespace content 723 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698