#ifndef _ClinetHandler_h #define _ClinetHandler_h #include #undef LOG #undef DLOG #undef CHECK #undef LOG_INFO #undef LOG_WARNING #undef ITEM #include "include/cef_client.h" #include "include/cef_version.h" #ifndef CHROME_VERSION_BUILD #error "Unknown CEF version" #endif class ClientHandler : public CefClient, public CefLifeSpanHandler, public CefDisplayHandler, public CefLoadHandler, public CefFocusHandler, public CefContextMenuHandler, public CefJSDialogHandler, public CefRequestHandler { public: typedef ClientHandler CLASSNAME; ClientHandler( Upp::Callback1 & wuc, Upp::Callback3 & wsc, Upp::Callback2&> & wm, Upp::Callback & tf, Upp::Callback & gf, Upp::Callback1 & wk, Upp::Callback3 & wcm, Upp::Gate1 & wce): browser(nullptr), WhenUrlChange(wuc), WhenStateChange(wsc), WhenMessage(wm), WhenTakeFocus(tf), WhenGotFocus(gf), WhenKeyboard(wk), WhenConsoleMessage(wcm), WhenCertificateError(wce) { } ~ClientHandler() { } const Upp::Callback1 & WhenUrlChange; const Upp::Callback3 & WhenStateChange; const Upp::Callback2&> & WhenMessage; const Upp::Callback & WhenTakeFocus; const Upp::Callback & WhenGotFocus; const Upp::Callback1 & WhenKeyboard; const Upp::Callback3 & WhenConsoleMessage; const Upp::Gate1 & WhenCertificateError; void WhenMessageWrapper(Upp::String name, Upp::Vector * par); virtual CefRefPtr GetLifeSpanHandler() OVERRIDE { return this; } virtual CefRefPtr GetDisplayHandler() OVERRIDE { return this; } virtual CefRefPtr GetFocusHandler() OVERRIDE { return this; } virtual CefRefPtr GetLoadHandler() OVERRIDE { return this; } virtual CefRefPtr GetContextMenuHandler() OVERRIDE { return this; } virtual CefRefPtr GetJSDialogHandler() OVERRIDE { return this; } virtual CefRefPtr GetRequestHandler() OVERRIDE { return this; } virtual bool OnBeforePopup(CefRefPtr browser, CefRefPtr frame, const CefString& target_url, const CefString& target_frame_name, CefLifeSpanHandler::WindowOpenDisposition target_disposition, bool user_gesture, const CefPopupFeatures& popupFeatures, CefWindowInfo& windowInfo, CefRefPtr& client, CefBrowserSettings& settings, bool* no_javascript_access) OVERRIDE; virtual void OnLoadError(CefRefPtr browser, CefRefPtr frame, ErrorCode errorCode, const CefString& errorText, const CefString& failedUrl) OVERRIDE; virtual void OnAfterCreated(CefRefPtr browser) OVERRIDE; virtual void OnAddressChange(CefRefPtr browser, CefRefPtr frame, const CefString& url) OVERRIDE; virtual void OnLoadingStateChange(CefRefPtr browser, bool isLoading, bool canGoBack, bool canGoForward) OVERRIDE; virtual bool OnConsoleMessage(CefRefPtr browser, const CefString& message, const CefString& source, int line) OVERRIDE; virtual bool OnProcessMessageReceived(CefRefPtr browser, CefProcessId source_process, CefRefPtr message) OVERRIDE; virtual void OnTakeFocus( CefRefPtr browser, bool next ) OVERRIDE; virtual void OnGotFocus(CefRefPtr browser) OVERRIDE; virtual void OnBeforeContextMenu(CefRefPtr browser, CefRefPtr frame, CefRefPtr params, CefRefPtr model) OVERRIDE; virtual bool OnJSDialog(CefRefPtr browser, const CefString& origin_url, #if CHROME_VERSION_BUILD < 2704 const CefString& accept_lang, #endif JSDialogType dialog_type, const CefString& message_text, const CefString& default_prompt_text, CefRefPtr callback, bool& suppress_message) OVERRIDE; virtual bool OnCertificateError(CefRefPtr browser, ErrorCode cert_error, const CefString& request_url, CefRefPtr ssl_info, CefRefPtr callback) OVERRIDE; CefRefPtr GetBrowser() { return browser; } protected: // The child browser window CefRefPtr browser; // Note that any of the IMPLEMENT_WHATEVER // macros that come with CEF can (and do) set // access modifiers, so you'll want them after // everything else in your class or you may be // in for a surprise when the access of a member // isn't what you expect it to be! IMPLEMENT_REFCOUNTING(ClientHandler); }; #endif