blob: 11197d3a1ceab4f2caa414b67e8a316eaf9a2a49 [file] [log] [blame]
// 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 <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"
static base::android::ScopedJavaLocalRef<jbyteArray>
JNI_PhysicalWebBroadcastService_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 JNI_PhysicalWebBroadcastService_EncodeUrl(env, jcaller, j_url);
}