Skip to content

Commit 0f9a330

Browse files
committed
Merge branch 'devel'
2 parents 9ccb7e9 + 664fe90 commit 0f9a330

19 files changed

+438
-228
lines changed

CHANGELOG.md

+9
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,13 @@
11
Changelog
2+
===
3+
### 0.2.1 (2016-12-20)
4+
* Allow only specified schemes when in server mode (ie. block file:// access)
5+
* Added option to enable JavaScript --javascript
6+
* Added --file option to load file from command line
7+
* Disabled standard input (use --file instead)
8+
* Added --background option to print html backgrounds
9+
* Bulding with CEF 3.2883.1540.gedbfb20 / Chromium 55.0.2883.59 version (Windows & Linux, 64bit)
10+
211
===
312
### 0.2.0 (2016-11-29)
413
* Added HTTP server mode (use with --server flag)

src/Client.cpp

+48-22
Original file line numberDiff line numberDiff line change
@@ -3,52 +3,76 @@
33
#include "SchemeHandlerFactory.h"
44
#include "PrintHandler.h"
55
#include "RenderHandler.h"
6+
#include "RequestHandler.h"
67

8+
#include "include/base/cef_logging.h"
79
#include "include/wrapper/cef_helpers.h"
810
#include "include/base/cef_bind.h"
911
#include "include/wrapper/cef_closure_task.h"
1012

1113
namespace cefpdf {
1214

13-
Client::Client(bool stopAfterLastJob) :
14-
m_storage(new Storage),
15+
Client::Client() :
1516
m_jobsManager(new job::Manager()),
1617
m_processCount(0),
1718
m_initialized(false),
18-
m_stopAfterLastJob(stopAfterLastJob),
19+
m_running(false),
20+
m_stopAfterLastJob(false),
1921
m_printHandler(new PrintHandler),
20-
m_renderHandler(new RenderHandler)
22+
m_renderHandler(new RenderHandler),
23+
m_requestHandler(new RequestHandler)
2124
{
2225
m_settings.no_sandbox = true;
2326
m_settings.windowless_rendering_enabled = true;
2427
m_settings.command_line_args_disabled = true;
25-
m_settings.uncaught_exception_stack_size = 20;
2628

2729
m_windowInfo.windowless_rendering_enabled = true;
2830
m_windowInfo.transparent_painting_enabled = false;
2931

3032
m_browserSettings.windowless_frame_rate = 1;
3133
CefString(&m_browserSettings.default_encoding).FromString(constants::encoding);
34+
m_browserSettings.caret_browsing = STATE_DISABLED;
35+
m_browserSettings.plugins = STATE_DISABLED;
3236
m_browserSettings.javascript_open_windows = STATE_DISABLED;
3337
m_browserSettings.javascript_close_windows = STATE_DISABLED;
34-
m_browserSettings.plugins = STATE_DISABLED;
3538
}
3639

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)
3846
{
3947
DCHECK(!m_initialized);
40-
CefMainArgs mainArgs;
4148
CefInitialize(mainArgs, m_settings, this, NULL);
42-
CefRunMessageLoop();
49+
m_initialized = true;
50+
}
51+
52+
void Client::Shutdown()
53+
{
54+
DCHECK(m_initialized);
4355
CefShutdown();
4456
m_initialized = false;
4557
}
4658

47-
void Client::Stop()
59+
void Client::Run()
4860
{
4961
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+
}
5276
}
5377

5478
void Client::PostJob(CefRefPtr<job::Job> job)
@@ -65,10 +89,6 @@ void Client::ProcessJobsQueue()
6589

6690
while (!m_jobsQueue.empty() && m_processCount < constants::maxProcesses) {
6791
auto job = m_jobsQueue.front();
68-
if (job->GetOutputPath().empty()) {
69-
job->SetOutputPath(m_storage->Reserve());
70-
}
71-
7292
m_jobsManager->Queue(job);
7393
m_jobsQueue.pop();
7494
++m_processCount;
@@ -90,6 +110,12 @@ void Client::OnRegisterCustomSchemes(CefRefPtr<CefSchemeRegistrar> registrar)
90110
registrar->AddCustomScheme(constants::scheme, true, false, false);
91111
}
92112

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+
93119
// CefBrowserProcessHandler methods:
94120
// -----------------------------------------------------------------------------
95121
CefRefPtr<CefPrintHandler> Client::GetPrintHandler()
@@ -130,6 +156,11 @@ CefRefPtr<CefRenderHandler> Client::GetRenderHandler()
130156
return m_renderHandler;
131157
}
132158

159+
CefRefPtr<CefRequestHandler> Client::GetRequestHandler()
160+
{
161+
return m_requestHandler;
162+
}
163+
133164
// CefLifeSpanHandler methods:
134165
// -----------------------------------------------------------------------------
135166
void Client::OnAfterCreated(CefRefPtr<CefBrowser> browser)
@@ -205,13 +236,8 @@ void Client::OnLoadError(
205236

206237
CEF_REQUIRE_UI_THREAD();
207238

208-
// Don't display an error for downloaded files.
209-
if (errorCode == ERR_ABORTED) {
210-
return;
211-
}
212-
213239
if (frame->IsMain()) {
214-
m_jobsManager->SetError(browser, errorCode);
240+
m_jobsManager->Abort(browser, errorCode);
215241
}
216242
}
217243

src/Client.h

+36-10
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22
#define CLIENT_H_
33

44
#include "Job/Manager.h"
5-
#include "Storage.h"
5+
#include "RequestHandler.h"
66

77
#include "include/cef_app.h"
88
#include "include/cef_client.h"
99
#include "include/cef_browser.h"
1010

1111
#include <queue>
12+
#include <set>
1213

1314
namespace cefpdf {
1415

@@ -20,32 +21,55 @@ class Client : public CefApp,
2021
{
2122

2223
public:
23-
Client(bool stopAfterLastJob = false);
24+
Client();
2425
Client(const Client&) = delete;
2526
Client& operator=(const Client&) = delete;
2627

28+
// Execute subprocess, if any
29+
int ExecuteSubProcess(const CefMainArgs&);
30+
31+
// Initialize CEF
32+
void Initialize(const CefMainArgs&);
33+
34+
// De-initialize CEF
35+
void Shutdown();
36+
2737
// Run message loop
28-
virtual void Run();
38+
void Run();
2939

30-
// Stop message loop
40+
// Stop message loop and/or shutdown CEF
3141
void Stop();
3242

3343
// Add new job to the queue and process it
3444
void PostJob(CefRefPtr<job::Job> job);
3545

36-
// Get Storage object
37-
CefRefPtr<Storage> GetStorage() {
38-
return m_storage;
39-
};
40-
4146
// Get the number of running job processes
4247
unsigned int GetProcessCount() {
4348
return m_processCount;
4449
};
4550

51+
void SetStopAfterLastJob(bool flag) {
52+
m_stopAfterLastJob = flag;
53+
};
54+
55+
void SetDisableJavaScript(bool flag) {
56+
m_browserSettings.javascript = flag ? STATE_DISABLED : STATE_ENABLED;
57+
};
58+
59+
void SetAllowedSchemes(const std::set<std::string>& schemes) {
60+
for (auto s: schemes) {
61+
m_requestHandler->AddAllowedScheme(s);
62+
}
63+
};
64+
65+
void ClearAllowedSchemes() {
66+
m_requestHandler->ClearAllowedSchemes();
67+
};
68+
4669
// CefApp methods:
4770
virtual CefRefPtr<CefBrowserProcessHandler> GetBrowserProcessHandler() override;
4871
virtual void OnRegisterCustomSchemes(CefRefPtr<CefSchemeRegistrar> registrar) override;
72+
virtual void OnBeforeCommandLineProcessing(const CefString& process_type, CefRefPtr<CefCommandLine> command_line) override;
4973

5074
// CefBrowserProcessHandler methods:
5175
virtual CefRefPtr<CefPrintHandler> GetPrintHandler() override;
@@ -56,6 +80,7 @@ class Client : public CefApp,
5680
virtual CefRefPtr<CefLifeSpanHandler> GetLifeSpanHandler() override;
5781
virtual CefRefPtr<CefLoadHandler> GetLoadHandler() override;
5882
virtual CefRefPtr<CefRenderHandler> GetRenderHandler() override;
83+
virtual CefRefPtr<CefRequestHandler> GetRequestHandler() override;
5984

6085
// CefLifeSpanHandler methods:
6186
virtual void OnAfterCreated(CefRefPtr<CefBrowser> browser) override;
@@ -84,18 +109,19 @@ class Client : public CefApp,
84109
private:
85110
void ProcessJobsQueue();
86111
std::queue<CefRefPtr<job::Job>> m_jobsQueue;
87-
CefRefPtr<Storage> m_storage;
88112

89113
CefSettings m_settings;
90114
CefWindowInfo m_windowInfo;
91115
CefBrowserSettings m_browserSettings;
92116
CefRefPtr<job::Manager> m_jobsManager;
93117
unsigned int m_processCount;
94118
bool m_initialized;
119+
bool m_running;
95120
bool m_stopAfterLastJob;
96121

97122
CefRefPtr<CefPrintHandler> m_printHandler;
98123
CefRefPtr<CefRenderHandler> m_renderHandler;
124+
CefRefPtr<RequestHandler> m_requestHandler;
99125

100126
// Include the default reference counting implementation.
101127
IMPLEMENT_REFCOUNTING(Client);

0 commit comments

Comments
 (0)