Chromium Code Reviews| 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 |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..99743a647657b8f095ed61810a339d39f6d29f70 |
| --- /dev/null |
| +++ b/remoting/client/jni/chromoting_jni_instance.cc |
| @@ -0,0 +1,137 @@ |
| +// Copyright 2013 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "remoting/client/jni/chromoting_jni_instance.h" |
| + |
| +#include "base/android/base_jni_registrar.h" |
| +#include "base/android/jni_android.h" |
| +#include "base/bind.h" |
| +#include "base/bind_helpers.h" |
| +#include "base/logging.h" |
| +#include "base/memory/singleton.h" |
| +#include "net/android/net_jni_registrar.h" |
| +#include "remoting/base/url_request_context.h" |
| + |
| +namespace remoting { |
| + |
| +ChromotingJNIInstance* ChromotingJNIInstance::GetInstance() { |
| + return Singleton<ChromotingJNIInstance>::get(); |
| +} |
| + |
| +// For now, this just gives us access to the strings supplied from Java. |
|
Wez
2013/07/11 00:56:23
Remove this comment; it should be clear from the N
solb
2013/07/11 04:29:05
Done.
|
| +void ChromotingJNIInstance::ConnectToHost(jstring username, |
| + jstring auth_token, |
| + jstring host_jid, |
| + jstring host_id, |
| + jstring host_pubkey) { |
| + JNIEnv* env = base::android::AttachCurrentThread(); |
| + |
| + username_jstr_ = static_cast<jstring>(env->NewGlobalRef(username)); |
| + auth_token_jstr_ = static_cast<jstring>(env->NewGlobalRef(auth_token)); |
| + host_jid_jstr_ = static_cast<jstring>(env->NewGlobalRef(host_jid)); |
| + host_id_jstr_ = static_cast<jstring>(env->NewGlobalRef(host_id)); |
| + host_pubkey_jstr_ = static_cast<jstring>(env->NewGlobalRef(host_pubkey)); |
| + |
| + username_cstr_ = env->GetStringUTFChars(username_jstr_, NULL); |
| + auth_token_cstr_ = env->GetStringUTFChars(auth_token_jstr_, NULL); |
| + host_jid_cstr_ = env->GetStringUTFChars(host_jid_jstr_, NULL); |
| + host_id_cstr_ = env->GetStringUTFChars(host_id_jstr_, NULL); |
| + host_pubkey_cstr_ = env->GetStringUTFChars(host_pubkey_jstr_, NULL); |
| + |
| + // TODO(solb) Initiate connection from here. |
|
Wez
2013/07/11 00:56:23
NOTIMPLEMENTED() here.
solb
2013/07/11 04:29:05
Done.
|
| +} |
| + |
| +// For the moment, this only releases the Java string references. |
| +void ChromotingJNIInstance::DisconnectFromHost() { |
| + JNIEnv* env = base::android::AttachCurrentThread(); |
| + |
| + env->ReleaseStringUTFChars(username_jstr_, username_cstr_); |
| + env->ReleaseStringUTFChars(auth_token_jstr_, auth_token_cstr_); |
| + env->ReleaseStringUTFChars(host_jid_jstr_, host_jid_cstr_); |
| + env->ReleaseStringUTFChars(host_id_jstr_, host_id_cstr_); |
| + env->ReleaseStringUTFChars(host_pubkey_jstr_, host_pubkey_cstr_); |
| + |
| + username_cstr_ = NULL; |
| + auth_token_cstr_ = NULL; |
| + host_jid_cstr_ = NULL; |
| + host_id_cstr_ = NULL; |
| + host_pubkey_cstr_ = NULL; |
| + |
| + env->DeleteGlobalRef(username_jstr_); |
| + env->DeleteGlobalRef(auth_token_jstr_); |
| + env->DeleteGlobalRef(host_jid_jstr_); |
| + env->DeleteGlobalRef(host_id_jstr_); |
| + env->DeleteGlobalRef(host_pubkey_jstr_); |
| +} |
| + |
| +void ChromotingJNIInstance::OnConnectionState( |
| + protocol::ConnectionToHost::State state, |
| + protocol::ErrorCode error) {} |
|
Wez
2013/07/11 00:56:23
nit: This is a multi-line definition, so braces go
solb
2013/07/11 04:29:05
Done.
|
| + |
| +void ChromotingJNIInstance::OnConnectionReady(bool ready) {} |
|
Wez
2013/07/11 00:56:23
Why are this and the next three methods not NOTIMP
solb
2013/07/11 04:29:05
Although I am required (by ClientUserInterface's c
|
| + |
| +void ChromotingJNIInstance::SetCapabilities(const std::string& capabilities) {} |
| + |
| +void ChromotingJNIInstance::SetPairingResponse( |
| + const protocol::PairingResponse& response) {} |
|
Wez
2013/07/11 00:56:23
nit: See above re braces
solb
2013/07/11 04:29:05
Done.
|
| + |
| +protocol::ClipboardStub* ChromotingJNIInstance::GetClipboardStub() { |
| + NOTIMPLEMENTED(); |
| + return NULL; |
| +} |
| + |
| +protocol::CursorShapeStub* ChromotingJNIInstance::GetCursorShapeStub() { |
| + NOTIMPLEMENTED(); |
| + return NULL; |
| +} |
| + |
| +// We don't use NOTIMPLEMENTED() here because NegotiatingClientAuthenticator |
| +// calls this even if it doesn't use the configuration method, and we don't |
| +// want to print an error on every run. |
|
Wez
2013/07/11 00:56:23
This doesn't make sense - if it's going to be impl
solb
2013/07/11 04:29:05
Done (for the latter case). Since scoped_ptr has n
|
| +scoped_ptr<protocol::ThirdPartyClientAuthenticator::TokenFetcher> |
| + ChromotingJNIInstance::GetTokenFetcher(const std::string& host_public_key) { |
| + LOG(INFO) << "ChromotingJNIInstance::GetTokenFetcher(...) [unimplemented]"; |
| + return scoped_ptr<protocol::ThirdPartyClientAuthenticator::TokenFetcher>(); |
| +} |
| + |
| +// This currently only spins up the threads. |
| +ChromotingJNIInstance::ChromotingJNIInstance() |
| + : username_cstr_(NULL), |
| + auth_token_cstr_(NULL), |
| + host_jid_cstr_(NULL), |
| + host_id_cstr_(NULL), |
| + host_pubkey_cstr_(NULL), |
| + pin_cstr_(NULL) { |
| + JNIEnv* env = base::android::AttachCurrentThread(); |
| + |
| + collector_.reset(new base::AtExitManager()); |
| + base::android::RegisterJni(env); |
| + net::android::RegisterJni(env); |
|
Wez
2013/07/11 00:56:23
nit: Comment before this blobk to explain why we n
solb
2013/07/11 04:29:05
Done.
|
| + |
| + LOG(INFO) << "starting main message loop"; |
|
Wez
2013/07/11 00:56:23
nit: Capital at beginning of sentence, please.
solb
2013/07/11 04:29:05
Done.
|
| + ui_loop_.reset(new base::MessageLoopForUI()); |
| + ui_loop_->Start(); |
|
Wez
2013/07/11 00:56:23
Add a comment to explain this, since it differs fr
solb
2013/07/11 04:29:05
Done.
|
| + |
| + LOG(INFO) << "spawning additional threads"; |
| + ui_runner_ = new AutoThreadTaskRunner(ui_loop_->message_loop_proxy(), |
| + base::MessageLoop::QuitClosure()); |
| + net_runner_ = AutoThread::CreateWithType("native_net", |
| + ui_runner_, |
| + base::MessageLoop::TYPE_IO); |
| + disp_runner_ = AutoThread::CreateWithType("native_disp", |
| + ui_runner_, |
| + base::MessageLoop::TYPE_DEFAULT); |
| + |
| + url_requester_ = new URLRequestContextGetter(ui_runner_, net_runner_); |
| + |
| + class_ = static_cast<jclass>(env->NewGlobalRef(env->FindClass(JAVA_CLASS))); |
| +} |
| + |
| +ChromotingJNIInstance::~ChromotingJNIInstance() { |
| + JNIEnv* env = base::android::AttachCurrentThread(); |
| + env->DeleteGlobalRef(class_); |
| + // TODO(solb) detach all threads from JVM |
|
Wez
2013/07/11 00:56:23
Why not just add the detaching here in this CL?
solb
2013/07/11 04:29:05
I just don't have an implementation ready at this
|
| +} |
| + |
| +} // namespace remoting |