| Index: remoting/client/jni/chromoting_jni_instance.cc
|
| diff --git a/remoting/client/jni/chromoting_jni_instance.cc b/remoting/client/jni/chromoting_jni_instance.cc
|
| index dc5c4d725040980f9d8f3f7a536d1c11fc12b8b2..9c0fae7eb0872fd730e9d6d267a85d6e8d76dd6d 100644
|
| --- a/remoting/client/jni/chromoting_jni_instance.cc
|
| +++ b/remoting/client/jni/chromoting_jni_instance.cc
|
| @@ -15,6 +15,7 @@
|
| #include "remoting/client/client_status_logger.h"
|
| #include "remoting/client/jni/android_keymap.h"
|
| #include "remoting/client/jni/chromoting_jni_runtime.h"
|
| +#include "remoting/client/jni/jni_frame_consumer.h"
|
| #include "remoting/client/software_video_renderer.h"
|
| #include "remoting/client/token_fetcher_proxy.h"
|
| #include "remoting/protocol/chromium_port_allocator.h"
|
| @@ -85,10 +86,9 @@ ChromotingJniInstance::ChromotingJniInstance(ChromotingJniRuntime* jni_runtime,
|
| token_fetcher.Pass(), auth_methods));
|
|
|
| // Post a task to start connection
|
| - jni_runtime_->display_task_runner()->PostTask(
|
| + jni_runtime_->network_task_runner()->PostTask(
|
| FROM_HERE,
|
| - base::Bind(&ChromotingJniInstance::ConnectToHostOnDisplayThread,
|
| - this));
|
| + base::Bind(&ChromotingJniInstance::ConnectToHostOnNetworkThread, this));
|
| }
|
|
|
| ChromotingJniInstance::~ChromotingJniInstance() {
|
| @@ -105,23 +105,25 @@ ChromotingJniInstance::~ChromotingJniInstance() {
|
| }
|
|
|
| void ChromotingJniInstance::Disconnect() {
|
| - if (!jni_runtime_->display_task_runner()->BelongsToCurrentThread()) {
|
| - jni_runtime_->display_task_runner()->PostTask(
|
| + if (!jni_runtime_->network_task_runner()->BelongsToCurrentThread()) {
|
| + jni_runtime_->network_task_runner()->PostTask(
|
| FROM_HERE,
|
| base::Bind(&ChromotingJniInstance::Disconnect, this));
|
| return;
|
| }
|
|
|
| - // This must be destroyed on the display thread before the producer is gone.
|
| - view_.reset();
|
| + host_id_.clear();
|
|
|
| - // The weak pointers must be invalidated on the same thread they were used.
|
| - view_weak_factory_->InvalidateWeakPtrs();
|
| + stats_logging_enabled_ = false;
|
|
|
| - jni_runtime_->network_task_runner()->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&ChromotingJniInstance::DisconnectFromHostOnNetworkThread,
|
| - this));
|
| + // |client_| must be torn down before |signaling_|.
|
| + client_.reset();
|
| + client_status_logger_.reset();
|
| + video_renderer_.reset();
|
| + view_.reset();
|
| + authenticator_.reset();
|
| + signaling_.reset();
|
| + client_context_.reset();
|
| }
|
|
|
| void ChromotingJniInstance::FetchThirdPartyToken(
|
| @@ -381,36 +383,17 @@ void ChromotingJniInstance::SetCursorShape(
|
| jni_runtime_->UpdateCursorShape(shape);
|
| }
|
|
|
| -void ChromotingJniInstance::ConnectToHostOnDisplayThread() {
|
| - DCHECK(jni_runtime_->display_task_runner()->BelongsToCurrentThread());
|
| -
|
| - view_.reset(new JniFrameConsumer(jni_runtime_, this));
|
| - view_weak_factory_.reset(new base::WeakPtrFactory<JniFrameConsumer>(
|
| - view_.get()));
|
| - scoped_ptr<FrameConsumerProxy> frame_consumer =
|
| - make_scoped_ptr(new FrameConsumerProxy(view_weak_factory_->GetWeakPtr()));
|
| -
|
| - jni_runtime_->network_task_runner()->PostTask(
|
| - FROM_HERE,
|
| - base::Bind(&ChromotingJniInstance::ConnectToHostOnNetworkThread, this,
|
| - base::Passed(&frame_consumer)));
|
| -}
|
| -
|
| -void ChromotingJniInstance::ConnectToHostOnNetworkThread(
|
| - scoped_ptr<FrameConsumerProxy> frame_consumer) {
|
| +void ChromotingJniInstance::ConnectToHostOnNetworkThread() {
|
| DCHECK(jni_runtime_->network_task_runner()->BelongsToCurrentThread());
|
| - DCHECK(frame_consumer);
|
|
|
| jingle_glue::JingleThreadWrapper::EnsureForCurrentMessageLoop();
|
|
|
| client_context_.reset(new ClientContext(jni_runtime_->network_task_runner()));
|
| client_context_->Start();
|
|
|
| - SoftwareVideoRenderer* renderer = new SoftwareVideoRenderer(
|
| - client_context_->main_task_runner(),
|
| - client_context_->decode_task_runner(), frame_consumer.Pass());
|
| - view_->set_frame_producer(renderer);
|
| - video_renderer_.reset(renderer);
|
| + view_.reset(new JniFrameConsumer(jni_runtime_));
|
| + video_renderer_.reset(new SoftwareVideoRenderer(
|
| + client_context_->decode_task_runner(), view_.get()));
|
|
|
| client_.reset(new ChromotingClient(
|
| client_context_.get(), this, video_renderer_.get(), nullptr));
|
| @@ -441,22 +424,6 @@ void ChromotingJniInstance::ConnectToHostOnNetworkThread(
|
| transport_factory.Pass(), host_jid_, capabilities_);
|
| }
|
|
|
| -void ChromotingJniInstance::DisconnectFromHostOnNetworkThread() {
|
| - DCHECK(jni_runtime_->network_task_runner()->BelongsToCurrentThread());
|
| -
|
| - host_id_.clear();
|
| -
|
| - stats_logging_enabled_ = false;
|
| -
|
| - // |client_| must be torn down before |signaling_|.
|
| - client_.reset();
|
| - client_status_logger_.reset();
|
| - video_renderer_.reset();
|
| - authenticator_.reset();
|
| - signaling_.reset();
|
| - client_context_.reset();
|
| -}
|
| -
|
| void ChromotingJniInstance::FetchSecret(
|
| bool pairable,
|
| const protocol::SecretFetchedCallback& callback) {
|
| @@ -494,7 +461,6 @@ void ChromotingJniInstance::SendKeyEventInternal(int usb_key_code,
|
| return;
|
| }
|
|
|
| -
|
| protocol::KeyEvent event;
|
| event.set_usb_keycode(usb_key_code);
|
| event.set_pressed(key_down);
|
|
|