Skip to content

Commit dee9aef

Browse files
alexeykuzminckerr
authored andcommitted
Add "enable_desktop_capturer" build flag (electron#13133)
* Make it possible to disable a module for a renderer * Put DesktopCapturer API under a build flag The name is "enable_desktop_capturer". Enabled by default.
1 parent 6ff111a commit dee9aef

File tree

11 files changed

+77
-16
lines changed

11 files changed

+77
-16
lines changed

BUILD.gn

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ declare_args() {
2424
electron_company_abbr = "github"
2525
electron_version = "0.0.0-dev"
2626

27+
enable_desktop_capturer = true
2728
enable_run_as_node = true
2829
enable_osr = true
2930
}
@@ -47,6 +48,9 @@ config("branding") {
4748

4849
config("features") {
4950
defines = []
51+
if (enable_desktop_capturer) {
52+
defines += [ "ENABLE_DESKTOP_CAPTURER=1" ]
53+
}
5054
if (enable_run_as_node) {
5155
defines += [ "ENABLE_RUN_AS_NODE=1" ]
5256
}

atom/common/api/features.cc

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@
77

88
namespace {
99

10+
bool IsDesktopCapturerEnabled() {
11+
#if defined(ENABLE_DESKTOP_CAPTURER)
12+
return true;
13+
#else
14+
return false;
15+
#endif
16+
}
17+
1018
bool IsOffscreenRenderingEnabled() {
1119
#if defined(ENABLE_OSR)
1220
return true;
@@ -28,6 +36,7 @@ void Initialize(v8::Local<v8::Object> exports,
2836
v8::Local<v8::Context> context,
2937
void* priv) {
3038
mate::Dictionary dict(context->GetIsolate(), exports);
39+
dict.SetMethod("isDesktopCapturerEnabled", &IsDesktopCapturerEnabled);
3140
dict.SetMethod("isOffscreenRenderingEnabled", &IsOffscreenRenderingEnabled);
3241
dict.SetMethod("isPDFViewerEnabled", &IsPDFViewerEnabled);
3342
}

atom/common/node_bindings.cc

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
V(atom_browser_browser_view) \
3434
V(atom_browser_content_tracing) \
3535
V(atom_browser_debugger) \
36-
V(atom_browser_desktop_capturer) \
3736
V(atom_browser_dialog) \
3837
V(atom_browser_download_item) \
3938
V(atom_browser_global_shortcut) \
@@ -69,6 +68,8 @@
6968
V(atom_browser_box_layout) \
7069
V(atom_browser_layout_manager)
7170

71+
#define ELECTRON_DESKTOP_CAPTURER_MODULE(V) V(atom_browser_desktop_capturer)
72+
7273
// This is used to load built-in modules. Instead of using
7374
// __attribute__((constructor)), we call the _register_<modname>
7475
// function for each built-in modules explicitly. This is only
@@ -79,6 +80,9 @@ ELECTRON_BUILTIN_MODULES(V)
7980
#if defined(ENABLE_VIEW_API)
8081
ELECTRON_VIEW_MODULES(V)
8182
#endif
83+
#if defined(ENABLE_DESKTOP_CAPTURER)
84+
ELECTRON_DESKTOP_CAPTURER_MODULE(V)
85+
#endif
8286
#undef V
8387

8488
namespace {
@@ -177,6 +181,9 @@ void NodeBindings::RegisterBuiltinModules() {
177181
#if defined(ENABLE_VIEW_API)
178182
ELECTRON_VIEW_MODULES(V)
179183
#endif
184+
#if defined(ENABLE_DESKTOP_CAPTURER)
185+
ELECTRON_DESKTOP_CAPTURER_MODULE(V)
186+
#endif
180187
#undef V
181188
}
182189

electron.gyp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@
2323
'<(source_root)/external_binaries',
2424
],
2525
}],
26+
['enable_desktop_capturer==1', {
27+
'defines': [
28+
'ENABLE_DESKTOP_CAPTURER',
29+
],
30+
}], # enable_desktop_capturer==1
2631
['enable_osr==1', {
2732
'defines': [
2833
'ENABLE_OSR',

features.gypi

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22
# If it looks stupid but it works it ain't stupid.
33
'variables': {
44
'variables': {
5+
'enable_desktop_capturer%': 1,
56
'enable_osr%': 1, # FIXME(alexeykuzmin)
67
'enable_pdf_viewer%': 0, # FIXME(deepak1556)
78
'enable_run_as_node%': 1,
89
'enable_view_api%': 0,
910
},
11+
'enable_desktop_capturer%': '<(enable_desktop_capturer)',
1012
'enable_osr%': '<(enable_osr)',
1113
'enable_pdf_viewer%': '<(enable_pdf_viewer)',
1214
'enable_run_as_node%': '<(enable_run_as_node)',

filenames.gypi

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
'lib/browser/api/web-contents.js',
4343
'lib/browser/api/web-contents-view.js',
4444
'lib/browser/chrome-extension.js',
45-
'lib/browser/desktop-capturer.js',
4645
'lib/browser/guest-view-manager.js',
4746
'lib/browser/guest-window-manager.js',
4847
'lib/browser/init.js',
@@ -75,7 +74,6 @@
7574
'lib/renderer/web-view/web-view.js',
7675
'lib/renderer/web-view/web-view-attributes.js',
7776
'lib/renderer/web-view/web-view-constants.js',
78-
'lib/renderer/api/desktop-capturer.js',
7977
'lib/renderer/api/exports/electron.js',
8078
'lib/renderer/api/ipc-renderer.js',
8179
'lib/renderer/api/module-list.js',
@@ -121,8 +119,6 @@
121119
'atom/browser/api/atom_api_cookies.h',
122120
'atom/browser/api/atom_api_debugger.cc',
123121
'atom/browser/api/atom_api_debugger.h',
124-
'atom/browser/api/atom_api_desktop_capturer.cc',
125-
'atom/browser/api/atom_api_desktop_capturer.h',
126122
'atom/browser/api/atom_api_dialog.cc',
127123
'atom/browser/api/atom_api_download_item.cc',
128124
'atom/browser/api/atom_api_download_item.h',
@@ -742,6 +738,16 @@
742738
'<(libchromiumcontent_src_dir)/ui/resources/cursors/zoom_out.cur',
743739
],
744740
}], # OS=="win"
741+
['enable_desktop_capturer==1', {
742+
'js_sources': [
743+
'lib/browser/desktop-capturer.js',
744+
'lib/renderer/api/desktop-capturer.js',
745+
],
746+
'lib_sources': [
747+
'atom/browser/api/atom_api_desktop_capturer.cc',
748+
'atom/browser/api/atom_api_desktop_capturer.h',
749+
],
750+
}], # enable_desktop_capturer
745751
['enable_osr==1', {
746752
'lib_sources': [
747753
'atom/browser/api/atom_api_web_contents_osr.cc',

lib/browser/init.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,8 +153,11 @@ app.setAppPath(packagePath)
153153
// Load the chrome extension support.
154154
require('./chrome-extension')
155155

156-
// Load internal desktop-capturer module.
157-
require('./desktop-capturer')
156+
const features = process.atomBinding('features')
157+
if (features.isDesktopCapturerEnabled()) {
158+
// Load internal desktop-capturer module.
159+
require('./desktop-capturer')
160+
}
158161

159162
// Load protocol module to ensure it is populated on app ready
160163
require('./api/protocol')

lib/renderer/api/exports/electron.js

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,18 @@ const moduleList = require('../module-list')
44
// Import common modules.
55
common.defineProperties(exports)
66

7-
for (const module of moduleList) {
8-
Object.defineProperty(exports, module.name, {
9-
enumerable: !module.private,
10-
get: () => require(`../${module.file}`)
7+
for (const {
8+
name,
9+
file,
10+
enabled = true,
11+
private: isPrivate = false
12+
} of moduleList) {
13+
if (!enabled) {
14+
continue
15+
}
16+
17+
Object.defineProperty(exports, name, {
18+
enumerable: !isPrivate,
19+
get: () => require(`../${file}`)
1120
})
1221
}

lib/renderer/api/module-list.js

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
1+
const features = process.atomBinding('features')
2+
13
// Renderer side modules, please sort alphabetically.
4+
// A module is `enabled` if there is no explicit condition defined.
25
module.exports = [
3-
{name: 'desktopCapturer', file: 'desktop-capturer'},
4-
{name: 'ipcRenderer', file: 'ipc-renderer'},
5-
{name: 'remote', file: 'remote'},
6-
{name: 'screen', file: 'screen'},
7-
{name: 'webFrame', file: 'web-frame'}
6+
{
7+
name: 'desktopCapturer',
8+
file: 'desktop-capturer',
9+
enabled: features.isDesktopCapturerEnabled()
10+
},
11+
{name: 'ipcRenderer', file: 'ipc-renderer', enabled: true},
12+
{name: 'remote', file: 'remote', enabled: true},
13+
{name: 'screen', file: 'screen', enabled: true},
14+
{name: 'webFrame', file: 'web-frame', enabled: true}
815
]

lib/sandboxed_renderer/api/exports/electron.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ Object.defineProperties(exports, {
3333
return require('../../../common/api/is-promise')
3434
}
3535
},
36+
// XXX(alexeykuzmin): It won't be available if the Desktop Capturer
37+
// was disabled during build time.
3638
desktopCapturer: {
3739
get: function () {
3840
return require('../../../renderer/api/desktop-capturer')

0 commit comments

Comments
 (0)