diff options
author | johnme <johnme@chromium.org> | 2015-07-22 05:04:03 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-07-22 12:05:06 +0000 |
commit | 3a0dd4930bd3738e51c86bd2dd984009a17ba35f (patch) | |
tree | d64c78361de72fbc187b102311be300baa9b8519 | |
parent | 0b7541f8ab3e796f071e6d6375a3f5363ddc164c (diff) | |
download | chromium_src-3a0dd4930bd3738e51c86bd2dd984009a17ba35f.zip chromium_src-3a0dd4930bd3738e51c86bd2dd984009a17ba35f.tar.gz chromium_src-3a0dd4930bd3738e51c86bd2dd984009a17ba35f.tar.bz2 |
Push API: Plumb rawData byte[] from Java to Chrome.
This field contains the binary encrypted payload, when using the Push
API via an IETF webpush endpoint.
BUG=486040
Review URL: https://codereview.chromium.org/1247443002
Cr-Commit-Position: refs/heads/master@{#339862}
4 files changed, 19 insertions, 10 deletions
diff --git a/components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/GCMDriver.java b/components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/GCMDriver.java index 1ab551f4..e22d51e 100644 --- a/components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/GCMDriver.java +++ b/components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/GCMDriver.java @@ -125,23 +125,26 @@ public class GCMDriver { final String bundleSubtype = "subtype"; final String bundleSenderId = "from"; final String bundleCollapseKey = "collapse_key"; + final String bundleRawData = "rawData"; final String bundleGcmplex = "com.google.ipc.invalidation.gcmmplex."; String senderId = extras.getString(bundleSenderId); - String collapseKey = extras.getString(bundleCollapseKey); + String collapseKey = extras.getString(bundleCollapseKey); // May be null. + byte[] rawData = extras.getByteArray(bundleRawData); // May be null. List<String> dataKeysAndValues = new ArrayList<String>(); for (String key : extras.keySet()) { // TODO(johnme): Check there aren't other keys that we need to exclude. if (key.equals(bundleSubtype) || key.equals(bundleSenderId) - || key.equals(bundleCollapseKey) || key.startsWith(bundleGcmplex)) + || key.equals(bundleCollapseKey) || key.equals(bundleRawData) + || key.startsWith(bundleGcmplex)) continue; dataKeysAndValues.add(key); dataKeysAndValues.add(extras.getString(key)); } sInstance.nativeOnMessageReceived(sInstance.mNativeGCMDriverAndroid, - appId, senderId, collapseKey, + appId, senderId, collapseKey, rawData, dataKeysAndValues.toArray(new String[dataKeysAndValues.size()])); } }); @@ -162,7 +165,7 @@ public class GCMDriver { private native void nativeOnUnregisterFinished(long nativeGCMDriverAndroid, String appId, boolean success); private native void nativeOnMessageReceived(long nativeGCMDriverAndroid, String appId, - String senderId, String collapseKey, String[] dataKeysAndValues); + String senderId, String collapseKey, byte[] rawData, String[] dataKeysAndValues); private native void nativeOnMessagesDeleted(long nativeGCMDriverAndroid, String appId); private static void launchNativeThen(Context context, Runnable task) { diff --git a/components/gcm_driver/gcm_driver_android.cc b/components/gcm_driver/gcm_driver_android.cc index 2ce34f8..246b291 100644 --- a/components/gcm_driver/gcm_driver_android.cc +++ b/components/gcm_driver/gcm_driver_android.cc @@ -4,6 +4,8 @@ #include "components/gcm_driver/gcm_driver_android.h" +#include <stdint.h> + #include "base/android/jni_android.h" #include "base/android/jni_array.h" #include "base/android/jni_string.h" @@ -15,7 +17,7 @@ using base::android::AppendJavaStringArrayToStringVector; using base::android::AttachCurrentThread; using base::android::ConvertJavaStringToUTF8; using base::android::ConvertUTF8ToJavaString; -using base::android::ToJavaArrayOfStrings; +using base::android::JavaByteArrayToByteVector; namespace gcm { @@ -61,6 +63,7 @@ void GCMDriverAndroid::OnMessageReceived(JNIEnv* env, jstring j_app_id, jstring j_sender_id, jstring j_collapse_key, + jbyteArray j_raw_data, jobjectArray j_data_keys_and_values) { std::string app_id = ConvertJavaStringToUTF8(env, j_app_id); @@ -75,6 +78,12 @@ void GCMDriverAndroid::OnMessageReceived(JNIEnv* env, for (size_t i = 0; i + 1 < data_keys_and_values.size(); i += 2) { message.data[data_keys_and_values[i]] = data_keys_and_values[i+1]; } + // Convert j_raw_data from byte[] to binary std::string. + if (j_raw_data) { + std::vector<uint8_t> raw_data; + JavaByteArrayToByteVector(env, j_raw_data, &raw_data); + message.raw_data.assign(raw_data.begin(), raw_data.end()); + } GetAppHandler(app_id)->OnMessage(app_id, message); } diff --git a/components/gcm_driver/gcm_driver_android.h b/components/gcm_driver/gcm_driver_android.h index 6929847..5614ba7 100644 --- a/components/gcm_driver/gcm_driver_android.h +++ b/components/gcm_driver/gcm_driver_android.h @@ -35,6 +35,7 @@ class GCMDriverAndroid : public GCMDriver { jstring app_id, jstring sender_id, jstring collapse_key, + jbyteArray raw_data, jobjectArray data_keys_and_values); void OnMessagesDeleted(JNIEnv* env, jobject obj, diff --git a/third_party/cacheinvalidation/src/java/com/google/ipc/invalidation/external/client/contrib/MultiplexingGcmListener.java b/third_party/cacheinvalidation/src/java/com/google/ipc/invalidation/external/client/contrib/MultiplexingGcmListener.java index 10cb3ce..6520f44 100644 --- a/third_party/cacheinvalidation/src/java/com/google/ipc/invalidation/external/client/contrib/MultiplexingGcmListener.java +++ b/third_party/cacheinvalidation/src/java/com/google/ipc/invalidation/external/client/contrib/MultiplexingGcmListener.java @@ -263,12 +263,8 @@ public class MultiplexingGcmListener extends GCMBaseIntentService { @Override protected void onMessage(Context context, Intent intent) { Intent newIntent = new Intent(); + newIntent.putExtras(intent); newIntent.putExtra(Intents.EXTRA_OP_MESSAGE, true); - - // Copy the extra keys containing the message payload into the new Intent. - for (String extraKey : intent.getExtras().keySet()) { - newIntent.putExtra(extraKey, intent.getStringExtra(extraKey)); - } rebroadcast(newIntent); } |