Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(70)

Unified Diff: google_apis/gcm/gcm_client_impl_android.cc

Issue 246863004: WIP initial sketch for an Android GCMClient (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « google_apis/gcm/gcm_client_impl_android.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: google_apis/gcm/gcm_client_impl_android.cc
diff --git a/google_apis/gcm/gcm_client_impl_android.cc b/google_apis/gcm/gcm_client_impl_android.cc
new file mode 100644
index 0000000000000000000000000000000000000000..1ac11d0e1ffc40290de3519381bc4749709e9bd2
--- /dev/null
+++ b/google_apis/gcm/gcm_client_impl_android.cc
@@ -0,0 +1,174 @@
+// Copyright 2014 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 "google_apis/gcm/gcm_client_impl_android.h"
+
+#include "base/memory/scoped_ptr.h"
+
+namespace gcm {
+
+namespace {
+
+GCMClientImplAndroid::GCMClientImplAndroid()
+ : state_(UNINITIALIZED),
+ delegate_(NULL) {
+}
+
+GCMClientImplAndroid::~GCMClientImplAndroid() {
+}
+
+void GCMClientImplAndroid::Initialize(
+ const checkin_proto::ChromeBuildProto& unused,
+ const base::FilePath& unused,
+ const std::vector<std::string>& unused,
+ const scoped_refptr<base::SequencedTaskRunner>& unused,
+ const scoped_refptr<net::URLRequestContextGetter>& unused,
+ Delegate* delegate) {
+ DCHECK_EQ(UNINITIALIZED, state_);
+ DCHECK(delegate);
+
+ // TODO(johnme): Initialize JNI counterpart.
+
+ delegate_ = delegate;
+ state_ = INITIALIZED;
+}
+
+void GCMClientImplAndroid::Load() {
+ DCHECK_EQ(INITIALIZED, state_);
+
+ // Do nothing. Android GCM API doesn't require loading in advance.
+
+ state_ = READY;
+}
+
+void GCMClientImplAndroid::Stop() {
+ // Do nothing?
+
+ if (state_ == READY)
+ state_ = INITIALIZED;
+}
+
+void GCMClientImplAndroid::CheckOut() {
+ Stop();
+ // TODO(johnme): What would this map to on Android? Is it even possible?
+ NOTIMPLEMENTED();
+}
+
+void GCMClientImplAndroid::Register(const std::string& app_id,
+ const std::vector<std::string>& sender_ids) {
+ DCHECK_EQ(INITIALIZED, state_);
+
+ // TODO(johnme): Tell JNI counterpart to register.
+}
+
+void GCMClientImplAndroid::OnRegisterCompleted(JNIEnv* env,
+ jobject obj,
+ jstring j_app_id,
+ jboolean success,
+ jstring j_registration_id) {
+ DCHECK(delegate_);
+
+ std::string app_id = ConvertJavaStringToUTF8(env, j_app_id);
+ Result result = success ? SUCCESS : UNKNOWN_ERROR;
+ std::string registration_id = ConvertJavaStringToUTF8(env, j_registration_id);
+
+ delegate_->OnRegisterFinished(
+ app_id, result == SUCCESS ? registration_id : std::string(), result);
+}
+
+void GCMClientImplAndroid::Unregister(const std::string& app_id) {
+ DCHECK_EQ(INITIALIZED, state_);
+
+ // TODO(johnme): Tell JNI counterpart to unregister.
+}
+
+void GCMClientImplAndroid::OnUnregisterCompleted(JNIEnv* env,
+ jobject obj,
+ jstring j_app_id,
+ jboolean success) {
+ DCHECK(delegate_);
+ std::string app_id = ConvertJavaStringToUTF8(env, j_app_id);
+ DVLOG(1) << "Unregister completed for app: " << app_id
+ << " with " << (success ? "success." : "failure.");
+ delegate_->OnUnregisterFinished(app_id, success ? SUCCESS : SERVER_ERROR);
+}
+
+
+
+ void OnRegisterCompleted(JNIEnv* env,
+ jobject obj,
+ jstring app_id,
+ jobjectArray sender_ids,
+ jboolean success,
+ jstring registration_id);
+ void OnUnregisterCompleted(JNIEnv* env,
+ jobject obj,
+ jstring app_id,
+ jboolean success);
+
+
+
+void GCMClientImplAndroid::Send(const std::string& app_id,
+ const std::string& receiver_id,
+ const OutgoingMessage& message) {
+ DCHECK(initialized_);
+
+ NOTIMPLEMENTED() << "Send is not currently implemented on Android, as it is "
+ << "only used by Chrome Apps & Extensions."
+}
+
+std::string GCMClientImplAndroid::GetStateString() const {
+ switch(state_) {
+ case GCMClientImpl::INITIALIZED:
+ return "INITIALIZED";
+ case GCMClientImpl::UNINITIALIZED:
+ return "UNINITIALIZED";
+ case GCMClientImpl::READY:
+ return "READY";
+ default:
+ NOTREACHED();
+ return std::string();
+ }
+}
+
+GCMClient::GCMStatistics GCMClientImplAndroid::GetStatistics() const {
+ GCMClient::GCMStatistics stats;
+ stats.gcm_client_state = GCMClientImplAndroid::GetStateString();
+ return stats;
+}
+
+void GCMClientImplAndroid::OnMessageReceived(JNIEnv* env,
+ jobject obj,
+ jstring j_sender_id,
+ jstring j_app_id,
+ jstring j_collapse_key,
+ jobjectArray j_data) {
+ DCHECK(delegate_);
+
+ std::string sender_id = ConvertJavaStringToUTF8(env, j_sender_id);
+ std::string app_id = ConvertJavaStringToUTF8(env, j_app_id);
+ std::string collapse_key = ConvertJavaStringToUTF8(env, j_collapse_key);
+ MessageData message_data; // TODO(johnme): Convert j_data from JNI format.
+
+ // TODO(johnme): Drop the message when the app is not registered for the
+ // sender of the message?
+
+ IncomingMessage incoming_message;
+ incoming_message.sender_id = sender_id;
+ incoming_message.collapse_key = collapse_key;
+ incoming_message.data = message_data;
+ delegate_->OnMessageReceived(app_id, incoming_message);
+}
+
+void GCMClientImplAndroid::OnMessagesDeletedByServer(JNIEnv* env,
+ jobject obj,
+ jstring j_app_id) {
+ DCHECK(delegate_);
+
+ std::string app_id = ConvertJavaStringToUTF8(env, j_app_id);
+
+ delegate_->OnMessagesDeleted(app_id);
+}
+
+} // namespace gcm
« no previous file with comments | « google_apis/gcm/gcm_client_impl_android.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698