Correctly set initial visibilityState
This commit is contained in:
parent
07a4c52919
commit
43c44da50b
8 changed files with 37 additions and 17 deletions
|
@ -1127,6 +1127,12 @@ bool WebContents::IsGuest() const {
|
||||||
return type_ == WEB_VIEW;
|
return type_ == WEB_VIEW;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WebContents::MergeWebPreferences(const base::DictionaryValue& extend) {
|
||||||
|
WebContentsPreferences* web_preferences =
|
||||||
|
WebContentsPreferences::FromWebContents(web_contents());
|
||||||
|
web_preferences->Merge(extend);
|
||||||
|
}
|
||||||
|
|
||||||
v8::Local<v8::Value> WebContents::GetWebPreferences(v8::Isolate* isolate) {
|
v8::Local<v8::Value> WebContents::GetWebPreferences(v8::Isolate* isolate) {
|
||||||
WebContentsPreferences* web_preferences =
|
WebContentsPreferences* web_preferences =
|
||||||
WebContentsPreferences::FromWebContents(web_contents());
|
WebContentsPreferences::FromWebContents(web_contents());
|
||||||
|
@ -1221,6 +1227,7 @@ void WebContents::BuildPrototype(v8::Isolate* isolate,
|
||||||
.SetMethod("endFrameSubscription", &WebContents::EndFrameSubscription)
|
.SetMethod("endFrameSubscription", &WebContents::EndFrameSubscription)
|
||||||
.SetMethod("setSize", &WebContents::SetSize)
|
.SetMethod("setSize", &WebContents::SetSize)
|
||||||
.SetMethod("isGuest", &WebContents::IsGuest)
|
.SetMethod("isGuest", &WebContents::IsGuest)
|
||||||
|
.SetMethod("mergeWebPreferences", &WebContents::MergeWebPreferences)
|
||||||
.SetMethod("getWebPreferences", &WebContents::GetWebPreferences)
|
.SetMethod("getWebPreferences", &WebContents::GetWebPreferences)
|
||||||
.SetMethod("getOwnerBrowserWindow", &WebContents::GetOwnerBrowserWindow)
|
.SetMethod("getOwnerBrowserWindow", &WebContents::GetOwnerBrowserWindow)
|
||||||
.SetMethod("hasServiceWorker", &WebContents::HasServiceWorker)
|
.SetMethod("hasServiceWorker", &WebContents::HasServiceWorker)
|
||||||
|
|
|
@ -144,6 +144,7 @@ class WebContents : public mate::TrackableObject<WebContents>,
|
||||||
WindowOpenDisposition disposition);
|
WindowOpenDisposition disposition);
|
||||||
|
|
||||||
// Returns the web preferences of current WebContents.
|
// Returns the web preferences of current WebContents.
|
||||||
|
void MergeWebPreferences(const base::DictionaryValue& extend);
|
||||||
v8::Local<v8::Value> GetWebPreferences(v8::Isolate* isolate);
|
v8::Local<v8::Value> GetWebPreferences(v8::Isolate* isolate);
|
||||||
|
|
||||||
// Returns the owner window.
|
// Returns the owner window.
|
||||||
|
|
|
@ -131,20 +131,25 @@ void WebContentsPreferences::AppendExtraCommandLineSwitches(
|
||||||
// --guest-instance-id, which is used to identify guest WebContents.
|
// --guest-instance-id, which is used to identify guest WebContents.
|
||||||
int guest_instance_id;
|
int guest_instance_id;
|
||||||
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.
|
// Pass the opener's window id.
|
||||||
int opener_id;
|
int opener_id;
|
||||||
if (web_preferences.GetInteger(options::kOpenerID, &opener_id))
|
if (web_preferences.GetInteger(options::kOpenerID, &opener_id))
|
||||||
command_line->AppendSwitchASCII(switches::kOpenerID,
|
command_line->AppendSwitchASCII(switches::kOpenerID,
|
||||||
base::IntToString(opener_id));
|
base::IntToString(opener_id));
|
||||||
|
|
||||||
// Enable blink features.
|
// Enable blink features.
|
||||||
std::string blink_features;
|
std::string blink_features;
|
||||||
if (web_preferences.GetString(options::kBlinkFeatures, &blink_features))
|
if (web_preferences.GetString(options::kBlinkFeatures, &blink_features))
|
||||||
command_line->AppendSwitchASCII(::switches::kEnableBlinkFeatures,
|
command_line->AppendSwitchASCII(::switches::kEnableBlinkFeatures,
|
||||||
blink_features);
|
blink_features);
|
||||||
|
|
||||||
|
// The initial visibility state.
|
||||||
|
std::string visibility;
|
||||||
|
if (web_preferences.GetString(options::kVisibilityState, &visibility))
|
||||||
|
command_line->AppendSwitchASCII(switches::kVisibilityState, visibility);
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
|
|
|
@ -106,6 +106,9 @@ const char kOpenerID[] = "openerId";
|
||||||
// Enable blink features.
|
// Enable blink features.
|
||||||
const char kBlinkFeatures[] = "blinkFeatures";
|
const char kBlinkFeatures[] = "blinkFeatures";
|
||||||
|
|
||||||
|
// The initiali visibility state.
|
||||||
|
const char kVisibilityState[] = "visibilityState";
|
||||||
|
|
||||||
} // namespace options
|
} // namespace options
|
||||||
|
|
||||||
namespace switches {
|
namespace switches {
|
||||||
|
@ -149,6 +152,7 @@ const char kPreloadURL[] = "preload-url";
|
||||||
const char kNodeIntegration[] = "node-integration";
|
const char kNodeIntegration[] = "node-integration";
|
||||||
const char kGuestInstanceID[] = "guest-instance-id";
|
const char kGuestInstanceID[] = "guest-instance-id";
|
||||||
const char kOpenerID[] = "opener-id";
|
const char kOpenerID[] = "opener-id";
|
||||||
|
const char kVisibilityState[] = "visibility-state";
|
||||||
|
|
||||||
// Widevine options
|
// Widevine options
|
||||||
// Path to Widevine CDM binaries.
|
// Path to Widevine CDM binaries.
|
||||||
|
|
|
@ -56,6 +56,7 @@ extern const char kGuestInstanceID[];
|
||||||
extern const char kExperimentalFeatures[];
|
extern const char kExperimentalFeatures[];
|
||||||
extern const char kExperimentalCanvasFeatures[];
|
extern const char kExperimentalCanvasFeatures[];
|
||||||
extern const char kOpenerID[];
|
extern const char kOpenerID[];
|
||||||
|
extern const char kVisibilityState[];
|
||||||
extern const char kBlinkFeatures[];
|
extern const char kBlinkFeatures[];
|
||||||
|
|
||||||
} // namespace options
|
} // namespace options
|
||||||
|
@ -83,6 +84,7 @@ extern const char kPreloadURL[];
|
||||||
extern const char kNodeIntegration[];
|
extern const char kNodeIntegration[];
|
||||||
extern const char kGuestInstanceID[];
|
extern const char kGuestInstanceID[];
|
||||||
extern const char kOpenerID[];
|
extern const char kOpenerID[];
|
||||||
|
extern const char kVisibilityState[];
|
||||||
|
|
||||||
extern const char kWidevineCdmPath[];
|
extern const char kWidevineCdmPath[];
|
||||||
extern const char kWidevineCdmVersion[];
|
extern const char kWidevineCdmVersion[];
|
||||||
|
|
|
@ -79,7 +79,7 @@ BrowserWindow.prototype._init = function () {
|
||||||
})
|
})
|
||||||
|
|
||||||
// Subscribe to visibilityState changes and pass to renderer process.
|
// Subscribe to visibilityState changes and pass to renderer process.
|
||||||
let isVisible = false
|
let isVisible = this.isVisible() && !this.isMinimized()
|
||||||
let visibilityChanged = () => {
|
let visibilityChanged = () => {
|
||||||
let newState = this.isVisible() && !this.isMinimized()
|
let newState = this.isVisible() && !this.isMinimized()
|
||||||
if (isVisible != newState) {
|
if (isVisible != newState) {
|
||||||
|
@ -94,7 +94,8 @@ BrowserWindow.prototype._init = function () {
|
||||||
this.on('maximize', visibilityChanged)
|
this.on('maximize', visibilityChanged)
|
||||||
|
|
||||||
// Make renderer process have correct initial state.
|
// Make renderer process have correct initial state.
|
||||||
visibilityChanged()
|
if (!isVisible)
|
||||||
|
this.webContents.mergeWebPreferences({visibilityState: 'hidden'})
|
||||||
|
|
||||||
// Notify the creation of the window.
|
// Notify the creation of the window.
|
||||||
app.emit('browser-window-created', {}, this)
|
app.emit('browser-window-created', {}, this)
|
||||||
|
|
|
@ -47,11 +47,7 @@ electron.ipcRenderer.on('ELECTRON_INTERNAL_RENDERER_ASYNC_WEB_FRAME_METHOD', (ev
|
||||||
// Process command line arguments.
|
// Process command line arguments.
|
||||||
var nodeIntegration = 'false'
|
var nodeIntegration = 'false'
|
||||||
var preloadScript = null
|
var preloadScript = null
|
||||||
|
for (let arg of process.argv) {
|
||||||
var ref = process.argv
|
|
||||||
var i, len, arg
|
|
||||||
for (i = 0, len = ref.length; i < len; i++) {
|
|
||||||
arg = ref[i]
|
|
||||||
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))
|
||||||
|
@ -62,6 +58,8 @@ for (i = 0, len = ref.length; i < len; i++) {
|
||||||
nodeIntegration = arg.substr(arg.indexOf('=') + 1)
|
nodeIntegration = arg.substr(arg.indexOf('=') + 1)
|
||||||
} else if (arg.indexOf('--preload=') === 0) {
|
} else if (arg.indexOf('--preload=') === 0) {
|
||||||
preloadScript = arg.substr(arg.indexOf('=') + 1)
|
preloadScript = arg.substr(arg.indexOf('=') + 1)
|
||||||
|
} else if (arg.indexOf('--visibility-state=') === 0) {
|
||||||
|
process.visibilityState = arg.substr(arg.indexOf('=') + 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,6 @@ const remote = require('electron').remote
|
||||||
|
|
||||||
// Helper function to resolve relative url.
|
// Helper function to resolve relative url.
|
||||||
var a = window.top.document.createElement('a')
|
var a = window.top.document.createElement('a')
|
||||||
|
|
||||||
var resolveURL = function (url) {
|
var resolveURL = function (url) {
|
||||||
a.href = url
|
a.href = url
|
||||||
return a.href
|
return a.href
|
||||||
|
@ -160,8 +159,6 @@ window.alert = function (message, title) {
|
||||||
title: title,
|
title: title,
|
||||||
buttons: buttons
|
buttons: buttons
|
||||||
})
|
})
|
||||||
|
|
||||||
// Alert should always return undefined.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// And the confirm().
|
// And the confirm().
|
||||||
|
@ -227,8 +224,13 @@ Object.defineProperty(window.history, 'length', {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// The initial visibilityState.
|
||||||
|
let cachedVisibilityState = 'visible'
|
||||||
|
if (process.visibilityState) {
|
||||||
|
cachedVisibilityState = process.visibilityState
|
||||||
|
}
|
||||||
|
|
||||||
// Subscribe to visibilityState changes.
|
// Subscribe to visibilityState changes.
|
||||||
let cachedVisibilityState = 'hidden'
|
|
||||||
ipcRenderer.on('ELECTRON_RENDERER_WINDOW_VISIBILITY_CHANGE', function (event, visibilityState) {
|
ipcRenderer.on('ELECTRON_RENDERER_WINDOW_VISIBILITY_CHANGE', function (event, visibilityState) {
|
||||||
if (cachedVisibilityState != visibilityState) {
|
if (cachedVisibilityState != visibilityState) {
|
||||||
cachedVisibilityState = visibilityState
|
cachedVisibilityState = visibilityState
|
||||||
|
|
Loading…
Reference in a new issue