diff --git a/Cargo.toml b/Cargo.toml
index b18aa326..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 }
@@ -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/chromiumoxide_cdp/browser_protocol.pdl b/chromiumoxide_cdp/browser_protocol.pdl
index 77608eef..6f07fe34 100644
--- a/chromiumoxide_cdp/browser_protocol.pdl
+++ b/chromiumoxide_cdp/browser_protocol.pdl
@@ -743,6 +743,7 @@ experimental domain Audits
       NoRegisterTriggerHeader
       NoRegisterOsSourceHeader
       NoRegisterOsTriggerHeader
+      NavigationRegistrationUniqueScopeAlreadySet
 
   type SharedDictionaryError extends string
     enum
@@ -1123,7 +1124,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 +1136,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 +1393,7 @@ domain Browser
       videoCapturePanTiltZoom
       wakeLockScreen
       wakeLockSystem
+      webAppInstallation
       windowManagement
 
   experimental type PermissionSetting extends string
@@ -2651,6 +2679,7 @@ domain DOM
       after
       marker
       backdrop
+      column
       selection
       search-text
       target-text
@@ -2660,6 +2689,8 @@ domain DOM
       first-line-inherited
       scroll-marker
       scroll-marker-group
+      scroll-next-button
+      scroll-prev-button
       scrollbar
       scrollbar-thumb
       scrollbar-button
@@ -2673,6 +2704,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 +2814,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 +3332,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 +3504,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
@@ -5482,12 +5540,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 +5630,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 +6376,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 +6386,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
 
@@ -8008,6 +8084,7 @@ domain Page
       clipboard-read
       clipboard-write
       compute-pressure
+      controlled-frame
       cross-origin-isolated
       deferred-fetch
       digital-credentials-get
@@ -8037,6 +8114,7 @@ domain Page
       otp-credentials
       payment
       picture-in-picture
+      popins
       private-aggregation
       private-state-token-issuance
       private-state-token-redemption
@@ -8057,6 +8135,7 @@ domain Page
       usb
       usb-unrestricted
       vertical-scroll
+      web-app-installation
       web-printing
       web-share
       window-management
@@ -8369,14 +8448,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 +9235,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 +9499,7 @@ domain Page
       ContentWebUSB
       ContentMediaSessionService
       ContentScreenReader
+      ContentDiscarded
 
       # See components/back_forward_cache/back_forward_cache_disable.h for explanations.
       EmbedderPopupBlockerTabHelper
@@ -9496,6 +9585,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 +10683,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 +10711,7 @@ experimental domain Storage
       AttributionReportingTriggerDataMatching triggerDataMatching
       SignedInt64AsBase10 destinationLimitPriority
       AttributionReportingAggregatableDebugReportingConfig aggregatableDebugReportingConfig
+      optional AttributionScopesData scopesData
 
   experimental type AttributionReportingSourceRegistrationResult extends string
     enum
@@ -10620,7 +10727,9 @@ experimental domain Storage
       destinationBothLimitsReached
       reportingOriginsPerSiteLimitReached
       exceedsMaxChannelCapacity
+      exceedsMaxScopesChannelCapacity
       exceedsMaxTriggerStateCardinality
+      exceedsMaxEventStatesLimit
       destinationPerDayReportingLimitReached
 
   experimental event attributionReportingSourceRegistered
@@ -10679,6 +10788,7 @@ experimental domain Storage
       AttributionReportingSourceRegistrationTimeConfig sourceRegistrationTimeConfig
       optional string triggerContextId
       AttributionReportingAggregatableDebugReportingConfig aggregatableDebugReportingConfig
+      array of string scopes
 
   experimental type AttributionReportingEventLevelResult extends string
     enum
@@ -12330,7 +12440,6 @@ experimental domain Preload
       PrefetchFailedMIMENotSupported
       PrefetchFailedNetError
       PrefetchFailedNon2XX
-      PrefetchFailedPerPageLimitExceeded
       PrefetchEvictedAfterCandidateRemoved
       PrefetchEvictedForNewerPrefetch
       PrefetchHeldback
@@ -12612,3 +12721,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/src/cdp.rs b/chromiumoxide_cdp/src/cdp.rs
index 3cd1fc2d..c3f55df0 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<super::browser_protocol::dom::EventPseudoElementAdded>),
         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<super::browser_protocol::page::EventFrameNavigated>),
         PageDocumentOpened(Box<super::browser_protocol::page::EventDocumentOpened>),
         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<CdpEvent> for super::browser_protocol::dom::EventScrollableFlagUpdated {
+        type Error = CdpEvent;
+        fn try_from(event: CdpEvent) -> Result<Self, Self::Error> {
+            match event {
+                CdpEvent::DomScrollableFlagUpdated(val) => Ok(val),
+                _ => Err(event),
+            }
+        }
+    }
+    impl From<super::browser_protocol::dom::EventScrollableFlagUpdated> for CdpEvent {
+        fn from(el: super::browser_protocol::dom::EventScrollableFlagUpdated) -> CdpEvent {
+            CdpEvent::DomScrollableFlagUpdated(el)
+        }
+    }
     impl std::convert::TryFrom<CdpEvent> for super::browser_protocol::dom::EventPseudoElementRemoved {
         type Error = CdpEvent;
         fn try_from(event: CdpEvent) -> Result<Self, Self::Error> {
@@ -2790,6 +2814,22 @@ pub mod events {
             CdpEvent::PageFrameDetached(el)
         }
     }
+    impl std::convert::TryFrom<CdpEvent>
+        for super::browser_protocol::page::EventFrameSubtreeWillBeDetached
+    {
+        type Error = CdpEvent;
+        fn try_from(event: CdpEvent) -> Result<Self, Self::Error> {
+            match event {
+                CdpEvent::PageFrameSubtreeWillBeDetached(val) => Ok(val),
+                _ => Err(event),
+            }
+        }
+    }
+    impl From<super::browser_protocol::page::EventFrameSubtreeWillBeDetached> for CdpEvent {
+        fn from(el: super::browser_protocol::page::EventFrameSubtreeWillBeDetached) -> CdpEvent {
+            CdpEvent::PageFrameSubtreeWillBeDetached(el)
+        }
+    }
     impl std::convert::TryFrom<CdpEvent> for super::browser_protocol::page::EventFrameNavigated {
         type Error = CdpEvent;
         fn try_from(event: CdpEvent) -> Result<Self, Self::Error> {
@@ -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);
                 }
@@ -22654,16 +22726,18 @@ pub mod browser_protocol {
             NoRegisterOsSourceHeader,
             #[serde(rename = "NoRegisterOsTriggerHeader")]
             NoRegisterOsTriggerHeader,
+            #[serde(rename = "NavigationRegistrationUniqueScopeAlreadySet")]
+            NavigationRegistrationUniqueScopeAlreadySet,
         }
         impl AsRef<str> 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<Self, Self::Err> {
-                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 +25386,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 +25474,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 +25510,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<String>,
+        }
+        impl RemoveStorageItemsParams {
+            pub fn new(
+                id: impl Into<String>,
+                storage_area: impl Into<StorageArea>,
+                keys: Vec<String>,
+            ) -> 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<String>,
+            storage_area: Option<StorageArea>,
+            keys: Option<Vec<String>>,
+        }
+        impl RemoveStorageItemsParamsBuilder {
+            pub fn id(mut self, id: impl Into<String>) -> Self {
+                self.id = Some(id.into());
+                self
+            }
+            pub fn storage_area(mut self, storage_area: impl Into<StorageArea>) -> Self {
+                self.storage_area = Some(storage_area.into());
+                self
+            }
+            pub fn key(mut self, key: impl Into<String>) -> Self {
+                let v = self.keys.get_or_insert(Vec::new());
+                v.push(key.into());
+                self
+            }
+            pub fn keys<I, S>(mut self, keys: I) -> Self
+            where
+                I: IntoIterator<Item = S>,
+                S: Into<String>,
+            {
+                let v = self.keys.get_or_insert(Vec::new());
+                for val in keys {
+                    v.push(val.into());
+                }
+                self
+            }
+            pub fn build(self) -> Result<RemoveStorageItemsParams, String> {
+                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<String>, storage_area: impl Into<StorageArea>) -> 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<String>,
+            storage_area: Option<StorageArea>,
+        }
+        impl ClearStorageItemsParamsBuilder {
+            pub fn id(mut self, id: impl Into<String>) -> Self {
+                self.id = Some(id.into());
+                self
+            }
+            pub fn storage_area(mut self, storage_area: impl Into<StorageArea>) -> Self {
+                self.storage_area = Some(storage_area.into());
+                self
+            }
+            pub fn build(self) -> Result<ClearStorageItemsParams, String> {
+                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<String>,
+                storage_area: impl Into<StorageArea>,
+                values: impl Into<serde_json::Value>,
+            ) -> 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<String>,
+            storage_area: Option<StorageArea>,
+            values: Option<serde_json::Value>,
+        }
+        impl SetStorageItemsParamsBuilder {
+            pub fn id(mut self, id: impl Into<String>) -> Self {
+                self.id = Some(id.into());
+                self
+            }
+            pub fn storage_area(mut self, storage_area: impl Into<StorageArea>) -> Self {
+                self.storage_area = Some(storage_area.into());
+                self
+            }
+            pub fn values(mut self, values: impl Into<serde_json::Value>) -> Self {
+                self.values = Some(values.into());
+                self
+            }
+            pub fn build(self) -> Result<SetStorageItemsParams, String> {
+                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 +27163,8 @@ pub mod browser_protocol {
             WakeLockScreen,
             #[serde(rename = "wakeLockSystem")]
             WakeLockSystem,
+            #[serde(rename = "webAppInstallation")]
+            WebAppInstallation,
             #[serde(rename = "windowManagement")]
             WindowManagement,
         }
@@ -26865,6 +27199,7 @@ pub mod browser_protocol {
                     PermissionType::VideoCapturePanTiltZoom => "videoCapturePanTiltZoom",
                     PermissionType::WakeLockScreen => "wakeLockScreen",
                     PermissionType::WakeLockSystem => "wakeLockSystem",
+                    PermissionType::WebAppInstallation => "webAppInstallation",
                     PermissionType::WindowManagement => "windowManagement",
                 }
             }
@@ -26941,6 +27276,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 +36842,8 @@ pub mod browser_protocol {
             Marker,
             #[serde(rename = "backdrop")]
             Backdrop,
+            #[serde(rename = "column")]
+            Column,
             #[serde(rename = "selection")]
             Selection,
             #[serde(rename = "search-text")]
@@ -36522,6 +36862,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 +36892,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<str> for PseudoType {
             fn as_ref(&self) -> &str {
@@ -36558,6 +36914,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 +36924,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 +36939,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 +36958,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 +36972,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 +36997,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 +37282,9 @@ pub mod browser_protocol {
             #[serde(rename = "assignedSlot")]
             #[serde(skip_serializing_if = "Option::is_none")]
             pub assigned_slot: Option<BackendNode>,
+            #[serde(rename = "isScrollable")]
+            #[serde(skip_serializing_if = "Option::is_none")]
+            pub is_scrollable: Option<bool>,
         }
         impl Node {
             pub fn builder() -> NodeBuilder {
@@ -36940,6 +37323,7 @@ pub mod browser_protocol {
             is_svg: Option<bool>,
             compatibility_mode: Option<CompatibilityMode>,
             assigned_slot: Option<BackendNode>,
+            is_scrollable: Option<bool>,
         }
         impl NodeBuilder {
             pub fn node_id(mut self, node_id: impl Into<NodeId>) -> Self {
@@ -37125,6 +37509,10 @@ pub mod browser_protocol {
                 self.assigned_slot = Some(assigned_slot.into());
                 self
             }
+            pub fn is_scrollable(mut self, is_scrollable: impl Into<bool>) -> Self {
+                self.is_scrollable = Some(is_scrollable.into());
+                self
+            }
             pub fn build(self) -> Result<Node, String> {
                 Ok(Node {
                     node_id: self.node_id.ok_or_else(|| {
@@ -37169,12 +37557,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<NodeId>,
+        }
+        impl DetachedElementInfo {
+            pub fn new(tree_node: impl Into<Node>, retained_node_ids: Vec<NodeId>) -> 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<Node>,
+            retained_node_ids: Option<Vec<NodeId>>,
+        }
+        impl DetachedElementInfoBuilder {
+            pub fn tree_node(mut self, tree_node: impl Into<Node>) -> Self {
+                self.tree_node = Some(tree_node.into());
+                self
+            }
+            pub fn retained_node_id(mut self, retained_node_id: impl Into<NodeId>) -> Self {
+                let v = self.retained_node_ids.get_or_insert(Vec::new());
+                v.push(retained_node_id.into());
+                self
+            }
+            pub fn retained_node_ids<I, S>(mut self, retained_node_ids: I) -> Self
+            where
+                I: IntoIterator<Item = S>,
+                S: Into<NodeId>,
+            {
+                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<DetachedElementInfo, String> {
+                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 +41693,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<DetachedElementInfo>,
+        }
+        impl GetDetachedDomNodesReturns {
+            pub fn new(detached_nodes: Vec<DetachedElementInfo>) -> Self {
+                Self { detached_nodes }
+            }
+        }
+        impl GetDetachedDomNodesReturns {
+            pub fn builder() -> GetDetachedDomNodesReturnsBuilder {
+                GetDetachedDomNodesReturnsBuilder::default()
+            }
+        }
+        #[derive(Default, Clone)]
+        pub struct GetDetachedDomNodesReturnsBuilder {
+            detached_nodes: Option<Vec<DetachedElementInfo>>,
+        }
+        impl GetDetachedDomNodesReturnsBuilder {
+            pub fn detached_node(mut self, detached_node: impl Into<DetachedElementInfo>) -> Self {
+                let v = self.detached_nodes.get_or_insert(Vec::new());
+                v.push(detached_node.into());
+                self
+            }
+            pub fn detached_nodes<I, S>(mut self, detached_nodes: I) -> Self
+            where
+                I: IntoIterator<Item = S>,
+                S: Into<DetachedElementInfo>,
+            {
+                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<GetDetachedDomNodesReturns, String> {
+                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 +42786,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 {
@@ -56881,6 +57430,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<String>, count: impl Into<i64>) -> Self {
+                Self {
+                    name: name.into(),
+                    count: count.into(),
+                }
+            }
+        }
+        impl DomCounter {
+            pub fn builder() -> DomCounterBuilder {
+                DomCounterBuilder::default()
+            }
+        }
+        #[derive(Default, Clone)]
+        pub struct DomCounterBuilder {
+            name: Option<String>,
+            count: Option<i64>,
+        }
+        impl DomCounterBuilder {
+            pub fn name(mut self, name: impl Into<String>) -> Self {
+                self.name = Some(name.into());
+                self
+            }
+            pub fn count(mut self, count: impl Into<i64>) -> Self {
+                self.count = Some(count.into());
+                self
+            }
+            pub fn build(self) -> Result<DomCounter, String> {
+                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 +57500,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 +57567,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<DomCounter>,
+        }
+        impl GetDomCountersForLeakDetectionReturns {
+            pub fn new(counters: Vec<DomCounter>) -> Self {
+                Self { counters }
+            }
+        }
+        impl GetDomCountersForLeakDetectionReturns {
+            pub fn builder() -> GetDomCountersForLeakDetectionReturnsBuilder {
+                GetDomCountersForLeakDetectionReturnsBuilder::default()
+            }
+        }
+        #[derive(Default, Clone)]
+        pub struct GetDomCountersForLeakDetectionReturnsBuilder {
+            counters: Option<Vec<DomCounter>>,
+        }
+        impl GetDomCountersForLeakDetectionReturnsBuilder {
+            pub fn counter(mut self, counter: impl Into<DomCounter>) -> Self {
+                let v = self.counters.get_or_insert(Vec::new());
+                v.push(counter.into());
+                self
+            }
+            pub fn counters<I, S>(mut self, counters: I) -> Self
+            where
+                I: IntoIterator<Item = S>,
+                S: Into<DomCounter>,
+            {
+                let v = self.counters.get_or_insert(Vec::new());
+                for val in counters {
+                    v.push(val.into());
+                }
+                self
+            }
+            pub fn build(self) -> Result<GetDomCountersForLeakDetectionReturns, String> {
+                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 +57655,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 +61567,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 +61582,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 +61593,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 +61616,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 +61631,6 @@ pub mod browser_protocol {
                     "TopLevelStorageAccess" | "toplevelstorageaccess" => {
                         Ok(CookieExemptionReason::TopLevelStorageAccess)
                     }
-                    "CorsOptIn" | "corsoptin" => Ok(CookieExemptionReason::CorsOptIn),
                     "Scheme" | "scheme" => Ok(CookieExemptionReason::Scheme),
                     _ => Err(s.to_string()),
                 }
@@ -70482,6 +71161,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")]
@@ -70540,6 +71221,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 +71263,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,6 +71314,7 @@ 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",
@@ -70666,6 +71352,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 +71381,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 +71466,9 @@ pub mod browser_protocol {
                     "compute-pressure" | "ComputePressure" => {
                         Ok(PermissionsPolicyFeature::ComputePressure)
                     }
+                    "controlled-frame" | "ControlledFrame" => {
+                        Ok(PermissionsPolicyFeature::ControlledFrame)
+                    }
                     "cross-origin-isolated" | "CrossOriginIsolated" => {
                         Ok(PermissionsPolicyFeature::CrossOriginIsolated)
                     }
@@ -70841,6 +71532,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 +71579,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 +73490,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<str> 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 +73531,9 @@ pub mod browser_protocol {
             type Err = String;
             fn from_str(s: &str) -> Result<Self, Self::Err> {
                 match s {
+                    "anchorClick" | "AnchorClick" | "anchorclick" => {
+                        Ok(ClientNavigationReason::AnchorClick)
+                    }
                     "formSubmissionGet" | "FormSubmissionGet" | "formsubmissionget" => {
                         Ok(ClientNavigationReason::FormSubmissionGet)
                     }
@@ -72839,18 +73543,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 +75123,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 +75161,13 @@ pub mod browser_protocol {
         }
         impl AsRef<str> 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<Self, Self::Err> {
-                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 +79328,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 +79693,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<str> 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<Self, Self::Err> {
+                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 +84366,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<String>,
+            #[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<String>,
+                limit: impl Into<f64>,
+                max_event_states: impl Into<f64>,
+            ) -> 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<Vec<String>>,
+            limit: Option<f64>,
+            max_event_states: Option<f64>,
+        }
+        impl AttributionScopesDataBuilder {
+            pub fn value(mut self, value: impl Into<String>) -> Self {
+                let v = self.values.get_or_insert(Vec::new());
+                v.push(value.into());
+                self
+            }
+            pub fn values<I, S>(mut self, values: I) -> Self
+            where
+                I: IntoIterator<Item = S>,
+                S: Into<String>,
+            {
+                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<f64>) -> Self {
+                self.limit = Some(limit.into());
+                self
+            }
+            pub fn max_event_states(mut self, max_event_states: impl Into<f64>) -> Self {
+                self.max_event_states = Some(max_event_states.into());
+                self
+            }
+            pub fn build(self) -> Result<AttributionScopesData, String> {
+                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 +84489,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<AttributionScopesData>,
         }
         impl AttributionReportingSourceRegistration {
             pub fn builder() -> AttributionReportingSourceRegistrationBuilder {
@@ -83663,6 +84517,7 @@ pub mod browser_protocol {
             destination_limit_priority: Option<SignedInt64AsBase10>,
             aggregatable_debug_reporting_config:
                 Option<AttributionReportingAggregatableDebugReportingConfig>,
+            scopes_data: Option<AttributionScopesData>,
         }
         impl AttributionReportingSourceRegistrationBuilder {
             pub fn time(mut self, time: impl Into<super::network::TimeSinceEpoch>) -> Self {
@@ -83801,6 +84656,10 @@ pub mod browser_protocol {
                     Some(aggregatable_debug_reporting_config.into());
                 self
             }
+            pub fn scopes_data(mut self, scopes_data: impl Into<AttributionScopesData>) -> Self {
+                self.scopes_data = Some(scopes_data.into());
+                self
+            }
             pub fn build(self) -> Result<AttributionReportingSourceRegistration, String> {
                 Ok(AttributionReportingSourceRegistration {
                     time: self.time.ok_or_else(|| {
@@ -83876,6 +84735,7 @@ pub mod browser_protocol {
                             std::stringify!(aggregatable_debug_reporting_config)
                         )
                     })?,
+                    scopes_data: self.scopes_data,
                 })
             }
         }
@@ -83908,20 +84768,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<str> 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<Self, Self::Err> {
-                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 +85182,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<String>,
         }
         impl AttributionReportingTriggerRegistration {
             pub fn builder() -> AttributionReportingTriggerRegistrationBuilder {
@@ -84340,6 +85207,7 @@ pub mod browser_protocol {
             trigger_context_id: Option<String>,
             aggregatable_debug_reporting_config:
                 Option<AttributionReportingAggregatableDebugReportingConfig>,
+            scopes: Option<Vec<String>>,
         }
         impl AttributionReportingTriggerRegistrationBuilder {
             pub fn filters(mut self, filters: impl Into<AttributionReportingFilterPair>) -> Self {
@@ -84468,6 +85336,22 @@ pub mod browser_protocol {
                     Some(aggregatable_debug_reporting_config.into());
                 self
             }
+            pub fn scope(mut self, scope: impl Into<String>) -> Self {
+                let v = self.scopes.get_or_insert(Vec::new());
+                v.push(scope.into());
+                self
+            }
+            pub fn scopes<I, S>(mut self, scopes: I) -> Self
+            where
+                I: IntoIterator<Item = S>,
+                S: Into<String>,
+            {
+                let v = self.scopes.get_or_insert(Vec::new());
+                for val in scopes {
+                    v.push(val.into());
+                }
+                self
+            }
             pub fn build(self) -> Result<AttributionReportingTriggerRegistration, String> {
                 Ok(AttributionReportingTriggerRegistration {
                     filters: self.filters.ok_or_else(|| {
@@ -84527,6 +85411,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 +98004,6 @@ pub mod browser_protocol {
             PrefetchFailedNetError,
             #[serde(rename = "PrefetchFailedNon2XX")]
             PrefetchFailedNon2Xx,
-            #[serde(rename = "PrefetchFailedPerPageLimitExceeded")]
-            PrefetchFailedPerPageLimitExceeded,
             #[serde(rename = "PrefetchEvictedAfterCandidateRemoved")]
             PrefetchEvictedAfterCandidateRemoved,
             #[serde(rename = "PrefetchEvictedForNewerPrefetch")]
@@ -97186,9 +98071,6 @@ pub mod browser_protocol {
                     }
                     PrefetchStatus::PrefetchFailedNetError => "PrefetchFailedNetError",
                     PrefetchStatus::PrefetchFailedNon2Xx => "PrefetchFailedNon2XX",
-                    PrefetchStatus::PrefetchFailedPerPageLimitExceeded => {
-                        "PrefetchFailedPerPageLimitExceeded"
-                    }
                     PrefetchStatus::PrefetchEvictedAfterCandidateRemoved => {
                         "PrefetchEvictedAfterCandidateRemoved"
                     }
@@ -97266,9 +98148,6 @@ pub mod browser_protocol {
                     "PrefetchFailedNon2XX" | "PrefetchFailedNon2Xx" | "prefetchfailednon2xx" => {
                         Ok(PrefetchStatus::PrefetchFailedNon2Xx)
                     }
-                    "PrefetchFailedPerPageLimitExceeded" | "prefetchfailedperpagelimitexceeded" => {
-                        Ok(PrefetchStatus::PrefetchFailedPerPageLimitExceeded)
-                    }
                     "PrefetchEvictedAfterCandidateRemoved"
                     | "prefetchevictedaftercandidateremoved" => {
                         Ok(PrefetchStatus::PrefetchEvictedAfterCandidateRemoved)
@@ -99121,6 +100000,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<str> 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<Self, Self::Err> {
+                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<i64>, data: impl Into<chromiumoxide_types::Binary>) -> Self {
+                Self {
+                    key: key.into(),
+                    data: data.into(),
+                }
+            }
+        }
+        impl ManufacturerData {
+            pub fn builder() -> ManufacturerDataBuilder {
+                ManufacturerDataBuilder::default()
+            }
+        }
+        #[derive(Default, Clone)]
+        pub struct ManufacturerDataBuilder {
+            key: Option<i64>,
+            data: Option<chromiumoxide_types::Binary>,
+        }
+        impl ManufacturerDataBuilder {
+            pub fn key(mut self, key: impl Into<i64>) -> Self {
+                self.key = Some(key.into());
+                self
+            }
+            pub fn data(mut self, data: impl Into<chromiumoxide_types::Binary>) -> Self {
+                self.data = Some(data.into());
+                self
+            }
+            pub fn build(self) -> Result<ManufacturerData, String> {
+                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<String>,
+            #[serde(rename = "uuids")]
+            #[serde(skip_serializing_if = "Option::is_none")]
+            pub uuids: Option<Vec<String>>,
+            #[doc = "Stores the external appearance description of the device."]
+            #[serde(rename = "appearance")]
+            #[serde(skip_serializing_if = "Option::is_none")]
+            pub appearance: Option<i64>,
+            #[doc = "Stores the transmission power of a broadcasting device."]
+            #[serde(rename = "txPower")]
+            #[serde(skip_serializing_if = "Option::is_none")]
+            pub tx_power: Option<i64>,
+            #[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<Vec<ManufacturerData>>,
+        }
+        impl ScanRecord {
+            pub fn builder() -> ScanRecordBuilder {
+                ScanRecordBuilder::default()
+            }
+        }
+        #[derive(Default, Clone)]
+        pub struct ScanRecordBuilder {
+            name: Option<String>,
+            uuids: Option<Vec<String>>,
+            appearance: Option<i64>,
+            tx_power: Option<i64>,
+            manufacturer_data: Option<Vec<ManufacturerData>>,
+        }
+        impl ScanRecordBuilder {
+            pub fn name(mut self, name: impl Into<String>) -> Self {
+                self.name = Some(name.into());
+                self
+            }
+            pub fn uuid(mut self, uuid: impl Into<String>) -> Self {
+                let v = self.uuids.get_or_insert(Vec::new());
+                v.push(uuid.into());
+                self
+            }
+            pub fn uuids<I, S>(mut self, uuids: I) -> Self
+            where
+                I: IntoIterator<Item = S>,
+                S: Into<String>,
+            {
+                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<i64>) -> Self {
+                self.appearance = Some(appearance.into());
+                self
+            }
+            pub fn tx_power(mut self, tx_power: impl Into<i64>) -> Self {
+                self.tx_power = Some(tx_power.into());
+                self
+            }
+            pub fn manufacturer_data(
+                mut self,
+                manufacturer_data: impl Into<ManufacturerData>,
+            ) -> Self {
+                let v = self.manufacturer_data.get_or_insert(Vec::new());
+                v.push(manufacturer_data.into());
+                self
+            }
+            pub fn manufacturer_datas<I, S>(mut self, manufacturer_datas: I) -> Self
+            where
+                I: IntoIterator<Item = S>,
+                S: Into<ManufacturerData>,
+            {
+                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<String>,
+                rssi: impl Into<i64>,
+                scan_record: impl Into<ScanRecord>,
+            ) -> 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<String>,
+            rssi: Option<i64>,
+            scan_record: Option<ScanRecord>,
+        }
+        impl ScanEntryBuilder {
+            pub fn device_address(mut self, device_address: impl Into<String>) -> Self {
+                self.device_address = Some(device_address.into());
+                self
+            }
+            pub fn rssi(mut self, rssi: impl Into<i64>) -> Self {
+                self.rssi = Some(rssi.into());
+                self
+            }
+            pub fn scan_record(mut self, scan_record: impl Into<ScanRecord>) -> Self {
+                self.scan_record = Some(scan_record.into());
+                self
+            }
+            pub fn build(self) -> Result<ScanEntry, String> {
+                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<CentralState>) -> Self {
+                Self {
+                    state: state.into(),
+                }
+            }
+        }
+        impl EnableParams {
+            pub fn builder() -> EnableParamsBuilder {
+                EnableParamsBuilder::default()
+            }
+        }
+        #[derive(Default, Clone)]
+        pub struct EnableParamsBuilder {
+            state: Option<CentralState>,
+        }
+        impl EnableParamsBuilder {
+            pub fn state(mut self, state: impl Into<CentralState>) -> Self {
+                self.state = Some(state.into());
+                self
+            }
+            pub fn build(self) -> Result<EnableParams, String> {
+                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<ManufacturerData>,
+            #[serde(rename = "knownServiceUuids")]
+            #[serde(skip_serializing_if = "Vec::is_empty")]
+            pub known_service_uuids: Vec<String>,
+        }
+        impl SimulatePreconnectedPeripheralParams {
+            pub fn new(
+                address: impl Into<String>,
+                name: impl Into<String>,
+                manufacturer_data: Vec<ManufacturerData>,
+                known_service_uuids: Vec<String>,
+            ) -> 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<String>,
+            name: Option<String>,
+            manufacturer_data: Option<Vec<ManufacturerData>>,
+            known_service_uuids: Option<Vec<String>>,
+        }
+        impl SimulatePreconnectedPeripheralParamsBuilder {
+            pub fn address(mut self, address: impl Into<String>) -> Self {
+                self.address = Some(address.into());
+                self
+            }
+            pub fn name(mut self, name: impl Into<String>) -> Self {
+                self.name = Some(name.into());
+                self
+            }
+            pub fn manufacturer_data(
+                mut self,
+                manufacturer_data: impl Into<ManufacturerData>,
+            ) -> Self {
+                let v = self.manufacturer_data.get_or_insert(Vec::new());
+                v.push(manufacturer_data.into());
+                self
+            }
+            pub fn manufacturer_datas<I, S>(mut self, manufacturer_datas: I) -> Self
+            where
+                I: IntoIterator<Item = S>,
+                S: Into<ManufacturerData>,
+            {
+                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<String>) -> Self {
+                let v = self.known_service_uuids.get_or_insert(Vec::new());
+                v.push(known_service_uuid.into());
+                self
+            }
+            pub fn known_service_uuids<I, S>(mut self, known_service_uuids: I) -> Self
+            where
+                I: IntoIterator<Item = S>,
+                S: Into<String>,
+            {
+                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<SimulatePreconnectedPeripheralParams, String> {
+                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<ScanEntry>) -> Self {
+                Self {
+                    entry: entry.into(),
+                }
+            }
+        }
+        impl SimulateAdvertisementParams {
+            pub fn builder() -> SimulateAdvertisementParamsBuilder {
+                SimulateAdvertisementParamsBuilder::default()
+            }
+        }
+        #[derive(Default, Clone)]
+        pub struct SimulateAdvertisementParamsBuilder {
+            entry: Option<ScanEntry>,
+        }
+        impl SimulateAdvertisementParamsBuilder {
+            pub fn entry(mut self, entry: impl Into<ScanEntry>) -> Self {
+                self.entry = Some(entry.into());
+                self
+            }
+            pub fn build(self) -> Result<SimulateAdvertisementParams, String> {
+                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..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(1336433);
+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> {
         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<R: Read + Seek> ZipArchive<R> {
             } 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<Self, Self::Err> {
-        s.parse::<u32>().map(|v| Self(v))
+        s.parse::<u32>().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;
+    }
+}
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::<EventConsoleApiCalled>()
+        .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;
+}
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/conn.rs b/src/conn.rs
index 4b188aec..78d6c4dc 100644
--- a/src/conn.rs
+++ b/src/conn.rs
@@ -118,52 +118,56 @@ impl<T: EventMessage + Unpin> Stream for Connection<T> {
         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 text.parse::<Message<T>>() {
-                    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::<Message<T>>(&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);
+                }
             }
         }
     }
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;
diff --git a/src/utils.rs b/src/utils.rs
index d7831087..a840aa4d 100644
--- a/src/utils.rs
+++ b/src/utils.rs
@@ -29,6 +29,31 @@ pub(crate) async fn canonicalize<P: AsRef<Path> + Unpin>(path: P) -> std::io::Re
     Ok(dunce::simplified(&path).to_path_buf())
 }
 
+/// Absolute path
+///
+pub(crate) fn absolute(path: PathBuf) -> std::io::Result<PathBuf> {
+    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<PathBuf> {
+    // 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};