| Index: chrome/browser/android/physical_web/eddystone_encoder_bridge.cc
|
| diff --git a/chrome/browser/android/physical_web/eddystone_encoder_bridge.cc b/chrome/browser/android/physical_web/eddystone_encoder_bridge.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..09f02837b0eb422c6baa595414d11fa4bec03f61
|
| --- /dev/null
|
| +++ b/chrome/browser/android/physical_web/eddystone_encoder_bridge.cc
|
| @@ -0,0 +1,60 @@
|
| +// Copyright 2017 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 "chrome/browser/android/physical_web/eddystone_encoder_bridge.h"
|
| +
|
| +#include <jni.h>
|
| +#include <vector>
|
| +
|
| +#include "base/android/jni_android.h"
|
| +#include "base/android/jni_array.h"
|
| +#include "base/android/jni_string.h"
|
| +#include "components/physical_web/eddystone/eddystone_encoder.h"
|
| +#include "jni/PhysicalWebBroadcastService_jni.h"
|
| +
|
| +bool RegisterEddystoneEncoderBridge(JNIEnv* env) {
|
| + return RegisterNativesImpl(env);
|
| +}
|
| +
|
| +static base::android::ScopedJavaLocalRef<jbyteArray> EncodeUrl(
|
| + JNIEnv* env,
|
| + const base::android::JavaParamRef<jobject>& jcaller,
|
| + const base::android::JavaParamRef<jstring>& j_url) {
|
| + /*
|
| + * Exception preparation for illegal arguments.
|
| + */
|
| + jclass exception_class = env->FindClass("java/lang/IllegalArgumentException");
|
| +
|
| + /*
|
| + * Input Sanitization
|
| + */
|
| + if (j_url.is_null()) {
|
| + env->ThrowNew(exception_class, "URL is null.");
|
| + return NULL;
|
| + }
|
| +
|
| + std::string c_url;
|
| + base::android::ConvertJavaStringToUTF8(env, j_url, &c_url);
|
| + std::vector<uint8_t> encoded_url;
|
| +
|
| + int encode_message = physical_web::EncodeUrl(c_url, &encoded_url);
|
| +
|
| + if (encode_message < 0) {
|
| + std::string err_message = "Error in Eddystone Encoding. Error Code: ";
|
| + err_message += std::to_string(encode_message);
|
| + env->ThrowNew(exception_class, err_message.c_str());
|
| + return NULL;
|
| + }
|
| +
|
| + return base::android::ToJavaByteArray(env, encoded_url.data(),
|
| + encoded_url.size());
|
| +}
|
| +
|
| +// Functions For Testing
|
| +base::android::ScopedJavaLocalRef<jbyteArray> EncodeUrlForTesting(
|
| + JNIEnv* env,
|
| + const base::android::JavaParamRef<jobject>& jcaller,
|
| + const base::android::JavaParamRef<jstring>& j_url) {
|
| + return EncodeUrl(env, jcaller, j_url);
|
| +}
|
|
|