X-Git-Url: https://git.sesse.net/?p=nageru;a=blobdiff_plain;f=cef_capture.h;fp=cef_capture.h;h=c497179d72e127077e4abb193e34f720ed7ea141;hp=11cdc33f76450daace314004c5c63a8e42c81992;hb=a1fac4049d79171dc40f0cd416c1358fd4dc2d3c;hpb=d2b7a14762114df65293f18a95ecb595ec9e39a8 diff --git a/cef_capture.h b/cef_capture.h index 11cdc33..c497179 100644 --- a/cef_capture.h +++ b/cef_capture.h @@ -17,6 +17,7 @@ #include #include #include +#include #undef CHECK #include @@ -31,7 +32,7 @@ class CEFCapture; // A helper class for CEFCapture to proxy information to CEF, without becoming // CEF-refcounted itself. -class NageruCEFClient : public CefClient, public CefRenderHandler +class NageruCEFClient : public CefClient, public CefRenderHandler, public CefLoadHandler { public: NageruCEFClient(int width, int height, CEFCapture *parent) @@ -42,10 +43,21 @@ public: return this; } + CefRefPtr GetLoadHandler() override + { + return this; + } + + // CefRenderHandler. + void OnPaint(CefRefPtr browser, PaintElementType type, const RectList &dirtyRects, const void *buffer, int width, int height) override; bool GetViewRect(CefRefPtr browser, CefRect &rect); + // CefLoadHandler. + + void OnLoadEnd(CefRefPtr browser, CefRefPtr frame, int httpStatusCode) override; + private: int width, height; CEFCapture *parent; @@ -76,6 +88,8 @@ public: void OnPaint(const void *buffer, int width, int height); + void OnLoadEnd(); + // CaptureInterface. void set_video_frame_allocator(bmusb::FrameAllocator *allocator) override { @@ -173,6 +187,14 @@ private: // Tasks waiting for to get ready. Under . std::vector> deferred_tasks; + // Whether the last set_url() (includes the implicit one in the constructor) + // has loaded yet. Accessed from the CEF thread only. + bool loaded = false; + + // JavaScript waiting for the first page (well, any page) to have loaded. + // Accessed from the CEF thread only. + std::vector deferred_javascript; + int timecode = 0; };