// 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 #include #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 GetContextMenuHandler() override; CefRefPtr GetDialogHandler() override; CefRefPtr GetDisplayHandler() override; CefRefPtr GetDownloadHandler() override; CefRefPtr GetDragHandler() override; CefRefPtr GetFocusHandler() override; CefRefPtr GetJSDialogHandler() override; CefRefPtr GetKeyboardHandler() override; CefRefPtr GetLifeSpanHandler() override; CefRefPtr GetLoadHandler() override; CefRefPtr GetPrintHandler() override; CefRefPtr GetRenderHandler() override; CefRefPtr GetRequestHandler() override; bool OnProcessMessageReceived(CefRefPtr browser, CefRefPtr frame, CefProcessId source_process, CefRefPtr message) override; // Additional handler for windowed rendering mode CefRefPtr 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 browser); void OnBeforeBrowse(CefRefPtr browser, CefRefPtr frame); void OnRenderProcessTerminated(CefRefPtr browser); jobject getBrowser(JNIEnv* env, CefRefPtr browser); protected: typedef std::set> BrowserSet; BrowserSet GetAllBrowsers(JNIEnv* env); template CefRefPtr GetHandler(const char* class_name); ScopedJNIObjectGlobal handle_; // The child browser window. std::map browserMap_; using MessageRouterSet = std::set>; 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_