]> git.sesse.net Git - nageru/blob - nageru/nageru_cef_app.cpp
IWYU-fix nageru/*.cpp.
[nageru] / nageru / nageru_cef_app.cpp
1 #include <cef_app.h>
2 #include <cef_browser.h>
3 #include <cef_command_line.h>
4 #include <cef_task.h>
5 #include <QTimer>
6 #include <QWidget>
7 #include <mutex>
8 #include <thread>
9
10 #include "nageru_cef_app.h"
11
12 using namespace std;
13
14 void NageruCefApp::OnBeforeCommandLineProcessing(
15         const CefString& process_type,
16         CefRefPtr<CefCommandLine> command_line)
17 {
18         command_line->AppendSwitch("disable-gpu");
19         command_line->AppendSwitch("disable-gpu-compositing");
20         command_line->AppendSwitch("enable-begin-frame-scheduling");
21
22         // https://bitbucket.org/chromiumembedded/cef/issues/2717/xmlhttprequest-empty-responsetext
23         command_line->AppendSwitch("disable-web-security");
24 }
25
26 void NageruCefApp::initialize_cef()
27 {
28         unique_lock<mutex> lock(cef_mutex);
29         if (cef_thread_refcount++ == 0) {
30                 cef_thread = thread(&NageruCefApp::cef_thread_func, this);
31         }
32         cef_initialized_cond.wait(lock, [this]{ return cef_initialized; });
33 }
34
35 void NageruCefApp::close_browser(CefRefPtr<CefBrowser> browser)
36 {
37         lock_guard<mutex> lock(cef_mutex);
38         browser->GetHost()->CloseBrowser(/*force_close=*/true);
39 }
40
41 void NageruCefApp::unref_cef()
42 {
43         unique_lock<mutex> lock(cef_mutex);
44         if (--cef_thread_refcount == 0) {
45                 CefPostTask(TID_UI, new CEFTaskAdapter(&CefQuitMessageLoop));
46                 lock.unlock();
47                 cef_thread.join();
48         }
49 }
50
51 void NageruCefApp::cef_thread_func()
52 {
53         CefMainArgs main_args;
54         CefSettings settings;
55         //settings.log_severity = LOGSEVERITY_VERBOSE;
56         settings.windowless_rendering_enabled = true;
57         settings.no_sandbox = true;
58         settings.command_line_args_disabled = false;
59         CefInitialize(main_args, settings, this, nullptr);
60
61         {
62                 lock_guard<mutex> lock(cef_mutex);
63                 cef_initialized = true;
64         }
65         cef_initialized_cond.notify_all();
66
67         CefRunMessageLoop();
68
69         CefShutdown();
70 }
71