// Copyright 2018 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_boundary;

import android.net.Uri;
import android.webkit.WebChromeClient;
import android.webkit.WebViewClient;

import java.lang.reflect.InvocationHandler;

/**
 */
public interface WebViewProviderBoundaryInterface {
    void insertVisualStateCallback(long requestId,
            /* VisualStateCallback */ InvocationHandler callback);
    /* WebMessagePort */ InvocationHandler[] createWebMessageChannel();
    void postMessageToMainFrame(/* WebMessage */ InvocationHandler message, Uri targetOrigin);
    void addWebMessageListener(String jsObjectName, String[] allowedOriginRules,
            /* WebMessageListener */ InvocationHandler listener);
    void removeWebMessageListener(String jsObjectName);
    /* ScriptHandler */ InvocationHandler addDocumentStartJavaScript(
            String script, String[] allowedOriginRules);
    WebViewClient getWebViewClient();
    WebChromeClient getWebChromeClient();
    /* WebViewRenderer */ InvocationHandler getWebViewRenderer();
    /* WebViewRendererClient */ InvocationHandler getWebViewRendererClient();
    void setWebViewRendererClient(
            /* WebViewRendererClient */ InvocationHandler webViewRendererClient);
    void setProfile(String profileName);
    /* Profile */ InvocationHandler getProfile();
}
