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

Side by Side Diff: chrome/browser/android/gcm_android.cc

Issue 237323002: [NOT FOR REVIEW] Plumb Android GCM to Push API (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 | « chrome/browser/android/gcm_android.h ('k') | chrome/browser/chrome_content_browser_client.h » ('j') | 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 (c) 2013 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 "chrome/browser/android/gcm_android.h"
6
7 #include "base/android/jni_array.h"
8 #include "base/android/jni_string.h"
9 #include "base/strings/utf_string_conversions.h"
10 #include "content/browser/push_messaging_message_filter.h"
11 #include "content/public/browser/browser_thread.h"
12 #include "content/public/common/push_messaging_status.h"
13 #include "jni/GcmPlatformImpl_jni.h"
14
15 using base::android::AttachCurrentThread;
16 using base::android::ConvertJavaStringToUTF8;
17 using base::android::ConvertUTF8ToJavaString;
18 using base::android::ToJavaArrayOfStrings;
19 using content::BrowserThread;
20 using content::PushMessagingMessageFilter;
21 using content::PushMessagingStatus;
22
23 GcmPlatformImplAndroid::GcmPlatformImplAndroid()
24 : observer_(NULL) {
25 JNIEnv* env = AttachCurrentThread();
26 java_ref_.Reset(
27 Java_GcmPlatformImpl_create(env,
28 reinterpret_cast<intptr_t>(this),
29 base::android::GetApplicationContext()));
30 }
31
32 GcmPlatformImplAndroid::~GcmPlatformImplAndroid() {
33 CHECK(false);
34 JNIEnv* env = AttachCurrentThread();
35 Java_GcmPlatformImpl_destroy(env, java_ref_.obj());
36 }
37
38 void GcmPlatformImplAndroid::Register(
39 const std::string& app_unique_id_currently_ignored,
40 const std::vector<std::string>& sender_ids,
41 const content::PushMessagingService::RegisterCallback& callback) {
42 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
43 register_cb_ = callback;
44
45 JNIEnv* env = AttachCurrentThread();
46 Java_GcmPlatformImpl_registerApp(
47 env, java_ref_.obj(),
48 ConvertUTF8ToJavaString(env, app_unique_id_currently_ignored).Release(),
49 ToJavaArrayOfStrings(env, sender_ids).obj());
50 }
51
52 void GcmPlatformImplAndroid::SetObserver(PushMessagingMessageFilter* observer) {
53 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
54 observer_ = observer;
55 }
56
57 void GcmPlatformImplAndroid::OnRegistrationFinished(JNIEnv* env, jobject obj,
58 jstring registration_id) {
59 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
60 if (!register_cb_.is_null()) {
61 std::string reg_id = ConvertJavaStringToUTF8(env, registration_id);
62 PushMessagingStatus status = reg_id.empty()
63 ? content::PUSH_MESSAGING_STATUS_UNKNOWN_ERROR
64 : content::PUSH_MESSAGING_STATUS_OK;
65 register_cb_.Run(reg_id, status);
66 }
67 }
68
69 void GcmPlatformImplAndroid::OnMessageReceived(JNIEnv* env, jobject obj,
70 jstring data) {
71 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
72 if (observer_) {
73 std::string data_string = ConvertJavaStringToUTF8(env, data); // TODO: can I avoid this?
74 observer_->MessageReceived(data_string);
75 }
76 }
77
78 void GcmPlatformImplAndroid::OnMessagesDeletedByServer(JNIEnv* env,
79 jobject obj) {
80 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
81 if (observer_) {
82 std::string data_string("MESSAGES DELETED"); // HACK
83 observer_->MessageReceived(data_string);
84 }
85 }
86
87 // static
88 GcmPlatformImplAndroid* GcmPlatformImplAndroid::GetInstance() {
89 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
90 return Singleton<GcmPlatformImplAndroid>::get();
91 }
92
93 // static
94 bool GcmPlatformImplAndroid::RegisterGcmPlatformImplAndroid(JNIEnv* env) {
95 return RegisterNativesImpl(env);
96 }
OLDNEW
« no previous file with comments | « chrome/browser/android/gcm_android.h ('k') | chrome/browser/chrome_content_browser_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698