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

Unified Diff: chrome/browser/android/physical_web/eddystone_encoder_bridge.cc

Issue 2753683002: Build a Bridge to Eddystone Encoder in Components (Closed)
Patch Set: Rebasing Again Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
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);
+}

Powered by Google App Engine
This is Rietveld 408576698