| OLD | NEW |
| (Empty) |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "blimp/client/app/android/blimp_client_session_android.h" | |
| 6 | |
| 7 #include <string> | |
| 8 | |
| 9 #include "base/android/jni_string.h" | |
| 10 #include "base/android/scoped_java_ref.h" | |
| 11 #include "base/threading/thread_task_runner_handle.h" | |
| 12 #include "blimp/client/core/contents/tab_control_feature.h" | |
| 13 #include "blimp/client/core/session/assignment_source.h" | |
| 14 #include "blimp/client/core/settings/settings_feature.h" | |
| 15 #include "blimp/net/blimp_stats.h" | |
| 16 #include "components/version_info/version_info.h" | |
| 17 #include "jni/BlimpClientSession_jni.h" | |
| 18 #include "net/base/net_errors.h" | |
| 19 #include "ui/android/window_android.h" | |
| 20 | |
| 21 namespace blimp { | |
| 22 namespace client { | |
| 23 namespace { | |
| 24 const int kDummyTabId = 0; | |
| 25 | |
| 26 GURL CreateAssignerGURL(const std::string& assigner_url) { | |
| 27 GURL parsed_url(assigner_url); | |
| 28 CHECK(parsed_url.is_valid()); | |
| 29 return parsed_url; | |
| 30 } | |
| 31 | |
| 32 } // namespace | |
| 33 | |
| 34 static jlong Init(JNIEnv* env, | |
| 35 const base::android::JavaParamRef<jobject>& jobj, | |
| 36 const base::android::JavaParamRef<jstring>& jassigner_url, | |
| 37 jlong window_android_ptr) { | |
| 38 return reinterpret_cast<intptr_t>(new BlimpClientSessionAndroid( | |
| 39 env, jobj, jassigner_url, window_android_ptr)); | |
| 40 } | |
| 41 | |
| 42 // static | |
| 43 bool BlimpClientSessionAndroid::RegisterJni(JNIEnv* env) { | |
| 44 return RegisterNativesImpl(env); | |
| 45 } | |
| 46 | |
| 47 // static | |
| 48 BlimpClientSessionAndroid* BlimpClientSessionAndroid::FromJavaObject( | |
| 49 JNIEnv* env, | |
| 50 const base::android::JavaRef<jobject>& jobj) { | |
| 51 return reinterpret_cast<BlimpClientSessionAndroid*>( | |
| 52 Java_BlimpClientSession_getNativePtr(env, jobj)); | |
| 53 } | |
| 54 | |
| 55 BlimpClientSessionAndroid::BlimpClientSessionAndroid( | |
| 56 JNIEnv* env, | |
| 57 const base::android::JavaParamRef<jobject>& jobj, | |
| 58 const base::android::JavaParamRef<jstring>& jassigner_url, | |
| 59 jlong window_android_ptr) | |
| 60 : BlimpClientSession(CreateAssignerGURL( | |
| 61 base::android::ConvertJavaStringToUTF8(jassigner_url))) { | |
| 62 java_obj_.Reset(env, jobj); | |
| 63 | |
| 64 ui::WindowAndroid* window = | |
| 65 reinterpret_cast<ui::WindowAndroid*>(window_android_ptr); | |
| 66 ime_dialog_.reset(new ImeHelperDialog(window)); | |
| 67 GetImeFeature()->set_delegate(ime_dialog_.get()); | |
| 68 | |
| 69 // Create a single tab's WebContents. | |
| 70 // TODO(kmarshall): Remove this once we add tab-literacy to Blimp. | |
| 71 GetTabControlFeature()->CreateTab(kDummyTabId); | |
| 72 } | |
| 73 | |
| 74 void BlimpClientSessionAndroid::Connect( | |
| 75 JNIEnv* env, | |
| 76 const base::android::JavaParamRef<jobject>& jobj, | |
| 77 const base::android::JavaParamRef<jstring>& jclient_auth_token) { | |
| 78 std::string client_auth_token; | |
| 79 if (jclient_auth_token.obj()) { | |
| 80 client_auth_token = | |
| 81 base::android::ConvertJavaStringToUTF8(env, jclient_auth_token); | |
| 82 } | |
| 83 | |
| 84 BlimpClientSession::Connect(client_auth_token); | |
| 85 } | |
| 86 | |
| 87 BlimpClientSessionAndroid::~BlimpClientSessionAndroid() { | |
| 88 GetImeFeature()->set_delegate(nullptr); | |
| 89 } | |
| 90 | |
| 91 void BlimpClientSessionAndroid::OnConnected() { | |
| 92 JNIEnv* env = base::android::AttachCurrentThread(); | |
| 93 Java_BlimpClientSession_onConnected(env, java_obj_); | |
| 94 } | |
| 95 | |
| 96 void BlimpClientSessionAndroid::OnDisconnected(int result) { | |
| 97 JNIEnv* env = base::android::AttachCurrentThread(); | |
| 98 Java_BlimpClientSession_onDisconnected( | |
| 99 env, java_obj_, base::android::ConvertUTF8ToJavaString( | |
| 100 env, net::ErrorToShortString(result))); | |
| 101 } | |
| 102 | |
| 103 void BlimpClientSessionAndroid::Destroy( | |
| 104 JNIEnv* env, | |
| 105 const base::android::JavaParamRef<jobject>& jobj) { | |
| 106 delete this; | |
| 107 } | |
| 108 | |
| 109 void BlimpClientSessionAndroid::OnAssignmentConnectionAttempted( | |
| 110 AssignmentRequestResult result, | |
| 111 const Assignment& assignment) { | |
| 112 // Notify the front end of the assignment result. | |
| 113 std::string engine_ip = IPAddressToStringWithPort( | |
| 114 assignment.engine_endpoint.address(), assignment.engine_endpoint.port()); | |
| 115 JNIEnv* env = base::android::AttachCurrentThread(); | |
| 116 Java_BlimpClientSession_onAssignmentReceived( | |
| 117 env, java_obj_, static_cast<jint>(result), | |
| 118 base::android::ConvertUTF8ToJavaString(env, engine_ip), | |
| 119 base::android::ConvertUTF8ToJavaString(env, | |
| 120 version_info::GetVersionNumber())); | |
| 121 | |
| 122 BlimpClientSession::OnAssignmentConnectionAttempted(result, assignment); | |
| 123 } | |
| 124 | |
| 125 base::android::ScopedJavaLocalRef<jintArray> | |
| 126 BlimpClientSessionAndroid::GetDebugInfo( | |
| 127 JNIEnv* env, | |
| 128 const base::android::JavaParamRef<jobject>& jobj) { | |
| 129 BlimpStats* stats = BlimpStats::GetInstance(); | |
| 130 int metrics[] = {stats->Get(BlimpStats::BYTES_RECEIVED), | |
| 131 stats->Get(BlimpStats::BYTES_SENT), | |
| 132 stats->Get(BlimpStats::COMMIT)}; | |
| 133 return base::android::ToJavaIntArray(env, metrics, arraysize(metrics)); | |
| 134 } | |
| 135 | |
| 136 } // namespace client | |
| 137 } // namespace blimp | |
| OLD | NEW |