summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjohnme <johnme@chromium.org>2015-07-22 05:04:03 -0700
committerCommit bot <commit-bot@chromium.org>2015-07-22 12:05:06 +0000
commit3a0dd4930bd3738e51c86bd2dd984009a17ba35f (patch)
treed64c78361de72fbc187b102311be300baa9b8519
parent0b7541f8ab3e796f071e6d6375a3f5363ddc164c (diff)
downloadchromium_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}
-rw-r--r--components/gcm_driver/android/java/src/org/chromium/components/gcm_driver/GCMDriver.java11
-rw-r--r--components/gcm_driver/gcm_driver_android.cc11
-rw-r--r--components/gcm_driver/gcm_driver_android.h1
-rw-r--r--third_party/cacheinvalidation/src/java/com/google/ipc/invalidation/external/client/contrib/MultiplexingGcmListener.java6
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);
}