blob: 7cf2cb48baf50b7f21bca21062dc3ff666524d28 [file] [log] [blame]
// Copyright 2015 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 com.android.webview.chromium;
import android.annotation.TargetApi;
import android.os.Build;
import android.os.Handler;
import android.webkit.WebMessage;
import android.webkit.WebMessagePort;
import org.chromium.android_webview.AwMessagePort;
/**
* This class is used to convert a WebMessagePort to a MessagePort in chromium
* world.
*/
@TargetApi(Build.VERSION_CODES.M)
public class WebMessagePortAdapter extends WebMessagePort {
private AwMessagePort mPort;
public WebMessagePortAdapter(AwMessagePort port) {
mPort = port;
}
public void postMessage(WebMessage message) {
mPort.postMessage(message.getData(), toAwMessagePorts(message.getPorts()));
}
public void close() {
mPort.close();
}
public void setWebMessageCallback(WebMessageCallback callback) {
setWebMessageCallback(callback, null);
}
public void setWebMessageCallback(final WebMessageCallback callback, final Handler handler) {
mPort.setMessageCallback(new AwMessagePort.MessageCallback() {
@Override
public void onMessage(String message, AwMessagePort[] ports) {
callback.onMessage(WebMessagePortAdapter.this,
new WebMessage(message, fromAwMessagePorts(ports)));
}
}, handler);
}
public AwMessagePort getPort() {
return mPort;
}
public static WebMessagePort[] fromAwMessagePorts(AwMessagePort[] messagePorts) {
if (messagePorts == null) return null;
WebMessagePort[] ports = new WebMessagePort[messagePorts.length];
for (int i = 0; i < messagePorts.length; i++) {
ports[i] = new WebMessagePortAdapter(messagePorts[i]);
}
return ports;
}
public static AwMessagePort[] toAwMessagePorts(WebMessagePort[] webMessagePorts) {
if (webMessagePorts == null) return null;
AwMessagePort[] ports = new AwMessagePort[webMessagePorts.length];
for (int i = 0; i < webMessagePorts.length; i++) {
ports[i] = ((WebMessagePortAdapter) webMessagePorts[i]).getPort();
}
return ports;
}
}