blob: abbdbad9a8798ea293f15d4ab22e52facc2b3d52 [file] [log] [blame]
// Copyright 2019 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.
package org.chromium.android_webview;
import android.net.Uri;
import androidx.annotation.NonNull;
import org.chromium.base.annotations.CalledByNative;
import org.chromium.base.annotations.JNINamespace;
import org.chromium.content_public.browser.MessagePort;
import org.chromium.mojo.system.impl.CoreImpl;
/**
* Holds the {@link WebMessageListener} instance so that C++ could interact with the {@link
* WebMessageListener}.
*/
@JNINamespace("android_webview")
public class WebMessageListenerHolder {
private WebMessageListener mListener;
public WebMessageListenerHolder(@NonNull WebMessageListener listener) {
mListener = listener;
}
@CalledByNative
public void onPostMessage(String message, String sourceOrigin, boolean isMainFrame, int[] ports,
JsReplyProxy replyProxy) {
MessagePort[] messagePorts = new MessagePort[ports.length];
for (int i = 0; i < ports.length; ++i) {
messagePorts[i] = convertRawHandleToMessagePort(ports[i]);
}
mListener.onPostMessage(
message, Uri.parse(sourceOrigin), isMainFrame, replyProxy, messagePorts);
}
private static MessagePort convertRawHandleToMessagePort(int rawHandle) {
return MessagePort.create(
CoreImpl.getInstance().acquireNativeHandle(rawHandle).toMessagePipeHandle());
}
}