From 6727f0f99972c02be703fd225c5c792de09a493f Mon Sep 17 00:00:00 2001 From: J-Loup Date: Fri, 6 Sep 2024 14:17:07 +0200 Subject: [PATCH 1/6] fallback if snap is targetted (#200) * fallback if snap is targetted * put code in subfunctions --------- Co-authored-by: Jean-Loup Maillet --- src/browser.rs | 2 +- src/utils.rs | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/browser.rs b/src/browser.rs index 0c2e486d..43106a57 100644 --- a/src/browser.rs +++ b/src/browser.rs @@ -159,7 +159,7 @@ impl Browser { /// (20 seconds by default). pub async fn launch(mut config: BrowserConfig) -> Result<(Self, Handler)> { // Canonalize paths to reduce issues with sandboxing - config.executable = utils::canonicalize(&config.executable).await?; + config.executable = utils::canonicalize_except_snap(config.executable).await?; // Launch a new chromium instance let mut child = config.launch()?; diff --git a/src/utils.rs b/src/utils.rs index d7831087..0399c6f4 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -29,6 +29,24 @@ pub(crate) async fn canonicalize + Unpin>(path: P) -> std::io::Re Ok(dunce::simplified(&path).to_path_buf()) } +/// Absolute path +/// +pub(crate) fn absolute(path: PathBuf) -> std::io::Result { + let path = if path.is_absolute() { path } else { std::env::current_dir()?.join(path) }; + Ok(dunce::simplified(&path).to_path_buf()) +} + +/// Canonicalize path except if target binary is snap, in this case only make the path absolute +/// +pub(crate) async fn canonicalize_except_snap(path: PathBuf) -> std::io::Result { + // Canonalize paths to reduce issues with sandboxing + let executable_cleaned: PathBuf = canonicalize(&path).await?; + + // Handle case where executable is provided by snap, ignore canonicalize result and only make path absolute + Ok(if executable_cleaned.to_str().unwrap().ends_with("/snap") { absolute(path).unwrap() } else { executable_cleaned }) +} + + pub(crate) mod base64 { use base64::engine::general_purpose::STANDARD; use base64::{DecodeError, Engine}; From 07ee96673d5791442559b72045e5bf79486d890c Mon Sep 17 00:00:00 2001 From: Tom Grushka <89836285+tgrushka@users.noreply.github.com> Date: Sat, 21 Sep 2024 08:45:55 -0600 Subject: [PATCH 2/6] add console-log example (#239) --- Cargo.toml | 3 +++ examples/console-logs.rs | 53 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 examples/console-logs.rs diff --git a/Cargo.toml b/Cargo.toml index b18aa326..9b6dfba4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -82,6 +82,9 @@ required-features = ["tokio-runtime", "tokio"] name = "storage-cookie" required-features = ["tokio-runtime"] +[[example]] +name = "console-logs" +required-features = ["tokio-runtime"] [[example]] name = "httpfuture" diff --git a/examples/console-logs.rs b/examples/console-logs.rs new file mode 100644 index 00000000..2f87dc20 --- /dev/null +++ b/examples/console-logs.rs @@ -0,0 +1,53 @@ +// This example demonstrates how to capture console logs. + +use std::time::Duration; + +use chromiumoxide::{cdp::js_protocol::runtime::EventConsoleApiCalled, BrowserConfig}; +use futures::StreamExt; + +const TARGET: &str = "https://www.microsoft.com/"; + +#[tokio::main] +async fn main() { + tracing_subscriber::fmt::init(); + + let (mut browser, mut handler) = + chromiumoxide::Browser::launch(BrowserConfig::builder().with_head().build().unwrap()) + .await + .expect("failed to launch browser"); + + let handle = tokio::task::spawn(async move { + while let Some(event) = handler.next().await { + tracing::debug!(event = ?event); + } + }); + + let page = browser + .new_page("about:blank") + .await + .expect("failed to create page"); + + let mut console_events = page + .event_listener::() + .await + .expect("Failed to add event listener"); + let logs_handle = tokio::spawn(async move { + while let Some(event) = console_events.next().await { + println!( + "{}", + serde_json::to_string_pretty(&*event).expect("Failed to serialize event") + ); + } + }); + + let _ = page.goto(TARGET).await.expect("failed to navigate"); + + tokio::time::sleep(Duration::from_secs(3)).await; + + browser.close().await.expect("Failed to close browser"); + logs_handle.await.expect("Failed to wait for logs handle"); + handle.await.expect("Failed to await handle"); + + // Give browser time to finish closing. + tokio::time::sleep(Duration::from_secs(1)).await; +} From 96609ebd97858fbe870eeefc054b453a894917f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sampo=20Kivist=C3=B6?= <2021355+Havunen@users.noreply.github.com> Date: Fri, 4 Oct 2024 17:52:27 +0300 Subject: [PATCH 3/6] Roll to chromium rev 1359167 (#242) * Roll to chromium rev 1359167 * cargo fmt --- Cargo.toml | 4 +- chromiumoxide_cdp/browser_protocol.pdl | 193 ++- chromiumoxide_cdp/js_protocol.pdl | 5 +- chromiumoxide_cdp/src/cdp.rs | 1549 ++++++++++++++++++++++-- chromiumoxide_cdp/src/lib.rs | 2 +- src/utils.rs | 13 +- 6 files changed, 1651 insertions(+), 115 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 9b6dfba4..efad7d3c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,9 +13,9 @@ keywords = ["chrome", "chromedriver", "puppeteer", "automation"] categories = ["web-programming", "api-bindings", "development-tools::testing"] [dependencies] -async-tungstenite = "0.27.0" +async-tungstenite = "0.28.0" serde = { version = "1", features = ["derive"] } -async-std = { version = "1.5", features = [ +async-std = { version = "1", features = [ "attributes", "unstable", ], optional = true } diff --git a/chromiumoxide_cdp/browser_protocol.pdl b/chromiumoxide_cdp/browser_protocol.pdl index 77608eef..07e17ba5 100644 --- a/chromiumoxide_cdp/browser_protocol.pdl +++ b/chromiumoxide_cdp/browser_protocol.pdl @@ -532,6 +532,8 @@ experimental domain Audits WarnDomainNonASCII WarnThirdPartyPhaseout WarnCrossSiteRedirectDowngradeChangesInclusion + WarnDeprecationTrialMetadata + WarnThirdPartyCookieHeuristic type CookieOperation extends string enum @@ -743,6 +745,7 @@ experimental domain Audits NoRegisterTriggerHeader NoRegisterOsSourceHeader NoRegisterOsTriggerHeader + NavigationRegistrationUniqueScopeAlreadySet type SharedDictionaryError extends string enum @@ -1123,7 +1126,7 @@ experimental domain Extensions returns # Extension id. string id - # Gets data from extension storage in the given `area`. If `keys` is + # Gets data from extension storage in the given `storageArea`. If `keys` is # specified, these are used to filter the result. command getStorageItems parameters @@ -1135,6 +1138,32 @@ experimental domain Extensions optional array of string keys returns object data + # Removes `keys` from extension storage in the given `storageArea`. + command removeStorageItems + parameters + # ID of extension. + string id + # StorageArea to remove data from. + StorageArea storageArea + # Keys to remove. + array of string keys + # Clears extension storage in the given `storageArea`. + command clearStorageItems + parameters + # ID of extension. + string id + # StorageArea to remove data from. + StorageArea storageArea + # Sets `values` in extension storage in the given `storageArea`. The provided `values` + # will be merged with existing values in the storage area. + command setStorageItems + parameters + # ID of extension. + string id + # StorageArea to set data in. + StorageArea storageArea + # Values to set. + object values # Defines commands and events for Autofill. experimental domain Autofill @@ -1366,6 +1395,7 @@ domain Browser videoCapturePanTiltZoom wakeLockScreen wakeLockSystem + webAppInstallation windowManagement experimental type PermissionSetting extends string @@ -2651,6 +2681,7 @@ domain DOM after marker backdrop + column selection search-text target-text @@ -2660,6 +2691,8 @@ domain DOM first-line-inherited scroll-marker scroll-marker-group + scroll-next-button + scroll-prev-button scrollbar scrollbar-thumb scrollbar-button @@ -2673,6 +2706,12 @@ domain DOM view-transition-image-pair view-transition-old view-transition-new + placeholder + file-selector-button + details-content + select-fallback-button + select-fallback-button-text + picker # Shadow root type. type ShadowRootType extends string @@ -2777,6 +2816,13 @@ domain DOM optional boolean isSVG optional CompatibilityMode compatibilityMode optional BackendNode assignedSlot + experimental optional boolean isScrollable + + # A structure to hold the top-level node of a detached tree and an array of its retained descendants. + type DetachedElementInfo extends object + properties + Node treeNode + array of NodeId retainedNodeIds # A structure holding an RGBA color. type RGBA extends object @@ -3288,6 +3334,12 @@ domain DOM returns string path + # Returns list of detached nodes + experimental command getDetachedDomNodes + returns + # The list of detached nodes + array of DetachedElementInfo detachedNodes + # Enables console to refer to the node with given id via $x (see Command Line API for more details # $x functions). experimental command setInspectedNode @@ -3454,6 +3506,14 @@ domain DOM # Called when top layer elements are changed. experimental event topLayerElementsUpdated + # Fired when a node's scrollability state changes. + experimental event scrollableFlagUpdated + parameters + # The id of the node. + DOM.NodeId nodeId + # If the node is scrollable. + boolean isScrollable + # Called when a pseudo element is removed from an element. experimental event pseudoElementRemoved parameters @@ -4163,7 +4223,6 @@ domain Emulation gyroscope linear-acceleration magnetometer - proximity relative-orientation experimental type SensorMetadata extends object @@ -5482,12 +5541,21 @@ experimental domain Memory moderate critical + # Retruns current DOM object counters. command getDOMCounters returns integer documents integer nodes integer jsEventListeners + # Retruns DOM object counters after preparing renderer for leak detection. + command getDOMCountersForLeakDetection + returns + # DOM object counters. + array of DOMCounter counters + + # Prepares for leak detection by terminating workers, stopping spellcheckers, + # dropping non-essential internal caches, running garbage collections, etc. command prepareForLeakDetection # Simulate OomIntervention by purging V8 memory. @@ -5563,6 +5631,15 @@ experimental domain Memory # Size of the module in bytes. number size + # DOM object counter data. + type DOMCounter extends object + properties + # Object name. Note: object names should be presumed volatile and clients should not expect + # the returned names to be consistent across runs. + string name + # Object count. + integer count + # Network domain allows tracking network activities of the page. It exposes information about http, # file, data and other requests and responses, their headers, bodies, timing, etc. domain Network @@ -6300,6 +6377,8 @@ domain Network TPCDMetadata # The cookie should have been blocked by 3PCD but is exempted by Deprecation Trial mitigation. TPCDDeprecationTrial + # The cookie should have been blocked by 3PCD but is exempted by Top-level Deprecation Trial mitigation. + TopLevelTPCDDeprecationTrial # The cookie should have been blocked by 3PCD but is exempted by heuristics mitigation. TPCDHeuristics # The cookie should have been blocked by 3PCD but is exempted by Enterprise Policy. @@ -6308,8 +6387,6 @@ domain Network StorageAccess # The cookie should have been blocked by 3PCD but is exempted by Top-level Storage Access API. TopLevelStorageAccess - # The cookie should have been blocked by 3PCD but is exempted by CORS opt-in. - CorsOptIn # The cookie should have been blocked by 3PCD but is exempted by the first-party URL scheme. Scheme @@ -7848,8 +7925,8 @@ experimental domain Overlay # True for showing hit-test borders boolean show - # Request that backend shows an overlay with web vital metrics. - command setShowWebVitals + # Deprecated, no longer has any effect. + deprecated command setShowWebVitals parameters boolean show @@ -8008,10 +8085,12 @@ domain Page clipboard-read clipboard-write compute-pressure + controlled-frame cross-origin-isolated deferred-fetch digital-credentials-get direct-sockets + direct-sockets-private display-capture document-domain encrypted-media @@ -8037,6 +8116,7 @@ domain Page otp-credentials payment picture-in-picture + popins private-aggregation private-state-token-issuance private-state-token-redemption @@ -8057,6 +8137,7 @@ domain Page usb usb-unrestricted vertical-scroll + web-app-installation web-printing web-share window-management @@ -8369,14 +8450,16 @@ domain Page experimental type ClientNavigationReason extends string enum + anchorClick formSubmissionGet formSubmissionPost httpHeaderRefresh - scriptInitiated + initialFrameNavigation metaTagRefresh + other pageBlockInterstitial reload - anchorClick + scriptInitiated experimental type ClientNavigationDisposition extends string enum @@ -9154,6 +9237,13 @@ domain Page # A new frame target will be created (see Target.attachedToTarget). swap + # Fired before frame subtree is detached. Emitted before any frame of the + # subtree is actually detached. + experimental event frameSubtreeWillBeDetached + parameters + # Id of the frame that is the root of the subtree that will be detached. + FrameId frameId + # The type of a frameNavigated event. experimental type NavigationType extends string enum @@ -9411,6 +9501,7 @@ domain Page ContentWebUSB ContentMediaSessionService ContentScreenReader + ContentDiscarded # See components/back_forward_cache/back_forward_cache_disable.h for explanations. EmbedderPopupBlockerTabHelper @@ -9496,6 +9587,15 @@ domain Page FrameId frameId # Frame's new url. string url + # Navigation type + enum navigationType + # Navigation due to fragment navigation. + fragment + # Navigation due to history API usage. + historyApi + # Navigation due to other reasons. + other + # Compressed image data requested by the `startScreencast`. experimental event screencastFrame @@ -10585,6 +10685,14 @@ experimental domain Storage array of AttributionReportingAggregatableDebugReportingData debugData optional string aggregationCoordinatorOrigin + experimental type AttributionScopesData extends object + properties + array of string values + # number instead of integer because not all uint32 can be represented by + # int + number limit + number maxEventStates + experimental type AttributionReportingSourceRegistration extends object properties Network.TimeSinceEpoch time @@ -10605,6 +10713,7 @@ experimental domain Storage AttributionReportingTriggerDataMatching triggerDataMatching SignedInt64AsBase10 destinationLimitPriority AttributionReportingAggregatableDebugReportingConfig aggregatableDebugReportingConfig + optional AttributionScopesData scopesData experimental type AttributionReportingSourceRegistrationResult extends string enum @@ -10620,7 +10729,9 @@ experimental domain Storage destinationBothLimitsReached reportingOriginsPerSiteLimitReached exceedsMaxChannelCapacity + exceedsMaxScopesChannelCapacity exceedsMaxTriggerStateCardinality + exceedsMaxEventStatesLimit destinationPerDayReportingLimitReached experimental event attributionReportingSourceRegistered @@ -10679,6 +10790,7 @@ experimental domain Storage AttributionReportingSourceRegistrationTimeConfig sourceRegistrationTimeConfig optional string triggerContextId AttributionReportingAggregatableDebugReportingConfig aggregatableDebugReportingConfig + array of string scopes experimental type AttributionReportingEventLevelResult extends string enum @@ -12330,7 +12442,6 @@ experimental domain Preload PrefetchFailedMIMENotSupported PrefetchFailedNetError PrefetchFailedNon2XX - PrefetchFailedPerPageLimitExceeded PrefetchEvictedAfterCandidateRemoved PrefetchEvictedForNewerPrefetch PrefetchHeldback @@ -12612,3 +12723,67 @@ experimental domain PWA # supported yet. optional boolean linkCapturing optional DisplayMode displayMode + +# This domain allows configuring virtual Bluetooth devices to test +# the web-bluetooth API. +experimental domain BluetoothEmulation + # Indicates the various states of Central. + type CentralState extends string + enum + absent + powered-off + powered-on + + # Stores the manufacturer data + type ManufacturerData extends object + properties + # Company identifier + # https://bitbucket.org/bluetooth-SIG/public/src/main/assigned_numbers/company_identifiers/company_identifiers.yaml + # https://usb.org/developers + integer key + # Manufacturer-specific data + binary data + + # Stores the byte data of the advertisement packet sent by a Bluetooth device. + type ScanRecord extends object + properties + optional string name + optional array of string uuids + # Stores the external appearance description of the device. + optional integer appearance + # Stores the transmission power of a broadcasting device. + optional integer txPower + # Key is the company identifier and the value is an array of bytes of + # manufacturer specific data. + optional array of ManufacturerData manufacturerData + + # Stores the advertisement packet information that is sent by a Bluetooth device. + type ScanEntry extends object + properties + string deviceAddress + integer rssi + ScanRecord scanRecord + + # Enable the BluetoothEmulation domain. + command enable + parameters + # State of the simulated central. + CentralState state + + # Disable the BluetoothEmulation domain. + command disable + + # Simulates a peripheral with |address|, |name| and |knownServiceUuids| + # that has already been connected to the system. + command simulatePreconnectedPeripheral + parameters + string address + string name + array of ManufacturerData manufacturerData + array of string knownServiceUuids + + # Simulates an advertisement packet described in |entry| being received by + # the central. + command simulateAdvertisement + parameters + ScanEntry entry diff --git a/chromiumoxide_cdp/js_protocol.pdl b/chromiumoxide_cdp/js_protocol.pdl index 8dad9c98..b106a709 100644 --- a/chromiumoxide_cdp/js_protocol.pdl +++ b/chromiumoxide_cdp/js_protocol.pdl @@ -606,7 +606,6 @@ domain Debugger properties # Type of the debug symbols. enum type - None SourceMap EmbeddedDWARF ExternalDWARF @@ -689,8 +688,8 @@ domain Debugger experimental optional integer codeOffset # The language of the script. experimental optional Debugger.ScriptLanguage scriptLanguage - # If the scriptLanguage is WebASsembly, the source of debug symbols for the module. - experimental optional Debugger.DebugSymbols debugSymbols + # If the scriptLanguage is WebAssembly, the source of debug symbols for the module. + experimental optional array of Debugger.DebugSymbols debugSymbols # The name the embedder supplied for this script. experimental optional string embedderName diff --git a/chromiumoxide_cdp/src/cdp.rs b/chromiumoxide_cdp/src/cdp.rs index 3cd1fc2d..1bb712ae 100644 --- a/chromiumoxide_cdp/src/cdp.rs +++ b/chromiumoxide_cdp/src/cdp.rs @@ -183,6 +183,7 @@ pub mod events { CdpEvent::DomInlineStyleInvalidated(inner) => inner.identifier(), CdpEvent::DomPseudoElementAdded(inner) => inner.identifier(), CdpEvent::DomTopLayerElementsUpdated(inner) => inner.identifier(), + CdpEvent::DomScrollableFlagUpdated(inner) => inner.identifier(), CdpEvent::DomPseudoElementRemoved(inner) => inner.identifier(), CdpEvent::DomSetChildNodes(inner) => inner.identifier(), CdpEvent::DomShadowRootPopped(inner) => inner.identifier(), @@ -243,6 +244,7 @@ pub mod events { CdpEvent::PageFileChooserOpened(inner) => inner.identifier(), CdpEvent::PageFrameAttached(inner) => inner.identifier(), CdpEvent::PageFrameDetached(inner) => inner.identifier(), + CdpEvent::PageFrameSubtreeWillBeDetached(inner) => inner.identifier(), CdpEvent::PageFrameNavigated(inner) => inner.identifier(), CdpEvent::PageDocumentOpened(inner) => inner.identifier(), CdpEvent::PageFrameResized(inner) => inner.identifier(), @@ -397,6 +399,7 @@ pub mod events { DomInlineStyleInvalidated(super::browser_protocol::dom::EventInlineStyleInvalidated), DomPseudoElementAdded(Box), DomTopLayerElementsUpdated(super::browser_protocol::dom::EventTopLayerElementsUpdated), + DomScrollableFlagUpdated(super::browser_protocol::dom::EventScrollableFlagUpdated), DomPseudoElementRemoved(super::browser_protocol::dom::EventPseudoElementRemoved), DomSetChildNodes(super::browser_protocol::dom::EventSetChildNodes), DomShadowRootPopped(super::browser_protocol::dom::EventShadowRootPopped), @@ -505,6 +508,9 @@ pub mod events { PageFileChooserOpened(super::browser_protocol::page::EventFileChooserOpened), PageFrameAttached(super::browser_protocol::page::EventFrameAttached), PageFrameDetached(super::browser_protocol::page::EventFrameDetached), + PageFrameSubtreeWillBeDetached( + super::browser_protocol::page::EventFrameSubtreeWillBeDetached, + ), PageFrameNavigated(Box), PageDocumentOpened(Box), PageFrameResized(super::browser_protocol::page::EventFrameResized), @@ -701,6 +707,7 @@ pub mod events { CdpEvent::DomInlineStyleInvalidated(inner) => serde_json::to_value(inner), CdpEvent::DomPseudoElementAdded(inner) => serde_json::to_value(inner), CdpEvent::DomTopLayerElementsUpdated(inner) => serde_json::to_value(inner), + CdpEvent::DomScrollableFlagUpdated(inner) => serde_json::to_value(inner), CdpEvent::DomPseudoElementRemoved(inner) => serde_json::to_value(inner), CdpEvent::DomSetChildNodes(inner) => serde_json::to_value(inner), CdpEvent::DomShadowRootPopped(inner) => serde_json::to_value(inner), @@ -773,6 +780,7 @@ pub mod events { CdpEvent::PageFileChooserOpened(inner) => serde_json::to_value(inner), CdpEvent::PageFrameAttached(inner) => serde_json::to_value(inner), CdpEvent::PageFrameDetached(inner) => serde_json::to_value(inner), + CdpEvent::PageFrameSubtreeWillBeDetached(inner) => serde_json::to_value(inner), CdpEvent::PageFrameNavigated(inner) => serde_json::to_value(inner), CdpEvent::PageDocumentOpened(inner) => serde_json::to_value(inner), CdpEvent::PageFrameResized(inner) => serde_json::to_value(inner), @@ -927,6 +935,7 @@ pub mod events { CdpEvent::DomInlineStyleInvalidated(event) => Ok(Box::new(event)), CdpEvent::DomPseudoElementAdded(event) => Ok(Box::new(*event)), CdpEvent::DomTopLayerElementsUpdated(event) => Ok(Box::new(event)), + CdpEvent::DomScrollableFlagUpdated(event) => Ok(Box::new(event)), CdpEvent::DomPseudoElementRemoved(event) => Ok(Box::new(event)), CdpEvent::DomSetChildNodes(event) => Ok(Box::new(event)), CdpEvent::DomShadowRootPopped(event) => Ok(Box::new(event)), @@ -989,6 +998,7 @@ pub mod events { CdpEvent::PageFileChooserOpened(event) => Ok(Box::new(event)), CdpEvent::PageFrameAttached(event) => Ok(Box::new(event)), CdpEvent::PageFrameDetached(event) => Ok(Box::new(event)), + CdpEvent::PageFrameSubtreeWillBeDetached(event) => Ok(Box::new(event)), CdpEvent::PageFrameNavigated(event) => Ok(Box::new(*event)), CdpEvent::PageDocumentOpened(event) => Ok(Box::new(*event)), CdpEvent::PageFrameResized(event) => Ok(Box::new(event)), @@ -1146,7 +1156,7 @@ pub mod events { if params.is_some() { return Err(de::Error::duplicate_field("params")); } - params = Some (match method . as_ref () . ok_or_else (|| de :: Error :: missing_field ("params")) ? . as_str () { super :: js_protocol :: debugger :: EventBreakpointResolved :: IDENTIFIER => CdpEvent :: DebuggerBreakpointResolved (map . next_value :: < super :: js_protocol :: debugger :: EventBreakpointResolved > () ?) , super :: js_protocol :: debugger :: EventPaused :: IDENTIFIER => CdpEvent :: DebuggerPaused (map . next_value :: < super :: js_protocol :: debugger :: EventPaused > () ?) , super :: js_protocol :: debugger :: EventResumed :: IDENTIFIER => CdpEvent :: DebuggerResumed (map . next_value :: < super :: js_protocol :: debugger :: EventResumed > () ?) , super :: js_protocol :: debugger :: EventScriptFailedToParse :: IDENTIFIER => CdpEvent :: DebuggerScriptFailedToParse (Box :: new (map . next_value :: < super :: js_protocol :: debugger :: EventScriptFailedToParse > () ?)) , super :: js_protocol :: debugger :: EventScriptParsed :: IDENTIFIER => CdpEvent :: DebuggerScriptParsed (Box :: new (map . next_value :: < super :: js_protocol :: debugger :: EventScriptParsed > () ?)) , super :: js_protocol :: heap_profiler :: EventAddHeapSnapshotChunk :: IDENTIFIER => CdpEvent :: HeapProfilerAddHeapSnapshotChunk (map . next_value :: < super :: js_protocol :: heap_profiler :: EventAddHeapSnapshotChunk > () ?) , super :: js_protocol :: heap_profiler :: EventHeapStatsUpdate :: IDENTIFIER => CdpEvent :: HeapProfilerHeapStatsUpdate (map . next_value :: < super :: js_protocol :: heap_profiler :: EventHeapStatsUpdate > () ?) , super :: js_protocol :: heap_profiler :: EventLastSeenObjectId :: IDENTIFIER => CdpEvent :: HeapProfilerLastSeenObjectId (map . next_value :: < super :: js_protocol :: heap_profiler :: EventLastSeenObjectId > () ?) , super :: js_protocol :: heap_profiler :: EventReportHeapSnapshotProgress :: IDENTIFIER => CdpEvent :: HeapProfilerReportHeapSnapshotProgress (map . next_value :: < super :: js_protocol :: heap_profiler :: EventReportHeapSnapshotProgress > () ?) , super :: js_protocol :: heap_profiler :: EventResetProfiles :: IDENTIFIER => CdpEvent :: HeapProfilerResetProfiles (map . next_value :: < super :: js_protocol :: heap_profiler :: EventResetProfiles > () ?) , super :: js_protocol :: profiler :: EventConsoleProfileFinished :: IDENTIFIER => CdpEvent :: ProfilerConsoleProfileFinished (map . next_value :: < super :: js_protocol :: profiler :: EventConsoleProfileFinished > () ?) , super :: js_protocol :: profiler :: EventConsoleProfileStarted :: IDENTIFIER => CdpEvent :: ProfilerConsoleProfileStarted (map . next_value :: < super :: js_protocol :: profiler :: EventConsoleProfileStarted > () ?) , super :: js_protocol :: profiler :: EventPreciseCoverageDeltaUpdate :: IDENTIFIER => CdpEvent :: ProfilerPreciseCoverageDeltaUpdate (map . next_value :: < super :: js_protocol :: profiler :: EventPreciseCoverageDeltaUpdate > () ?) , super :: js_protocol :: runtime :: EventBindingCalled :: IDENTIFIER => CdpEvent :: RuntimeBindingCalled (map . next_value :: < super :: js_protocol :: runtime :: EventBindingCalled > () ?) , super :: js_protocol :: runtime :: EventConsoleApiCalled :: IDENTIFIER => CdpEvent :: RuntimeConsoleApiCalled (map . next_value :: < super :: js_protocol :: runtime :: EventConsoleApiCalled > () ?) , super :: js_protocol :: runtime :: EventExceptionRevoked :: IDENTIFIER => CdpEvent :: RuntimeExceptionRevoked (map . next_value :: < super :: js_protocol :: runtime :: EventExceptionRevoked > () ?) , super :: js_protocol :: runtime :: EventExceptionThrown :: IDENTIFIER => CdpEvent :: RuntimeExceptionThrown (Box :: new (map . next_value :: < super :: js_protocol :: runtime :: EventExceptionThrown > () ?)) , super :: js_protocol :: runtime :: EventExecutionContextCreated :: IDENTIFIER => CdpEvent :: RuntimeExecutionContextCreated (map . next_value :: < super :: js_protocol :: runtime :: EventExecutionContextCreated > () ?) , super :: js_protocol :: runtime :: EventExecutionContextDestroyed :: IDENTIFIER => CdpEvent :: RuntimeExecutionContextDestroyed (map . next_value :: < super :: js_protocol :: runtime :: EventExecutionContextDestroyed > () ?) , super :: js_protocol :: runtime :: EventExecutionContextsCleared :: IDENTIFIER => CdpEvent :: RuntimeExecutionContextsCleared (map . next_value :: < super :: js_protocol :: runtime :: EventExecutionContextsCleared > () ?) , super :: js_protocol :: runtime :: EventInspectRequested :: IDENTIFIER => CdpEvent :: RuntimeInspectRequested (Box :: new (map . next_value :: < super :: js_protocol :: runtime :: EventInspectRequested > () ?)) , super :: browser_protocol :: accessibility :: EventLoadComplete :: IDENTIFIER => CdpEvent :: AccessibilityLoadComplete (Box :: new (map . next_value :: < super :: browser_protocol :: accessibility :: EventLoadComplete > () ?)) , super :: browser_protocol :: accessibility :: EventNodesUpdated :: IDENTIFIER => CdpEvent :: AccessibilityNodesUpdated (map . next_value :: < super :: browser_protocol :: accessibility :: EventNodesUpdated > () ?) , super :: browser_protocol :: animation :: EventAnimationCanceled :: IDENTIFIER => CdpEvent :: AnimationAnimationCanceled (map . next_value :: < super :: browser_protocol :: animation :: EventAnimationCanceled > () ?) , super :: browser_protocol :: animation :: EventAnimationCreated :: IDENTIFIER => CdpEvent :: AnimationAnimationCreated (map . next_value :: < super :: browser_protocol :: animation :: EventAnimationCreated > () ?) , super :: browser_protocol :: animation :: EventAnimationStarted :: IDENTIFIER => CdpEvent :: AnimationAnimationStarted (Box :: new (map . next_value :: < super :: browser_protocol :: animation :: EventAnimationStarted > () ?)) , super :: browser_protocol :: animation :: EventAnimationUpdated :: IDENTIFIER => CdpEvent :: AnimationAnimationUpdated (Box :: new (map . next_value :: < super :: browser_protocol :: animation :: EventAnimationUpdated > () ?)) , super :: browser_protocol :: audits :: EventIssueAdded :: IDENTIFIER => CdpEvent :: AuditsIssueAdded (Box :: new (map . next_value :: < super :: browser_protocol :: audits :: EventIssueAdded > () ?)) , super :: browser_protocol :: autofill :: EventAddressFormFilled :: IDENTIFIER => CdpEvent :: AutofillAddressFormFilled (map . next_value :: < super :: browser_protocol :: autofill :: EventAddressFormFilled > () ?) , super :: browser_protocol :: background_service :: EventRecordingStateChanged :: IDENTIFIER => CdpEvent :: BackgroundServiceRecordingStateChanged (map . next_value :: < super :: browser_protocol :: background_service :: EventRecordingStateChanged > () ?) , super :: browser_protocol :: background_service :: EventBackgroundServiceEventReceived :: IDENTIFIER => CdpEvent :: BackgroundServiceBackgroundServiceEventReceived (map . next_value :: < super :: browser_protocol :: background_service :: EventBackgroundServiceEventReceived > () ?) , super :: browser_protocol :: browser :: EventDownloadWillBegin :: IDENTIFIER => CdpEvent :: BrowserDownloadWillBegin (map . next_value :: < super :: browser_protocol :: browser :: EventDownloadWillBegin > () ?) , super :: browser_protocol :: browser :: EventDownloadProgress :: IDENTIFIER => CdpEvent :: BrowserDownloadProgress (map . next_value :: < super :: browser_protocol :: browser :: EventDownloadProgress > () ?) , super :: browser_protocol :: css :: EventFontsUpdated :: IDENTIFIER => CdpEvent :: CssFontsUpdated (Box :: new (map . next_value :: < super :: browser_protocol :: css :: EventFontsUpdated > () ?)) , super :: browser_protocol :: css :: EventMediaQueryResultChanged :: IDENTIFIER => CdpEvent :: CssMediaQueryResultChanged (map . next_value :: < super :: browser_protocol :: css :: EventMediaQueryResultChanged > () ?) , super :: browser_protocol :: css :: EventStyleSheetAdded :: IDENTIFIER => CdpEvent :: CssStyleSheetAdded (map . next_value :: < super :: browser_protocol :: css :: EventStyleSheetAdded > () ?) , super :: browser_protocol :: css :: EventStyleSheetChanged :: IDENTIFIER => CdpEvent :: CssStyleSheetChanged (map . next_value :: < super :: browser_protocol :: css :: EventStyleSheetChanged > () ?) , super :: browser_protocol :: css :: EventStyleSheetRemoved :: IDENTIFIER => CdpEvent :: CssStyleSheetRemoved (map . next_value :: < super :: browser_protocol :: css :: EventStyleSheetRemoved > () ?) , super :: browser_protocol :: cast :: EventSinksUpdated :: IDENTIFIER => CdpEvent :: CastSinksUpdated (map . next_value :: < super :: browser_protocol :: cast :: EventSinksUpdated > () ?) , super :: browser_protocol :: cast :: EventIssueUpdated :: IDENTIFIER => CdpEvent :: CastIssueUpdated (map . next_value :: < super :: browser_protocol :: cast :: EventIssueUpdated > () ?) , super :: browser_protocol :: dom :: EventAttributeModified :: IDENTIFIER => CdpEvent :: DomAttributeModified (map . next_value :: < super :: browser_protocol :: dom :: EventAttributeModified > () ?) , super :: browser_protocol :: dom :: EventAttributeRemoved :: IDENTIFIER => CdpEvent :: DomAttributeRemoved (map . next_value :: < super :: browser_protocol :: dom :: EventAttributeRemoved > () ?) , super :: browser_protocol :: dom :: EventCharacterDataModified :: IDENTIFIER => CdpEvent :: DomCharacterDataModified (map . next_value :: < super :: browser_protocol :: dom :: EventCharacterDataModified > () ?) , super :: browser_protocol :: dom :: EventChildNodeCountUpdated :: IDENTIFIER => CdpEvent :: DomChildNodeCountUpdated (map . next_value :: < super :: browser_protocol :: dom :: EventChildNodeCountUpdated > () ?) , super :: browser_protocol :: dom :: EventChildNodeInserted :: IDENTIFIER => CdpEvent :: DomChildNodeInserted (Box :: new (map . next_value :: < super :: browser_protocol :: dom :: EventChildNodeInserted > () ?)) , super :: browser_protocol :: dom :: EventChildNodeRemoved :: IDENTIFIER => CdpEvent :: DomChildNodeRemoved (map . next_value :: < super :: browser_protocol :: dom :: EventChildNodeRemoved > () ?) , super :: browser_protocol :: dom :: EventDistributedNodesUpdated :: IDENTIFIER => CdpEvent :: DomDistributedNodesUpdated (map . next_value :: < super :: browser_protocol :: dom :: EventDistributedNodesUpdated > () ?) , super :: browser_protocol :: dom :: EventDocumentUpdated :: IDENTIFIER => CdpEvent :: DomDocumentUpdated (map . next_value :: < super :: browser_protocol :: dom :: EventDocumentUpdated > () ?) , super :: browser_protocol :: dom :: EventInlineStyleInvalidated :: IDENTIFIER => CdpEvent :: DomInlineStyleInvalidated (map . next_value :: < super :: browser_protocol :: dom :: EventInlineStyleInvalidated > () ?) , super :: browser_protocol :: dom :: EventPseudoElementAdded :: IDENTIFIER => CdpEvent :: DomPseudoElementAdded (Box :: new (map . next_value :: < super :: browser_protocol :: dom :: EventPseudoElementAdded > () ?)) , super :: browser_protocol :: dom :: EventTopLayerElementsUpdated :: IDENTIFIER => CdpEvent :: DomTopLayerElementsUpdated (map . next_value :: < super :: browser_protocol :: dom :: EventTopLayerElementsUpdated > () ?) , super :: browser_protocol :: dom :: EventPseudoElementRemoved :: IDENTIFIER => CdpEvent :: DomPseudoElementRemoved (map . next_value :: < super :: browser_protocol :: dom :: EventPseudoElementRemoved > () ?) , super :: browser_protocol :: dom :: EventSetChildNodes :: IDENTIFIER => CdpEvent :: DomSetChildNodes (map . next_value :: < super :: browser_protocol :: dom :: EventSetChildNodes > () ?) , super :: browser_protocol :: dom :: EventShadowRootPopped :: IDENTIFIER => CdpEvent :: DomShadowRootPopped (map . next_value :: < super :: browser_protocol :: dom :: EventShadowRootPopped > () ?) , super :: browser_protocol :: dom :: EventShadowRootPushed :: IDENTIFIER => CdpEvent :: DomShadowRootPushed (Box :: new (map . next_value :: < super :: browser_protocol :: dom :: EventShadowRootPushed > () ?)) , super :: browser_protocol :: dom_storage :: EventDomStorageItemAdded :: IDENTIFIER => CdpEvent :: DomStorageDomStorageItemAdded (map . next_value :: < super :: browser_protocol :: dom_storage :: EventDomStorageItemAdded > () ?) , super :: browser_protocol :: dom_storage :: EventDomStorageItemRemoved :: IDENTIFIER => CdpEvent :: DomStorageDomStorageItemRemoved (map . next_value :: < super :: browser_protocol :: dom_storage :: EventDomStorageItemRemoved > () ?) , super :: browser_protocol :: dom_storage :: EventDomStorageItemUpdated :: IDENTIFIER => CdpEvent :: DomStorageDomStorageItemUpdated (map . next_value :: < super :: browser_protocol :: dom_storage :: EventDomStorageItemUpdated > () ?) , super :: browser_protocol :: dom_storage :: EventDomStorageItemsCleared :: IDENTIFIER => CdpEvent :: DomStorageDomStorageItemsCleared (map . next_value :: < super :: browser_protocol :: dom_storage :: EventDomStorageItemsCleared > () ?) , super :: browser_protocol :: database :: EventAddDatabase :: IDENTIFIER => CdpEvent :: DatabaseAddDatabase (map . next_value :: < super :: browser_protocol :: database :: EventAddDatabase > () ?) , super :: browser_protocol :: emulation :: EventVirtualTimeBudgetExpired :: IDENTIFIER => CdpEvent :: EmulationVirtualTimeBudgetExpired (map . next_value :: < super :: browser_protocol :: emulation :: EventVirtualTimeBudgetExpired > () ?) , super :: browser_protocol :: input :: EventDragIntercepted :: IDENTIFIER => CdpEvent :: InputDragIntercepted (map . next_value :: < super :: browser_protocol :: input :: EventDragIntercepted > () ?) , super :: browser_protocol :: inspector :: EventDetached :: IDENTIFIER => CdpEvent :: InspectorDetached (map . next_value :: < super :: browser_protocol :: inspector :: EventDetached > () ?) , super :: browser_protocol :: inspector :: EventTargetCrashed :: IDENTIFIER => CdpEvent :: InspectorTargetCrashed (map . next_value :: < super :: browser_protocol :: inspector :: EventTargetCrashed > () ?) , super :: browser_protocol :: inspector :: EventTargetReloadedAfterCrash :: IDENTIFIER => CdpEvent :: InspectorTargetReloadedAfterCrash (map . next_value :: < super :: browser_protocol :: inspector :: EventTargetReloadedAfterCrash > () ?) , super :: browser_protocol :: layer_tree :: EventLayerPainted :: IDENTIFIER => CdpEvent :: LayerTreeLayerPainted (map . next_value :: < super :: browser_protocol :: layer_tree :: EventLayerPainted > () ?) , super :: browser_protocol :: layer_tree :: EventLayerTreeDidChange :: IDENTIFIER => CdpEvent :: LayerTreeLayerTreeDidChange (map . next_value :: < super :: browser_protocol :: layer_tree :: EventLayerTreeDidChange > () ?) , super :: browser_protocol :: log :: EventEntryAdded :: IDENTIFIER => CdpEvent :: LogEntryAdded (Box :: new (map . next_value :: < super :: browser_protocol :: log :: EventEntryAdded > () ?)) , super :: browser_protocol :: network :: EventDataReceived :: IDENTIFIER => CdpEvent :: NetworkDataReceived (map . next_value :: < super :: browser_protocol :: network :: EventDataReceived > () ?) , super :: browser_protocol :: network :: EventEventSourceMessageReceived :: IDENTIFIER => CdpEvent :: NetworkEventSourceMessageReceived (map . next_value :: < super :: browser_protocol :: network :: EventEventSourceMessageReceived > () ?) , super :: browser_protocol :: network :: EventLoadingFailed :: IDENTIFIER => CdpEvent :: NetworkLoadingFailed (map . next_value :: < super :: browser_protocol :: network :: EventLoadingFailed > () ?) , super :: browser_protocol :: network :: EventLoadingFinished :: IDENTIFIER => CdpEvent :: NetworkLoadingFinished (map . next_value :: < super :: browser_protocol :: network :: EventLoadingFinished > () ?) , super :: browser_protocol :: network :: EventRequestServedFromCache :: IDENTIFIER => CdpEvent :: NetworkRequestServedFromCache (map . next_value :: < super :: browser_protocol :: network :: EventRequestServedFromCache > () ?) , super :: browser_protocol :: network :: EventRequestWillBeSent :: IDENTIFIER => CdpEvent :: NetworkRequestWillBeSent (Box :: new (map . next_value :: < super :: browser_protocol :: network :: EventRequestWillBeSent > () ?)) , super :: browser_protocol :: network :: EventResourceChangedPriority :: IDENTIFIER => CdpEvent :: NetworkResourceChangedPriority (map . next_value :: < super :: browser_protocol :: network :: EventResourceChangedPriority > () ?) , super :: browser_protocol :: network :: EventSignedExchangeReceived :: IDENTIFIER => CdpEvent :: NetworkSignedExchangeReceived (Box :: new (map . next_value :: < super :: browser_protocol :: network :: EventSignedExchangeReceived > () ?)) , super :: browser_protocol :: network :: EventResponseReceived :: IDENTIFIER => CdpEvent :: NetworkResponseReceived (Box :: new (map . next_value :: < super :: browser_protocol :: network :: EventResponseReceived > () ?)) , super :: browser_protocol :: network :: EventWebSocketClosed :: IDENTIFIER => CdpEvent :: NetworkWebSocketClosed (map . next_value :: < super :: browser_protocol :: network :: EventWebSocketClosed > () ?) , super :: browser_protocol :: network :: EventWebSocketCreated :: IDENTIFIER => CdpEvent :: NetworkWebSocketCreated (Box :: new (map . next_value :: < super :: browser_protocol :: network :: EventWebSocketCreated > () ?)) , super :: browser_protocol :: network :: EventWebSocketFrameError :: IDENTIFIER => CdpEvent :: NetworkWebSocketFrameError (map . next_value :: < super :: browser_protocol :: network :: EventWebSocketFrameError > () ?) , super :: browser_protocol :: network :: EventWebSocketFrameReceived :: IDENTIFIER => CdpEvent :: NetworkWebSocketFrameReceived (map . next_value :: < super :: browser_protocol :: network :: EventWebSocketFrameReceived > () ?) , super :: browser_protocol :: network :: EventWebSocketFrameSent :: IDENTIFIER => CdpEvent :: NetworkWebSocketFrameSent (map . next_value :: < super :: browser_protocol :: network :: EventWebSocketFrameSent > () ?) , super :: browser_protocol :: network :: EventWebSocketHandshakeResponseReceived :: IDENTIFIER => CdpEvent :: NetworkWebSocketHandshakeResponseReceived (Box :: new (map . next_value :: < super :: browser_protocol :: network :: EventWebSocketHandshakeResponseReceived > () ?)) , super :: browser_protocol :: network :: EventWebSocketWillSendHandshakeRequest :: IDENTIFIER => CdpEvent :: NetworkWebSocketWillSendHandshakeRequest (map . next_value :: < super :: browser_protocol :: network :: EventWebSocketWillSendHandshakeRequest > () ?) , super :: browser_protocol :: network :: EventWebTransportCreated :: IDENTIFIER => CdpEvent :: NetworkWebTransportCreated (Box :: new (map . next_value :: < super :: browser_protocol :: network :: EventWebTransportCreated > () ?)) , super :: browser_protocol :: network :: EventWebTransportConnectionEstablished :: IDENTIFIER => CdpEvent :: NetworkWebTransportConnectionEstablished (map . next_value :: < super :: browser_protocol :: network :: EventWebTransportConnectionEstablished > () ?) , super :: browser_protocol :: network :: EventWebTransportClosed :: IDENTIFIER => CdpEvent :: NetworkWebTransportClosed (map . next_value :: < super :: browser_protocol :: network :: EventWebTransportClosed > () ?) , super :: browser_protocol :: network :: EventRequestWillBeSentExtraInfo :: IDENTIFIER => CdpEvent :: NetworkRequestWillBeSentExtraInfo (map . next_value :: < super :: browser_protocol :: network :: EventRequestWillBeSentExtraInfo > () ?) , super :: browser_protocol :: network :: EventResponseReceivedExtraInfo :: IDENTIFIER => CdpEvent :: NetworkResponseReceivedExtraInfo (Box :: new (map . next_value :: < super :: browser_protocol :: network :: EventResponseReceivedExtraInfo > () ?)) , super :: browser_protocol :: network :: EventResponseReceivedEarlyHints :: IDENTIFIER => CdpEvent :: NetworkResponseReceivedEarlyHints (map . next_value :: < super :: browser_protocol :: network :: EventResponseReceivedEarlyHints > () ?) , super :: browser_protocol :: network :: EventTrustTokenOperationDone :: IDENTIFIER => CdpEvent :: NetworkTrustTokenOperationDone (map . next_value :: < super :: browser_protocol :: network :: EventTrustTokenOperationDone > () ?) , super :: browser_protocol :: network :: EventPolicyUpdated :: IDENTIFIER => CdpEvent :: NetworkPolicyUpdated (map . next_value :: < super :: browser_protocol :: network :: EventPolicyUpdated > () ?) , super :: browser_protocol :: network :: EventSubresourceWebBundleMetadataReceived :: IDENTIFIER => CdpEvent :: NetworkSubresourceWebBundleMetadataReceived (map . next_value :: < super :: browser_protocol :: network :: EventSubresourceWebBundleMetadataReceived > () ?) , super :: browser_protocol :: network :: EventSubresourceWebBundleMetadataError :: IDENTIFIER => CdpEvent :: NetworkSubresourceWebBundleMetadataError (map . next_value :: < super :: browser_protocol :: network :: EventSubresourceWebBundleMetadataError > () ?) , super :: browser_protocol :: network :: EventSubresourceWebBundleInnerResponseParsed :: IDENTIFIER => CdpEvent :: NetworkSubresourceWebBundleInnerResponseParsed (map . next_value :: < super :: browser_protocol :: network :: EventSubresourceWebBundleInnerResponseParsed > () ?) , super :: browser_protocol :: network :: EventSubresourceWebBundleInnerResponseError :: IDENTIFIER => CdpEvent :: NetworkSubresourceWebBundleInnerResponseError (map . next_value :: < super :: browser_protocol :: network :: EventSubresourceWebBundleInnerResponseError > () ?) , super :: browser_protocol :: network :: EventReportingApiReportAdded :: IDENTIFIER => CdpEvent :: NetworkReportingApiReportAdded (map . next_value :: < super :: browser_protocol :: network :: EventReportingApiReportAdded > () ?) , super :: browser_protocol :: network :: EventReportingApiReportUpdated :: IDENTIFIER => CdpEvent :: NetworkReportingApiReportUpdated (map . next_value :: < super :: browser_protocol :: network :: EventReportingApiReportUpdated > () ?) , super :: browser_protocol :: network :: EventReportingApiEndpointsChangedForOrigin :: IDENTIFIER => CdpEvent :: NetworkReportingApiEndpointsChangedForOrigin (map . next_value :: < super :: browser_protocol :: network :: EventReportingApiEndpointsChangedForOrigin > () ?) , super :: browser_protocol :: overlay :: EventInspectNodeRequested :: IDENTIFIER => CdpEvent :: OverlayInspectNodeRequested (map . next_value :: < super :: browser_protocol :: overlay :: EventInspectNodeRequested > () ?) , super :: browser_protocol :: overlay :: EventNodeHighlightRequested :: IDENTIFIER => CdpEvent :: OverlayNodeHighlightRequested (map . next_value :: < super :: browser_protocol :: overlay :: EventNodeHighlightRequested > () ?) , super :: browser_protocol :: overlay :: EventScreenshotRequested :: IDENTIFIER => CdpEvent :: OverlayScreenshotRequested (map . next_value :: < super :: browser_protocol :: overlay :: EventScreenshotRequested > () ?) , super :: browser_protocol :: overlay :: EventInspectModeCanceled :: IDENTIFIER => CdpEvent :: OverlayInspectModeCanceled (map . next_value :: < super :: browser_protocol :: overlay :: EventInspectModeCanceled > () ?) , super :: browser_protocol :: page :: EventDomContentEventFired :: IDENTIFIER => CdpEvent :: PageDomContentEventFired (map . next_value :: < super :: browser_protocol :: page :: EventDomContentEventFired > () ?) , super :: browser_protocol :: page :: EventFileChooserOpened :: IDENTIFIER => CdpEvent :: PageFileChooserOpened (map . next_value :: < super :: browser_protocol :: page :: EventFileChooserOpened > () ?) , super :: browser_protocol :: page :: EventFrameAttached :: IDENTIFIER => CdpEvent :: PageFrameAttached (map . next_value :: < super :: browser_protocol :: page :: EventFrameAttached > () ?) , super :: browser_protocol :: page :: EventFrameDetached :: IDENTIFIER => CdpEvent :: PageFrameDetached (map . next_value :: < super :: browser_protocol :: page :: EventFrameDetached > () ?) , super :: browser_protocol :: page :: EventFrameNavigated :: IDENTIFIER => CdpEvent :: PageFrameNavigated (Box :: new (map . next_value :: < super :: browser_protocol :: page :: EventFrameNavigated > () ?)) , super :: browser_protocol :: page :: EventDocumentOpened :: IDENTIFIER => CdpEvent :: PageDocumentOpened (Box :: new (map . next_value :: < super :: browser_protocol :: page :: EventDocumentOpened > () ?)) , super :: browser_protocol :: page :: EventFrameResized :: IDENTIFIER => CdpEvent :: PageFrameResized (map . next_value :: < super :: browser_protocol :: page :: EventFrameResized > () ?) , super :: browser_protocol :: page :: EventFrameRequestedNavigation :: IDENTIFIER => CdpEvent :: PageFrameRequestedNavigation (map . next_value :: < super :: browser_protocol :: page :: EventFrameRequestedNavigation > () ?) , super :: browser_protocol :: page :: EventFrameStartedLoading :: IDENTIFIER => CdpEvent :: PageFrameStartedLoading (map . next_value :: < super :: browser_protocol :: page :: EventFrameStartedLoading > () ?) , super :: browser_protocol :: page :: EventFrameStoppedLoading :: IDENTIFIER => CdpEvent :: PageFrameStoppedLoading (map . next_value :: < super :: browser_protocol :: page :: EventFrameStoppedLoading > () ?) , super :: browser_protocol :: page :: EventInterstitialHidden :: IDENTIFIER => CdpEvent :: PageInterstitialHidden (map . next_value :: < super :: browser_protocol :: page :: EventInterstitialHidden > () ?) , super :: browser_protocol :: page :: EventInterstitialShown :: IDENTIFIER => CdpEvent :: PageInterstitialShown (map . next_value :: < super :: browser_protocol :: page :: EventInterstitialShown > () ?) , super :: browser_protocol :: page :: EventJavascriptDialogClosed :: IDENTIFIER => CdpEvent :: PageJavascriptDialogClosed (map . next_value :: < super :: browser_protocol :: page :: EventJavascriptDialogClosed > () ?) , super :: browser_protocol :: page :: EventJavascriptDialogOpening :: IDENTIFIER => CdpEvent :: PageJavascriptDialogOpening (map . next_value :: < super :: browser_protocol :: page :: EventJavascriptDialogOpening > () ?) , super :: browser_protocol :: page :: EventLifecycleEvent :: IDENTIFIER => CdpEvent :: PageLifecycleEvent (map . next_value :: < super :: browser_protocol :: page :: EventLifecycleEvent > () ?) , super :: browser_protocol :: page :: EventBackForwardCacheNotUsed :: IDENTIFIER => CdpEvent :: PageBackForwardCacheNotUsed (map . next_value :: < super :: browser_protocol :: page :: EventBackForwardCacheNotUsed > () ?) , super :: browser_protocol :: page :: EventLoadEventFired :: IDENTIFIER => CdpEvent :: PageLoadEventFired (map . next_value :: < super :: browser_protocol :: page :: EventLoadEventFired > () ?) , super :: browser_protocol :: page :: EventNavigatedWithinDocument :: IDENTIFIER => CdpEvent :: PageNavigatedWithinDocument (map . next_value :: < super :: browser_protocol :: page :: EventNavigatedWithinDocument > () ?) , super :: browser_protocol :: page :: EventScreencastFrame :: IDENTIFIER => CdpEvent :: PageScreencastFrame (map . next_value :: < super :: browser_protocol :: page :: EventScreencastFrame > () ?) , super :: browser_protocol :: page :: EventScreencastVisibilityChanged :: IDENTIFIER => CdpEvent :: PageScreencastVisibilityChanged (map . next_value :: < super :: browser_protocol :: page :: EventScreencastVisibilityChanged > () ?) , super :: browser_protocol :: page :: EventWindowOpen :: IDENTIFIER => CdpEvent :: PageWindowOpen (map . next_value :: < super :: browser_protocol :: page :: EventWindowOpen > () ?) , super :: browser_protocol :: page :: EventCompilationCacheProduced :: IDENTIFIER => CdpEvent :: PageCompilationCacheProduced (map . next_value :: < super :: browser_protocol :: page :: EventCompilationCacheProduced > () ?) , super :: browser_protocol :: performance :: EventMetrics :: IDENTIFIER => CdpEvent :: PerformanceMetrics (map . next_value :: < super :: browser_protocol :: performance :: EventMetrics > () ?) , super :: browser_protocol :: performance_timeline :: EventTimelineEventAdded :: IDENTIFIER => CdpEvent :: PerformanceTimelineTimelineEventAdded (Box :: new (map . next_value :: < super :: browser_protocol :: performance_timeline :: EventTimelineEventAdded > () ?)) , super :: browser_protocol :: security :: EventVisibleSecurityStateChanged :: IDENTIFIER => CdpEvent :: SecurityVisibleSecurityStateChanged (Box :: new (map . next_value :: < super :: browser_protocol :: security :: EventVisibleSecurityStateChanged > () ?)) , super :: browser_protocol :: service_worker :: EventWorkerErrorReported :: IDENTIFIER => CdpEvent :: ServiceWorkerWorkerErrorReported (map . next_value :: < super :: browser_protocol :: service_worker :: EventWorkerErrorReported > () ?) , super :: browser_protocol :: service_worker :: EventWorkerRegistrationUpdated :: IDENTIFIER => CdpEvent :: ServiceWorkerWorkerRegistrationUpdated (map . next_value :: < super :: browser_protocol :: service_worker :: EventWorkerRegistrationUpdated > () ?) , super :: browser_protocol :: service_worker :: EventWorkerVersionUpdated :: IDENTIFIER => CdpEvent :: ServiceWorkerWorkerVersionUpdated (map . next_value :: < super :: browser_protocol :: service_worker :: EventWorkerVersionUpdated > () ?) , super :: browser_protocol :: storage :: EventCacheStorageContentUpdated :: IDENTIFIER => CdpEvent :: StorageCacheStorageContentUpdated (map . next_value :: < super :: browser_protocol :: storage :: EventCacheStorageContentUpdated > () ?) , super :: browser_protocol :: storage :: EventCacheStorageListUpdated :: IDENTIFIER => CdpEvent :: StorageCacheStorageListUpdated (map . next_value :: < super :: browser_protocol :: storage :: EventCacheStorageListUpdated > () ?) , super :: browser_protocol :: storage :: EventIndexedDbContentUpdated :: IDENTIFIER => CdpEvent :: StorageIndexedDbContentUpdated (map . next_value :: < super :: browser_protocol :: storage :: EventIndexedDbContentUpdated > () ?) , super :: browser_protocol :: storage :: EventIndexedDbListUpdated :: IDENTIFIER => CdpEvent :: StorageIndexedDbListUpdated (map . next_value :: < super :: browser_protocol :: storage :: EventIndexedDbListUpdated > () ?) , super :: browser_protocol :: storage :: EventInterestGroupAccessed :: IDENTIFIER => CdpEvent :: StorageInterestGroupAccessed (map . next_value :: < super :: browser_protocol :: storage :: EventInterestGroupAccessed > () ?) , super :: browser_protocol :: storage :: EventInterestGroupAuctionEventOccurred :: IDENTIFIER => CdpEvent :: StorageInterestGroupAuctionEventOccurred (map . next_value :: < super :: browser_protocol :: storage :: EventInterestGroupAuctionEventOccurred > () ?) , super :: browser_protocol :: storage :: EventInterestGroupAuctionNetworkRequestCreated :: IDENTIFIER => CdpEvent :: StorageInterestGroupAuctionNetworkRequestCreated (map . next_value :: < super :: browser_protocol :: storage :: EventInterestGroupAuctionNetworkRequestCreated > () ?) , super :: browser_protocol :: storage :: EventSharedStorageAccessed :: IDENTIFIER => CdpEvent :: StorageSharedStorageAccessed (Box :: new (map . next_value :: < super :: browser_protocol :: storage :: EventSharedStorageAccessed > () ?)) , super :: browser_protocol :: storage :: EventStorageBucketCreatedOrUpdated :: IDENTIFIER => CdpEvent :: StorageStorageBucketCreatedOrUpdated (map . next_value :: < super :: browser_protocol :: storage :: EventStorageBucketCreatedOrUpdated > () ?) , super :: browser_protocol :: storage :: EventStorageBucketDeleted :: IDENTIFIER => CdpEvent :: StorageStorageBucketDeleted (map . next_value :: < super :: browser_protocol :: storage :: EventStorageBucketDeleted > () ?) , super :: browser_protocol :: storage :: EventAttributionReportingSourceRegistered :: IDENTIFIER => CdpEvent :: StorageAttributionReportingSourceRegistered (Box :: new (map . next_value :: < super :: browser_protocol :: storage :: EventAttributionReportingSourceRegistered > () ?)) , super :: browser_protocol :: storage :: EventAttributionReportingTriggerRegistered :: IDENTIFIER => CdpEvent :: StorageAttributionReportingTriggerRegistered (Box :: new (map . next_value :: < super :: browser_protocol :: storage :: EventAttributionReportingTriggerRegistered > () ?)) , super :: browser_protocol :: target :: EventAttachedToTarget :: IDENTIFIER => CdpEvent :: TargetAttachedToTarget (Box :: new (map . next_value :: < super :: browser_protocol :: target :: EventAttachedToTarget > () ?)) , super :: browser_protocol :: target :: EventDetachedFromTarget :: IDENTIFIER => CdpEvent :: TargetDetachedFromTarget (map . next_value :: < super :: browser_protocol :: target :: EventDetachedFromTarget > () ?) , super :: browser_protocol :: target :: EventReceivedMessageFromTarget :: IDENTIFIER => CdpEvent :: TargetReceivedMessageFromTarget (map . next_value :: < super :: browser_protocol :: target :: EventReceivedMessageFromTarget > () ?) , super :: browser_protocol :: target :: EventTargetCreated :: IDENTIFIER => CdpEvent :: TargetTargetCreated (map . next_value :: < super :: browser_protocol :: target :: EventTargetCreated > () ?) , super :: browser_protocol :: target :: EventTargetDestroyed :: IDENTIFIER => CdpEvent :: TargetTargetDestroyed (map . next_value :: < super :: browser_protocol :: target :: EventTargetDestroyed > () ?) , super :: browser_protocol :: target :: EventTargetCrashed :: IDENTIFIER => CdpEvent :: TargetTargetCrashed (map . next_value :: < super :: browser_protocol :: target :: EventTargetCrashed > () ?) , super :: browser_protocol :: target :: EventTargetInfoChanged :: IDENTIFIER => CdpEvent :: TargetTargetInfoChanged (map . next_value :: < super :: browser_protocol :: target :: EventTargetInfoChanged > () ?) , super :: browser_protocol :: tethering :: EventAccepted :: IDENTIFIER => CdpEvent :: TetheringAccepted (map . next_value :: < super :: browser_protocol :: tethering :: EventAccepted > () ?) , super :: browser_protocol :: tracing :: EventBufferUsage :: IDENTIFIER => CdpEvent :: TracingBufferUsage (map . next_value :: < super :: browser_protocol :: tracing :: EventBufferUsage > () ?) , super :: browser_protocol :: tracing :: EventDataCollected :: IDENTIFIER => CdpEvent :: TracingDataCollected (map . next_value :: < super :: browser_protocol :: tracing :: EventDataCollected > () ?) , super :: browser_protocol :: tracing :: EventTracingComplete :: IDENTIFIER => CdpEvent :: TracingTracingComplete (map . next_value :: < super :: browser_protocol :: tracing :: EventTracingComplete > () ?) , super :: browser_protocol :: fetch :: EventRequestPaused :: IDENTIFIER => CdpEvent :: FetchRequestPaused (Box :: new (map . next_value :: < super :: browser_protocol :: fetch :: EventRequestPaused > () ?)) , super :: browser_protocol :: fetch :: EventAuthRequired :: IDENTIFIER => CdpEvent :: FetchAuthRequired (Box :: new (map . next_value :: < super :: browser_protocol :: fetch :: EventAuthRequired > () ?)) , super :: browser_protocol :: web_audio :: EventContextCreated :: IDENTIFIER => CdpEvent :: WebAudioContextCreated (map . next_value :: < super :: browser_protocol :: web_audio :: EventContextCreated > () ?) , super :: browser_protocol :: web_audio :: EventContextWillBeDestroyed :: IDENTIFIER => CdpEvent :: WebAudioContextWillBeDestroyed (map . next_value :: < super :: browser_protocol :: web_audio :: EventContextWillBeDestroyed > () ?) , super :: browser_protocol :: web_audio :: EventContextChanged :: IDENTIFIER => CdpEvent :: WebAudioContextChanged (map . next_value :: < super :: browser_protocol :: web_audio :: EventContextChanged > () ?) , super :: browser_protocol :: web_audio :: EventAudioListenerCreated :: IDENTIFIER => CdpEvent :: WebAudioAudioListenerCreated (map . next_value :: < super :: browser_protocol :: web_audio :: EventAudioListenerCreated > () ?) , super :: browser_protocol :: web_audio :: EventAudioListenerWillBeDestroyed :: IDENTIFIER => CdpEvent :: WebAudioAudioListenerWillBeDestroyed (map . next_value :: < super :: browser_protocol :: web_audio :: EventAudioListenerWillBeDestroyed > () ?) , super :: browser_protocol :: web_audio :: EventAudioNodeCreated :: IDENTIFIER => CdpEvent :: WebAudioAudioNodeCreated (map . next_value :: < super :: browser_protocol :: web_audio :: EventAudioNodeCreated > () ?) , super :: browser_protocol :: web_audio :: EventAudioNodeWillBeDestroyed :: IDENTIFIER => CdpEvent :: WebAudioAudioNodeWillBeDestroyed (map . next_value :: < super :: browser_protocol :: web_audio :: EventAudioNodeWillBeDestroyed > () ?) , super :: browser_protocol :: web_audio :: EventAudioParamCreated :: IDENTIFIER => CdpEvent :: WebAudioAudioParamCreated (map . next_value :: < super :: browser_protocol :: web_audio :: EventAudioParamCreated > () ?) , super :: browser_protocol :: web_audio :: EventAudioParamWillBeDestroyed :: IDENTIFIER => CdpEvent :: WebAudioAudioParamWillBeDestroyed (map . next_value :: < super :: browser_protocol :: web_audio :: EventAudioParamWillBeDestroyed > () ?) , super :: browser_protocol :: web_audio :: EventNodesConnected :: IDENTIFIER => CdpEvent :: WebAudioNodesConnected (map . next_value :: < super :: browser_protocol :: web_audio :: EventNodesConnected > () ?) , super :: browser_protocol :: web_audio :: EventNodesDisconnected :: IDENTIFIER => CdpEvent :: WebAudioNodesDisconnected (map . next_value :: < super :: browser_protocol :: web_audio :: EventNodesDisconnected > () ?) , super :: browser_protocol :: web_audio :: EventNodeParamConnected :: IDENTIFIER => CdpEvent :: WebAudioNodeParamConnected (map . next_value :: < super :: browser_protocol :: web_audio :: EventNodeParamConnected > () ?) , super :: browser_protocol :: web_audio :: EventNodeParamDisconnected :: IDENTIFIER => CdpEvent :: WebAudioNodeParamDisconnected (map . next_value :: < super :: browser_protocol :: web_audio :: EventNodeParamDisconnected > () ?) , super :: browser_protocol :: web_authn :: EventCredentialAdded :: IDENTIFIER => CdpEvent :: WebAuthnCredentialAdded (map . next_value :: < super :: browser_protocol :: web_authn :: EventCredentialAdded > () ?) , super :: browser_protocol :: web_authn :: EventCredentialAsserted :: IDENTIFIER => CdpEvent :: WebAuthnCredentialAsserted (map . next_value :: < super :: browser_protocol :: web_authn :: EventCredentialAsserted > () ?) , super :: browser_protocol :: media :: EventPlayerPropertiesChanged :: IDENTIFIER => CdpEvent :: MediaPlayerPropertiesChanged (map . next_value :: < super :: browser_protocol :: media :: EventPlayerPropertiesChanged > () ?) , super :: browser_protocol :: media :: EventPlayerEventsAdded :: IDENTIFIER => CdpEvent :: MediaPlayerEventsAdded (map . next_value :: < super :: browser_protocol :: media :: EventPlayerEventsAdded > () ?) , super :: browser_protocol :: media :: EventPlayerMessagesLogged :: IDENTIFIER => CdpEvent :: MediaPlayerMessagesLogged (map . next_value :: < super :: browser_protocol :: media :: EventPlayerMessagesLogged > () ?) , super :: browser_protocol :: media :: EventPlayerErrorsRaised :: IDENTIFIER => CdpEvent :: MediaPlayerErrorsRaised (map . next_value :: < super :: browser_protocol :: media :: EventPlayerErrorsRaised > () ?) , super :: browser_protocol :: media :: EventPlayersCreated :: IDENTIFIER => CdpEvent :: MediaPlayersCreated (map . next_value :: < super :: browser_protocol :: media :: EventPlayersCreated > () ?) , super :: browser_protocol :: device_access :: EventDeviceRequestPrompted :: IDENTIFIER => CdpEvent :: DeviceAccessDeviceRequestPrompted (map . next_value :: < super :: browser_protocol :: device_access :: EventDeviceRequestPrompted > () ?) , super :: browser_protocol :: preload :: EventRuleSetUpdated :: IDENTIFIER => CdpEvent :: PreloadRuleSetUpdated (map . next_value :: < super :: browser_protocol :: preload :: EventRuleSetUpdated > () ?) , super :: browser_protocol :: preload :: EventRuleSetRemoved :: IDENTIFIER => CdpEvent :: PreloadRuleSetRemoved (map . next_value :: < super :: browser_protocol :: preload :: EventRuleSetRemoved > () ?) , super :: browser_protocol :: preload :: EventPreloadEnabledStateUpdated :: IDENTIFIER => CdpEvent :: PreloadPreloadEnabledStateUpdated (map . next_value :: < super :: browser_protocol :: preload :: EventPreloadEnabledStateUpdated > () ?) , super :: browser_protocol :: preload :: EventPrefetchStatusUpdated :: IDENTIFIER => CdpEvent :: PreloadPrefetchStatusUpdated (Box :: new (map . next_value :: < super :: browser_protocol :: preload :: EventPrefetchStatusUpdated > () ?)) , super :: browser_protocol :: preload :: EventPrerenderStatusUpdated :: IDENTIFIER => CdpEvent :: PreloadPrerenderStatusUpdated (map . next_value :: < super :: browser_protocol :: preload :: EventPrerenderStatusUpdated > () ?) , super :: browser_protocol :: preload :: EventPreloadingAttemptSourcesUpdated :: IDENTIFIER => CdpEvent :: PreloadPreloadingAttemptSourcesUpdated (map . next_value :: < super :: browser_protocol :: preload :: EventPreloadingAttemptSourcesUpdated > () ?) , super :: browser_protocol :: fed_cm :: EventDialogShown :: IDENTIFIER => CdpEvent :: FedCmDialogShown (map . next_value :: < super :: browser_protocol :: fed_cm :: EventDialogShown > () ?) , super :: browser_protocol :: fed_cm :: EventDialogClosed :: IDENTIFIER => CdpEvent :: FedCmDialogClosed (map . next_value :: < super :: browser_protocol :: fed_cm :: EventDialogClosed > () ?) , _ => CdpEvent :: Other (map . next_value :: < serde_json :: Value > () ?) }) ; + params = Some (match method . as_ref () . ok_or_else (|| de :: Error :: missing_field ("params")) ? . as_str () { super :: js_protocol :: debugger :: EventBreakpointResolved :: IDENTIFIER => CdpEvent :: DebuggerBreakpointResolved (map . next_value :: < super :: js_protocol :: debugger :: EventBreakpointResolved > () ?) , super :: js_protocol :: debugger :: EventPaused :: IDENTIFIER => CdpEvent :: DebuggerPaused (map . next_value :: < super :: js_protocol :: debugger :: EventPaused > () ?) , super :: js_protocol :: debugger :: EventResumed :: IDENTIFIER => CdpEvent :: DebuggerResumed (map . next_value :: < super :: js_protocol :: debugger :: EventResumed > () ?) , super :: js_protocol :: debugger :: EventScriptFailedToParse :: IDENTIFIER => CdpEvent :: DebuggerScriptFailedToParse (Box :: new (map . next_value :: < super :: js_protocol :: debugger :: EventScriptFailedToParse > () ?)) , super :: js_protocol :: debugger :: EventScriptParsed :: IDENTIFIER => CdpEvent :: DebuggerScriptParsed (Box :: new (map . next_value :: < super :: js_protocol :: debugger :: EventScriptParsed > () ?)) , super :: js_protocol :: heap_profiler :: EventAddHeapSnapshotChunk :: IDENTIFIER => CdpEvent :: HeapProfilerAddHeapSnapshotChunk (map . next_value :: < super :: js_protocol :: heap_profiler :: EventAddHeapSnapshotChunk > () ?) , super :: js_protocol :: heap_profiler :: EventHeapStatsUpdate :: IDENTIFIER => CdpEvent :: HeapProfilerHeapStatsUpdate (map . next_value :: < super :: js_protocol :: heap_profiler :: EventHeapStatsUpdate > () ?) , super :: js_protocol :: heap_profiler :: EventLastSeenObjectId :: IDENTIFIER => CdpEvent :: HeapProfilerLastSeenObjectId (map . next_value :: < super :: js_protocol :: heap_profiler :: EventLastSeenObjectId > () ?) , super :: js_protocol :: heap_profiler :: EventReportHeapSnapshotProgress :: IDENTIFIER => CdpEvent :: HeapProfilerReportHeapSnapshotProgress (map . next_value :: < super :: js_protocol :: heap_profiler :: EventReportHeapSnapshotProgress > () ?) , super :: js_protocol :: heap_profiler :: EventResetProfiles :: IDENTIFIER => CdpEvent :: HeapProfilerResetProfiles (map . next_value :: < super :: js_protocol :: heap_profiler :: EventResetProfiles > () ?) , super :: js_protocol :: profiler :: EventConsoleProfileFinished :: IDENTIFIER => CdpEvent :: ProfilerConsoleProfileFinished (map . next_value :: < super :: js_protocol :: profiler :: EventConsoleProfileFinished > () ?) , super :: js_protocol :: profiler :: EventConsoleProfileStarted :: IDENTIFIER => CdpEvent :: ProfilerConsoleProfileStarted (map . next_value :: < super :: js_protocol :: profiler :: EventConsoleProfileStarted > () ?) , super :: js_protocol :: profiler :: EventPreciseCoverageDeltaUpdate :: IDENTIFIER => CdpEvent :: ProfilerPreciseCoverageDeltaUpdate (map . next_value :: < super :: js_protocol :: profiler :: EventPreciseCoverageDeltaUpdate > () ?) , super :: js_protocol :: runtime :: EventBindingCalled :: IDENTIFIER => CdpEvent :: RuntimeBindingCalled (map . next_value :: < super :: js_protocol :: runtime :: EventBindingCalled > () ?) , super :: js_protocol :: runtime :: EventConsoleApiCalled :: IDENTIFIER => CdpEvent :: RuntimeConsoleApiCalled (map . next_value :: < super :: js_protocol :: runtime :: EventConsoleApiCalled > () ?) , super :: js_protocol :: runtime :: EventExceptionRevoked :: IDENTIFIER => CdpEvent :: RuntimeExceptionRevoked (map . next_value :: < super :: js_protocol :: runtime :: EventExceptionRevoked > () ?) , super :: js_protocol :: runtime :: EventExceptionThrown :: IDENTIFIER => CdpEvent :: RuntimeExceptionThrown (Box :: new (map . next_value :: < super :: js_protocol :: runtime :: EventExceptionThrown > () ?)) , super :: js_protocol :: runtime :: EventExecutionContextCreated :: IDENTIFIER => CdpEvent :: RuntimeExecutionContextCreated (map . next_value :: < super :: js_protocol :: runtime :: EventExecutionContextCreated > () ?) , super :: js_protocol :: runtime :: EventExecutionContextDestroyed :: IDENTIFIER => CdpEvent :: RuntimeExecutionContextDestroyed (map . next_value :: < super :: js_protocol :: runtime :: EventExecutionContextDestroyed > () ?) , super :: js_protocol :: runtime :: EventExecutionContextsCleared :: IDENTIFIER => CdpEvent :: RuntimeExecutionContextsCleared (map . next_value :: < super :: js_protocol :: runtime :: EventExecutionContextsCleared > () ?) , super :: js_protocol :: runtime :: EventInspectRequested :: IDENTIFIER => CdpEvent :: RuntimeInspectRequested (Box :: new (map . next_value :: < super :: js_protocol :: runtime :: EventInspectRequested > () ?)) , super :: browser_protocol :: accessibility :: EventLoadComplete :: IDENTIFIER => CdpEvent :: AccessibilityLoadComplete (Box :: new (map . next_value :: < super :: browser_protocol :: accessibility :: EventLoadComplete > () ?)) , super :: browser_protocol :: accessibility :: EventNodesUpdated :: IDENTIFIER => CdpEvent :: AccessibilityNodesUpdated (map . next_value :: < super :: browser_protocol :: accessibility :: EventNodesUpdated > () ?) , super :: browser_protocol :: animation :: EventAnimationCanceled :: IDENTIFIER => CdpEvent :: AnimationAnimationCanceled (map . next_value :: < super :: browser_protocol :: animation :: EventAnimationCanceled > () ?) , super :: browser_protocol :: animation :: EventAnimationCreated :: IDENTIFIER => CdpEvent :: AnimationAnimationCreated (map . next_value :: < super :: browser_protocol :: animation :: EventAnimationCreated > () ?) , super :: browser_protocol :: animation :: EventAnimationStarted :: IDENTIFIER => CdpEvent :: AnimationAnimationStarted (Box :: new (map . next_value :: < super :: browser_protocol :: animation :: EventAnimationStarted > () ?)) , super :: browser_protocol :: animation :: EventAnimationUpdated :: IDENTIFIER => CdpEvent :: AnimationAnimationUpdated (Box :: new (map . next_value :: < super :: browser_protocol :: animation :: EventAnimationUpdated > () ?)) , super :: browser_protocol :: audits :: EventIssueAdded :: IDENTIFIER => CdpEvent :: AuditsIssueAdded (Box :: new (map . next_value :: < super :: browser_protocol :: audits :: EventIssueAdded > () ?)) , super :: browser_protocol :: autofill :: EventAddressFormFilled :: IDENTIFIER => CdpEvent :: AutofillAddressFormFilled (map . next_value :: < super :: browser_protocol :: autofill :: EventAddressFormFilled > () ?) , super :: browser_protocol :: background_service :: EventRecordingStateChanged :: IDENTIFIER => CdpEvent :: BackgroundServiceRecordingStateChanged (map . next_value :: < super :: browser_protocol :: background_service :: EventRecordingStateChanged > () ?) , super :: browser_protocol :: background_service :: EventBackgroundServiceEventReceived :: IDENTIFIER => CdpEvent :: BackgroundServiceBackgroundServiceEventReceived (map . next_value :: < super :: browser_protocol :: background_service :: EventBackgroundServiceEventReceived > () ?) , super :: browser_protocol :: browser :: EventDownloadWillBegin :: IDENTIFIER => CdpEvent :: BrowserDownloadWillBegin (map . next_value :: < super :: browser_protocol :: browser :: EventDownloadWillBegin > () ?) , super :: browser_protocol :: browser :: EventDownloadProgress :: IDENTIFIER => CdpEvent :: BrowserDownloadProgress (map . next_value :: < super :: browser_protocol :: browser :: EventDownloadProgress > () ?) , super :: browser_protocol :: css :: EventFontsUpdated :: IDENTIFIER => CdpEvent :: CssFontsUpdated (Box :: new (map . next_value :: < super :: browser_protocol :: css :: EventFontsUpdated > () ?)) , super :: browser_protocol :: css :: EventMediaQueryResultChanged :: IDENTIFIER => CdpEvent :: CssMediaQueryResultChanged (map . next_value :: < super :: browser_protocol :: css :: EventMediaQueryResultChanged > () ?) , super :: browser_protocol :: css :: EventStyleSheetAdded :: IDENTIFIER => CdpEvent :: CssStyleSheetAdded (map . next_value :: < super :: browser_protocol :: css :: EventStyleSheetAdded > () ?) , super :: browser_protocol :: css :: EventStyleSheetChanged :: IDENTIFIER => CdpEvent :: CssStyleSheetChanged (map . next_value :: < super :: browser_protocol :: css :: EventStyleSheetChanged > () ?) , super :: browser_protocol :: css :: EventStyleSheetRemoved :: IDENTIFIER => CdpEvent :: CssStyleSheetRemoved (map . next_value :: < super :: browser_protocol :: css :: EventStyleSheetRemoved > () ?) , super :: browser_protocol :: cast :: EventSinksUpdated :: IDENTIFIER => CdpEvent :: CastSinksUpdated (map . next_value :: < super :: browser_protocol :: cast :: EventSinksUpdated > () ?) , super :: browser_protocol :: cast :: EventIssueUpdated :: IDENTIFIER => CdpEvent :: CastIssueUpdated (map . next_value :: < super :: browser_protocol :: cast :: EventIssueUpdated > () ?) , super :: browser_protocol :: dom :: EventAttributeModified :: IDENTIFIER => CdpEvent :: DomAttributeModified (map . next_value :: < super :: browser_protocol :: dom :: EventAttributeModified > () ?) , super :: browser_protocol :: dom :: EventAttributeRemoved :: IDENTIFIER => CdpEvent :: DomAttributeRemoved (map . next_value :: < super :: browser_protocol :: dom :: EventAttributeRemoved > () ?) , super :: browser_protocol :: dom :: EventCharacterDataModified :: IDENTIFIER => CdpEvent :: DomCharacterDataModified (map . next_value :: < super :: browser_protocol :: dom :: EventCharacterDataModified > () ?) , super :: browser_protocol :: dom :: EventChildNodeCountUpdated :: IDENTIFIER => CdpEvent :: DomChildNodeCountUpdated (map . next_value :: < super :: browser_protocol :: dom :: EventChildNodeCountUpdated > () ?) , super :: browser_protocol :: dom :: EventChildNodeInserted :: IDENTIFIER => CdpEvent :: DomChildNodeInserted (Box :: new (map . next_value :: < super :: browser_protocol :: dom :: EventChildNodeInserted > () ?)) , super :: browser_protocol :: dom :: EventChildNodeRemoved :: IDENTIFIER => CdpEvent :: DomChildNodeRemoved (map . next_value :: < super :: browser_protocol :: dom :: EventChildNodeRemoved > () ?) , super :: browser_protocol :: dom :: EventDistributedNodesUpdated :: IDENTIFIER => CdpEvent :: DomDistributedNodesUpdated (map . next_value :: < super :: browser_protocol :: dom :: EventDistributedNodesUpdated > () ?) , super :: browser_protocol :: dom :: EventDocumentUpdated :: IDENTIFIER => CdpEvent :: DomDocumentUpdated (map . next_value :: < super :: browser_protocol :: dom :: EventDocumentUpdated > () ?) , super :: browser_protocol :: dom :: EventInlineStyleInvalidated :: IDENTIFIER => CdpEvent :: DomInlineStyleInvalidated (map . next_value :: < super :: browser_protocol :: dom :: EventInlineStyleInvalidated > () ?) , super :: browser_protocol :: dom :: EventPseudoElementAdded :: IDENTIFIER => CdpEvent :: DomPseudoElementAdded (Box :: new (map . next_value :: < super :: browser_protocol :: dom :: EventPseudoElementAdded > () ?)) , super :: browser_protocol :: dom :: EventTopLayerElementsUpdated :: IDENTIFIER => CdpEvent :: DomTopLayerElementsUpdated (map . next_value :: < super :: browser_protocol :: dom :: EventTopLayerElementsUpdated > () ?) , super :: browser_protocol :: dom :: EventScrollableFlagUpdated :: IDENTIFIER => CdpEvent :: DomScrollableFlagUpdated (map . next_value :: < super :: browser_protocol :: dom :: EventScrollableFlagUpdated > () ?) , super :: browser_protocol :: dom :: EventPseudoElementRemoved :: IDENTIFIER => CdpEvent :: DomPseudoElementRemoved (map . next_value :: < super :: browser_protocol :: dom :: EventPseudoElementRemoved > () ?) , super :: browser_protocol :: dom :: EventSetChildNodes :: IDENTIFIER => CdpEvent :: DomSetChildNodes (map . next_value :: < super :: browser_protocol :: dom :: EventSetChildNodes > () ?) , super :: browser_protocol :: dom :: EventShadowRootPopped :: IDENTIFIER => CdpEvent :: DomShadowRootPopped (map . next_value :: < super :: browser_protocol :: dom :: EventShadowRootPopped > () ?) , super :: browser_protocol :: dom :: EventShadowRootPushed :: IDENTIFIER => CdpEvent :: DomShadowRootPushed (Box :: new (map . next_value :: < super :: browser_protocol :: dom :: EventShadowRootPushed > () ?)) , super :: browser_protocol :: dom_storage :: EventDomStorageItemAdded :: IDENTIFIER => CdpEvent :: DomStorageDomStorageItemAdded (map . next_value :: < super :: browser_protocol :: dom_storage :: EventDomStorageItemAdded > () ?) , super :: browser_protocol :: dom_storage :: EventDomStorageItemRemoved :: IDENTIFIER => CdpEvent :: DomStorageDomStorageItemRemoved (map . next_value :: < super :: browser_protocol :: dom_storage :: EventDomStorageItemRemoved > () ?) , super :: browser_protocol :: dom_storage :: EventDomStorageItemUpdated :: IDENTIFIER => CdpEvent :: DomStorageDomStorageItemUpdated (map . next_value :: < super :: browser_protocol :: dom_storage :: EventDomStorageItemUpdated > () ?) , super :: browser_protocol :: dom_storage :: EventDomStorageItemsCleared :: IDENTIFIER => CdpEvent :: DomStorageDomStorageItemsCleared (map . next_value :: < super :: browser_protocol :: dom_storage :: EventDomStorageItemsCleared > () ?) , super :: browser_protocol :: database :: EventAddDatabase :: IDENTIFIER => CdpEvent :: DatabaseAddDatabase (map . next_value :: < super :: browser_protocol :: database :: EventAddDatabase > () ?) , super :: browser_protocol :: emulation :: EventVirtualTimeBudgetExpired :: IDENTIFIER => CdpEvent :: EmulationVirtualTimeBudgetExpired (map . next_value :: < super :: browser_protocol :: emulation :: EventVirtualTimeBudgetExpired > () ?) , super :: browser_protocol :: input :: EventDragIntercepted :: IDENTIFIER => CdpEvent :: InputDragIntercepted (map . next_value :: < super :: browser_protocol :: input :: EventDragIntercepted > () ?) , super :: browser_protocol :: inspector :: EventDetached :: IDENTIFIER => CdpEvent :: InspectorDetached (map . next_value :: < super :: browser_protocol :: inspector :: EventDetached > () ?) , super :: browser_protocol :: inspector :: EventTargetCrashed :: IDENTIFIER => CdpEvent :: InspectorTargetCrashed (map . next_value :: < super :: browser_protocol :: inspector :: EventTargetCrashed > () ?) , super :: browser_protocol :: inspector :: EventTargetReloadedAfterCrash :: IDENTIFIER => CdpEvent :: InspectorTargetReloadedAfterCrash (map . next_value :: < super :: browser_protocol :: inspector :: EventTargetReloadedAfterCrash > () ?) , super :: browser_protocol :: layer_tree :: EventLayerPainted :: IDENTIFIER => CdpEvent :: LayerTreeLayerPainted (map . next_value :: < super :: browser_protocol :: layer_tree :: EventLayerPainted > () ?) , super :: browser_protocol :: layer_tree :: EventLayerTreeDidChange :: IDENTIFIER => CdpEvent :: LayerTreeLayerTreeDidChange (map . next_value :: < super :: browser_protocol :: layer_tree :: EventLayerTreeDidChange > () ?) , super :: browser_protocol :: log :: EventEntryAdded :: IDENTIFIER => CdpEvent :: LogEntryAdded (Box :: new (map . next_value :: < super :: browser_protocol :: log :: EventEntryAdded > () ?)) , super :: browser_protocol :: network :: EventDataReceived :: IDENTIFIER => CdpEvent :: NetworkDataReceived (map . next_value :: < super :: browser_protocol :: network :: EventDataReceived > () ?) , super :: browser_protocol :: network :: EventEventSourceMessageReceived :: IDENTIFIER => CdpEvent :: NetworkEventSourceMessageReceived (map . next_value :: < super :: browser_protocol :: network :: EventEventSourceMessageReceived > () ?) , super :: browser_protocol :: network :: EventLoadingFailed :: IDENTIFIER => CdpEvent :: NetworkLoadingFailed (map . next_value :: < super :: browser_protocol :: network :: EventLoadingFailed > () ?) , super :: browser_protocol :: network :: EventLoadingFinished :: IDENTIFIER => CdpEvent :: NetworkLoadingFinished (map . next_value :: < super :: browser_protocol :: network :: EventLoadingFinished > () ?) , super :: browser_protocol :: network :: EventRequestServedFromCache :: IDENTIFIER => CdpEvent :: NetworkRequestServedFromCache (map . next_value :: < super :: browser_protocol :: network :: EventRequestServedFromCache > () ?) , super :: browser_protocol :: network :: EventRequestWillBeSent :: IDENTIFIER => CdpEvent :: NetworkRequestWillBeSent (Box :: new (map . next_value :: < super :: browser_protocol :: network :: EventRequestWillBeSent > () ?)) , super :: browser_protocol :: network :: EventResourceChangedPriority :: IDENTIFIER => CdpEvent :: NetworkResourceChangedPriority (map . next_value :: < super :: browser_protocol :: network :: EventResourceChangedPriority > () ?) , super :: browser_protocol :: network :: EventSignedExchangeReceived :: IDENTIFIER => CdpEvent :: NetworkSignedExchangeReceived (Box :: new (map . next_value :: < super :: browser_protocol :: network :: EventSignedExchangeReceived > () ?)) , super :: browser_protocol :: network :: EventResponseReceived :: IDENTIFIER => CdpEvent :: NetworkResponseReceived (Box :: new (map . next_value :: < super :: browser_protocol :: network :: EventResponseReceived > () ?)) , super :: browser_protocol :: network :: EventWebSocketClosed :: IDENTIFIER => CdpEvent :: NetworkWebSocketClosed (map . next_value :: < super :: browser_protocol :: network :: EventWebSocketClosed > () ?) , super :: browser_protocol :: network :: EventWebSocketCreated :: IDENTIFIER => CdpEvent :: NetworkWebSocketCreated (Box :: new (map . next_value :: < super :: browser_protocol :: network :: EventWebSocketCreated > () ?)) , super :: browser_protocol :: network :: EventWebSocketFrameError :: IDENTIFIER => CdpEvent :: NetworkWebSocketFrameError (map . next_value :: < super :: browser_protocol :: network :: EventWebSocketFrameError > () ?) , super :: browser_protocol :: network :: EventWebSocketFrameReceived :: IDENTIFIER => CdpEvent :: NetworkWebSocketFrameReceived (map . next_value :: < super :: browser_protocol :: network :: EventWebSocketFrameReceived > () ?) , super :: browser_protocol :: network :: EventWebSocketFrameSent :: IDENTIFIER => CdpEvent :: NetworkWebSocketFrameSent (map . next_value :: < super :: browser_protocol :: network :: EventWebSocketFrameSent > () ?) , super :: browser_protocol :: network :: EventWebSocketHandshakeResponseReceived :: IDENTIFIER => CdpEvent :: NetworkWebSocketHandshakeResponseReceived (Box :: new (map . next_value :: < super :: browser_protocol :: network :: EventWebSocketHandshakeResponseReceived > () ?)) , super :: browser_protocol :: network :: EventWebSocketWillSendHandshakeRequest :: IDENTIFIER => CdpEvent :: NetworkWebSocketWillSendHandshakeRequest (map . next_value :: < super :: browser_protocol :: network :: EventWebSocketWillSendHandshakeRequest > () ?) , super :: browser_protocol :: network :: EventWebTransportCreated :: IDENTIFIER => CdpEvent :: NetworkWebTransportCreated (Box :: new (map . next_value :: < super :: browser_protocol :: network :: EventWebTransportCreated > () ?)) , super :: browser_protocol :: network :: EventWebTransportConnectionEstablished :: IDENTIFIER => CdpEvent :: NetworkWebTransportConnectionEstablished (map . next_value :: < super :: browser_protocol :: network :: EventWebTransportConnectionEstablished > () ?) , super :: browser_protocol :: network :: EventWebTransportClosed :: IDENTIFIER => CdpEvent :: NetworkWebTransportClosed (map . next_value :: < super :: browser_protocol :: network :: EventWebTransportClosed > () ?) , super :: browser_protocol :: network :: EventRequestWillBeSentExtraInfo :: IDENTIFIER => CdpEvent :: NetworkRequestWillBeSentExtraInfo (map . next_value :: < super :: browser_protocol :: network :: EventRequestWillBeSentExtraInfo > () ?) , super :: browser_protocol :: network :: EventResponseReceivedExtraInfo :: IDENTIFIER => CdpEvent :: NetworkResponseReceivedExtraInfo (Box :: new (map . next_value :: < super :: browser_protocol :: network :: EventResponseReceivedExtraInfo > () ?)) , super :: browser_protocol :: network :: EventResponseReceivedEarlyHints :: IDENTIFIER => CdpEvent :: NetworkResponseReceivedEarlyHints (map . next_value :: < super :: browser_protocol :: network :: EventResponseReceivedEarlyHints > () ?) , super :: browser_protocol :: network :: EventTrustTokenOperationDone :: IDENTIFIER => CdpEvent :: NetworkTrustTokenOperationDone (map . next_value :: < super :: browser_protocol :: network :: EventTrustTokenOperationDone > () ?) , super :: browser_protocol :: network :: EventPolicyUpdated :: IDENTIFIER => CdpEvent :: NetworkPolicyUpdated (map . next_value :: < super :: browser_protocol :: network :: EventPolicyUpdated > () ?) , super :: browser_protocol :: network :: EventSubresourceWebBundleMetadataReceived :: IDENTIFIER => CdpEvent :: NetworkSubresourceWebBundleMetadataReceived (map . next_value :: < super :: browser_protocol :: network :: EventSubresourceWebBundleMetadataReceived > () ?) , super :: browser_protocol :: network :: EventSubresourceWebBundleMetadataError :: IDENTIFIER => CdpEvent :: NetworkSubresourceWebBundleMetadataError (map . next_value :: < super :: browser_protocol :: network :: EventSubresourceWebBundleMetadataError > () ?) , super :: browser_protocol :: network :: EventSubresourceWebBundleInnerResponseParsed :: IDENTIFIER => CdpEvent :: NetworkSubresourceWebBundleInnerResponseParsed (map . next_value :: < super :: browser_protocol :: network :: EventSubresourceWebBundleInnerResponseParsed > () ?) , super :: browser_protocol :: network :: EventSubresourceWebBundleInnerResponseError :: IDENTIFIER => CdpEvent :: NetworkSubresourceWebBundleInnerResponseError (map . next_value :: < super :: browser_protocol :: network :: EventSubresourceWebBundleInnerResponseError > () ?) , super :: browser_protocol :: network :: EventReportingApiReportAdded :: IDENTIFIER => CdpEvent :: NetworkReportingApiReportAdded (map . next_value :: < super :: browser_protocol :: network :: EventReportingApiReportAdded > () ?) , super :: browser_protocol :: network :: EventReportingApiReportUpdated :: IDENTIFIER => CdpEvent :: NetworkReportingApiReportUpdated (map . next_value :: < super :: browser_protocol :: network :: EventReportingApiReportUpdated > () ?) , super :: browser_protocol :: network :: EventReportingApiEndpointsChangedForOrigin :: IDENTIFIER => CdpEvent :: NetworkReportingApiEndpointsChangedForOrigin (map . next_value :: < super :: browser_protocol :: network :: EventReportingApiEndpointsChangedForOrigin > () ?) , super :: browser_protocol :: overlay :: EventInspectNodeRequested :: IDENTIFIER => CdpEvent :: OverlayInspectNodeRequested (map . next_value :: < super :: browser_protocol :: overlay :: EventInspectNodeRequested > () ?) , super :: browser_protocol :: overlay :: EventNodeHighlightRequested :: IDENTIFIER => CdpEvent :: OverlayNodeHighlightRequested (map . next_value :: < super :: browser_protocol :: overlay :: EventNodeHighlightRequested > () ?) , super :: browser_protocol :: overlay :: EventScreenshotRequested :: IDENTIFIER => CdpEvent :: OverlayScreenshotRequested (map . next_value :: < super :: browser_protocol :: overlay :: EventScreenshotRequested > () ?) , super :: browser_protocol :: overlay :: EventInspectModeCanceled :: IDENTIFIER => CdpEvent :: OverlayInspectModeCanceled (map . next_value :: < super :: browser_protocol :: overlay :: EventInspectModeCanceled > () ?) , super :: browser_protocol :: page :: EventDomContentEventFired :: IDENTIFIER => CdpEvent :: PageDomContentEventFired (map . next_value :: < super :: browser_protocol :: page :: EventDomContentEventFired > () ?) , super :: browser_protocol :: page :: EventFileChooserOpened :: IDENTIFIER => CdpEvent :: PageFileChooserOpened (map . next_value :: < super :: browser_protocol :: page :: EventFileChooserOpened > () ?) , super :: browser_protocol :: page :: EventFrameAttached :: IDENTIFIER => CdpEvent :: PageFrameAttached (map . next_value :: < super :: browser_protocol :: page :: EventFrameAttached > () ?) , super :: browser_protocol :: page :: EventFrameDetached :: IDENTIFIER => CdpEvent :: PageFrameDetached (map . next_value :: < super :: browser_protocol :: page :: EventFrameDetached > () ?) , super :: browser_protocol :: page :: EventFrameSubtreeWillBeDetached :: IDENTIFIER => CdpEvent :: PageFrameSubtreeWillBeDetached (map . next_value :: < super :: browser_protocol :: page :: EventFrameSubtreeWillBeDetached > () ?) , super :: browser_protocol :: page :: EventFrameNavigated :: IDENTIFIER => CdpEvent :: PageFrameNavigated (Box :: new (map . next_value :: < super :: browser_protocol :: page :: EventFrameNavigated > () ?)) , super :: browser_protocol :: page :: EventDocumentOpened :: IDENTIFIER => CdpEvent :: PageDocumentOpened (Box :: new (map . next_value :: < super :: browser_protocol :: page :: EventDocumentOpened > () ?)) , super :: browser_protocol :: page :: EventFrameResized :: IDENTIFIER => CdpEvent :: PageFrameResized (map . next_value :: < super :: browser_protocol :: page :: EventFrameResized > () ?) , super :: browser_protocol :: page :: EventFrameRequestedNavigation :: IDENTIFIER => CdpEvent :: PageFrameRequestedNavigation (map . next_value :: < super :: browser_protocol :: page :: EventFrameRequestedNavigation > () ?) , super :: browser_protocol :: page :: EventFrameStartedLoading :: IDENTIFIER => CdpEvent :: PageFrameStartedLoading (map . next_value :: < super :: browser_protocol :: page :: EventFrameStartedLoading > () ?) , super :: browser_protocol :: page :: EventFrameStoppedLoading :: IDENTIFIER => CdpEvent :: PageFrameStoppedLoading (map . next_value :: < super :: browser_protocol :: page :: EventFrameStoppedLoading > () ?) , super :: browser_protocol :: page :: EventInterstitialHidden :: IDENTIFIER => CdpEvent :: PageInterstitialHidden (map . next_value :: < super :: browser_protocol :: page :: EventInterstitialHidden > () ?) , super :: browser_protocol :: page :: EventInterstitialShown :: IDENTIFIER => CdpEvent :: PageInterstitialShown (map . next_value :: < super :: browser_protocol :: page :: EventInterstitialShown > () ?) , super :: browser_protocol :: page :: EventJavascriptDialogClosed :: IDENTIFIER => CdpEvent :: PageJavascriptDialogClosed (map . next_value :: < super :: browser_protocol :: page :: EventJavascriptDialogClosed > () ?) , super :: browser_protocol :: page :: EventJavascriptDialogOpening :: IDENTIFIER => CdpEvent :: PageJavascriptDialogOpening (map . next_value :: < super :: browser_protocol :: page :: EventJavascriptDialogOpening > () ?) , super :: browser_protocol :: page :: EventLifecycleEvent :: IDENTIFIER => CdpEvent :: PageLifecycleEvent (map . next_value :: < super :: browser_protocol :: page :: EventLifecycleEvent > () ?) , super :: browser_protocol :: page :: EventBackForwardCacheNotUsed :: IDENTIFIER => CdpEvent :: PageBackForwardCacheNotUsed (map . next_value :: < super :: browser_protocol :: page :: EventBackForwardCacheNotUsed > () ?) , super :: browser_protocol :: page :: EventLoadEventFired :: IDENTIFIER => CdpEvent :: PageLoadEventFired (map . next_value :: < super :: browser_protocol :: page :: EventLoadEventFired > () ?) , super :: browser_protocol :: page :: EventNavigatedWithinDocument :: IDENTIFIER => CdpEvent :: PageNavigatedWithinDocument (map . next_value :: < super :: browser_protocol :: page :: EventNavigatedWithinDocument > () ?) , super :: browser_protocol :: page :: EventScreencastFrame :: IDENTIFIER => CdpEvent :: PageScreencastFrame (map . next_value :: < super :: browser_protocol :: page :: EventScreencastFrame > () ?) , super :: browser_protocol :: page :: EventScreencastVisibilityChanged :: IDENTIFIER => CdpEvent :: PageScreencastVisibilityChanged (map . next_value :: < super :: browser_protocol :: page :: EventScreencastVisibilityChanged > () ?) , super :: browser_protocol :: page :: EventWindowOpen :: IDENTIFIER => CdpEvent :: PageWindowOpen (map . next_value :: < super :: browser_protocol :: page :: EventWindowOpen > () ?) , super :: browser_protocol :: page :: EventCompilationCacheProduced :: IDENTIFIER => CdpEvent :: PageCompilationCacheProduced (map . next_value :: < super :: browser_protocol :: page :: EventCompilationCacheProduced > () ?) , super :: browser_protocol :: performance :: EventMetrics :: IDENTIFIER => CdpEvent :: PerformanceMetrics (map . next_value :: < super :: browser_protocol :: performance :: EventMetrics > () ?) , super :: browser_protocol :: performance_timeline :: EventTimelineEventAdded :: IDENTIFIER => CdpEvent :: PerformanceTimelineTimelineEventAdded (Box :: new (map . next_value :: < super :: browser_protocol :: performance_timeline :: EventTimelineEventAdded > () ?)) , super :: browser_protocol :: security :: EventVisibleSecurityStateChanged :: IDENTIFIER => CdpEvent :: SecurityVisibleSecurityStateChanged (Box :: new (map . next_value :: < super :: browser_protocol :: security :: EventVisibleSecurityStateChanged > () ?)) , super :: browser_protocol :: service_worker :: EventWorkerErrorReported :: IDENTIFIER => CdpEvent :: ServiceWorkerWorkerErrorReported (map . next_value :: < super :: browser_protocol :: service_worker :: EventWorkerErrorReported > () ?) , super :: browser_protocol :: service_worker :: EventWorkerRegistrationUpdated :: IDENTIFIER => CdpEvent :: ServiceWorkerWorkerRegistrationUpdated (map . next_value :: < super :: browser_protocol :: service_worker :: EventWorkerRegistrationUpdated > () ?) , super :: browser_protocol :: service_worker :: EventWorkerVersionUpdated :: IDENTIFIER => CdpEvent :: ServiceWorkerWorkerVersionUpdated (map . next_value :: < super :: browser_protocol :: service_worker :: EventWorkerVersionUpdated > () ?) , super :: browser_protocol :: storage :: EventCacheStorageContentUpdated :: IDENTIFIER => CdpEvent :: StorageCacheStorageContentUpdated (map . next_value :: < super :: browser_protocol :: storage :: EventCacheStorageContentUpdated > () ?) , super :: browser_protocol :: storage :: EventCacheStorageListUpdated :: IDENTIFIER => CdpEvent :: StorageCacheStorageListUpdated (map . next_value :: < super :: browser_protocol :: storage :: EventCacheStorageListUpdated > () ?) , super :: browser_protocol :: storage :: EventIndexedDbContentUpdated :: IDENTIFIER => CdpEvent :: StorageIndexedDbContentUpdated (map . next_value :: < super :: browser_protocol :: storage :: EventIndexedDbContentUpdated > () ?) , super :: browser_protocol :: storage :: EventIndexedDbListUpdated :: IDENTIFIER => CdpEvent :: StorageIndexedDbListUpdated (map . next_value :: < super :: browser_protocol :: storage :: EventIndexedDbListUpdated > () ?) , super :: browser_protocol :: storage :: EventInterestGroupAccessed :: IDENTIFIER => CdpEvent :: StorageInterestGroupAccessed (map . next_value :: < super :: browser_protocol :: storage :: EventInterestGroupAccessed > () ?) , super :: browser_protocol :: storage :: EventInterestGroupAuctionEventOccurred :: IDENTIFIER => CdpEvent :: StorageInterestGroupAuctionEventOccurred (map . next_value :: < super :: browser_protocol :: storage :: EventInterestGroupAuctionEventOccurred > () ?) , super :: browser_protocol :: storage :: EventInterestGroupAuctionNetworkRequestCreated :: IDENTIFIER => CdpEvent :: StorageInterestGroupAuctionNetworkRequestCreated (map . next_value :: < super :: browser_protocol :: storage :: EventInterestGroupAuctionNetworkRequestCreated > () ?) , super :: browser_protocol :: storage :: EventSharedStorageAccessed :: IDENTIFIER => CdpEvent :: StorageSharedStorageAccessed (Box :: new (map . next_value :: < super :: browser_protocol :: storage :: EventSharedStorageAccessed > () ?)) , super :: browser_protocol :: storage :: EventStorageBucketCreatedOrUpdated :: IDENTIFIER => CdpEvent :: StorageStorageBucketCreatedOrUpdated (map . next_value :: < super :: browser_protocol :: storage :: EventStorageBucketCreatedOrUpdated > () ?) , super :: browser_protocol :: storage :: EventStorageBucketDeleted :: IDENTIFIER => CdpEvent :: StorageStorageBucketDeleted (map . next_value :: < super :: browser_protocol :: storage :: EventStorageBucketDeleted > () ?) , super :: browser_protocol :: storage :: EventAttributionReportingSourceRegistered :: IDENTIFIER => CdpEvent :: StorageAttributionReportingSourceRegistered (Box :: new (map . next_value :: < super :: browser_protocol :: storage :: EventAttributionReportingSourceRegistered > () ?)) , super :: browser_protocol :: storage :: EventAttributionReportingTriggerRegistered :: IDENTIFIER => CdpEvent :: StorageAttributionReportingTriggerRegistered (Box :: new (map . next_value :: < super :: browser_protocol :: storage :: EventAttributionReportingTriggerRegistered > () ?)) , super :: browser_protocol :: target :: EventAttachedToTarget :: IDENTIFIER => CdpEvent :: TargetAttachedToTarget (Box :: new (map . next_value :: < super :: browser_protocol :: target :: EventAttachedToTarget > () ?)) , super :: browser_protocol :: target :: EventDetachedFromTarget :: IDENTIFIER => CdpEvent :: TargetDetachedFromTarget (map . next_value :: < super :: browser_protocol :: target :: EventDetachedFromTarget > () ?) , super :: browser_protocol :: target :: EventReceivedMessageFromTarget :: IDENTIFIER => CdpEvent :: TargetReceivedMessageFromTarget (map . next_value :: < super :: browser_protocol :: target :: EventReceivedMessageFromTarget > () ?) , super :: browser_protocol :: target :: EventTargetCreated :: IDENTIFIER => CdpEvent :: TargetTargetCreated (map . next_value :: < super :: browser_protocol :: target :: EventTargetCreated > () ?) , super :: browser_protocol :: target :: EventTargetDestroyed :: IDENTIFIER => CdpEvent :: TargetTargetDestroyed (map . next_value :: < super :: browser_protocol :: target :: EventTargetDestroyed > () ?) , super :: browser_protocol :: target :: EventTargetCrashed :: IDENTIFIER => CdpEvent :: TargetTargetCrashed (map . next_value :: < super :: browser_protocol :: target :: EventTargetCrashed > () ?) , super :: browser_protocol :: target :: EventTargetInfoChanged :: IDENTIFIER => CdpEvent :: TargetTargetInfoChanged (map . next_value :: < super :: browser_protocol :: target :: EventTargetInfoChanged > () ?) , super :: browser_protocol :: tethering :: EventAccepted :: IDENTIFIER => CdpEvent :: TetheringAccepted (map . next_value :: < super :: browser_protocol :: tethering :: EventAccepted > () ?) , super :: browser_protocol :: tracing :: EventBufferUsage :: IDENTIFIER => CdpEvent :: TracingBufferUsage (map . next_value :: < super :: browser_protocol :: tracing :: EventBufferUsage > () ?) , super :: browser_protocol :: tracing :: EventDataCollected :: IDENTIFIER => CdpEvent :: TracingDataCollected (map . next_value :: < super :: browser_protocol :: tracing :: EventDataCollected > () ?) , super :: browser_protocol :: tracing :: EventTracingComplete :: IDENTIFIER => CdpEvent :: TracingTracingComplete (map . next_value :: < super :: browser_protocol :: tracing :: EventTracingComplete > () ?) , super :: browser_protocol :: fetch :: EventRequestPaused :: IDENTIFIER => CdpEvent :: FetchRequestPaused (Box :: new (map . next_value :: < super :: browser_protocol :: fetch :: EventRequestPaused > () ?)) , super :: browser_protocol :: fetch :: EventAuthRequired :: IDENTIFIER => CdpEvent :: FetchAuthRequired (Box :: new (map . next_value :: < super :: browser_protocol :: fetch :: EventAuthRequired > () ?)) , super :: browser_protocol :: web_audio :: EventContextCreated :: IDENTIFIER => CdpEvent :: WebAudioContextCreated (map . next_value :: < super :: browser_protocol :: web_audio :: EventContextCreated > () ?) , super :: browser_protocol :: web_audio :: EventContextWillBeDestroyed :: IDENTIFIER => CdpEvent :: WebAudioContextWillBeDestroyed (map . next_value :: < super :: browser_protocol :: web_audio :: EventContextWillBeDestroyed > () ?) , super :: browser_protocol :: web_audio :: EventContextChanged :: IDENTIFIER => CdpEvent :: WebAudioContextChanged (map . next_value :: < super :: browser_protocol :: web_audio :: EventContextChanged > () ?) , super :: browser_protocol :: web_audio :: EventAudioListenerCreated :: IDENTIFIER => CdpEvent :: WebAudioAudioListenerCreated (map . next_value :: < super :: browser_protocol :: web_audio :: EventAudioListenerCreated > () ?) , super :: browser_protocol :: web_audio :: EventAudioListenerWillBeDestroyed :: IDENTIFIER => CdpEvent :: WebAudioAudioListenerWillBeDestroyed (map . next_value :: < super :: browser_protocol :: web_audio :: EventAudioListenerWillBeDestroyed > () ?) , super :: browser_protocol :: web_audio :: EventAudioNodeCreated :: IDENTIFIER => CdpEvent :: WebAudioAudioNodeCreated (map . next_value :: < super :: browser_protocol :: web_audio :: EventAudioNodeCreated > () ?) , super :: browser_protocol :: web_audio :: EventAudioNodeWillBeDestroyed :: IDENTIFIER => CdpEvent :: WebAudioAudioNodeWillBeDestroyed (map . next_value :: < super :: browser_protocol :: web_audio :: EventAudioNodeWillBeDestroyed > () ?) , super :: browser_protocol :: web_audio :: EventAudioParamCreated :: IDENTIFIER => CdpEvent :: WebAudioAudioParamCreated (map . next_value :: < super :: browser_protocol :: web_audio :: EventAudioParamCreated > () ?) , super :: browser_protocol :: web_audio :: EventAudioParamWillBeDestroyed :: IDENTIFIER => CdpEvent :: WebAudioAudioParamWillBeDestroyed (map . next_value :: < super :: browser_protocol :: web_audio :: EventAudioParamWillBeDestroyed > () ?) , super :: browser_protocol :: web_audio :: EventNodesConnected :: IDENTIFIER => CdpEvent :: WebAudioNodesConnected (map . next_value :: < super :: browser_protocol :: web_audio :: EventNodesConnected > () ?) , super :: browser_protocol :: web_audio :: EventNodesDisconnected :: IDENTIFIER => CdpEvent :: WebAudioNodesDisconnected (map . next_value :: < super :: browser_protocol :: web_audio :: EventNodesDisconnected > () ?) , super :: browser_protocol :: web_audio :: EventNodeParamConnected :: IDENTIFIER => CdpEvent :: WebAudioNodeParamConnected (map . next_value :: < super :: browser_protocol :: web_audio :: EventNodeParamConnected > () ?) , super :: browser_protocol :: web_audio :: EventNodeParamDisconnected :: IDENTIFIER => CdpEvent :: WebAudioNodeParamDisconnected (map . next_value :: < super :: browser_protocol :: web_audio :: EventNodeParamDisconnected > () ?) , super :: browser_protocol :: web_authn :: EventCredentialAdded :: IDENTIFIER => CdpEvent :: WebAuthnCredentialAdded (map . next_value :: < super :: browser_protocol :: web_authn :: EventCredentialAdded > () ?) , super :: browser_protocol :: web_authn :: EventCredentialAsserted :: IDENTIFIER => CdpEvent :: WebAuthnCredentialAsserted (map . next_value :: < super :: browser_protocol :: web_authn :: EventCredentialAsserted > () ?) , super :: browser_protocol :: media :: EventPlayerPropertiesChanged :: IDENTIFIER => CdpEvent :: MediaPlayerPropertiesChanged (map . next_value :: < super :: browser_protocol :: media :: EventPlayerPropertiesChanged > () ?) , super :: browser_protocol :: media :: EventPlayerEventsAdded :: IDENTIFIER => CdpEvent :: MediaPlayerEventsAdded (map . next_value :: < super :: browser_protocol :: media :: EventPlayerEventsAdded > () ?) , super :: browser_protocol :: media :: EventPlayerMessagesLogged :: IDENTIFIER => CdpEvent :: MediaPlayerMessagesLogged (map . next_value :: < super :: browser_protocol :: media :: EventPlayerMessagesLogged > () ?) , super :: browser_protocol :: media :: EventPlayerErrorsRaised :: IDENTIFIER => CdpEvent :: MediaPlayerErrorsRaised (map . next_value :: < super :: browser_protocol :: media :: EventPlayerErrorsRaised > () ?) , super :: browser_protocol :: media :: EventPlayersCreated :: IDENTIFIER => CdpEvent :: MediaPlayersCreated (map . next_value :: < super :: browser_protocol :: media :: EventPlayersCreated > () ?) , super :: browser_protocol :: device_access :: EventDeviceRequestPrompted :: IDENTIFIER => CdpEvent :: DeviceAccessDeviceRequestPrompted (map . next_value :: < super :: browser_protocol :: device_access :: EventDeviceRequestPrompted > () ?) , super :: browser_protocol :: preload :: EventRuleSetUpdated :: IDENTIFIER => CdpEvent :: PreloadRuleSetUpdated (map . next_value :: < super :: browser_protocol :: preload :: EventRuleSetUpdated > () ?) , super :: browser_protocol :: preload :: EventRuleSetRemoved :: IDENTIFIER => CdpEvent :: PreloadRuleSetRemoved (map . next_value :: < super :: browser_protocol :: preload :: EventRuleSetRemoved > () ?) , super :: browser_protocol :: preload :: EventPreloadEnabledStateUpdated :: IDENTIFIER => CdpEvent :: PreloadPreloadEnabledStateUpdated (map . next_value :: < super :: browser_protocol :: preload :: EventPreloadEnabledStateUpdated > () ?) , super :: browser_protocol :: preload :: EventPrefetchStatusUpdated :: IDENTIFIER => CdpEvent :: PreloadPrefetchStatusUpdated (Box :: new (map . next_value :: < super :: browser_protocol :: preload :: EventPrefetchStatusUpdated > () ?)) , super :: browser_protocol :: preload :: EventPrerenderStatusUpdated :: IDENTIFIER => CdpEvent :: PreloadPrerenderStatusUpdated (map . next_value :: < super :: browser_protocol :: preload :: EventPrerenderStatusUpdated > () ?) , super :: browser_protocol :: preload :: EventPreloadingAttemptSourcesUpdated :: IDENTIFIER => CdpEvent :: PreloadPreloadingAttemptSourcesUpdated (map . next_value :: < super :: browser_protocol :: preload :: EventPreloadingAttemptSourcesUpdated > () ?) , super :: browser_protocol :: fed_cm :: EventDialogShown :: IDENTIFIER => CdpEvent :: FedCmDialogShown (map . next_value :: < super :: browser_protocol :: fed_cm :: EventDialogShown > () ?) , super :: browser_protocol :: fed_cm :: EventDialogClosed :: IDENTIFIER => CdpEvent :: FedCmDialogClosed (map . next_value :: < super :: browser_protocol :: fed_cm :: EventDialogClosed > () ?) , _ => CdpEvent :: Other (map . next_value :: < serde_json :: Value > () ?) }) ; } } } @@ -1918,6 +1928,20 @@ pub mod events { CdpEvent::DomTopLayerElementsUpdated(el) } } + impl std::convert::TryFrom for super::browser_protocol::dom::EventScrollableFlagUpdated { + type Error = CdpEvent; + fn try_from(event: CdpEvent) -> Result { + match event { + CdpEvent::DomScrollableFlagUpdated(val) => Ok(val), + _ => Err(event), + } + } + } + impl From for CdpEvent { + fn from(el: super::browser_protocol::dom::EventScrollableFlagUpdated) -> CdpEvent { + CdpEvent::DomScrollableFlagUpdated(el) + } + } impl std::convert::TryFrom for super::browser_protocol::dom::EventPseudoElementRemoved { type Error = CdpEvent; fn try_from(event: CdpEvent) -> Result { @@ -2790,6 +2814,22 @@ pub mod events { CdpEvent::PageFrameDetached(el) } } + impl std::convert::TryFrom + for super::browser_protocol::page::EventFrameSubtreeWillBeDetached + { + type Error = CdpEvent; + fn try_from(event: CdpEvent) -> Result { + match event { + CdpEvent::PageFrameSubtreeWillBeDetached(val) => Ok(val), + _ => Err(event), + } + } + } + impl From for CdpEvent { + fn from(el: super::browser_protocol::page::EventFrameSubtreeWillBeDetached) -> CdpEvent { + CdpEvent::PageFrameSubtreeWillBeDetached(el) + } + } impl std::convert::TryFrom for super::browser_protocol::page::EventFrameNavigated { type Error = CdpEvent; fn try_from(event: CdpEvent) -> Result { @@ -4669,6 +4709,19 @@ pub mod events { super::EventKind::BuiltIn } } + impl super::sealed::SealedEvent for super::browser_protocol::dom::EventScrollableFlagUpdated { + fn as_any(&self) -> &dyn ::std::any::Any { + self + } + } + impl super::IntoEventKind for super::browser_protocol::dom::EventScrollableFlagUpdated { + fn event_kind() -> super::EventKind + where + Self: Sized + 'static, + { + super::EventKind::BuiltIn + } + } impl super::sealed::SealedEvent for super::browser_protocol::dom::EventPseudoElementRemoved { fn as_any(&self) -> &dyn ::std::any::Any { self @@ -5449,6 +5502,19 @@ pub mod events { super::EventKind::BuiltIn } } + impl super::sealed::SealedEvent for super::browser_protocol::page::EventFrameSubtreeWillBeDetached { + fn as_any(&self) -> &dyn ::std::any::Any { + self + } + } + impl super::IntoEventKind for super::browser_protocol::page::EventFrameSubtreeWillBeDetached { + fn event_kind() -> super::EventKind + where + Self: Sized + 'static, + { + super::EventKind::BuiltIn + } + } impl super::sealed::SealedEvent for super::browser_protocol::page::EventFrameNavigated { fn as_any(&self) -> &dyn ::std::any::Any { self @@ -6677,6 +6743,9 @@ pub mod events { CdpEvent::DomTopLayerElementsUpdated(event) => { $builtin(event); } + CdpEvent::DomScrollableFlagUpdated(event) => { + $builtin(event); + } CdpEvent::DomPseudoElementRemoved(event) => { $builtin(event); } @@ -6845,6 +6914,9 @@ pub mod events { CdpEvent::PageFrameDetached(event) => { $builtin(event); } + CdpEvent::PageFrameSubtreeWillBeDetached(event) => { + $builtin(event); + } CdpEvent::PageFrameNavigated(event) => { $builtin(*event); } @@ -7886,8 +7958,6 @@ pub mod js_protocol { #[doc = "Type of the debug symbols."] #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum DebugSymbolsType { - #[serde(rename = "None")] - None, #[serde(rename = "SourceMap")] SourceMap, #[serde(rename = "EmbeddedDWARF")] @@ -7898,7 +7968,6 @@ pub mod js_protocol { impl AsRef for DebugSymbolsType { fn as_ref(&self) -> &str { match self { - DebugSymbolsType::None => "None", DebugSymbolsType::SourceMap => "SourceMap", DebugSymbolsType::EmbeddedDwarf => "EmbeddedDWARF", DebugSymbolsType::ExternalDwarf => "ExternalDWARF", @@ -7909,7 +7978,6 @@ pub mod js_protocol { type Err = String; fn from_str(s: &str) -> Result { match s { - "None" | "none" => Ok(DebugSymbolsType::None), "SourceMap" | "sourcemap" => Ok(DebugSymbolsType::SourceMap), "EmbeddedDWARF" | "EmbeddedDwarf" | "embeddeddwarf" => { Ok(DebugSymbolsType::EmbeddedDwarf) @@ -11053,10 +11121,10 @@ pub mod js_protocol { #[serde(default)] #[serde(deserialize_with = "super::super::de::deserialize_from_str_optional")] pub script_language: Option, - #[doc = "If the scriptLanguage is WebASsembly, the source of debug symbols for the module."] + #[doc = "If the scriptLanguage is WebAssembly, the source of debug symbols for the module."] #[serde(rename = "debugSymbols")] #[serde(skip_serializing_if = "Option::is_none")] - pub debug_symbols: Option, + pub debug_symbols: Option>, #[doc = "The name the embedder supplied for this script."] #[serde(rename = "embedderName")] #[serde(skip_serializing_if = "Option::is_none")] @@ -21235,6 +21303,10 @@ pub mod browser_protocol { WarnThirdPartyPhaseout, #[serde(rename = "WarnCrossSiteRedirectDowngradeChangesInclusion")] WarnCrossSiteRedirectDowngradeChangesInclusion, + #[serde(rename = "WarnDeprecationTrialMetadata")] + WarnDeprecationTrialMetadata, + #[serde(rename = "WarnThirdPartyCookieHeuristic")] + WarnThirdPartyCookieHeuristic, } impl AsRef for CookieWarningReason { fn as_ref(&self) -> &str { @@ -21269,6 +21341,12 @@ pub mod browser_protocol { CookieWarningReason::WarnCrossSiteRedirectDowngradeChangesInclusion => { "WarnCrossSiteRedirectDowngradeChangesInclusion" } + CookieWarningReason::WarnDeprecationTrialMetadata => { + "WarnDeprecationTrialMetadata" + } + CookieWarningReason::WarnThirdPartyCookieHeuristic => { + "WarnThirdPartyCookieHeuristic" + } } } } @@ -21319,6 +21397,12 @@ pub mod browser_protocol { | "warncrosssiteredirectdowngradechangesinclusion" => { Ok(CookieWarningReason::WarnCrossSiteRedirectDowngradeChangesInclusion) } + "WarnDeprecationTrialMetadata" | "warndeprecationtrialmetadata" => { + Ok(CookieWarningReason::WarnDeprecationTrialMetadata) + } + "WarnThirdPartyCookieHeuristic" | "warnthirdpartycookieheuristic" => { + Ok(CookieWarningReason::WarnThirdPartyCookieHeuristic) + } _ => Err(s.to_string()), } } @@ -22654,16 +22738,18 @@ pub mod browser_protocol { NoRegisterOsSourceHeader, #[serde(rename = "NoRegisterOsTriggerHeader")] NoRegisterOsTriggerHeader, + #[serde(rename = "NavigationRegistrationUniqueScopeAlreadySet")] + NavigationRegistrationUniqueScopeAlreadySet, } impl AsRef for AttributionReportingIssueType { fn as_ref(&self) -> &str { - match self { AttributionReportingIssueType :: PermissionPolicyDisabled => "PermissionPolicyDisabled" , AttributionReportingIssueType :: UntrustworthyReportingOrigin => "UntrustworthyReportingOrigin" , AttributionReportingIssueType :: InsecureContext => "InsecureContext" , AttributionReportingIssueType :: InvalidHeader => "InvalidHeader" , AttributionReportingIssueType :: InvalidRegisterTriggerHeader => "InvalidRegisterTriggerHeader" , AttributionReportingIssueType :: SourceAndTriggerHeaders => "SourceAndTriggerHeaders" , AttributionReportingIssueType :: SourceIgnored => "SourceIgnored" , AttributionReportingIssueType :: TriggerIgnored => "TriggerIgnored" , AttributionReportingIssueType :: OsSourceIgnored => "OsSourceIgnored" , AttributionReportingIssueType :: OsTriggerIgnored => "OsTriggerIgnored" , AttributionReportingIssueType :: InvalidRegisterOsSourceHeader => "InvalidRegisterOsSourceHeader" , AttributionReportingIssueType :: InvalidRegisterOsTriggerHeader => "InvalidRegisterOsTriggerHeader" , AttributionReportingIssueType :: WebAndOsHeaders => "WebAndOsHeaders" , AttributionReportingIssueType :: NoWebOrOsSupport => "NoWebOrOsSupport" , AttributionReportingIssueType :: NavigationRegistrationWithoutTransientUserActivation => "NavigationRegistrationWithoutTransientUserActivation" , AttributionReportingIssueType :: InvalidInfoHeader => "InvalidInfoHeader" , AttributionReportingIssueType :: NoRegisterSourceHeader => "NoRegisterSourceHeader" , AttributionReportingIssueType :: NoRegisterTriggerHeader => "NoRegisterTriggerHeader" , AttributionReportingIssueType :: NoRegisterOsSourceHeader => "NoRegisterOsSourceHeader" , AttributionReportingIssueType :: NoRegisterOsTriggerHeader => "NoRegisterOsTriggerHeader" } + match self { AttributionReportingIssueType :: PermissionPolicyDisabled => "PermissionPolicyDisabled" , AttributionReportingIssueType :: UntrustworthyReportingOrigin => "UntrustworthyReportingOrigin" , AttributionReportingIssueType :: InsecureContext => "InsecureContext" , AttributionReportingIssueType :: InvalidHeader => "InvalidHeader" , AttributionReportingIssueType :: InvalidRegisterTriggerHeader => "InvalidRegisterTriggerHeader" , AttributionReportingIssueType :: SourceAndTriggerHeaders => "SourceAndTriggerHeaders" , AttributionReportingIssueType :: SourceIgnored => "SourceIgnored" , AttributionReportingIssueType :: TriggerIgnored => "TriggerIgnored" , AttributionReportingIssueType :: OsSourceIgnored => "OsSourceIgnored" , AttributionReportingIssueType :: OsTriggerIgnored => "OsTriggerIgnored" , AttributionReportingIssueType :: InvalidRegisterOsSourceHeader => "InvalidRegisterOsSourceHeader" , AttributionReportingIssueType :: InvalidRegisterOsTriggerHeader => "InvalidRegisterOsTriggerHeader" , AttributionReportingIssueType :: WebAndOsHeaders => "WebAndOsHeaders" , AttributionReportingIssueType :: NoWebOrOsSupport => "NoWebOrOsSupport" , AttributionReportingIssueType :: NavigationRegistrationWithoutTransientUserActivation => "NavigationRegistrationWithoutTransientUserActivation" , AttributionReportingIssueType :: InvalidInfoHeader => "InvalidInfoHeader" , AttributionReportingIssueType :: NoRegisterSourceHeader => "NoRegisterSourceHeader" , AttributionReportingIssueType :: NoRegisterTriggerHeader => "NoRegisterTriggerHeader" , AttributionReportingIssueType :: NoRegisterOsSourceHeader => "NoRegisterOsSourceHeader" , AttributionReportingIssueType :: NoRegisterOsTriggerHeader => "NoRegisterOsTriggerHeader" , AttributionReportingIssueType :: NavigationRegistrationUniqueScopeAlreadySet => "NavigationRegistrationUniqueScopeAlreadySet" } } } impl ::std::str::FromStr for AttributionReportingIssueType { type Err = String; fn from_str(s: &str) -> Result { - match s { "PermissionPolicyDisabled" | "permissionpolicydisabled" => Ok (AttributionReportingIssueType :: PermissionPolicyDisabled) , "UntrustworthyReportingOrigin" | "untrustworthyreportingorigin" => Ok (AttributionReportingIssueType :: UntrustworthyReportingOrigin) , "InsecureContext" | "insecurecontext" => Ok (AttributionReportingIssueType :: InsecureContext) , "InvalidHeader" | "invalidheader" => Ok (AttributionReportingIssueType :: InvalidHeader) , "InvalidRegisterTriggerHeader" | "invalidregistertriggerheader" => Ok (AttributionReportingIssueType :: InvalidRegisterTriggerHeader) , "SourceAndTriggerHeaders" | "sourceandtriggerheaders" => Ok (AttributionReportingIssueType :: SourceAndTriggerHeaders) , "SourceIgnored" | "sourceignored" => Ok (AttributionReportingIssueType :: SourceIgnored) , "TriggerIgnored" | "triggerignored" => Ok (AttributionReportingIssueType :: TriggerIgnored) , "OsSourceIgnored" | "ossourceignored" => Ok (AttributionReportingIssueType :: OsSourceIgnored) , "OsTriggerIgnored" | "ostriggerignored" => Ok (AttributionReportingIssueType :: OsTriggerIgnored) , "InvalidRegisterOsSourceHeader" | "invalidregisterossourceheader" => Ok (AttributionReportingIssueType :: InvalidRegisterOsSourceHeader) , "InvalidRegisterOsTriggerHeader" | "invalidregisterostriggerheader" => Ok (AttributionReportingIssueType :: InvalidRegisterOsTriggerHeader) , "WebAndOsHeaders" | "webandosheaders" => Ok (AttributionReportingIssueType :: WebAndOsHeaders) , "NoWebOrOsSupport" | "noweborossupport" => Ok (AttributionReportingIssueType :: NoWebOrOsSupport) , "NavigationRegistrationWithoutTransientUserActivation" | "navigationregistrationwithouttransientuseractivation" => Ok (AttributionReportingIssueType :: NavigationRegistrationWithoutTransientUserActivation) , "InvalidInfoHeader" | "invalidinfoheader" => Ok (AttributionReportingIssueType :: InvalidInfoHeader) , "NoRegisterSourceHeader" | "noregistersourceheader" => Ok (AttributionReportingIssueType :: NoRegisterSourceHeader) , "NoRegisterTriggerHeader" | "noregistertriggerheader" => Ok (AttributionReportingIssueType :: NoRegisterTriggerHeader) , "NoRegisterOsSourceHeader" | "noregisterossourceheader" => Ok (AttributionReportingIssueType :: NoRegisterOsSourceHeader) , "NoRegisterOsTriggerHeader" | "noregisterostriggerheader" => Ok (AttributionReportingIssueType :: NoRegisterOsTriggerHeader) , _ => Err (s . to_string ()) } + match s { "PermissionPolicyDisabled" | "permissionpolicydisabled" => Ok (AttributionReportingIssueType :: PermissionPolicyDisabled) , "UntrustworthyReportingOrigin" | "untrustworthyreportingorigin" => Ok (AttributionReportingIssueType :: UntrustworthyReportingOrigin) , "InsecureContext" | "insecurecontext" => Ok (AttributionReportingIssueType :: InsecureContext) , "InvalidHeader" | "invalidheader" => Ok (AttributionReportingIssueType :: InvalidHeader) , "InvalidRegisterTriggerHeader" | "invalidregistertriggerheader" => Ok (AttributionReportingIssueType :: InvalidRegisterTriggerHeader) , "SourceAndTriggerHeaders" | "sourceandtriggerheaders" => Ok (AttributionReportingIssueType :: SourceAndTriggerHeaders) , "SourceIgnored" | "sourceignored" => Ok (AttributionReportingIssueType :: SourceIgnored) , "TriggerIgnored" | "triggerignored" => Ok (AttributionReportingIssueType :: TriggerIgnored) , "OsSourceIgnored" | "ossourceignored" => Ok (AttributionReportingIssueType :: OsSourceIgnored) , "OsTriggerIgnored" | "ostriggerignored" => Ok (AttributionReportingIssueType :: OsTriggerIgnored) , "InvalidRegisterOsSourceHeader" | "invalidregisterossourceheader" => Ok (AttributionReportingIssueType :: InvalidRegisterOsSourceHeader) , "InvalidRegisterOsTriggerHeader" | "invalidregisterostriggerheader" => Ok (AttributionReportingIssueType :: InvalidRegisterOsTriggerHeader) , "WebAndOsHeaders" | "webandosheaders" => Ok (AttributionReportingIssueType :: WebAndOsHeaders) , "NoWebOrOsSupport" | "noweborossupport" => Ok (AttributionReportingIssueType :: NoWebOrOsSupport) , "NavigationRegistrationWithoutTransientUserActivation" | "navigationregistrationwithouttransientuseractivation" => Ok (AttributionReportingIssueType :: NavigationRegistrationWithoutTransientUserActivation) , "InvalidInfoHeader" | "invalidinfoheader" => Ok (AttributionReportingIssueType :: InvalidInfoHeader) , "NoRegisterSourceHeader" | "noregistersourceheader" => Ok (AttributionReportingIssueType :: NoRegisterSourceHeader) , "NoRegisterTriggerHeader" | "noregistertriggerheader" => Ok (AttributionReportingIssueType :: NoRegisterTriggerHeader) , "NoRegisterOsSourceHeader" | "noregisterossourceheader" => Ok (AttributionReportingIssueType :: NoRegisterOsSourceHeader) , "NoRegisterOsTriggerHeader" | "noregisterostriggerheader" => Ok (AttributionReportingIssueType :: NoRegisterOsTriggerHeader) , "NavigationRegistrationUniqueScopeAlreadySet" | "navigationregistrationuniquescopealreadyset" => Ok (AttributionReportingIssueType :: NavigationRegistrationUniqueScopeAlreadySet) , _ => Err (s . to_string ()) } } } #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] @@ -25312,7 +25398,7 @@ pub mod browser_protocol { impl chromiumoxide_types::Command for LoadUnpackedParams { type Response = LoadUnpackedReturns; } - #[doc = "Gets data from extension storage in the given `area`. If `keys` is\nspecified, these are used to filter the result.\n[getStorageItems](https://chromedevtools.github.io/devtools-protocol/tot/Extensions/#method-getStorageItems)"] + #[doc = "Gets data from extension storage in the given `storageArea`. If `keys` is\nspecified, these are used to filter the result.\n[getStorageItems](https://chromedevtools.github.io/devtools-protocol/tot/Extensions/#method-getStorageItems)"] #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct GetStorageItemsParams { #[doc = "ID of extension."] @@ -25400,7 +25486,7 @@ pub mod browser_protocol { Self::IDENTIFIER.into() } } - #[doc = "Gets data from extension storage in the given `area`. If `keys` is\nspecified, these are used to filter the result.\n[getStorageItems](https://chromedevtools.github.io/devtools-protocol/tot/Extensions/#method-getStorageItems)"] + #[doc = "Gets data from extension storage in the given `storageArea`. If `keys` is\nspecified, these are used to filter the result.\n[getStorageItems](https://chromedevtools.github.io/devtools-protocol/tot/Extensions/#method-getStorageItems)"] #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct GetStorageItemsReturns { #[serde(rename = "data")] @@ -25436,6 +25522,264 @@ pub mod browser_protocol { impl chromiumoxide_types::Command for GetStorageItemsParams { type Response = GetStorageItemsReturns; } + #[doc = "Removes `keys` from extension storage in the given `storageArea`.\n[removeStorageItems](https://chromedevtools.github.io/devtools-protocol/tot/Extensions/#method-removeStorageItems)"] + #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] + pub struct RemoveStorageItemsParams { + #[doc = "ID of extension."] + #[serde(rename = "id")] + pub id: String, + #[doc = "StorageArea to remove data from."] + #[serde(rename = "storageArea")] + #[serde(deserialize_with = "super::super::de::deserialize_from_str")] + pub storage_area: StorageArea, + #[doc = "Keys to remove."] + #[serde(rename = "keys")] + #[serde(skip_serializing_if = "Vec::is_empty")] + pub keys: Vec, + } + impl RemoveStorageItemsParams { + pub fn new( + id: impl Into, + storage_area: impl Into, + keys: Vec, + ) -> Self { + Self { + id: id.into(), + storage_area: storage_area.into(), + keys, + } + } + } + impl RemoveStorageItemsParams { + pub fn builder() -> RemoveStorageItemsParamsBuilder { + RemoveStorageItemsParamsBuilder::default() + } + } + #[derive(Default, Clone)] + pub struct RemoveStorageItemsParamsBuilder { + id: Option, + storage_area: Option, + keys: Option>, + } + impl RemoveStorageItemsParamsBuilder { + pub fn id(mut self, id: impl Into) -> Self { + self.id = Some(id.into()); + self + } + pub fn storage_area(mut self, storage_area: impl Into) -> Self { + self.storage_area = Some(storage_area.into()); + self + } + pub fn key(mut self, key: impl Into) -> Self { + let v = self.keys.get_or_insert(Vec::new()); + v.push(key.into()); + self + } + pub fn keys(mut self, keys: I) -> Self + where + I: IntoIterator, + S: Into, + { + let v = self.keys.get_or_insert(Vec::new()); + for val in keys { + v.push(val.into()); + } + self + } + pub fn build(self) -> Result { + Ok(RemoveStorageItemsParams { + id: self + .id + .ok_or_else(|| format!("Field `{}` is mandatory.", std::stringify!(id)))?, + storage_area: self.storage_area.ok_or_else(|| { + format!("Field `{}` is mandatory.", std::stringify!(storage_area)) + })?, + keys: self.keys.ok_or_else(|| { + format!("Field `{}` is mandatory.", std::stringify!(keys)) + })?, + }) + } + } + impl RemoveStorageItemsParams { + pub const IDENTIFIER: &'static str = "Extensions.removeStorageItems"; + } + impl chromiumoxide_types::Method for RemoveStorageItemsParams { + fn identifier(&self) -> chromiumoxide_types::MethodId { + Self::IDENTIFIER.into() + } + } + impl chromiumoxide_types::MethodType for RemoveStorageItemsParams { + fn method_id() -> chromiumoxide_types::MethodId + where + Self: Sized, + { + Self::IDENTIFIER.into() + } + } + #[doc = "Removes `keys` from extension storage in the given `storageArea`.\n[removeStorageItems](https://chromedevtools.github.io/devtools-protocol/tot/Extensions/#method-removeStorageItems)"] + #[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)] + pub struct RemoveStorageItemsReturns {} + impl chromiumoxide_types::Command for RemoveStorageItemsParams { + type Response = RemoveStorageItemsReturns; + } + #[doc = "Clears extension storage in the given `storageArea`.\n[clearStorageItems](https://chromedevtools.github.io/devtools-protocol/tot/Extensions/#method-clearStorageItems)"] + #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] + pub struct ClearStorageItemsParams { + #[doc = "ID of extension."] + #[serde(rename = "id")] + pub id: String, + #[doc = "StorageArea to remove data from."] + #[serde(rename = "storageArea")] + #[serde(deserialize_with = "super::super::de::deserialize_from_str")] + pub storage_area: StorageArea, + } + impl ClearStorageItemsParams { + pub fn new(id: impl Into, storage_area: impl Into) -> Self { + Self { + id: id.into(), + storage_area: storage_area.into(), + } + } + } + impl ClearStorageItemsParams { + pub fn builder() -> ClearStorageItemsParamsBuilder { + ClearStorageItemsParamsBuilder::default() + } + } + #[derive(Default, Clone)] + pub struct ClearStorageItemsParamsBuilder { + id: Option, + storage_area: Option, + } + impl ClearStorageItemsParamsBuilder { + pub fn id(mut self, id: impl Into) -> Self { + self.id = Some(id.into()); + self + } + pub fn storage_area(mut self, storage_area: impl Into) -> Self { + self.storage_area = Some(storage_area.into()); + self + } + pub fn build(self) -> Result { + Ok(ClearStorageItemsParams { + id: self + .id + .ok_or_else(|| format!("Field `{}` is mandatory.", std::stringify!(id)))?, + storage_area: self.storage_area.ok_or_else(|| { + format!("Field `{}` is mandatory.", std::stringify!(storage_area)) + })?, + }) + } + } + impl ClearStorageItemsParams { + pub const IDENTIFIER: &'static str = "Extensions.clearStorageItems"; + } + impl chromiumoxide_types::Method for ClearStorageItemsParams { + fn identifier(&self) -> chromiumoxide_types::MethodId { + Self::IDENTIFIER.into() + } + } + impl chromiumoxide_types::MethodType for ClearStorageItemsParams { + fn method_id() -> chromiumoxide_types::MethodId + where + Self: Sized, + { + Self::IDENTIFIER.into() + } + } + #[doc = "Clears extension storage in the given `storageArea`.\n[clearStorageItems](https://chromedevtools.github.io/devtools-protocol/tot/Extensions/#method-clearStorageItems)"] + #[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)] + pub struct ClearStorageItemsReturns {} + impl chromiumoxide_types::Command for ClearStorageItemsParams { + type Response = ClearStorageItemsReturns; + } + #[doc = "Sets `values` in extension storage in the given `storageArea`. The provided `values`\nwill be merged with existing values in the storage area.\n[setStorageItems](https://chromedevtools.github.io/devtools-protocol/tot/Extensions/#method-setStorageItems)"] + #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] + pub struct SetStorageItemsParams { + #[doc = "ID of extension."] + #[serde(rename = "id")] + pub id: String, + #[doc = "StorageArea to set data in."] + #[serde(rename = "storageArea")] + #[serde(deserialize_with = "super::super::de::deserialize_from_str")] + pub storage_area: StorageArea, + #[doc = "Values to set."] + #[serde(rename = "values")] + pub values: serde_json::Value, + } + impl SetStorageItemsParams { + pub fn new( + id: impl Into, + storage_area: impl Into, + values: impl Into, + ) -> Self { + Self { + id: id.into(), + storage_area: storage_area.into(), + values: values.into(), + } + } + } + impl SetStorageItemsParams { + pub fn builder() -> SetStorageItemsParamsBuilder { + SetStorageItemsParamsBuilder::default() + } + } + #[derive(Default, Clone)] + pub struct SetStorageItemsParamsBuilder { + id: Option, + storage_area: Option, + values: Option, + } + impl SetStorageItemsParamsBuilder { + pub fn id(mut self, id: impl Into) -> Self { + self.id = Some(id.into()); + self + } + pub fn storage_area(mut self, storage_area: impl Into) -> Self { + self.storage_area = Some(storage_area.into()); + self + } + pub fn values(mut self, values: impl Into) -> Self { + self.values = Some(values.into()); + self + } + pub fn build(self) -> Result { + Ok(SetStorageItemsParams { + id: self + .id + .ok_or_else(|| format!("Field `{}` is mandatory.", std::stringify!(id)))?, + storage_area: self.storage_area.ok_or_else(|| { + format!("Field `{}` is mandatory.", std::stringify!(storage_area)) + })?, + values: self.values.ok_or_else(|| { + format!("Field `{}` is mandatory.", std::stringify!(values)) + })?, + }) + } + } + impl SetStorageItemsParams { + pub const IDENTIFIER: &'static str = "Extensions.setStorageItems"; + } + impl chromiumoxide_types::Method for SetStorageItemsParams { + fn identifier(&self) -> chromiumoxide_types::MethodId { + Self::IDENTIFIER.into() + } + } + impl chromiumoxide_types::MethodType for SetStorageItemsParams { + fn method_id() -> chromiumoxide_types::MethodId + where + Self: Sized, + { + Self::IDENTIFIER.into() + } + } + #[doc = "Sets `values` in extension storage in the given `storageArea`. The provided `values`\nwill be merged with existing values in the storage area.\n[setStorageItems](https://chromedevtools.github.io/devtools-protocol/tot/Extensions/#method-setStorageItems)"] + #[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)] + pub struct SetStorageItemsReturns {} + impl chromiumoxide_types::Command for SetStorageItemsParams { + type Response = SetStorageItemsReturns; + } } #[doc = "Defines commands and events for Autofill."] pub mod autofill { @@ -26831,6 +27175,8 @@ pub mod browser_protocol { WakeLockScreen, #[serde(rename = "wakeLockSystem")] WakeLockSystem, + #[serde(rename = "webAppInstallation")] + WebAppInstallation, #[serde(rename = "windowManagement")] WindowManagement, } @@ -26865,6 +27211,7 @@ pub mod browser_protocol { PermissionType::VideoCapturePanTiltZoom => "videoCapturePanTiltZoom", PermissionType::WakeLockScreen => "wakeLockScreen", PermissionType::WakeLockSystem => "wakeLockSystem", + PermissionType::WebAppInstallation => "webAppInstallation", PermissionType::WindowManagement => "windowManagement", } } @@ -26941,6 +27288,9 @@ pub mod browser_protocol { "wakeLockSystem" | "WakeLockSystem" | "wakelocksystem" => { Ok(PermissionType::WakeLockSystem) } + "webAppInstallation" | "WebAppInstallation" | "webappinstallation" => { + Ok(PermissionType::WebAppInstallation) + } "windowManagement" | "WindowManagement" | "windowmanagement" => { Ok(PermissionType::WindowManagement) } @@ -36504,6 +36854,8 @@ pub mod browser_protocol { Marker, #[serde(rename = "backdrop")] Backdrop, + #[serde(rename = "column")] + Column, #[serde(rename = "selection")] Selection, #[serde(rename = "search-text")] @@ -36522,6 +36874,10 @@ pub mod browser_protocol { ScrollMarker, #[serde(rename = "scroll-marker-group")] ScrollMarkerGroup, + #[serde(rename = "scroll-next-button")] + ScrollNextButton, + #[serde(rename = "scroll-prev-button")] + ScrollPrevButton, #[serde(rename = "scrollbar")] Scrollbar, #[serde(rename = "scrollbar-thumb")] @@ -36548,6 +36904,18 @@ pub mod browser_protocol { ViewTransitionOld, #[serde(rename = "view-transition-new")] ViewTransitionNew, + #[serde(rename = "placeholder")] + Placeholder, + #[serde(rename = "file-selector-button")] + FileSelectorButton, + #[serde(rename = "details-content")] + DetailsContent, + #[serde(rename = "select-fallback-button")] + SelectFallbackButton, + #[serde(rename = "select-fallback-button-text")] + SelectFallbackButtonText, + #[serde(rename = "picker")] + Picker, } impl AsRef for PseudoType { fn as_ref(&self) -> &str { @@ -36558,6 +36926,7 @@ pub mod browser_protocol { PseudoType::After => "after", PseudoType::Marker => "marker", PseudoType::Backdrop => "backdrop", + PseudoType::Column => "column", PseudoType::Selection => "selection", PseudoType::SearchText => "search-text", PseudoType::TargetText => "target-text", @@ -36567,6 +36936,8 @@ pub mod browser_protocol { PseudoType::FirstLineInherited => "first-line-inherited", PseudoType::ScrollMarker => "scroll-marker", PseudoType::ScrollMarkerGroup => "scroll-marker-group", + PseudoType::ScrollNextButton => "scroll-next-button", + PseudoType::ScrollPrevButton => "scroll-prev-button", PseudoType::Scrollbar => "scrollbar", PseudoType::ScrollbarThumb => "scrollbar-thumb", PseudoType::ScrollbarButton => "scrollbar-button", @@ -36580,6 +36951,12 @@ pub mod browser_protocol { PseudoType::ViewTransitionImagePair => "view-transition-image-pair", PseudoType::ViewTransitionOld => "view-transition-old", PseudoType::ViewTransitionNew => "view-transition-new", + PseudoType::Placeholder => "placeholder", + PseudoType::FileSelectorButton => "file-selector-button", + PseudoType::DetailsContent => "details-content", + PseudoType::SelectFallbackButton => "select-fallback-button", + PseudoType::SelectFallbackButtonText => "select-fallback-button-text", + PseudoType::Picker => "picker", } } } @@ -36593,6 +36970,7 @@ pub mod browser_protocol { "after" | "After" => Ok(PseudoType::After), "marker" | "Marker" => Ok(PseudoType::Marker), "backdrop" | "Backdrop" => Ok(PseudoType::Backdrop), + "column" | "Column" => Ok(PseudoType::Column), "selection" | "Selection" => Ok(PseudoType::Selection), "search-text" | "SearchText" => Ok(PseudoType::SearchText), "target-text" | "TargetText" => Ok(PseudoType::TargetText), @@ -36606,6 +36984,8 @@ pub mod browser_protocol { "scroll-marker-group" | "ScrollMarkerGroup" => { Ok(PseudoType::ScrollMarkerGroup) } + "scroll-next-button" | "ScrollNextButton" => Ok(PseudoType::ScrollNextButton), + "scroll-prev-button" | "ScrollPrevButton" => Ok(PseudoType::ScrollPrevButton), "scrollbar" | "Scrollbar" => Ok(PseudoType::Scrollbar), "scrollbar-thumb" | "ScrollbarThumb" => Ok(PseudoType::ScrollbarThumb), "scrollbar-button" | "ScrollbarButton" => Ok(PseudoType::ScrollbarButton), @@ -36629,6 +37009,18 @@ pub mod browser_protocol { "view-transition-new" | "ViewTransitionNew" => { Ok(PseudoType::ViewTransitionNew) } + "placeholder" | "Placeholder" => Ok(PseudoType::Placeholder), + "file-selector-button" | "FileSelectorButton" => { + Ok(PseudoType::FileSelectorButton) + } + "details-content" | "DetailsContent" => Ok(PseudoType::DetailsContent), + "select-fallback-button" | "SelectFallbackButton" => { + Ok(PseudoType::SelectFallbackButton) + } + "select-fallback-button-text" | "SelectFallbackButtonText" => { + Ok(PseudoType::SelectFallbackButtonText) + } + "picker" | "Picker" => Ok(PseudoType::Picker), _ => Err(s.to_string()), } } @@ -36902,6 +37294,9 @@ pub mod browser_protocol { #[serde(rename = "assignedSlot")] #[serde(skip_serializing_if = "Option::is_none")] pub assigned_slot: Option, + #[serde(rename = "isScrollable")] + #[serde(skip_serializing_if = "Option::is_none")] + pub is_scrollable: Option, } impl Node { pub fn builder() -> NodeBuilder { @@ -36940,6 +37335,7 @@ pub mod browser_protocol { is_svg: Option, compatibility_mode: Option, assigned_slot: Option, + is_scrollable: Option, } impl NodeBuilder { pub fn node_id(mut self, node_id: impl Into) -> Self { @@ -37125,6 +37521,10 @@ pub mod browser_protocol { self.assigned_slot = Some(assigned_slot.into()); self } + pub fn is_scrollable(mut self, is_scrollable: impl Into) -> Self { + self.is_scrollable = Some(is_scrollable.into()); + self + } pub fn build(self) -> Result { Ok(Node { node_id: self.node_id.ok_or_else(|| { @@ -37169,12 +37569,78 @@ pub mod browser_protocol { is_svg: self.is_svg, compatibility_mode: self.compatibility_mode, assigned_slot: self.assigned_slot, + is_scrollable: self.is_scrollable, }) } } impl Node { pub const IDENTIFIER: &'static str = "DOM.Node"; } + #[doc = "A structure to hold the top-level node of a detached tree and an array of its retained descendants.\n[DetachedElementInfo](https://chromedevtools.github.io/devtools-protocol/tot/DOM/#type-DetachedElementInfo)"] + #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] + pub struct DetachedElementInfo { + #[serde(rename = "treeNode")] + pub tree_node: Node, + #[serde(rename = "retainedNodeIds")] + #[serde(skip_serializing_if = "Vec::is_empty")] + pub retained_node_ids: Vec, + } + impl DetachedElementInfo { + pub fn new(tree_node: impl Into, retained_node_ids: Vec) -> Self { + Self { + tree_node: tree_node.into(), + retained_node_ids, + } + } + } + impl DetachedElementInfo { + pub fn builder() -> DetachedElementInfoBuilder { + DetachedElementInfoBuilder::default() + } + } + #[derive(Default, Clone)] + pub struct DetachedElementInfoBuilder { + tree_node: Option, + retained_node_ids: Option>, + } + impl DetachedElementInfoBuilder { + pub fn tree_node(mut self, tree_node: impl Into) -> Self { + self.tree_node = Some(tree_node.into()); + self + } + pub fn retained_node_id(mut self, retained_node_id: impl Into) -> Self { + let v = self.retained_node_ids.get_or_insert(Vec::new()); + v.push(retained_node_id.into()); + self + } + pub fn retained_node_ids(mut self, retained_node_ids: I) -> Self + where + I: IntoIterator, + S: Into, + { + let v = self.retained_node_ids.get_or_insert(Vec::new()); + for val in retained_node_ids { + v.push(val.into()); + } + self + } + pub fn build(self) -> Result { + Ok(DetachedElementInfo { + tree_node: self.tree_node.ok_or_else(|| { + format!("Field `{}` is mandatory.", std::stringify!(tree_node)) + })?, + retained_node_ids: self.retained_node_ids.ok_or_else(|| { + format!( + "Field `{}` is mandatory.", + std::stringify!(retained_node_ids) + ) + })?, + }) + } + } + impl DetachedElementInfo { + pub const IDENTIFIER: &'static str = "DOM.DetachedElementInfo"; + } #[doc = "A structure holding an RGBA color.\n[RGBA](https://chromedevtools.github.io/devtools-protocol/tot/DOM/#type-RGBA)"] #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct Rgba { @@ -41239,6 +41705,75 @@ pub mod browser_protocol { impl chromiumoxide_types::Command for GetFileInfoParams { type Response = GetFileInfoReturns; } + #[doc = "Returns list of detached nodes\n[getDetachedDomNodes](https://chromedevtools.github.io/devtools-protocol/tot/DOM/#method-getDetachedDomNodes)"] + #[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)] + pub struct GetDetachedDomNodesParams {} + impl GetDetachedDomNodesParams { + pub const IDENTIFIER: &'static str = "DOM.getDetachedDomNodes"; + } + impl chromiumoxide_types::Method for GetDetachedDomNodesParams { + fn identifier(&self) -> chromiumoxide_types::MethodId { + Self::IDENTIFIER.into() + } + } + impl chromiumoxide_types::MethodType for GetDetachedDomNodesParams { + fn method_id() -> chromiumoxide_types::MethodId + where + Self: Sized, + { + Self::IDENTIFIER.into() + } + } + #[doc = "Returns list of detached nodes\n[getDetachedDomNodes](https://chromedevtools.github.io/devtools-protocol/tot/DOM/#method-getDetachedDomNodes)"] + #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] + pub struct GetDetachedDomNodesReturns { + #[doc = "The list of detached nodes"] + #[serde(rename = "detachedNodes")] + #[serde(skip_serializing_if = "Vec::is_empty")] + pub detached_nodes: Vec, + } + impl GetDetachedDomNodesReturns { + pub fn new(detached_nodes: Vec) -> Self { + Self { detached_nodes } + } + } + impl GetDetachedDomNodesReturns { + pub fn builder() -> GetDetachedDomNodesReturnsBuilder { + GetDetachedDomNodesReturnsBuilder::default() + } + } + #[derive(Default, Clone)] + pub struct GetDetachedDomNodesReturnsBuilder { + detached_nodes: Option>, + } + impl GetDetachedDomNodesReturnsBuilder { + pub fn detached_node(mut self, detached_node: impl Into) -> Self { + let v = self.detached_nodes.get_or_insert(Vec::new()); + v.push(detached_node.into()); + self + } + pub fn detached_nodes(mut self, detached_nodes: I) -> Self + where + I: IntoIterator, + S: Into, + { + let v = self.detached_nodes.get_or_insert(Vec::new()); + for val in detached_nodes { + v.push(val.into()); + } + self + } + pub fn build(self) -> Result { + Ok(GetDetachedDomNodesReturns { + detached_nodes: self.detached_nodes.ok_or_else(|| { + format!("Field `{}` is mandatory.", std::stringify!(detached_nodes)) + })?, + }) + } + } + impl chromiumoxide_types::Command for GetDetachedDomNodesParams { + type Response = GetDetachedDomNodesReturns; + } #[doc = "Enables console to refer to the node with given id via $x (see Command Line API for more details\n$x functions).\n[setInspectedNode](https://chromedevtools.github.io/devtools-protocol/tot/DOM/#method-setInspectedNode)"] #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct SetInspectedNodeParams { @@ -42263,6 +42798,32 @@ pub mod browser_protocol { Self::IDENTIFIER.into() } } + #[doc = "Fired when a node's scrollability state changes.\n[scrollableFlagUpdated](https://chromedevtools.github.io/devtools-protocol/tot/DOM/#event-scrollableFlagUpdated)"] + #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] + pub struct EventScrollableFlagUpdated { + #[doc = "The id of the node."] + #[serde(rename = "nodeId")] + pub node_id: super::dom::NodeId, + #[doc = "If the node is scrollable."] + #[serde(rename = "isScrollable")] + pub is_scrollable: bool, + } + impl EventScrollableFlagUpdated { + pub const IDENTIFIER: &'static str = "DOM.scrollableFlagUpdated"; + } + impl chromiumoxide_types::Method for EventScrollableFlagUpdated { + fn identifier(&self) -> chromiumoxide_types::MethodId { + Self::IDENTIFIER.into() + } + } + impl chromiumoxide_types::MethodType for EventScrollableFlagUpdated { + fn method_id() -> chromiumoxide_types::MethodId + where + Self: Sized, + { + Self::IDENTIFIER.into() + } + } #[doc = "Called when a pseudo element is removed from an element.\n[pseudoElementRemoved](https://chromedevtools.github.io/devtools-protocol/tot/DOM/#event-pseudoElementRemoved)"] #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct EventPseudoElementRemoved { @@ -47066,8 +47627,6 @@ pub mod browser_protocol { LinearAcceleration, #[serde(rename = "magnetometer")] Magnetometer, - #[serde(rename = "proximity")] - Proximity, #[serde(rename = "relative-orientation")] RelativeOrientation, } @@ -47081,7 +47640,6 @@ pub mod browser_protocol { SensorType::Gyroscope => "gyroscope", SensorType::LinearAcceleration => "linear-acceleration", SensorType::Magnetometer => "magnetometer", - SensorType::Proximity => "proximity", SensorType::RelativeOrientation => "relative-orientation", } } @@ -47101,7 +47659,6 @@ pub mod browser_protocol { Ok(SensorType::LinearAcceleration) } "magnetometer" | "Magnetometer" => Ok(SensorType::Magnetometer), - "proximity" | "Proximity" => Ok(SensorType::Proximity), "relative-orientation" | "RelativeOrientation" => { Ok(SensorType::RelativeOrientation) } @@ -56881,6 +57438,58 @@ pub mod browser_protocol { impl Module { pub const IDENTIFIER: &'static str = "Memory.Module"; } + #[doc = "DOM object counter data.\n[DOMCounter](https://chromedevtools.github.io/devtools-protocol/tot/Memory/#type-DOMCounter)"] + #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] + pub struct DomCounter { + #[doc = "Object name. Note: object names should be presumed volatile and clients should not expect\nthe returned names to be consistent across runs."] + #[serde(rename = "name")] + pub name: String, + #[doc = "Object count."] + #[serde(rename = "count")] + pub count: i64, + } + impl DomCounter { + pub fn new(name: impl Into, count: impl Into) -> Self { + Self { + name: name.into(), + count: count.into(), + } + } + } + impl DomCounter { + pub fn builder() -> DomCounterBuilder { + DomCounterBuilder::default() + } + } + #[derive(Default, Clone)] + pub struct DomCounterBuilder { + name: Option, + count: Option, + } + impl DomCounterBuilder { + pub fn name(mut self, name: impl Into) -> Self { + self.name = Some(name.into()); + self + } + pub fn count(mut self, count: impl Into) -> Self { + self.count = Some(count.into()); + self + } + pub fn build(self) -> Result { + Ok(DomCounter { + name: self.name.ok_or_else(|| { + format!("Field `{}` is mandatory.", std::stringify!(name)) + })?, + count: self.count.ok_or_else(|| { + format!("Field `{}` is mandatory.", std::stringify!(count)) + })?, + }) + } + } + impl DomCounter { + pub const IDENTIFIER: &'static str = "Memory.DOMCounter"; + } + #[doc = "Retruns current DOM object counters.\n[getDOMCounters](https://chromedevtools.github.io/devtools-protocol/tot/Memory/#method-getDOMCounters)"] #[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)] pub struct GetDomCountersParams {} impl GetDomCountersParams { @@ -56899,6 +57508,7 @@ pub mod browser_protocol { Self::IDENTIFIER.into() } } + #[doc = "Retruns current DOM object counters.\n[getDOMCounters](https://chromedevtools.github.io/devtools-protocol/tot/Memory/#method-getDOMCounters)"] #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct GetDomCountersReturns { #[serde(rename = "documents")] @@ -56965,6 +57575,76 @@ pub mod browser_protocol { impl chromiumoxide_types::Command for GetDomCountersParams { type Response = GetDomCountersReturns; } + #[doc = "Retruns DOM object counters after preparing renderer for leak detection.\n[getDOMCountersForLeakDetection](https://chromedevtools.github.io/devtools-protocol/tot/Memory/#method-getDOMCountersForLeakDetection)"] + #[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)] + pub struct GetDomCountersForLeakDetectionParams {} + impl GetDomCountersForLeakDetectionParams { + pub const IDENTIFIER: &'static str = "Memory.getDOMCountersForLeakDetection"; + } + impl chromiumoxide_types::Method for GetDomCountersForLeakDetectionParams { + fn identifier(&self) -> chromiumoxide_types::MethodId { + Self::IDENTIFIER.into() + } + } + impl chromiumoxide_types::MethodType for GetDomCountersForLeakDetectionParams { + fn method_id() -> chromiumoxide_types::MethodId + where + Self: Sized, + { + Self::IDENTIFIER.into() + } + } + #[doc = "Retruns DOM object counters after preparing renderer for leak detection.\n[getDOMCountersForLeakDetection](https://chromedevtools.github.io/devtools-protocol/tot/Memory/#method-getDOMCountersForLeakDetection)"] + #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] + pub struct GetDomCountersForLeakDetectionReturns { + #[doc = "DOM object counters."] + #[serde(rename = "counters")] + #[serde(skip_serializing_if = "Vec::is_empty")] + pub counters: Vec, + } + impl GetDomCountersForLeakDetectionReturns { + pub fn new(counters: Vec) -> Self { + Self { counters } + } + } + impl GetDomCountersForLeakDetectionReturns { + pub fn builder() -> GetDomCountersForLeakDetectionReturnsBuilder { + GetDomCountersForLeakDetectionReturnsBuilder::default() + } + } + #[derive(Default, Clone)] + pub struct GetDomCountersForLeakDetectionReturnsBuilder { + counters: Option>, + } + impl GetDomCountersForLeakDetectionReturnsBuilder { + pub fn counter(mut self, counter: impl Into) -> Self { + let v = self.counters.get_or_insert(Vec::new()); + v.push(counter.into()); + self + } + pub fn counters(mut self, counters: I) -> Self + where + I: IntoIterator, + S: Into, + { + let v = self.counters.get_or_insert(Vec::new()); + for val in counters { + v.push(val.into()); + } + self + } + pub fn build(self) -> Result { + Ok(GetDomCountersForLeakDetectionReturns { + counters: self.counters.ok_or_else(|| { + format!("Field `{}` is mandatory.", std::stringify!(counters)) + })?, + }) + } + } + impl chromiumoxide_types::Command for GetDomCountersForLeakDetectionParams { + type Response = GetDomCountersForLeakDetectionReturns; + } + #[doc = "Prepares for leak detection by terminating workers, stopping spellcheckers,\ndropping non-essential internal caches, running garbage collections, etc.\n[prepareForLeakDetection](https://chromedevtools.github.io/devtools-protocol/tot/Memory/#method-prepareForLeakDetection)"] #[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)] pub struct PrepareForLeakDetectionParams {} impl PrepareForLeakDetectionParams { @@ -56983,6 +57663,7 @@ pub mod browser_protocol { Self::IDENTIFIER.into() } } + #[doc = "Prepares for leak detection by terminating workers, stopping spellcheckers,\ndropping non-essential internal caches, running garbage collections, etc.\n[prepareForLeakDetection](https://chromedevtools.github.io/devtools-protocol/tot/Memory/#method-prepareForLeakDetection)"] #[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)] pub struct PrepareForLeakDetectionReturns {} impl chromiumoxide_types::Command for PrepareForLeakDetectionParams { @@ -60894,6 +61575,9 @@ pub mod browser_protocol { #[doc = "The cookie should have been blocked by 3PCD but is exempted by Deprecation Trial mitigation."] #[serde(rename = "TPCDDeprecationTrial")] TpcdDeprecationTrial, + #[doc = "The cookie should have been blocked by 3PCD but is exempted by Top-level Deprecation Trial mitigation."] + #[serde(rename = "TopLevelTPCDDeprecationTrial")] + TopLevelTpcdDeprecationTrial, #[doc = "The cookie should have been blocked by 3PCD but is exempted by heuristics mitigation."] #[serde(rename = "TPCDHeuristics")] TpcdHeuristics, @@ -60906,9 +61590,6 @@ pub mod browser_protocol { #[doc = "The cookie should have been blocked by 3PCD but is exempted by Top-level Storage Access API."] #[serde(rename = "TopLevelStorageAccess")] TopLevelStorageAccess, - #[doc = "The cookie should have been blocked by 3PCD but is exempted by CORS opt-in."] - #[serde(rename = "CorsOptIn")] - CorsOptIn, #[doc = "The cookie should have been blocked by 3PCD but is exempted by the first-party URL scheme."] #[serde(rename = "Scheme")] Scheme, @@ -60920,11 +61601,13 @@ pub mod browser_protocol { CookieExemptionReason::UserSetting => "UserSetting", CookieExemptionReason::TpcdMetadata => "TPCDMetadata", CookieExemptionReason::TpcdDeprecationTrial => "TPCDDeprecationTrial", + CookieExemptionReason::TopLevelTpcdDeprecationTrial => { + "TopLevelTPCDDeprecationTrial" + } CookieExemptionReason::TpcdHeuristics => "TPCDHeuristics", CookieExemptionReason::EnterprisePolicy => "EnterprisePolicy", CookieExemptionReason::StorageAccess => "StorageAccess", CookieExemptionReason::TopLevelStorageAccess => "TopLevelStorageAccess", - CookieExemptionReason::CorsOptIn => "CorsOptIn", CookieExemptionReason::Scheme => "Scheme", } } @@ -60941,6 +61624,11 @@ pub mod browser_protocol { "TPCDDeprecationTrial" | "TpcdDeprecationTrial" | "tpcddeprecationtrial" => { Ok(CookieExemptionReason::TpcdDeprecationTrial) } + "TopLevelTPCDDeprecationTrial" + | "TopLevelTpcdDeprecationTrial" + | "topleveltpcddeprecationtrial" => { + Ok(CookieExemptionReason::TopLevelTpcdDeprecationTrial) + } "TPCDHeuristics" | "TpcdHeuristics" | "tpcdheuristics" => { Ok(CookieExemptionReason::TpcdHeuristics) } @@ -60951,7 +61639,6 @@ pub mod browser_protocol { "TopLevelStorageAccess" | "toplevelstorageaccess" => { Ok(CookieExemptionReason::TopLevelStorageAccess) } - "CorsOptIn" | "corsoptin" => Ok(CookieExemptionReason::CorsOptIn), "Scheme" | "scheme" => Ok(CookieExemptionReason::Scheme), _ => Err(s.to_string()), } @@ -69674,61 +70361,6 @@ pub mod browser_protocol { impl chromiumoxide_types::Command for SetShowScrollBottleneckRectsParams { type Response = SetShowScrollBottleneckRectsReturns; } - #[doc = "Request that backend shows an overlay with web vital metrics.\n[setShowWebVitals](https://chromedevtools.github.io/devtools-protocol/tot/Overlay/#method-setShowWebVitals)"] - #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] - pub struct SetShowWebVitalsParams { - #[serde(rename = "show")] - pub show: bool, - } - impl SetShowWebVitalsParams { - pub fn new(show: impl Into) -> Self { - Self { show: show.into() } - } - } - impl SetShowWebVitalsParams { - pub fn builder() -> SetShowWebVitalsParamsBuilder { - SetShowWebVitalsParamsBuilder::default() - } - } - #[derive(Default, Clone)] - pub struct SetShowWebVitalsParamsBuilder { - show: Option, - } - impl SetShowWebVitalsParamsBuilder { - pub fn show(mut self, show: impl Into) -> Self { - self.show = Some(show.into()); - self - } - pub fn build(self) -> Result { - Ok(SetShowWebVitalsParams { - show: self.show.ok_or_else(|| { - format!("Field `{}` is mandatory.", std::stringify!(show)) - })?, - }) - } - } - impl SetShowWebVitalsParams { - pub const IDENTIFIER: &'static str = "Overlay.setShowWebVitals"; - } - impl chromiumoxide_types::Method for SetShowWebVitalsParams { - fn identifier(&self) -> chromiumoxide_types::MethodId { - Self::IDENTIFIER.into() - } - } - impl chromiumoxide_types::MethodType for SetShowWebVitalsParams { - fn method_id() -> chromiumoxide_types::MethodId - where - Self: Sized, - { - Self::IDENTIFIER.into() - } - } - #[doc = "Request that backend shows an overlay with web vital metrics.\n[setShowWebVitals](https://chromedevtools.github.io/devtools-protocol/tot/Overlay/#method-setShowWebVitals)"] - #[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)] - pub struct SetShowWebVitalsReturns {} - impl chromiumoxide_types::Command for SetShowWebVitalsParams { - type Response = SetShowWebVitalsReturns; - } #[doc = "Paints viewport size upon main frame resize.\n[setShowViewportSizeOnResize](https://chromedevtools.github.io/devtools-protocol/tot/Overlay/#method-setShowViewportSizeOnResize)"] #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct SetShowViewportSizeOnResizeParams { @@ -70482,6 +71114,8 @@ pub mod browser_protocol { ClipboardWrite, #[serde(rename = "compute-pressure")] ComputePressure, + #[serde(rename = "controlled-frame")] + ControlledFrame, #[serde(rename = "cross-origin-isolated")] CrossOriginIsolated, #[serde(rename = "deferred-fetch")] @@ -70490,6 +71124,8 @@ pub mod browser_protocol { DigitalCredentialsGet, #[serde(rename = "direct-sockets")] DirectSockets, + #[serde(rename = "direct-sockets-private")] + DirectSocketsPrivate, #[serde(rename = "display-capture")] DisplayCapture, #[serde(rename = "document-domain")] @@ -70540,6 +71176,8 @@ pub mod browser_protocol { Payment, #[serde(rename = "picture-in-picture")] PictureInPicture, + #[serde(rename = "popins")] + Popins, #[serde(rename = "private-aggregation")] PrivateAggregation, #[serde(rename = "private-state-token-issuance")] @@ -70580,6 +71218,8 @@ pub mod browser_protocol { UsbUnrestricted, #[serde(rename = "vertical-scroll")] VerticalScroll, + #[serde(rename = "web-app-installation")] + WebAppInstallation, #[serde(rename = "web-printing")] WebPrinting, #[serde(rename = "web-share")] @@ -70629,10 +71269,12 @@ pub mod browser_protocol { PermissionsPolicyFeature::ClipboardRead => "clipboard-read", PermissionsPolicyFeature::ClipboardWrite => "clipboard-write", PermissionsPolicyFeature::ComputePressure => "compute-pressure", + PermissionsPolicyFeature::ControlledFrame => "controlled-frame", PermissionsPolicyFeature::CrossOriginIsolated => "cross-origin-isolated", PermissionsPolicyFeature::DeferredFetch => "deferred-fetch", PermissionsPolicyFeature::DigitalCredentialsGet => "digital-credentials-get", PermissionsPolicyFeature::DirectSockets => "direct-sockets", + PermissionsPolicyFeature::DirectSocketsPrivate => "direct-sockets-private", PermissionsPolicyFeature::DisplayCapture => "display-capture", PermissionsPolicyFeature::DocumentDomain => "document-domain", PermissionsPolicyFeature::EncryptedMedia => "encrypted-media", @@ -70666,6 +71308,7 @@ pub mod browser_protocol { PermissionsPolicyFeature::OtpCredentials => "otp-credentials", PermissionsPolicyFeature::Payment => "payment", PermissionsPolicyFeature::PictureInPicture => "picture-in-picture", + PermissionsPolicyFeature::Popins => "popins", PermissionsPolicyFeature::PrivateAggregation => "private-aggregation", PermissionsPolicyFeature::PrivateStateTokenIssuance => { "private-state-token-issuance" @@ -70694,6 +71337,7 @@ pub mod browser_protocol { PermissionsPolicyFeature::Usb => "usb", PermissionsPolicyFeature::UsbUnrestricted => "usb-unrestricted", PermissionsPolicyFeature::VerticalScroll => "vertical-scroll", + PermissionsPolicyFeature::WebAppInstallation => "web-app-installation", PermissionsPolicyFeature::WebPrinting => "web-printing", PermissionsPolicyFeature::WebShare => "web-share", PermissionsPolicyFeature::WindowManagement => "window-management", @@ -70778,6 +71422,9 @@ pub mod browser_protocol { "compute-pressure" | "ComputePressure" => { Ok(PermissionsPolicyFeature::ComputePressure) } + "controlled-frame" | "ControlledFrame" => { + Ok(PermissionsPolicyFeature::ControlledFrame) + } "cross-origin-isolated" | "CrossOriginIsolated" => { Ok(PermissionsPolicyFeature::CrossOriginIsolated) } @@ -70790,6 +71437,9 @@ pub mod browser_protocol { "direct-sockets" | "DirectSockets" => { Ok(PermissionsPolicyFeature::DirectSockets) } + "direct-sockets-private" | "DirectSocketsPrivate" => { + Ok(PermissionsPolicyFeature::DirectSocketsPrivate) + } "display-capture" | "DisplayCapture" => { Ok(PermissionsPolicyFeature::DisplayCapture) } @@ -70841,6 +71491,7 @@ pub mod browser_protocol { "picture-in-picture" | "PictureInPicture" => { Ok(PermissionsPolicyFeature::PictureInPicture) } + "popins" | "Popins" => Ok(PermissionsPolicyFeature::Popins), "private-aggregation" | "PrivateAggregation" => { Ok(PermissionsPolicyFeature::PrivateAggregation) } @@ -70887,6 +71538,9 @@ pub mod browser_protocol { "vertical-scroll" | "VerticalScroll" => { Ok(PermissionsPolicyFeature::VerticalScroll) } + "web-app-installation" | "WebAppInstallation" => { + Ok(PermissionsPolicyFeature::WebAppInstallation) + } "web-printing" | "WebPrinting" => Ok(PermissionsPolicyFeature::WebPrinting), "web-share" | "WebShare" => Ok(PermissionsPolicyFeature::WebShare), "window-management" | "WindowManagement" => { @@ -72795,34 +73449,40 @@ pub mod browser_protocol { } #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum ClientNavigationReason { + #[serde(rename = "anchorClick")] + AnchorClick, #[serde(rename = "formSubmissionGet")] FormSubmissionGet, #[serde(rename = "formSubmissionPost")] FormSubmissionPost, #[serde(rename = "httpHeaderRefresh")] HttpHeaderRefresh, - #[serde(rename = "scriptInitiated")] - ScriptInitiated, + #[serde(rename = "initialFrameNavigation")] + InitialFrameNavigation, #[serde(rename = "metaTagRefresh")] MetaTagRefresh, + #[serde(rename = "other")] + Other, #[serde(rename = "pageBlockInterstitial")] PageBlockInterstitial, #[serde(rename = "reload")] Reload, - #[serde(rename = "anchorClick")] - AnchorClick, + #[serde(rename = "scriptInitiated")] + ScriptInitiated, } impl AsRef for ClientNavigationReason { fn as_ref(&self) -> &str { match self { + ClientNavigationReason::AnchorClick => "anchorClick", ClientNavigationReason::FormSubmissionGet => "formSubmissionGet", ClientNavigationReason::FormSubmissionPost => "formSubmissionPost", ClientNavigationReason::HttpHeaderRefresh => "httpHeaderRefresh", - ClientNavigationReason::ScriptInitiated => "scriptInitiated", + ClientNavigationReason::InitialFrameNavigation => "initialFrameNavigation", ClientNavigationReason::MetaTagRefresh => "metaTagRefresh", + ClientNavigationReason::Other => "other", ClientNavigationReason::PageBlockInterstitial => "pageBlockInterstitial", ClientNavigationReason::Reload => "reload", - ClientNavigationReason::AnchorClick => "anchorClick", + ClientNavigationReason::ScriptInitiated => "scriptInitiated", } } } @@ -72830,6 +73490,9 @@ pub mod browser_protocol { type Err = String; fn from_str(s: &str) -> Result { match s { + "anchorClick" | "AnchorClick" | "anchorclick" => { + Ok(ClientNavigationReason::AnchorClick) + } "formSubmissionGet" | "FormSubmissionGet" | "formsubmissionget" => { Ok(ClientNavigationReason::FormSubmissionGet) } @@ -72839,18 +73502,21 @@ pub mod browser_protocol { "httpHeaderRefresh" | "HttpHeaderRefresh" | "httpheaderrefresh" => { Ok(ClientNavigationReason::HttpHeaderRefresh) } - "scriptInitiated" | "ScriptInitiated" | "scriptinitiated" => { - Ok(ClientNavigationReason::ScriptInitiated) + "initialFrameNavigation" + | "InitialFrameNavigation" + | "initialframenavigation" => { + Ok(ClientNavigationReason::InitialFrameNavigation) } "metaTagRefresh" | "MetaTagRefresh" | "metatagrefresh" => { Ok(ClientNavigationReason::MetaTagRefresh) } + "other" | "Other" => Ok(ClientNavigationReason::Other), "pageBlockInterstitial" | "PageBlockInterstitial" | "pageblockinterstitial" => { Ok(ClientNavigationReason::PageBlockInterstitial) } "reload" | "Reload" => Ok(ClientNavigationReason::Reload), - "anchorClick" | "AnchorClick" | "anchorclick" => { - Ok(ClientNavigationReason::AnchorClick) + "scriptInitiated" | "ScriptInitiated" | "scriptinitiated" => { + Ok(ClientNavigationReason::ScriptInitiated) } _ => Err(s.to_string()), } @@ -74416,6 +75082,8 @@ pub mod browser_protocol { ContentMediaSessionService, #[serde(rename = "ContentScreenReader")] ContentScreenReader, + #[serde(rename = "ContentDiscarded")] + ContentDiscarded, #[doc = "See components/back_forward_cache/back_forward_cache_disable.h for explanations."] #[serde(rename = "EmbedderPopupBlockerTabHelper")] EmbedderPopupBlockerTabHelper, @@ -74452,13 +75120,13 @@ pub mod browser_protocol { } impl AsRef for BackForwardCacheNotRestoredReason { fn as_ref(&self) -> &str { - match self { BackForwardCacheNotRestoredReason :: NotPrimaryMainFrame => "NotPrimaryMainFrame" , BackForwardCacheNotRestoredReason :: BackForwardCacheDisabled => "BackForwardCacheDisabled" , BackForwardCacheNotRestoredReason :: RelatedActiveContentsExist => "RelatedActiveContentsExist" , BackForwardCacheNotRestoredReason :: HttpStatusNotOk => "HTTPStatusNotOK" , BackForwardCacheNotRestoredReason :: SchemeNotHttpOrHttps => "SchemeNotHTTPOrHTTPS" , BackForwardCacheNotRestoredReason :: Loading => "Loading" , BackForwardCacheNotRestoredReason :: WasGrantedMediaAccess => "WasGrantedMediaAccess" , BackForwardCacheNotRestoredReason :: DisableForRenderFrameHostCalled => "DisableForRenderFrameHostCalled" , BackForwardCacheNotRestoredReason :: DomainNotAllowed => "DomainNotAllowed" , BackForwardCacheNotRestoredReason :: HttpMethodNotGet => "HTTPMethodNotGET" , BackForwardCacheNotRestoredReason :: SubframeIsNavigating => "SubframeIsNavigating" , BackForwardCacheNotRestoredReason :: Timeout => "Timeout" , BackForwardCacheNotRestoredReason :: CacheLimit => "CacheLimit" , BackForwardCacheNotRestoredReason :: JavaScriptExecution => "JavaScriptExecution" , BackForwardCacheNotRestoredReason :: RendererProcessKilled => "RendererProcessKilled" , BackForwardCacheNotRestoredReason :: RendererProcessCrashed => "RendererProcessCrashed" , BackForwardCacheNotRestoredReason :: SchedulerTrackedFeatureUsed => "SchedulerTrackedFeatureUsed" , BackForwardCacheNotRestoredReason :: ConflictingBrowsingInstance => "ConflictingBrowsingInstance" , BackForwardCacheNotRestoredReason :: CacheFlushed => "CacheFlushed" , BackForwardCacheNotRestoredReason :: ServiceWorkerVersionActivation => "ServiceWorkerVersionActivation" , BackForwardCacheNotRestoredReason :: SessionRestored => "SessionRestored" , BackForwardCacheNotRestoredReason :: ServiceWorkerPostMessage => "ServiceWorkerPostMessage" , BackForwardCacheNotRestoredReason :: EnteredBackForwardCacheBeforeServiceWorkerHostAdded => "EnteredBackForwardCacheBeforeServiceWorkerHostAdded" , BackForwardCacheNotRestoredReason :: RenderFrameHostReusedSameSite => "RenderFrameHostReused_SameSite" , BackForwardCacheNotRestoredReason :: RenderFrameHostReusedCrossSite => "RenderFrameHostReused_CrossSite" , BackForwardCacheNotRestoredReason :: ServiceWorkerClaim => "ServiceWorkerClaim" , BackForwardCacheNotRestoredReason :: IgnoreEventAndEvict => "IgnoreEventAndEvict" , BackForwardCacheNotRestoredReason :: HaveInnerContents => "HaveInnerContents" , BackForwardCacheNotRestoredReason :: TimeoutPuttingInCache => "TimeoutPuttingInCache" , BackForwardCacheNotRestoredReason :: BackForwardCacheDisabledByLowMemory => "BackForwardCacheDisabledByLowMemory" , BackForwardCacheNotRestoredReason :: BackForwardCacheDisabledByCommandLine => "BackForwardCacheDisabledByCommandLine" , BackForwardCacheNotRestoredReason :: NetworkRequestDatapipeDrainedAsBytesConsumer => "NetworkRequestDatapipeDrainedAsBytesConsumer" , BackForwardCacheNotRestoredReason :: NetworkRequestRedirected => "NetworkRequestRedirected" , BackForwardCacheNotRestoredReason :: NetworkRequestTimeout => "NetworkRequestTimeout" , BackForwardCacheNotRestoredReason :: NetworkExceedsBufferLimit => "NetworkExceedsBufferLimit" , BackForwardCacheNotRestoredReason :: NavigationCancelledWhileRestoring => "NavigationCancelledWhileRestoring" , BackForwardCacheNotRestoredReason :: NotMostRecentNavigationEntry => "NotMostRecentNavigationEntry" , BackForwardCacheNotRestoredReason :: BackForwardCacheDisabledForPrerender => "BackForwardCacheDisabledForPrerender" , BackForwardCacheNotRestoredReason :: UserAgentOverrideDiffers => "UserAgentOverrideDiffers" , BackForwardCacheNotRestoredReason :: ForegroundCacheLimit => "ForegroundCacheLimit" , BackForwardCacheNotRestoredReason :: BrowsingInstanceNotSwapped => "BrowsingInstanceNotSwapped" , BackForwardCacheNotRestoredReason :: BackForwardCacheDisabledForDelegate => "BackForwardCacheDisabledForDelegate" , BackForwardCacheNotRestoredReason :: UnloadHandlerExistsInMainFrame => "UnloadHandlerExistsInMainFrame" , BackForwardCacheNotRestoredReason :: UnloadHandlerExistsInSubFrame => "UnloadHandlerExistsInSubFrame" , BackForwardCacheNotRestoredReason :: ServiceWorkerUnregistration => "ServiceWorkerUnregistration" , BackForwardCacheNotRestoredReason :: CacheControlNoStore => "CacheControlNoStore" , BackForwardCacheNotRestoredReason :: CacheControlNoStoreCookieModified => "CacheControlNoStoreCookieModified" , BackForwardCacheNotRestoredReason :: CacheControlNoStoreHttpOnlyCookieModified => "CacheControlNoStoreHTTPOnlyCookieModified" , BackForwardCacheNotRestoredReason :: NoResponseHead => "NoResponseHead" , BackForwardCacheNotRestoredReason :: Unknown => "Unknown" , BackForwardCacheNotRestoredReason :: ActivationNavigationsDisallowedForBug1234857 => "ActivationNavigationsDisallowedForBug1234857" , BackForwardCacheNotRestoredReason :: ErrorDocument => "ErrorDocument" , BackForwardCacheNotRestoredReason :: FencedFramesEmbedder => "FencedFramesEmbedder" , BackForwardCacheNotRestoredReason :: CookieDisabled => "CookieDisabled" , BackForwardCacheNotRestoredReason :: HttpAuthRequired => "HTTPAuthRequired" , BackForwardCacheNotRestoredReason :: CookieFlushed => "CookieFlushed" , BackForwardCacheNotRestoredReason :: BroadcastChannelOnMessage => "BroadcastChannelOnMessage" , BackForwardCacheNotRestoredReason :: WebViewSettingsChanged => "WebViewSettingsChanged" , BackForwardCacheNotRestoredReason :: WebViewJavaScriptObjectChanged => "WebViewJavaScriptObjectChanged" , BackForwardCacheNotRestoredReason :: WebViewMessageListenerInjected => "WebViewMessageListenerInjected" , BackForwardCacheNotRestoredReason :: WebViewSafeBrowsingAllowlistChanged => "WebViewSafeBrowsingAllowlistChanged" , BackForwardCacheNotRestoredReason :: WebViewDocumentStartJavascriptChanged => "WebViewDocumentStartJavascriptChanged" , BackForwardCacheNotRestoredReason :: WebSocket => "WebSocket" , BackForwardCacheNotRestoredReason :: WebTransport => "WebTransport" , BackForwardCacheNotRestoredReason :: WebRtc => "WebRTC" , BackForwardCacheNotRestoredReason :: MainResourceHasCacheControlNoStore => "MainResourceHasCacheControlNoStore" , BackForwardCacheNotRestoredReason :: MainResourceHasCacheControlNoCache => "MainResourceHasCacheControlNoCache" , BackForwardCacheNotRestoredReason :: SubresourceHasCacheControlNoStore => "SubresourceHasCacheControlNoStore" , BackForwardCacheNotRestoredReason :: SubresourceHasCacheControlNoCache => "SubresourceHasCacheControlNoCache" , BackForwardCacheNotRestoredReason :: ContainsPlugins => "ContainsPlugins" , BackForwardCacheNotRestoredReason :: DocumentLoaded => "DocumentLoaded" , BackForwardCacheNotRestoredReason :: OutstandingNetworkRequestOthers => "OutstandingNetworkRequestOthers" , BackForwardCacheNotRestoredReason :: RequestedMidiPermission => "RequestedMIDIPermission" , BackForwardCacheNotRestoredReason :: RequestedAudioCapturePermission => "RequestedAudioCapturePermission" , BackForwardCacheNotRestoredReason :: RequestedVideoCapturePermission => "RequestedVideoCapturePermission" , BackForwardCacheNotRestoredReason :: RequestedBackForwardCacheBlockedSensors => "RequestedBackForwardCacheBlockedSensors" , BackForwardCacheNotRestoredReason :: RequestedBackgroundWorkPermission => "RequestedBackgroundWorkPermission" , BackForwardCacheNotRestoredReason :: BroadcastChannel => "BroadcastChannel" , BackForwardCacheNotRestoredReason :: WebXr => "WebXR" , BackForwardCacheNotRestoredReason :: SharedWorker => "SharedWorker" , BackForwardCacheNotRestoredReason :: WebLocks => "WebLocks" , BackForwardCacheNotRestoredReason :: WebHid => "WebHID" , BackForwardCacheNotRestoredReason :: WebShare => "WebShare" , BackForwardCacheNotRestoredReason :: RequestedStorageAccessGrant => "RequestedStorageAccessGrant" , BackForwardCacheNotRestoredReason :: WebNfc => "WebNfc" , BackForwardCacheNotRestoredReason :: OutstandingNetworkRequestFetch => "OutstandingNetworkRequestFetch" , BackForwardCacheNotRestoredReason :: OutstandingNetworkRequestXhr => "OutstandingNetworkRequestXHR" , BackForwardCacheNotRestoredReason :: AppBanner => "AppBanner" , BackForwardCacheNotRestoredReason :: Printing => "Printing" , BackForwardCacheNotRestoredReason :: WebDatabase => "WebDatabase" , BackForwardCacheNotRestoredReason :: PictureInPicture => "PictureInPicture" , BackForwardCacheNotRestoredReason :: SpeechRecognizer => "SpeechRecognizer" , BackForwardCacheNotRestoredReason :: IdleManager => "IdleManager" , BackForwardCacheNotRestoredReason :: PaymentManager => "PaymentManager" , BackForwardCacheNotRestoredReason :: SpeechSynthesis => "SpeechSynthesis" , BackForwardCacheNotRestoredReason :: KeyboardLock => "KeyboardLock" , BackForwardCacheNotRestoredReason :: WebOtpService => "WebOTPService" , BackForwardCacheNotRestoredReason :: OutstandingNetworkRequestDirectSocket => "OutstandingNetworkRequestDirectSocket" , BackForwardCacheNotRestoredReason :: InjectedJavascript => "InjectedJavascript" , BackForwardCacheNotRestoredReason :: InjectedStyleSheet => "InjectedStyleSheet" , BackForwardCacheNotRestoredReason :: KeepaliveRequest => "KeepaliveRequest" , BackForwardCacheNotRestoredReason :: IndexedDbEvent => "IndexedDBEvent" , BackForwardCacheNotRestoredReason :: Dummy => "Dummy" , BackForwardCacheNotRestoredReason :: JsNetworkRequestReceivedCacheControlNoStoreResource => "JsNetworkRequestReceivedCacheControlNoStoreResource" , BackForwardCacheNotRestoredReason :: WebRtcSticky => "WebRTCSticky" , BackForwardCacheNotRestoredReason :: WebTransportSticky => "WebTransportSticky" , BackForwardCacheNotRestoredReason :: WebSocketSticky => "WebSocketSticky" , BackForwardCacheNotRestoredReason :: SmartCard => "SmartCard" , BackForwardCacheNotRestoredReason :: LiveMediaStreamTrack => "LiveMediaStreamTrack" , BackForwardCacheNotRestoredReason :: UnloadHandler => "UnloadHandler" , BackForwardCacheNotRestoredReason :: ParserAborted => "ParserAborted" , BackForwardCacheNotRestoredReason :: ContentSecurityHandler => "ContentSecurityHandler" , BackForwardCacheNotRestoredReason :: ContentWebAuthenticationApi => "ContentWebAuthenticationAPI" , BackForwardCacheNotRestoredReason :: ContentFileChooser => "ContentFileChooser" , BackForwardCacheNotRestoredReason :: ContentSerial => "ContentSerial" , BackForwardCacheNotRestoredReason :: ContentFileSystemAccess => "ContentFileSystemAccess" , BackForwardCacheNotRestoredReason :: ContentMediaDevicesDispatcherHost => "ContentMediaDevicesDispatcherHost" , BackForwardCacheNotRestoredReason :: ContentWebBluetooth => "ContentWebBluetooth" , BackForwardCacheNotRestoredReason :: ContentWebUsb => "ContentWebUSB" , BackForwardCacheNotRestoredReason :: ContentMediaSessionService => "ContentMediaSessionService" , BackForwardCacheNotRestoredReason :: ContentScreenReader => "ContentScreenReader" , BackForwardCacheNotRestoredReason :: EmbedderPopupBlockerTabHelper => "EmbedderPopupBlockerTabHelper" , BackForwardCacheNotRestoredReason :: EmbedderSafeBrowsingTriggeredPopupBlocker => "EmbedderSafeBrowsingTriggeredPopupBlocker" , BackForwardCacheNotRestoredReason :: EmbedderSafeBrowsingThreatDetails => "EmbedderSafeBrowsingThreatDetails" , BackForwardCacheNotRestoredReason :: EmbedderAppBannerManager => "EmbedderAppBannerManager" , BackForwardCacheNotRestoredReason :: EmbedderDomDistillerViewerSource => "EmbedderDomDistillerViewerSource" , BackForwardCacheNotRestoredReason :: EmbedderDomDistillerSelfDeletingRequestDelegate => "EmbedderDomDistillerSelfDeletingRequestDelegate" , BackForwardCacheNotRestoredReason :: EmbedderOomInterventionTabHelper => "EmbedderOomInterventionTabHelper" , BackForwardCacheNotRestoredReason :: EmbedderOfflinePage => "EmbedderOfflinePage" , BackForwardCacheNotRestoredReason :: EmbedderChromePasswordManagerClientBindCredentialManager => "EmbedderChromePasswordManagerClientBindCredentialManager" , BackForwardCacheNotRestoredReason :: EmbedderPermissionRequestManager => "EmbedderPermissionRequestManager" , BackForwardCacheNotRestoredReason :: EmbedderModalDialog => "EmbedderModalDialog" , BackForwardCacheNotRestoredReason :: EmbedderExtensions => "EmbedderExtensions" , BackForwardCacheNotRestoredReason :: EmbedderExtensionMessaging => "EmbedderExtensionMessaging" , BackForwardCacheNotRestoredReason :: EmbedderExtensionMessagingForOpenPort => "EmbedderExtensionMessagingForOpenPort" , BackForwardCacheNotRestoredReason :: EmbedderExtensionSentMessageToCachedFrame => "EmbedderExtensionSentMessageToCachedFrame" , BackForwardCacheNotRestoredReason :: RequestedByWebViewClient => "RequestedByWebViewClient" } + match self { BackForwardCacheNotRestoredReason :: NotPrimaryMainFrame => "NotPrimaryMainFrame" , BackForwardCacheNotRestoredReason :: BackForwardCacheDisabled => "BackForwardCacheDisabled" , BackForwardCacheNotRestoredReason :: RelatedActiveContentsExist => "RelatedActiveContentsExist" , BackForwardCacheNotRestoredReason :: HttpStatusNotOk => "HTTPStatusNotOK" , BackForwardCacheNotRestoredReason :: SchemeNotHttpOrHttps => "SchemeNotHTTPOrHTTPS" , BackForwardCacheNotRestoredReason :: Loading => "Loading" , BackForwardCacheNotRestoredReason :: WasGrantedMediaAccess => "WasGrantedMediaAccess" , BackForwardCacheNotRestoredReason :: DisableForRenderFrameHostCalled => "DisableForRenderFrameHostCalled" , BackForwardCacheNotRestoredReason :: DomainNotAllowed => "DomainNotAllowed" , BackForwardCacheNotRestoredReason :: HttpMethodNotGet => "HTTPMethodNotGET" , BackForwardCacheNotRestoredReason :: SubframeIsNavigating => "SubframeIsNavigating" , BackForwardCacheNotRestoredReason :: Timeout => "Timeout" , BackForwardCacheNotRestoredReason :: CacheLimit => "CacheLimit" , BackForwardCacheNotRestoredReason :: JavaScriptExecution => "JavaScriptExecution" , BackForwardCacheNotRestoredReason :: RendererProcessKilled => "RendererProcessKilled" , BackForwardCacheNotRestoredReason :: RendererProcessCrashed => "RendererProcessCrashed" , BackForwardCacheNotRestoredReason :: SchedulerTrackedFeatureUsed => "SchedulerTrackedFeatureUsed" , BackForwardCacheNotRestoredReason :: ConflictingBrowsingInstance => "ConflictingBrowsingInstance" , BackForwardCacheNotRestoredReason :: CacheFlushed => "CacheFlushed" , BackForwardCacheNotRestoredReason :: ServiceWorkerVersionActivation => "ServiceWorkerVersionActivation" , BackForwardCacheNotRestoredReason :: SessionRestored => "SessionRestored" , BackForwardCacheNotRestoredReason :: ServiceWorkerPostMessage => "ServiceWorkerPostMessage" , BackForwardCacheNotRestoredReason :: EnteredBackForwardCacheBeforeServiceWorkerHostAdded => "EnteredBackForwardCacheBeforeServiceWorkerHostAdded" , BackForwardCacheNotRestoredReason :: RenderFrameHostReusedSameSite => "RenderFrameHostReused_SameSite" , BackForwardCacheNotRestoredReason :: RenderFrameHostReusedCrossSite => "RenderFrameHostReused_CrossSite" , BackForwardCacheNotRestoredReason :: ServiceWorkerClaim => "ServiceWorkerClaim" , BackForwardCacheNotRestoredReason :: IgnoreEventAndEvict => "IgnoreEventAndEvict" , BackForwardCacheNotRestoredReason :: HaveInnerContents => "HaveInnerContents" , BackForwardCacheNotRestoredReason :: TimeoutPuttingInCache => "TimeoutPuttingInCache" , BackForwardCacheNotRestoredReason :: BackForwardCacheDisabledByLowMemory => "BackForwardCacheDisabledByLowMemory" , BackForwardCacheNotRestoredReason :: BackForwardCacheDisabledByCommandLine => "BackForwardCacheDisabledByCommandLine" , BackForwardCacheNotRestoredReason :: NetworkRequestDatapipeDrainedAsBytesConsumer => "NetworkRequestDatapipeDrainedAsBytesConsumer" , BackForwardCacheNotRestoredReason :: NetworkRequestRedirected => "NetworkRequestRedirected" , BackForwardCacheNotRestoredReason :: NetworkRequestTimeout => "NetworkRequestTimeout" , BackForwardCacheNotRestoredReason :: NetworkExceedsBufferLimit => "NetworkExceedsBufferLimit" , BackForwardCacheNotRestoredReason :: NavigationCancelledWhileRestoring => "NavigationCancelledWhileRestoring" , BackForwardCacheNotRestoredReason :: NotMostRecentNavigationEntry => "NotMostRecentNavigationEntry" , BackForwardCacheNotRestoredReason :: BackForwardCacheDisabledForPrerender => "BackForwardCacheDisabledForPrerender" , BackForwardCacheNotRestoredReason :: UserAgentOverrideDiffers => "UserAgentOverrideDiffers" , BackForwardCacheNotRestoredReason :: ForegroundCacheLimit => "ForegroundCacheLimit" , BackForwardCacheNotRestoredReason :: BrowsingInstanceNotSwapped => "BrowsingInstanceNotSwapped" , BackForwardCacheNotRestoredReason :: BackForwardCacheDisabledForDelegate => "BackForwardCacheDisabledForDelegate" , BackForwardCacheNotRestoredReason :: UnloadHandlerExistsInMainFrame => "UnloadHandlerExistsInMainFrame" , BackForwardCacheNotRestoredReason :: UnloadHandlerExistsInSubFrame => "UnloadHandlerExistsInSubFrame" , BackForwardCacheNotRestoredReason :: ServiceWorkerUnregistration => "ServiceWorkerUnregistration" , BackForwardCacheNotRestoredReason :: CacheControlNoStore => "CacheControlNoStore" , BackForwardCacheNotRestoredReason :: CacheControlNoStoreCookieModified => "CacheControlNoStoreCookieModified" , BackForwardCacheNotRestoredReason :: CacheControlNoStoreHttpOnlyCookieModified => "CacheControlNoStoreHTTPOnlyCookieModified" , BackForwardCacheNotRestoredReason :: NoResponseHead => "NoResponseHead" , BackForwardCacheNotRestoredReason :: Unknown => "Unknown" , BackForwardCacheNotRestoredReason :: ActivationNavigationsDisallowedForBug1234857 => "ActivationNavigationsDisallowedForBug1234857" , BackForwardCacheNotRestoredReason :: ErrorDocument => "ErrorDocument" , BackForwardCacheNotRestoredReason :: FencedFramesEmbedder => "FencedFramesEmbedder" , BackForwardCacheNotRestoredReason :: CookieDisabled => "CookieDisabled" , BackForwardCacheNotRestoredReason :: HttpAuthRequired => "HTTPAuthRequired" , BackForwardCacheNotRestoredReason :: CookieFlushed => "CookieFlushed" , BackForwardCacheNotRestoredReason :: BroadcastChannelOnMessage => "BroadcastChannelOnMessage" , BackForwardCacheNotRestoredReason :: WebViewSettingsChanged => "WebViewSettingsChanged" , BackForwardCacheNotRestoredReason :: WebViewJavaScriptObjectChanged => "WebViewJavaScriptObjectChanged" , BackForwardCacheNotRestoredReason :: WebViewMessageListenerInjected => "WebViewMessageListenerInjected" , BackForwardCacheNotRestoredReason :: WebViewSafeBrowsingAllowlistChanged => "WebViewSafeBrowsingAllowlistChanged" , BackForwardCacheNotRestoredReason :: WebViewDocumentStartJavascriptChanged => "WebViewDocumentStartJavascriptChanged" , BackForwardCacheNotRestoredReason :: WebSocket => "WebSocket" , BackForwardCacheNotRestoredReason :: WebTransport => "WebTransport" , BackForwardCacheNotRestoredReason :: WebRtc => "WebRTC" , BackForwardCacheNotRestoredReason :: MainResourceHasCacheControlNoStore => "MainResourceHasCacheControlNoStore" , BackForwardCacheNotRestoredReason :: MainResourceHasCacheControlNoCache => "MainResourceHasCacheControlNoCache" , BackForwardCacheNotRestoredReason :: SubresourceHasCacheControlNoStore => "SubresourceHasCacheControlNoStore" , BackForwardCacheNotRestoredReason :: SubresourceHasCacheControlNoCache => "SubresourceHasCacheControlNoCache" , BackForwardCacheNotRestoredReason :: ContainsPlugins => "ContainsPlugins" , BackForwardCacheNotRestoredReason :: DocumentLoaded => "DocumentLoaded" , BackForwardCacheNotRestoredReason :: OutstandingNetworkRequestOthers => "OutstandingNetworkRequestOthers" , BackForwardCacheNotRestoredReason :: RequestedMidiPermission => "RequestedMIDIPermission" , BackForwardCacheNotRestoredReason :: RequestedAudioCapturePermission => "RequestedAudioCapturePermission" , BackForwardCacheNotRestoredReason :: RequestedVideoCapturePermission => "RequestedVideoCapturePermission" , BackForwardCacheNotRestoredReason :: RequestedBackForwardCacheBlockedSensors => "RequestedBackForwardCacheBlockedSensors" , BackForwardCacheNotRestoredReason :: RequestedBackgroundWorkPermission => "RequestedBackgroundWorkPermission" , BackForwardCacheNotRestoredReason :: BroadcastChannel => "BroadcastChannel" , BackForwardCacheNotRestoredReason :: WebXr => "WebXR" , BackForwardCacheNotRestoredReason :: SharedWorker => "SharedWorker" , BackForwardCacheNotRestoredReason :: WebLocks => "WebLocks" , BackForwardCacheNotRestoredReason :: WebHid => "WebHID" , BackForwardCacheNotRestoredReason :: WebShare => "WebShare" , BackForwardCacheNotRestoredReason :: RequestedStorageAccessGrant => "RequestedStorageAccessGrant" , BackForwardCacheNotRestoredReason :: WebNfc => "WebNfc" , BackForwardCacheNotRestoredReason :: OutstandingNetworkRequestFetch => "OutstandingNetworkRequestFetch" , BackForwardCacheNotRestoredReason :: OutstandingNetworkRequestXhr => "OutstandingNetworkRequestXHR" , BackForwardCacheNotRestoredReason :: AppBanner => "AppBanner" , BackForwardCacheNotRestoredReason :: Printing => "Printing" , BackForwardCacheNotRestoredReason :: WebDatabase => "WebDatabase" , BackForwardCacheNotRestoredReason :: PictureInPicture => "PictureInPicture" , BackForwardCacheNotRestoredReason :: SpeechRecognizer => "SpeechRecognizer" , BackForwardCacheNotRestoredReason :: IdleManager => "IdleManager" , BackForwardCacheNotRestoredReason :: PaymentManager => "PaymentManager" , BackForwardCacheNotRestoredReason :: SpeechSynthesis => "SpeechSynthesis" , BackForwardCacheNotRestoredReason :: KeyboardLock => "KeyboardLock" , BackForwardCacheNotRestoredReason :: WebOtpService => "WebOTPService" , BackForwardCacheNotRestoredReason :: OutstandingNetworkRequestDirectSocket => "OutstandingNetworkRequestDirectSocket" , BackForwardCacheNotRestoredReason :: InjectedJavascript => "InjectedJavascript" , BackForwardCacheNotRestoredReason :: InjectedStyleSheet => "InjectedStyleSheet" , BackForwardCacheNotRestoredReason :: KeepaliveRequest => "KeepaliveRequest" , BackForwardCacheNotRestoredReason :: IndexedDbEvent => "IndexedDBEvent" , BackForwardCacheNotRestoredReason :: Dummy => "Dummy" , BackForwardCacheNotRestoredReason :: JsNetworkRequestReceivedCacheControlNoStoreResource => "JsNetworkRequestReceivedCacheControlNoStoreResource" , BackForwardCacheNotRestoredReason :: WebRtcSticky => "WebRTCSticky" , BackForwardCacheNotRestoredReason :: WebTransportSticky => "WebTransportSticky" , BackForwardCacheNotRestoredReason :: WebSocketSticky => "WebSocketSticky" , BackForwardCacheNotRestoredReason :: SmartCard => "SmartCard" , BackForwardCacheNotRestoredReason :: LiveMediaStreamTrack => "LiveMediaStreamTrack" , BackForwardCacheNotRestoredReason :: UnloadHandler => "UnloadHandler" , BackForwardCacheNotRestoredReason :: ParserAborted => "ParserAborted" , BackForwardCacheNotRestoredReason :: ContentSecurityHandler => "ContentSecurityHandler" , BackForwardCacheNotRestoredReason :: ContentWebAuthenticationApi => "ContentWebAuthenticationAPI" , BackForwardCacheNotRestoredReason :: ContentFileChooser => "ContentFileChooser" , BackForwardCacheNotRestoredReason :: ContentSerial => "ContentSerial" , BackForwardCacheNotRestoredReason :: ContentFileSystemAccess => "ContentFileSystemAccess" , BackForwardCacheNotRestoredReason :: ContentMediaDevicesDispatcherHost => "ContentMediaDevicesDispatcherHost" , BackForwardCacheNotRestoredReason :: ContentWebBluetooth => "ContentWebBluetooth" , BackForwardCacheNotRestoredReason :: ContentWebUsb => "ContentWebUSB" , BackForwardCacheNotRestoredReason :: ContentMediaSessionService => "ContentMediaSessionService" , BackForwardCacheNotRestoredReason :: ContentScreenReader => "ContentScreenReader" , BackForwardCacheNotRestoredReason :: ContentDiscarded => "ContentDiscarded" , BackForwardCacheNotRestoredReason :: EmbedderPopupBlockerTabHelper => "EmbedderPopupBlockerTabHelper" , BackForwardCacheNotRestoredReason :: EmbedderSafeBrowsingTriggeredPopupBlocker => "EmbedderSafeBrowsingTriggeredPopupBlocker" , BackForwardCacheNotRestoredReason :: EmbedderSafeBrowsingThreatDetails => "EmbedderSafeBrowsingThreatDetails" , BackForwardCacheNotRestoredReason :: EmbedderAppBannerManager => "EmbedderAppBannerManager" , BackForwardCacheNotRestoredReason :: EmbedderDomDistillerViewerSource => "EmbedderDomDistillerViewerSource" , BackForwardCacheNotRestoredReason :: EmbedderDomDistillerSelfDeletingRequestDelegate => "EmbedderDomDistillerSelfDeletingRequestDelegate" , BackForwardCacheNotRestoredReason :: EmbedderOomInterventionTabHelper => "EmbedderOomInterventionTabHelper" , BackForwardCacheNotRestoredReason :: EmbedderOfflinePage => "EmbedderOfflinePage" , BackForwardCacheNotRestoredReason :: EmbedderChromePasswordManagerClientBindCredentialManager => "EmbedderChromePasswordManagerClientBindCredentialManager" , BackForwardCacheNotRestoredReason :: EmbedderPermissionRequestManager => "EmbedderPermissionRequestManager" , BackForwardCacheNotRestoredReason :: EmbedderModalDialog => "EmbedderModalDialog" , BackForwardCacheNotRestoredReason :: EmbedderExtensions => "EmbedderExtensions" , BackForwardCacheNotRestoredReason :: EmbedderExtensionMessaging => "EmbedderExtensionMessaging" , BackForwardCacheNotRestoredReason :: EmbedderExtensionMessagingForOpenPort => "EmbedderExtensionMessagingForOpenPort" , BackForwardCacheNotRestoredReason :: EmbedderExtensionSentMessageToCachedFrame => "EmbedderExtensionSentMessageToCachedFrame" , BackForwardCacheNotRestoredReason :: RequestedByWebViewClient => "RequestedByWebViewClient" } } } impl ::std::str::FromStr for BackForwardCacheNotRestoredReason { type Err = String; fn from_str(s: &str) -> Result { - match s { "NotPrimaryMainFrame" | "notprimarymainframe" => Ok (BackForwardCacheNotRestoredReason :: NotPrimaryMainFrame) , "BackForwardCacheDisabled" | "backforwardcachedisabled" => Ok (BackForwardCacheNotRestoredReason :: BackForwardCacheDisabled) , "RelatedActiveContentsExist" | "relatedactivecontentsexist" => Ok (BackForwardCacheNotRestoredReason :: RelatedActiveContentsExist) , "HTTPStatusNotOK" | "HttpStatusNotOk" | "httpstatusnotok" => Ok (BackForwardCacheNotRestoredReason :: HttpStatusNotOk) , "SchemeNotHTTPOrHTTPS" | "SchemeNotHttpOrHttps" | "schemenothttporhttps" => Ok (BackForwardCacheNotRestoredReason :: SchemeNotHttpOrHttps) , "Loading" | "loading" => Ok (BackForwardCacheNotRestoredReason :: Loading) , "WasGrantedMediaAccess" | "wasgrantedmediaaccess" => Ok (BackForwardCacheNotRestoredReason :: WasGrantedMediaAccess) , "DisableForRenderFrameHostCalled" | "disableforrenderframehostcalled" => Ok (BackForwardCacheNotRestoredReason :: DisableForRenderFrameHostCalled) , "DomainNotAllowed" | "domainnotallowed" => Ok (BackForwardCacheNotRestoredReason :: DomainNotAllowed) , "HTTPMethodNotGET" | "HttpMethodNotGet" | "httpmethodnotget" => Ok (BackForwardCacheNotRestoredReason :: HttpMethodNotGet) , "SubframeIsNavigating" | "subframeisnavigating" => Ok (BackForwardCacheNotRestoredReason :: SubframeIsNavigating) , "Timeout" | "timeout" => Ok (BackForwardCacheNotRestoredReason :: Timeout) , "CacheLimit" | "cachelimit" => Ok (BackForwardCacheNotRestoredReason :: CacheLimit) , "JavaScriptExecution" | "javascriptexecution" => Ok (BackForwardCacheNotRestoredReason :: JavaScriptExecution) , "RendererProcessKilled" | "rendererprocesskilled" => Ok (BackForwardCacheNotRestoredReason :: RendererProcessKilled) , "RendererProcessCrashed" | "rendererprocesscrashed" => Ok (BackForwardCacheNotRestoredReason :: RendererProcessCrashed) , "SchedulerTrackedFeatureUsed" | "schedulertrackedfeatureused" => Ok (BackForwardCacheNotRestoredReason :: SchedulerTrackedFeatureUsed) , "ConflictingBrowsingInstance" | "conflictingbrowsinginstance" => Ok (BackForwardCacheNotRestoredReason :: ConflictingBrowsingInstance) , "CacheFlushed" | "cacheflushed" => Ok (BackForwardCacheNotRestoredReason :: CacheFlushed) , "ServiceWorkerVersionActivation" | "serviceworkerversionactivation" => Ok (BackForwardCacheNotRestoredReason :: ServiceWorkerVersionActivation) , "SessionRestored" | "sessionrestored" => Ok (BackForwardCacheNotRestoredReason :: SessionRestored) , "ServiceWorkerPostMessage" | "serviceworkerpostmessage" => Ok (BackForwardCacheNotRestoredReason :: ServiceWorkerPostMessage) , "EnteredBackForwardCacheBeforeServiceWorkerHostAdded" | "enteredbackforwardcachebeforeserviceworkerhostadded" => Ok (BackForwardCacheNotRestoredReason :: EnteredBackForwardCacheBeforeServiceWorkerHostAdded) , "RenderFrameHostReused_SameSite" | "RenderFrameHostReusedSameSite" | "renderframehostreused_samesite" => Ok (BackForwardCacheNotRestoredReason :: RenderFrameHostReusedSameSite) , "RenderFrameHostReused_CrossSite" | "RenderFrameHostReusedCrossSite" | "renderframehostreused_crosssite" => Ok (BackForwardCacheNotRestoredReason :: RenderFrameHostReusedCrossSite) , "ServiceWorkerClaim" | "serviceworkerclaim" => Ok (BackForwardCacheNotRestoredReason :: ServiceWorkerClaim) , "IgnoreEventAndEvict" | "ignoreeventandevict" => Ok (BackForwardCacheNotRestoredReason :: IgnoreEventAndEvict) , "HaveInnerContents" | "haveinnercontents" => Ok (BackForwardCacheNotRestoredReason :: HaveInnerContents) , "TimeoutPuttingInCache" | "timeoutputtingincache" => Ok (BackForwardCacheNotRestoredReason :: TimeoutPuttingInCache) , "BackForwardCacheDisabledByLowMemory" | "backforwardcachedisabledbylowmemory" => Ok (BackForwardCacheNotRestoredReason :: BackForwardCacheDisabledByLowMemory) , "BackForwardCacheDisabledByCommandLine" | "backforwardcachedisabledbycommandline" => Ok (BackForwardCacheNotRestoredReason :: BackForwardCacheDisabledByCommandLine) , "NetworkRequestDatapipeDrainedAsBytesConsumer" | "networkrequestdatapipedrainedasbytesconsumer" => Ok (BackForwardCacheNotRestoredReason :: NetworkRequestDatapipeDrainedAsBytesConsumer) , "NetworkRequestRedirected" | "networkrequestredirected" => Ok (BackForwardCacheNotRestoredReason :: NetworkRequestRedirected) , "NetworkRequestTimeout" | "networkrequesttimeout" => Ok (BackForwardCacheNotRestoredReason :: NetworkRequestTimeout) , "NetworkExceedsBufferLimit" | "networkexceedsbufferlimit" => Ok (BackForwardCacheNotRestoredReason :: NetworkExceedsBufferLimit) , "NavigationCancelledWhileRestoring" | "navigationcancelledwhilerestoring" => Ok (BackForwardCacheNotRestoredReason :: NavigationCancelledWhileRestoring) , "NotMostRecentNavigationEntry" | "notmostrecentnavigationentry" => Ok (BackForwardCacheNotRestoredReason :: NotMostRecentNavigationEntry) , "BackForwardCacheDisabledForPrerender" | "backforwardcachedisabledforprerender" => Ok (BackForwardCacheNotRestoredReason :: BackForwardCacheDisabledForPrerender) , "UserAgentOverrideDiffers" | "useragentoverridediffers" => Ok (BackForwardCacheNotRestoredReason :: UserAgentOverrideDiffers) , "ForegroundCacheLimit" | "foregroundcachelimit" => Ok (BackForwardCacheNotRestoredReason :: ForegroundCacheLimit) , "BrowsingInstanceNotSwapped" | "browsinginstancenotswapped" => Ok (BackForwardCacheNotRestoredReason :: BrowsingInstanceNotSwapped) , "BackForwardCacheDisabledForDelegate" | "backforwardcachedisabledfordelegate" => Ok (BackForwardCacheNotRestoredReason :: BackForwardCacheDisabledForDelegate) , "UnloadHandlerExistsInMainFrame" | "unloadhandlerexistsinmainframe" => Ok (BackForwardCacheNotRestoredReason :: UnloadHandlerExistsInMainFrame) , "UnloadHandlerExistsInSubFrame" | "unloadhandlerexistsinsubframe" => Ok (BackForwardCacheNotRestoredReason :: UnloadHandlerExistsInSubFrame) , "ServiceWorkerUnregistration" | "serviceworkerunregistration" => Ok (BackForwardCacheNotRestoredReason :: ServiceWorkerUnregistration) , "CacheControlNoStore" | "cachecontrolnostore" => Ok (BackForwardCacheNotRestoredReason :: CacheControlNoStore) , "CacheControlNoStoreCookieModified" | "cachecontrolnostorecookiemodified" => Ok (BackForwardCacheNotRestoredReason :: CacheControlNoStoreCookieModified) , "CacheControlNoStoreHTTPOnlyCookieModified" | "CacheControlNoStoreHttpOnlyCookieModified" | "cachecontrolnostorehttponlycookiemodified" => Ok (BackForwardCacheNotRestoredReason :: CacheControlNoStoreHttpOnlyCookieModified) , "NoResponseHead" | "noresponsehead" => Ok (BackForwardCacheNotRestoredReason :: NoResponseHead) , "Unknown" | "unknown" => Ok (BackForwardCacheNotRestoredReason :: Unknown) , "ActivationNavigationsDisallowedForBug1234857" | "activationnavigationsdisallowedforbug1234857" => Ok (BackForwardCacheNotRestoredReason :: ActivationNavigationsDisallowedForBug1234857) , "ErrorDocument" | "errordocument" => Ok (BackForwardCacheNotRestoredReason :: ErrorDocument) , "FencedFramesEmbedder" | "fencedframesembedder" => Ok (BackForwardCacheNotRestoredReason :: FencedFramesEmbedder) , "CookieDisabled" | "cookiedisabled" => Ok (BackForwardCacheNotRestoredReason :: CookieDisabled) , "HTTPAuthRequired" | "HttpAuthRequired" | "httpauthrequired" => Ok (BackForwardCacheNotRestoredReason :: HttpAuthRequired) , "CookieFlushed" | "cookieflushed" => Ok (BackForwardCacheNotRestoredReason :: CookieFlushed) , "BroadcastChannelOnMessage" | "broadcastchannelonmessage" => Ok (BackForwardCacheNotRestoredReason :: BroadcastChannelOnMessage) , "WebViewSettingsChanged" | "webviewsettingschanged" => Ok (BackForwardCacheNotRestoredReason :: WebViewSettingsChanged) , "WebViewJavaScriptObjectChanged" | "webviewjavascriptobjectchanged" => Ok (BackForwardCacheNotRestoredReason :: WebViewJavaScriptObjectChanged) , "WebViewMessageListenerInjected" | "webviewmessagelistenerinjected" => Ok (BackForwardCacheNotRestoredReason :: WebViewMessageListenerInjected) , "WebViewSafeBrowsingAllowlistChanged" | "webviewsafebrowsingallowlistchanged" => Ok (BackForwardCacheNotRestoredReason :: WebViewSafeBrowsingAllowlistChanged) , "WebViewDocumentStartJavascriptChanged" | "webviewdocumentstartjavascriptchanged" => Ok (BackForwardCacheNotRestoredReason :: WebViewDocumentStartJavascriptChanged) , "WebSocket" | "websocket" => Ok (BackForwardCacheNotRestoredReason :: WebSocket) , "WebTransport" | "webtransport" => Ok (BackForwardCacheNotRestoredReason :: WebTransport) , "WebRTC" | "WebRtc" | "webrtc" => Ok (BackForwardCacheNotRestoredReason :: WebRtc) , "MainResourceHasCacheControlNoStore" | "mainresourcehascachecontrolnostore" => Ok (BackForwardCacheNotRestoredReason :: MainResourceHasCacheControlNoStore) , "MainResourceHasCacheControlNoCache" | "mainresourcehascachecontrolnocache" => Ok (BackForwardCacheNotRestoredReason :: MainResourceHasCacheControlNoCache) , "SubresourceHasCacheControlNoStore" | "subresourcehascachecontrolnostore" => Ok (BackForwardCacheNotRestoredReason :: SubresourceHasCacheControlNoStore) , "SubresourceHasCacheControlNoCache" | "subresourcehascachecontrolnocache" => Ok (BackForwardCacheNotRestoredReason :: SubresourceHasCacheControlNoCache) , "ContainsPlugins" | "containsplugins" => Ok (BackForwardCacheNotRestoredReason :: ContainsPlugins) , "DocumentLoaded" | "documentloaded" => Ok (BackForwardCacheNotRestoredReason :: DocumentLoaded) , "OutstandingNetworkRequestOthers" | "outstandingnetworkrequestothers" => Ok (BackForwardCacheNotRestoredReason :: OutstandingNetworkRequestOthers) , "RequestedMIDIPermission" | "RequestedMidiPermission" | "requestedmidipermission" => Ok (BackForwardCacheNotRestoredReason :: RequestedMidiPermission) , "RequestedAudioCapturePermission" | "requestedaudiocapturepermission" => Ok (BackForwardCacheNotRestoredReason :: RequestedAudioCapturePermission) , "RequestedVideoCapturePermission" | "requestedvideocapturepermission" => Ok (BackForwardCacheNotRestoredReason :: RequestedVideoCapturePermission) , "RequestedBackForwardCacheBlockedSensors" | "requestedbackforwardcacheblockedsensors" => Ok (BackForwardCacheNotRestoredReason :: RequestedBackForwardCacheBlockedSensors) , "RequestedBackgroundWorkPermission" | "requestedbackgroundworkpermission" => Ok (BackForwardCacheNotRestoredReason :: RequestedBackgroundWorkPermission) , "BroadcastChannel" | "broadcastchannel" => Ok (BackForwardCacheNotRestoredReason :: BroadcastChannel) , "WebXR" | "WebXr" | "webxr" => Ok (BackForwardCacheNotRestoredReason :: WebXr) , "SharedWorker" | "sharedworker" => Ok (BackForwardCacheNotRestoredReason :: SharedWorker) , "WebLocks" | "weblocks" => Ok (BackForwardCacheNotRestoredReason :: WebLocks) , "WebHID" | "WebHid" | "webhid" => Ok (BackForwardCacheNotRestoredReason :: WebHid) , "WebShare" | "webshare" => Ok (BackForwardCacheNotRestoredReason :: WebShare) , "RequestedStorageAccessGrant" | "requestedstorageaccessgrant" => Ok (BackForwardCacheNotRestoredReason :: RequestedStorageAccessGrant) , "WebNfc" | "webnfc" => Ok (BackForwardCacheNotRestoredReason :: WebNfc) , "OutstandingNetworkRequestFetch" | "outstandingnetworkrequestfetch" => Ok (BackForwardCacheNotRestoredReason :: OutstandingNetworkRequestFetch) , "OutstandingNetworkRequestXHR" | "OutstandingNetworkRequestXhr" | "outstandingnetworkrequestxhr" => Ok (BackForwardCacheNotRestoredReason :: OutstandingNetworkRequestXhr) , "AppBanner" | "appbanner" => Ok (BackForwardCacheNotRestoredReason :: AppBanner) , "Printing" | "printing" => Ok (BackForwardCacheNotRestoredReason :: Printing) , "WebDatabase" | "webdatabase" => Ok (BackForwardCacheNotRestoredReason :: WebDatabase) , "PictureInPicture" | "pictureinpicture" => Ok (BackForwardCacheNotRestoredReason :: PictureInPicture) , "SpeechRecognizer" | "speechrecognizer" => Ok (BackForwardCacheNotRestoredReason :: SpeechRecognizer) , "IdleManager" | "idlemanager" => Ok (BackForwardCacheNotRestoredReason :: IdleManager) , "PaymentManager" | "paymentmanager" => Ok (BackForwardCacheNotRestoredReason :: PaymentManager) , "SpeechSynthesis" | "speechsynthesis" => Ok (BackForwardCacheNotRestoredReason :: SpeechSynthesis) , "KeyboardLock" | "keyboardlock" => Ok (BackForwardCacheNotRestoredReason :: KeyboardLock) , "WebOTPService" | "WebOtpService" | "webotpservice" => Ok (BackForwardCacheNotRestoredReason :: WebOtpService) , "OutstandingNetworkRequestDirectSocket" | "outstandingnetworkrequestdirectsocket" => Ok (BackForwardCacheNotRestoredReason :: OutstandingNetworkRequestDirectSocket) , "InjectedJavascript" | "injectedjavascript" => Ok (BackForwardCacheNotRestoredReason :: InjectedJavascript) , "InjectedStyleSheet" | "injectedstylesheet" => Ok (BackForwardCacheNotRestoredReason :: InjectedStyleSheet) , "KeepaliveRequest" | "keepaliverequest" => Ok (BackForwardCacheNotRestoredReason :: KeepaliveRequest) , "IndexedDBEvent" | "IndexedDbEvent" | "indexeddbevent" => Ok (BackForwardCacheNotRestoredReason :: IndexedDbEvent) , "Dummy" | "dummy" => Ok (BackForwardCacheNotRestoredReason :: Dummy) , "JsNetworkRequestReceivedCacheControlNoStoreResource" | "jsnetworkrequestreceivedcachecontrolnostoreresource" => Ok (BackForwardCacheNotRestoredReason :: JsNetworkRequestReceivedCacheControlNoStoreResource) , "WebRTCSticky" | "WebRtcSticky" | "webrtcsticky" => Ok (BackForwardCacheNotRestoredReason :: WebRtcSticky) , "WebTransportSticky" | "webtransportsticky" => Ok (BackForwardCacheNotRestoredReason :: WebTransportSticky) , "WebSocketSticky" | "websocketsticky" => Ok (BackForwardCacheNotRestoredReason :: WebSocketSticky) , "SmartCard" | "smartcard" => Ok (BackForwardCacheNotRestoredReason :: SmartCard) , "LiveMediaStreamTrack" | "livemediastreamtrack" => Ok (BackForwardCacheNotRestoredReason :: LiveMediaStreamTrack) , "UnloadHandler" | "unloadhandler" => Ok (BackForwardCacheNotRestoredReason :: UnloadHandler) , "ParserAborted" | "parseraborted" => Ok (BackForwardCacheNotRestoredReason :: ParserAborted) , "ContentSecurityHandler" | "contentsecurityhandler" => Ok (BackForwardCacheNotRestoredReason :: ContentSecurityHandler) , "ContentWebAuthenticationAPI" | "ContentWebAuthenticationApi" | "contentwebauthenticationapi" => Ok (BackForwardCacheNotRestoredReason :: ContentWebAuthenticationApi) , "ContentFileChooser" | "contentfilechooser" => Ok (BackForwardCacheNotRestoredReason :: ContentFileChooser) , "ContentSerial" | "contentserial" => Ok (BackForwardCacheNotRestoredReason :: ContentSerial) , "ContentFileSystemAccess" | "contentfilesystemaccess" => Ok (BackForwardCacheNotRestoredReason :: ContentFileSystemAccess) , "ContentMediaDevicesDispatcherHost" | "contentmediadevicesdispatcherhost" => Ok (BackForwardCacheNotRestoredReason :: ContentMediaDevicesDispatcherHost) , "ContentWebBluetooth" | "contentwebbluetooth" => Ok (BackForwardCacheNotRestoredReason :: ContentWebBluetooth) , "ContentWebUSB" | "ContentWebUsb" | "contentwebusb" => Ok (BackForwardCacheNotRestoredReason :: ContentWebUsb) , "ContentMediaSessionService" | "contentmediasessionservice" => Ok (BackForwardCacheNotRestoredReason :: ContentMediaSessionService) , "ContentScreenReader" | "contentscreenreader" => Ok (BackForwardCacheNotRestoredReason :: ContentScreenReader) , "EmbedderPopupBlockerTabHelper" | "embedderpopupblockertabhelper" => Ok (BackForwardCacheNotRestoredReason :: EmbedderPopupBlockerTabHelper) , "EmbedderSafeBrowsingTriggeredPopupBlocker" | "embeddersafebrowsingtriggeredpopupblocker" => Ok (BackForwardCacheNotRestoredReason :: EmbedderSafeBrowsingTriggeredPopupBlocker) , "EmbedderSafeBrowsingThreatDetails" | "embeddersafebrowsingthreatdetails" => Ok (BackForwardCacheNotRestoredReason :: EmbedderSafeBrowsingThreatDetails) , "EmbedderAppBannerManager" | "embedderappbannermanager" => Ok (BackForwardCacheNotRestoredReason :: EmbedderAppBannerManager) , "EmbedderDomDistillerViewerSource" | "embedderdomdistillerviewersource" => Ok (BackForwardCacheNotRestoredReason :: EmbedderDomDistillerViewerSource) , "EmbedderDomDistillerSelfDeletingRequestDelegate" | "embedderdomdistillerselfdeletingrequestdelegate" => Ok (BackForwardCacheNotRestoredReason :: EmbedderDomDistillerSelfDeletingRequestDelegate) , "EmbedderOomInterventionTabHelper" | "embedderoominterventiontabhelper" => Ok (BackForwardCacheNotRestoredReason :: EmbedderOomInterventionTabHelper) , "EmbedderOfflinePage" | "embedderofflinepage" => Ok (BackForwardCacheNotRestoredReason :: EmbedderOfflinePage) , "EmbedderChromePasswordManagerClientBindCredentialManager" | "embedderchromepasswordmanagerclientbindcredentialmanager" => Ok (BackForwardCacheNotRestoredReason :: EmbedderChromePasswordManagerClientBindCredentialManager) , "EmbedderPermissionRequestManager" | "embedderpermissionrequestmanager" => Ok (BackForwardCacheNotRestoredReason :: EmbedderPermissionRequestManager) , "EmbedderModalDialog" | "embeddermodaldialog" => Ok (BackForwardCacheNotRestoredReason :: EmbedderModalDialog) , "EmbedderExtensions" | "embedderextensions" => Ok (BackForwardCacheNotRestoredReason :: EmbedderExtensions) , "EmbedderExtensionMessaging" | "embedderextensionmessaging" => Ok (BackForwardCacheNotRestoredReason :: EmbedderExtensionMessaging) , "EmbedderExtensionMessagingForOpenPort" | "embedderextensionmessagingforopenport" => Ok (BackForwardCacheNotRestoredReason :: EmbedderExtensionMessagingForOpenPort) , "EmbedderExtensionSentMessageToCachedFrame" | "embedderextensionsentmessagetocachedframe" => Ok (BackForwardCacheNotRestoredReason :: EmbedderExtensionSentMessageToCachedFrame) , "RequestedByWebViewClient" | "requestedbywebviewclient" => Ok (BackForwardCacheNotRestoredReason :: RequestedByWebViewClient) , _ => Err (s . to_string ()) } + match s { "NotPrimaryMainFrame" | "notprimarymainframe" => Ok (BackForwardCacheNotRestoredReason :: NotPrimaryMainFrame) , "BackForwardCacheDisabled" | "backforwardcachedisabled" => Ok (BackForwardCacheNotRestoredReason :: BackForwardCacheDisabled) , "RelatedActiveContentsExist" | "relatedactivecontentsexist" => Ok (BackForwardCacheNotRestoredReason :: RelatedActiveContentsExist) , "HTTPStatusNotOK" | "HttpStatusNotOk" | "httpstatusnotok" => Ok (BackForwardCacheNotRestoredReason :: HttpStatusNotOk) , "SchemeNotHTTPOrHTTPS" | "SchemeNotHttpOrHttps" | "schemenothttporhttps" => Ok (BackForwardCacheNotRestoredReason :: SchemeNotHttpOrHttps) , "Loading" | "loading" => Ok (BackForwardCacheNotRestoredReason :: Loading) , "WasGrantedMediaAccess" | "wasgrantedmediaaccess" => Ok (BackForwardCacheNotRestoredReason :: WasGrantedMediaAccess) , "DisableForRenderFrameHostCalled" | "disableforrenderframehostcalled" => Ok (BackForwardCacheNotRestoredReason :: DisableForRenderFrameHostCalled) , "DomainNotAllowed" | "domainnotallowed" => Ok (BackForwardCacheNotRestoredReason :: DomainNotAllowed) , "HTTPMethodNotGET" | "HttpMethodNotGet" | "httpmethodnotget" => Ok (BackForwardCacheNotRestoredReason :: HttpMethodNotGet) , "SubframeIsNavigating" | "subframeisnavigating" => Ok (BackForwardCacheNotRestoredReason :: SubframeIsNavigating) , "Timeout" | "timeout" => Ok (BackForwardCacheNotRestoredReason :: Timeout) , "CacheLimit" | "cachelimit" => Ok (BackForwardCacheNotRestoredReason :: CacheLimit) , "JavaScriptExecution" | "javascriptexecution" => Ok (BackForwardCacheNotRestoredReason :: JavaScriptExecution) , "RendererProcessKilled" | "rendererprocesskilled" => Ok (BackForwardCacheNotRestoredReason :: RendererProcessKilled) , "RendererProcessCrashed" | "rendererprocesscrashed" => Ok (BackForwardCacheNotRestoredReason :: RendererProcessCrashed) , "SchedulerTrackedFeatureUsed" | "schedulertrackedfeatureused" => Ok (BackForwardCacheNotRestoredReason :: SchedulerTrackedFeatureUsed) , "ConflictingBrowsingInstance" | "conflictingbrowsinginstance" => Ok (BackForwardCacheNotRestoredReason :: ConflictingBrowsingInstance) , "CacheFlushed" | "cacheflushed" => Ok (BackForwardCacheNotRestoredReason :: CacheFlushed) , "ServiceWorkerVersionActivation" | "serviceworkerversionactivation" => Ok (BackForwardCacheNotRestoredReason :: ServiceWorkerVersionActivation) , "SessionRestored" | "sessionrestored" => Ok (BackForwardCacheNotRestoredReason :: SessionRestored) , "ServiceWorkerPostMessage" | "serviceworkerpostmessage" => Ok (BackForwardCacheNotRestoredReason :: ServiceWorkerPostMessage) , "EnteredBackForwardCacheBeforeServiceWorkerHostAdded" | "enteredbackforwardcachebeforeserviceworkerhostadded" => Ok (BackForwardCacheNotRestoredReason :: EnteredBackForwardCacheBeforeServiceWorkerHostAdded) , "RenderFrameHostReused_SameSite" | "RenderFrameHostReusedSameSite" | "renderframehostreused_samesite" => Ok (BackForwardCacheNotRestoredReason :: RenderFrameHostReusedSameSite) , "RenderFrameHostReused_CrossSite" | "RenderFrameHostReusedCrossSite" | "renderframehostreused_crosssite" => Ok (BackForwardCacheNotRestoredReason :: RenderFrameHostReusedCrossSite) , "ServiceWorkerClaim" | "serviceworkerclaim" => Ok (BackForwardCacheNotRestoredReason :: ServiceWorkerClaim) , "IgnoreEventAndEvict" | "ignoreeventandevict" => Ok (BackForwardCacheNotRestoredReason :: IgnoreEventAndEvict) , "HaveInnerContents" | "haveinnercontents" => Ok (BackForwardCacheNotRestoredReason :: HaveInnerContents) , "TimeoutPuttingInCache" | "timeoutputtingincache" => Ok (BackForwardCacheNotRestoredReason :: TimeoutPuttingInCache) , "BackForwardCacheDisabledByLowMemory" | "backforwardcachedisabledbylowmemory" => Ok (BackForwardCacheNotRestoredReason :: BackForwardCacheDisabledByLowMemory) , "BackForwardCacheDisabledByCommandLine" | "backforwardcachedisabledbycommandline" => Ok (BackForwardCacheNotRestoredReason :: BackForwardCacheDisabledByCommandLine) , "NetworkRequestDatapipeDrainedAsBytesConsumer" | "networkrequestdatapipedrainedasbytesconsumer" => Ok (BackForwardCacheNotRestoredReason :: NetworkRequestDatapipeDrainedAsBytesConsumer) , "NetworkRequestRedirected" | "networkrequestredirected" => Ok (BackForwardCacheNotRestoredReason :: NetworkRequestRedirected) , "NetworkRequestTimeout" | "networkrequesttimeout" => Ok (BackForwardCacheNotRestoredReason :: NetworkRequestTimeout) , "NetworkExceedsBufferLimit" | "networkexceedsbufferlimit" => Ok (BackForwardCacheNotRestoredReason :: NetworkExceedsBufferLimit) , "NavigationCancelledWhileRestoring" | "navigationcancelledwhilerestoring" => Ok (BackForwardCacheNotRestoredReason :: NavigationCancelledWhileRestoring) , "NotMostRecentNavigationEntry" | "notmostrecentnavigationentry" => Ok (BackForwardCacheNotRestoredReason :: NotMostRecentNavigationEntry) , "BackForwardCacheDisabledForPrerender" | "backforwardcachedisabledforprerender" => Ok (BackForwardCacheNotRestoredReason :: BackForwardCacheDisabledForPrerender) , "UserAgentOverrideDiffers" | "useragentoverridediffers" => Ok (BackForwardCacheNotRestoredReason :: UserAgentOverrideDiffers) , "ForegroundCacheLimit" | "foregroundcachelimit" => Ok (BackForwardCacheNotRestoredReason :: ForegroundCacheLimit) , "BrowsingInstanceNotSwapped" | "browsinginstancenotswapped" => Ok (BackForwardCacheNotRestoredReason :: BrowsingInstanceNotSwapped) , "BackForwardCacheDisabledForDelegate" | "backforwardcachedisabledfordelegate" => Ok (BackForwardCacheNotRestoredReason :: BackForwardCacheDisabledForDelegate) , "UnloadHandlerExistsInMainFrame" | "unloadhandlerexistsinmainframe" => Ok (BackForwardCacheNotRestoredReason :: UnloadHandlerExistsInMainFrame) , "UnloadHandlerExistsInSubFrame" | "unloadhandlerexistsinsubframe" => Ok (BackForwardCacheNotRestoredReason :: UnloadHandlerExistsInSubFrame) , "ServiceWorkerUnregistration" | "serviceworkerunregistration" => Ok (BackForwardCacheNotRestoredReason :: ServiceWorkerUnregistration) , "CacheControlNoStore" | "cachecontrolnostore" => Ok (BackForwardCacheNotRestoredReason :: CacheControlNoStore) , "CacheControlNoStoreCookieModified" | "cachecontrolnostorecookiemodified" => Ok (BackForwardCacheNotRestoredReason :: CacheControlNoStoreCookieModified) , "CacheControlNoStoreHTTPOnlyCookieModified" | "CacheControlNoStoreHttpOnlyCookieModified" | "cachecontrolnostorehttponlycookiemodified" => Ok (BackForwardCacheNotRestoredReason :: CacheControlNoStoreHttpOnlyCookieModified) , "NoResponseHead" | "noresponsehead" => Ok (BackForwardCacheNotRestoredReason :: NoResponseHead) , "Unknown" | "unknown" => Ok (BackForwardCacheNotRestoredReason :: Unknown) , "ActivationNavigationsDisallowedForBug1234857" | "activationnavigationsdisallowedforbug1234857" => Ok (BackForwardCacheNotRestoredReason :: ActivationNavigationsDisallowedForBug1234857) , "ErrorDocument" | "errordocument" => Ok (BackForwardCacheNotRestoredReason :: ErrorDocument) , "FencedFramesEmbedder" | "fencedframesembedder" => Ok (BackForwardCacheNotRestoredReason :: FencedFramesEmbedder) , "CookieDisabled" | "cookiedisabled" => Ok (BackForwardCacheNotRestoredReason :: CookieDisabled) , "HTTPAuthRequired" | "HttpAuthRequired" | "httpauthrequired" => Ok (BackForwardCacheNotRestoredReason :: HttpAuthRequired) , "CookieFlushed" | "cookieflushed" => Ok (BackForwardCacheNotRestoredReason :: CookieFlushed) , "BroadcastChannelOnMessage" | "broadcastchannelonmessage" => Ok (BackForwardCacheNotRestoredReason :: BroadcastChannelOnMessage) , "WebViewSettingsChanged" | "webviewsettingschanged" => Ok (BackForwardCacheNotRestoredReason :: WebViewSettingsChanged) , "WebViewJavaScriptObjectChanged" | "webviewjavascriptobjectchanged" => Ok (BackForwardCacheNotRestoredReason :: WebViewJavaScriptObjectChanged) , "WebViewMessageListenerInjected" | "webviewmessagelistenerinjected" => Ok (BackForwardCacheNotRestoredReason :: WebViewMessageListenerInjected) , "WebViewSafeBrowsingAllowlistChanged" | "webviewsafebrowsingallowlistchanged" => Ok (BackForwardCacheNotRestoredReason :: WebViewSafeBrowsingAllowlistChanged) , "WebViewDocumentStartJavascriptChanged" | "webviewdocumentstartjavascriptchanged" => Ok (BackForwardCacheNotRestoredReason :: WebViewDocumentStartJavascriptChanged) , "WebSocket" | "websocket" => Ok (BackForwardCacheNotRestoredReason :: WebSocket) , "WebTransport" | "webtransport" => Ok (BackForwardCacheNotRestoredReason :: WebTransport) , "WebRTC" | "WebRtc" | "webrtc" => Ok (BackForwardCacheNotRestoredReason :: WebRtc) , "MainResourceHasCacheControlNoStore" | "mainresourcehascachecontrolnostore" => Ok (BackForwardCacheNotRestoredReason :: MainResourceHasCacheControlNoStore) , "MainResourceHasCacheControlNoCache" | "mainresourcehascachecontrolnocache" => Ok (BackForwardCacheNotRestoredReason :: MainResourceHasCacheControlNoCache) , "SubresourceHasCacheControlNoStore" | "subresourcehascachecontrolnostore" => Ok (BackForwardCacheNotRestoredReason :: SubresourceHasCacheControlNoStore) , "SubresourceHasCacheControlNoCache" | "subresourcehascachecontrolnocache" => Ok (BackForwardCacheNotRestoredReason :: SubresourceHasCacheControlNoCache) , "ContainsPlugins" | "containsplugins" => Ok (BackForwardCacheNotRestoredReason :: ContainsPlugins) , "DocumentLoaded" | "documentloaded" => Ok (BackForwardCacheNotRestoredReason :: DocumentLoaded) , "OutstandingNetworkRequestOthers" | "outstandingnetworkrequestothers" => Ok (BackForwardCacheNotRestoredReason :: OutstandingNetworkRequestOthers) , "RequestedMIDIPermission" | "RequestedMidiPermission" | "requestedmidipermission" => Ok (BackForwardCacheNotRestoredReason :: RequestedMidiPermission) , "RequestedAudioCapturePermission" | "requestedaudiocapturepermission" => Ok (BackForwardCacheNotRestoredReason :: RequestedAudioCapturePermission) , "RequestedVideoCapturePermission" | "requestedvideocapturepermission" => Ok (BackForwardCacheNotRestoredReason :: RequestedVideoCapturePermission) , "RequestedBackForwardCacheBlockedSensors" | "requestedbackforwardcacheblockedsensors" => Ok (BackForwardCacheNotRestoredReason :: RequestedBackForwardCacheBlockedSensors) , "RequestedBackgroundWorkPermission" | "requestedbackgroundworkpermission" => Ok (BackForwardCacheNotRestoredReason :: RequestedBackgroundWorkPermission) , "BroadcastChannel" | "broadcastchannel" => Ok (BackForwardCacheNotRestoredReason :: BroadcastChannel) , "WebXR" | "WebXr" | "webxr" => Ok (BackForwardCacheNotRestoredReason :: WebXr) , "SharedWorker" | "sharedworker" => Ok (BackForwardCacheNotRestoredReason :: SharedWorker) , "WebLocks" | "weblocks" => Ok (BackForwardCacheNotRestoredReason :: WebLocks) , "WebHID" | "WebHid" | "webhid" => Ok (BackForwardCacheNotRestoredReason :: WebHid) , "WebShare" | "webshare" => Ok (BackForwardCacheNotRestoredReason :: WebShare) , "RequestedStorageAccessGrant" | "requestedstorageaccessgrant" => Ok (BackForwardCacheNotRestoredReason :: RequestedStorageAccessGrant) , "WebNfc" | "webnfc" => Ok (BackForwardCacheNotRestoredReason :: WebNfc) , "OutstandingNetworkRequestFetch" | "outstandingnetworkrequestfetch" => Ok (BackForwardCacheNotRestoredReason :: OutstandingNetworkRequestFetch) , "OutstandingNetworkRequestXHR" | "OutstandingNetworkRequestXhr" | "outstandingnetworkrequestxhr" => Ok (BackForwardCacheNotRestoredReason :: OutstandingNetworkRequestXhr) , "AppBanner" | "appbanner" => Ok (BackForwardCacheNotRestoredReason :: AppBanner) , "Printing" | "printing" => Ok (BackForwardCacheNotRestoredReason :: Printing) , "WebDatabase" | "webdatabase" => Ok (BackForwardCacheNotRestoredReason :: WebDatabase) , "PictureInPicture" | "pictureinpicture" => Ok (BackForwardCacheNotRestoredReason :: PictureInPicture) , "SpeechRecognizer" | "speechrecognizer" => Ok (BackForwardCacheNotRestoredReason :: SpeechRecognizer) , "IdleManager" | "idlemanager" => Ok (BackForwardCacheNotRestoredReason :: IdleManager) , "PaymentManager" | "paymentmanager" => Ok (BackForwardCacheNotRestoredReason :: PaymentManager) , "SpeechSynthesis" | "speechsynthesis" => Ok (BackForwardCacheNotRestoredReason :: SpeechSynthesis) , "KeyboardLock" | "keyboardlock" => Ok (BackForwardCacheNotRestoredReason :: KeyboardLock) , "WebOTPService" | "WebOtpService" | "webotpservice" => Ok (BackForwardCacheNotRestoredReason :: WebOtpService) , "OutstandingNetworkRequestDirectSocket" | "outstandingnetworkrequestdirectsocket" => Ok (BackForwardCacheNotRestoredReason :: OutstandingNetworkRequestDirectSocket) , "InjectedJavascript" | "injectedjavascript" => Ok (BackForwardCacheNotRestoredReason :: InjectedJavascript) , "InjectedStyleSheet" | "injectedstylesheet" => Ok (BackForwardCacheNotRestoredReason :: InjectedStyleSheet) , "KeepaliveRequest" | "keepaliverequest" => Ok (BackForwardCacheNotRestoredReason :: KeepaliveRequest) , "IndexedDBEvent" | "IndexedDbEvent" | "indexeddbevent" => Ok (BackForwardCacheNotRestoredReason :: IndexedDbEvent) , "Dummy" | "dummy" => Ok (BackForwardCacheNotRestoredReason :: Dummy) , "JsNetworkRequestReceivedCacheControlNoStoreResource" | "jsnetworkrequestreceivedcachecontrolnostoreresource" => Ok (BackForwardCacheNotRestoredReason :: JsNetworkRequestReceivedCacheControlNoStoreResource) , "WebRTCSticky" | "WebRtcSticky" | "webrtcsticky" => Ok (BackForwardCacheNotRestoredReason :: WebRtcSticky) , "WebTransportSticky" | "webtransportsticky" => Ok (BackForwardCacheNotRestoredReason :: WebTransportSticky) , "WebSocketSticky" | "websocketsticky" => Ok (BackForwardCacheNotRestoredReason :: WebSocketSticky) , "SmartCard" | "smartcard" => Ok (BackForwardCacheNotRestoredReason :: SmartCard) , "LiveMediaStreamTrack" | "livemediastreamtrack" => Ok (BackForwardCacheNotRestoredReason :: LiveMediaStreamTrack) , "UnloadHandler" | "unloadhandler" => Ok (BackForwardCacheNotRestoredReason :: UnloadHandler) , "ParserAborted" | "parseraborted" => Ok (BackForwardCacheNotRestoredReason :: ParserAborted) , "ContentSecurityHandler" | "contentsecurityhandler" => Ok (BackForwardCacheNotRestoredReason :: ContentSecurityHandler) , "ContentWebAuthenticationAPI" | "ContentWebAuthenticationApi" | "contentwebauthenticationapi" => Ok (BackForwardCacheNotRestoredReason :: ContentWebAuthenticationApi) , "ContentFileChooser" | "contentfilechooser" => Ok (BackForwardCacheNotRestoredReason :: ContentFileChooser) , "ContentSerial" | "contentserial" => Ok (BackForwardCacheNotRestoredReason :: ContentSerial) , "ContentFileSystemAccess" | "contentfilesystemaccess" => Ok (BackForwardCacheNotRestoredReason :: ContentFileSystemAccess) , "ContentMediaDevicesDispatcherHost" | "contentmediadevicesdispatcherhost" => Ok (BackForwardCacheNotRestoredReason :: ContentMediaDevicesDispatcherHost) , "ContentWebBluetooth" | "contentwebbluetooth" => Ok (BackForwardCacheNotRestoredReason :: ContentWebBluetooth) , "ContentWebUSB" | "ContentWebUsb" | "contentwebusb" => Ok (BackForwardCacheNotRestoredReason :: ContentWebUsb) , "ContentMediaSessionService" | "contentmediasessionservice" => Ok (BackForwardCacheNotRestoredReason :: ContentMediaSessionService) , "ContentScreenReader" | "contentscreenreader" => Ok (BackForwardCacheNotRestoredReason :: ContentScreenReader) , "ContentDiscarded" | "contentdiscarded" => Ok (BackForwardCacheNotRestoredReason :: ContentDiscarded) , "EmbedderPopupBlockerTabHelper" | "embedderpopupblockertabhelper" => Ok (BackForwardCacheNotRestoredReason :: EmbedderPopupBlockerTabHelper) , "EmbedderSafeBrowsingTriggeredPopupBlocker" | "embeddersafebrowsingtriggeredpopupblocker" => Ok (BackForwardCacheNotRestoredReason :: EmbedderSafeBrowsingTriggeredPopupBlocker) , "EmbedderSafeBrowsingThreatDetails" | "embeddersafebrowsingthreatdetails" => Ok (BackForwardCacheNotRestoredReason :: EmbedderSafeBrowsingThreatDetails) , "EmbedderAppBannerManager" | "embedderappbannermanager" => Ok (BackForwardCacheNotRestoredReason :: EmbedderAppBannerManager) , "EmbedderDomDistillerViewerSource" | "embedderdomdistillerviewersource" => Ok (BackForwardCacheNotRestoredReason :: EmbedderDomDistillerViewerSource) , "EmbedderDomDistillerSelfDeletingRequestDelegate" | "embedderdomdistillerselfdeletingrequestdelegate" => Ok (BackForwardCacheNotRestoredReason :: EmbedderDomDistillerSelfDeletingRequestDelegate) , "EmbedderOomInterventionTabHelper" | "embedderoominterventiontabhelper" => Ok (BackForwardCacheNotRestoredReason :: EmbedderOomInterventionTabHelper) , "EmbedderOfflinePage" | "embedderofflinepage" => Ok (BackForwardCacheNotRestoredReason :: EmbedderOfflinePage) , "EmbedderChromePasswordManagerClientBindCredentialManager" | "embedderchromepasswordmanagerclientbindcredentialmanager" => Ok (BackForwardCacheNotRestoredReason :: EmbedderChromePasswordManagerClientBindCredentialManager) , "EmbedderPermissionRequestManager" | "embedderpermissionrequestmanager" => Ok (BackForwardCacheNotRestoredReason :: EmbedderPermissionRequestManager) , "EmbedderModalDialog" | "embeddermodaldialog" => Ok (BackForwardCacheNotRestoredReason :: EmbedderModalDialog) , "EmbedderExtensions" | "embedderextensions" => Ok (BackForwardCacheNotRestoredReason :: EmbedderExtensions) , "EmbedderExtensionMessaging" | "embedderextensionmessaging" => Ok (BackForwardCacheNotRestoredReason :: EmbedderExtensionMessaging) , "EmbedderExtensionMessagingForOpenPort" | "embedderextensionmessagingforopenport" => Ok (BackForwardCacheNotRestoredReason :: EmbedderExtensionMessagingForOpenPort) , "EmbedderExtensionSentMessageToCachedFrame" | "embedderextensionsentmessagetocachedframe" => Ok (BackForwardCacheNotRestoredReason :: EmbedderExtensionSentMessageToCachedFrame) , "RequestedByWebViewClient" | "requestedbywebviewclient" => Ok (BackForwardCacheNotRestoredReason :: RequestedByWebViewClient) , _ => Err (s . to_string ()) } } } #[doc = "Types of not restored reasons for back-forward cache."] @@ -78619,6 +79287,29 @@ pub mod browser_protocol { Self::IDENTIFIER.into() } } + #[doc = "Fired before frame subtree is detached. Emitted before any frame of the\nsubtree is actually detached.\n[frameSubtreeWillBeDetached](https://chromedevtools.github.io/devtools-protocol/tot/Page/#event-frameSubtreeWillBeDetached)"] + #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] + pub struct EventFrameSubtreeWillBeDetached { + #[doc = "Id of the frame that is the root of the subtree that will be detached."] + #[serde(rename = "frameId")] + pub frame_id: FrameId, + } + impl EventFrameSubtreeWillBeDetached { + pub const IDENTIFIER: &'static str = "Page.frameSubtreeWillBeDetached"; + } + impl chromiumoxide_types::Method for EventFrameSubtreeWillBeDetached { + fn identifier(&self) -> chromiumoxide_types::MethodId { + Self::IDENTIFIER.into() + } + } + impl chromiumoxide_types::MethodType for EventFrameSubtreeWillBeDetached { + fn method_id() -> chromiumoxide_types::MethodId + where + Self: Sized, + { + Self::IDENTIFIER.into() + } + } #[doc = "Fired once navigation of the frame has completed. Frame is now associated with the new loader.\n[frameNavigated](https://chromedevtools.github.io/devtools-protocol/tot/Page/#event-frameNavigated)"] #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct EventFrameNavigated { @@ -78961,6 +79652,45 @@ pub mod browser_protocol { #[doc = "Frame's new url."] #[serde(rename = "url")] pub url: String, + #[doc = "Navigation type"] + #[serde(rename = "navigationType")] + #[serde(deserialize_with = "super::super::de::deserialize_from_str")] + pub navigation_type: NavigatedWithinDocumentNavigationType, + } + #[doc = "Navigation type"] + #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] + pub enum NavigatedWithinDocumentNavigationType { + #[doc = "Navigation due to fragment navigation."] + #[serde(rename = "fragment")] + Fragment, + #[doc = "Navigation due to history API usage."] + #[serde(rename = "historyApi")] + HistoryApi, + #[doc = "Navigation due to other reasons."] + #[serde(rename = "other")] + Other, + } + impl AsRef for NavigatedWithinDocumentNavigationType { + fn as_ref(&self) -> &str { + match self { + NavigatedWithinDocumentNavigationType::Fragment => "fragment", + NavigatedWithinDocumentNavigationType::HistoryApi => "historyApi", + NavigatedWithinDocumentNavigationType::Other => "other", + } + } + } + impl ::std::str::FromStr for NavigatedWithinDocumentNavigationType { + type Err = String; + fn from_str(s: &str) -> Result { + match s { + "fragment" | "Fragment" => Ok(NavigatedWithinDocumentNavigationType::Fragment), + "historyApi" | "HistoryApi" | "historyapi" => { + Ok(NavigatedWithinDocumentNavigationType::HistoryApi) + } + "other" | "Other" => Ok(NavigatedWithinDocumentNavigationType::Other), + _ => Err(s.to_string()), + } + } } impl EventNavigatedWithinDocument { pub const IDENTIFIER: &'static str = "Page.navigatedWithinDocument"; @@ -83595,6 +84325,86 @@ pub mod browser_protocol { "Storage.AttributionReportingAggregatableDebugReportingConfig"; } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] + pub struct AttributionScopesData { + #[serde(rename = "values")] + #[serde(skip_serializing_if = "Vec::is_empty")] + pub values: Vec, + #[doc = "number instead of integer because not all uint32 can be represented by\nint"] + #[serde(rename = "limit")] + pub limit: f64, + #[serde(rename = "maxEventStates")] + pub max_event_states: f64, + } + impl AttributionScopesData { + pub fn new( + values: Vec, + limit: impl Into, + max_event_states: impl Into, + ) -> Self { + Self { + values, + limit: limit.into(), + max_event_states: max_event_states.into(), + } + } + } + impl AttributionScopesData { + pub fn builder() -> AttributionScopesDataBuilder { + AttributionScopesDataBuilder::default() + } + } + #[derive(Default, Clone)] + pub struct AttributionScopesDataBuilder { + values: Option>, + limit: Option, + max_event_states: Option, + } + impl AttributionScopesDataBuilder { + pub fn value(mut self, value: impl Into) -> Self { + let v = self.values.get_or_insert(Vec::new()); + v.push(value.into()); + self + } + pub fn values(mut self, values: I) -> Self + where + I: IntoIterator, + S: Into, + { + let v = self.values.get_or_insert(Vec::new()); + for val in values { + v.push(val.into()); + } + self + } + pub fn limit(mut self, limit: impl Into) -> Self { + self.limit = Some(limit.into()); + self + } + pub fn max_event_states(mut self, max_event_states: impl Into) -> Self { + self.max_event_states = Some(max_event_states.into()); + self + } + pub fn build(self) -> Result { + Ok(AttributionScopesData { + values: self.values.ok_or_else(|| { + format!("Field `{}` is mandatory.", std::stringify!(values)) + })?, + limit: self.limit.ok_or_else(|| { + format!("Field `{}` is mandatory.", std::stringify!(limit)) + })?, + max_event_states: self.max_event_states.ok_or_else(|| { + format!( + "Field `{}` is mandatory.", + std::stringify!(max_event_states) + ) + })?, + }) + } + } + impl AttributionScopesData { + pub const IDENTIFIER: &'static str = "Storage.AttributionScopesData"; + } + #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct AttributionReportingSourceRegistration { #[serde(rename = "time")] pub time: super::network::TimeSinceEpoch, @@ -83638,6 +84448,9 @@ pub mod browser_protocol { #[serde(rename = "aggregatableDebugReportingConfig")] pub aggregatable_debug_reporting_config: AttributionReportingAggregatableDebugReportingConfig, + #[serde(rename = "scopesData")] + #[serde(skip_serializing_if = "Option::is_none")] + pub scopes_data: Option, } impl AttributionReportingSourceRegistration { pub fn builder() -> AttributionReportingSourceRegistrationBuilder { @@ -83663,6 +84476,7 @@ pub mod browser_protocol { destination_limit_priority: Option, aggregatable_debug_reporting_config: Option, + scopes_data: Option, } impl AttributionReportingSourceRegistrationBuilder { pub fn time(mut self, time: impl Into) -> Self { @@ -83801,6 +84615,10 @@ pub mod browser_protocol { Some(aggregatable_debug_reporting_config.into()); self } + pub fn scopes_data(mut self, scopes_data: impl Into) -> Self { + self.scopes_data = Some(scopes_data.into()); + self + } pub fn build(self) -> Result { Ok(AttributionReportingSourceRegistration { time: self.time.ok_or_else(|| { @@ -83876,6 +84694,7 @@ pub mod browser_protocol { std::stringify!(aggregatable_debug_reporting_config) ) })?, + scopes_data: self.scopes_data, }) } } @@ -83908,20 +84727,24 @@ pub mod browser_protocol { ReportingOriginsPerSiteLimitReached, #[serde(rename = "exceedsMaxChannelCapacity")] ExceedsMaxChannelCapacity, + #[serde(rename = "exceedsMaxScopesChannelCapacity")] + ExceedsMaxScopesChannelCapacity, #[serde(rename = "exceedsMaxTriggerStateCardinality")] ExceedsMaxTriggerStateCardinality, + #[serde(rename = "exceedsMaxEventStatesLimit")] + ExceedsMaxEventStatesLimit, #[serde(rename = "destinationPerDayReportingLimitReached")] DestinationPerDayReportingLimitReached, } impl AsRef for AttributionReportingSourceRegistrationResult { fn as_ref(&self) -> &str { - match self { AttributionReportingSourceRegistrationResult :: Success => "success" , AttributionReportingSourceRegistrationResult :: InternalError => "internalError" , AttributionReportingSourceRegistrationResult :: InsufficientSourceCapacity => "insufficientSourceCapacity" , AttributionReportingSourceRegistrationResult :: InsufficientUniqueDestinationCapacity => "insufficientUniqueDestinationCapacity" , AttributionReportingSourceRegistrationResult :: ExcessiveReportingOrigins => "excessiveReportingOrigins" , AttributionReportingSourceRegistrationResult :: ProhibitedByBrowserPolicy => "prohibitedByBrowserPolicy" , AttributionReportingSourceRegistrationResult :: SuccessNoised => "successNoised" , AttributionReportingSourceRegistrationResult :: DestinationReportingLimitReached => "destinationReportingLimitReached" , AttributionReportingSourceRegistrationResult :: DestinationGlobalLimitReached => "destinationGlobalLimitReached" , AttributionReportingSourceRegistrationResult :: DestinationBothLimitsReached => "destinationBothLimitsReached" , AttributionReportingSourceRegistrationResult :: ReportingOriginsPerSiteLimitReached => "reportingOriginsPerSiteLimitReached" , AttributionReportingSourceRegistrationResult :: ExceedsMaxChannelCapacity => "exceedsMaxChannelCapacity" , AttributionReportingSourceRegistrationResult :: ExceedsMaxTriggerStateCardinality => "exceedsMaxTriggerStateCardinality" , AttributionReportingSourceRegistrationResult :: DestinationPerDayReportingLimitReached => "destinationPerDayReportingLimitReached" } + match self { AttributionReportingSourceRegistrationResult :: Success => "success" , AttributionReportingSourceRegistrationResult :: InternalError => "internalError" , AttributionReportingSourceRegistrationResult :: InsufficientSourceCapacity => "insufficientSourceCapacity" , AttributionReportingSourceRegistrationResult :: InsufficientUniqueDestinationCapacity => "insufficientUniqueDestinationCapacity" , AttributionReportingSourceRegistrationResult :: ExcessiveReportingOrigins => "excessiveReportingOrigins" , AttributionReportingSourceRegistrationResult :: ProhibitedByBrowserPolicy => "prohibitedByBrowserPolicy" , AttributionReportingSourceRegistrationResult :: SuccessNoised => "successNoised" , AttributionReportingSourceRegistrationResult :: DestinationReportingLimitReached => "destinationReportingLimitReached" , AttributionReportingSourceRegistrationResult :: DestinationGlobalLimitReached => "destinationGlobalLimitReached" , AttributionReportingSourceRegistrationResult :: DestinationBothLimitsReached => "destinationBothLimitsReached" , AttributionReportingSourceRegistrationResult :: ReportingOriginsPerSiteLimitReached => "reportingOriginsPerSiteLimitReached" , AttributionReportingSourceRegistrationResult :: ExceedsMaxChannelCapacity => "exceedsMaxChannelCapacity" , AttributionReportingSourceRegistrationResult :: ExceedsMaxScopesChannelCapacity => "exceedsMaxScopesChannelCapacity" , AttributionReportingSourceRegistrationResult :: ExceedsMaxTriggerStateCardinality => "exceedsMaxTriggerStateCardinality" , AttributionReportingSourceRegistrationResult :: ExceedsMaxEventStatesLimit => "exceedsMaxEventStatesLimit" , AttributionReportingSourceRegistrationResult :: DestinationPerDayReportingLimitReached => "destinationPerDayReportingLimitReached" } } } impl ::std::str::FromStr for AttributionReportingSourceRegistrationResult { type Err = String; fn from_str(s: &str) -> Result { - match s { "success" | "Success" => Ok (AttributionReportingSourceRegistrationResult :: Success) , "internalError" | "InternalError" | "internalerror" => Ok (AttributionReportingSourceRegistrationResult :: InternalError) , "insufficientSourceCapacity" | "InsufficientSourceCapacity" | "insufficientsourcecapacity" => Ok (AttributionReportingSourceRegistrationResult :: InsufficientSourceCapacity) , "insufficientUniqueDestinationCapacity" | "InsufficientUniqueDestinationCapacity" | "insufficientuniquedestinationcapacity" => Ok (AttributionReportingSourceRegistrationResult :: InsufficientUniqueDestinationCapacity) , "excessiveReportingOrigins" | "ExcessiveReportingOrigins" | "excessivereportingorigins" => Ok (AttributionReportingSourceRegistrationResult :: ExcessiveReportingOrigins) , "prohibitedByBrowserPolicy" | "ProhibitedByBrowserPolicy" | "prohibitedbybrowserpolicy" => Ok (AttributionReportingSourceRegistrationResult :: ProhibitedByBrowserPolicy) , "successNoised" | "SuccessNoised" | "successnoised" => Ok (AttributionReportingSourceRegistrationResult :: SuccessNoised) , "destinationReportingLimitReached" | "DestinationReportingLimitReached" | "destinationreportinglimitreached" => Ok (AttributionReportingSourceRegistrationResult :: DestinationReportingLimitReached) , "destinationGlobalLimitReached" | "DestinationGlobalLimitReached" | "destinationgloballimitreached" => Ok (AttributionReportingSourceRegistrationResult :: DestinationGlobalLimitReached) , "destinationBothLimitsReached" | "DestinationBothLimitsReached" | "destinationbothlimitsreached" => Ok (AttributionReportingSourceRegistrationResult :: DestinationBothLimitsReached) , "reportingOriginsPerSiteLimitReached" | "ReportingOriginsPerSiteLimitReached" | "reportingoriginspersitelimitreached" => Ok (AttributionReportingSourceRegistrationResult :: ReportingOriginsPerSiteLimitReached) , "exceedsMaxChannelCapacity" | "ExceedsMaxChannelCapacity" | "exceedsmaxchannelcapacity" => Ok (AttributionReportingSourceRegistrationResult :: ExceedsMaxChannelCapacity) , "exceedsMaxTriggerStateCardinality" | "ExceedsMaxTriggerStateCardinality" | "exceedsmaxtriggerstatecardinality" => Ok (AttributionReportingSourceRegistrationResult :: ExceedsMaxTriggerStateCardinality) , "destinationPerDayReportingLimitReached" | "DestinationPerDayReportingLimitReached" | "destinationperdayreportinglimitreached" => Ok (AttributionReportingSourceRegistrationResult :: DestinationPerDayReportingLimitReached) , _ => Err (s . to_string ()) } + match s { "success" | "Success" => Ok (AttributionReportingSourceRegistrationResult :: Success) , "internalError" | "InternalError" | "internalerror" => Ok (AttributionReportingSourceRegistrationResult :: InternalError) , "insufficientSourceCapacity" | "InsufficientSourceCapacity" | "insufficientsourcecapacity" => Ok (AttributionReportingSourceRegistrationResult :: InsufficientSourceCapacity) , "insufficientUniqueDestinationCapacity" | "InsufficientUniqueDestinationCapacity" | "insufficientuniquedestinationcapacity" => Ok (AttributionReportingSourceRegistrationResult :: InsufficientUniqueDestinationCapacity) , "excessiveReportingOrigins" | "ExcessiveReportingOrigins" | "excessivereportingorigins" => Ok (AttributionReportingSourceRegistrationResult :: ExcessiveReportingOrigins) , "prohibitedByBrowserPolicy" | "ProhibitedByBrowserPolicy" | "prohibitedbybrowserpolicy" => Ok (AttributionReportingSourceRegistrationResult :: ProhibitedByBrowserPolicy) , "successNoised" | "SuccessNoised" | "successnoised" => Ok (AttributionReportingSourceRegistrationResult :: SuccessNoised) , "destinationReportingLimitReached" | "DestinationReportingLimitReached" | "destinationreportinglimitreached" => Ok (AttributionReportingSourceRegistrationResult :: DestinationReportingLimitReached) , "destinationGlobalLimitReached" | "DestinationGlobalLimitReached" | "destinationgloballimitreached" => Ok (AttributionReportingSourceRegistrationResult :: DestinationGlobalLimitReached) , "destinationBothLimitsReached" | "DestinationBothLimitsReached" | "destinationbothlimitsreached" => Ok (AttributionReportingSourceRegistrationResult :: DestinationBothLimitsReached) , "reportingOriginsPerSiteLimitReached" | "ReportingOriginsPerSiteLimitReached" | "reportingoriginspersitelimitreached" => Ok (AttributionReportingSourceRegistrationResult :: ReportingOriginsPerSiteLimitReached) , "exceedsMaxChannelCapacity" | "ExceedsMaxChannelCapacity" | "exceedsmaxchannelcapacity" => Ok (AttributionReportingSourceRegistrationResult :: ExceedsMaxChannelCapacity) , "exceedsMaxScopesChannelCapacity" | "ExceedsMaxScopesChannelCapacity" | "exceedsmaxscopeschannelcapacity" => Ok (AttributionReportingSourceRegistrationResult :: ExceedsMaxScopesChannelCapacity) , "exceedsMaxTriggerStateCardinality" | "ExceedsMaxTriggerStateCardinality" | "exceedsmaxtriggerstatecardinality" => Ok (AttributionReportingSourceRegistrationResult :: ExceedsMaxTriggerStateCardinality) , "exceedsMaxEventStatesLimit" | "ExceedsMaxEventStatesLimit" | "exceedsmaxeventstateslimit" => Ok (AttributionReportingSourceRegistrationResult :: ExceedsMaxEventStatesLimit) , "destinationPerDayReportingLimitReached" | "DestinationPerDayReportingLimitReached" | "destinationperdayreportinglimitreached" => Ok (AttributionReportingSourceRegistrationResult :: DestinationPerDayReportingLimitReached) , _ => Err (s . to_string ()) } } } #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] @@ -84318,6 +85141,9 @@ pub mod browser_protocol { #[serde(rename = "aggregatableDebugReportingConfig")] pub aggregatable_debug_reporting_config: AttributionReportingAggregatableDebugReportingConfig, + #[serde(rename = "scopes")] + #[serde(skip_serializing_if = "Vec::is_empty")] + pub scopes: Vec, } impl AttributionReportingTriggerRegistration { pub fn builder() -> AttributionReportingTriggerRegistrationBuilder { @@ -84340,6 +85166,7 @@ pub mod browser_protocol { trigger_context_id: Option, aggregatable_debug_reporting_config: Option, + scopes: Option>, } impl AttributionReportingTriggerRegistrationBuilder { pub fn filters(mut self, filters: impl Into) -> Self { @@ -84468,6 +85295,22 @@ pub mod browser_protocol { Some(aggregatable_debug_reporting_config.into()); self } + pub fn scope(mut self, scope: impl Into) -> Self { + let v = self.scopes.get_or_insert(Vec::new()); + v.push(scope.into()); + self + } + pub fn scopes(mut self, scopes: I) -> Self + where + I: IntoIterator, + S: Into, + { + let v = self.scopes.get_or_insert(Vec::new()); + for val in scopes { + v.push(val.into()); + } + self + } pub fn build(self) -> Result { Ok(AttributionReportingTriggerRegistration { filters: self.filters.ok_or_else(|| { @@ -84527,6 +85370,9 @@ pub mod browser_protocol { std::stringify!(aggregatable_debug_reporting_config) ) })?, + scopes: self.scopes.ok_or_else(|| { + format!("Field `{}` is mandatory.", std::stringify!(scopes)) + })?, }) } } @@ -97117,8 +97963,6 @@ pub mod browser_protocol { PrefetchFailedNetError, #[serde(rename = "PrefetchFailedNon2XX")] PrefetchFailedNon2Xx, - #[serde(rename = "PrefetchFailedPerPageLimitExceeded")] - PrefetchFailedPerPageLimitExceeded, #[serde(rename = "PrefetchEvictedAfterCandidateRemoved")] PrefetchEvictedAfterCandidateRemoved, #[serde(rename = "PrefetchEvictedForNewerPrefetch")] @@ -97186,9 +98030,6 @@ pub mod browser_protocol { } PrefetchStatus::PrefetchFailedNetError => "PrefetchFailedNetError", PrefetchStatus::PrefetchFailedNon2Xx => "PrefetchFailedNon2XX", - PrefetchStatus::PrefetchFailedPerPageLimitExceeded => { - "PrefetchFailedPerPageLimitExceeded" - } PrefetchStatus::PrefetchEvictedAfterCandidateRemoved => { "PrefetchEvictedAfterCandidateRemoved" } @@ -97266,9 +98107,6 @@ pub mod browser_protocol { "PrefetchFailedNon2XX" | "PrefetchFailedNon2Xx" | "prefetchfailednon2xx" => { Ok(PrefetchStatus::PrefetchFailedNon2Xx) } - "PrefetchFailedPerPageLimitExceeded" | "prefetchfailedperpagelimitexceeded" => { - Ok(PrefetchStatus::PrefetchFailedPerPageLimitExceeded) - } "PrefetchEvictedAfterCandidateRemoved" | "prefetchevictedaftercandidateremoved" => { Ok(PrefetchStatus::PrefetchEvictedAfterCandidateRemoved) @@ -99121,6 +99959,523 @@ pub mod browser_protocol { type Response = ChangeAppUserSettingsReturns; } } + #[doc = "This domain allows configuring virtual Bluetooth devices to test\nthe web-bluetooth API."] + pub mod bluetooth_emulation { + use serde::{Deserialize, Serialize}; + #[doc = "Indicates the various states of Central."] + #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] + pub enum CentralState { + #[serde(rename = "absent")] + Absent, + #[serde(rename = "powered-off")] + PoweredOff, + #[serde(rename = "powered-on")] + PoweredOn, + } + impl AsRef for CentralState { + fn as_ref(&self) -> &str { + match self { + CentralState::Absent => "absent", + CentralState::PoweredOff => "powered-off", + CentralState::PoweredOn => "powered-on", + } + } + } + impl ::std::str::FromStr for CentralState { + type Err = String; + fn from_str(s: &str) -> Result { + match s { + "absent" | "Absent" => Ok(CentralState::Absent), + "powered-off" | "PoweredOff" => Ok(CentralState::PoweredOff), + "powered-on" | "PoweredOn" => Ok(CentralState::PoweredOn), + _ => Err(s.to_string()), + } + } + } + #[doc = "Stores the manufacturer data\n[ManufacturerData](https://chromedevtools.github.io/devtools-protocol/tot/BluetoothEmulation/#type-ManufacturerData)"] + #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] + pub struct ManufacturerData { + #[doc = "Company identifier\nhttps://bitbucket.org/bluetooth-SIG/public/src/main/assigned_numbers/company_identifiers/company_identifiers.yaml\nhttps://usb.org/developers"] + #[serde(rename = "key")] + pub key: i64, + #[doc = "Manufacturer-specific data"] + #[serde(rename = "data")] + pub data: chromiumoxide_types::Binary, + } + impl ManufacturerData { + pub fn new(key: impl Into, data: impl Into) -> Self { + Self { + key: key.into(), + data: data.into(), + } + } + } + impl ManufacturerData { + pub fn builder() -> ManufacturerDataBuilder { + ManufacturerDataBuilder::default() + } + } + #[derive(Default, Clone)] + pub struct ManufacturerDataBuilder { + key: Option, + data: Option, + } + impl ManufacturerDataBuilder { + pub fn key(mut self, key: impl Into) -> Self { + self.key = Some(key.into()); + self + } + pub fn data(mut self, data: impl Into) -> Self { + self.data = Some(data.into()); + self + } + pub fn build(self) -> Result { + Ok(ManufacturerData { + key: self + .key + .ok_or_else(|| format!("Field `{}` is mandatory.", std::stringify!(key)))?, + data: self.data.ok_or_else(|| { + format!("Field `{}` is mandatory.", std::stringify!(data)) + })?, + }) + } + } + impl ManufacturerData { + pub const IDENTIFIER: &'static str = "BluetoothEmulation.ManufacturerData"; + } + #[doc = "Stores the byte data of the advertisement packet sent by a Bluetooth device.\n[ScanRecord](https://chromedevtools.github.io/devtools-protocol/tot/BluetoothEmulation/#type-ScanRecord)"] + #[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)] + pub struct ScanRecord { + #[serde(rename = "name")] + #[serde(skip_serializing_if = "Option::is_none")] + pub name: Option, + #[serde(rename = "uuids")] + #[serde(skip_serializing_if = "Option::is_none")] + pub uuids: Option>, + #[doc = "Stores the external appearance description of the device."] + #[serde(rename = "appearance")] + #[serde(skip_serializing_if = "Option::is_none")] + pub appearance: Option, + #[doc = "Stores the transmission power of a broadcasting device."] + #[serde(rename = "txPower")] + #[serde(skip_serializing_if = "Option::is_none")] + pub tx_power: Option, + #[doc = "Key is the company identifier and the value is an array of bytes of\nmanufacturer specific data."] + #[serde(rename = "manufacturerData")] + #[serde(skip_serializing_if = "Option::is_none")] + pub manufacturer_data: Option>, + } + impl ScanRecord { + pub fn builder() -> ScanRecordBuilder { + ScanRecordBuilder::default() + } + } + #[derive(Default, Clone)] + pub struct ScanRecordBuilder { + name: Option, + uuids: Option>, + appearance: Option, + tx_power: Option, + manufacturer_data: Option>, + } + impl ScanRecordBuilder { + pub fn name(mut self, name: impl Into) -> Self { + self.name = Some(name.into()); + self + } + pub fn uuid(mut self, uuid: impl Into) -> Self { + let v = self.uuids.get_or_insert(Vec::new()); + v.push(uuid.into()); + self + } + pub fn uuids(mut self, uuids: I) -> Self + where + I: IntoIterator, + S: Into, + { + let v = self.uuids.get_or_insert(Vec::new()); + for val in uuids { + v.push(val.into()); + } + self + } + pub fn appearance(mut self, appearance: impl Into) -> Self { + self.appearance = Some(appearance.into()); + self + } + pub fn tx_power(mut self, tx_power: impl Into) -> Self { + self.tx_power = Some(tx_power.into()); + self + } + pub fn manufacturer_data( + mut self, + manufacturer_data: impl Into, + ) -> Self { + let v = self.manufacturer_data.get_or_insert(Vec::new()); + v.push(manufacturer_data.into()); + self + } + pub fn manufacturer_datas(mut self, manufacturer_datas: I) -> Self + where + I: IntoIterator, + S: Into, + { + let v = self.manufacturer_data.get_or_insert(Vec::new()); + for val in manufacturer_datas { + v.push(val.into()); + } + self + } + pub fn build(self) -> ScanRecord { + ScanRecord { + name: self.name, + uuids: self.uuids, + appearance: self.appearance, + tx_power: self.tx_power, + manufacturer_data: self.manufacturer_data, + } + } + } + impl ScanRecord { + pub const IDENTIFIER: &'static str = "BluetoothEmulation.ScanRecord"; + } + #[doc = "Stores the advertisement packet information that is sent by a Bluetooth device.\n[ScanEntry](https://chromedevtools.github.io/devtools-protocol/tot/BluetoothEmulation/#type-ScanEntry)"] + #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] + pub struct ScanEntry { + #[serde(rename = "deviceAddress")] + pub device_address: String, + #[serde(rename = "rssi")] + pub rssi: i64, + #[serde(rename = "scanRecord")] + pub scan_record: ScanRecord, + } + impl ScanEntry { + pub fn new( + device_address: impl Into, + rssi: impl Into, + scan_record: impl Into, + ) -> Self { + Self { + device_address: device_address.into(), + rssi: rssi.into(), + scan_record: scan_record.into(), + } + } + } + impl ScanEntry { + pub fn builder() -> ScanEntryBuilder { + ScanEntryBuilder::default() + } + } + #[derive(Default, Clone)] + pub struct ScanEntryBuilder { + device_address: Option, + rssi: Option, + scan_record: Option, + } + impl ScanEntryBuilder { + pub fn device_address(mut self, device_address: impl Into) -> Self { + self.device_address = Some(device_address.into()); + self + } + pub fn rssi(mut self, rssi: impl Into) -> Self { + self.rssi = Some(rssi.into()); + self + } + pub fn scan_record(mut self, scan_record: impl Into) -> Self { + self.scan_record = Some(scan_record.into()); + self + } + pub fn build(self) -> Result { + Ok(ScanEntry { + device_address: self.device_address.ok_or_else(|| { + format!("Field `{}` is mandatory.", std::stringify!(device_address)) + })?, + rssi: self.rssi.ok_or_else(|| { + format!("Field `{}` is mandatory.", std::stringify!(rssi)) + })?, + scan_record: self.scan_record.ok_or_else(|| { + format!("Field `{}` is mandatory.", std::stringify!(scan_record)) + })?, + }) + } + } + impl ScanEntry { + pub const IDENTIFIER: &'static str = "BluetoothEmulation.ScanEntry"; + } + #[doc = "Enable the BluetoothEmulation domain.\n[enable](https://chromedevtools.github.io/devtools-protocol/tot/BluetoothEmulation/#method-enable)"] + #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] + pub struct EnableParams { + #[doc = "State of the simulated central."] + #[serde(rename = "state")] + #[serde(deserialize_with = "super::super::de::deserialize_from_str")] + pub state: CentralState, + } + impl EnableParams { + pub fn new(state: impl Into) -> Self { + Self { + state: state.into(), + } + } + } + impl EnableParams { + pub fn builder() -> EnableParamsBuilder { + EnableParamsBuilder::default() + } + } + #[derive(Default, Clone)] + pub struct EnableParamsBuilder { + state: Option, + } + impl EnableParamsBuilder { + pub fn state(mut self, state: impl Into) -> Self { + self.state = Some(state.into()); + self + } + pub fn build(self) -> Result { + Ok(EnableParams { + state: self.state.ok_or_else(|| { + format!("Field `{}` is mandatory.", std::stringify!(state)) + })?, + }) + } + } + impl EnableParams { + pub const IDENTIFIER: &'static str = "BluetoothEmulation.enable"; + } + impl chromiumoxide_types::Method for EnableParams { + fn identifier(&self) -> chromiumoxide_types::MethodId { + Self::IDENTIFIER.into() + } + } + impl chromiumoxide_types::MethodType for EnableParams { + fn method_id() -> chromiumoxide_types::MethodId + where + Self: Sized, + { + Self::IDENTIFIER.into() + } + } + #[doc = "Enable the BluetoothEmulation domain.\n[enable](https://chromedevtools.github.io/devtools-protocol/tot/BluetoothEmulation/#method-enable)"] + #[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)] + pub struct EnableReturns {} + impl chromiumoxide_types::Command for EnableParams { + type Response = EnableReturns; + } + #[doc = "Disable the BluetoothEmulation domain.\n[disable](https://chromedevtools.github.io/devtools-protocol/tot/BluetoothEmulation/#method-disable)"] + #[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)] + pub struct DisableParams {} + impl DisableParams { + pub const IDENTIFIER: &'static str = "BluetoothEmulation.disable"; + } + impl chromiumoxide_types::Method for DisableParams { + fn identifier(&self) -> chromiumoxide_types::MethodId { + Self::IDENTIFIER.into() + } + } + impl chromiumoxide_types::MethodType for DisableParams { + fn method_id() -> chromiumoxide_types::MethodId + where + Self: Sized, + { + Self::IDENTIFIER.into() + } + } + #[doc = "Disable the BluetoothEmulation domain.\n[disable](https://chromedevtools.github.io/devtools-protocol/tot/BluetoothEmulation/#method-disable)"] + #[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)] + pub struct DisableReturns {} + impl chromiumoxide_types::Command for DisableParams { + type Response = DisableReturns; + } + #[doc = "Simulates a peripheral with |address|, |name| and |knownServiceUuids|\nthat has already been connected to the system.\n[simulatePreconnectedPeripheral](https://chromedevtools.github.io/devtools-protocol/tot/BluetoothEmulation/#method-simulatePreconnectedPeripheral)"] + #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] + pub struct SimulatePreconnectedPeripheralParams { + #[serde(rename = "address")] + pub address: String, + #[serde(rename = "name")] + pub name: String, + #[serde(rename = "manufacturerData")] + #[serde(skip_serializing_if = "Vec::is_empty")] + pub manufacturer_data: Vec, + #[serde(rename = "knownServiceUuids")] + #[serde(skip_serializing_if = "Vec::is_empty")] + pub known_service_uuids: Vec, + } + impl SimulatePreconnectedPeripheralParams { + pub fn new( + address: impl Into, + name: impl Into, + manufacturer_data: Vec, + known_service_uuids: Vec, + ) -> Self { + Self { + address: address.into(), + name: name.into(), + manufacturer_data, + known_service_uuids, + } + } + } + impl SimulatePreconnectedPeripheralParams { + pub fn builder() -> SimulatePreconnectedPeripheralParamsBuilder { + SimulatePreconnectedPeripheralParamsBuilder::default() + } + } + #[derive(Default, Clone)] + pub struct SimulatePreconnectedPeripheralParamsBuilder { + address: Option, + name: Option, + manufacturer_data: Option>, + known_service_uuids: Option>, + } + impl SimulatePreconnectedPeripheralParamsBuilder { + pub fn address(mut self, address: impl Into) -> Self { + self.address = Some(address.into()); + self + } + pub fn name(mut self, name: impl Into) -> Self { + self.name = Some(name.into()); + self + } + pub fn manufacturer_data( + mut self, + manufacturer_data: impl Into, + ) -> Self { + let v = self.manufacturer_data.get_or_insert(Vec::new()); + v.push(manufacturer_data.into()); + self + } + pub fn manufacturer_datas(mut self, manufacturer_datas: I) -> Self + where + I: IntoIterator, + S: Into, + { + let v = self.manufacturer_data.get_or_insert(Vec::new()); + for val in manufacturer_datas { + v.push(val.into()); + } + self + } + pub fn known_service_uuid(mut self, known_service_uuid: impl Into) -> Self { + let v = self.known_service_uuids.get_or_insert(Vec::new()); + v.push(known_service_uuid.into()); + self + } + pub fn known_service_uuids(mut self, known_service_uuids: I) -> Self + where + I: IntoIterator, + S: Into, + { + let v = self.known_service_uuids.get_or_insert(Vec::new()); + for val in known_service_uuids { + v.push(val.into()); + } + self + } + pub fn build(self) -> Result { + Ok(SimulatePreconnectedPeripheralParams { + address: self.address.ok_or_else(|| { + format!("Field `{}` is mandatory.", std::stringify!(address)) + })?, + name: self.name.ok_or_else(|| { + format!("Field `{}` is mandatory.", std::stringify!(name)) + })?, + manufacturer_data: self.manufacturer_data.ok_or_else(|| { + format!( + "Field `{}` is mandatory.", + std::stringify!(manufacturer_data) + ) + })?, + known_service_uuids: self.known_service_uuids.ok_or_else(|| { + format!( + "Field `{}` is mandatory.", + std::stringify!(known_service_uuids) + ) + })?, + }) + } + } + impl SimulatePreconnectedPeripheralParams { + pub const IDENTIFIER: &'static str = + "BluetoothEmulation.simulatePreconnectedPeripheral"; + } + impl chromiumoxide_types::Method for SimulatePreconnectedPeripheralParams { + fn identifier(&self) -> chromiumoxide_types::MethodId { + Self::IDENTIFIER.into() + } + } + impl chromiumoxide_types::MethodType for SimulatePreconnectedPeripheralParams { + fn method_id() -> chromiumoxide_types::MethodId + where + Self: Sized, + { + Self::IDENTIFIER.into() + } + } + #[doc = "Simulates a peripheral with |address|, |name| and |knownServiceUuids|\nthat has already been connected to the system.\n[simulatePreconnectedPeripheral](https://chromedevtools.github.io/devtools-protocol/tot/BluetoothEmulation/#method-simulatePreconnectedPeripheral)"] + #[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)] + pub struct SimulatePreconnectedPeripheralReturns {} + impl chromiumoxide_types::Command for SimulatePreconnectedPeripheralParams { + type Response = SimulatePreconnectedPeripheralReturns; + } + #[doc = "Simulates an advertisement packet described in |entry| being received by\nthe central.\n[simulateAdvertisement](https://chromedevtools.github.io/devtools-protocol/tot/BluetoothEmulation/#method-simulateAdvertisement)"] + #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] + pub struct SimulateAdvertisementParams { + #[serde(rename = "entry")] + pub entry: ScanEntry, + } + impl SimulateAdvertisementParams { + pub fn new(entry: impl Into) -> Self { + Self { + entry: entry.into(), + } + } + } + impl SimulateAdvertisementParams { + pub fn builder() -> SimulateAdvertisementParamsBuilder { + SimulateAdvertisementParamsBuilder::default() + } + } + #[derive(Default, Clone)] + pub struct SimulateAdvertisementParamsBuilder { + entry: Option, + } + impl SimulateAdvertisementParamsBuilder { + pub fn entry(mut self, entry: impl Into) -> Self { + self.entry = Some(entry.into()); + self + } + pub fn build(self) -> Result { + Ok(SimulateAdvertisementParams { + entry: self.entry.ok_or_else(|| { + format!("Field `{}` is mandatory.", std::stringify!(entry)) + })?, + }) + } + } + impl SimulateAdvertisementParams { + pub const IDENTIFIER: &'static str = "BluetoothEmulation.simulateAdvertisement"; + } + impl chromiumoxide_types::Method for SimulateAdvertisementParams { + fn identifier(&self) -> chromiumoxide_types::MethodId { + Self::IDENTIFIER.into() + } + } + impl chromiumoxide_types::MethodType for SimulateAdvertisementParams { + fn method_id() -> chromiumoxide_types::MethodId + where + Self: Sized, + { + Self::IDENTIFIER.into() + } + } + #[doc = "Simulates an advertisement packet described in |entry| being received by\nthe central.\n[simulateAdvertisement](https://chromedevtools.github.io/devtools-protocol/tot/BluetoothEmulation/#method-simulateAdvertisement)"] + #[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)] + pub struct SimulateAdvertisementReturns {} + impl chromiumoxide_types::Command for SimulateAdvertisementParams { + type Response = SimulateAdvertisementReturns; + } + } } pub mod de { use serde::{de, Deserialize, Deserializer}; diff --git a/chromiumoxide_cdp/src/lib.rs b/chromiumoxide_cdp/src/lib.rs index 0b2c628d..7fbd12d8 100644 --- a/chromiumoxide_cdp/src/lib.rs +++ b/chromiumoxide_cdp/src/lib.rs @@ -15,7 +15,7 @@ pub mod cdp; pub mod revision; /// Currently built CDP revision -pub const CURRENT_REVISION: Revision = Revision(1336433); +pub const CURRENT_REVISION: Revision = Revision(1359167); /// convenience fixups impl Default for CreateTargetParams { diff --git a/src/utils.rs b/src/utils.rs index 0399c6f4..a840aa4d 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -32,7 +32,11 @@ pub(crate) async fn canonicalize + Unpin>(path: P) -> std::io::Re /// Absolute path /// pub(crate) fn absolute(path: PathBuf) -> std::io::Result { - let path = if path.is_absolute() { path } else { std::env::current_dir()?.join(path) }; + let path = if path.is_absolute() { + path + } else { + std::env::current_dir()?.join(path) + }; Ok(dunce::simplified(&path).to_path_buf()) } @@ -43,10 +47,13 @@ pub(crate) async fn canonicalize_except_snap(path: PathBuf) -> std::io::Result

Date: Fri, 4 Oct 2024 10:52:44 -0400 Subject: [PATCH 4/6] Expose cmd for CommandChain (#236) Would be nice to have access to CommandChain to batch the CDP commands instead of having to send one by one. --- src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 03717c20..c90ed4f5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -79,7 +79,7 @@ pub use crate::page::Page; pub mod auth; pub mod browser; -pub(crate) mod cmd; +pub mod cmd; pub mod conn; pub mod detection; pub mod element; From c955148a66693192de1c7668ab4a7a8cc991d804 Mon Sep 17 00:00:00 2001 From: MOZGIII Date: Thu, 24 Oct 2024 03:18:09 -0300 Subject: [PATCH 5/6] Allow parsing failures (#197) --- src/conn.rs | 88 ++++++++++++++++++++++++++++------------------------- 1 file changed, 46 insertions(+), 42 deletions(-) diff --git a/src/conn.rs b/src/conn.rs index 72c0d9ea..78d6c4dc 100644 --- a/src/conn.rs +++ b/src/conn.rs @@ -118,52 +118,56 @@ impl Stream for Connection { let pin = self.get_mut(); loop { - // queue in the next message if not currently flushing - if let Err(err) = pin.start_send_next(cx) { - return Poll::Ready(Some(Err(err))); - } - - // send the message - if let Some(call) = pin.pending_flush.take() { - if pin.ws.poll_ready_unpin(cx).is_ready() { - pin.needs_flush = true; - // try another flush - continue; - } else { - pin.pending_flush = Some(call); + loop { + // queue in the next message if not currently flushing + if let Err(err) = pin.start_send_next(cx) { + return Poll::Ready(Some(Err(err))); } - } - break; - } - - // read from the ws - match ready!(pin.ws.poll_next_unpin(cx)) { - Some(Ok(WsMessage::Text(text))) => { - let ready = match serde_json::from_str::>(&text) { - Ok(msg) => { - tracing::trace!("Received {:?}", msg); - Ok(msg) - } - Err(err) => { - tracing::debug!(target: "chromiumoxide::conn::raw_ws::parse_errors", msg = text, "Failed to parse raw WS message"); - tracing::error!("Failed to deserialize WS response {}", err); - Err(err.into()) + // send the message + if let Some(call) = pin.pending_flush.take() { + if pin.ws.poll_ready_unpin(cx).is_ready() { + pin.needs_flush = true; + // try another flush + continue; + } else { + pin.pending_flush = Some(call); } - }; - Poll::Ready(Some(ready)) - } - Some(Ok(WsMessage::Close(_))) => Poll::Ready(None), - // ignore ping and pong - Some(Ok(WsMessage::Ping(_))) | Some(Ok(WsMessage::Pong(_))) => { - cx.waker().wake_by_ref(); - Poll::Pending + } + + break; } - Some(Ok(msg)) => Poll::Ready(Some(Err(CdpError::UnexpectedWsMessage(msg)))), - Some(Err(err)) => Poll::Ready(Some(Err(CdpError::Ws(err)))), - None => { - // ws connection closed - Poll::Ready(None) + + // read from the ws + match ready!(pin.ws.poll_next_unpin(cx)) { + Some(Ok(WsMessage::Text(text))) => { + let ready = match serde_json::from_str::>(&text) { + Ok(msg) => { + tracing::trace!("Received {:?}", msg); + Ok(msg) + } + Err(err) => { + tracing::debug!(target: "chromiumoxide::conn::raw_ws::parse_errors", msg = text, "Failed to parse raw WS message"); + tracing::error!("Failed to deserialize WS response {}", err); + // Go to the next iteration and try reading the next message + // in the hopes we can reconver and continue working. + continue; + } + }; + return Poll::Ready(Some(ready)); + } + Some(Ok(WsMessage::Close(_))) => return Poll::Ready(None), + // ignore ping and pong + Some(Ok(WsMessage::Ping(_))) | Some(Ok(WsMessage::Pong(_))) => { + cx.waker().wake_by_ref(); + return Poll::Pending; + } + Some(Ok(msg)) => return Poll::Ready(Some(Err(CdpError::UnexpectedWsMessage(msg)))), + Some(Err(err)) => return Poll::Ready(Some(Err(CdpError::Ws(err)))), + None => { + // ws connection closed + return Poll::Ready(None); + } } } } From 6f2392f78ae851e2acf33df8e9764cc299d837db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89mile=20Fugulin?= Date: Thu, 24 Oct 2024 02:22:26 -0400 Subject: [PATCH 6/6] Rollback PDL to stable and update fetcher to match (#245) * Fix lint issues * Add comment on CDP version * Update revision of fetcher * Revert CDP and fetcher to stable --- chromiumoxide_cdp/browser_protocol.pdl | 8 +- chromiumoxide_cdp/js_protocol.pdl | 5 +- chromiumoxide_cdp/src/cdp.rs | 89 ++++++++++++++------ chromiumoxide_cdp/src/lib.rs | 16 +++- chromiumoxide_cdp/tests/generate.rs | 2 +- chromiumoxide_fetcher/Cargo.toml | 3 + chromiumoxide_fetcher/src/browser/options.rs | 3 +- chromiumoxide_fetcher/src/browser/zip.rs | 2 +- chromiumoxide_fetcher/src/lib.rs | 19 ++++- chromiumoxide_fetcher/src/platform.rs | 3 +- chromiumoxide_fetcher/src/revision.rs | 2 +- chromiumoxide_fetcher/tests/verify.rs | 57 +++++++++++++ 12 files changed, 171 insertions(+), 38 deletions(-) create mode 100644 chromiumoxide_fetcher/tests/verify.rs diff --git a/chromiumoxide_cdp/browser_protocol.pdl b/chromiumoxide_cdp/browser_protocol.pdl index 07e17ba5..6f07fe34 100644 --- a/chromiumoxide_cdp/browser_protocol.pdl +++ b/chromiumoxide_cdp/browser_protocol.pdl @@ -532,8 +532,6 @@ experimental domain Audits WarnDomainNonASCII WarnThirdPartyPhaseout WarnCrossSiteRedirectDowngradeChangesInclusion - WarnDeprecationTrialMetadata - WarnThirdPartyCookieHeuristic type CookieOperation extends string enum @@ -4223,6 +4221,7 @@ domain Emulation gyroscope linear-acceleration magnetometer + proximity relative-orientation experimental type SensorMetadata extends object @@ -7925,8 +7924,8 @@ experimental domain Overlay # True for showing hit-test borders boolean show - # Deprecated, no longer has any effect. - deprecated command setShowWebVitals + # Request that backend shows an overlay with web vital metrics. + command setShowWebVitals parameters boolean show @@ -8090,7 +8089,6 @@ domain Page deferred-fetch digital-credentials-get direct-sockets - direct-sockets-private display-capture document-domain encrypted-media diff --git a/chromiumoxide_cdp/js_protocol.pdl b/chromiumoxide_cdp/js_protocol.pdl index b106a709..8dad9c98 100644 --- a/chromiumoxide_cdp/js_protocol.pdl +++ b/chromiumoxide_cdp/js_protocol.pdl @@ -606,6 +606,7 @@ domain Debugger properties # Type of the debug symbols. enum type + None SourceMap EmbeddedDWARF ExternalDWARF @@ -688,8 +689,8 @@ domain Debugger experimental optional integer codeOffset # The language of the script. experimental optional Debugger.ScriptLanguage scriptLanguage - # If the scriptLanguage is WebAssembly, the source of debug symbols for the module. - experimental optional array of Debugger.DebugSymbols debugSymbols + # If the scriptLanguage is WebASsembly, the source of debug symbols for the module. + experimental optional Debugger.DebugSymbols debugSymbols # The name the embedder supplied for this script. experimental optional string embedderName diff --git a/chromiumoxide_cdp/src/cdp.rs b/chromiumoxide_cdp/src/cdp.rs index 1bb712ae..c3f55df0 100644 --- a/chromiumoxide_cdp/src/cdp.rs +++ b/chromiumoxide_cdp/src/cdp.rs @@ -7958,6 +7958,8 @@ pub mod js_protocol { #[doc = "Type of the debug symbols."] #[derive(Debug, Clone, PartialEq, Eq, Hash, Serialize, Deserialize)] pub enum DebugSymbolsType { + #[serde(rename = "None")] + None, #[serde(rename = "SourceMap")] SourceMap, #[serde(rename = "EmbeddedDWARF")] @@ -7968,6 +7970,7 @@ pub mod js_protocol { impl AsRef for DebugSymbolsType { fn as_ref(&self) -> &str { match self { + DebugSymbolsType::None => "None", DebugSymbolsType::SourceMap => "SourceMap", DebugSymbolsType::EmbeddedDwarf => "EmbeddedDWARF", DebugSymbolsType::ExternalDwarf => "ExternalDWARF", @@ -7978,6 +7981,7 @@ pub mod js_protocol { type Err = String; fn from_str(s: &str) -> Result { match s { + "None" | "none" => Ok(DebugSymbolsType::None), "SourceMap" | "sourcemap" => Ok(DebugSymbolsType::SourceMap), "EmbeddedDWARF" | "EmbeddedDwarf" | "embeddeddwarf" => { Ok(DebugSymbolsType::EmbeddedDwarf) @@ -11121,10 +11125,10 @@ pub mod js_protocol { #[serde(default)] #[serde(deserialize_with = "super::super::de::deserialize_from_str_optional")] pub script_language: Option, - #[doc = "If the scriptLanguage is WebAssembly, the source of debug symbols for the module."] + #[doc = "If the scriptLanguage is WebASsembly, the source of debug symbols for the module."] #[serde(rename = "debugSymbols")] #[serde(skip_serializing_if = "Option::is_none")] - pub debug_symbols: Option>, + pub debug_symbols: Option, #[doc = "The name the embedder supplied for this script."] #[serde(rename = "embedderName")] #[serde(skip_serializing_if = "Option::is_none")] @@ -21303,10 +21307,6 @@ pub mod browser_protocol { WarnThirdPartyPhaseout, #[serde(rename = "WarnCrossSiteRedirectDowngradeChangesInclusion")] WarnCrossSiteRedirectDowngradeChangesInclusion, - #[serde(rename = "WarnDeprecationTrialMetadata")] - WarnDeprecationTrialMetadata, - #[serde(rename = "WarnThirdPartyCookieHeuristic")] - WarnThirdPartyCookieHeuristic, } impl AsRef for CookieWarningReason { fn as_ref(&self) -> &str { @@ -21341,12 +21341,6 @@ pub mod browser_protocol { CookieWarningReason::WarnCrossSiteRedirectDowngradeChangesInclusion => { "WarnCrossSiteRedirectDowngradeChangesInclusion" } - CookieWarningReason::WarnDeprecationTrialMetadata => { - "WarnDeprecationTrialMetadata" - } - CookieWarningReason::WarnThirdPartyCookieHeuristic => { - "WarnThirdPartyCookieHeuristic" - } } } } @@ -21397,12 +21391,6 @@ pub mod browser_protocol { | "warncrosssiteredirectdowngradechangesinclusion" => { Ok(CookieWarningReason::WarnCrossSiteRedirectDowngradeChangesInclusion) } - "WarnDeprecationTrialMetadata" | "warndeprecationtrialmetadata" => { - Ok(CookieWarningReason::WarnDeprecationTrialMetadata) - } - "WarnThirdPartyCookieHeuristic" | "warnthirdpartycookieheuristic" => { - Ok(CookieWarningReason::WarnThirdPartyCookieHeuristic) - } _ => Err(s.to_string()), } } @@ -47627,6 +47615,8 @@ pub mod browser_protocol { LinearAcceleration, #[serde(rename = "magnetometer")] Magnetometer, + #[serde(rename = "proximity")] + Proximity, #[serde(rename = "relative-orientation")] RelativeOrientation, } @@ -47640,6 +47630,7 @@ pub mod browser_protocol { SensorType::Gyroscope => "gyroscope", SensorType::LinearAcceleration => "linear-acceleration", SensorType::Magnetometer => "magnetometer", + SensorType::Proximity => "proximity", SensorType::RelativeOrientation => "relative-orientation", } } @@ -47659,6 +47650,7 @@ pub mod browser_protocol { Ok(SensorType::LinearAcceleration) } "magnetometer" | "Magnetometer" => Ok(SensorType::Magnetometer), + "proximity" | "Proximity" => Ok(SensorType::Proximity), "relative-orientation" | "RelativeOrientation" => { Ok(SensorType::RelativeOrientation) } @@ -70361,6 +70353,61 @@ pub mod browser_protocol { impl chromiumoxide_types::Command for SetShowScrollBottleneckRectsParams { type Response = SetShowScrollBottleneckRectsReturns; } + #[doc = "Request that backend shows an overlay with web vital metrics.\n[setShowWebVitals](https://chromedevtools.github.io/devtools-protocol/tot/Overlay/#method-setShowWebVitals)"] + #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] + pub struct SetShowWebVitalsParams { + #[serde(rename = "show")] + pub show: bool, + } + impl SetShowWebVitalsParams { + pub fn new(show: impl Into) -> Self { + Self { show: show.into() } + } + } + impl SetShowWebVitalsParams { + pub fn builder() -> SetShowWebVitalsParamsBuilder { + SetShowWebVitalsParamsBuilder::default() + } + } + #[derive(Default, Clone)] + pub struct SetShowWebVitalsParamsBuilder { + show: Option, + } + impl SetShowWebVitalsParamsBuilder { + pub fn show(mut self, show: impl Into) -> Self { + self.show = Some(show.into()); + self + } + pub fn build(self) -> Result { + Ok(SetShowWebVitalsParams { + show: self.show.ok_or_else(|| { + format!("Field `{}` is mandatory.", std::stringify!(show)) + })?, + }) + } + } + impl SetShowWebVitalsParams { + pub const IDENTIFIER: &'static str = "Overlay.setShowWebVitals"; + } + impl chromiumoxide_types::Method for SetShowWebVitalsParams { + fn identifier(&self) -> chromiumoxide_types::MethodId { + Self::IDENTIFIER.into() + } + } + impl chromiumoxide_types::MethodType for SetShowWebVitalsParams { + fn method_id() -> chromiumoxide_types::MethodId + where + Self: Sized, + { + Self::IDENTIFIER.into() + } + } + #[doc = "Request that backend shows an overlay with web vital metrics.\n[setShowWebVitals](https://chromedevtools.github.io/devtools-protocol/tot/Overlay/#method-setShowWebVitals)"] + #[derive(Debug, Clone, PartialEq, Default, Serialize, Deserialize)] + pub struct SetShowWebVitalsReturns {} + impl chromiumoxide_types::Command for SetShowWebVitalsParams { + type Response = SetShowWebVitalsReturns; + } #[doc = "Paints viewport size upon main frame resize.\n[setShowViewportSizeOnResize](https://chromedevtools.github.io/devtools-protocol/tot/Overlay/#method-setShowViewportSizeOnResize)"] #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] pub struct SetShowViewportSizeOnResizeParams { @@ -71124,8 +71171,6 @@ pub mod browser_protocol { DigitalCredentialsGet, #[serde(rename = "direct-sockets")] DirectSockets, - #[serde(rename = "direct-sockets-private")] - DirectSocketsPrivate, #[serde(rename = "display-capture")] DisplayCapture, #[serde(rename = "document-domain")] @@ -71274,7 +71319,6 @@ pub mod browser_protocol { PermissionsPolicyFeature::DeferredFetch => "deferred-fetch", PermissionsPolicyFeature::DigitalCredentialsGet => "digital-credentials-get", PermissionsPolicyFeature::DirectSockets => "direct-sockets", - PermissionsPolicyFeature::DirectSocketsPrivate => "direct-sockets-private", PermissionsPolicyFeature::DisplayCapture => "display-capture", PermissionsPolicyFeature::DocumentDomain => "document-domain", PermissionsPolicyFeature::EncryptedMedia => "encrypted-media", @@ -71437,9 +71481,6 @@ pub mod browser_protocol { "direct-sockets" | "DirectSockets" => { Ok(PermissionsPolicyFeature::DirectSockets) } - "direct-sockets-private" | "DirectSocketsPrivate" => { - Ok(PermissionsPolicyFeature::DirectSocketsPrivate) - } "display-capture" | "DisplayCapture" => { Ok(PermissionsPolicyFeature::DisplayCapture) } diff --git a/chromiumoxide_cdp/src/lib.rs b/chromiumoxide_cdp/src/lib.rs index 7fbd12d8..933da070 100644 --- a/chromiumoxide_cdp/src/lib.rs +++ b/chromiumoxide_cdp/src/lib.rs @@ -14,8 +14,22 @@ use crate::revision::Revision; pub mod cdp; pub mod revision; +// The CDP is not a stable API, it changes from time to time and sometimes +// in backward incompatible ways. +// +// When the CDP changes, the chromium team pushes a commit to the repository +// https://github.com/ChromeDevTools/devtools-protocol. There you can find +// valid CDP revisions. That number corresponds to a chromium revision. +// It is a monotonic version number referring to the chromium master commit position. +// +// To map a revision to a chromium version you can use the site +// https://chromiumdash.appspot.com/commits. We should not necessarily +// always use the latest revision, as this will mean only the newest chromium +// browser can be used. Apart from breaking changes, using an older CDP +// is generally a good idea. + /// Currently built CDP revision -pub const CURRENT_REVISION: Revision = Revision(1359167); +pub const CURRENT_REVISION: Revision = Revision(1354347); /// convenience fixups impl Default for CreateTargetParams { diff --git a/chromiumoxide_cdp/tests/generate.rs b/chromiumoxide_cdp/tests/generate.rs index 9c49e70e..09faf760 100644 --- a/chromiumoxide_cdp/tests/generate.rs +++ b/chromiumoxide_cdp/tests/generate.rs @@ -18,7 +18,7 @@ fn generated_code_is_fresh() { let tmp = tempfile::tempdir().unwrap(); Generator::default() - .out_dir(&tmp.path()) + .out_dir(tmp.path()) .experimental(env::var("CDP_NO_EXPERIMENTAL").is_err()) .deprecated(env::var("CDP_DEPRECATED").is_ok()) .compile_pdls(&[js_proto, browser_proto]) diff --git a/chromiumoxide_fetcher/Cargo.toml b/chromiumoxide_fetcher/Cargo.toml index 359ba34a..1eabc8ca 100644 --- a/chromiumoxide_fetcher/Cargo.toml +++ b/chromiumoxide_fetcher/Cargo.toml @@ -11,6 +11,9 @@ repository = "https://github.com/mattsse/chromiumoxide" readme = "../README.md" include = ["src/**/*", "LICENSE-*"] +[dev-dependencies] +ureq = "2.10.0" + [dependencies] thiserror = "1" anyhow = "1" diff --git a/chromiumoxide_fetcher/src/browser/options.rs b/chromiumoxide_fetcher/src/browser/options.rs index 39d532b1..3ac2c481 100644 --- a/chromiumoxide_fetcher/src/browser/options.rs +++ b/chromiumoxide_fetcher/src/browser/options.rs @@ -36,6 +36,7 @@ impl BrowserFetcherOptions { BrowserFetcherOptionsBuilder::default() } + #[allow(clippy::should_implement_trait)] pub fn default() -> Result { Self::builder().build() } @@ -84,7 +85,7 @@ impl BrowserFetcherOptionsBuilder { let platform = self.platform - .or_else(|| Platform::current()) + .or_else(Platform::current) .ok_or(FetcherError::UnsupportedOs( std::env::consts::OS, std::env::consts::ARCH, diff --git a/chromiumoxide_fetcher/src/browser/zip.rs b/chromiumoxide_fetcher/src/browser/zip.rs index 97fbe613..1b3b721e 100644 --- a/chromiumoxide_fetcher/src/browser/zip.rs +++ b/chromiumoxide_fetcher/src/browser/zip.rs @@ -48,7 +48,7 @@ impl ZipArchive { } else { if let Some(p) = outpath.parent() { if !p.exists() { - fs::create_dir_all(&p)?; + fs::create_dir_all(p)?; } } diff --git a/chromiumoxide_fetcher/src/lib.rs b/chromiumoxide_fetcher/src/lib.rs index 7067eb07..d298a003 100644 --- a/chromiumoxide_fetcher/src/lib.rs +++ b/chromiumoxide_fetcher/src/lib.rs @@ -3,8 +3,25 @@ pub use self::error::FetcherError; pub use self::platform::Platform; pub use self::revision::Revision; +// The chromium revision is hard to get right and the relation to the CDP revision +// even more so, so here are some guidances. +// +// We used to use the revision of Puppeteer, but they switched to chrome-for-testing. +// This means we have to check things ourself. The chromium revision should at least +// as great as the CDP revision otherwise they won't be compatible. +// Not all revisions of chromium have builds for all platforms. +// +// This is essentially a bruteforce process. You can use the test `find_revision_available` +// to find a revision that is available for all platforms. We recommend setting the `min` +// to the current CDP revision and the max to max revision of stable chromium. +// See https://chromiumdash.appspot.com/releases for the latest stable revision. +// +// In general, we should also try to ship as close as a stable version of chromium if possible. +// The CDP should also be a bit older than that stable version. +// To map a revision to a chromium version you can use the site https://chromiumdash.appspot.com/commits. + /// Currently downloaded chromium revision -pub const CURRENT_REVISION: Revision = Revision(1045629); +pub const CURRENT_REVISION: Revision = Revision(1355984); mod browser; mod error; diff --git a/chromiumoxide_fetcher/src/platform.rs b/chromiumoxide_fetcher/src/platform.rs index 47bfd25a..e969ec04 100644 --- a/chromiumoxide_fetcher/src/platform.rs +++ b/chromiumoxide_fetcher/src/platform.rs @@ -13,7 +13,8 @@ pub enum Platform { } impl Platform { - pub(crate) fn download_url(&self, host: &str, revision: &Revision) -> String { + #[doc(hidden)] // internal API + pub fn download_url(&self, host: &str, revision: &Revision) -> String { let archive = self.archive_name(revision); let name = match self { Self::Linux => "Linux_x64", diff --git a/chromiumoxide_fetcher/src/revision.rs b/chromiumoxide_fetcher/src/revision.rs index 8768fc90..5fedab57 100644 --- a/chromiumoxide_fetcher/src/revision.rs +++ b/chromiumoxide_fetcher/src/revision.rs @@ -24,7 +24,7 @@ impl std::str::FromStr for Revision { type Err = ParseIntError; fn from_str(s: &str) -> Result { - s.parse::().map(|v| Self(v)) + s.parse::().map(Self) } } diff --git a/chromiumoxide_fetcher/tests/verify.rs b/chromiumoxide_fetcher/tests/verify.rs new file mode 100644 index 00000000..732ef375 --- /dev/null +++ b/chromiumoxide_fetcher/tests/verify.rs @@ -0,0 +1,57 @@ +use chromiumoxide_fetcher::{Platform, Revision, CURRENT_REVISION}; + +// Check if the chosen revision has a build available for all platforms. +// That not always the case, that is why we need to make sure of it. +#[test] +fn verify_revision_available() { + for platform in &[ + Platform::Linux, + Platform::Mac, + Platform::MacArm, + Platform::Win32, + Platform::Win64, + ] { + let res = + ureq::head(&platform.download_url("https://storage.googleapis.com", &CURRENT_REVISION)) + .call(); + + if res.is_err() { + panic!( + "Revision {} is not available for {:?}", + CURRENT_REVISION, platform + ); + } + } +} + +#[ignore] +#[test] +fn find_revision_available() { + let min = 1355000; // Enter the minimum revision + let max = 1356013; // Enter the maximum revision + + 'outer: for revision in (min..max).rev() { + println!("Checking revision {}", revision); + + for platform in &[ + Platform::Linux, + Platform::Mac, + Platform::MacArm, + Platform::Win32, + Platform::Win64, + ] { + let res = ureq::head( + &platform.download_url("https://storage.googleapis.com", &Revision::from(revision)), + ) + .call(); + + if res.is_err() { + println!("Revision {} is not available for {:?}", revision, platform); + continue 'outer; + } + } + + println!("Found revision {}", revision); + break; + } +}