[dotnet] [bidi] Statically declared events#17331
[dotnet] [bidi] Statically declared events#17331nvborisenko merged 12 commits intoSeleniumHQ:trunkfrom
Conversation
Review Summary by Qodo[dotnet] [bidi] Statically declare commands and events with descriptors
WalkthroughsDescription• Refactor BiDi commands and events to use static descriptors • Replace dynamic command/event creation with pre-defined static fields • Simplify module implementations by removing factory methods • Update broker to work with command/event descriptors instead of instances File Changes1. dotnet/src/webdriver/BiDi/Command.cs
|
Code Review by Qodo
|
There was a problem hiding this comment.
Pull request overview
This PR continues the .NET BiDi refactor to avoid per-call allocations by switching from per-command/per-event classes to statically declared command/event descriptors, and updates the broker/module plumbing accordingly.
Changes:
- Replace command object allocation/serialization with static
Command<TParameters, TResult>descriptors and a newModule.ExecuteAsync/Broker.ExecuteAsyncpipeline. - Replace string-based event subscription metadata with static
Event<TEventArgs, TEventParams>descriptors. - Update module serializer contexts to generate
JsonTypeInfofor parameter/result types (instead of command types), and remove many command wrapper classes.
Reviewed changes
Copilot reviewed 83 out of 83 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| dotnet/test/webdriver/BiDi/Session/SessionTests.cs | Updates custom-module test usage to the new descriptor-based ExecuteAsync path. |
| dotnet/src/webdriver/BiDi/WebExtension/WebExtensionModule.cs | Converts WebExtension commands to static Command<,> descriptors and updates JSON context registrations. |
| dotnet/src/webdriver/BiDi/WebExtension/Uninstall.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/WebExtension/Install.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Storage/StorageModule.cs | Converts storage commands to static descriptors and updates JSON context registrations. |
| dotnet/src/webdriver/BiDi/Storage/SetCookie.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Storage/GetCookies.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Storage/DeleteCookies.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Speculation/SpeculationModule.cs | Converts event subscription to static Event<,> descriptor usage. |
| dotnet/src/webdriver/BiDi/Session/Unsubscribe.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Session/Subscribe.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Session/Status.cs | Removes per-call command wrapper class; keeps result/options types. |
| dotnet/src/webdriver/BiDi/Session/SessionModule.cs | Converts session commands to static descriptors and updates JSON context registrations. |
| dotnet/src/webdriver/BiDi/Session/New.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Session/End.cs | Removes per-call command wrapper class; keeps result/options types. |
| dotnet/src/webdriver/BiDi/Script/ScriptModule.cs | Converts script commands/events to static descriptors and updates JSON context registrations. |
| dotnet/src/webdriver/BiDi/Script/RemovePreloadScript.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Script/GetRealms.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Script/Evaluate.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Script/Disown.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Script/CallFunction.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Script/AddPreloadScript.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Permissions/SetPermission.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Permissions/PermissionsModule.cs | Converts permissions command to static descriptor and updates JSON context registrations. |
| dotnet/src/webdriver/BiDi/Network/SetExtraHeaders.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Network/SetCacheBehavior.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Network/RemoveIntercept.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Network/RemoveDataCollector.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Network/ProvideResponse.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Network/NetworkModule.cs | Converts network commands/events to static descriptors and updates JSON context registrations. |
| dotnet/src/webdriver/BiDi/Network/GetData.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Network/FailRequest.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Network/ContinueWithAuth.cs | Removes per-call command wrapper class; keeps polymorphic parameter type hierarchy. |
| dotnet/src/webdriver/BiDi/Network/ContinueResponse.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Network/ContinueRequest.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Network/AddIntercept.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Network/AddDataCollector.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Module.cs | Replaces protected execution/subscription API with descriptor-based overloads. |
| dotnet/src/webdriver/BiDi/Log/LogModule.cs | Converts log event subscription to static Event<,> descriptor usage. |
| dotnet/src/webdriver/BiDi/Input/SetFiles.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Input/ReleaseActions.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Input/PerformActions.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Input/InputModule.cs | Converts input commands/event to static descriptors and updates JSON context registrations. |
| dotnet/src/webdriver/BiDi/Event.cs | Introduces Event<TEventArgs, TEventParams> descriptor type for static event metadata. |
| dotnet/src/webdriver/BiDi/Emulation/SetUserAgentOverride.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Emulation/SetTouchOverride.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Emulation/SetTimezoneOverride.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Emulation/SetScrollbarTypeOverride.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Emulation/SetScriptingEnabled.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Emulation/SetScreenSettingsOverride.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Emulation/SetScreenOrientationOverride.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Emulation/SetNetworkConditions.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Emulation/SetLocaleOverride.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Emulation/SetGeolocationOverride.cs | Removes per-call command wrapper class; keeps polymorphic parameter type hierarchy. |
| dotnet/src/webdriver/BiDi/Emulation/SetForcedColorsModeThemeOverride.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Emulation/EmulationModule.cs | Converts emulation commands to static descriptors and updates JSON context registrations. |
| dotnet/src/webdriver/BiDi/Command.cs | Replaces class-based command model with Command<TParameters, TResult> descriptor and keeps Parameters/EmptyResult. |
| dotnet/src/webdriver/BiDi/BrowsingContext/TraverseHistory.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/BrowsingContext/SetViewport.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/BrowsingContext/Reload.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/BrowsingContext/Print.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/BrowsingContext/Navigate.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/BrowsingContext/LocateNodes.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/BrowsingContext/HandleUserPrompt.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/BrowsingContext/GetTree.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/BrowsingContext/Create.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/BrowsingContext/Close.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/BrowsingContext/CaptureScreenshot.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextStorageModule.cs | Makes browsing-context storage module implementation internal. |
| dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextScriptModule.cs | Makes browsing-context script module implementation internal. |
| dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextNetworkModule.cs | Makes browsing-context network module implementation internal. |
| dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextModule.cs | Converts browsingContext commands/events to static descriptors and updates JSON context registrations. |
| dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextLogModule.cs | Makes browsing-context log module implementation internal. |
| dotnet/src/webdriver/BiDi/BrowsingContext/BrowsingContextInputModule.cs | Makes browsing-context input module implementation internal. |
| dotnet/src/webdriver/BiDi/BrowsingContext/Activate.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Browser/SetDownloadBehavior.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Browser/RemoveUserContext.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Browser/GetUserContexts.cs | Removes per-call command wrapper class; keeps result/options types. |
| dotnet/src/webdriver/BiDi/Browser/GetClientWindows.cs | Removes per-call command wrapper class; keeps result/options types. |
| dotnet/src/webdriver/BiDi/Browser/CreateUserContext.cs | Removes per-call command wrapper class; keeps parameter/options/result types. |
| dotnet/src/webdriver/BiDi/Browser/Close.cs | Removes per-call command wrapper class; keeps result/options types. |
| dotnet/src/webdriver/BiDi/Browser/BrowserModule.cs | Converts browser commands to static descriptors, updates JSON context registrations, and changes visibility. |
| dotnet/src/webdriver/BiDi/Broker.cs | Updates execution/subscription plumbing to use descriptors; writes command JSON envelopes manually; adjusts pending-command removal semantics. |
Review Summary by Qodo[dotnet] [bidi] Statically declare events with descriptors
WalkthroughsDescription• Refactor BiDi event subscription to use static event descriptors • Replace individual event factory methods with Event<TEventArgs, TEventParams> records • Simplify SubscribeAsync method signatures by consolidating event metadata • Update all module event handlers to use descriptor-based approach File Changes1. dotnet/src/webdriver/BiDi/Event.cs
|
Code Review by Qodo
|
Continuation of #17330
🔗 Related Issues
Contributes to #16095
💥 What does this PR do?
....
🔄 Types of changes