| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "components/gcm_driver/gcm_driver_android.h" | 5 #include "components/gcm_driver/gcm_driver_android.h" |
| 6 | 6 |
| 7 #include "base/android/jni_android.h" |
| 8 #include "base/android/jni_array.h" |
| 9 #include "base/android/jni_string.h" |
| 7 #include "base/compiler_specific.h" | 10 #include "base/compiler_specific.h" |
| 8 #include "base/logging.h" | 11 #include "base/logging.h" |
| 12 #include "jni/GCMDriver_jni.h" |
| 9 | 13 |
| 10 namespace gcm { | 14 using base::android::AppendJavaStringArrayToStringVector; |
| 11 static void Java_GCMDriver_doNothing(JNIEnv* env) ALLOW_UNUSED; | 15 using base::android::AttachCurrentThread; |
| 12 } // namespace gcm | 16 using base::android::ConvertJavaStringToUTF8; |
| 13 | 17 using base::android::ConvertUTF8ToJavaString; |
| 14 // Must come after the ALLOW_UNUSED declaration. | 18 using base::android::ToJavaArrayOfStrings; |
| 15 #include "jni/GCMDriver_jni.h" | |
| 16 | 19 |
| 17 namespace gcm { | 20 namespace gcm { |
| 18 | 21 |
| 19 GCMDriverAndroid::GCMDriverAndroid() { | 22 GCMDriverAndroid::GCMDriverAndroid() { |
| 23 JNIEnv* env = AttachCurrentThread(); |
| 24 java_ref_.Reset( |
| 25 Java_GCMDriver_create(env, |
| 26 reinterpret_cast<intptr_t>(this), |
| 27 base::android::GetApplicationContext())); |
| 20 } | 28 } |
| 21 | 29 |
| 22 GCMDriverAndroid::~GCMDriverAndroid() { | 30 GCMDriverAndroid::~GCMDriverAndroid() { |
| 31 JNIEnv* env = AttachCurrentThread(); |
| 32 Java_GCMDriver_destroy(env, java_ref_.obj()); |
| 23 } | 33 } |
| 24 | 34 |
| 25 void GCMDriverAndroid::Enable() { | 35 void GCMDriverAndroid::Enable() { |
| 26 } | 36 } |
| 27 | 37 |
| 28 void GCMDriverAndroid::Disable() { | 38 void GCMDriverAndroid::Disable() { |
| 29 } | 39 } |
| 30 | 40 |
| 31 void GCMDriverAndroid::Register(const std::string& app_id, | 41 void GCMDriverAndroid::Register(const std::string& app_id, |
| 32 const std::vector<std::string>& sender_ids, | 42 const std::vector<std::string>& sender_ids, |
| 33 const RegisterCallback& callback) { | 43 const RegisterCallback& callback) { |
| 34 // TODO(johnme): Hook up to Android GCM API via JNI. | 44 // TODO(johnme): Store callback. |
| 35 NOTIMPLEMENTED(); | 45 |
| 46 JNIEnv* env = AttachCurrentThread(); |
| 47 Java_GCMDriver_register( |
| 48 env, java_ref_.obj(), |
| 49 ConvertUTF8ToJavaString(env, app_id).Release(), |
| 50 ToJavaArrayOfStrings(env, sender_ids).obj()); |
| 36 } | 51 } |
| 37 | 52 |
| 38 void GCMDriverAndroid::Unregister(const std::string& app_id, | 53 void GCMDriverAndroid::Unregister(const std::string& app_id, |
| 39 const UnregisterCallback& callback) { | 54 const UnregisterCallback& callback) { |
| 40 // TODO(johnme): Hook up to Android GCM API via JNI. | 55 // TODO(johnme): Store callback. |
| 41 NOTIMPLEMENTED(); | 56 |
| 57 JNIEnv* env = AttachCurrentThread(); |
| 58 Java_GCMDriver_unregister( |
| 59 env, java_ref_.obj(), |
| 60 ConvertUTF8ToJavaString(env, app_id).Release()); |
| 42 } | 61 } |
| 43 | 62 |
| 44 void GCMDriverAndroid::Send(const std::string& app_id, | 63 void GCMDriverAndroid::Send(const std::string& app_id, |
| 45 const std::string& receiver_id, | 64 const std::string& receiver_id, |
| 46 const GCMClient::OutgoingMessage& message, | 65 const GCMClient::OutgoingMessage& message, |
| 47 const SendCallback& callback) { | 66 const SendCallback& callback) { |
| 48 NOTIMPLEMENTED(); | 67 NOTIMPLEMENTED(); |
| 49 } | 68 } |
| 50 | 69 |
| 51 GCMClient* GCMDriverAndroid::GetGCMClientForTesting() const { | 70 GCMClient* GCMDriverAndroid::GetGCMClientForTesting() const { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 69 | 88 |
| 70 void GCMDriverAndroid::SetGCMRecording(const GetGCMStatisticsCallback& callback, | 89 void GCMDriverAndroid::SetGCMRecording(const GetGCMStatisticsCallback& callback, |
| 71 bool recording) { | 90 bool recording) { |
| 72 NOTIMPLEMENTED(); | 91 NOTIMPLEMENTED(); |
| 73 } | 92 } |
| 74 | 93 |
| 75 std::string GCMDriverAndroid::SignedInUserName() const { | 94 std::string GCMDriverAndroid::SignedInUserName() const { |
| 76 return std::string(); | 95 return std::string(); |
| 77 } | 96 } |
| 78 | 97 |
| 98 void GCMDriverAndroid::OnRegisterFinished(JNIEnv* env, |
| 99 jobject obj, |
| 100 jstring j_app_id, |
| 101 jstring j_registration_id, |
| 102 jboolean success) { |
| 103 std::string app_id = ConvertJavaStringToUTF8(env, j_app_id); |
| 104 std::string registration_id = ConvertJavaStringToUTF8(env, j_registration_id); |
| 105 GCMClient::Result result ALLOW_UNUSED = success ? GCMClient::SUCCESS |
| 106 : GCMClient::UNKNOWN_ERROR; |
| 107 |
| 108 NOTIMPLEMENTED(); // TODO(johnme): Fire callback. |
| 109 } |
| 110 |
| 111 void GCMDriverAndroid::OnUnregisterFinished(JNIEnv* env, |
| 112 jobject obj, |
| 113 jstring j_app_id, |
| 114 jboolean success) { |
| 115 std::string app_id = ConvertJavaStringToUTF8(env, j_app_id); |
| 116 GCMClient::Result result ALLOW_UNUSED = success ? GCMClient::SUCCESS |
| 117 : GCMClient::UNKNOWN_ERROR; |
| 118 |
| 119 NOTIMPLEMENTED(); // TODO(johnme): Fire callback. |
| 120 } |
| 121 |
| 122 void GCMDriverAndroid::OnMessageReceived(JNIEnv* env, |
| 123 jobject obj, |
| 124 jstring j_app_id, |
| 125 jstring j_sender_id, |
| 126 jstring j_collapse_key, |
| 127 jobjectArray j_data_keys_and_values) { |
| 128 std::string app_id = ConvertJavaStringToUTF8(env, j_app_id); |
| 129 GCMClient::IncomingMessage message; |
| 130 message.sender_id = ConvertJavaStringToUTF8(env, j_sender_id); |
| 131 message.collapse_key = ConvertJavaStringToUTF8(env, j_collapse_key); |
| 132 // Expand j_data_keys_and_values from array to map. |
| 133 std::vector<std::string> data_keys_and_values; |
| 134 AppendJavaStringArrayToStringVector(env, |
| 135 j_data_keys_and_values, |
| 136 &data_keys_and_values); |
| 137 for (size_t i = 0; i + 1 < data_keys_and_values.size(); i += 2) { |
| 138 message.data[data_keys_and_values[i]] = data_keys_and_values[i+1]; |
| 139 } |
| 140 |
| 141 NOTIMPLEMENTED(); // TODO(johnme): Notify app handler. |
| 142 } |
| 143 |
| 144 void GCMDriverAndroid::OnMessagesDeletedByServer(JNIEnv* env, |
| 145 jobject obj, |
| 146 jstring j_app_id) { |
| 147 std::string app_id = ConvertJavaStringToUTF8(env, j_app_id); |
| 148 |
| 149 NOTIMPLEMENTED(); // TODO(johnme): Notify app handler. |
| 150 } |
| 151 |
| 79 // static | 152 // static |
| 80 bool GCMDriverAndroid::RegisterBindings(JNIEnv* env) { | 153 bool GCMDriverAndroid::RegisterBindings(JNIEnv* env) { |
| 81 return RegisterNativesImpl(env); | 154 return RegisterNativesImpl(env); |
| 82 } | 155 } |
| 83 | 156 |
| 84 } // namespace gcm | 157 } // namespace gcm |
| OLD | NEW |