command_line->AppendSwitch("enable-begin-frame-scheduling");
}
-void NageruCefApp::OnBrowserDestroyed(CefRefPtr<CefBrowser> browser)
-{
- lock_guard<mutex> lock(cef_mutex);
- pending_browsers.erase(browser.get());
- browser_closed_cond.notify_all();
-}
-
void NageruCefApp::initialize_cef()
{
unique_lock<mutex> lock(cef_mutex);
void NageruCefApp::close_browser(CefRefPtr<CefBrowser> browser)
{
unique_lock<mutex> lock(cef_mutex);
- CefBrowser *raw_ptr = browser.get();
- pending_browsers.insert(raw_ptr);
browser->GetHost()->CloseBrowser(/*force_close=*/true);
- browser = nullptr;
- browser_closed_cond.wait(lock, [this, raw_ptr]{ return pending_browsers.count(raw_ptr) != 0; });
}
void NageruCefApp::unref_cef()
void OnBeforeCommandLineProcessing(const CefString& process_type, CefRefPtr<CefCommandLine> command_line);
- void OnBrowserDestroyed(CefRefPtr<CefBrowser> browser) override;
-
private:
void cef_thread_func();
int cef_thread_refcount = 0; // Under <cef_mutex>.
bool cef_initialized = false; // Under <cef_mutex>.
std::condition_variable cef_initialized_cond;
- std::unordered_set<CefBrowser *> pending_browsers; // Under <cef_mutex>.
- std::condition_variable browser_closed_cond;
IMPLEMENT_REFCOUNTING(NageruCefApp);
};