public class

JavaScriptReplyProxyImpl

extends JavaScriptReplyProxy

 java.lang.Object

androidx.webkit.JavaScriptReplyProxy

↳androidx.webkit.internal.JavaScriptReplyProxyImpl

Gradle dependencies

compile group: 'androidx.webkit', name: 'webkit', version: '1.12.0-rc01'

  • groupId: androidx.webkit
  • artifactId: webkit
  • version: 1.12.0-rc01

Artifact androidx.webkit:webkit:1.12.0-rc01 it located at Google repository (https://maven.google.com/)

Androidx artifact mapping:

androidx.webkit:webkit com.android.support:webkit

Overview

Internal implementation of JavaScriptReplyProxy.

Summary

Constructors
publicJavaScriptReplyProxyImpl(org.chromium.support_lib_boundary.JsReplyProxyBoundaryInterface boundaryInterface)

Methods
public static JavaScriptReplyProxyImplforInvocationHandler(java.lang.reflect.InvocationHandler invocationHandler)

Get a support library JavaScriptReplyProxy object that is 1:1 with the AndroidX side object.

public abstract voidpostMessage(byte[] arrayBuffer[])

Post a ArrayBuffer message to the injected JavaScript object which sent this JavaScriptReplyProxy.

public abstract voidpostMessage(java.lang.String message)

Post a String message to the injected JavaScript object which sent this JavaScriptReplyProxy.

from java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructors

public JavaScriptReplyProxyImpl(org.chromium.support_lib_boundary.JsReplyProxyBoundaryInterface boundaryInterface)

Methods

public static JavaScriptReplyProxyImpl forInvocationHandler(java.lang.reflect.InvocationHandler invocationHandler)

Get a support library JavaScriptReplyProxy object that is 1:1 with the AndroidX side object.

public abstract void postMessage(java.lang.String message)

Post a String message to the injected JavaScript object which sent this JavaScriptReplyProxy.

Parameters:

message: The String data to send to the JavaScript context.

public abstract void postMessage(byte[] arrayBuffer[])

Post a ArrayBuffer message to the injected JavaScript object which sent this JavaScriptReplyProxy. Be aware that large byte buffers can lead to out-of-memory crashes on low-end devices.

Parameters:

arrayBuffer: The ArrayBuffer to send to the JavaScript context. An empty ArrayBuffer is supported.

Source

/*
 * Copyright 2019 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package androidx.webkit.internal;

import androidx.annotation.NonNull;
import androidx.webkit.JavaScriptReplyProxy;

import org.chromium.support_lib_boundary.JsReplyProxyBoundaryInterface;
import org.chromium.support_lib_boundary.util.BoundaryInterfaceReflectionUtil;

import java.lang.reflect.InvocationHandler;
import java.util.Objects;
import java.util.concurrent.Callable;

/**
 * Internal implementation of {@link androidx.webkit.JavaScriptReplyProxy}.
 */
public class JavaScriptReplyProxyImpl extends JavaScriptReplyProxy {
    private JsReplyProxyBoundaryInterface mBoundaryInterface;

    public JavaScriptReplyProxyImpl(@NonNull JsReplyProxyBoundaryInterface boundaryInterface) {
        mBoundaryInterface = boundaryInterface;
    }

    /**
     * Get a support library JavaScriptReplyProxy object that is 1:1 with the AndroidX side object.
     */
    @NonNull
    public static JavaScriptReplyProxyImpl forInvocationHandler(
            @NonNull /* JsReplyProxy */ InvocationHandler invocationHandler) {
        final JsReplyProxyBoundaryInterface boundaryInterface =
                BoundaryInterfaceReflectionUtil.castToSuppLibClass(
                        JsReplyProxyBoundaryInterface.class, invocationHandler);
        return (JavaScriptReplyProxyImpl) boundaryInterface.getOrCreatePeer(
                new Callable<Object>() {
                    @Override
                    public Object call() {
                        return new JavaScriptReplyProxyImpl(boundaryInterface);
                    }
                });
    }

    @Override
    public void postMessage(@NonNull final String message) {
        final ApiFeature.NoFramework feature = WebViewFeatureInternal.WEB_MESSAGE_LISTENER;
        if (feature.isSupportedByWebView()) {
            mBoundaryInterface.postMessage(message);
        } else {
            throw WebViewFeatureInternal.getUnsupportedOperationException();
        }
    }

    @Override
    public void postMessage(@NonNull byte[] arrayBuffer) {
        // WebView cannot handle null ArrayBuffer as WebMessage.
        Objects.requireNonNull(arrayBuffer, "ArrayBuffer must be non-null");
        final ApiFeature.NoFramework feature = WebViewFeatureInternal.WEB_MESSAGE_ARRAY_BUFFER;
        if (feature.isSupportedByWebView()) {
            mBoundaryInterface.postMessageWithPayload(BoundaryInterfaceReflectionUtil
                    .createInvocationHandlerFor(new WebMessagePayloadAdapter(arrayBuffer)));
        } else {
            throw WebViewFeatureInternal.getUnsupportedOperationException();
        }
    }
}