Skip to content

Commit c599351

Browse files
committed
[PageLifecycle] Added Page Lifecycle API.
1 parent a78b2a8 commit c599351

6 files changed

Lines changed: 467 additions & 0 deletions

File tree

Source/WTF/Scripts/Preferences/WebPreferences.yaml

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1698,6 +1698,34 @@ PDFPluginEnabled:
16981698
WebKit:
16991699
default: true
17001700

1701+
PageLifecycleAPIDestroyWindowOnFreeze:
1702+
type: bool
1703+
status: testable
1704+
category: dom
1705+
humanReadableName: "Page Lifecycle API destroy window on freeze"
1706+
humanReadableDescription: "Whether to destroy the native window on freeze"
1707+
defaultValue:
1708+
WebKitLegacy:
1709+
default: false
1710+
WebKit:
1711+
default: false
1712+
WebCore:
1713+
default: false
1714+
1715+
PageLifecycleAPIEnabled:
1716+
type: bool
1717+
status: testable
1718+
category: dom
1719+
humanReadableName: "Page Lifecycle API"
1720+
humanReadableDescription: "Enable the Page Lifecycle API"
1721+
defaultValue:
1722+
WebKitLegacy:
1723+
default: false
1724+
WebKit:
1725+
default: true
1726+
WebCore:
1727+
default: true
1728+
17011729
PageVisibilityBasedProcessSuppressionEnabled:
17021730
type: bool
17031731
webcoreBinding: none

Source/WebKit/UIProcess/API/glib/WebKitSettings.cpp

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,8 @@ enum {
189189
PROP_ENABLE_ICE_CANDIDATE_FILTERING,
190190
PROP_WEBRTC_UDP_PORTS_RANGE,
191191
PROP_SCREEN_SUPPORTS_HDR,
192+
PROP_ENABLE_PAGE_LIFECYCLE,
193+
PROP_DESTROY_WINDOW_ON_FREEZE,
192194
N_PROPERTIES,
193195
};
194196

@@ -452,6 +454,12 @@ ALLOW_DEPRECATED_DECLARATIONS_END
452454
case PROP_SCREEN_SUPPORTS_HDR:
453455
webkit_settings_set_screen_supports_hdr(settings, g_value_get_boolean(value));
454456
break;
457+
case PROP_ENABLE_PAGE_LIFECYCLE:
458+
webkit_settings_set_enable_page_lifecycle(settings, g_value_get_boolean(value));
459+
break;
460+
case PROP_DESTROY_WINDOW_ON_FREEZE:
461+
webkit_settings_set_destroy_window_on_freeze(settings, g_value_get_boolean(value));
462+
break;
455463
default:
456464
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propId, paramSpec);
457465
break;
@@ -686,6 +694,12 @@ ALLOW_DEPRECATED_DECLARATIONS_END
686694
case PROP_SCREEN_SUPPORTS_HDR:
687695
g_value_set_boolean(value, webkit_settings_get_screen_supports_hdr(settings));
688696
break;
697+
case PROP_ENABLE_PAGE_LIFECYCLE:
698+
g_value_set_boolean(value, webkit_settings_get_enable_page_lifecycle(settings));
699+
break;
700+
case PROP_DESTROY_WINDOW_ON_FREEZE:
701+
g_value_set_boolean(value, webkit_settings_get_destroy_window_on_freeze(settings));
702+
break;
689703
default:
690704
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propId, paramSpec);
691705
break;
@@ -1827,6 +1841,32 @@ static void webkit_settings_class_init(WebKitSettingsClass* klass)
18271841
FALSE,
18281842
readWriteConstructParamFlags);
18291843

1844+
/**
1845+
* WebKitSettings:enable-page-lifecycle:
1846+
*
1847+
* Whether to enable the Page LifeCycle API.
1848+
*
1849+
*/
1850+
sObjProperties[PROP_ENABLE_PAGE_LIFECYCLE] = g_param_spec_boolean(
1851+
"enable-page-lifecycle",
1852+
_("Enable Page Lifecycle"),
1853+
_("Whether to enable the Page Lifecycle API."),
1854+
TRUE,
1855+
readWriteConstructParamFlags);
1856+
1857+
/**
1858+
* WebKitSettings:destroy-window-on-freeze:
1859+
*
1860+
* Whether to destroy the native window on freeze.
1861+
*
1862+
*/
1863+
sObjProperties[PROP_DESTROY_WINDOW_ON_FREEZE] = g_param_spec_boolean(
1864+
"destroy-window-on-freeze",
1865+
_("Destroy window on freeze"),
1866+
_("Whether to destroy the native window on freeze."),
1867+
FALSE,
1868+
readWriteConstructParamFlags);
1869+
18301870
g_object_class_install_properties(gObjectClass, N_PROPERTIES, sObjProperties);
18311871
}
18321872

@@ -4604,3 +4644,73 @@ webkit_settings_set_screen_supports_hdr(WebKitSettings* settings, gboolean scree
46044644
priv->preferences->setScreenSupportsHDR(screenSupportsHDR);
46054645
g_object_notify_by_pspec(G_OBJECT(settings), sObjProperties[PROP_SCREEN_SUPPORTS_HDR]);
46064646
}
4647+
4648+
/**
4649+
* webkit_settings_get_enable_page_lifecycle:
4650+
* @settings: a #WebKitSettings
4651+
*
4652+
* Get the #WebKitSettings:enable-page-lifecycle property.
4653+
*
4654+
* Returns: %TRUE If the native window should be destroyed when feezing or %FALSE otherwise.
4655+
*/
4656+
gboolean webkit_settings_get_enable_page_lifecycle(WebKitSettings* settings)
4657+
{
4658+
g_return_val_if_fail(WEBKIT_IS_SETTINGS(settings), FALSE);
4659+
4660+
return settings->priv->preferences->pageLifecycleAPIEnabled();
4661+
}
4662+
4663+
/**
4664+
* webkit_settings_set_enable_page_lifecycle:
4665+
* @settings: a #WebKitSettings
4666+
* @enabled: Value to be set
4667+
*
4668+
* Set the #WebKitSettings:enable-page-lifecycle property.
4669+
*/
4670+
void webkit_settings_set_enable_page_lifecycle(WebKitSettings* settings, gboolean enable)
4671+
{
4672+
g_return_if_fail(WEBKIT_IS_SETTINGS(settings));
4673+
4674+
WebKitSettingsPrivate* priv = settings->priv;
4675+
bool currentValue = priv->preferences->pageLifecycleAPIEnabled();
4676+
if (currentValue == enable)
4677+
return;
4678+
4679+
priv->preferences->setPageLifecycleAPIEnabled(enable);
4680+
g_object_notify(G_OBJECT(settings), "enable-page-lifecycle");
4681+
}
4682+
4683+
/**
4684+
* webkit_settings_get_destroy_window_on_freeze:
4685+
* @settings: a #WebKitSettings
4686+
*
4687+
* Get the #WebKitSettings:destroy-window-on-freeze property.
4688+
*
4689+
* Returns: %TRUE If the native window should be destroyed when feezing or %FALSE otherwise.
4690+
*/
4691+
gboolean webkit_settings_get_destroy_window_on_freeze(WebKitSettings* settings)
4692+
{
4693+
g_return_val_if_fail(WEBKIT_IS_SETTINGS(settings), FALSE);
4694+
4695+
return settings->priv->preferences->pageLifecycleAPIDestroyWindowOnFreeze();
4696+
}
4697+
4698+
/**
4699+
* webkit_settings_set_destroy_window_on_freeze:
4700+
* @settings: a #WebKitSettings
4701+
* @enabled: Value to be set
4702+
*
4703+
* Set the #WebKitSettings:destroy-window-on-freeze property.
4704+
*/
4705+
void webkit_settings_set_destroy_window_on_freeze(WebKitSettings* settings, gboolean destroy)
4706+
{
4707+
g_return_if_fail(WEBKIT_IS_SETTINGS(settings));
4708+
4709+
WebKitSettingsPrivate* priv = settings->priv;
4710+
bool currentValue = priv->preferences->pageLifecycleAPIDestroyWindowOnFreeze();
4711+
if (currentValue == destroy)
4712+
return;
4713+
4714+
priv->preferences->setPageLifecycleAPIDestroyWindowOnFreeze(destroy);
4715+
g_object_notify(G_OBJECT(settings), "destroy-window-on-freeze");
4716+
}

0 commit comments

Comments
 (0)