IsomorphicObjectBoundaryInterface.java

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

import java.util.concurrent.Callable;

/**
 * Boundary interface to be implemented by any type that needs to maintain an isomorphism (i.e.
 * a 1:1 mapping) between the support library objects and their corresponding internal WebView
 * objects.
 */
public interface IsomorphicObjectBoundaryInterface {
    /**
     * Get the peer object associated with this object.
     *
     * One of the pair of classes for which the corresponding objects
     * need to maintain a lazy 1:1 mapping between support library and
     * webview should implement this interface.
     *
     * The mapping is lazy in the sense that one object in the pair
     * (the peer) may be created at an arbitrary point after the other,
     * but once both objects exist their lifetimes become tied and the
     * 1:1 mapping is maintained.
     *
     * Whether this interface should be implemented by the support library
     * class or the webview class depends on which side can be created and
     * exist independently. For example, AwRenderProcess objects are created
     * by WebView before being passed to the support library, and thus
     * SupportLibWebViewRendererAdapter should implement this interface.
     *
     * @param creationCallable A callable that can be used to construct an appropriate peer
     *                         object, if one is required.
     * @return The peer object associated with this object, which either exists already, or has
     *         been freshly created and recorded.
     */
    Object getOrCreatePeer(Callable<Object> creationCallable);
}