Merge pull request #3848 from atom/no-sync-message-on-start
Remove usages of synchronous messages on startup
This commit is contained in:
commit
fe016d393f
11 changed files with 55 additions and 43 deletions
|
@ -1,7 +1,9 @@
|
||||||
# Import common modules.
|
common = require '../../../../common/api/lib/exports/electron'
|
||||||
module.exports = require '../../../../common/api/lib/exports/electron'
|
|
||||||
|
|
||||||
Object.defineProperties module.exports,
|
# Import common modules.
|
||||||
|
common.defineProperties exports
|
||||||
|
|
||||||
|
Object.defineProperties exports,
|
||||||
# Browser side modules, please sort with alphabet order.
|
# Browser side modules, please sort with alphabet order.
|
||||||
app:
|
app:
|
||||||
enumerable: true
|
enumerable: true
|
||||||
|
|
|
@ -30,12 +30,13 @@ createGuest = (embedder, url, frameName, options) ->
|
||||||
guest.loadURL url
|
guest.loadURL url
|
||||||
return guest.id
|
return guest.id
|
||||||
|
|
||||||
|
# Remember the embedder window's id.
|
||||||
|
options.webPreferences ?= {}
|
||||||
|
options.webPreferences.openerId = BrowserWindow.fromWebContents(embedder)?.id
|
||||||
|
|
||||||
guest = new BrowserWindow(options)
|
guest = new BrowserWindow(options)
|
||||||
guest.loadURL url
|
guest.loadURL url
|
||||||
|
|
||||||
# Remember the embedder, will be used by window.opener methods.
|
|
||||||
v8Util.setHiddenValue guest.webContents, 'embedder', embedder
|
|
||||||
|
|
||||||
# When |embedder| is destroyed we should also destroy attached guest, and if
|
# When |embedder| is destroyed we should also destroy attached guest, and if
|
||||||
# guest is closed by user then we should prevent |embedder| from double
|
# guest is closed by user then we should prevent |embedder| from double
|
||||||
# closing guest.
|
# closing guest.
|
||||||
|
@ -83,10 +84,3 @@ ipcMain.on 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WINDOW_POSTMESSAGE', (event, guestId
|
||||||
|
|
||||||
ipcMain.on 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WEB_CONTENTS_METHOD', (event, guestId, method, args...) ->
|
ipcMain.on 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WEB_CONTENTS_METHOD', (event, guestId, method, args...) ->
|
||||||
BrowserWindow.fromId(guestId)?.webContents?[method] args...
|
BrowserWindow.fromId(guestId)?.webContents?[method] args...
|
||||||
|
|
||||||
ipcMain.on 'ATOM_SHELL_GUEST_WINDOW_MANAGER_GET_OPENER_ID', (event) ->
|
|
||||||
embedder = v8Util.getHiddenValue event.sender, 'embedder'
|
|
||||||
openerId = null
|
|
||||||
if embedder?
|
|
||||||
openerId = BrowserWindow.fromWebContents(embedder)?.id
|
|
||||||
event.returnValue = openerId
|
|
||||||
|
|
|
@ -219,9 +219,6 @@ ipcMain.on 'ATOM_BROWSER_GUEST_WEB_CONTENTS', (event, guestInstanceId) ->
|
||||||
catch e
|
catch e
|
||||||
event.returnValue = exceptionToMeta e
|
event.returnValue = exceptionToMeta e
|
||||||
|
|
||||||
ipcMain.on 'ATOM_BROWSER_LIST_MODULES', (event) ->
|
|
||||||
event.returnValue = (name for name of electron)
|
|
||||||
|
|
||||||
ipcMain.on 'ATOM_BROWSER_ASYNC_CALL_TO_GUEST_VIEW', (event, guestInstanceId, method, args...) ->
|
ipcMain.on 'ATOM_BROWSER_ASYNC_CALL_TO_GUEST_VIEW', (event, guestInstanceId, method, args...) ->
|
||||||
try
|
try
|
||||||
guestViewManager = require './guest-view-manager'
|
guestViewManager = require './guest-view-manager'
|
||||||
|
|
|
@ -132,6 +132,12 @@ void WebContentsPreferences::AppendExtraCommandLineSwitches(
|
||||||
if (web_preferences.GetInteger(options::kGuestInstanceID, &guest_instance_id))
|
if (web_preferences.GetInteger(options::kGuestInstanceID, &guest_instance_id))
|
||||||
command_line->AppendSwitchASCII(switches::kGuestInstanceID,
|
command_line->AppendSwitchASCII(switches::kGuestInstanceID,
|
||||||
base::IntToString(guest_instance_id));
|
base::IntToString(guest_instance_id));
|
||||||
|
|
||||||
|
// Pass the opener's window id.
|
||||||
|
int opener_id;
|
||||||
|
if (web_preferences.GetInteger(options::kOpenerID, &opener_id))
|
||||||
|
command_line->AppendSwitchASCII(switches::kOpenerID,
|
||||||
|
base::IntToString(opener_id));
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
|
|
|
@ -5,23 +5,25 @@ exports.hideInternalModules = ->
|
||||||
# Remove the "common/api/lib" and "browser-or-renderer/api/lib".
|
# Remove the "common/api/lib" and "browser-or-renderer/api/lib".
|
||||||
globalPaths.splice 0, 2
|
globalPaths.splice 0, 2
|
||||||
|
|
||||||
Object.defineProperties exports,
|
# Attaches properties to |exports|.
|
||||||
# Common modules, please sort with alphabet order.
|
exports.defineProperties = (exports) ->
|
||||||
clipboard:
|
Object.defineProperties exports,
|
||||||
# Must be enumerable, otherwise it woulde be invisible to remote module.
|
# Common modules, please sort with alphabet order.
|
||||||
enumerable: true
|
clipboard:
|
||||||
get: -> require '../clipboard'
|
# Must be enumerable, otherwise it woulde be invisible to remote module.
|
||||||
crashReporter:
|
enumerable: true
|
||||||
enumerable: true
|
get: -> require '../clipboard'
|
||||||
get: -> require '../crash-reporter'
|
crashReporter:
|
||||||
nativeImage:
|
enumerable: true
|
||||||
enumerable: true
|
get: -> require '../crash-reporter'
|
||||||
get: -> require '../native-image'
|
nativeImage:
|
||||||
shell:
|
enumerable: true
|
||||||
enumerable: true
|
get: -> require '../native-image'
|
||||||
get: -> require '../shell'
|
shell:
|
||||||
# The internal modules, invisible unless you know their names.
|
enumerable: true
|
||||||
CallbacksRegistry:
|
get: -> require '../shell'
|
||||||
get: -> require '../callbacks-registry'
|
# The internal modules, invisible unless you know their names.
|
||||||
deprecate:
|
CallbacksRegistry:
|
||||||
get: -> require '../deprecate'
|
get: -> require '../callbacks-registry'
|
||||||
|
deprecate:
|
||||||
|
get: -> require '../deprecate'
|
||||||
|
|
|
@ -91,6 +91,9 @@ const char kPageVisibility[] = "pageVisibility";
|
||||||
// Enable DirectWrite on Windows.
|
// Enable DirectWrite on Windows.
|
||||||
const char kDirectWrite[] = "directWrite";
|
const char kDirectWrite[] = "directWrite";
|
||||||
|
|
||||||
|
// Opener window's ID.
|
||||||
|
const char kOpenerID[] = "openerId";
|
||||||
|
|
||||||
// Web runtime features.
|
// Web runtime features.
|
||||||
const char kExperimentalFeatures[] = "experimentalFeatures";
|
const char kExperimentalFeatures[] = "experimentalFeatures";
|
||||||
const char kExperimentalCanvasFeatures[] = "experimentalCanvasFeatures";
|
const char kExperimentalCanvasFeatures[] = "experimentalCanvasFeatures";
|
||||||
|
@ -143,6 +146,7 @@ const char kExperimentalCanvasFeatures[] = "experimental-canvas-features";
|
||||||
const char kOverlayScrollbars[] = "overlay-scrollbars";
|
const char kOverlayScrollbars[] = "overlay-scrollbars";
|
||||||
const char kSharedWorker[] = "shared-worker";
|
const char kSharedWorker[] = "shared-worker";
|
||||||
const char kPageVisibility[] = "page-visiblity";
|
const char kPageVisibility[] = "page-visiblity";
|
||||||
|
const char kOpenerID[] = "opener-id";
|
||||||
|
|
||||||
} // namespace switches
|
} // namespace switches
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,7 @@ extern const char kExperimentalCanvasFeatures[];
|
||||||
extern const char kOverlayScrollbars[];
|
extern const char kOverlayScrollbars[];
|
||||||
extern const char kSharedWorker[];
|
extern const char kSharedWorker[];
|
||||||
extern const char kPageVisibility[];
|
extern const char kPageVisibility[];
|
||||||
|
extern const char kOpenerID[];
|
||||||
|
|
||||||
} // namespace options
|
} // namespace options
|
||||||
|
|
||||||
|
@ -81,6 +82,7 @@ extern const char kExperimentalCanvasFeatures[];
|
||||||
extern const char kOverlayScrollbars[];
|
extern const char kOverlayScrollbars[];
|
||||||
extern const char kSharedWorker[];
|
extern const char kSharedWorker[];
|
||||||
extern const char kPageVisibility[];
|
extern const char kPageVisibility[];
|
||||||
|
extern const char kOpenerID[];
|
||||||
|
|
||||||
} // namespace switches
|
} // namespace switches
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
# Import common modules.
|
common = require '../../../../common/api/lib/exports/electron'
|
||||||
module.exports = require '../../../../common/api/lib/exports/electron'
|
|
||||||
|
|
||||||
Object.defineProperties module.exports,
|
# Import common modules.
|
||||||
|
common.defineProperties exports
|
||||||
|
|
||||||
|
Object.defineProperties exports,
|
||||||
# Renderer side modules, please sort with alphabet order.
|
# Renderer side modules, please sort with alphabet order.
|
||||||
desktopCapturer:
|
desktopCapturer:
|
||||||
enumerable: true
|
enumerable: true
|
||||||
|
|
|
@ -126,9 +126,9 @@ ipcRenderer.on 'ATOM_RENDERER_RELEASE_CALLBACK', (event, id) ->
|
||||||
callbacksRegistry.remove id
|
callbacksRegistry.remove id
|
||||||
|
|
||||||
# List all built-in modules in browser process.
|
# List all built-in modules in browser process.
|
||||||
browserModules = ipcRenderer.sendSync 'ATOM_BROWSER_LIST_MODULES'
|
browserModules = require '../../../browser/api/lib/exports/electron'
|
||||||
# And add a helper receiver for each one.
|
# And add a helper receiver for each one.
|
||||||
for name in browserModules
|
for name of browserModules
|
||||||
do (name) ->
|
do (name) ->
|
||||||
Object.defineProperty exports, name, get: -> exports.getBuiltin name
|
Object.defineProperty exports, name, get: -> exports.getBuiltin name
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,9 @@ for arg in process.argv
|
||||||
if arg.indexOf('--guest-instance-id=') == 0
|
if arg.indexOf('--guest-instance-id=') == 0
|
||||||
# This is a guest web view.
|
# This is a guest web view.
|
||||||
process.guestInstanceId = parseInt arg.substr(arg.indexOf('=') + 1)
|
process.guestInstanceId = parseInt arg.substr(arg.indexOf('=') + 1)
|
||||||
|
else if arg.indexOf('--opener-id=') == 0
|
||||||
|
# This is a guest BrowserWindow.
|
||||||
|
process.openerId = parseInt arg.substr(arg.indexOf('=') + 1)
|
||||||
else if arg.indexOf('--node-integration=') == 0
|
else if arg.indexOf('--node-integration=') == 0
|
||||||
nodeIntegration = arg.substr arg.indexOf('=') + 1
|
nodeIntegration = arg.substr arg.indexOf('=') + 1
|
||||||
else if arg.indexOf('--preload=') == 0
|
else if arg.indexOf('--preload=') == 0
|
||||||
|
|
|
@ -91,8 +91,8 @@ window.confirm = (message, title='') ->
|
||||||
window.prompt = ->
|
window.prompt = ->
|
||||||
throw new Error('prompt() is and will not be supported.')
|
throw new Error('prompt() is and will not be supported.')
|
||||||
|
|
||||||
openerId = ipcRenderer.sendSync 'ATOM_SHELL_GUEST_WINDOW_MANAGER_GET_OPENER_ID'
|
if process.openerId?
|
||||||
window.opener = BrowserWindowProxy.getOrCreate(openerId) if openerId?
|
window.opener = BrowserWindowProxy.getOrCreate process.openerId
|
||||||
|
|
||||||
ipcRenderer.on 'ATOM_SHELL_GUEST_WINDOW_POSTMESSAGE', (event, sourceId, message, sourceOrigin) ->
|
ipcRenderer.on 'ATOM_SHELL_GUEST_WINDOW_POSTMESSAGE', (event, sourceId, message, sourceOrigin) ->
|
||||||
# Manually dispatch event instead of using postMessage because we also need to
|
# Manually dispatch event instead of using postMessage because we also need to
|
||||||
|
|
Loading…
Add table
Reference in a new issue