chromium/android_webview/support_library/java/src/org/chromium/support_lib_glue/SupportLibJsReplyProxyAdapter.java

// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.support_lib_glue;

import static org.chromium.support_lib_glue.SupportLibWebViewChromiumFactory.recordApiCall;

import org.chromium.android_webview.AwSupportLibIsomorphic;
import org.chromium.android_webview.JsReplyProxy;
import org.chromium.base.TraceEvent;
import org.chromium.content_public.browser.MessagePayload;
import org.chromium.support_lib_boundary.JsReplyProxyBoundaryInterface;
import org.chromium.support_lib_glue.SupportLibWebViewChromiumFactory.ApiCall;

import java.lang.reflect.InvocationHandler;

/** Adapter between JsReplyProxyBoundaryInterface and JsReplyProxy. */
class SupportLibJsReplyProxyAdapter extends IsomorphicAdapter
        implements JsReplyProxyBoundaryInterface {
    private JsReplyProxy mReplyProxy;

    public SupportLibJsReplyProxyAdapter(JsReplyProxy replyProxy) {
        mReplyProxy = replyProxy;
    }

    @Override
    public void postMessage(String message) {
        try (TraceEvent event =
                TraceEvent.scoped("WebView.APICall.AndroidX.JS_REPLY_POST_MESSAGE")) {
            recordApiCall(ApiCall.JS_REPLY_POST_MESSAGE);
            mReplyProxy.postMessage(new MessagePayload(message));
        }
    }

    @Override
    public void postMessageWithPayload(/* MessagePayload */ InvocationHandler payload) {
        try (TraceEvent event =
                TraceEvent.scoped("WebView.APICall.AndroidX.JS_REPLY_POST_MESSAGE_WITH_PAYLOAD")) {
            recordApiCall(ApiCall.JS_REPLY_POST_MESSAGE_WITH_PAYLOAD);
            mReplyProxy.postMessage(SupportLibWebMessagePayloadAdapter.toMessagePayload(payload));
        }
    }

    @Override
    /* package */ AwSupportLibIsomorphic getPeeredObject() {
        return mReplyProxy;
    }
}