java/org/cef/handler/CefClientHandler.java (229 lines of code) (raw):
// Copyright (c) 2014 The Chromium Embedded Framework 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.cef.handler;
import com.jetbrains.cef.remote.CefServer;
import org.cef.CefApp;
import org.cef.browser.CefBrowser;
import org.cef.browser.CefMessageRouter;
import org.cef.callback.CefNativeAdaperMulti;
import org.cef.misc.CefLog;
import java.util.Vector;
/**
* Implement this interface to provide handler implementations.
*/
public abstract class CefClientHandler extends CefNativeAdaperMulti implements CefAppStateHandler {
private Vector<CefMessageRouter> msgRouters = new Vector<>();
protected boolean isNativeCtxInitialized = false;
@Override
public void stateHasChanged(CefApp.CefAppState state) {
if (CefApp.isRemoteEnabled())
return;
if (CefApp.CefAppState.INITIALIZED == state) {
synchronized (this) {
try {
N_CefClientHandler_CTOR();
isNativeCtxInitialized = true;
msgRouters.forEach(r -> N_addMessageRouter(r));
} catch (UnsatisfiedLinkError err) {
err.printStackTrace();
}
}
}
}
protected void dispose() {
if (CefApp.isRemoteEnabled())
return;
try {
// Call native DTOR if handler will be destroyed
for (int i = 0; i < msgRouters.size(); i++) {
msgRouters.get(i).dispose();
}
msgRouters.clear();
checkNativeCtxInitialized();
if (isNativeCtxInitialized)
N_CefClientHandler_DTOR();
} catch (UnsatisfiedLinkError err) {
err.printStackTrace();
}
}
private void checkNativeCtxInitialized() {
if (!isNativeCtxInitialized) {
String m1 = new Throwable().getStackTrace()[1].getMethodName();
CefLog.Error("CefClientHandler: can't invoke native method '%s' before native context initialized", m1);
}
}
/**
* Returns the java part of the browser implementation.
* @param identifer the unique identifier of the browser.
* @return The found browser or null if none is found.
*/
abstract protected CefBrowser getBrowser(int identifier);
/**
* Returns a list of all browser instances.
* @return an array of browser Instances.
*/
abstract protected Object[] getAllBrowser();
/**
* Return the handler for context menus. If no handler is provided the
* default implementation will be used.
*/
abstract protected CefContextMenuHandler getContextMenuHandler();
/**
* Return the handler for dialogs. If no handler is provided the
* default implementation will be used.
*/
abstract protected CefDialogHandler getDialogHandler();
/**
* Return the handler for browser display state events.
* This method is a callback method and is called by
* the native code.
*/
abstract protected CefDisplayHandler getDisplayHandler();
/**
* Return the handler for download events.
* This method is a callback method and is called by
* the native code.
*/
abstract protected CefDownloadHandler getDownloadHandler();
/**
* Return the handler for drag events.
* This method is a callback method and is called by
* the native code.
*/
abstract protected CefDragHandler getDragHandler();
/**
* Return the handler for focus events.
* This method is a callback method and is called by
* the native code.
*/
abstract protected CefFocusHandler getFocusHandler();
/**
* Return the handler for media access requests.
* This method is a callback method and is called by
* the native code.
*/
abstract protected CefPermissionHandler getPermissionHandler();
/**
* Return the handler for javascript dialog requests.
* This method is a callback method and is called by
* the native code.
*/
abstract protected CefJSDialogHandler getJSDialogHandler();
/**
* Return the handler for keyboard events.
* This method is a callback method and is called by
* the native code.
*/
abstract protected CefKeyboardHandler getKeyboardHandler();
/**
* Return the handler for browser life span events.
* This method is a callback method and is called by
* the native code.
*/
abstract protected CefLifeSpanHandler getLifeSpanHandler();
/**
* Return the handler for browser load status events.
* This method is a callback method and is called by
* the native code.
*/
abstract protected CefLoadHandler getLoadHandler();
/**
* Return the handler for printing on Linux. If a print handler is not
* provided then printing will not be supported on the Linux platform.
* This method is a callback method and is called by
* the native code.
*/
abstract protected CefPrintHandler getPrintHandler();
/**
* Return the handler for off-screen rendering events.
* This method is a callback method and is called by
* the native code.
*/
abstract protected CefRenderHandler getRenderHandler();
/**
* Return the handler for browser request events.
* This method is a callback method and is called by
* the native code.
*/
abstract protected CefRequestHandler getRequestHandler();
/**
* Return the handler for windowed rendering events.
* This method is a callback method and is called by
* the native code.
*/
abstract protected CefWindowHandler getWindowHandler();
protected synchronized void addMessageRouter(CefMessageRouter h) {
try {
msgRouters.add(h);
// don't use checkNativeCtxInitialized (routers will be added on initialization)
if (isNativeCtxInitialized)
N_addMessageRouter(h);
} catch (UnsatisfiedLinkError err) {
err.printStackTrace();
}
}
protected void removeContextMenuHandler(CefContextMenuHandler h) {
try {
checkNativeCtxInitialized();
if (isNativeCtxInitialized)
N_removeContextMenuHandler(h);
} catch (UnsatisfiedLinkError err) {
err.printStackTrace();
}
}
protected void removeDialogHandler(CefDialogHandler h) {
try {
checkNativeCtxInitialized();
if (isNativeCtxInitialized)
N_removeDialogHandler(h);
} catch (UnsatisfiedLinkError err) {
err.printStackTrace();
}
}
protected void removeDisplayHandler(CefDisplayHandler h) {
try {
checkNativeCtxInitialized();
if (isNativeCtxInitialized)
N_removeDisplayHandler(h);
} catch (UnsatisfiedLinkError err) {
err.printStackTrace();
}
}
protected void removeDownloadHandler(CefDisplayHandler h) {
try {
checkNativeCtxInitialized();
if (isNativeCtxInitialized)
N_removeDownloadHandler(h);
} catch (UnsatisfiedLinkError err) {
err.printStackTrace();
}
}
protected void removeDragHandler(CefDragHandler h) {
try {
checkNativeCtxInitialized();
if (isNativeCtxInitialized)
N_removeDragHandler(h);
} catch (UnsatisfiedLinkError err) {
err.printStackTrace();
}
}
protected void removeFocusHandler(CefFocusHandler h) {
try {
checkNativeCtxInitialized();
if (isNativeCtxInitialized)
N_removeFocusHandler(h);
} catch (UnsatisfiedLinkError err) {
err.printStackTrace();
}
}
protected void removeJSDialogHandler(CefJSDialogHandler h) {
try {
checkNativeCtxInitialized();
if (isNativeCtxInitialized)
N_removeJSDialogHandler(h);
} catch (UnsatisfiedLinkError err) {
err.printStackTrace();
}
}
protected void removeKeyboardHandler(CefKeyboardHandler h) {
try {
checkNativeCtxInitialized();
if (isNativeCtxInitialized)
N_removeKeyboardHandler(h);
} catch (UnsatisfiedLinkError err) {
err.printStackTrace();
}
}
protected void removeLifeSpanHandler(CefLifeSpanHandler h) {
try {
checkNativeCtxInitialized();
if (isNativeCtxInitialized)
N_removeLifeSpanHandler(h);
} catch (UnsatisfiedLinkError err) {
err.printStackTrace();
}
}
protected void removeLoadHandler(CefLoadHandler h) {
try {
checkNativeCtxInitialized();
if (isNativeCtxInitialized)
N_removeLoadHandler(h);
} catch (UnsatisfiedLinkError err) {
err.printStackTrace();
}
}
protected void removePrintHandler(CefPrintHandler h) {
try {
checkNativeCtxInitialized();
if (isNativeCtxInitialized)
N_removePrintHandler(h);
} catch (UnsatisfiedLinkError err) {
err.printStackTrace();
}
}
protected synchronized void removeMessageRouter(CefMessageRouter h) {
try {
msgRouters.remove(h);
checkNativeCtxInitialized();
if (isNativeCtxInitialized)
N_removeMessageRouter(h);
} catch (UnsatisfiedLinkError err) {
err.printStackTrace();
}
}
protected void removeRenderHandler(CefRenderHandler h) {
try {
checkNativeCtxInitialized();
if (isNativeCtxInitialized)
N_removeRenderHandler(h);
} catch (UnsatisfiedLinkError err) {
err.printStackTrace();
}
}
protected void removeRequestHandler(CefRequestHandler h) {
try {
checkNativeCtxInitialized();
if (isNativeCtxInitialized)
N_removeRequestHandler(h);
} catch (UnsatisfiedLinkError err) {
err.printStackTrace();
}
}
protected void removeWindowHandler(CefWindowHandler h) {
try {
checkNativeCtxInitialized();
if (isNativeCtxInitialized)
N_removeWindowHandler(h);
} catch (UnsatisfiedLinkError err) {
err.printStackTrace();
}
}
private final native void N_CefClientHandler_CTOR();
private final native void N_addMessageRouter(CefMessageRouter h);
private final native void N_removeContextMenuHandler(CefContextMenuHandler h);
private final native void N_removeDialogHandler(CefDialogHandler h);
private final native void N_removeDisplayHandler(CefDisplayHandler h);
private final native void N_removeDownloadHandler(CefDisplayHandler h);
private final native void N_removeDragHandler(CefDragHandler h);
private final native void N_removeFocusHandler(CefFocusHandler h);
private final native void N_removeJSDialogHandler(CefJSDialogHandler h);
private final native void N_removeKeyboardHandler(CefKeyboardHandler h);
private final native void N_removeLifeSpanHandler(CefLifeSpanHandler h);
private final native void N_removeLoadHandler(CefLoadHandler h);
private final native void N_removePrintHandler(CefPrintHandler h);
private final native void N_removeMessageRouter(CefMessageRouter h);
private final native void N_removeRenderHandler(CefRenderHandler h);
private final native void N_removeRequestHandler(CefRequestHandler h);
private final native void N_removeWindowHandler(CefWindowHandler h);
private final native void N_CefClientHandler_DTOR();
}