| Index: content/browser/renderer_host/render_widget_host_view_aura.cc
|
| diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
|
| index 0607c92c0ec51533cc973ef7bf1656c8dc97a1d6..1c8f7b4b5fd081f09cb970692060ee3d44e821da 100644
|
| --- a/content/browser/renderer_host/render_widget_host_view_aura.cc
|
| +++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
|
| @@ -8,6 +8,7 @@
|
| #include "base/basictypes.h"
|
| #include "base/bind.h"
|
| #include "base/callback_helpers.h"
|
| +#include "base/command_line.h"
|
| #include "base/debug/trace_event.h"
|
| #include "base/logging.h"
|
| #include "base/message_loop/message_loop.h"
|
| @@ -35,9 +36,11 @@
|
| #include "content/common/gpu/gpu_messages.h"
|
| #include "content/common/view_messages.h"
|
| #include "content/public/browser/content_browser_client.h"
|
| +#include "content/public/browser/overscroll_configuration.h"
|
| #include "content/public/browser/render_view_host.h"
|
| #include "content/public/browser/render_widget_host_view_frame_subscriber.h"
|
| #include "content/public/browser/user_metrics.h"
|
| +#include "content/public/common/content_switches.h"
|
| #include "third_party/WebKit/public/platform/WebScreenInfo.h"
|
| #include "third_party/WebKit/public/web/WebCompositionUnderline.h"
|
| #include "third_party/WebKit/public/web/WebInputEvent.h"
|
| @@ -93,6 +96,8 @@ using gfx::RectToSkIRect;
|
| using gfx::SkIRectToRect;
|
|
|
| using blink::WebScreenInfo;
|
| +using blink::WebInputEvent;
|
| +using blink::WebGestureEvent;
|
| using blink::WebTouchEvent;
|
|
|
| namespace content {
|
| @@ -434,6 +439,10 @@ RenderWidgetHostViewAura::RenderWidgetHostViewAura(RenderWidgetHost* host)
|
| aura::client::SetFocusChangeObserver(window_, this);
|
| window_->set_layer_owner_delegate(delegated_frame_host_.get());
|
| gfx::Screen::GetScreenFor(window_)->AddObserver(this);
|
| +
|
| + bool overscroll_enabled = CommandLine::ForCurrentProcess()->
|
| + GetSwitchValueASCII(switches::kOverscrollHistoryNavigation) != "0";
|
| + SetOverscrollControllerEnabled(overscroll_enabled);
|
| }
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| @@ -1151,11 +1160,25 @@ gfx::Rect RenderWidgetHostViewAura::GetBoundsInRootWindow() {
|
| return bounds;
|
| }
|
|
|
| +void RenderWidgetHostViewAura::WheelEventAck(
|
| + const blink::WebMouseWheelEvent& event,
|
| + InputEventAckState ack_result) {
|
| + if (overscroll_controller_) {
|
| + overscroll_controller_->ReceivedEventACK(
|
| + event, (INPUT_EVENT_ACK_STATE_CONSUMED == ack_result));
|
| + }
|
| +}
|
| +
|
| void RenderWidgetHostViewAura::GestureEventAck(
|
| const blink::WebGestureEvent& event,
|
| InputEventAckState ack_result) {
|
| if (touch_editing_client_)
|
| touch_editing_client_->GestureEventAck(event.type);
|
| +
|
| + if (overscroll_controller_) {
|
| + overscroll_controller_->ReceivedEventACK(
|
| + event, (INPUT_EVENT_ACK_STATE_CONSUMED == ack_result));
|
| + }
|
| }
|
|
|
| void RenderWidgetHostViewAura::ProcessAckedTouchEvent(
|
| @@ -1189,6 +1212,29 @@ void RenderWidgetHostViewAura::SetScrollOffsetPinning(
|
| // Not needed. Mac-only.
|
| }
|
|
|
| +InputEventAckState RenderWidgetHostViewAura::FilterInputEvent(
|
| + const blink::WebInputEvent& input_event) {
|
| + bool consumed = false;
|
| + if (input_event.type == WebInputEvent::GestureFlingStart) {
|
| + const WebGestureEvent& gesture_event =
|
| + static_cast<const WebGestureEvent&>(input_event);
|
| + // Zero-velocity touchpad flings are an Aura-specific signal that the
|
| + // touchpad scroll has ended, and should not be forwarded to the renderer.
|
| + if (gesture_event.sourceDevice == WebGestureEvent::Touchpad &&
|
| + !gesture_event.data.flingStart.velocityX &&
|
| + !gesture_event.data.flingStart.velocityY) {
|
| + consumed = true;
|
| + }
|
| + }
|
| +
|
| + if (overscroll_controller_)
|
| + consumed |= overscroll_controller_->WillHandleEvent(input_event);
|
| +
|
| + return consumed && !WebTouchEvent::isTouchEventType(input_event.type)
|
| + ? INPUT_EVENT_ACK_STATE_CONSUMED
|
| + : INPUT_EVENT_ACK_STATE_NOT_CONSUMED;
|
| +}
|
| +
|
| void RenderWidgetHostViewAura::CreateBrowserAccessibilityManagerIfNeeded() {
|
| if (GetBrowserAccessibilityManager())
|
| return;
|
| @@ -1641,6 +1687,9 @@ void RenderWidgetHostViewAura::OnWindowDestroying(aura::Window* window) {
|
| ui::InputMethod* input_method = GetInputMethod();
|
| if (input_method)
|
| input_method->DetachTextInputClient(this);
|
| +
|
| + if (overscroll_controller_)
|
| + overscroll_controller_->Reset();
|
| }
|
|
|
| void RenderWidgetHostViewAura::OnWindowDestroyed(aura::Window* window) {
|
| @@ -1787,8 +1836,8 @@ void RenderWidgetHostViewAura::OnMouseEvent(ui::MouseEvent* event) {
|
| // RootWindow). But this event interferes with the overscroll gesture. So,
|
| // ignore such synthetic mouse-move events if an overscroll gesture is in
|
| // progress.
|
| - if (host_->overscroll_controller() &&
|
| - host_->overscroll_controller()->overscroll_mode() != OVERSCROLL_NONE &&
|
| + if (overscroll_controller_ &&
|
| + overscroll_controller_->overscroll_mode() != OVERSCROLL_NONE &&
|
| event->flags() & ui::EF_IS_SYNTHESIZED &&
|
| (event->type() == ui::ET_MOUSE_ENTERED ||
|
| event->type() == ui::ET_MOUSE_EXITED ||
|
| @@ -2043,6 +2092,9 @@ void RenderWidgetHostViewAura::OnWindowFocused(aura::Window* gained_focus,
|
| if (touch_editing_client_)
|
| touch_editing_client_->EndTouchEditing(false);
|
|
|
| + if (overscroll_controller_)
|
| + overscroll_controller_->Cancel();
|
| +
|
| BrowserAccessibilityManager* manager = GetBrowserAccessibilityManager();
|
| if (manager)
|
| manager->OnWindowBlurred();
|
| @@ -2216,6 +2268,13 @@ void RenderWidgetHostViewAura::NotifyRendererOfCursorVisibilityState(
|
| host_->SendCursorVisibilityState(is_visible);
|
| }
|
|
|
| +void RenderWidgetHostViewAura::SetOverscrollControllerEnabled(bool enabled) {
|
| + if (!enabled)
|
| + overscroll_controller_.reset();
|
| + else if (!overscroll_controller_)
|
| + overscroll_controller_.reset(new OverscrollController());
|
| +}
|
| +
|
| void RenderWidgetHostViewAura::SchedulePaintIfNotInClip(
|
| const gfx::Rect& rect,
|
| const gfx::Rect& clip) {
|
|
|