// 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 "content/browser/android/app_web_message_port.h"

#include "base/android/jni_android.h"
#include "base/android/jni_array.h"
#include "base/android/jni_string.h"
#include "base/bind.h"
#include "base/threading/thread_task_runner_handle.h"
#include "jni/AppWebMessagePort_jni.h"
#include "third_party/blink/public/common/messaging/string_message_codec.h"

using blink::MessagePortChannel;

namespace content {

// static
std::vector<blink::MessagePortChannel> AppWebMessagePort::UnwrapJavaArray(
    JNIEnv* env,
    const base::android::JavaRef<jobjectArray>& jports) {
  std::vector<blink::MessagePortChannel> channels;
  if (!jports.is_null()) {
    jsize num_ports = env->GetArrayLength(jports.obj());
    for (jsize i = 0; i < num_ports; ++i) {
      base::android::ScopedJavaLocalRef<jobject> jport(
          env, env->GetObjectArrayElement(jports.obj(), i));
      jint native_port = Java_AppWebMessagePort_releaseNativeHandle(env, jport);
      channels.push_back(blink::MessagePortChannel(
          mojo::ScopedMessagePipeHandle(mojo::MessagePipeHandle(native_port))));
    }
  }
  return channels;
}

base::android::ScopedJavaLocalRef<jstring>
JNI_AppWebMessagePort_DecodeStringMessage(
    JNIEnv* env,
    const base::android::JavaParamRef<jbyteArray>& encoded_data) {
  std::vector<uint8_t> encoded_message;
  base::android::JavaByteArrayToByteVector(env, encoded_data, &encoded_message);

  base::string16 message;
  if (!blink::DecodeStringMessage(encoded_message, &message))
    return nullptr;

  base::android::ScopedJavaLocalRef<jstring> jmessage =
      base::android::ConvertUTF16ToJavaString(env, message);
  return jmessage;
}

base::android::ScopedJavaLocalRef<jbyteArray>
JNI_AppWebMessagePort_EncodeStringMessage(
    JNIEnv* env,
    const base::android::JavaParamRef<jstring>& jmessage) {
  std::vector<uint8_t> encoded_message = blink::EncodeStringMessage(
      base::android::ConvertJavaStringToUTF16(jmessage));
  return base::android::ToJavaByteArray(env, encoded_message);
}

}  // namespace content
