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

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_android.cc

Issue 679493002: [Android] Add a native pull-to-refresh overscroll effect (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Tests! Created 6 years, 1 month 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/browser/renderer_host/render_widget_host_view_android.h" 5 #include "content/browser/renderer_host/render_widget_host_view_android.h"
6 6
7 #include <android/bitmap.h> 7 #include <android/bitmap.h>
8 8
9 #include "base/android/build_info.h" 9 #include "base/android/build_info.h"
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 16 matching lines...) Expand all
27 #include "cc/output/copy_output_result.h" 27 #include "cc/output/copy_output_result.h"
28 #include "cc/output/viewport_selection_bound.h" 28 #include "cc/output/viewport_selection_bound.h"
29 #include "cc/resources/single_release_callback.h" 29 #include "cc/resources/single_release_callback.h"
30 #include "cc/trees/layer_tree_host.h" 30 #include "cc/trees/layer_tree_host.h"
31 #include "content/browser/accessibility/browser_accessibility_manager_android.h" 31 #include "content/browser/accessibility/browser_accessibility_manager_android.h"
32 #include "content/browser/android/composited_touch_handle_drawable.h" 32 #include "content/browser/android/composited_touch_handle_drawable.h"
33 #include "content/browser/android/content_view_core_impl.h" 33 #include "content/browser/android/content_view_core_impl.h"
34 #include "content/browser/android/edge_effect.h" 34 #include "content/browser/android/edge_effect.h"
35 #include "content/browser/android/edge_effect_l.h" 35 #include "content/browser/android/edge_effect_l.h"
36 #include "content/browser/android/in_process/synchronous_compositor_impl.h" 36 #include "content/browser/android/in_process/synchronous_compositor_impl.h"
37 #include "content/browser/android/overscroll_glow.h" 37 #include "content/browser/android/overscroll_controller_android.h"
38 #include "content/browser/devtools/render_view_devtools_agent_host.h" 38 #include "content/browser/devtools/render_view_devtools_agent_host.h"
39 #include "content/browser/gpu/compositor_util.h" 39 #include "content/browser/gpu/compositor_util.h"
40 #include "content/browser/gpu/gpu_data_manager_impl.h" 40 #include "content/browser/gpu/gpu_data_manager_impl.h"
41 #include "content/browser/gpu/gpu_process_host_ui_shim.h" 41 #include "content/browser/gpu/gpu_process_host_ui_shim.h"
42 #include "content/browser/gpu/gpu_surface_tracker.h" 42 #include "content/browser/gpu/gpu_surface_tracker.h"
43 #include "content/browser/media/media_web_contents_observer.h" 43 #include "content/browser/media/media_web_contents_observer.h"
44 #include "content/browser/renderer_host/compositor_impl_android.h" 44 #include "content/browser/renderer_host/compositor_impl_android.h"
45 #include "content/browser/renderer_host/dip_util.h" 45 #include "content/browser/renderer_host/dip_util.h"
46 #include "content/browser/renderer_host/image_transport_factory_android.h" 46 #include "content/browser/renderer_host/image_transport_factory_android.h"
47 #include "content/browser/renderer_host/input/synthetic_gesture_target_android.h " 47 #include "content/browser/renderer_host/input/synthetic_gesture_target_android.h "
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 81
82 namespace { 82 namespace {
83 83
84 const int kUndefinedOutputSurfaceId = -1; 84 const int kUndefinedOutputSurfaceId = -1;
85 85
86 // Used to accomodate finite precision when comparing scaled viewport and 86 // Used to accomodate finite precision when comparing scaled viewport and
87 // content widths. While this value may seem large, width=device-width on an N7 87 // content widths. While this value may seem large, width=device-width on an N7
88 // V1 saw errors of ~0.065 between computed window and content widths. 88 // V1 saw errors of ~0.065 between computed window and content widths.
89 const float kMobileViewportWidthEpsilon = 0.15f; 89 const float kMobileViewportWidthEpsilon = 0.15f;
90 90
91 // Used for conditional creation of EdgeEffect types for overscroll.
92 const int kKitKatMR2SDKVersion = 19;
93
94 static const char kAsyncReadBackString[] = "Compositing.CopyFromSurfaceTime"; 91 static const char kAsyncReadBackString[] = "Compositing.CopyFromSurfaceTime";
95 92
96 // Sends an acknowledgement to the renderer of a processed IME event. 93 // Sends an acknowledgement to the renderer of a processed IME event.
97 void SendImeEventAck(RenderWidgetHostImpl* host) { 94 void SendImeEventAck(RenderWidgetHostImpl* host) {
98 host->Send(new ViewMsg_ImeEventAck(host->GetRoutingID())); 95 host->Send(new ViewMsg_ImeEventAck(host->GetRoutingID()));
99 } 96 }
100 97
101 void CopyFromCompositingSurfaceFinished( 98 void CopyFromCompositingSurfaceFinished(
102 const base::Callback<void(bool, const SkBitmap&)>& callback, 99 const base::Callback<void(bool, const SkBitmap&)>& callback,
103 scoped_ptr<cc::SingleReleaseCallback> release_callback, 100 scoped_ptr<cc::SingleReleaseCallback> release_callback,
(...skipping 26 matching lines...) Expand all
130 latency_info.AddLatencyNumberWithTimestamp( 127 latency_info.AddLatencyNumberWithTimestamp(
131 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT, 128 ui::INPUT_EVENT_LATENCY_ORIGINAL_COMPONENT,
132 0, 129 0,
133 0, 130 0,
134 base::TimeTicks() + base::TimeDelta::FromMicroseconds(time_micros), 131 base::TimeTicks() + base::TimeDelta::FromMicroseconds(time_micros),
135 1); 132 1);
136 } 133 }
137 return latency_info; 134 return latency_info;
138 } 135 }
139 136
140 OverscrollGlow::DisplayParameters CreateOverscrollDisplayParameters(
141 const cc::CompositorFrameMetadata& frame_metadata) {
142 const float scale_factor =
143 frame_metadata.page_scale_factor * frame_metadata.device_scale_factor;
144
145 // Compute the size and offsets for each edge, where each effect is sized to
146 // the viewport and offset by the distance of each viewport edge to the
147 // respective content edge.
148 OverscrollGlow::DisplayParameters params;
149 params.size = gfx::ScaleSize(
150 frame_metadata.scrollable_viewport_size, scale_factor);
151 params.edge_offsets[OverscrollGlow::EDGE_TOP] =
152 -frame_metadata.root_scroll_offset.y() * scale_factor;
153 params.edge_offsets[OverscrollGlow::EDGE_LEFT] =
154 -frame_metadata.root_scroll_offset.x() * scale_factor;
155 params.edge_offsets[OverscrollGlow::EDGE_BOTTOM] =
156 (frame_metadata.root_layer_size.height() -
157 frame_metadata.root_scroll_offset.y() -
158 frame_metadata.scrollable_viewport_size.height()) *
159 scale_factor;
160 params.edge_offsets[OverscrollGlow::EDGE_RIGHT] =
161 (frame_metadata.root_layer_size.width() -
162 frame_metadata.root_scroll_offset.x() -
163 frame_metadata.scrollable_viewport_size.width()) *
164 scale_factor;
165
166 return params;
167 }
168
169 bool UseEdgeEffectL() {
170 static bool use_edge_effect_l =
171 base::android::BuildInfo::GetInstance()->sdk_int() > kKitKatMR2SDKVersion;
172 return use_edge_effect_l;
173 }
174
175 scoped_ptr<EdgeEffectBase> CreateEdgeEffect(
176 ui::SystemUIResourceManager* resource_manager,
177 float device_scale_factor) {
178 DCHECK(resource_manager);
179 if (UseEdgeEffectL())
180 return scoped_ptr<EdgeEffectBase>(new EdgeEffectL(resource_manager));
181
182 return scoped_ptr<EdgeEffectBase>(
183 new EdgeEffect(resource_manager, device_scale_factor));
184 }
185
186 scoped_ptr<OverscrollGlow> CreateOverscrollEffect(
187 ContentViewCore* content_view_core) {
188 DCHECK(content_view_core);
189 ui::WindowAndroidCompositor* compositor =
190 content_view_core->GetWindowAndroid()->GetCompositor();
191 DCHECK(compositor);
192 ui::SystemUIResourceManager* system_resource_manager =
193 &compositor->GetSystemUIResourceManager();
194
195 if (UseEdgeEffectL())
196 EdgeEffectL::PreloadResources(system_resource_manager);
197 else
198 EdgeEffect::PreloadResources(system_resource_manager);
199
200 return make_scoped_ptr(
201 new OverscrollGlow(base::Bind(&CreateEdgeEffect,
202 system_resource_manager,
203 content_view_core->GetDpiScale())));
204 }
205
206 scoped_ptr<TouchSelectionController> CreateSelectionController( 137 scoped_ptr<TouchSelectionController> CreateSelectionController(
207 TouchSelectionControllerClient* client, 138 TouchSelectionControllerClient* client,
208 ContentViewCore* content_view_core) { 139 ContentViewCore* content_view_core) {
209 DCHECK(client); 140 DCHECK(client);
210 DCHECK(content_view_core); 141 DCHECK(content_view_core);
211 int tap_timeout_ms = gfx::ViewConfiguration::GetTapTimeoutInMs(); 142 int tap_timeout_ms = gfx::ViewConfiguration::GetTapTimeoutInMs();
212 int touch_slop_pixels = gfx::ViewConfiguration::GetTouchSlopInPixels(); 143 int touch_slop_pixels = gfx::ViewConfiguration::GetTouchSlopInPixels();
213 return make_scoped_ptr(new TouchSelectionController( 144 return make_scoped_ptr(new TouchSelectionController(
214 client, 145 client,
215 base::TimeDelta::FromMilliseconds(tap_timeout_ms), 146 base::TimeDelta::FromMilliseconds(tap_timeout_ms),
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( 197 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid(
267 RenderWidgetHostImpl* widget_host, 198 RenderWidgetHostImpl* widget_host,
268 ContentViewCoreImpl* content_view_core) 199 ContentViewCoreImpl* content_view_core)
269 : host_(widget_host), 200 : host_(widget_host),
270 outstanding_vsync_requests_(0), 201 outstanding_vsync_requests_(0),
271 is_showing_(!widget_host->is_hidden()), 202 is_showing_(!widget_host->is_hidden()),
272 content_view_core_(NULL), 203 content_view_core_(NULL),
273 ime_adapter_android_(this), 204 ime_adapter_android_(this),
274 cached_background_color_(SK_ColorWHITE), 205 cached_background_color_(SK_ColorWHITE),
275 last_output_surface_id_(kUndefinedOutputSurfaceId), 206 last_output_surface_id_(kUndefinedOutputSurfaceId),
276 overscroll_effect_enabled_( 207 overscroll_controller_enabled_(
277 !base::CommandLine::ForCurrentProcess()->HasSwitch( 208 !base::CommandLine::ForCurrentProcess()->HasSwitch(
278 switches::kDisableOverscrollEdgeEffect)), 209 switches::kDisableOverscrollEdgeEffect)),
279 gesture_provider_(CreateGestureProviderConfig(), this), 210 gesture_provider_(CreateGestureProviderConfig(), this),
280 gesture_text_selector_(this), 211 gesture_text_selector_(this),
281 accelerated_surface_route_id_(0), 212 accelerated_surface_route_id_(0),
282 using_synchronous_compositor_(SynchronousCompositorImpl::FromID( 213 using_synchronous_compositor_(SynchronousCompositorImpl::FromID(
283 widget_host->GetProcess()->GetID(), 214 widget_host->GetProcess()->GetID(),
284 widget_host->GetRoutingID()) != NULL), 215 widget_host->GetRoutingID()) != NULL),
285 frame_evictor_(new DelegatedFrameEvictor(this)), 216 frame_evictor_(new DelegatedFrameEvictor(this)),
286 locks_on_frame_count_(0), 217 locks_on_frame_count_(0),
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 void RenderWidgetHostViewAndroid::MovePluginWindows( 399 void RenderWidgetHostViewAndroid::MovePluginWindows(
469 const std::vector<WebPluginGeometry>& moves) { 400 const std::vector<WebPluginGeometry>& moves) {
470 // We don't have plugin windows on Android. Do nothing. Note: this is called 401 // We don't have plugin windows on Android. Do nothing. Note: this is called
471 // from RenderWidgetHost::OnUpdateRect which is itself invoked while 402 // from RenderWidgetHost::OnUpdateRect which is itself invoked while
472 // processing the corresponding message from Renderer. 403 // processing the corresponding message from Renderer.
473 } 404 }
474 405
475 void RenderWidgetHostViewAndroid::Focus() { 406 void RenderWidgetHostViewAndroid::Focus() {
476 host_->Focus(); 407 host_->Focus();
477 host_->SetInputMethodActive(true); 408 host_->SetInputMethodActive(true);
478 if (overscroll_effect_) 409 if (overscroll_controller_)
479 overscroll_effect_->Enable(); 410 overscroll_controller_->Enable();
480 if (selection_controller_) 411 if (selection_controller_)
481 selection_controller_->SetTemporarilyHidden(false); 412 selection_controller_->SetTemporarilyHidden(false);
482 } 413 }
483 414
484 void RenderWidgetHostViewAndroid::Blur() { 415 void RenderWidgetHostViewAndroid::Blur() {
485 host_->SetInputMethodActive(false); 416 host_->SetInputMethodActive(false);
486 host_->Blur(); 417 host_->Blur();
487 if (overscroll_effect_) 418 if (overscroll_controller_)
488 overscroll_effect_->Disable(); 419 overscroll_controller_->Disable();
489 if (selection_controller_) 420 if (selection_controller_)
490 selection_controller_->SetTemporarilyHidden(true); 421 selection_controller_->SetTemporarilyHidden(true);
491 } 422 }
492 423
493 bool RenderWidgetHostViewAndroid::HasFocus() const { 424 bool RenderWidgetHostViewAndroid::HasFocus() const {
494 if (!content_view_core_) 425 if (!content_view_core_)
495 return false; // ContentViewCore not created yet. 426 return false; // ContentViewCore not created yet.
496 427
497 return content_view_core_->HasFocus(); 428 return content_view_core_->HasFocus();
498 } 429 }
(...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after
1025 void RenderWidgetHostViewAndroid::ComputeContentsSize( 956 void RenderWidgetHostViewAndroid::ComputeContentsSize(
1026 const cc::CompositorFrameMetadata& frame_metadata) { 957 const cc::CompositorFrameMetadata& frame_metadata) {
1027 // Calculate the content size. This should be 0 if the texture_size is 0. 958 // Calculate the content size. This should be 0 if the texture_size is 0.
1028 gfx::Vector2dF offset; 959 gfx::Vector2dF offset;
1029 if (texture_size_in_layer_.IsEmpty()) 960 if (texture_size_in_layer_.IsEmpty())
1030 content_size_in_layer_ = gfx::Size(); 961 content_size_in_layer_ = gfx::Size();
1031 content_size_in_layer_ = gfx::ToCeiledSize(gfx::ScaleSize( 962 content_size_in_layer_ = gfx::ToCeiledSize(gfx::ScaleSize(
1032 frame_metadata.scrollable_viewport_size, 963 frame_metadata.scrollable_viewport_size,
1033 frame_metadata.device_scale_factor * frame_metadata.page_scale_factor)); 964 frame_metadata.device_scale_factor * frame_metadata.page_scale_factor));
1034 965
1035 if (overscroll_effect_) {
1036 overscroll_effect_->UpdateDisplayParameters(
1037 CreateOverscrollDisplayParameters(frame_metadata));
1038 }
1039 } 966 }
1040 967
1041 void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame( 968 void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame(
1042 uint32 output_surface_id, 969 uint32 output_surface_id,
1043 scoped_ptr<cc::CompositorFrame> frame) { 970 scoped_ptr<cc::CompositorFrame> frame) {
1044 last_scroll_offset_ = frame->metadata.root_scroll_offset; 971 last_scroll_offset_ = frame->metadata.root_scroll_offset;
1045 if (!frame->delegated_frame_data) { 972 if (!frame->delegated_frame_data) {
1046 LOG(ERROR) << "Non-delegated renderer path no longer supported"; 973 LOG(ERROR) << "Non-delegated renderer path no longer supported";
1047 return; 974 return;
1048 } 975 }
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
1219 // web design, so text will be legible without zooming). Also disable 1146 // web design, so text will be legible without zooming). Also disable
1220 // double tap and pinch for pages that prevent zooming in or out. 1147 // double tap and pinch for pages that prevent zooming in or out.
1221 bool has_mobile_viewport = HasMobileViewport(frame_metadata); 1148 bool has_mobile_viewport = HasMobileViewport(frame_metadata);
1222 bool has_fixed_page_scale = HasFixedPageScale(frame_metadata); 1149 bool has_fixed_page_scale = HasFixedPageScale(frame_metadata);
1223 gesture_provider_.SetDoubleTapSupportForPageEnabled( 1150 gesture_provider_.SetDoubleTapSupportForPageEnabled(
1224 !has_fixed_page_scale && !has_mobile_viewport); 1151 !has_fixed_page_scale && !has_mobile_viewport);
1225 1152
1226 if (!content_view_core_) 1153 if (!content_view_core_)
1227 return; 1154 return;
1228 1155
1156 if (overscroll_controller_)
1157 overscroll_controller_->OnFrameMetadataUpdated(frame_metadata);
1158
1229 if (selection_controller_) { 1159 if (selection_controller_) {
1230 selection_controller_->OnSelectionBoundsChanged( 1160 selection_controller_->OnSelectionBoundsChanged(
1231 frame_metadata.selection_start, frame_metadata.selection_end); 1161 frame_metadata.selection_start, frame_metadata.selection_end);
1232 } 1162 }
1233 1163
1234 // All offsets and sizes are in CSS pixels. 1164 // All offsets and sizes are in CSS pixels.
1235 content_view_core_->UpdateFrameInfo( 1165 content_view_core_->UpdateFrameInfo(
1236 frame_metadata.root_scroll_offset, 1166 frame_metadata.root_scroll_offset,
1237 frame_metadata.page_scale_factor, 1167 frame_metadata.page_scale_factor,
1238 gfx::Vector2dF(frame_metadata.min_page_scale_factor, 1168 gfx::Vector2dF(frame_metadata.min_page_scale_factor,
(...skipping 16 matching lines...) Expand all
1255 accelerated_surface_route_id_ = route_id; 1185 accelerated_surface_route_id_ = route_id;
1256 } 1186 }
1257 1187
1258 void RenderWidgetHostViewAndroid::AttachLayers() { 1188 void RenderWidgetHostViewAndroid::AttachLayers() {
1259 if (!content_view_core_) 1189 if (!content_view_core_)
1260 return; 1190 return;
1261 if (!layer_.get()) 1191 if (!layer_.get())
1262 return; 1192 return;
1263 1193
1264 content_view_core_->AttachLayer(layer_); 1194 content_view_core_->AttachLayer(layer_);
1265 if (overscroll_effect_) 1195 if (overscroll_controller_)
1266 overscroll_effect_->Enable(); 1196 overscroll_controller_->Enable();
1267 layer_->SetHideLayerAndSubtree(!is_showing_); 1197 layer_->SetHideLayerAndSubtree(!is_showing_);
1268 } 1198 }
1269 1199
1270 void RenderWidgetHostViewAndroid::RemoveLayers() { 1200 void RenderWidgetHostViewAndroid::RemoveLayers() {
1271 if (!content_view_core_) 1201 if (!content_view_core_)
1272 return; 1202 return;
1273 1203
1274 if (!layer_.get()) 1204 if (!layer_.get())
1275 return; 1205 return;
1276 1206
1277 content_view_core_->RemoveLayer(layer_); 1207 content_view_core_->RemoveLayer(layer_);
1278 if (overscroll_effect_) 1208 if (overscroll_controller_)
1279 overscroll_effect_->Disable(); 1209 overscroll_controller_->Disable();
1280 } 1210 }
1281 1211
1282 void RenderWidgetHostViewAndroid::RequestVSyncUpdate(uint32 requests) { 1212 void RenderWidgetHostViewAndroid::RequestVSyncUpdate(uint32 requests) {
1283 // The synchronous compositor does not requre BeginFrame messages. 1213 // The synchronous compositor does not requre BeginFrame messages.
1284 if (using_synchronous_compositor_) 1214 if (using_synchronous_compositor_)
1285 requests &= FLUSH_INPUT; 1215 requests &= FLUSH_INPUT;
1286 1216
1287 bool should_request_vsync = !outstanding_vsync_requests_ && requests; 1217 bool should_request_vsync = !outstanding_vsync_requests_ && requests;
1288 outstanding_vsync_requests_ |= requests; 1218 outstanding_vsync_requests_ |= requests;
1289 // Note that if we're not currently observing the root window, outstanding 1219 // Note that if we're not currently observing the root window, outstanding
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1328 1258
1329 base::TimeTicks deadline = 1259 base::TimeTicks deadline =
1330 display_time - host_->GetEstimatedBrowserCompositeTime(); 1260 display_time - host_->GetEstimatedBrowserCompositeTime();
1331 1261
1332 host_->Send(new ViewMsg_BeginFrame( 1262 host_->Send(new ViewMsg_BeginFrame(
1333 host_->GetRoutingID(), 1263 host_->GetRoutingID(),
1334 cc::BeginFrameArgs::Create(frame_time, deadline, vsync_period))); 1264 cc::BeginFrameArgs::Create(frame_time, deadline, vsync_period)));
1335 } 1265 }
1336 1266
1337 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { 1267 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) {
1338 bool needs_animate = 1268 bool needs_animate = false;
1339 overscroll_effect_ ? overscroll_effect_->Animate(frame_time) : false; 1269 if (overscroll_controller_)
1270 needs_animate |= overscroll_controller_->Animate(frame_time);
1340 if (selection_controller_) 1271 if (selection_controller_)
1341 needs_animate |= selection_controller_->Animate(frame_time); 1272 needs_animate |= selection_controller_->Animate(frame_time);
1342 return needs_animate; 1273 return needs_animate;
1343 } 1274 }
1344 1275
1345 void RenderWidgetHostViewAndroid::EvictDelegatedFrame() { 1276 void RenderWidgetHostViewAndroid::EvictDelegatedFrame() {
1346 if (layer_.get()) 1277 if (layer_.get())
1347 DestroyDelegatedContent(); 1278 DestroyDelegatedContent();
1348 frame_evictor_->DiscardedFrame(); 1279 frame_evictor_->DiscardedFrame();
1349 // We are evicting the delegated frame, 1280 // We are evicting the delegated frame,
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
1387 void RenderWidgetHostViewAndroid::GestureEventAck( 1318 void RenderWidgetHostViewAndroid::GestureEventAck(
1388 const blink::WebGestureEvent& event, 1319 const blink::WebGestureEvent& event,
1389 InputEventAckState ack_result) { 1320 InputEventAckState ack_result) {
1390 // The overscroll effect requires an explicit release signal that may not be 1321 // The overscroll effect requires an explicit release signal that may not be
1391 // sent from the renderer compositor. 1322 // sent from the renderer compositor.
1392 if (event.type == blink::WebInputEvent::GestureScrollEnd || 1323 if (event.type == blink::WebInputEvent::GestureScrollEnd ||
1393 event.type == blink::WebInputEvent::GestureFlingStart) { 1324 event.type == blink::WebInputEvent::GestureFlingStart) {
1394 DidOverscroll(DidOverscrollParams()); 1325 DidOverscroll(DidOverscrollParams());
1395 } 1326 }
1396 1327
1328 if (overscroll_controller_)
1329 overscroll_controller_->OnGestureEventAck(event, ack_result);
1330
1397 if (content_view_core_) 1331 if (content_view_core_)
1398 content_view_core_->OnGestureEventAck(event, ack_result); 1332 content_view_core_->OnGestureEventAck(event, ack_result);
1399 } 1333 }
1400 1334
1401 InputEventAckState RenderWidgetHostViewAndroid::FilterInputEvent( 1335 InputEventAckState RenderWidgetHostViewAndroid::FilterInputEvent(
1402 const blink::WebInputEvent& input_event) { 1336 const blink::WebInputEvent& input_event) {
1403 if (selection_controller_) { 1337 if (selection_controller_) {
1404 switch (input_event.type) { 1338 switch (input_event.type) {
1405 case blink::WebInputEvent::GestureLongPress: 1339 case blink::WebInputEvent::GestureLongPress:
1406 selection_controller_->OnLongPressEvent(); 1340 selection_controller_->OnLongPressEvent();
1407 break; 1341 break;
1408 case blink::WebInputEvent::GestureTap: 1342 case blink::WebInputEvent::GestureTap:
1409 selection_controller_->OnTapEvent(); 1343 selection_controller_->OnTapEvent();
1410 break; 1344 break;
1411 default: 1345 default:
1412 break; 1346 break;
1413 } 1347 }
1414 } 1348 }
1415 1349
1350 if (overscroll_controller_ &&
1351 blink::WebInputEvent::isGestureEventType(input_event.type) &&
1352 overscroll_controller_->WillHandleGestureEvent(
1353 static_cast<const blink::WebGestureEvent&>(input_event))) {
1354 return INPUT_EVENT_ACK_STATE_CONSUMED;
1355 }
1356
1416 if (content_view_core_ && 1357 if (content_view_core_ &&
1417 content_view_core_->FilterInputEvent(input_event)) 1358 content_view_core_->FilterInputEvent(input_event))
1418 return INPUT_EVENT_ACK_STATE_CONSUMED; 1359 return INPUT_EVENT_ACK_STATE_CONSUMED;
1419 1360
1420 if (!host_) 1361 if (!host_)
1421 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; 1362 return INPUT_EVENT_ACK_STATE_NOT_CONSUMED;
1422 1363
1423 if (input_event.type == blink::WebInputEvent::GestureTapDown || 1364 if (input_event.type == blink::WebInputEvent::GestureTapDown ||
1424 input_event.type == blink::WebInputEvent::TouchStart) { 1365 input_event.type == blink::WebInputEvent::TouchStart) {
1425 GpuDataManagerImpl* gpu_data = GpuDataManagerImpl::GetInstance(); 1366 GpuDataManagerImpl* gpu_data = GpuDataManagerImpl::GetInstance();
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
1490 1431
1491 void RenderWidgetHostViewAndroid::SendMouseWheelEvent( 1432 void RenderWidgetHostViewAndroid::SendMouseWheelEvent(
1492 const blink::WebMouseWheelEvent& event) { 1433 const blink::WebMouseWheelEvent& event) {
1493 if (host_) 1434 if (host_)
1494 host_->ForwardWheelEvent(event); 1435 host_->ForwardWheelEvent(event);
1495 } 1436 }
1496 1437
1497 void RenderWidgetHostViewAndroid::SendGestureEvent( 1438 void RenderWidgetHostViewAndroid::SendGestureEvent(
1498 const blink::WebGestureEvent& event) { 1439 const blink::WebGestureEvent& event) {
1499 // Sending a gesture that may trigger overscroll should resume the effect. 1440 // Sending a gesture that may trigger overscroll should resume the effect.
1500 if (overscroll_effect_) 1441 if (overscroll_controller_)
1501 overscroll_effect_->Enable(); 1442 overscroll_controller_->Enable();
1502 1443
1503 if (host_) 1444 if (host_)
1504 host_->ForwardGestureEventWithLatencyInfo(event, CreateLatencyInfo(event)); 1445 host_->ForwardGestureEventWithLatencyInfo(event, CreateLatencyInfo(event));
1505 } 1446 }
1506 1447
1507 void RenderWidgetHostViewAndroid::MoveCaret(const gfx::Point& point) { 1448 void RenderWidgetHostViewAndroid::MoveCaret(const gfx::Point& point) {
1508 if (host_) 1449 if (host_)
1509 host_->MoveCaret(point); 1450 host_->MoveCaret(point);
1510 } 1451 }
1511 1452
(...skipping 26 matching lines...) Expand all
1538 1479
1539 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { 1480 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const {
1540 return cached_background_color_; 1481 return cached_background_color_;
1541 } 1482 }
1542 1483
1543 void RenderWidgetHostViewAndroid::DidOverscroll( 1484 void RenderWidgetHostViewAndroid::DidOverscroll(
1544 const DidOverscrollParams& params) { 1485 const DidOverscrollParams& params) {
1545 if (!content_view_core_ || !layer_.get() || !is_showing_) 1486 if (!content_view_core_ || !layer_.get() || !is_showing_)
1546 return; 1487 return;
1547 1488
1548 const float device_scale_factor = content_view_core_->GetDpiScale(); 1489 if (overscroll_controller_)
1549 1490 overscroll_controller_->OnOverscrolled(params);
1550 if (overscroll_effect_ &&
1551 overscroll_effect_->OnOverscrolled(
1552 content_view_core_->GetLayer().get(),
1553 base::TimeTicks::Now(),
1554 gfx::ScaleVector2d(params.accumulated_overscroll,
1555 device_scale_factor),
1556 gfx::ScaleVector2d(params.latest_overscroll_delta,
1557 device_scale_factor),
1558 gfx::ScaleVector2d(params.current_fling_velocity,
1559 device_scale_factor),
1560 gfx::ScaleVector2d(
1561 params.causal_event_viewport_point.OffsetFromOrigin(),
1562 device_scale_factor))) {
1563 SetNeedsAnimate();
1564 }
1565 } 1491 }
1566 1492
1567 void RenderWidgetHostViewAndroid::DidStopFlinging() { 1493 void RenderWidgetHostViewAndroid::DidStopFlinging() {
1568 if (content_view_core_) 1494 if (content_view_core_)
1569 content_view_core_->DidStopFlinging(); 1495 content_view_core_->DidStopFlinging();
1570 } 1496 }
1571 1497
1572 void RenderWidgetHostViewAndroid::SetContentViewCore( 1498 void RenderWidgetHostViewAndroid::SetContentViewCore(
1573 ContentViewCoreImpl* content_view_core) { 1499 ContentViewCoreImpl* content_view_core) {
1574 RemoveLayers(); 1500 RemoveLayers();
1575 StopObservingRootWindow(); 1501 StopObservingRootWindow();
1576 1502
1577 bool resize = false; 1503 bool resize = false;
1578 if (content_view_core != content_view_core_) { 1504 if (content_view_core != content_view_core_) {
1579 overscroll_effect_.reset(); 1505 overscroll_controller_.reset();
1580 selection_controller_.reset(); 1506 selection_controller_.reset();
1581 ReleaseLocksOnSurface(); 1507 ReleaseLocksOnSurface();
1582 resize = true; 1508 resize = true;
1583 } 1509 }
1584 1510
1585 content_view_core_ = content_view_core; 1511 content_view_core_ = content_view_core;
1586 1512
1587 BrowserAccessibilityManager* manager = NULL; 1513 BrowserAccessibilityManager* manager = NULL;
1588 if (host_) 1514 if (host_)
1589 manager = host_->GetRootBrowserAccessibilityManager(); 1515 manager = host_->GetRootBrowserAccessibilityManager();
(...skipping 10 matching lines...) Expand all
1600 return; 1526 return;
1601 1527
1602 StartObservingRootWindow(); 1528 StartObservingRootWindow();
1603 1529
1604 if (resize) 1530 if (resize)
1605 WasResized(); 1531 WasResized();
1606 1532
1607 if (!selection_controller_) 1533 if (!selection_controller_)
1608 selection_controller_ = CreateSelectionController(this, content_view_core_); 1534 selection_controller_ = CreateSelectionController(this, content_view_core_);
1609 1535
1610 if (overscroll_effect_enabled_ && !overscroll_effect_ && 1536 if (overscroll_controller_enabled_ && !overscroll_controller_ &&
1611 content_view_core_->GetWindowAndroid()->GetCompositor()) 1537 content_view_core_->GetWindowAndroid()->GetCompositor()) {
1612 overscroll_effect_ = CreateOverscrollEffect(content_view_core_); 1538 overscroll_controller_.reset(
1539 new OverscrollControllerAndroid(content_view_core_));
1540 }
1613 } 1541 }
1614 1542
1615 void RenderWidgetHostViewAndroid::RunAckCallbacks() { 1543 void RenderWidgetHostViewAndroid::RunAckCallbacks() {
1616 while (!ack_callbacks_.empty()) { 1544 while (!ack_callbacks_.empty()) {
1617 ack_callbacks_.front().Run(); 1545 ack_callbacks_.front().Run();
1618 ack_callbacks_.pop(); 1546 ack_callbacks_.pop();
1619 } 1547 }
1620 } 1548 }
1621 1549
1622 void RenderWidgetHostViewAndroid::OnGestureEvent( 1550 void RenderWidgetHostViewAndroid::OnGestureEvent(
1623 const ui::GestureEventData& gesture) { 1551 const ui::GestureEventData& gesture) {
1624 SendGestureEvent(CreateWebGestureEventFromGestureEventData(gesture)); 1552 SendGestureEvent(CreateWebGestureEventFromGestureEventData(gesture));
1625 } 1553 }
1626 1554
1627 void RenderWidgetHostViewAndroid::OnCompositingDidCommit() { 1555 void RenderWidgetHostViewAndroid::OnCompositingDidCommit() {
1628 RunAckCallbacks(); 1556 RunAckCallbacks();
1629 } 1557 }
1630 1558
1631 void RenderWidgetHostViewAndroid::OnAttachCompositor() { 1559 void RenderWidgetHostViewAndroid::OnAttachCompositor() {
1632 DCHECK(content_view_core_); 1560 DCHECK(content_view_core_);
1633 if (overscroll_effect_enabled_ && !overscroll_effect_) 1561 if (overscroll_controller_enabled_ && !overscroll_controller_) {
1634 overscroll_effect_ = CreateOverscrollEffect(content_view_core_); 1562 overscroll_controller_.reset(
1563 new OverscrollControllerAndroid(content_view_core_));
1564 }
1635 } 1565 }
1636 1566
1637 void RenderWidgetHostViewAndroid::OnDetachCompositor() { 1567 void RenderWidgetHostViewAndroid::OnDetachCompositor() {
1638 DCHECK(content_view_core_); 1568 DCHECK(content_view_core_);
1639 DCHECK(!using_synchronous_compositor_); 1569 DCHECK(!using_synchronous_compositor_);
1640 RunAckCallbacks(); 1570 RunAckCallbacks();
1641 overscroll_effect_.reset(); 1571 overscroll_controller_.reset();
1642 } 1572 }
1643 1573
1644 void RenderWidgetHostViewAndroid::OnVSync(base::TimeTicks frame_time, 1574 void RenderWidgetHostViewAndroid::OnVSync(base::TimeTicks frame_time,
1645 base::TimeDelta vsync_period) { 1575 base::TimeDelta vsync_period) {
1646 TRACE_EVENT0("cc", "RenderWidgetHostViewAndroid::OnVSync"); 1576 TRACE_EVENT0("cc", "RenderWidgetHostViewAndroid::OnVSync");
1647 if (!host_) 1577 if (!host_)
1648 return; 1578 return;
1649 1579
1650 const uint32 current_vsync_requests = outstanding_vsync_requests_; 1580 const uint32 current_vsync_requests = outstanding_vsync_requests_;
1651 outstanding_vsync_requests_ = 0; 1581 outstanding_vsync_requests_ = 0;
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
1803 results->orientationAngle = display.RotationAsDegree(); 1733 results->orientationAngle = display.RotationAsDegree();
1804 results->orientationType = 1734 results->orientationType =
1805 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display); 1735 RenderWidgetHostViewBase::GetOrientationTypeForMobile(display);
1806 gfx::DeviceDisplayInfo info; 1736 gfx::DeviceDisplayInfo info;
1807 results->depth = info.GetBitsPerPixel(); 1737 results->depth = info.GetBitsPerPixel();
1808 results->depthPerComponent = info.GetBitsPerComponent(); 1738 results->depthPerComponent = info.GetBitsPerComponent();
1809 results->isMonochrome = (results->depthPerComponent == 0); 1739 results->isMonochrome = (results->depthPerComponent == 0);
1810 } 1740 }
1811 1741
1812 } // namespace content 1742 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698