diff --git a/AUTHORS b/AUTHORS index fce4131eb51c7..78f1e00543c2e 100644 --- a/AUTHORS +++ b/AUTHORS @@ -267,6 +267,7 @@ elgatov Eli Flanagan Elias Faxö Ellis Percival +Emil Hemdal Enrique Daimiel eoff Eran Messeri @@ -602,6 +603,7 @@ Michael Render Michael Tamm Michael Zhou Michal Čihař +Michał Górny Michał Herda Michele Sama Mickaël Schoentgen @@ -889,6 +891,7 @@ Vijendarn Selvarajah <11275608+vijay44@users.noreply.github.com> VijendraEAtech <39116868+VijendraEAtech@users.noreply.github.com> Vikas Goel VimalRaj Selvam +Vinaysimha Varma Yadavali Vincent Ladeuil vinoth959 Viren Negi <63040+meetme2meat@users.noreply.github.com> diff --git a/MODULE.bazel b/MODULE.bazel index 0626105f83013..b89ddacac1f8e 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -172,9 +172,9 @@ maven.install( artifacts = [ "com.beust:jcommander:1.82", "com.github.javaparser:javaparser-core:3.26.3", - "com.github.spotbugs:spotbugs:4.9.0", + "com.github.spotbugs:spotbugs:4.9.1", "com.github.stephenc.jcip:jcip-annotations:1.0-1", - "com.google.code.gson:gson:2.11.0", + "com.google.code.gson:gson:2.12.1", "com.google.guava:guava:33.4.0-jre", "com.google.auto:auto-common:1.2.2", "com.google.auto.service:auto-service:1.1.1", @@ -182,8 +182,8 @@ maven.install( "com.google.googlejavaformat:google-java-format:jar:1.25.2", "com.graphql-java:graphql-java:22.3", "dev.failsafe:failsafe:3.3.2", - "io.grpc:grpc-context:1.69.1", - "io.lettuce:lettuce-core:6.5.2.RELEASE", + "io.grpc:grpc-context:1.70.0", + "io.lettuce:lettuce-core:6.5.3.RELEASE", "io.netty:netty-buffer", "io.netty:netty-codec-http", "io.netty:netty-codec-http2", diff --git a/Rakefile b/Rakefile index 447f256344583..62401397614d7 100644 --- a/Rakefile +++ b/Rakefile @@ -99,7 +99,7 @@ JAVA_RELEASE_TARGETS = %w[ //java/src/org/openqa/selenium/chromium:chromium.publish //java/src/org/openqa/selenium/devtools/v131:v131.publish //java/src/org/openqa/selenium/devtools/v132:v132.publish - //java/src/org/openqa/selenium/devtools/v130:v130.publish + //java/src/org/openqa/selenium/devtools/v133:v133.publish //java/src/org/openqa/selenium/devtools/v85:v85.publish //java/src/org/openqa/selenium/edge:edge.publish //java/src/org/openqa/selenium/firefox:firefox.publish @@ -790,7 +790,7 @@ namespace :dotnet do sh 'docfx dotnet/docs/docfx.json' rescue StandardError case $CHILD_STATUS.exitstatus - when 130 + when 133 raise 'Ensure the dotnet/tools directory is added to your PATH environment variable (e.g., `~/.dotnet/tools`)' when 255 puts '.NET documentation build failed, likely because of DevTools namespacing. This is ok; continuing' diff --git a/common/devtools/chromium/v130/BUILD.bazel b/common/devtools/chromium/v133/BUILD.bazel similarity index 100% rename from common/devtools/chromium/v130/BUILD.bazel rename to common/devtools/chromium/v133/BUILD.bazel diff --git a/common/devtools/chromium/v130/browser_protocol.pdl b/common/devtools/chromium/v133/browser_protocol.pdl similarity index 97% rename from common/devtools/chromium/v130/browser_protocol.pdl rename to common/devtools/chromium/v133/browser_protocol.pdl index 8a9325e6f6528..3d5f44cda9100 100644 --- a/common/devtools/chromium/v130/browser_protocol.pdl +++ b/common/devtools/chromium/v133/browser_protocol.pdl @@ -117,6 +117,7 @@ experimental domain Accessibility # - from 'activedescendant' to 'owns' - relationships between elements other than parent/child/sibling. type AXPropertyName extends string enum + actions busy disabled editable @@ -498,8 +499,8 @@ experimental domain Audits type AffectedRequest extends object properties # The unique request id. - Network.RequestId requestId - optional string url + optional Network.RequestId requestId + string url # Information about the frame affected by an inspector issue. type AffectedFrame extends object @@ -517,6 +518,8 @@ experimental domain Audits ExcludeDomainNonASCII ExcludeThirdPartyCookieBlockedInFirstPartySet ExcludeThirdPartyPhaseout + ExcludePortMismatch + ExcludeSchemeMismatch type CookieWarningReason extends string enum @@ -532,12 +535,35 @@ experimental domain Audits WarnDomainNonASCII WarnThirdPartyPhaseout WarnCrossSiteRedirectDowngradeChangesInclusion + WarnDeprecationTrialMetadata + WarnThirdPartyCookieHeuristic type CookieOperation extends string enum SetCookie ReadCookie + # Represents the category of insight that a cookie issue falls under. + type InsightType extends string + enum + # Cookie domain has an entry in third-party cookie migration readiness + # list: + # https://github.com/privacysandbox/privacy-sandbox-dev-support/blob/main/3pc-migration-readiness.md + GitHubResource + # Cookie is exempted due to a grace period: + # https://developers.google.com/privacy-sandbox/cookies/temporary-exceptions/grace-period + GracePeriod + # Cookie is exempted due a heuristics-based exemptiuon: + # https://developers.google.com/privacy-sandbox/cookies/temporary-exceptions/heuristics-based-exception + Heuristics + + # Information about the suggested solution to a cookie issue. + type CookieIssueInsight extends object + properties + InsightType type + # Link to table entry in third-party cookie migration readiness list. + optional string tableEntryUrl + # This information is currently necessary, as the front-end has a difficult # time finding a specific cookie. With this, we can convey specific error # information without the cookie. @@ -557,6 +583,8 @@ experimental domain Audits optional string siteForCookies optional string cookieUrl optional AffectedRequest request + # The recommended solution to the issue. + optional CookieIssueInsight insight type MixedContentResolutionStatus extends string enum @@ -626,6 +654,7 @@ experimental domain Audits CorpNotSameOriginAfterDefaultedToSameOriginByDip CorpNotSameOriginAfterDefaultedToSameOriginByCoepAndDip CorpNotSameSite + SRIMessageSignatureMismatch # Details for a request that has been blocked with the BLOCKED_BY_RESPONSE # code. Currently only used for COEP/COOP, but may be extended to include @@ -916,7 +945,7 @@ experimental domain Audits ThirdPartyCookiesBlocked NotSignedInWithIdp MissingTransientUserActivation - ReplacedByButtonMode + ReplacedByActiveMode InvalidFieldsSpecified RelyingPartyOriginIsOpaque TypeNotMatching @@ -955,6 +984,22 @@ experimental domain Audits string failureMessage optional Network.RequestId requestId + type SelectElementAccessibilityIssueReason extends string + enum + DisallowedSelectChild + DisallowedOptGroupChild + NonPhrasingContentOptionChild + InteractiveContentOptionChild + InteractiveContentLegendChild + + # This isue warns about errors in the select element content model. + type SelectElementAccessibilityIssueDetails extends object + properties + DOM.BackendNodeId nodeId + SelectElementAccessibilityIssueReason selectElementAccessibilityIssueReason + boolean hasDisallowedAttributes + + type StyleSheetLoadingIssueReason extends string enum LateImportRule @@ -1015,6 +1060,7 @@ experimental domain Audits FederatedAuthUserInfoRequestIssue PropertyRuleIssue SharedDictionaryIssue + SelectElementAccessibilityIssue # This struct holds a list of optional fields with additional information # specific to the kind of issue. When adding a new issue code, please also @@ -1042,6 +1088,7 @@ experimental domain Audits optional PropertyRuleIssueDetails propertyRuleIssueDetails optional FederatedAuthUserInfoRequestIssueDetails federatedAuthUserInfoRequestIssueDetails optional SharedDictionaryIssueDetails sharedDictionaryIssueDetails + optional SelectElementAccessibilityIssueDetails selectElementAccessibilityIssueDetails # A unique id for a DevTools inspector issue. Allows other entities (e.g. # exceptions, CDP message, console messages, etc.) to reference an issue. @@ -1365,18 +1412,21 @@ domain Browser experimental type PermissionType extends string enum - accessibilityEvents + ar audioCapture - backgroundSync + automaticFullscreen backgroundFetch + backgroundSync + cameraPanTiltZoom capturedSurfaceControl clipboardReadWrite clipboardSanitizedWrite displayCapture durableStorage - flash geolocation + handTracking idleDetection + keyboardLock localFonts midi midiSysex @@ -1384,16 +1434,19 @@ domain Browser notifications paymentHandler periodicBackgroundSync + pointerLock protectedMediaIdentifier sensors - storageAccess + smartCard speakerSelection + storageAccess topLevelStorageAccess videoCapture - videoCapturePanTiltZoom + vr wakeLockScreen wakeLockSystem webAppInstallation + webPrinting windowManagement experimental type PermissionSetting extends string @@ -1666,6 +1719,14 @@ experimental domain CSS # Matches of CSS rules applicable to the pseudo style. array of RuleMatch matches + # CSS style coming from animations with the name of the animation. + type CSSAnimationStyle extends object + properties + # The name of the animation. + optional string name + # The style coming from the animation. + CSSStyle style + # Inherited CSS rule collection from ancestor node. type InheritedStyleEntry extends object properties @@ -1674,6 +1735,14 @@ experimental domain CSS # Matches of CSS rules matching the ancestor node in the style inheritance chain. array of RuleMatch matchedCSSRules + # Inherited CSS style collection for animated styles from ancestor node. + type InheritedAnimatedStyleEntry extends object + properties + # Styles coming from the animations of the ancestor, if any, in the style inheritance chain. + optional array of CSSAnimationStyle animationStyles + # The style coming from the transitions of the ancestor, if any, in the style inheritance chain. + optional CSSStyle transitionsStyle + # Inherited pseudo element matches from pseudos of an ancestor node. type InheritedPseudoElementMatches extends object properties @@ -1796,6 +1865,9 @@ experimental domain CSS experimental optional array of CSSScope scopes # The array keeps the types of ancestor CSSRules from the innermost going outwards. experimental optional array of CSSRuleType ruleTypes + # @starting-style CSS at-rule array. + # The array enumerates @starting-style at-rules starting with the innermost one, going outwards. + experimental optional array of CSSStartingStyle startingStyles # Enum indicating the type of a CSS rule, used to represent the order of a style rule's ancestors. # This list only contains rule types that are collected during the ancestor rule collection. @@ -1807,6 +1879,7 @@ experimental domain CSS LayerRule ScopeRule StyleRule + StartingStyleRule # CSS coverage information. type RuleUsage extends object @@ -1949,6 +2022,8 @@ experimental domain CSS optional DOM.PhysicalAxes physicalAxes # Optional logical axes queried for the container. optional DOM.LogicalAxes logicalAxes + # true if the query contains scroll-state() queries. + optional boolean queriesScrollState # CSS Supports at-rule descriptor. experimental type CSSSupports extends object @@ -1985,6 +2060,15 @@ experimental domain CSS # Identifier of the stylesheet containing this object (if exists). optional StyleSheetId styleSheetId + # CSS Starting Style at-rule descriptor. + experimental type CSSStartingStyle extends object + properties + # The associated rule header range in the enclosing stylesheet (if + # available). + optional SourceRange range + # Identifier of the stylesheet containing this object (if exists). + optional StyleSheetId styleSheetId + # CSS Layer data. experimental type CSSLayerData extends object properties @@ -2189,6 +2273,14 @@ experimental domain CSS # Element pseudo classes to force when computing the element's style. array of string forcedPseudoClasses + # Ensures that the given node is in its starting-style state. + command forceStartingStyle + parameters + # The element id for which to force the starting-style state. + DOM.NodeId nodeId + # Boolean indicating if this is on or off. + boolean forced + command getBackgroundColors parameters # Id of the node to get background colors for. @@ -2214,6 +2306,34 @@ experimental domain CSS # Computed style for the specified DOM node. array of CSSComputedStyleProperty computedStyle + # Resolve the specified values in the context of the provided element. + # For example, a value of '1em' is evaluated according to the computed + # 'font-size' of the element and a value 'calc(1px + 2px)' will be + # resolved to '3px'. + command resolveValues + parameters + # Substitution functions (var()/env()/attr()) and cascade-dependent + # keywords (revert/revert-layer) do not work. + array of string values + # Id of the node in whose context the expression is evaluated + DOM.NodeId nodeId + # Only longhands and custom property names are accepted. + optional string propertyName + # Pseudo element type, only works for pseudo elements that generate + # elements in the tree, such as ::before and ::after. + experimental optional DOM.PseudoType pseudoType + # Pseudo element custom ident. + experimental optional string pseudoIdentifier + returns + array of string results + + experimental command getLonghandProperties + parameters + string shorthandName + string value + returns + array of CSSProperty longhandProperties + # Returns the styles defined inline (explicitly in the "style" attribute and implicitly, using DOM # attributes) for a DOM node identified by `nodeId`. command getInlineStylesForNode @@ -2225,6 +2345,20 @@ experimental domain CSS # Attribute-defined element style (e.g. resulting from "width=20 height=100%"). optional CSSStyle attributesStyle + # Returns the styles coming from animations & transitions + # including the animation & transition styles coming from inheritance chain. + experimental command getAnimatedStylesForNode + parameters + DOM.NodeId nodeId + returns + # Styles coming from animations. + optional array of CSSAnimationStyle animationStyles + # Style coming from transitions. + optional CSSStyle transitionsStyle + # Inherited style entries for animationsStyle and transitionsStyle from + # the inheritance chain of the element. + optional array of InheritedAnimatedStyleEntry inherited + # Returns requested styles for a DOM node identified by `nodeId`. command getMatchedStylesForNode parameters @@ -2299,6 +2433,16 @@ experimental domain CSS returns array of SourceRange ranges + # Starts tracking the given node for the computed style updates + # and whenever the computed style is updated for node, it queues + # a `computedStyleUpdated` event with throttling. + # There can only be 1 node tracked for computed style updates + # so passing a new node id removes tracking from the previous node. + # Pass `undefined` to disable tracking. + experimental command trackComputedStyleUpdatesForNode + parameters + optional DOM.NodeId nodeId + # Starts tracking the given computed styles for updates. The specified array of properties # replaces the one previously specified. Pass empty array to disable tracking. # Use takeComputedStyleUpdates to retrieve the list of nodes that had properties modified. @@ -2466,6 +2610,11 @@ experimental domain CSS # Identifier of the removed stylesheet. StyleSheetId styleSheetId + experimental event computedStyleUpdated + parameters + # The node id that has updated computed styles. + DOM.NodeId nodeId + experimental domain CacheStorage depends on Storage @@ -2675,8 +2824,10 @@ domain DOM enum first-line first-letter + checkmark before after + picker-icon marker backdrop column @@ -2689,8 +2840,7 @@ domain DOM first-line-inherited scroll-marker scroll-marker-group - scroll-next-button - scroll-prev-button + scroll-button scrollbar scrollbar-thumb scrollbar-button @@ -2707,8 +2857,6 @@ domain DOM placeholder file-selector-button details-content - select-fallback-button - select-fallback-button-text picker # Shadow root type. @@ -3386,15 +3534,17 @@ domain DOM optional NodeId nodeId # Returns the query container of the given node based on container query - # conditions: containerName, physical, and logical axes. If no axes are - # provided, the style container is returned, which is the direct parent or the - # closest element with a matching container-name. + # conditions: containerName, physical and logical axes, and whether it queries + # scroll-state. If no axes are provided and queriesScrollState is false, the + # style container is returned, which is the direct parent or the closest + # element with a matching container-name. experimental command getContainerForNode parameters NodeId nodeId optional string containerName optional PhysicalAxes physicalAxes optional LogicalAxes logicalAxes + optional boolean queriesScrollState returns # The container node for the given node, or null if not found. optional NodeId nodeId @@ -4221,7 +4371,6 @@ domain Emulation gyroscope linear-acceleration magnetometer - proximity relative-orientation experimental type SensorMetadata extends object @@ -5671,7 +5820,9 @@ domain Network # Unique loader identifier. type LoaderId extends string - # Unique request identifier. + # Unique network request identifier. + # Note that this does not identify individual HTTP requests that are part of + # a network request. type RequestId extends string # Unique intercepted request identifier. @@ -5925,6 +6076,7 @@ domain Network corp-not-same-origin-after-defaulted-to-same-origin-by-dip corp-not-same-origin-after-defaulted-to-same-origin-by-coep-and-dip corp-not-same-site + sri-message-signature-mismatch # The reason why request was blocked. type CorsError extends string @@ -6185,6 +6337,7 @@ domain Network preflight other # Initiator JavaScript stack trace, set for Script only. + # Requires the Debugger domain to be enabled. optional Runtime.StackTrace stack # Initiator URL, set for Parser type or for Script type (when script is importing module) or for SignedExchange type. optional string url @@ -6364,6 +6517,10 @@ domain Network # The cookie's name/value pair size exceeded the size limit defined in # RFC6265bis. NameValuePairExceedsMaxSize + # The cookie's source port value does not match the request origin's port. + PortMismatch + # The cookie's source scheme value does not match the request origin's scheme. + SchemeMismatch # Types of reasons why a cookie should have been blocked by 3PCD but is exempted for the request. experimental type CookieExemptionReason extends string @@ -7220,6 +7377,9 @@ domain Network # are represented by the invalid cookie line string instead of a proper cookie. array of BlockedSetCookieWithReason blockedCookies # Raw response headers as they were received over the wire. + # Duplicate headers in the response are represented as a single key with their values + # concatentated using `\n` as the separator. + # See also `headersText` that contains verbatim text for HTTP/1.*. Headers headers # The IP address space of the resource. The address space can only be determined once the transport # established the connection, so we can't send it in `requestWillBeSentExtraInfo`. @@ -7248,6 +7408,9 @@ domain Network # Request identifier. Used to match this information to another responseReceived event. RequestId requestId # Raw response headers as they were received over the wire. + # Duplicate headers in the response are represented as a single key with their values + # concatentated using `\n` as the separator. + # See also `headersText` that contains verbatim text for HTTP/1.*. Headers headers # Fired exactly once for each Trust Token operation. Depending on @@ -7273,6 +7436,7 @@ domain Network InternalError UnknownError FulfilledLocally + SiteIssuerLimit TrustTokenOperationType type RequestId requestId # Top level origin. The context in which the operation was attempted. @@ -7483,6 +7647,19 @@ domain Network returns LoadNetworkResourcePageResult resource + # Sets Controls for third-party cookie access + # Page reload is required before the new cookie bahavior will be observed + experimental command setCookieControls + parameters + # Whether 3pc restriction is enabled. + boolean enableThirdPartyCookieRestriction + + # Whether 3pc grace period exception should be enabled; false by default. + boolean disableThirdPartyCookieMetadata + + # Whether 3pc heuristics exceptions should be enabled; false by default. + boolean disableThirdPartyCookieHeuristics + # This domain provides various functionality related to drawing atop the inspected page. experimental domain Overlay depends on DOM @@ -7924,8 +8101,8 @@ experimental domain Overlay # True for showing hit-test borders boolean show - # Request that backend shows an overlay with web vital metrics. - command setShowWebVitals + # Deprecated, no longer has any effect. + deprecated command setShowWebVitals parameters boolean show @@ -8087,13 +8264,16 @@ domain Page controlled-frame cross-origin-isolated deferred-fetch + deferred-fetch-minimal digital-credentials-get direct-sockets + direct-sockets-private display-capture document-domain encrypted-media execution-while-out-of-viewport execution-while-not-rendered + fenced-unpartitioned-storage-read focus-without-user-activation fullscreen frobulate @@ -9362,7 +9542,8 @@ domain Page # Default dialog prompt. optional string defaultPrompt - # Fired for top level page lifecycle events such as navigation, load, paint, etc. + # Fired for lifecycle events (navigation, load, paint, etc) in the current + # target (including local frames). event lifecycleEvent parameters # Id of the frame. @@ -9518,6 +9699,7 @@ domain Page EmbedderExtensionMessagingForOpenPort EmbedderExtensionSentMessageToCachedFrame RequestedByWebViewClient + PostMessageByWebViewClient # Types of not restored reasons for back-forward cache. experimental type BackForwardCacheNotRestoredReasonType extends string @@ -10712,6 +10894,7 @@ experimental domain Storage SignedInt64AsBase10 destinationLimitPriority AttributionReportingAggregatableDebugReportingConfig aggregatableDebugReportingConfig optional AttributionScopesData scopesData + integer maxEventLevelReports experimental type AttributionReportingSourceRegistrationResult extends string enum @@ -10822,6 +11005,7 @@ experimental domain Storage excessiveReportingOrigins noHistograms insufficientBudget + insufficientNamedBudget noMatchingSourceFilterData notRegistered prohibitedByBrowserPolicy @@ -11113,6 +11297,10 @@ domain Target parameters # The initial URL the page will be navigated to. An empty string indicates about:blank. string url + # Frame left origin in DIP (headless chrome only). + experimental optional integer left + # Frame top origin in DIP (headless chrome only). + experimental optional integer top # Frame width in DIP (headless chrome only). optional integer width # Frame height in DIP (headless chrome only). @@ -11460,6 +11648,8 @@ domain Fetch depends on Page # Unique request identifier. + # Note that this does not identify individual HTTP requests that are part of + # a network request. type RequestId extends string # Stages of the request to handle. Request will intercept before the request is @@ -11716,6 +11906,7 @@ experimental domain WebAudio suspended running closed + interrupted # Enum of AudioNode types type NodeType extends string @@ -11991,6 +12182,13 @@ experimental domain WebAuthn # flag set to this value. Defaults to the authenticator's # defaultBackupState value. optional boolean backupState + # The credential's user.name property. Equivalent to empty if not set. + # https://w3c.github.io/webauthn/#dom-publickeycredentialentity-name + optional string userName + # The credential's user.displayName property. Equivalent to empty if + # not set. + # https://w3c.github.io/webauthn/#dom-publickeycredentialuserentity-displayname + optional string userDisplayName # Enable the WebAuthn domain and start intercepting credential storage and # retrieval with a virtual authenticator. @@ -12094,6 +12292,20 @@ experimental domain WebAuthn AuthenticatorId authenticatorId Credential credential + # Triggered when a credential is deleted, e.g. through + # PublicKeyCredential.signalUnknownCredential(). + event credentialDeleted + parameters + AuthenticatorId authenticatorId + binary credentialId + + # Triggered when a credential is updated, e.g. through + # PublicKeyCredential.signalCurrentUserDetails(). + event credentialUpdated + parameters + AuthenticatorId authenticatorId + Credential credential + # Triggered when a credential is used in a webauthn assertion. event credentialAsserted parameters @@ -12320,6 +12532,15 @@ experimental domain Preload array of RuleSetId ruleSetIds array of DOM.BackendNodeId nodeIds + # Chrome manages different types of preloads together using a + # concept of preloading pipeline. For example, if a site uses a + # SpeculationRules for prerender, Chrome first starts a prefetch and + # then upgrades it to prerender. + # + # CDP events for them are emitted separately but they share + # `PreloadPipelineId`. + type PreloadPipelineId extends string + command enable command disable @@ -12407,6 +12628,8 @@ experimental domain Preload WindowClosed SlowNetwork OtherPrerenderedPageActivated + V8OptimizerDisabled + PrerenderFailedDuringPrefetch # Fired when a preload enabled state is updated. event preloadEnabledStateUpdated @@ -12474,6 +12697,7 @@ experimental domain Preload event prefetchStatusUpdated parameters PreloadingAttemptKey key + PreloadPipelineId pipelineId # The frame id of the frame initiating prefetch. Page.FrameId initiatingFrameId string prefetchUrl @@ -12492,6 +12716,7 @@ experimental domain Preload event prerenderStatusUpdated parameters PreloadingAttemptKey key + PreloadPipelineId pipelineId PreloadingStatus status optional PrerenderFinalStatus prerenderStatus # This is used to give users more information about the name of Mojo interface diff --git a/common/devtools/chromium/v130/js_protocol.pdl b/common/devtools/chromium/v133/js_protocol.pdl similarity index 98% rename from common/devtools/chromium/v130/js_protocol.pdl rename to common/devtools/chromium/v133/js_protocol.pdl index 8dad9c98de9f6..52f3b02ceb80b 100644 --- a/common/devtools/chromium/v130/js_protocol.pdl +++ b/common/devtools/chromium/v133/js_protocol.pdl @@ -369,6 +369,14 @@ domain Debugger # call stacks (default). integer maxDepth + # Replace previous blackbox execution contexts with passed ones. Forces backend to skip + # stepping/pausing in scripts in these execution contexts. VM will try to leave blackboxed script by + # performing 'step in' several times, finally resorting to 'step out' if unsuccessful. + experimental command setBlackboxExecutionContexts + parameters + # Array of execution context unique ids for the debugger to ignore. + array of string uniqueIds + # Replace previous blackbox patterns with passed ones. Forces backend to skip stepping/pausing in # scripts with url matching one of the patterns. VM will try to leave blackboxed script by # performing 'step in' several times, finally resorting to 'step out' if unsuccessful. @@ -376,6 +384,8 @@ domain Debugger parameters # Array of regexps that will be used to check script url for blackbox state. array of string patterns + # If true, also ignore scripts with no source url. + optional boolean skipAnonymous # Makes backend skip steps in the script in blackboxed ranges. VM will try leave blacklisted # scripts by performing 'step in' several times, finally resorting to 'step out' if unsuccessful. @@ -606,7 +616,6 @@ domain Debugger properties # Type of the debug symbols. enum type - None SourceMap EmbeddedDWARF ExternalDWARF @@ -632,6 +641,8 @@ domain Debugger Runtime.ExecutionContextId executionContextId # Content hash of the script, SHA-256. string hash + # For Wasm modules, the content of the `build_id` custom section. + string buildId # Embedder-specific auxiliary data likely matching {isDefault: boolean, type: 'default'|'isolated'|'worker', frameId: string} optional object executionContextAuxData # URL of source map associated with script (if any). @@ -671,6 +682,8 @@ domain Debugger Runtime.ExecutionContextId executionContextId # Content hash of the script, SHA-256. string hash + # For Wasm modules, the content of the `build_id` custom section. + string buildId # Embedder-specific auxiliary data likely matching {isDefault: boolean, type: 'default'|'isolated'|'worker', frameId: string} optional object executionContextAuxData # True, if this script is generated as a result of the live edit operation. @@ -689,8 +702,8 @@ domain Debugger experimental optional integer codeOffset # The language of the script. experimental optional Debugger.ScriptLanguage scriptLanguage - # If the scriptLanguage is WebASsembly, the source of debug symbols for the module. - experimental optional Debugger.DebugSymbols debugSymbols + # If the scriptLanguage is WebAssembly, the source of debug symbols for the module. + experimental optional array of Debugger.DebugSymbols debugSymbols # The name the embedder supplied for this script. experimental optional string embedderName diff --git a/common/repositories.bzl b/common/repositories.bzl index 78cd3c95aae18..10df1d462a616 100644 --- a/common/repositories.bzl +++ b/common/repositories.bzl @@ -11,8 +11,8 @@ def pin_browsers(): http_archive( name = "linux_firefox", - url = "https://ftp.mozilla.org/pub/firefox/releases/134.0.2/linux-x86_64/en-US/firefox-134.0.2.tar.bz2", - sha256 = "980b8cdebd7abdbed30a560a1a564d429c4e832c9e24e407b4c8a9fec24e0109", + url = "https://ftp.mozilla.org/pub/firefox/releases/135.0/linux-x86_64/en-US/firefox-135.0.tar.xz", + sha256 = "6fcc1a2f95a6b232af82b4b7644566638c5df349e3095c65b7c18d1a63412d3d", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) @@ -33,8 +33,8 @@ js_library( dmg_archive( name = "mac_firefox", - url = "https://ftp.mozilla.org/pub/firefox/releases/134.0.2/mac/en-US/Firefox%20134.0.2.dmg", - sha256 = "7832a8d1e1a13322dec1b52d32e1e64d2b6254de8348575f2d22af4975d56a85", + url = "https://ftp.mozilla.org/pub/firefox/releases/135.0/mac/en-US/Firefox%20135.0.dmg", + sha256 = "e55e24e6b2a4980f4b9091900835977b282f599dcdd5e38b753d95bad8a11da9", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) @@ -50,8 +50,8 @@ js_library( http_archive( name = "linux_beta_firefox", - url = "https://ftp.mozilla.org/pub/firefox/releases/135.0b9/linux-x86_64/en-US/firefox-135.0b9.tar.xz", - sha256 = "a5aa65623c3ad4b6884b7617db0f7635880e042d1ed02376f52d8065884be03f", + url = "https://ftp.mozilla.org/pub/firefox/releases/136.0b4/linux-x86_64/en-US/firefox-136.0b4.tar.xz", + sha256 = "ac0a6a6db31e684b99cc1ef0c3805aa86f9f65ee6d23ee74284dee385ad38420", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) @@ -72,8 +72,8 @@ js_library( dmg_archive( name = "mac_beta_firefox", - url = "https://ftp.mozilla.org/pub/firefox/releases/135.0b9/mac/en-US/Firefox%20135.0b9.dmg", - sha256 = "31d395ddc49b5f18863c2e060610d3a7089a4af46df12d73f1d56d5afe78baa3", + url = "https://ftp.mozilla.org/pub/firefox/releases/136.0b4/mac/en-US/Firefox%20136.0b4.dmg", + sha256 = "6fbbaacb34a76adc0968c66c26c159a552aa913382688af3ace08241da9bfd7f", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) @@ -123,10 +123,10 @@ js_library( pkg_archive( name = "mac_edge", - url = "https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/32cc7c00-5d56-4296-81bc-798f79706d6c/MicrosoftEdge-132.0.2957.127.pkg", - sha256 = "dc5d6fc311d0a93dc9a665051738c5f855c95e24ae49d5696c68148f14daa97e", + url = "https://msedge.sf.dl.delivery.mp.microsoft.com/filestreamingservice/files/ee31fad8-29f2-4106-8a9b-9d59d949dbe3/MicrosoftEdge-132.0.2957.140.pkg", + sha256 = "fc07bd891ad3782004899c27f04bd5efe3c7e9937941ba06111868d2eecf1661", move = { - "MicrosoftEdge-132.0.2957.127.pkg/Payload/Microsoft Edge.app": "Edge.app", + "MicrosoftEdge-132.0.2957.140.pkg/Payload/Microsoft Edge.app": "Edge.app", }, build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") @@ -143,8 +143,8 @@ js_library( deb_archive( name = "linux_edge", - url = "https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable/microsoft-edge-stable_132.0.2957.127-1_amd64.deb", - sha256 = "ba80bca3192b3168269146e09fb38fdb596911a74a6666f81de6f7db312f7631", + url = "https://packages.microsoft.com/repos/edge/pool/main/m/microsoft-edge-stable/microsoft-edge-stable_132.0.2957.140-1_amd64.deb", + sha256 = "00e7aa401fcd896b351131a6297effb9c03017a24e0e187136fc247fd8a7834c", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) @@ -165,8 +165,8 @@ js_library( http_archive( name = "linux_edgedriver", - url = "https://msedgedriver.azureedge.net/132.0.2957.127/edgedriver_linux64.zip", - sha256 = "d5a40743779e52d81ca4f0073ff47965347f9e906cac75f35fda0222480b78dc", + url = "https://msedgedriver.azureedge.net/133.0.3065.49/edgedriver_linux64.zip", + sha256 = "d3845741134416a46e1fca5e9e79c012d99578f346fdeda8909efc34c21bd7c4", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) @@ -182,8 +182,8 @@ js_library( http_archive( name = "mac_edgedriver", - url = "https://msedgedriver.azureedge.net/132.0.2957.127/edgedriver_mac64.zip", - sha256 = "0f73b6612245fcf5b719f27bc964832b25e349bfc64173b56e4ed26ca040ac64", + url = "https://msedgedriver.azureedge.net/133.0.3065.49/edgedriver_mac64.zip", + sha256 = "749e5b461e37500380daa6aacfe36c96c5cf5ff63859e749f136bc80b3c30a58", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) @@ -199,8 +199,8 @@ js_library( http_archive( name = "linux_chrome", - url = "https://storage.googleapis.com/chrome-for-testing-public/132.0.6834.159/linux64/chrome-linux64.zip", - sha256 = "955bbbe5bfc2c210eced0c8faf5bc4aca4640af63b33f7480a4c2fc0b449e6e6", + url = "https://storage.googleapis.com/chrome-for-testing-public/133.0.6943.53/linux64/chrome-linux64.zip", + sha256 = "afeb307d0739e507a99b8432f608c38664714a3ed729f2b59904ef790f8f4f57", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") package(default_visibility = ["//visibility:public"]) @@ -221,8 +221,8 @@ js_library( http_archive( name = "mac_chrome", - url = "https://storage.googleapis.com/chrome-for-testing-public/132.0.6834.159/mac-x64/chrome-mac-x64.zip", - sha256 = "f7ce763afa87bf90bbc834f9abd82a975519fc3e5b78d4caae88183fbd85736d", + url = "https://storage.googleapis.com/chrome-for-testing-public/133.0.6943.53/mac-x64/chrome-mac-x64.zip", + sha256 = "0923c6558db227520d09a86616a3403b763fd66d2adfc9817cf2a5dc6638a81f", strip_prefix = "chrome-mac-x64", patch_cmds = [ "mv 'Google Chrome for Testing.app' Chrome.app", @@ -243,8 +243,8 @@ js_library( http_archive( name = "linux_chromedriver", - url = "https://storage.googleapis.com/chrome-for-testing-public/132.0.6834.159/linux64/chromedriver-linux64.zip", - sha256 = "13930d2b5e5f69d15c206556bd66e623aa325d03edde091b169b7cc5f7880e3e", + url = "https://storage.googleapis.com/chrome-for-testing-public/133.0.6943.53/linux64/chromedriver-linux64.zip", + sha256 = "5201d51b3c8ce1387be633e4dde4ba9eac587fc64946195b264297b0fe328898", strip_prefix = "chromedriver-linux64", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") @@ -261,8 +261,8 @@ js_library( http_archive( name = "mac_chromedriver", - url = "https://storage.googleapis.com/chrome-for-testing-public/132.0.6834.159/mac-x64/chromedriver-mac-x64.zip", - sha256 = "50639151eaff168e7a55325120e11ceaa4b0cdedb5bb6df65511319f064dac2f", + url = "https://storage.googleapis.com/chrome-for-testing-public/133.0.6943.53/mac-x64/chromedriver-mac-x64.zip", + sha256 = "19d1aac222bbde1110cdb54b14410ea62ab9a627411895277644c8f0638a5d35", strip_prefix = "chromedriver-mac-x64", build_file_content = """ load("@aspect_rules_js//js:defs.bzl", "js_library") diff --git a/common/selenium_manager.bzl b/common/selenium_manager.bzl index 7474f4e013967..4b3853c5edcec 100644 --- a/common/selenium_manager.bzl +++ b/common/selenium_manager.bzl @@ -6,22 +6,22 @@ def selenium_manager(): http_file( name = "download_sm_linux", executable = True, - sha256 = "8788f16e136171dd78520849c4d4d39d0d3f536604deec8f07171a2b7f0bb258", - url = "https://github.com/SeleniumHQ/selenium_manager_artifacts/releases/download/selenium-manager-a0ced92/selenium-manager-linux", + sha256 = "9d9f1306f11a0b8aee174e01e21195177f031e12a7d473cf565de0db69bd504d", + url = "https://github.com/SeleniumHQ/selenium_manager_artifacts/releases/download/selenium-manager-7ac79ca/selenium-manager-linux", ) http_file( name = "download_sm_macos", executable = True, - sha256 = "879cd6226bf24524e389fb8f044e5351a38c50083bd6d529dc0a8f8d9f13cc91", - url = "https://github.com/SeleniumHQ/selenium_manager_artifacts/releases/download/selenium-manager-a0ced92/selenium-manager-macos", + sha256 = "98bb3c77965ddd0892f2a70168aa4a6b9a6e3ed98cd850783461c428f9dc4ffe", + url = "https://github.com/SeleniumHQ/selenium_manager_artifacts/releases/download/selenium-manager-7ac79ca/selenium-manager-macos", ) http_file( name = "download_sm_windows", executable = True, - sha256 = "746b57eadbd3fe5439c8adea811ed36c4977ee359c7e1caddc3e0a7a6dcfbed1", - url = "https://github.com/SeleniumHQ/selenium_manager_artifacts/releases/download/selenium-manager-a0ced92/selenium-manager-windows.exe", + sha256 = "dce4a8db45c212b03462c0ae79bd2abacde7388e93fcf8eba1cdc54f2c5cfec5", + url = "https://github.com/SeleniumHQ/selenium_manager_artifacts/releases/download/selenium-manager-7ac79ca/selenium-manager-windows.exe", ) def _selenium_manager_artifacts_impl(_ctx): diff --git a/dotnet/CHANGELOG b/dotnet/CHANGELOG index 7407434f7c610..77e18aba3df8d 100644 --- a/dotnet/CHANGELOG +++ b/dotnet/CHANGELOG @@ -1,3 +1,131 @@ +v4.29.0 +====== +--> [dotnet] [bidi] Add network SetCacheBehavior command (#15133) +--> [dotnet] Annotate nullability on devtools event args (#15134) +--> [dotnet] Annotate nullability for `DriverService` and chromium/safari services (#15101) +* [dotnet] Annotate nullability for `DriverService` and some derived types +* Default values to `null` instead of sentinel values. +--> [dotnet] Add nullability to `Command` type (#15147) +* [dotnet] Add nullability to `Command` type +* Simplify initialization logic of `Command.Parameters` +--> [dotnet] Annotate nullable reference types on input devices (#14804) +* [dotnet] Annotate nullable reference types on input devices +* remove unnecessary `_` +* Use block-body methods in `InputDevice` +* Revert `WheelInputDevice.ConvertElement` and `PointerInputDevice.ConvertElement` +* Make methods always body-blocked +* Add null check to `CreatePointerMove` +* Add null check to `CreateWheelScroll` +* Do not demand for `PointerMoveInteraction.target` to be not-null +--> [dotnet] Annotate nullability on `SendingRemoteHttpRequestEventArgs` (#15148) +* [dotnet] Annotate nullability on `SendingRemoteHttpRequestEventArgs` +* Do not consume our public-facing HTTP request event args body +--> [dotnet] Fix obvious code style formatting +--> [dotnet] Address some build warnings (#15157) +--> [dotnet] Enhance Print PageSize class to support for predefined well-known sizes (#15144) +--> [dotnet] Improve bidi exception when it is not enabled (#15163) +--> [dotnet] Annotate nullability on `DriverOptions` (#15167) +--> [dotnet] Annotate nullability on `ChromiumOptions` (#15173) +--> [dotnet] Annotate nullability on interactions (#15152) +--> [dotnet] [bidi] Use JsonSerializerContext to be AOT friendly (#15162) +--> [dotnet] Annotate nullability on chrome-based driver services (#15154) +--> [dotnet] Simplify and modernize `DevToolsDomains.InitializeDomains` (#15198) +--> [dotnet] Add nullability to Chromium configuration types (#15204) +--> [dotnet] Allow UTF-16 tolerant string converter as a dictionary key (#15203) +--> [dotnet] Fix webauth credential to allow nullable `rpID` (#15201) +--> [dotnet] [bidi] Avoid polymorphic commands to be more statically easier (#15202) +--> [dotnet] Optimize reflection in `JsonEnumMemberConverter` (#15205) +--> [dotnet] Annotate nullability on firefox and chromium options (#15206) +* [dotnet] Annotate nullability on firefox and chromium options +* Annotate some easy wins in the firefox namespace +--> [dotnet] Annotate nullability on `Actions` type (#15208) +* [dotnet] Annotate nullability on `Actions` type +* Add `Keys` nullability +--> [dotnet] Fix marionette host Firefox argument (#15153) +--> [dotnet] Make it easier to read bidi logs +--> [dotnet] Annotate nullability on `Navigate()` and `SwitchTo()` (#15211) +--> [dotnet] Annotate nullability on Firefox profile (#15207) +--> [dotnet] Annotate nullability on network interactions (#15209) +* [dotnet] Annotate nullability on network interactions +* Add XML doc to network implementation constructors +--> [dotnet] Add nullability to `Manage()` (#15210) +* [dotnet] Add nullability to `Manage()` +* Reference langword null on navigation +--> [java][js][rb][py][dotnet] Remove firefox cdp (#15200) +Related to #11736 +--> [bazel] Remove empty globs +In Bazel 8, the default is to disallow empty globs. Rather +than make more changes as we update, instead we'll flip the +flag now and fix up any issues. This will make the Bazel 8 +update simpler. +--> [dotnet] Fully annotate nullability on `HttpCommandExecutor` (#15110) +* [dotnet] Fully annotate nullability on `HttpCommandExecutor` +* Convert `HttpCommandExecutor` to `Lazy` +* Fix missing `HttpClient.Timeout` set, fix whitespace +* Broaden changes to include HTTP execution in general +* add XML doc about exception in `ICustomDriverCommandExecutor.ExecuteCustomDriverCommand` +* Only log parameter commands at the Trace level +* Do not log command parameters in HttpCommandExecutor at all +* fix push +--> [dotnet] Annotate nullability on `SafariOptions`, error, and enums (#15219) +* [dotnet] Annotate nullability on `SafariOptions`, error, and enums +* Convert `resultMap` initialization to `Add` style instead of indexer +--> [dotnet] Fix `JavaScriptEngine.ScriptCallbackBindings` not containing new bindings (#15221) +* [dotnet] Fix `JavaScriptEngine.ScriptCallbackBindings` not containing new bindings +* Add tests +* Implement IEquatable on `InitializationScript` +* Remove implementation of IEquatable, override normal `Equals` +* Override InitializationScript.GetHashCode +--> [dotnet] Handle nullability on `WebElement` (#15225) +--> [dotnet] Annotate nullability on `FirefoxDriverService` (#15220) +* [dotnet] Annotate nullability on `FirefoxDriverService` +* Replace null suppress with exception +* Bring back null suppression +--> [dotnet] Add nullability annotations to devtools domains (#15143) +* [dotnet] Add nullability annotations to devtools domains +* Update dotnet/src/webdriver/DevTools/Json/JsonEnumMemberConverter.cs +--> [dotnet] Annotate nullability on Domains (#15237) +--> [dotnet] Add not-null `Response.Value` helper (#15243) +* [dotnet] Add not-null `Response.Value` helper +* Use other style +* update method name +* add custom error message +* EnsureValueIsNotNull can return itself +* Improve message +* Improve message +--> [dotnet] Annotate nullability on `JavaScript` protocol (#15238) +--> [dotnet] Annotate nullability on `Target` protocol (#15240) +* [dotnet] Annotate nullability on `Target` protocol +* Handle nullability of adjacent `TargetInfo` +--> [dotnet] Annotate nullability on `Log` protocol (#15239) +--> [dotnet] Annotate nullability on `JavaScriptEngine` and related types (#15218) +* [dotnet] Fix `JavaScriptEngine.ScriptCallbackBindings` not containing new bindings +* Annotate nullability on `JavaScriptEngine` +* remove unnecessary changes to `InitializationScript` +* fix build +--> [dotnet] Annotate nullability on `DevToolsSession` (#15244) +--> [dotnet] [bidi] Support getting of client windows in browser module (#15241) +--> [dotnet][bidi] Remove json serialization from transport layer (#15250) +--> [dotnet][bidi] Add BrowsingContext.OnNavigationCommitted event (#15253) +--> [dotnet][bidi] Use subscription id for events to unsubscribe (#15251) +--> [dotnet][bidi] Add optional PromptUnload parameter when closing BrowsingContext and compiler helps (#15254) +--> [dotnet] Annotate nullability on `DevTools` and event args (#15252) +[dotnet] Annotate nullability `DevTools` and event args +--> [dotnet] Annotate nullability on platform-specific WebDrivers (#15236) +* [dotnet] Annotate nullability on platform-specific WebDrivers +* Use new Response not-null helper +--> [dotnet] Add back in a public parameterless constructor to `HttpRequestData` (#15258) +* [dotnet] Add back in a public parameterless constructor to `HttpRequestData` +* Improve nullability +* Make RequestId only settable internally +* Revert "Make RequestId only settable internally" +This reverts commit d0afea9b8fe7601a5bc55a98094b5afe590a5147. +* Handle nullability, make new constructor internal +* Apply suggestions from code review +Simplify null check +* Update dotnet/src/webdriver/HttpRequestData.cs +--> Update supported versions for Chrome DevTools + v4.28.0 ====== * Add CDP for Chrome 132 and remove 129 diff --git a/dotnet/selenium-dotnet-version.bzl b/dotnet/selenium-dotnet-version.bzl index 8de34da3d247b..8d9df7c212815 100644 --- a/dotnet/selenium-dotnet-version.bzl +++ b/dotnet/selenium-dotnet-version.bzl @@ -1,6 +1,6 @@ # BUILD FILE SYNTAX: STARLARK -SE_VERSION = "4.29.0-nightly202501201850" +SE_VERSION = "4.29.0" ASSEMBLY_VERSION = "4.0.0.0" SUPPORTED_NET_STANDARD_VERSIONS = ["netstandard2.0"] @@ -8,7 +8,7 @@ SUPPORTED_DEVTOOLS_VERSIONS = [ "v85", "v131", "v132", - "v130", + "v133", ] ASSEMBLY_COMPANY = "Selenium Committers" diff --git a/dotnet/src/webdriver/DevTools/DevToolsDomains.cs b/dotnet/src/webdriver/DevTools/DevToolsDomains.cs index bf2246bb0bffa..9e0182037d923 100644 --- a/dotnet/src/webdriver/DevTools/DevToolsDomains.cs +++ b/dotnet/src/webdriver/DevTools/DevToolsDomains.cs @@ -38,7 +38,7 @@ public abstract class DevToolsDomains // added to this array and to the method below. private static int[] SupportedDevToolsVersions => [ - 130, + 133, 132, 131, 85 @@ -46,7 +46,7 @@ public abstract class DevToolsDomains private static DevToolsDomains? CreateDevToolsDomain(int protocolVersion, DevToolsSession session) => protocolVersion switch { - 130 => new V130.V130Domains(session), + 133 => new V133.V133Domains(session), 132 => new V132.V132Domains(session), 131 => new V131.V131Domains(session), 85 => new V85.V85Domains(session), diff --git a/dotnet/src/webdriver/DevTools/v130/V130Domains.cs b/dotnet/src/webdriver/DevTools/v133/V133Domains.cs similarity index 80% rename from dotnet/src/webdriver/DevTools/v130/V130Domains.cs rename to dotnet/src/webdriver/DevTools/v133/V133Domains.cs index 75e7bac035802..40c62e0259670 100644 --- a/dotnet/src/webdriver/DevTools/v130/V130Domains.cs +++ b/dotnet/src/webdriver/DevTools/v133/V133Domains.cs @@ -1,4 +1,4 @@ -// +// // Licensed to the Software Freedom Conservancy (SFC) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information @@ -21,21 +21,21 @@ #nullable enable -namespace OpenQA.Selenium.DevTools.V130 +namespace OpenQA.Selenium.DevTools.V133 { /// - /// Class containing the domain implementation for version 130 of the DevTools Protocol. + /// Class containing the domain implementation for version 133 of the DevTools Protocol. /// - public class V130Domains : DevToolsDomains + public class V133Domains : DevToolsDomains { private readonly DevToolsSessionDomains domains; /// - /// Initializes a new instance of the V130Domains class. + /// Initializes a new instance of the V133Domains class. /// /// The DevToolsSession to use with this set of domains. /// If is . - public V130Domains(DevToolsSession session) + public V133Domains(DevToolsSession session) { this.domains = new DevToolsSessionDomains(session ?? throw new ArgumentNullException(nameof(session))); } @@ -43,7 +43,7 @@ public V130Domains(DevToolsSession session) /// /// Gets the DevTools Protocol version for which this class is valid. /// - public static int DevToolsVersion => 130; + public static int DevToolsVersion => 133; /// /// Gets the version-specific domains for the DevTools session. This value must be cast to a version specific type to be at all useful. @@ -53,21 +53,21 @@ public V130Domains(DevToolsSession session) /// /// Gets the object used for manipulating network information in the browser. /// - public override DevTools.Network Network => new V130Network(domains.Network, domains.Fetch); + public override DevTools.Network Network => new V133Network(domains.Network, domains.Fetch); /// /// Gets the object used for manipulating the browser's JavaScript execution. /// - public override JavaScript JavaScript => new V130JavaScript(domains.Runtime, domains.Page); + public override JavaScript JavaScript => new V133JavaScript(domains.Runtime, domains.Page); /// /// Gets the object used for manipulating DevTools Protocol targets. /// - public override DevTools.Target Target => new V130Target(domains.Target); + public override DevTools.Target Target => new V133Target(domains.Target); /// /// Gets the object used for manipulating the browser's logs. /// - public override DevTools.Log Log => new V130Log(domains.Log); + public override DevTools.Log Log => new V133Log(domains.Log); } } diff --git a/dotnet/src/webdriver/DevTools/v130/V130JavaScript.cs b/dotnet/src/webdriver/DevTools/v133/V133JavaScript.cs similarity index 95% rename from dotnet/src/webdriver/DevTools/v130/V130JavaScript.cs rename to dotnet/src/webdriver/DevTools/v133/V133JavaScript.cs index db6d4300720ab..0bd6ceec3c60e 100644 --- a/dotnet/src/webdriver/DevTools/v130/V130JavaScript.cs +++ b/dotnet/src/webdriver/DevTools/v133/V133JavaScript.cs @@ -1,4 +1,4 @@ -// +// // Licensed to the Software Freedom Conservancy (SFC) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information @@ -17,31 +17,31 @@ // under the License. // -using OpenQA.Selenium.DevTools.V130.Page; -using OpenQA.Selenium.DevTools.V130.Runtime; +using OpenQA.Selenium.DevTools.V133.Page; +using OpenQA.Selenium.DevTools.V133.Runtime; using System; using System.Collections.Generic; using System.Threading.Tasks; #nullable enable -namespace OpenQA.Selenium.DevTools.V130 +namespace OpenQA.Selenium.DevTools.V133 { /// - /// Class containing the JavaScript implementation for version 130 of the DevTools Protocol. + /// Class containing the JavaScript implementation for version 133 of the DevTools Protocol. /// - public class V130JavaScript : JavaScript + public class V133JavaScript : JavaScript { private readonly RuntimeAdapter runtime; private readonly PageAdapter page; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The DevTools Protocol adapter for the Runtime domain. /// The DevTools Protocol adapter for the Page domain. /// If or are . - public V130JavaScript(RuntimeAdapter runtime, PageAdapter page) + public V133JavaScript(RuntimeAdapter runtime, PageAdapter page) { this.runtime = runtime ?? throw new ArgumentNullException(nameof(runtime)); this.page = page ?? throw new ArgumentNullException(nameof(page)); diff --git a/dotnet/src/webdriver/DevTools/v130/V130Log.cs b/dotnet/src/webdriver/DevTools/v133/V133Log.cs similarity index 87% rename from dotnet/src/webdriver/DevTools/v130/V130Log.cs rename to dotnet/src/webdriver/DevTools/v133/V133Log.cs index d4fd7d4070c85..0f1243541ba05 100644 --- a/dotnet/src/webdriver/DevTools/v130/V130Log.cs +++ b/dotnet/src/webdriver/DevTools/v133/V133Log.cs @@ -1,4 +1,4 @@ -// +// // Licensed to the Software Freedom Conservancy (SFC) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information @@ -17,27 +17,27 @@ // under the License. // -using OpenQA.Selenium.DevTools.V130.Log; +using OpenQA.Selenium.DevTools.V133.Log; using System; using System.Threading.Tasks; #nullable enable -namespace OpenQA.Selenium.DevTools.V130 +namespace OpenQA.Selenium.DevTools.V133 { /// - /// Class containing the browser's log as referenced by version 130 of the DevTools Protocol. + /// Class containing the browser's log as referenced by version 133 of the DevTools Protocol. /// - public class V130Log : DevTools.Log + public class V133Log : DevTools.Log { - private readonly LogAdapter adapter; + private LogAdapter adapter; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The adapter for the Log domain. /// If is . - public V130Log(LogAdapter adapter) + public V133Log(LogAdapter adapter) { this.adapter = adapter ?? throw new ArgumentNullException(nameof(adapter)); this.adapter.EntryAdded += OnAdapterEntryAdded; diff --git a/dotnet/src/webdriver/DevTools/v130/V130Network.cs b/dotnet/src/webdriver/DevTools/v133/V133Network.cs similarity index 96% rename from dotnet/src/webdriver/DevTools/v130/V130Network.cs rename to dotnet/src/webdriver/DevTools/v133/V133Network.cs index 8250ea6244de9..eef15e714f8cb 100644 --- a/dotnet/src/webdriver/DevTools/v130/V130Network.cs +++ b/dotnet/src/webdriver/DevTools/v133/V133Network.cs @@ -1,4 +1,4 @@ -// +// // Licensed to the Software Freedom Conservancy (SFC) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information @@ -17,8 +17,8 @@ // under the License. // -using OpenQA.Selenium.DevTools.V130.Fetch; -using OpenQA.Selenium.DevTools.V130.Network; +using OpenQA.Selenium.DevTools.V133.Fetch; +using OpenQA.Selenium.DevTools.V133.Network; using System; using System.Collections.Generic; using System.Text; @@ -26,23 +26,23 @@ #nullable enable -namespace OpenQA.Selenium.DevTools.V130 +namespace OpenQA.Selenium.DevTools.V133 { /// - /// Class providing functionality for manipulating network calls using version 130 of the DevTools Protocol + /// Class providing functionality for manipulating network calls using version 133 of the DevTools Protocol /// - public class V130Network : DevTools.Network + public class V133Network : DevTools.Network { private FetchAdapter fetch; private NetworkAdapter network; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The adapter for the Network domain. /// The adapter for the Fetch domain. /// If or are . - public V130Network(NetworkAdapter network, FetchAdapter fetch) + public V133Network(NetworkAdapter network, FetchAdapter fetch) { this.network = network ?? throw new ArgumentNullException(nameof(network)); this.fetch = fetch ?? throw new ArgumentNullException(nameof(fetch)); @@ -249,9 +249,9 @@ public override async Task ContinueWithAuth(string requestId, string? userName, await fetch.ContinueWithAuth(new ContinueWithAuthCommandSettings() { RequestId = requestId, - AuthChallengeResponse = new V130.Fetch.AuthChallengeResponse() + AuthChallengeResponse = new V133.Fetch.AuthChallengeResponse() { - Response = V130.Fetch.AuthChallengeResponseResponseValues.ProvideCredentials, + Response = V133.Fetch.AuthChallengeResponseResponseValues.ProvideCredentials, Username = userName, Password = password } @@ -268,9 +268,9 @@ public override async Task CancelAuth(string requestId) await fetch.ContinueWithAuth(new ContinueWithAuthCommandSettings() { RequestId = requestId, - AuthChallengeResponse = new OpenQA.Selenium.DevTools.V130.Fetch.AuthChallengeResponse() + AuthChallengeResponse = new OpenQA.Selenium.DevTools.V133.Fetch.AuthChallengeResponse() { - Response = V130.Fetch.AuthChallengeResponseResponseValues.CancelAuth + Response = V133.Fetch.AuthChallengeResponseResponseValues.CancelAuth } }).ConfigureAwait(false); } diff --git a/dotnet/src/webdriver/DevTools/v130/V130Target.cs b/dotnet/src/webdriver/DevTools/v133/V133Target.cs similarity index 94% rename from dotnet/src/webdriver/DevTools/v130/V130Target.cs rename to dotnet/src/webdriver/DevTools/v133/V133Target.cs index 4b43db8f8af35..7a1139f665450 100644 --- a/dotnet/src/webdriver/DevTools/v130/V130Target.cs +++ b/dotnet/src/webdriver/DevTools/v133/V133Target.cs @@ -1,4 +1,4 @@ -// +// // Licensed to the Software Freedom Conservancy (SFC) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information @@ -17,7 +17,7 @@ // under the License. // -using OpenQA.Selenium.DevTools.V130.Target; +using OpenQA.Selenium.DevTools.V133.Target; using System; using System.Collections.Generic; using System.Collections.ObjectModel; @@ -25,21 +25,21 @@ #nullable enable -namespace OpenQA.Selenium.DevTools.V130 +namespace OpenQA.Selenium.DevTools.V133 { /// - /// Class providing functionality for manipulating targets for version 130 of the DevTools Protocol + /// Class providing functionality for manipulating targets for version 133 of the DevTools Protocol /// - public class V130Target : DevTools.Target + public class V133Target : DevTools.Target { private readonly TargetAdapter adapter; /// - /// Initializes a new instance of the class. + /// Initializes a new instance of the class. /// /// The adapter for the Target domain. /// If is . - public V130Target(TargetAdapter adapter) + public V133Target(TargetAdapter adapter) { this.adapter = adapter ?? throw new ArgumentNullException(nameof(adapter)); adapter.DetachedFromTarget += OnDetachedFromTarget; diff --git a/dotnet/test/common/CustomDriverConfigs/StableChannelChromeDriver.cs b/dotnet/test/common/CustomDriverConfigs/StableChannelChromeDriver.cs index 0f9edb86f98cf..46e7021af46f7 100644 --- a/dotnet/test/common/CustomDriverConfigs/StableChannelChromeDriver.cs +++ b/dotnet/test/common/CustomDriverConfigs/StableChannelChromeDriver.cs @@ -39,7 +39,7 @@ public StableChannelChromeDriver(ChromeDriverService service, ChromeOptions opti public static ChromeOptions DefaultOptions { - get { return new ChromeOptions() { BrowserVersion = "132" }; } + get { return new ChromeOptions() { BrowserVersion = "133" }; } } } } diff --git a/dotnet/test/common/DevTools/DevToolsConsoleTest.cs b/dotnet/test/common/DevTools/DevToolsConsoleTest.cs index 44b555aab8875..6e104fa059ef5 100644 --- a/dotnet/test/common/DevTools/DevToolsConsoleTest.cs +++ b/dotnet/test/common/DevTools/DevToolsConsoleTest.cs @@ -25,7 +25,7 @@ namespace OpenQA.Selenium.DevTools { - using CurrentCdpVersion = V132; + using CurrentCdpVersion = V133; [TestFixture] public class DevToolsConsoleTest : DevToolsTestFixture diff --git a/dotnet/test/common/DevTools/DevToolsLogTest.cs b/dotnet/test/common/DevTools/DevToolsLogTest.cs index 720a56bbc8d6d..4275c3ae43e62 100644 --- a/dotnet/test/common/DevTools/DevToolsLogTest.cs +++ b/dotnet/test/common/DevTools/DevToolsLogTest.cs @@ -25,7 +25,7 @@ namespace OpenQA.Selenium.DevTools { - using CurrentCdpVersion = V132; + using CurrentCdpVersion = V133; [TestFixture] public class DevToolsLogTest : DevToolsTestFixture diff --git a/dotnet/test/common/DevTools/DevToolsNetworkTest.cs b/dotnet/test/common/DevTools/DevToolsNetworkTest.cs index b9c4dac4220d0..c708d040f7753 100644 --- a/dotnet/test/common/DevTools/DevToolsNetworkTest.cs +++ b/dotnet/test/common/DevTools/DevToolsNetworkTest.cs @@ -25,7 +25,7 @@ namespace OpenQA.Selenium.DevTools { - using CurrentCdpVersion = V132; + using CurrentCdpVersion = V133; [TestFixture] public class DevToolsNetworkTest : DevToolsTestFixture diff --git a/dotnet/test/common/DevTools/DevToolsPerformanceTest.cs b/dotnet/test/common/DevTools/DevToolsPerformanceTest.cs index 9995818f1a82b..4d9774d2ff207 100644 --- a/dotnet/test/common/DevTools/DevToolsPerformanceTest.cs +++ b/dotnet/test/common/DevTools/DevToolsPerformanceTest.cs @@ -22,7 +22,7 @@ namespace OpenQA.Selenium.DevTools { - using CurrentCdpVersion = V132; + using CurrentCdpVersion = V133; [TestFixture] public class DevToolsPerformanceTest : DevToolsTestFixture diff --git a/dotnet/test/common/DevTools/DevToolsProfilerTest.cs b/dotnet/test/common/DevTools/DevToolsProfilerTest.cs index 2fd75bff692c7..87ca23b967d6c 100644 --- a/dotnet/test/common/DevTools/DevToolsProfilerTest.cs +++ b/dotnet/test/common/DevTools/DevToolsProfilerTest.cs @@ -24,7 +24,7 @@ namespace OpenQA.Selenium.DevTools { - using CurrentCdpVersion = V132; + using CurrentCdpVersion = V133; [TestFixture] public class DevToolsProfilerTest : DevToolsTestFixture diff --git a/dotnet/test/common/DevTools/DevToolsSecurityTest.cs b/dotnet/test/common/DevTools/DevToolsSecurityTest.cs index 4c6ad4bc53cab..e7fe69950dccb 100644 --- a/dotnet/test/common/DevTools/DevToolsSecurityTest.cs +++ b/dotnet/test/common/DevTools/DevToolsSecurityTest.cs @@ -25,7 +25,7 @@ namespace OpenQA.Selenium.DevTools { - using CurrentCdpVersion = V132; + using CurrentCdpVersion = V133; [TestFixture] public class DevToolsSecurityTest : DevToolsTestFixture diff --git a/dotnet/test/common/DevTools/DevToolsTabsTest.cs b/dotnet/test/common/DevTools/DevToolsTabsTest.cs index 2768f279a8ec9..38f0a680bc880 100644 --- a/dotnet/test/common/DevTools/DevToolsTabsTest.cs +++ b/dotnet/test/common/DevTools/DevToolsTabsTest.cs @@ -22,7 +22,7 @@ namespace OpenQA.Selenium.DevTools { - using CurrentCdpVersion = V132; + using CurrentCdpVersion = V133; [TestFixture] public class DevToolsTabsTest : DevToolsTestFixture diff --git a/dotnet/test/common/DevTools/DevToolsTargetTest.cs b/dotnet/test/common/DevTools/DevToolsTargetTest.cs index 7ba4b7f4d577f..694ec0eed7849 100644 --- a/dotnet/test/common/DevTools/DevToolsTargetTest.cs +++ b/dotnet/test/common/DevTools/DevToolsTargetTest.cs @@ -25,12 +25,12 @@ namespace OpenQA.Selenium.DevTools { - using CurrentCdpVersion = V132; + using CurrentCdpVersion = V133; [TestFixture] public class DevToolsTargetTest : DevToolsTestFixture { - private int id = 132; + private int id = 133; [Test] [IgnoreBrowser(Selenium.Browser.IE, "IE does not support Chrome DevTools Protocol")] diff --git a/java/CHANGELOG b/java/CHANGELOG index 06ab180db0d04..82f70d51315a2 100644 --- a/java/CHANGELOG +++ b/java/CHANGELOG @@ -1,3 +1,26 @@ +v4.29.0 +====== +--> [Java] Add Locale.ROOT to avoid port formatting issues for all drivers (#15121) +--> [java][bidi]: implement bidi `setCacheBehavior` (#15130) +--> [java] Enhance PageSize class to support for predefined and custom Paper Sizes (#15052) +--> [java] Ensure purging dead nodes service interval is configurable (#15175) +Fixes #15168 +--> [java] Ensure Selenium logging options are respected if java logging properties are not set (#15197) +Fixes #14160 and #15176 +--> [java] Do not enable CDP deprecation warning if BiDi enabled (#15170) +--> [java][js][rb][py][dotnet] Remove firefox cdp (#15200) +Related to #11736 +--> [bazel] Remove empty globs +In Bazel 8, the default is to disallow empty globs. Rather +than make more changes as we update, instead we'll flip the +flag now and fix up any issues. This will make the Bazel 8 +update simpler. +--> [grid] Add default sessionTimeout to NodeStatus to increase backward compatibility (#15229) +* [grid] Add default sessionTimeout to NodeStatus to increase backward compatibility +* Add test sessionTimeout from NodeStatus JSON scheme +--> [java] close the HttpClient if possible +--> Update supported versions for Chrome DevTools + v4.28.1 ====== * [java]: Add Locale.ROOT to avoid port formatting issues for all drivers (#15121) diff --git a/java/maven_install.json b/java/maven_install.json index e5101de5504bd..8c5536e4ed7d5 100644 --- a/java/maven_install.json +++ b/java/maven_install.json @@ -1,7 +1,7 @@ { "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", - "__INPUT_ARTIFACTS_HASH": 1099657782, - "__RESOLVED_ARTIFACTS_HASH": -937269061, + "__INPUT_ARTIFACTS_HASH": -1823190269, + "__RESOLVED_ARTIFACTS_HASH": 2003795494, "artifacts": { "com.beust:jcommander": { "shasums": { @@ -68,17 +68,17 @@ }, "com.github.spotbugs:spotbugs": { "shasums": { - "jar": "a4a29bc8c1080e03bfc33bee2aa8f5f37003c8a568fff034a39f126623b7b536", - "sources": "310d5b46d76d06698303b21a26482d070c04df78fe0807b8f734ca6477cc6028" + "jar": "f983f79cdee9d567f05886006cd42ce7489d990fb7175bcc5792541a00057549", + "sources": "8fe4015f36346bef7ba66b038faad9563f133ad64615e45c7132ef721da5d48f" }, - "version": "4.9.0" + "version": "4.9.1" }, "com.github.spotbugs:spotbugs-annotations": { "shasums": { - "jar": "c13d24d43609a1418472f046d739bceda714ed7aa500e0589c872e0d684a47da", + "jar": "7ff76e691441580bc26589eaf1c3be18a8c01a593e32bcce257c44491c2a61cc", "sources": "990ad9f3500499a99466b7c1e01284f4f41d1499358e7dc38c8defc59dab114c" }, - "version": "4.9.0" + "version": "4.9.1" }, "com.github.stephenc.jcip:jcip-annotations": { "shasums": { @@ -117,10 +117,10 @@ }, "com.google.code.gson:gson": { "shasums": { - "jar": "57928d6e5a6edeb2abd3770a8f95ba44dce45f3b23b7a9dc2b309c581552a78b", - "sources": "49a853f71bc874ee1898a4ad5009b57d0c536e5a998b3890253ffbf4b7276ad3" + "jar": "ebee13d5fb7477cd7f1cc010e0c356df8ca80709715248da97f79e35ccb4fbec", + "sources": "c5ab4ceb195f2a9278058d6a396c4872a1a07ed8b53fe80230dfd3f173d7cf56" }, - "version": "2.11.0" + "version": "2.12.1" }, "com.google.errorprone:error_prone_annotations": { "shasums": { @@ -214,24 +214,24 @@ }, "io.grpc:grpc-api": { "shasums": { - "jar": "a8d3d6dcc71f3ab613d668842282b488bdd93d3e99a0ef5dca7eee6fa734c283", - "sources": "766c0f64e4cdf2189241df8a0e0e2d5ce65e60a4a29bd82f295b0544e2fedc77" + "jar": "45faf2ac1bf2791e8fdabce53684a86b62c99b84cba26fb13a5ba3f4abf80d6c", + "sources": "4797fb5b5fb495df9da6995792167862cef60ed2e392776c434d5df4098f1168" }, - "version": "1.69.1" + "version": "1.70.0" }, "io.grpc:grpc-context": { "shasums": { - "jar": "45ef95b8c158a8b5bdd3acb67b9e682ef25414bb148f488ec847438ab64715d4", - "sources": "f4f509999485f8ec7094b323a8865acd2d62dc97970e9b22d692c8060040a885" + "jar": "eb2824831c0ac03e741efda86b141aa863a481ebc4aaf5a5c1f13a481dbb40ff", + "sources": "419603fecc423fb2704c67dd7ad91fdf51637f004fc114dfb9f42d225e8ce40b" }, - "version": "1.69.1" + "version": "1.70.0" }, "io.lettuce:lettuce-core": { "shasums": { - "jar": "59f6a591a631d844b355b831ee723bf6ce98d92f7a775de6b0690f0eb81480e7", - "sources": "e9d835ed5b0583fbf01deabdb2c4ab370ac73166a4011aac5f1e2ca397914912" + "jar": "7fdea38908f3cec630c319b2d5337e61ad444133c9119b857c3c9b2c88259c8f", + "sources": "5559b138e9fb4bc0ef578c0edf75f02fdc115226920cdc017f39e7cf51344888" }, - "version": "6.5.2.RELEASE" + "version": "6.5.3.RELEASE" }, "io.netty:netty-buffer": { "shasums": { diff --git a/java/src/org/openqa/selenium/devtools/v130/BUILD.bazel b/java/src/org/openqa/selenium/devtools/v133/BUILD.bazel similarity index 98% rename from java/src/org/openqa/selenium/devtools/v130/BUILD.bazel rename to java/src/org/openqa/selenium/devtools/v133/BUILD.bazel index 169f88a358e6b..f8b032f13be01 100644 --- a/java/src/org/openqa/selenium/devtools/v130/BUILD.bazel +++ b/java/src/org/openqa/selenium/devtools/v133/BUILD.bazel @@ -2,7 +2,7 @@ load("//common:defs.bzl", "copy_file") load("//java:defs.bzl", "java_export", "java_library") load("//java:version.bzl", "SE_VERSION") -cdp_version = "v130" +cdp_version = "v133" java_export( name = cdp_version, diff --git a/java/src/org/openqa/selenium/devtools/v130/v130CdpInfo.java b/java/src/org/openqa/selenium/devtools/v133/v133CdpInfo.java similarity index 86% rename from java/src/org/openqa/selenium/devtools/v130/v130CdpInfo.java rename to java/src/org/openqa/selenium/devtools/v133/v133CdpInfo.java index fe9227f90b64e..e9213b6e826de 100644 --- a/java/src/org/openqa/selenium/devtools/v130/v130CdpInfo.java +++ b/java/src/org/openqa/selenium/devtools/v133/v133CdpInfo.java @@ -15,15 +15,15 @@ // specific language governing permissions and limitations // under the License. -package org.openqa.selenium.devtools.v130; +package org.openqa.selenium.devtools.v133; import com.google.auto.service.AutoService; import org.openqa.selenium.devtools.CdpInfo; @AutoService(CdpInfo.class) -public class v130CdpInfo extends CdpInfo { +public class v133CdpInfo extends CdpInfo { - public v130CdpInfo() { - super(130, v130Domains::new); + public v133CdpInfo() { + super(133, v133Domains::new); } } diff --git a/java/src/org/openqa/selenium/devtools/v130/v130Domains.java b/java/src/org/openqa/selenium/devtools/v133/v133Domains.java similarity index 77% rename from java/src/org/openqa/selenium/devtools/v130/v130Domains.java rename to java/src/org/openqa/selenium/devtools/v133/v133Domains.java index a6ab737b71a04..7da6c5c37bd64 100644 --- a/java/src/org/openqa/selenium/devtools/v130/v130Domains.java +++ b/java/src/org/openqa/selenium/devtools/v133/v133Domains.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package org.openqa.selenium.devtools.v130; +package org.openqa.selenium.devtools.v133; import org.openqa.selenium.devtools.DevTools; import org.openqa.selenium.devtools.idealized.Domains; @@ -26,21 +26,21 @@ import org.openqa.selenium.devtools.idealized.target.Target; import org.openqa.selenium.internal.Require; -public class v130Domains implements Domains { +public class v133Domains implements Domains { - private final v130Javascript js; - private final v130Events events; - private final v130Log log; - private final v130Network network; - private final v130Target target; + private final v133Javascript js; + private final v133Events events; + private final v133Log log; + private final v133Network network; + private final v133Target target; - public v130Domains(DevTools devtools) { + public v133Domains(DevTools devtools) { Require.nonNull("DevTools", devtools); - events = new v130Events(devtools); - js = new v130Javascript(devtools); - log = new v130Log(); - network = new v130Network(devtools); - target = new v130Target(); + events = new v133Events(devtools); + js = new v133Javascript(devtools); + log = new v133Log(); + network = new v133Network(devtools); + target = new v133Target(); } @Override diff --git a/java/src/org/openqa/selenium/devtools/v130/v130Events.java b/java/src/org/openqa/selenium/devtools/v133/v133Events.java similarity index 86% rename from java/src/org/openqa/selenium/devtools/v130/v130Events.java rename to java/src/org/openqa/selenium/devtools/v133/v133Events.java index 9d5329796952f..34ec3a14e940d 100644 --- a/java/src/org/openqa/selenium/devtools/v130/v130Events.java +++ b/java/src/org/openqa/selenium/devtools/v133/v133Events.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package org.openqa.selenium.devtools.v130; +package org.openqa.selenium.devtools.v133; import java.time.Instant; import java.util.List; @@ -28,15 +28,15 @@ import org.openqa.selenium.devtools.events.ConsoleEvent; import org.openqa.selenium.devtools.idealized.Events; import org.openqa.selenium.devtools.idealized.runtime.model.RemoteObject; -import org.openqa.selenium.devtools.v130.runtime.Runtime; -import org.openqa.selenium.devtools.v130.runtime.model.ConsoleAPICalled; -import org.openqa.selenium.devtools.v130.runtime.model.ExceptionDetails; -import org.openqa.selenium.devtools.v130.runtime.model.ExceptionThrown; -import org.openqa.selenium.devtools.v130.runtime.model.StackTrace; +import org.openqa.selenium.devtools.v133.runtime.Runtime; +import org.openqa.selenium.devtools.v133.runtime.model.ConsoleAPICalled; +import org.openqa.selenium.devtools.v133.runtime.model.ExceptionDetails; +import org.openqa.selenium.devtools.v133.runtime.model.ExceptionThrown; +import org.openqa.selenium.devtools.v133.runtime.model.StackTrace; -public class v130Events extends Events { +public class v133Events extends Events { - public v130Events(DevTools devtools) { + public v133Events(DevTools devtools) { super(devtools); } @@ -77,7 +77,7 @@ protected ConsoleEvent toConsoleEvent(ConsoleAPICalled event) { protected JavascriptException toJsException(ExceptionThrown event) { ExceptionDetails details = event.getExceptionDetails(); Optional maybeTrace = details.getStackTrace(); - Optional maybeException = + Optional maybeException = details.getException(); String message = diff --git a/java/src/org/openqa/selenium/devtools/v130/v130Javascript.java b/java/src/org/openqa/selenium/devtools/v133/v133Javascript.java similarity index 85% rename from java/src/org/openqa/selenium/devtools/v130/v130Javascript.java rename to java/src/org/openqa/selenium/devtools/v133/v133Javascript.java index 537e2eb735a0f..0af685c18d42b 100644 --- a/java/src/org/openqa/selenium/devtools/v130/v130Javascript.java +++ b/java/src/org/openqa/selenium/devtools/v133/v133Javascript.java @@ -15,21 +15,21 @@ // specific language governing permissions and limitations // under the License. -package org.openqa.selenium.devtools.v130; +package org.openqa.selenium.devtools.v133; import java.util.Optional; import org.openqa.selenium.devtools.Command; import org.openqa.selenium.devtools.DevTools; import org.openqa.selenium.devtools.Event; import org.openqa.selenium.devtools.idealized.Javascript; -import org.openqa.selenium.devtools.v130.page.Page; -import org.openqa.selenium.devtools.v130.page.model.ScriptIdentifier; -import org.openqa.selenium.devtools.v130.runtime.Runtime; -import org.openqa.selenium.devtools.v130.runtime.model.BindingCalled; +import org.openqa.selenium.devtools.v133.page.Page; +import org.openqa.selenium.devtools.v133.page.model.ScriptIdentifier; +import org.openqa.selenium.devtools.v133.runtime.Runtime; +import org.openqa.selenium.devtools.v133.runtime.model.BindingCalled; -public class v130Javascript extends Javascript { +public class v133Javascript extends Javascript { - public v130Javascript(DevTools devtools) { + public v133Javascript(DevTools devtools) { super(devtools); } diff --git a/java/src/org/openqa/selenium/devtools/v130/v130Log.java b/java/src/org/openqa/selenium/devtools/v133/v133Log.java similarity index 89% rename from java/src/org/openqa/selenium/devtools/v130/v130Log.java rename to java/src/org/openqa/selenium/devtools/v133/v133Log.java index f665b4325a9c4..e873d1819948f 100644 --- a/java/src/org/openqa/selenium/devtools/v130/v130Log.java +++ b/java/src/org/openqa/selenium/devtools/v133/v133Log.java @@ -15,19 +15,19 @@ // specific language governing permissions and limitations // under the License. -package org.openqa.selenium.devtools.v130; +package org.openqa.selenium.devtools.v133; import java.util.function.Function; import java.util.logging.Level; import org.openqa.selenium.devtools.Command; import org.openqa.selenium.devtools.ConverterFunctions; import org.openqa.selenium.devtools.Event; -import org.openqa.selenium.devtools.v130.log.Log; -import org.openqa.selenium.devtools.v130.log.model.LogEntry; -import org.openqa.selenium.devtools.v130.runtime.model.Timestamp; +import org.openqa.selenium.devtools.v133.log.Log; +import org.openqa.selenium.devtools.v133.log.model.LogEntry; +import org.openqa.selenium.devtools.v133.runtime.model.Timestamp; import org.openqa.selenium.json.JsonInput; -public class v130Log implements org.openqa.selenium.devtools.idealized.log.Log { +public class v133Log implements org.openqa.selenium.devtools.idealized.log.Log { @Override public Command enable() { diff --git a/java/src/org/openqa/selenium/devtools/v130/v130Network.java b/java/src/org/openqa/selenium/devtools/v133/v133Network.java similarity index 92% rename from java/src/org/openqa/selenium/devtools/v130/v130Network.java rename to java/src/org/openqa/selenium/devtools/v133/v133Network.java index 62ee7845f1451..b3d2b578b0188 100644 --- a/java/src/org/openqa/selenium/devtools/v130/v130Network.java +++ b/java/src/org/openqa/selenium/devtools/v133/v133Network.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package org.openqa.selenium.devtools.v130; +package org.openqa.selenium.devtools.v133; import static java.net.HttpURLConnection.HTTP_OK; @@ -30,35 +30,35 @@ import org.openqa.selenium.devtools.DevToolsException; import org.openqa.selenium.devtools.Event; import org.openqa.selenium.devtools.idealized.Network; -import org.openqa.selenium.devtools.v130.fetch.Fetch; -import org.openqa.selenium.devtools.v130.fetch.model.*; -import org.openqa.selenium.devtools.v130.network.model.Request; +import org.openqa.selenium.devtools.v133.fetch.Fetch; +import org.openqa.selenium.devtools.v133.fetch.model.*; +import org.openqa.selenium.devtools.v133.network.model.Request; import org.openqa.selenium.internal.Either; import org.openqa.selenium.remote.http.HttpRequest; import org.openqa.selenium.remote.http.HttpResponse; -public class v130Network extends Network { +public class v133Network extends Network { - private static final Logger LOG = Logger.getLogger(v130Network.class.getName()); + private static final Logger LOG = Logger.getLogger(v133Network.class.getName()); - public v130Network(DevTools devTools) { + public v133Network(DevTools devTools) { super(devTools); } @Override protected Command setUserAgentOverride(UserAgent userAgent) { - return org.openqa.selenium.devtools.v130.network.Network.setUserAgentOverride( + return org.openqa.selenium.devtools.v133.network.Network.setUserAgentOverride( userAgent.userAgent(), userAgent.acceptLanguage(), userAgent.platform(), Optional.empty()); } @Override protected Command enableNetworkCaching() { - return org.openqa.selenium.devtools.v130.network.Network.setCacheDisabled(false); + return org.openqa.selenium.devtools.v133.network.Network.setCacheDisabled(false); } @Override protected Command disableNetworkCaching() { - return org.openqa.selenium.devtools.v130.network.Network.setCacheDisabled(true); + return org.openqa.selenium.devtools.v133.network.Network.setCacheDisabled(true); } @Override diff --git a/java/src/org/openqa/selenium/devtools/v130/v130Target.java b/java/src/org/openqa/selenium/devtools/v133/v133Target.java similarity index 83% rename from java/src/org/openqa/selenium/devtools/v130/v130Target.java rename to java/src/org/openqa/selenium/devtools/v133/v133Target.java index e64a8987d36be..9543657afabfb 100644 --- a/java/src/org/openqa/selenium/devtools/v130/v130Target.java +++ b/java/src/org/openqa/selenium/devtools/v133/v133Target.java @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -package org.openqa.selenium.devtools.v130; +package org.openqa.selenium.devtools.v133; import java.util.List; import java.util.Map; @@ -28,21 +28,21 @@ import org.openqa.selenium.devtools.idealized.browser.model.BrowserContextID; import org.openqa.selenium.devtools.idealized.target.model.SessionID; import org.openqa.selenium.devtools.idealized.target.model.TargetID; -import org.openqa.selenium.devtools.v130.target.Target; -import org.openqa.selenium.devtools.v130.target.model.TargetInfo; +import org.openqa.selenium.devtools.v133.target.Target; +import org.openqa.selenium.devtools.v133.target.model.TargetInfo; import org.openqa.selenium.json.JsonInput; import org.openqa.selenium.json.TypeToken; -public class v130Target implements org.openqa.selenium.devtools.idealized.target.Target { +public class v133Target implements org.openqa.selenium.devtools.idealized.target.Target { @Override public Command detachFromTarget( Optional sessionId, Optional targetId) { return Target.detachFromTarget( sessionId.map( - id -> new org.openqa.selenium.devtools.v130.target.model.SessionID(id.toString())), + id -> new org.openqa.selenium.devtools.v133.target.model.SessionID(id.toString())), targetId.map( - id -> new org.openqa.selenium.devtools.v130.target.model.TargetID(id.toString()))); + id -> new org.openqa.selenium.devtools.v133.target.model.TargetID(id.toString()))); } @Override @@ -74,19 +74,19 @@ public Command detachFromTarget( @Override public Command attachToTarget(TargetID targetId) { - Function mapper = + Function mapper = ConverterFunctions.map( - "sessionId", org.openqa.selenium.devtools.v130.target.model.SessionID.class); + "sessionId", org.openqa.selenium.devtools.v133.target.model.SessionID.class); return new Command<>( "Target.attachToTarget", Map.of( "targetId", - new org.openqa.selenium.devtools.v130.target.model.TargetID(targetId.toString()), + new org.openqa.selenium.devtools.v133.target.model.TargetID(targetId.toString()), "flatten", true), input -> { - org.openqa.selenium.devtools.v130.target.model.SessionID id = mapper.apply(input); + org.openqa.selenium.devtools.v133.target.model.SessionID id = mapper.apply(input); return new SessionID(id.toString()); }); } @@ -101,9 +101,9 @@ public Event detached() { return new Event<>( "Target.detachedFromTarget", input -> { - Function converter = + Function converter = ConverterFunctions.map( - "targetId", org.openqa.selenium.devtools.v130.target.model.TargetID.class); + "targetId", org.openqa.selenium.devtools.v133.target.model.TargetID.class); return new TargetID(converter.apply(input).toString()); }); } diff --git a/java/src/org/openqa/selenium/devtools/versions.bzl b/java/src/org/openqa/selenium/devtools/versions.bzl index ed6af1bc721ec..ab8ddf847d61a 100644 --- a/java/src/org/openqa/selenium/devtools/versions.bzl +++ b/java/src/org/openqa/selenium/devtools/versions.bzl @@ -2,7 +2,7 @@ CDP_VERSIONS = [ "v85", # Required by Firefox "v131", "v132", - "v130", + "v133", ] CDP_DEPS = ["//java/src/org/openqa/selenium/devtools/%s" % v for v in CDP_VERSIONS] diff --git a/java/version.bzl b/java/version.bzl index a55d73545d3ef..cba5e2fefc344 100644 --- a/java/version.bzl +++ b/java/version.bzl @@ -1,2 +1,2 @@ -SE_VERSION = "4.29.0-SNAPSHOT" +SE_VERSION = "4.29.0" TOOLS_JAVA_VERSION = "17" diff --git a/javascript/node/selenium-webdriver/BUILD.bazel b/javascript/node/selenium-webdriver/BUILD.bazel index b53f221f9b9d1..6d96cb3d349d9 100644 --- a/javascript/node/selenium-webdriver/BUILD.bazel +++ b/javascript/node/selenium-webdriver/BUILD.bazel @@ -11,13 +11,13 @@ load("//javascript/private:browsers.bzl", "BROWSERS") npm_link_all_packages(name = "node_modules") -VERSION = "4.29.0-nightly202501202154" +VERSION = "4.29.0" BROWSER_VERSIONS = [ "v85", "v131", "v132", - "v130", + "v133", ] js_library( diff --git a/javascript/node/selenium-webdriver/CHANGES.md b/javascript/node/selenium-webdriver/CHANGES.md index b178a0aef559d..670fd4d01d3ba 100644 --- a/javascript/node/selenium-webdriver/CHANGES.md +++ b/javascript/node/selenium-webdriver/CHANGES.md @@ -1,3 +1,24 @@ +## 4.29.0 +--> [javascript] Bumping version to nightly +--> [javascript] Fixing changelog +[skip ci] +--> [java][js][rb][py][dotnet] Remove firefox cdp (#15200) +Related to #11736 +--> [bazel] Remove empty globs +In Bazel 8, the default is to disallow empty globs. Rather +than make more changes as we update, instead we'll flip the +flag now and fix up any issues. This will make the Bazel 8 +update simpler. +--> [js][bidi]: implement bidi `setCacheBehavior` command (#15136) +* implement js bidi command `setCacheBehavior` +* add bidi tests for `setCacheBehavior` +* updated tests +* add input validation for context IDs +* use enum like structure (CacheBehavior) +* use named import in other network test files +* fix lib/network.js +--> Update supported versions for Chrome DevTools + ## 4.28.1 - [JS] specify min required node versiton to 18.20.5 diff --git a/javascript/node/selenium-webdriver/package.json b/javascript/node/selenium-webdriver/package.json index 392661a1c3d41..993e204127a8e 100644 --- a/javascript/node/selenium-webdriver/package.json +++ b/javascript/node/selenium-webdriver/package.json @@ -1,6 +1,6 @@ { "name": "selenium-webdriver", - "version": "4.29.0-nightly202501202154", + "version": "4.29.0", "description": "The official WebDriver JavaScript bindings from the Selenium project", "license": "Apache-2.0", "keywords": [ diff --git a/py/BUILD.bazel b/py/BUILD.bazel index c9c2c31439548..de787adbacb6b 100644 --- a/py/BUILD.bazel +++ b/py/BUILD.bazel @@ -62,13 +62,13 @@ compile_pip_requirements( ], ) -SE_VERSION = "4.29.0.202501231718" +SE_VERSION = "4.29.0" BROWSER_VERSIONS = [ "v85", "v131", "v132", - "v130", + "v133", ] TEST_DEPS = [ diff --git a/py/CHANGES b/py/CHANGES index 3219a596db008..6dc313d7f6b18 100644 --- a/py/CHANGES +++ b/py/CHANGES @@ -1,3 +1,18 @@ +Selenium 4.29.0 +--> [ci] Bumping Java and Python to nightly +--> [py] disable strict time stamps in Firefox profile (#15141) +--> [py] Enhance PrintOptions to support default, predefined, and custom page sizes (#15052) (#15064) +* Enhance PrintOptions to support default, predefined, and custom page sizes in Python (#15052) +* adding reference link for page sizes +* fixing format issues +* fixing the assertion to compare with then new default width +--> [java][js][rb][py][dotnet] Remove firefox cdp (#15200) +Related to #11736 +--> [py]: handle named `get_cookie` and `delete_cookie` for None and empty strings (#15073) +* handle `None` and empty string case for `get_cookie()` and `delete_cookie()` +* run `format.sh` +* apply suggestion for test cases + Selenium 4.28.1 * [py] Fix installing most of the data from source distributions diff --git a/py/docs/source/conf.py b/py/docs/source/conf.py index f2085176a46b6..c5ec00ac9d037 100644 --- a/py/docs/source/conf.py +++ b/py/docs/source/conf.py @@ -58,7 +58,7 @@ # The short X.Y version. version = '4.29' # The full version, including alpha/beta/rc tags. -release = '4.29.0.202501231718' +release = '4.29.0' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/py/pyproject.toml b/py/pyproject.toml index 66a5d5e6832ce..81a4e77fda67c 100644 --- a/py/pyproject.toml +++ b/py/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "selenium" -version = "4.29.0.202501231718" +version = "4.29.0" license = { text = "Apache 2.0" } description = "Official Python bindings for Selenium WebDriver." readme = "README.rst" diff --git a/py/selenium/__init__.py b/py/selenium/__init__.py index d4e5bd81a3661..61f714c6576e8 100644 --- a/py/selenium/__init__.py +++ b/py/selenium/__init__.py @@ -16,4 +16,4 @@ # under the License. -__version__ = "4.29.0.202501231718" +__version__ = "4.29.0" diff --git a/py/selenium/webdriver/__init__.py b/py/selenium/webdriver/__init__.py index 28592e0ba7a22..d07fb3629b21c 100644 --- a/py/selenium/webdriver/__init__.py +++ b/py/selenium/webdriver/__init__.py @@ -44,7 +44,7 @@ from .wpewebkit.service import Service as WPEWebKitService # noqa from .wpewebkit.webdriver import WebDriver as WPEWebKit # noqa -__version__ = "4.29.0.202501231718" +__version__ = "4.29.0" # We need an explicit __all__ because the above won't otherwise be exported. __all__ = [ diff --git a/rb/CHANGES b/rb/CHANGES index c3d335b5fc564..31cddc2a81aa1 100644 --- a/rb/CHANGES +++ b/rb/CHANGES @@ -1,3 +1,47 @@ +4.29.0 (2025-02-10) +========================= +--> Bumping version for nightly +--> [rb] Add Bidi Network Response Handler (#14900) +--> [java][js][rb][py][dotnet] Remove firefox cdp (#15200) +Related to #11736 +--> [rb][BiDi] Add support for provide response command (#15080) +* Add response handler +* Update auth handlers and improve the :on method +* Request and response working as expected +* Add test for continue without auth and cancel auth +* Finish implementation +* Correct rubocop offenses +* Add alias for user to do network.bidi instead of network.network +* Fix rust file causing formatting error +* Handle requests and responses in block +* Add ability to pass handlers to each different intercepted element +* Headers working +* All tests passing and signatures simplified +* remove unnecessary changes +* remove unnecessary changes +* Added credentials and set cookie header to intercepted response +* Fix rubocop issues +* Make auth handler more user friendly +* Add filtering an url pattern support +* Fix formatting issues +* Modify tests to avoid element related failures on firefox +* Fix styling of comments +* Improve types and hash consistency +* Update all the places that use 9.4.8.0 +* Serialize request values +* Refactor cookies, headers and set cookie headers +* Simplify serialization +* Add extra type support +* remove unnecessary comment +* Improve typing +* add provide response support +* Correct rubocop offenses +* Remove set cookie headers +* Remove set cookie headers +* Fix failing tests +* Add negative scenario +--> Update supported versions for Chrome DevTools + 4.28.0 (2025-01-16) ========================= * Add CDP for Chrome 132 and remove 129 diff --git a/rb/Gemfile.lock b/rb/Gemfile.lock index 05854708fc276..151aae31ca06f 100644 --- a/rb/Gemfile.lock +++ b/rb/Gemfile.lock @@ -1,9 +1,9 @@ PATH remote: . specs: - selenium-devtools (0.132.0) + selenium-devtools (0.133.0) selenium-webdriver (~> 4.2) - selenium-webdriver (4.29.0.nightly) + selenium-webdriver (4.29.0) base64 (~> 0.2) logger (~> 1.4) rexml (~> 3.2, >= 3.2.5) @@ -38,8 +38,9 @@ GEM bigdecimal rexml csv (3.3.2) - curb (1.0.6) + curb (1.0.8) date (3.4.1) + date (3.4.1-java) debug (1.10.0) irb (~> 1.10) reline (>= 0.3.8) @@ -60,22 +61,26 @@ GEM concurrent-ruby (~> 1.0) io-console (0.8.0) io-console (0.8.0-java) - irb (1.14.3) + irb (1.15.1) + pp (>= 0.6.0) rdoc (>= 4.0.0) reline (>= 0.4.2) - jar-dependencies (0.4.1) - json (2.9.1) - json (2.9.1-java) - language_server-protocol (3.17.0.3) + jar-dependencies (0.5.4) + json (2.10.0) + json (2.10.0-java) + language_server-protocol (3.17.0.4) listen (3.9.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) logger (1.6.5) minitest (5.25.4) parallel (1.26.3) - parser (3.3.7.0) + parser (3.3.7.1) ast (~> 2.4.1) racc + pp (0.6.2) + prettyprint + prettyprint (0.2.0) psych (5.2.3) date stringio @@ -94,7 +99,7 @@ GEM rbs (3.8.1) logger rchardet (1.9.0) - rdoc (6.11.0) + rdoc (6.12.0) psych (>= 4.0.0) regexp_parser (2.10.0) reline (0.6.0) @@ -104,7 +109,7 @@ GEM rspec-core (~> 3.13.0) rspec-expectations (~> 3.13.0) rspec-mocks (~> 3.13.0) - rspec-core (3.13.2) + rspec-core (3.13.3) rspec-support (~> 3.13.0) rspec-expectations (3.13.3) diff-lcs (>= 1.2.0, < 2.0) @@ -113,17 +118,17 @@ GEM diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.13.0) rspec-support (3.13.2) - rubocop (1.70.0) + rubocop (1.71.2) json (~> 2.3) language_server-protocol (>= 3.17.0) parallel (~> 1.10) parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) regexp_parser (>= 2.9.3, < 3.0) - rubocop-ast (>= 1.36.2, < 2.0) + rubocop-ast (>= 1.38.0, < 2.0) ruby-progressbar (~> 1.7) unicode-display_width (>= 2.4.0, < 4.0) - rubocop-ast (1.37.0) + rubocop-ast (1.38.0) parser (>= 3.3.1.0) rubocop-capybara (2.21.0) rubocop (~> 1.41) @@ -167,7 +172,7 @@ GEM tzinfo (2.0.6) concurrent-ruby (~> 1.0) unicode-display_width (2.6.0) - webmock (3.24.0) + webmock (3.25.0) addressable (>= 2.8.0) crack (>= 0.3.2) hashdiff (>= 0.4.0, < 2.0.0) diff --git a/rb/lib/selenium/devtools/BUILD.bazel b/rb/lib/selenium/devtools/BUILD.bazel index 421ef65ccd11e..d0ba35f99e6a7 100644 --- a/rb/lib/selenium/devtools/BUILD.bazel +++ b/rb/lib/selenium/devtools/BUILD.bazel @@ -7,7 +7,7 @@ CDP_VERSIONS = [ "v85", "v131", "v132", - "v130", + "v133", ] rb_library( diff --git a/rb/lib/selenium/devtools/version.rb b/rb/lib/selenium/devtools/version.rb index 09be47a2674a5..d6d706079381c 100644 --- a/rb/lib/selenium/devtools/version.rb +++ b/rb/lib/selenium/devtools/version.rb @@ -19,6 +19,6 @@ module Selenium module DevTools - VERSION = '0.132.0' + VERSION = '0.133.0' end # DevTools end # Selenium diff --git a/rb/lib/selenium/webdriver/version.rb b/rb/lib/selenium/webdriver/version.rb index 20971dbacd2bb..12c4f5dbd1e98 100644 --- a/rb/lib/selenium/webdriver/version.rb +++ b/rb/lib/selenium/webdriver/version.rb @@ -19,6 +19,6 @@ module Selenium module WebDriver - VERSION = '4.29.0.nightly' + VERSION = '4.29.0' end # WebDriver end # Selenium diff --git a/rust/CHANGELOG.md b/rust/CHANGELOG.md index a27c6d382db7a..f5ba6a31116ea 100644 --- a/rust/CHANGELOG.md +++ b/rust/CHANGELOG.md @@ -1,3 +1,7 @@ +0.4.29 +====== + + 0.4.28 ======