| 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/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/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 : host_(widget_host), | 179 : host_(widget_host), |
| 180 needs_begin_frame_(false), | 180 needs_begin_frame_(false), |
| 181 is_showing_(!widget_host->is_hidden()), | 181 is_showing_(!widget_host->is_hidden()), |
| 182 content_view_core_(NULL), | 182 content_view_core_(NULL), |
| 183 ime_adapter_android_(this), | 183 ime_adapter_android_(this), |
| 184 cached_background_color_(SK_ColorWHITE), | 184 cached_background_color_(SK_ColorWHITE), |
| 185 last_output_surface_id_(kUndefinedOutputSurfaceId), | 185 last_output_surface_id_(kUndefinedOutputSurfaceId), |
| 186 weak_ptr_factory_(this), | 186 weak_ptr_factory_(this), |
| 187 overscroll_effect_enabled_(!CommandLine::ForCurrentProcess()->HasSwitch( | 187 overscroll_effect_enabled_(!CommandLine::ForCurrentProcess()->HasSwitch( |
| 188 switches::kDisableOverscrollEdgeEffect)), | 188 switches::kDisableOverscrollEdgeEffect)), |
| 189 overscroll_effect_(OverscrollGlow::Create(overscroll_effect_enabled_)), | |
| 190 gesture_provider_(CreateGestureProviderConfig(), this), | 189 gesture_provider_(CreateGestureProviderConfig(), this), |
| 191 gesture_text_selector_(this), | 190 gesture_text_selector_(this), |
| 192 flush_input_requested_(false), | 191 flush_input_requested_(false), |
| 193 accelerated_surface_route_id_(0), | 192 accelerated_surface_route_id_(0), |
| 194 using_synchronous_compositor_(SynchronousCompositorImpl::FromID( | 193 using_synchronous_compositor_(SynchronousCompositorImpl::FromID( |
| 195 widget_host->GetProcess()->GetID(), | 194 widget_host->GetProcess()->GetID(), |
| 196 widget_host->GetRoutingID()) != NULL), | 195 widget_host->GetRoutingID()) != NULL), |
| 197 frame_evictor_(new DelegatedFrameEvictor(this)), | 196 frame_evictor_(new DelegatedFrameEvictor(this)), |
| 198 locks_on_frame_count_(0), | 197 locks_on_frame_count_(0), |
| 199 observing_root_window_(false) { | 198 observing_root_window_(false) { |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 347 void RenderWidgetHostViewAndroid::MovePluginWindows( | 346 void RenderWidgetHostViewAndroid::MovePluginWindows( |
| 348 const std::vector<WebPluginGeometry>& moves) { | 347 const std::vector<WebPluginGeometry>& moves) { |
| 349 // We don't have plugin windows on Android. Do nothing. Note: this is called | 348 // We don't have plugin windows on Android. Do nothing. Note: this is called |
| 350 // from RenderWidgetHost::OnUpdateRect which is itself invoked while | 349 // from RenderWidgetHost::OnUpdateRect which is itself invoked while |
| 351 // processing the corresponding message from Renderer. | 350 // processing the corresponding message from Renderer. |
| 352 } | 351 } |
| 353 | 352 |
| 354 void RenderWidgetHostViewAndroid::Focus() { | 353 void RenderWidgetHostViewAndroid::Focus() { |
| 355 host_->Focus(); | 354 host_->Focus(); |
| 356 host_->SetInputMethodActive(true); | 355 host_->SetInputMethodActive(true); |
| 357 if (overscroll_effect_enabled_) | 356 if (overscroll_effect_) |
| 358 overscroll_effect_->Enable(); | 357 overscroll_effect_->Enable(); |
| 359 } | 358 } |
| 360 | 359 |
| 361 void RenderWidgetHostViewAndroid::Blur() { | 360 void RenderWidgetHostViewAndroid::Blur() { |
| 362 host_->ExecuteEditCommand("Unselect", ""); | 361 host_->ExecuteEditCommand("Unselect", ""); |
| 363 host_->SetInputMethodActive(false); | 362 host_->SetInputMethodActive(false); |
| 364 host_->Blur(); | 363 host_->Blur(); |
| 365 overscroll_effect_->Disable(); | 364 if (overscroll_effect_) |
| 365 overscroll_effect_->Disable(); |
| 366 } | 366 } |
| 367 | 367 |
| 368 bool RenderWidgetHostViewAndroid::HasFocus() const { | 368 bool RenderWidgetHostViewAndroid::HasFocus() const { |
| 369 if (!content_view_core_) | 369 if (!content_view_core_) |
| 370 return false; // ContentViewCore not created yet. | 370 return false; // ContentViewCore not created yet. |
| 371 | 371 |
| 372 return content_view_core_->HasFocus(); | 372 return content_view_core_->HasFocus(); |
| 373 } | 373 } |
| 374 | 374 |
| 375 bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const { | 375 bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const { |
| (...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 852 // Calculate the content size. This should be 0 if the texture_size is 0. | 852 // Calculate the content size. This should be 0 if the texture_size is 0. |
| 853 gfx::Vector2dF offset; | 853 gfx::Vector2dF offset; |
| 854 if (texture_size_in_layer_.GetArea() > 0) | 854 if (texture_size_in_layer_.GetArea() > 0) |
| 855 offset = frame_metadata.location_bar_content_translation; | 855 offset = frame_metadata.location_bar_content_translation; |
| 856 offset.set_y(offset.y() + frame_metadata.overdraw_bottom_height); | 856 offset.set_y(offset.y() + frame_metadata.overdraw_bottom_height); |
| 857 offset.Scale(frame_metadata.device_scale_factor); | 857 offset.Scale(frame_metadata.device_scale_factor); |
| 858 content_size_in_layer_ = | 858 content_size_in_layer_ = |
| 859 gfx::Size(texture_size_in_layer_.width() - offset.x(), | 859 gfx::Size(texture_size_in_layer_.width() - offset.x(), |
| 860 texture_size_in_layer_.height() - offset.y()); | 860 texture_size_in_layer_.height() - offset.y()); |
| 861 | 861 |
| 862 overscroll_effect_->UpdateDisplayParameters( | 862 if (overscroll_effect_) { |
| 863 CreateOverscrollDisplayParameters(frame_metadata)); | 863 overscroll_effect_->UpdateDisplayParameters( |
| 864 CreateOverscrollDisplayParameters(frame_metadata)); |
| 865 } |
| 864 } | 866 } |
| 865 | 867 |
| 866 void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame( | 868 void RenderWidgetHostViewAndroid::InternalSwapCompositorFrame( |
| 867 uint32 output_surface_id, | 869 uint32 output_surface_id, |
| 868 scoped_ptr<cc::CompositorFrame> frame) { | 870 scoped_ptr<cc::CompositorFrame> frame) { |
| 869 if (!frame->delegated_frame_data) { | 871 if (!frame->delegated_frame_data) { |
| 870 LOG(ERROR) << "Non-delegated renderer path no longer supported"; | 872 LOG(ERROR) << "Non-delegated renderer path no longer supported"; |
| 871 return; | 873 return; |
| 872 } | 874 } |
| 873 | 875 |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1022 NOTREACHED() << "Need --composite-to-mailbox or --enable-delegated-renderer"; | 1024 NOTREACHED() << "Need --composite-to-mailbox or --enable-delegated-renderer"; |
| 1023 } | 1025 } |
| 1024 | 1026 |
| 1025 void RenderWidgetHostViewAndroid::AttachLayers() { | 1027 void RenderWidgetHostViewAndroid::AttachLayers() { |
| 1026 if (!content_view_core_) | 1028 if (!content_view_core_) |
| 1027 return; | 1029 return; |
| 1028 if (!layer_.get()) | 1030 if (!layer_.get()) |
| 1029 return; | 1031 return; |
| 1030 | 1032 |
| 1031 content_view_core_->AttachLayer(layer_); | 1033 content_view_core_->AttachLayer(layer_); |
| 1032 if (overscroll_effect_enabled_) | 1034 if (overscroll_effect_) |
| 1033 overscroll_effect_->Enable(); | 1035 overscroll_effect_->Enable(); |
| 1034 layer_->SetHideLayerAndSubtree(!is_showing_); | 1036 layer_->SetHideLayerAndSubtree(!is_showing_); |
| 1035 } | 1037 } |
| 1036 | 1038 |
| 1037 void RenderWidgetHostViewAndroid::RemoveLayers() { | 1039 void RenderWidgetHostViewAndroid::RemoveLayers() { |
| 1038 if (!content_view_core_) | 1040 if (!content_view_core_) |
| 1039 return; | 1041 return; |
| 1040 if (!layer_.get()) | 1042 if (!layer_.get()) |
| 1041 return; | 1043 return; |
| 1042 | 1044 |
| 1043 content_view_core_->RemoveLayer(layer_); | 1045 content_view_core_->RemoveLayer(layer_); |
| 1044 overscroll_effect_->Disable(); | 1046 if (overscroll_effect_) |
| 1047 overscroll_effect_->Disable(); |
| 1045 } | 1048 } |
| 1046 | 1049 |
| 1047 void RenderWidgetHostViewAndroid::SetNeedsAnimate() { | 1050 void RenderWidgetHostViewAndroid::SetNeedsAnimate() { |
| 1048 content_view_core_->GetWindowAndroid()->SetNeedsAnimate(); | 1051 content_view_core_->GetWindowAndroid()->SetNeedsAnimate(); |
| 1049 } | 1052 } |
| 1050 | 1053 |
| 1051 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { | 1054 bool RenderWidgetHostViewAndroid::Animate(base::TimeTicks frame_time) { |
| 1052 return overscroll_effect_->Animate(frame_time); | 1055 return overscroll_effect_ ? overscroll_effect_->Animate(frame_time) : false; |
| 1053 } | 1056 } |
| 1054 | 1057 |
| 1055 void RenderWidgetHostViewAndroid::AcceleratedSurfacePostSubBuffer( | 1058 void RenderWidgetHostViewAndroid::AcceleratedSurfacePostSubBuffer( |
| 1056 const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params, | 1059 const GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params& params, |
| 1057 int gpu_host_id) { | 1060 int gpu_host_id) { |
| 1058 NOTREACHED(); | 1061 NOTREACHED(); |
| 1059 } | 1062 } |
| 1060 | 1063 |
| 1061 void RenderWidgetHostViewAndroid::AcceleratedSurfaceSuspend() { | 1064 void RenderWidgetHostViewAndroid::AcceleratedSurfaceSuspend() { |
| 1062 NOTREACHED(); | 1065 NOTREACHED(); |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1202 | 1205 |
| 1203 void RenderWidgetHostViewAndroid::SendMouseWheelEvent( | 1206 void RenderWidgetHostViewAndroid::SendMouseWheelEvent( |
| 1204 const blink::WebMouseWheelEvent& event) { | 1207 const blink::WebMouseWheelEvent& event) { |
| 1205 if (host_) | 1208 if (host_) |
| 1206 host_->ForwardWheelEvent(event); | 1209 host_->ForwardWheelEvent(event); |
| 1207 } | 1210 } |
| 1208 | 1211 |
| 1209 void RenderWidgetHostViewAndroid::SendGestureEvent( | 1212 void RenderWidgetHostViewAndroid::SendGestureEvent( |
| 1210 const blink::WebGestureEvent& event) { | 1213 const blink::WebGestureEvent& event) { |
| 1211 // Sending a gesture that may trigger overscroll should resume the effect. | 1214 // Sending a gesture that may trigger overscroll should resume the effect. |
| 1212 if (overscroll_effect_enabled_) | 1215 if (overscroll_effect_) |
| 1213 overscroll_effect_->Enable(); | 1216 overscroll_effect_->Enable(); |
| 1214 | 1217 |
| 1215 if (host_) | 1218 if (host_) |
| 1216 host_->ForwardGestureEventWithLatencyInfo(event, CreateLatencyInfo(event)); | 1219 host_->ForwardGestureEventWithLatencyInfo(event, CreateLatencyInfo(event)); |
| 1217 } | 1220 } |
| 1218 | 1221 |
| 1219 void RenderWidgetHostViewAndroid::MoveCaret(const gfx::Point& point) { | 1222 void RenderWidgetHostViewAndroid::MoveCaret(const gfx::Point& point) { |
| 1220 if (host_) | 1223 if (host_) |
| 1221 host_->MoveCaret(point); | 1224 host_->MoveCaret(point); |
| 1222 } | 1225 } |
| 1223 | 1226 |
| 1224 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { | 1227 SkColor RenderWidgetHostViewAndroid::GetCachedBackgroundColor() const { |
| 1225 return cached_background_color_; | 1228 return cached_background_color_; |
| 1226 } | 1229 } |
| 1227 | 1230 |
| 1228 void RenderWidgetHostViewAndroid::DidOverscroll( | 1231 void RenderWidgetHostViewAndroid::DidOverscroll( |
| 1229 const DidOverscrollParams& params) { | 1232 const DidOverscrollParams& params) { |
| 1230 if (!content_view_core_ || !layer_ || !is_showing_) | 1233 if (!content_view_core_ || !layer_ || !is_showing_) |
| 1231 return; | 1234 return; |
| 1232 | 1235 |
| 1233 const float device_scale_factor = content_view_core_->GetDpiScale(); | 1236 const float device_scale_factor = content_view_core_->GetDpiScale(); |
| 1234 if (overscroll_effect_->OnOverscrolled( | 1237 |
| 1238 if (overscroll_effect_ && |
| 1239 overscroll_effect_->OnOverscrolled( |
| 1235 content_view_core_->GetLayer(), | 1240 content_view_core_->GetLayer(), |
| 1236 base::TimeTicks::Now(), | 1241 base::TimeTicks::Now(), |
| 1237 gfx::ScaleVector2d(params.accumulated_overscroll, | 1242 gfx::ScaleVector2d(params.accumulated_overscroll, |
| 1238 device_scale_factor), | 1243 device_scale_factor), |
| 1239 gfx::ScaleVector2d(params.latest_overscroll_delta, | 1244 gfx::ScaleVector2d(params.latest_overscroll_delta, |
| 1240 device_scale_factor), | 1245 device_scale_factor), |
| 1241 gfx::ScaleVector2d(params.current_fling_velocity, | 1246 gfx::ScaleVector2d(params.current_fling_velocity, |
| 1242 device_scale_factor))) { | 1247 device_scale_factor))) { |
| 1243 SetNeedsAnimate(); | 1248 SetNeedsAnimate(); |
| 1244 } | 1249 } |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1276 AttachLayers(); | 1281 AttachLayers(); |
| 1277 if (content_view_core_ && !using_synchronous_compositor_) { | 1282 if (content_view_core_ && !using_synchronous_compositor_) { |
| 1278 content_view_core_->GetWindowAndroid()->AddObserver(this); | 1283 content_view_core_->GetWindowAndroid()->AddObserver(this); |
| 1279 observing_root_window_ = true; | 1284 observing_root_window_ = true; |
| 1280 if (needs_begin_frame_) | 1285 if (needs_begin_frame_) |
| 1281 content_view_core_->GetWindowAndroid()->RequestVSyncUpdate(); | 1286 content_view_core_->GetWindowAndroid()->RequestVSyncUpdate(); |
| 1282 } | 1287 } |
| 1283 | 1288 |
| 1284 if (resize && content_view_core_) | 1289 if (resize && content_view_core_) |
| 1285 WasResized(); | 1290 WasResized(); |
| 1291 |
| 1292 if (!content_view_core_) { |
| 1293 overscroll_effect_.reset(); |
| 1294 } else if (overscroll_effect_enabled_ && !overscroll_effect_) { |
| 1295 DCHECK(content_view_core_->GetWindowAndroid()->GetCompositor()); |
| 1296 overscroll_effect_ = |
| 1297 OverscrollGlow::Create(&content_view_core_->GetWindowAndroid() |
| 1298 ->GetCompositor() |
| 1299 ->GetSystemUIResourceManager()); |
| 1300 } |
| 1286 } | 1301 } |
| 1287 | 1302 |
| 1288 void RenderWidgetHostViewAndroid::RunAckCallbacks() { | 1303 void RenderWidgetHostViewAndroid::RunAckCallbacks() { |
| 1289 while (!ack_callbacks_.empty()) { | 1304 while (!ack_callbacks_.empty()) { |
| 1290 ack_callbacks_.front().Run(); | 1305 ack_callbacks_.front().Run(); |
| 1291 ack_callbacks_.pop(); | 1306 ack_callbacks_.pop(); |
| 1292 } | 1307 } |
| 1293 } | 1308 } |
| 1294 | 1309 |
| 1295 void RenderWidgetHostViewAndroid::OnGestureEvent( | 1310 void RenderWidgetHostViewAndroid::OnGestureEvent( |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1481 results->orientationAngle = display.RotationAsDegree(); | 1496 results->orientationAngle = display.RotationAsDegree(); |
| 1482 results->orientationType = | 1497 results->orientationType = |
| 1483 RenderWidgetHostViewBase::GetOrientationTypeFromDisplay(display); | 1498 RenderWidgetHostViewBase::GetOrientationTypeFromDisplay(display); |
| 1484 gfx::DeviceDisplayInfo info; | 1499 gfx::DeviceDisplayInfo info; |
| 1485 results->depth = info.GetBitsPerPixel(); | 1500 results->depth = info.GetBitsPerPixel(); |
| 1486 results->depthPerComponent = info.GetBitsPerComponent(); | 1501 results->depthPerComponent = info.GetBitsPerComponent(); |
| 1487 results->isMonochrome = (results->depthPerComponent == 0); | 1502 results->isMonochrome = (results->depthPerComponent == 0); |
| 1488 } | 1503 } |
| 1489 | 1504 |
| 1490 } // namespace content | 1505 } // namespace content |
| OLD | NEW |