/****************************************************************************** Copyright (C) 2014 by John R. Bradley Copyright (C) 2023 by Lain Bailey This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . ******************************************************************************/ #pragma once #include #include #include "cef-headers.hpp" #include "obs-browser-source.hpp" struct BrowserSource; class BrowserClient : public CefClient, public CefDisplayHandler, public CefLifeSpanHandler, public CefRequestHandler, public CefResourceRequestHandler, public CefContextMenuHandler, public CefRenderHandler, public CefAudioHandler, public CefLoadHandler { bool sharing_available = false; bool reroute_audio = true; ControlLevel webpage_control_level = DEFAULT_CONTROL_LEVEL; inline bool valid() const; void UpdateExtraTexture(); public: BrowserSource *bs; CefRect popupRect; CefRect originalPopupRect; int sample_rate; int channels; ChannelLayout channel_layout; int frames_per_buffer; inline BrowserClient(BrowserSource *bs_, bool sharing_avail, bool reroute_audio_, ControlLevel webpage_control_level_) : sharing_available(sharing_avail), reroute_audio(reroute_audio_), webpage_control_level(webpage_control_level_), bs(bs_) { } /* CefClient */ virtual CefRefPtr GetLoadHandler() override; virtual CefRefPtr GetRenderHandler() override; virtual CefRefPtr GetDisplayHandler() override; virtual CefRefPtr GetLifeSpanHandler() override; virtual CefRefPtr GetRequestHandler() override; virtual CefRefPtr GetContextMenuHandler() override; virtual CefRefPtr GetAudioHandler() override; virtual bool OnProcessMessageReceived(CefRefPtr browser, CefRefPtr frame, CefProcessId source_process, CefRefPtr message) override; /* CefDisplayHandler */ virtual bool OnConsoleMessage(CefRefPtr browser, cef_log_severity_t level, const CefString &message, const CefString &source, int line) override; virtual bool OnTooltip(CefRefPtr browser, CefString &text) override; /* CefLifeSpanHandler */ virtual bool OnBeforePopup(CefRefPtr browser, CefRefPtr frame, #if CHROME_VERSION_BUILD >= 6834 int popup_id, #endif const CefString &target_url, const CefString &target_frame_name, cef_window_open_disposition_t target_disposition, bool user_gesture, const CefPopupFeatures &popupFeatures, CefWindowInfo &windowInfo, CefRefPtr &client, CefBrowserSettings &settings, CefRefPtr &extra_info, bool *no_javascript_access) override; /* CefRequestHandler */ virtual CefRefPtr GetResourceRequestHandler(CefRefPtr browser, CefRefPtr frame, CefRefPtr request, bool is_navigation, bool is_download, const CefString &request_initiator, bool &disable_default_handling) override; virtual void OnRenderProcessTerminated(CefRefPtr browser, TerminationStatus status #if CHROME_VERSION_BUILD >= 6367 , int error_code, const CefString &error_string #endif ) override; /* CefResourceRequestHandler */ virtual CefResourceRequestHandler::ReturnValue OnBeforeResourceLoad(CefRefPtr browser, CefRefPtr frame, CefRefPtr request, CefRefPtr callback) override; /* CefContextMenuHandler */ virtual void OnBeforeContextMenu(CefRefPtr browser, CefRefPtr frame, CefRefPtr params, CefRefPtr model) override; /* CefRenderHandler */ virtual void GetViewRect(CefRefPtr browser, CefRect &rect) override; virtual void OnPaint(CefRefPtr browser, PaintElementType type, const RectList &dirtyRects, const void *buffer, int width, int height) override; #ifdef ENABLE_BROWSER_SHARED_TEXTURE virtual void OnAcceleratedPaint(CefRefPtr browser, PaintElementType type, const RectList &dirtyRects, #if CHROME_VERSION_BUILD >= 6367 const CefAcceleratedPaintInfo &info) override; #else void *shared_handle) override; #endif #ifdef CEF_ON_ACCELERATED_PAINT2 virtual void OnAcceleratedPaint2(CefRefPtr browser, PaintElementType type, const RectList &dirtyRects, void *shared_handle, bool new_texture) override; #endif #endif virtual void OnAudioStreamPacket(CefRefPtr browser, const float **data, int frames, int64_t pts) override; virtual void OnAudioStreamStopped(CefRefPtr browser) override; virtual void OnAudioStreamStarted(CefRefPtr browser, const CefAudioParameters ¶ms, int channels) override; virtual void OnAudioStreamError(CefRefPtr browser, const CefString &message) override; const int kFramesPerBuffer = 1024; virtual bool GetAudioParameters(CefRefPtr browser, CefAudioParameters ¶ms) override; /* CefLoadHandler */ virtual void OnLoadEnd(CefRefPtr browser, CefRefPtr frame, int httpStatusCode) override; virtual void OnLoadError(CefRefPtr browser, CefRefPtr frame, CefLoadHandler::ErrorCode errorCode, const CefString &errorText, const CefString &failedUrl) override; IMPLEMENT_REFCOUNTING(BrowserClient); };