feat: add webPreferences.enablePreferredSizeMode (#25874)
* feat: add preferredSizeMode preference * docs: webPreferences.preferredSizeMode and event * docs: better explain preferred size * docs: small improvement * refactor: preferredSizeMode -> enablePreferredSizeMode
This commit is contained in:
parent
2aa5a1f494
commit
10a209ecba
7 changed files with 34 additions and 0 deletions
|
@ -398,6 +398,11 @@ It creates a new `BrowserWindow` with native properties as set by the `options`.
|
|||
* `bypassHeatCheck` - Bypass code caching heuristics but with lazy compilation
|
||||
* `bypassHeatCheckAndEagerCompile` - Same as above except compilation is eager.
|
||||
Default policy is `code`.
|
||||
* `enablePreferredSizeMode` Boolean (optional) - Whether to enable
|
||||
preferred size mode. The preferred size is the minimum size needed to
|
||||
contain the layout of the document—without requiring scrolling. Enabling
|
||||
this will cause the `preferred-size-changed` event to be emitted on the
|
||||
`WebContents` when the preferred size changes. Default is `false`.
|
||||
|
||||
When setting minimum or maximum window size with `minWidth`/`maxWidth`/
|
||||
`minHeight`/`maxHeight`, it only constrains the users. It won't prevent you from
|
||||
|
|
|
@ -837,6 +837,19 @@ Emitted when `remote.getCurrentWebContents()` is called in the renderer process.
|
|||
Calling `event.preventDefault()` will prevent the object from being returned.
|
||||
Custom value can be returned by setting `event.returnValue`.
|
||||
|
||||
#### Event: 'preferred-size-changed'
|
||||
|
||||
Returns:
|
||||
|
||||
* `event` Event
|
||||
* `preferredSize` [Size](structures/size.md) - The minimum size needed to
|
||||
contain the layout of the document—without requiring scrolling.
|
||||
|
||||
Emitted when the `WebContents` preferred size has changed.
|
||||
|
||||
This event will only be emitted when `enablePreferredSizeMode` is set to `true`
|
||||
in `webPreferences`.
|
||||
|
||||
### Instance Methods
|
||||
|
||||
#### `contents.loadURL(url[, options])`
|
||||
|
|
|
@ -1173,6 +1173,11 @@ void WebContents::DidStartLoading() {
|
|||
|
||||
void WebContents::DidStopLoading() {
|
||||
Emit("did-stop-loading");
|
||||
|
||||
auto* web_preferences = WebContentsPreferences::From(web_contents());
|
||||
if (web_preferences &&
|
||||
web_preferences->IsEnabled(options::kEnablePreferredSizeMode))
|
||||
web_contents()->GetRenderViewHost()->EnablePreferredSizeMode();
|
||||
}
|
||||
|
||||
bool WebContents::EmitNavigationEvent(
|
||||
|
@ -2903,6 +2908,11 @@ v8::Local<v8::Promise> WebContents::TakeHeapSnapshot(
|
|||
return handle;
|
||||
}
|
||||
|
||||
void WebContents::UpdatePreferredSize(content::WebContents* web_contents,
|
||||
const gfx::Size& pref_size) {
|
||||
Emit("preferred-size-changed", pref_size);
|
||||
}
|
||||
|
||||
// static
|
||||
v8::Local<v8::ObjectTemplate> WebContents::FillObjectTemplate(
|
||||
v8::Isolate* isolate,
|
||||
|
|
|
@ -551,6 +551,8 @@ class WebContents : public gin::Wrappable<WebContents>,
|
|||
content::JavaScriptDialogManager* GetJavaScriptDialogManager(
|
||||
content::WebContents* source) override;
|
||||
void OnAudioStateChanged(bool audible) override;
|
||||
void UpdatePreferredSize(content::WebContents* web_contents,
|
||||
const gfx::Size& pref_size) override;
|
||||
|
||||
// content::WebContentsObserver:
|
||||
void BeforeUnloadFired(bool proceed,
|
||||
|
|
|
@ -143,6 +143,7 @@ WebContentsPreferences::WebContentsPreferences(
|
|||
SetDefaultBoolIfUndefined(options::kTextAreasAreResizable, true);
|
||||
SetDefaultBoolIfUndefined(options::kWebGL, true);
|
||||
SetDefaultBoolIfUndefined(options::kEnableWebSQL, true);
|
||||
SetDefaultBoolIfUndefined(options::kEnablePreferredSizeMode, false);
|
||||
bool webSecurity = true;
|
||||
SetDefaultBoolIfUndefined(options::kWebSecurity, webSecurity);
|
||||
// If webSecurity was explicitly set to false, let's inherit that into
|
||||
|
|
|
@ -191,6 +191,8 @@ const char kEnableRemoteModule[] = "enableRemoteModule";
|
|||
|
||||
const char kEnableWebSQL[] = "enableWebSQL";
|
||||
|
||||
const char kEnablePreferredSizeMode[] = "enablePreferredSizeMode";
|
||||
|
||||
} // namespace options
|
||||
|
||||
namespace switches {
|
||||
|
|
|
@ -87,6 +87,7 @@ extern const char kTextAreasAreResizable[];
|
|||
extern const char kWebGL[];
|
||||
extern const char kNavigateOnDragDrop[];
|
||||
extern const char kEnableWebSQL[];
|
||||
extern const char kEnablePreferredSizeMode[];
|
||||
|
||||
#if BUILDFLAG(ENABLE_BUILTIN_SPELLCHECKER)
|
||||
extern const char kSpellcheck[];
|
||||
|
|
Loading…
Reference in a new issue