3
3
#include " SchemeHandlerFactory.h"
4
4
#include " PrintHandler.h"
5
5
#include " RenderHandler.h"
6
+ #include " RequestHandler.h"
6
7
8
+ #include " include/base/cef_logging.h"
7
9
#include " include/wrapper/cef_helpers.h"
8
10
#include " include/base/cef_bind.h"
9
11
#include " include/wrapper/cef_closure_task.h"
10
12
11
13
namespace cefpdf {
12
14
13
- Client::Client (bool stopAfterLastJob) :
14
- m_storage (new Storage),
15
+ Client::Client () :
15
16
m_jobsManager (new job::Manager()),
16
17
m_processCount (0 ),
17
18
m_initialized (false ),
18
- m_stopAfterLastJob (stopAfterLastJob),
19
+ m_running (false ),
20
+ m_stopAfterLastJob (false ),
19
21
m_printHandler (new PrintHandler),
20
- m_renderHandler (new RenderHandler)
22
+ m_renderHandler (new RenderHandler),
23
+ m_requestHandler (new RequestHandler)
21
24
{
22
25
m_settings.no_sandbox = true ;
23
26
m_settings.windowless_rendering_enabled = true ;
24
27
m_settings.command_line_args_disabled = true ;
25
- m_settings.uncaught_exception_stack_size = 20 ;
26
28
27
29
m_windowInfo.windowless_rendering_enabled = true ;
28
30
m_windowInfo.transparent_painting_enabled = false ;
29
31
30
32
m_browserSettings.windowless_frame_rate = 1 ;
31
33
CefString (&m_browserSettings.default_encoding ).FromString (constants::encoding);
34
+ m_browserSettings.caret_browsing = STATE_DISABLED;
35
+ m_browserSettings.plugins = STATE_DISABLED;
32
36
m_browserSettings.javascript_open_windows = STATE_DISABLED;
33
37
m_browserSettings.javascript_close_windows = STATE_DISABLED;
34
- m_browserSettings.plugins = STATE_DISABLED;
35
38
}
36
39
37
- void Client::Run ()
40
+ int Client::ExecuteSubProcess (const CefMainArgs& mainArgs)
41
+ {
42
+ return CefExecuteProcess (mainArgs, this , NULL );
43
+ }
44
+
45
+ void Client::Initialize (const CefMainArgs& mainArgs)
38
46
{
39
47
DCHECK (!m_initialized);
40
- CefMainArgs mainArgs;
41
48
CefInitialize (mainArgs, m_settings, this , NULL );
42
- CefRunMessageLoop ();
49
+ m_initialized = true ;
50
+ }
51
+
52
+ void Client::Shutdown ()
53
+ {
54
+ DCHECK (m_initialized);
43
55
CefShutdown ();
44
56
m_initialized = false ;
45
57
}
46
58
47
- void Client::Stop ()
59
+ void Client::Run ()
48
60
{
49
61
DCHECK (m_initialized);
50
- CefQuitMessageLoop ();
51
- m_initialized = false ;
62
+ DCHECK (!m_running);
63
+ m_running = true ;
64
+ CefRunMessageLoop ();
65
+ m_running = false ;
66
+ Shutdown ();
67
+ }
68
+
69
+ void Client::Stop ()
70
+ {
71
+ if (m_running) {
72
+ CefQuitMessageLoop ();
73
+ } else if (m_initialized) {
74
+ Shutdown ();
75
+ }
52
76
}
53
77
54
78
void Client::PostJob (CefRefPtr<job::Job> job)
@@ -65,10 +89,6 @@ void Client::ProcessJobsQueue()
65
89
66
90
while (!m_jobsQueue.empty () && m_processCount < constants::maxProcesses) {
67
91
auto job = m_jobsQueue.front ();
68
- if (job->GetOutputPath ().empty ()) {
69
- job->SetOutputPath (m_storage->Reserve ());
70
- }
71
-
72
92
m_jobsManager->Queue (job);
73
93
m_jobsQueue.pop ();
74
94
++m_processCount;
@@ -90,6 +110,12 @@ void Client::OnRegisterCustomSchemes(CefRefPtr<CefSchemeRegistrar> registrar)
90
110
registrar->AddCustomScheme (constants::scheme, true , false , false );
91
111
}
92
112
113
+ void Client::OnBeforeCommandLineProcessing (const CefString& process_type, CefRefPtr<CefCommandLine> command_line)
114
+ {
115
+ command_line->AppendSwitch (" disable-gpu" );
116
+ command_line->AppendSwitch (" disable-gpu-compositing" );
117
+ };
118
+
93
119
// CefBrowserProcessHandler methods:
94
120
// -----------------------------------------------------------------------------
95
121
CefRefPtr<CefPrintHandler> Client::GetPrintHandler ()
@@ -130,6 +156,11 @@ CefRefPtr<CefRenderHandler> Client::GetRenderHandler()
130
156
return m_renderHandler;
131
157
}
132
158
159
+ CefRefPtr<CefRequestHandler> Client::GetRequestHandler ()
160
+ {
161
+ return m_requestHandler;
162
+ }
163
+
133
164
// CefLifeSpanHandler methods:
134
165
// -----------------------------------------------------------------------------
135
166
void Client::OnAfterCreated (CefRefPtr<CefBrowser> browser)
@@ -205,13 +236,8 @@ void Client::OnLoadError(
205
236
206
237
CEF_REQUIRE_UI_THREAD ();
207
238
208
- // Don't display an error for downloaded files.
209
- if (errorCode == ERR_ABORTED) {
210
- return ;
211
- }
212
-
213
239
if (frame->IsMain ()) {
214
- m_jobsManager->SetError (browser, errorCode);
240
+ m_jobsManager->Abort (browser, errorCode);
215
241
}
216
242
}
217
243
0 commit comments