X-Git-Url: https://git.sesse.net/?p=nageru;a=blobdiff_plain;f=cef_capture.cpp;fp=cef_capture.cpp;h=76c5c7f753c8630ff6a796de58ac660daff65bf1;hp=1836eb88f9cf474b9cc5c4287b3b7c011f39ac4c;hb=a1fac4049d79171dc40f0cd416c1358fd4dc2d3c;hpb=d2b7a14762114df65293f18a95ecb595ec9e39a8 diff --git a/cef_capture.cpp b/cef_capture.cpp index 1836eb8..76c5c7f 100644 --- a/cef_capture.cpp +++ b/cef_capture.cpp @@ -52,6 +52,7 @@ void CEFCapture::post_to_cef_ui_thread(std::function &&func) void CEFCapture::set_url(const string &url) { post_to_cef_ui_thread([this, url] { + loaded = false; browser->GetMainFrame()->LoadURL(url); }); } @@ -74,9 +75,13 @@ void CEFCapture::set_max_fps(int max_fps) void CEFCapture::execute_javascript_async(const string &js) { post_to_cef_ui_thread([this, js] { - CefString script_url(""); - int start_line = 1; - browser->GetMainFrame()->ExecuteJavaScript(js, script_url, start_line); + if (loaded) { + CefString script_url(""); + int start_line = 1; + browser->GetMainFrame()->ExecuteJavaScript(js, script_url, start_line); + } else { + deferred_javascript.push_back(js); + } }); } @@ -106,6 +111,19 @@ void CEFCapture::OnPaint(const void *buffer, int width, int height) FrameAllocator::Frame(), 0, AudioFormat()); } +void CEFCapture::OnLoadEnd() +{ + post_to_cef_ui_thread([this] { + loaded = true; + for (const string &js : deferred_javascript) { + CefString script_url(""); + int start_line = 1; + browser->GetMainFrame()->ExecuteJavaScript(js, script_url, start_line); + } + deferred_javascript.clear(); + }); +} + #define FRAME_SIZE (8 << 20) // 8 MB. void CEFCapture::configure_card() @@ -199,3 +217,8 @@ bool NageruCEFClient::GetViewRect(CefRefPtr browser, CefRect &rect) rect = CefRect(0, 0, width, height); return true; } + +void NageruCEFClient::OnLoadEnd(CefRefPtr browser, CefRefPtr frame, int httpStatusCode) +{ + parent->OnLoadEnd(); +}