blob: 4822434045c228500260d90c9dfa22a0edb4931e [file] [log] [blame]
// Copyright (c) 2013 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.
#ifndef JCEF_NATIVE_CLIENT_HANDLER_H_
#define JCEF_NATIVE_CLIENT_HANDLER_H_
#pragma once
#include <jni.h>
#include <set>
#include "include/base/cef_lock.h"
#include "include/cef_base.h"
#include "include/cef_client.h"
#include "jni_scoped_helpers.h"
#include "message_router_handler.h"
#include "window_handler.h"
// ClientHandler implementation.
class ClientHandler : public CefClient {
public:
ClientHandler(JNIEnv* env, jobject handler);
// CefClient methods
CefRefPtr<CefContextMenuHandler> GetContextMenuHandler() override;
CefRefPtr<CefDialogHandler> GetDialogHandler() override;
CefRefPtr<CefDisplayHandler> GetDisplayHandler() override;
CefRefPtr<CefDownloadHandler> GetDownloadHandler() override;
CefRefPtr<CefDragHandler> GetDragHandler() override;
CefRefPtr<CefFocusHandler> GetFocusHandler() override;
CefRefPtr<CefPermissionHandler> GetPermissionHandler() override;
CefRefPtr<CefJSDialogHandler> GetJSDialogHandler() override;
CefRefPtr<CefKeyboardHandler> GetKeyboardHandler() override;
CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() override;
CefRefPtr<CefLoadHandler> GetLoadHandler() override;
CefRefPtr<CefPrintHandler> GetPrintHandler() override;
CefRefPtr<CefRenderHandler> GetRenderHandler() override;
CefRefPtr<CefRequestHandler> GetRequestHandler() override;
bool OnProcessMessageReceived(CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame,
CefProcessId source_process,
CefRefPtr<CefProcessMessage> message) override;
// Additional handler for windowed rendering mode
CefRefPtr<WindowHandler> GetWindowHandler();
// Methods to deal with message router bindings
void AddMessageRouter(JNIEnv* env, jobject jmessageRouter);
void RemoveMessageRouter(JNIEnv* env, jobject jmessageRouter);
// Methods to set and remove a browser ref.
void OnAfterCreated();
void OnBeforeClose(CefRefPtr<CefBrowser> browser);
void OnBeforeBrowse(CefRefPtr<CefBrowser> browser, CefRefPtr<CefFrame> frame);
void OnRenderProcessTerminated(CefRefPtr<CefBrowser> browser);
jobject getBrowser(JNIEnv* env, CefRefPtr<CefBrowser> browser);
protected:
typedef std::set<CefRefPtr<CefBrowser>> BrowserSet;
BrowserSet GetAllBrowsers(JNIEnv* env);
template <class T>
CefRefPtr<T> GetHandler(const char* class_name);
ScopedJNIObjectGlobal handle_;
// The child browser window.
std::map<int, jobject> browserMap_;
using MessageRouterSet = std::set<CefRefPtr<CefMessageRouterBrowserSide>>;
MessageRouterSet message_routers_;
// Protects access to |message_routers_|.
base::Lock message_router_lock_;
// Include the default reference counting implementation.
IMPLEMENT_REFCOUNTING(ClientHandler);
};
#endif // JCEF_NATIVE_CLIENT_HANDLER_H_