Use native window.open implementation

This commit is contained in:
Ryohei Ikegami 2017-03-19 17:41:20 +09:00
Родитель 054ba7a964
Коммит a1f9a45276
7 изменённых файлов: 22 добавлений и 15 удалений

Просмотреть файл

@ -142,7 +142,7 @@ void AtomBrowserClient::RenderProcessWillLaunch(
content::WebContents* web_contents = GetWebContentsFromProcessID(process_id);
ProcessPreferences process_prefs;
process_prefs.sandbox = WebContentsPreferences::IsSandboxed(web_contents);
process_prefs.native_window_open = WebContentsPreferences::IsNativeWindowOpenEnabled(web_contents);
process_prefs.native_window_open = WebContentsPreferences::UsesNativeWindowOpen(web_contents);
AddProcessPreferences(host->GetID(), process_prefs);
// ensure the ProcessPreferences is removed later
host->AddObserver(this);

Просмотреть файл

@ -102,6 +102,8 @@ void WebContentsPreferences::AppendExtraCommandLineSwitches(
// integration.
if (IsSandboxed(web_contents))
command_line->AppendSwitch(switches::kEnableSandbox);
if (UsesNativeWindowOpen(web_contents))
command_line->AppendSwitch(switches::kNativeWindowOpen);
// The preload script.
base::FilePath::StringType preload;
@ -208,7 +210,7 @@ bool WebContentsPreferences::IsSandboxed(content::WebContents* web_contents) {
return sandboxed;
}
bool WebContentsPreferences::IsNativeWindowOpenEnabled(content::WebContents* web_contents) {
bool WebContentsPreferences::UsesNativeWindowOpen(content::WebContents* web_contents) {
WebContentsPreferences* self;
if (!web_contents)
return false;

Просмотреть файл

@ -38,7 +38,7 @@ class WebContentsPreferences
content::WebContents* web_contents, base::CommandLine* command_line);
static bool IsSandboxed(content::WebContents* web_contents);
static bool IsNativeWindowOpenEnabled(content::WebContents* web_contents);
static bool UsesNativeWindowOpen(content::WebContents* web_contents);
// Modify the WebPreferences according to |web_contents|'s preferences.
static void OverrideWebkitPrefs(

Просмотреть файл

@ -163,6 +163,7 @@ const char kGuestInstanceID[] = "guest-instance-id";
const char kOpenerID[] = "opener-id";
const char kScrollBounce[] = "scroll-bounce";
const char kHiddenPage[] = "hidden-page";
const char kNativeWindowOpen[] = "native-window-open";
// Widevine options
// Path to Widevine CDM binaries.

Просмотреть файл

@ -89,6 +89,7 @@ extern const char kGuestInstanceID[];
extern const char kOpenerID[];
extern const char kScrollBounce[];
extern const char kHiddenPage[];
extern const char kNativeWindowOpen[];
extern const char kWidevineCdmPath[];
extern const char kWidevineCdmVersion[];

Просмотреть файл

@ -4,5 +4,6 @@ const {ipcRenderer} = require('electron')
const {guestInstanceId, openerId} = process
const hiddenPage = process.argv.includes('--hidden-page')
const usesNativeWindowOpen = process.argv.includes('--native-window-open')
require('./window-setup')(ipcRenderer, guestInstanceId, openerId, hiddenPage)
require('./window-setup')(ipcRenderer, guestInstanceId, openerId, hiddenPage, usesNativeWindowOpen)

Просмотреть файл

@ -99,7 +99,7 @@ const getHistoryOperation = function (ipcRenderer, ...args) {
return ipcRenderer.sendSync('ELECTRON_SYNC_NAVIGATION_CONTROLLER', ...args)
}
module.exports = (ipcRenderer, guestInstanceId, openerId, hiddenPage) => {
module.exports = (ipcRenderer, guestInstanceId, openerId, hiddenPage, usesNativeWindowOpen) => {
if (guestInstanceId == null) {
// Override default window.close.
window.close = function () {
@ -107,16 +107,18 @@ module.exports = (ipcRenderer, guestInstanceId, openerId, hiddenPage) => {
}
}
// Make the browser window or guest view emit "new-window" event.
window.open = function (url, frameName, features) {
if (url != null && url !== '') {
url = resolveURL(url)
}
const guestId = ipcRenderer.sendSync('ELECTRON_GUEST_WINDOW_MANAGER_WINDOW_OPEN', url, frameName, features)
if (guestId != null) {
return getOrCreateProxy(ipcRenderer, guestId)
} else {
return null
if (!usesNativeWindowOpen) {
// Make the browser window or guest view emit "new-window" event.
window.open = function (url, frameName, features) {
if (url != null && url !== '') {
url = resolveURL(url)
}
const guestId = ipcRenderer.sendSync('ELECTRON_GUEST_WINDOW_MANAGER_WINDOW_OPEN', url, frameName, features)
if (guestId != null) {
return getOrCreateProxy(ipcRenderer, guestId)
} else {
return null
}
}
}