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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « google_apis/gcm/gcm_client_impl_android.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "google_apis/gcm/gcm_client_impl_android.h"
6
7 #include "base/memory/scoped_ptr.h"
8
9 namespace gcm {
10
11 namespace {
12
13 GCMClientImplAndroid::GCMClientImplAndroid()
14 : state_(UNINITIALIZED),
15 delegate_(NULL) {
16 }
17
18 GCMClientImplAndroid::~GCMClientImplAndroid() {
19 }
20
21 void GCMClientImplAndroid::Initialize(
22 const checkin_proto::ChromeBuildProto& unused,
23 const base::FilePath& unused,
24 const std::vector<std::string>& unused,
25 const scoped_refptr<base::SequencedTaskRunner>& unused,
26 const scoped_refptr<net::URLRequestContextGetter>& unused,
27 Delegate* delegate) {
28 DCHECK_EQ(UNINITIALIZED, state_);
29 DCHECK(delegate);
30
31 // TODO(johnme): Initialize JNI counterpart.
32
33 delegate_ = delegate;
34 state_ = INITIALIZED;
35 }
36
37 void GCMClientImplAndroid::Load() {
38 DCHECK_EQ(INITIALIZED, state_);
39
40 // Do nothing. Android GCM API doesn't require loading in advance.
41
42 state_ = READY;
43 }
44
45 void GCMClientImplAndroid::Stop() {
46 // Do nothing?
47
48 if (state_ == READY)
49 state_ = INITIALIZED;
50 }
51
52 void GCMClientImplAndroid::CheckOut() {
53 Stop();
54 // TODO(johnme): What would this map to on Android? Is it even possible?
55 NOTIMPLEMENTED();
56 }
57
58 void GCMClientImplAndroid::Register(const std::string& app_id,
59 const std::vector<std::string>& sender_ids) {
60 DCHECK_EQ(INITIALIZED, state_);
61
62 // TODO(johnme): Tell JNI counterpart to register.
63 }
64
65 void GCMClientImplAndroid::OnRegisterCompleted(JNIEnv* env,
66 jobject obj,
67 jstring j_app_id,
68 jboolean success,
69 jstring j_registration_id) {
70 DCHECK(delegate_);
71
72 std::string app_id = ConvertJavaStringToUTF8(env, j_app_id);
73 Result result = success ? SUCCESS : UNKNOWN_ERROR;
74 std::string registration_id = ConvertJavaStringToUTF8(env, j_registration_id);
75
76 delegate_->OnRegisterFinished(
77 app_id, result == SUCCESS ? registration_id : std::string(), result);
78 }
79
80 void GCMClientImplAndroid::Unregister(const std::string& app_id) {
81 DCHECK_EQ(INITIALIZED, state_);
82
83 // TODO(johnme): Tell JNI counterpart to unregister.
84 }
85
86 void GCMClientImplAndroid::OnUnregisterCompleted(JNIEnv* env,
87 jobject obj,
88 jstring j_app_id,
89 jboolean success) {
90 DCHECK(delegate_);
91 std::string app_id = ConvertJavaStringToUTF8(env, j_app_id);
92 DVLOG(1) << "Unregister completed for app: " << app_id
93 << " with " << (success ? "success." : "failure.");
94 delegate_->OnUnregisterFinished(app_id, success ? SUCCESS : SERVER_ERROR);
95 }
96
97
98
99 void OnRegisterCompleted(JNIEnv* env,
100 jobject obj,
101 jstring app_id,
102 jobjectArray sender_ids,
103 jboolean success,
104 jstring registration_id);
105 void OnUnregisterCompleted(JNIEnv* env,
106 jobject obj,
107 jstring app_id,
108 jboolean success);
109
110
111
112 void GCMClientImplAndroid::Send(const std::string& app_id,
113 const std::string& receiver_id,
114 const OutgoingMessage& message) {
115 DCHECK(initialized_);
116
117 NOTIMPLEMENTED() << "Send is not currently implemented on Android, as it is "
118 << "only used by Chrome Apps & Extensions."
119 }
120
121 std::string GCMClientImplAndroid::GetStateString() const {
122 switch(state_) {
123 case GCMClientImpl::INITIALIZED:
124 return "INITIALIZED";
125 case GCMClientImpl::UNINITIALIZED:
126 return "UNINITIALIZED";
127 case GCMClientImpl::READY:
128 return "READY";
129 default:
130 NOTREACHED();
131 return std::string();
132 }
133 }
134
135 GCMClient::GCMStatistics GCMClientImplAndroid::GetStatistics() const {
136 GCMClient::GCMStatistics stats;
137 stats.gcm_client_state = GCMClientImplAndroid::GetStateString();
138 return stats;
139 }
140
141 void GCMClientImplAndroid::OnMessageReceived(JNIEnv* env,
142 jobject obj,
143 jstring j_sender_id,
144 jstring j_app_id,
145 jstring j_collapse_key,
146 jobjectArray j_data) {
147 DCHECK(delegate_);
148
149 std::string sender_id = ConvertJavaStringToUTF8(env, j_sender_id);
150 std::string app_id = ConvertJavaStringToUTF8(env, j_app_id);
151 std::string collapse_key = ConvertJavaStringToUTF8(env, j_collapse_key);
152 MessageData message_data; // TODO(johnme): Convert j_data from JNI format.
153
154 // TODO(johnme): Drop the message when the app is not registered for the
155 // sender of the message?
156
157 IncomingMessage incoming_message;
158 incoming_message.sender_id = sender_id;
159 incoming_message.collapse_key = collapse_key;
160 incoming_message.data = message_data;
161 delegate_->OnMessageReceived(app_id, incoming_message);
162 }
163
164 void GCMClientImplAndroid::OnMessagesDeletedByServer(JNIEnv* env,
165 jobject obj,
166 jstring j_app_id) {
167 DCHECK(delegate_);
168
169 std::string app_id = ConvertJavaStringToUTF8(env, j_app_id);
170
171 delegate_->OnMessagesDeleted(app_id);
172 }
173
174 } // namespace gcm
OLDNEW
« 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