| 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/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 if (!return_mailbox.IsZero()) { | 66 if (!return_mailbox.IsZero()) { |
| 67 ack.gl_frame_data->mailbox = return_mailbox; | 67 ack.gl_frame_data->mailbox = return_mailbox; |
| 68 ack.gl_frame_data->size = return_size; | 68 ack.gl_frame_data->size = return_size; |
| 69 ack.gl_frame_data->sync_point = | 69 ack.gl_frame_data->sync_point = |
| 70 ImageTransportFactoryAndroid::GetInstance()->InsertSyncPoint(); | 70 ImageTransportFactoryAndroid::GetInstance()->InsertSyncPoint(); |
| 71 } | 71 } |
| 72 RenderWidgetHostImpl::SendSwapCompositorFrameAck( | 72 RenderWidgetHostImpl::SendSwapCompositorFrameAck( |
| 73 route_id, renderer_host_id, ack); | 73 route_id, renderer_host_id, ack); |
| 74 } | 74 } |
| 75 | 75 |
| 76 // Sends an acknowledgement to the renderer of a processed IME event. |
| 77 void SendAcknowledgeImeEvent(RenderWidgetHostImpl* host) { |
| 78 host->Send(new ViewMsg_AcknowledgeImeEvent(host->GetRoutingID())); |
| 79 } |
| 80 |
| 76 } // anonymous namespace | 81 } // anonymous namespace |
| 77 | 82 |
| 78 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( | 83 RenderWidgetHostViewAndroid::RenderWidgetHostViewAndroid( |
| 79 RenderWidgetHostImpl* widget_host, | 84 RenderWidgetHostImpl* widget_host, |
| 80 ContentViewCoreImpl* content_view_core) | 85 ContentViewCoreImpl* content_view_core) |
| 81 : host_(widget_host), | 86 : host_(widget_host), |
| 82 needs_begin_frame_(false), | 87 needs_begin_frame_(false), |
| 83 are_layers_attached_(true), | 88 are_layers_attached_(true), |
| 84 content_view_core_(NULL), | 89 content_view_core_(NULL), |
| 85 ime_adapter_android_(this), | 90 ime_adapter_android_(this), |
| 91 strict_ime_processing_(false), |
| 86 cached_background_color_(SK_ColorWHITE), | 92 cached_background_color_(SK_ColorWHITE), |
| 87 texture_id_in_layer_(0), | 93 texture_id_in_layer_(0), |
| 88 weak_ptr_factory_(this), | 94 weak_ptr_factory_(this), |
| 89 overscroll_effect_enabled_(true) { | 95 overscroll_effect_enabled_(true) { |
| 90 if (CompositorImpl::UsesDirectGL()) { | 96 if (CompositorImpl::UsesDirectGL()) { |
| 91 surface_texture_transport_.reset(new SurfaceTextureTransportClient()); | 97 surface_texture_transport_.reset(new SurfaceTextureTransportClient()); |
| 92 layer_ = surface_texture_transport_->Initialize(); | 98 layer_ = surface_texture_transport_->Initialize(); |
| 93 layer_->SetIsDrawable(true); | 99 layer_->SetIsDrawable(true); |
| 94 } else { | 100 } else { |
| 95 if (CommandLine::ForCurrentProcess()->HasSwitch( | 101 if (CommandLine::ForCurrentProcess()->HasSwitch( |
| (...skipping 11 matching lines...) Expand all Loading... |
| 107 overscroll_effect_enabled_ = !CommandLine::ForCurrentProcess()-> | 113 overscroll_effect_enabled_ = !CommandLine::ForCurrentProcess()-> |
| 108 HasSwitch(switches::kDisableOverscrollEdgeEffect); | 114 HasSwitch(switches::kDisableOverscrollEdgeEffect); |
| 109 // Don't block the main thread with effect resource loading. | 115 // Don't block the main thread with effect resource loading. |
| 110 // Actual effect creation is deferred until an overscroll event is received. | 116 // Actual effect creation is deferred until an overscroll event is received. |
| 111 if (overscroll_effect_enabled_) { | 117 if (overscroll_effect_enabled_) { |
| 112 base::WorkerPool::PostTask(FROM_HERE, | 118 base::WorkerPool::PostTask(FROM_HERE, |
| 113 base::Bind(&OverscrollGlow::EnsureResources), | 119 base::Bind(&OverscrollGlow::EnsureResources), |
| 114 true); | 120 true); |
| 115 } | 121 } |
| 116 | 122 |
| 123 strict_ime_processing_ = |
| 124 CommandLine::ForCurrentProcess()->HasSwitch( |
| 125 switches::kEnableStrictImeProcessing); |
| 126 |
| 117 host_->SetView(this); | 127 host_->SetView(this); |
| 118 SetContentViewCore(content_view_core); | 128 SetContentViewCore(content_view_core); |
| 119 } | 129 } |
| 120 | 130 |
| 121 RenderWidgetHostViewAndroid::~RenderWidgetHostViewAndroid() { | 131 RenderWidgetHostViewAndroid::~RenderWidgetHostViewAndroid() { |
| 122 SetContentViewCore(NULL); | 132 SetContentViewCore(NULL); |
| 123 DCHECK(ack_callbacks_.empty()); | 133 DCHECK(ack_callbacks_.empty()); |
| 124 if (texture_id_in_layer_) { | 134 if (texture_id_in_layer_) { |
| 125 ImageTransportFactoryAndroid::GetInstance()->DeleteTexture( | 135 ImageTransportFactoryAndroid::GetInstance()->DeleteTexture( |
| 126 texture_id_in_layer_); | 136 texture_id_in_layer_); |
| (...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 383 bool can_compose_inline) { | 393 bool can_compose_inline) { |
| 384 // Unused on Android, which uses OnTextInputChanged instead. | 394 // Unused on Android, which uses OnTextInputChanged instead. |
| 385 } | 395 } |
| 386 | 396 |
| 387 int RenderWidgetHostViewAndroid::GetNativeImeAdapter() { | 397 int RenderWidgetHostViewAndroid::GetNativeImeAdapter() { |
| 388 return reinterpret_cast<int>(&ime_adapter_android_); | 398 return reinterpret_cast<int>(&ime_adapter_android_); |
| 389 } | 399 } |
| 390 | 400 |
| 391 void RenderWidgetHostViewAndroid::OnTextInputStateChanged( | 401 void RenderWidgetHostViewAndroid::OnTextInputStateChanged( |
| 392 const ViewHostMsg_TextInputState_Params& params) { | 402 const ViewHostMsg_TextInputState_Params& params) { |
| 403 if (has_strict_ime_processing()) { |
| 404 // Regardless of how we exit from this method, we must acknowledge that we |
| 405 // processed the input state change. |
| 406 base::ScopedClosureRunner ackCaller( |
| 407 base::Bind(&SendAcknowledgeImeEvent, host_)); |
| 408 } |
| 393 if (!IsShowing()) | 409 if (!IsShowing()) |
| 394 return; | 410 return; |
| 395 | 411 |
| 396 content_view_core_->UpdateImeAdapter( | 412 content_view_core_->UpdateImeAdapter( |
| 397 GetNativeImeAdapter(), | 413 GetNativeImeAdapter(), |
| 398 static_cast<int>(params.type), | 414 static_cast<int>(params.type), |
| 399 params.value, params.selection_start, params.selection_end, | 415 params.value, params.selection_start, params.selection_end, |
| 400 params.composition_start, params.composition_end, | 416 params.composition_start, params.composition_end, |
| 401 params.show_ime_if_needed); | 417 params.show_ime_if_needed); |
| 402 } | 418 } |
| (...skipping 711 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1114 // RenderWidgetHostView, public: | 1130 // RenderWidgetHostView, public: |
| 1115 | 1131 |
| 1116 // static | 1132 // static |
| 1117 RenderWidgetHostView* | 1133 RenderWidgetHostView* |
| 1118 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { | 1134 RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost* widget) { |
| 1119 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); | 1135 RenderWidgetHostImpl* rwhi = RenderWidgetHostImpl::From(widget); |
| 1120 return new RenderWidgetHostViewAndroid(rwhi, NULL); | 1136 return new RenderWidgetHostViewAndroid(rwhi, NULL); |
| 1121 } | 1137 } |
| 1122 | 1138 |
| 1123 } // namespace content | 1139 } // namespace content |
| OLD | NEW |