diff --git a/.bazelrc b/.bazelrc index 4c9ebcfd307a6..e4834f9759d01 100644 --- a/.bazelrc +++ b/.bazelrc @@ -30,15 +30,19 @@ build --tool_java_runtime_version=remotejdk_17 build --javacopt="--release 11" # Require java dependencies to be used and first-order - build --experimental_strict_java_deps=strict build --explicit_java_test_deps +# Avoid ErrorProne getting annoyed about "impossible null checks" +build --javacopt="-Xep:ImpossibleNullComparison:OFF" + # Allow spaces in runfile paths build --nobuild_runfile_links # More JS magic build --experimental_allow_unresolved_symlinks +# Avoid a warning about directory tracking being unsound +startup --host_jvm_args=-DBAZEL_TRACK_SOURCE_DIRECTORIES=1 # Required for faster TS builds build --@aspect_rules_ts//ts:skipLibCheck=always @@ -53,6 +57,11 @@ query --@aspect_rules_ts//ts:default_to_tsc_transpiler build --incompatible_strict_action_env +# Required to get `protobuf` compiling, which is required for `rules_closure` +build --incompatible_enable_cc_toolchain_resolution +build --cxxopt=-std=c++14 +build --host_cxxopt=-std=c++14 + # For build stamping build --enable_platform_specific_config @@ -100,8 +109,14 @@ test --test_timeout=1800 test:node_debug --test_output=streamed --test_strategy=exclusive --test_timeout=9999 --nocache_test_results test:ruby_debug --test_output=streamed --test_env=RUBY_DEBUG_FORK_MODE=parent --run_under="@bundle//bin:rdbg --nonstop --open --command" -build:release --config=remote + build:release --stamp +build:release --compilation_mode=opt + +# As regular `release` but all the build work happens on the RBE +build:remote_release --config=release +build:remote_release --config=remote +build:remote_release --remote_download_toplevel # RBE import %workspace%/.bazelrc.remote diff --git a/.bazelversion b/.bazelversion index 0ee843cc60466..643916c03f1f6 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -7.2.0 +7.3.1 diff --git a/.github/release.yml b/.github/release.yml index 8f13b55a4e290..95dee31ec9630 100644 --- a/.github/release.yml +++ b/.github/release.yml @@ -1,6 +1,6 @@ changelog: exclude: labels: - -dependencies + - dependencies authors: - selenium-ci diff --git a/.github/workflows/bazel.yml b/.github/workflows/bazel.yml index 41a100327c9db..7b86e983e85d1 100644 --- a/.github/workflows/bazel.yml +++ b/.github/workflows/bazel.yml @@ -70,7 +70,7 @@ on: jobs: bazel: name: ${{ inputs.name }} - runs-on: ${{ inputs.os == 'macos' && 'macos-13' || format('{0}-latest', inputs.os) }} + runs-on: ${{ format('{0}-latest', inputs.os) }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SEL_M2_USER: ${{ secrets.SEL_M2_USER }} @@ -116,7 +116,7 @@ jobs: node-version: ${{ inputs.node-version }} - name: Setup Bazel with caching if: inputs.caching - uses: bazel-contrib/setup-bazel@0.8.5 + uses: bazel-contrib/setup-bazel@0.9.1 with: bazelisk-cache: true bazelrc: common --color=yes @@ -130,7 +130,7 @@ jobs: repository-cache: true - name: Setup Bazel without caching if: inputs.caching == false - uses: bazel-contrib/setup-bazel@0.8.5 + uses: bazel-contrib/setup-bazel@0.9.1 with: bazelrc: common --color=yes - name: Setup Fluxbox and Xvfb @@ -146,6 +146,9 @@ jobs: - name: Setup Safari if: inputs.browser == 'safari' run: sudo safaridriver --enable + - name: Setup curl for Ubuntu + if: inputs.os == 'ubuntu' + run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev - name: Run Bazel run: ${{ inputs.run }} - name: Start SSH session diff --git a/.github/workflows/ci-dotnet.yml b/.github/workflows/ci-dotnet.yml index 65debef8c10e4..1e2a2c259382d 100644 --- a/.github/workflows/ci-dotnet.yml +++ b/.github/workflows/ci-dotnet.yml @@ -23,4 +23,5 @@ jobs: java-version: 17 os: windows run: | + fsutil 8dot3name set 0 bazel test //dotnet/test/common:ElementFindingTest-firefox //dotnet/test/common:ElementFindingTest-chrome --pin_browsers=true diff --git a/.github/workflows/ci-java.yml b/.github/workflows/ci-java.yml index 569d68d562440..1ebd054c05089 100644 --- a/.github/workflows/ci-java.yml +++ b/.github/workflows/ci-java.yml @@ -22,6 +22,7 @@ jobs: # https://github.com/bazelbuild/rules_jvm_external/issues/1046 java-version: 17 run: | + fsutil 8dot3name set 0 bazel test --flaky_test_attempts 3 //java/test/org/openqa/selenium/chrome:ChromeDriverFunctionalTest ` //java/test/org/openqa/selenium/federatedcredentialmanagement:FederatedCredentialManagementTest ` //java/test/org/openqa/selenium/firefox:FirefoxDriverBuilderTest ` diff --git a/.github/workflows/ci-javascript.yml b/.github/workflows/ci-javascript.yml deleted file mode 100644 index 38f61cd0911cf..0000000000000 --- a/.github/workflows/ci-javascript.yml +++ /dev/null @@ -1,35 +0,0 @@ -name: CI - JavaScript - -on: - workflow_call: - workflow_dispatch: - -jobs: - build: - name: Build - uses: ./.github/workflows/bazel.yml - with: - name: Build - cache-key: javascript-build - run: bazel build //javascript/node/selenium-webdriver:selenium-webdriver - - browser-tests: - name: Browser Tests - needs: build - uses: ./.github/workflows/bazel.yml - strategy: - fail-fast: false - matrix: - browser: - - chrome - - firefox - with: - name: Browser Tests (${{ matrix.browser }}) - browser: ${{ matrix.browser }} - cache-key: javascript-${{matrix.browser}}-browser-tests - run: > - bazel test - --flaky_test_attempts 3 - --test_tag_filters ${{ matrix.browser }} - --local_test_jobs 1 - //javascript/node/... diff --git a/.github/workflows/ci-python.yml b/.github/workflows/ci-python.yml index 9749fd4e7ad82..00040c5d40ddf 100644 --- a/.github/workflows/ci-python.yml +++ b/.github/workflows/ci-python.yml @@ -16,7 +16,7 @@ jobs: docs: name: Documentation needs: build - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - name: Checkout source tree uses: actions/checkout@v4 @@ -36,7 +36,7 @@ jobs: lint: name: Lint needs: build - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - name: Checkout source tree uses: actions/checkout@v4 @@ -58,7 +58,7 @@ jobs: mypy: name: Mypy needs: build - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - name: Checkout source tree uses: actions/checkout@v4 @@ -81,8 +81,54 @@ jobs: name: Remote Tests needs: build uses: ./.github/workflows/bazel.yml + strategy: + fail-fast: false + matrix: + include: + - browser: firefox with: - name: Integration Tests (remote) - browser: firefox - cache-key: py-remote + name: Integration Tests (remote, ${{ matrix.browser }}) + browser: ${{ matrix.browser }} + cache-key: py-remote-${{ matrix.browser }} run: bazel test --local_test_jobs 1 --flaky_test_attempts 3 //py:test-remote + + browser-tests: + name: Browser Tests + needs: build + uses: ./.github/workflows/bazel.yml + strategy: + fail-fast: false + matrix: + include: + - browser: chrome + os: ubuntu + - browser: edge + os: ubuntu + - browser: firefox + os: ubuntu + with: + name: Integration Tests (${{ matrix.browser }}, ${{ matrix.os }}) + browser: ${{ matrix.browser }} + os: ${{ matrix.os }} + cache-key: py-browser-${{ matrix.browser }} + run: | + bazel test --local_test_jobs 1 --flaky_test_attempts 3 //py:common-${{ matrix.browser }}-bidi + bazel test --local_test_jobs 1 --flaky_test_attempts 3 //py:test-${{ matrix.browser }} + + safari-tests: + name: Browser Tests + needs: build + uses: ./.github/workflows/bazel.yml + strategy: + fail-fast: false + matrix: + include: + - browser: safari + os: macos + with: + name: Integration Tests (${{ matrix.browser }}, ${{ matrix.os }}) + browser: ${{ matrix.browser }} + os: ${{ matrix.os }} + cache-key: py-browser-${{ matrix.browser }} + run: | + bazel test --local_test_jobs 1 --flaky_test_attempts 3 //py:test-${{ matrix.browser }} diff --git a/.github/workflows/ci-rbe.yml b/.github/workflows/ci-rbe.yml index 382aea6409f2a..2e15949925580 100644 --- a/.github/workflows/ci-rbe.yml +++ b/.github/workflows/ci-rbe.yml @@ -15,7 +15,7 @@ jobs: with: name: Check format script run caching: false - ruby-version: jruby-9.4.5.0 + ruby-version: jruby-9.4.8.0 run: ./scripts/github-actions/check-format.sh test: @@ -25,5 +25,5 @@ jobs: with: name: All RBE tests caching: false - ruby-version: jruby-9.4.5.0 + ruby-version: jruby-9.4.8.0 run: ./scripts/github-actions/ci-build.sh diff --git a/.github/workflows/ci-ruby.yml b/.github/workflows/ci-ruby.yml index 419e17df5065c..88cf3512ebfba 100644 --- a/.github/workflows/ci-ruby.yml +++ b/.github/workflows/ci-ruby.yml @@ -39,17 +39,17 @@ jobs: fail-fast: false matrix: include: - - ruby-version: 3.0.6 + - ruby-version: 3.1.6 os: ubuntu - - ruby-version: 3.0.6 + - ruby-version: 3.1.6 os: windows - - ruby-version: 3.0.6 + - ruby-version: 3.1.6 os: macos - - ruby-version: 3.3.0 + - ruby-version: 3.3.5 os: ubuntu - - ruby-version: jruby-9.4.5.0 + - ruby-version: jruby-9.4.8.0 os: ubuntu - - ruby-version: truffleruby-23.1.1 + - ruby-version: truffleruby-24.1.1 os: ubuntu with: name: Unit Tests (${{ matrix.ruby-version }}, ${{ matrix.os }}) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2df302b754c39..db2c0a78857de 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,7 +21,7 @@ jobs: with: fetch-depth: 50 - name: Setup Bazel - uses: bazel-contrib/setup-bazel@0.8.5 + uses: bazel-contrib/setup-bazel@0.9.1 with: bazelisk-cache: true cache-version: 2 @@ -59,17 +59,6 @@ jobs: contains(join(github.event.commits.*.message), '[java]') || contains(github.event.pull_request.title, '[java]') - javascript: - name: JavaScript - needs: check - uses: ./.github/workflows/ci-javascript.yml - if: > - github.event_name == 'schedule' || - github.event_name == 'workflow_dispatch' || - contains(needs.check.outputs.targets, '//javascript') || - contains(join(github.event.commits.*.message), '[js]') || - contains(github.event.pull_request.title, '[js]') - python: name: Python needs: check diff --git a/.github/workflows/delete-comments.yml b/.github/workflows/delete-comments.yml new file mode 100644 index 0000000000000..d766665ced333 --- /dev/null +++ b/.github/workflows/delete-comments.yml @@ -0,0 +1,44 @@ +name: Delete Comments + +on: + issue_comment: + types: [created] + +permissions: + issues: write + +jobs: + delete_comment: + runs-on: ubuntu-latest + steps: + - name: Check for specific strings in comment + id: check_comment + uses: actions/github-script@v7 + with: + script: | + const comment = context.payload.comment.body; + const triggerStrings = ['www.mediafire.com']; + return triggerStrings.some(triggerString => comment.includes(triggerString)); + + - name: Delete comment if it contains any of the specific strings + if: steps.check_comment.outputs.result == 'true' + uses: actions/github-script@v7 + with: + script: | + const commentId = context.payload.comment.id; + await github.rest.issues.deleteComment({ + owner: context.repo.owner, + repo: context.repo.repo, + comment_id: commentId + }); + + - name: Block user from the org if their comment contained any of the banned strings + if: steps.check_comment.outputs.result == 'true' + uses: actions/github-script@v7 + with: + script: | + const username = context.payload.comment.user.login + await github.rest.orgs.blockUser({ + org: context.repo.owner, + username: username + }); diff --git a/.github/workflows/label-commenter.yml b/.github/workflows/label-commenter.yml index fddc487a797ef..205647d30daa0 100644 --- a/.github/workflows/label-commenter.yml +++ b/.github/workflows/label-commenter.yml @@ -12,7 +12,7 @@ permissions: jobs: comment: if: github.repository_owner == 'seleniumhq' - runs-on: ubuntu-20.04 + runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Label Commenter diff --git a/.github/workflows/pre-release.yml b/.github/workflows/pre-release.yml index fb2d19a97a272..40253a37a5f77 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/pre-release.yml @@ -72,6 +72,8 @@ jobs: with: ruby-version: '3.1' working-directory: 'rb' + - name: Setup curl for Ubuntu + run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev - name: "Prep git" run: | git config --local user.email "selenium-ci@users.noreply.github.com" diff --git a/.github/workflows/stage-release.yml b/.github/workflows/stage-release.yml index 5f4eccb69d477..b40f7690347ee 100644 --- a/.github/workflows/stage-release.yml +++ b/.github/workflows/stage-release.yml @@ -2,61 +2,70 @@ name: Release Staging on: pull_request: - types: [closed] + types: [ closed ] + workflow_dispatch: + inputs: + version: + description: 'Selenium version to release' + required: true env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + BRANCH_NAME: ${{ github.event.pull_request.head.ref }} jobs: github-release: if: > - github.event.pull_request.merged == true && + (github.event.pull_request.merged == true && github.repository_owner == 'seleniumhq' && - startsWith(github.event.pull_request.head.ref, 'release-preparation-') + startsWith(github.event.pull_request.head.ref, 'release-preparation-')) || + (github.event_name == 'workflow_dispatch' && + github.event.inputs.version != '' && + github.repository_owner == 'seleniumhq') runs-on: ubuntu-latest + permissions: write-all steps: - name: Checkout repo uses: actions/checkout@v4 - name: Extract version from branch name - id: extract_version + if: github.event.pull_request.merged == true run: | - BRANCH_NAME="${{ github.event.pull_request.head.ref }}" VERSION=$(echo $BRANCH_NAME | grep -oE '[0-9]+\.[0-9]+\.[0-9]+') echo "VERSION=$VERSION" >> $GITHUB_ENV + - name: Extract version from workflow input + if: github.event_name == 'workflow_dispatch' + run: | + VERSION=${{ inputs.version }} + echo "VERSION=$VERSION" >> $GITHUB_ENV - name: Prep git run: | git config --local user.email "selenium-ci@users.noreply.github.com" git config --local user.name "Selenium CI Bot" - - name: Tag Release - run: | - git tag selenium-${{ env.VERSION }} - git push origin selenium-${{ env.VERSION }} - - name: Update Nightly Tag to Remove pre-release - run: | - git fetch --tags - git tag -d nightly || echo "Nightly tag not found" - git tag nightly - git push origin refs/tags/nightly --force + # - name: Tag Release + # run: | + # git tag selenium-${{ env.VERSION }} || echo "Tag already exists" + # git push origin selenium-${{ env.VERSION }} || echo "Tag already exists remotely" - name: Setup Java uses: actions/setup-java@v3 with: java-version: 17 distribution: 'temurin' + - name: Setup curl for Ubuntu + run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev - name: Build and Stage Packages run: ./go all:package[--config=release] - name: Generate Draft Release - uses: softprops/action-gh-release@v2 + uses: ncipollo/release-action@v1 with: - name: Selenium ${{ env.VERSION }} - body: | - ## Detailed Changelogs by Component - **[Java](https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG)**     |     **[Python](https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES)**     |     **[DotNet](https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG)**     |     **[Ruby](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)**     |     **[JavaScript](https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md)**     |     **[IEDriver](https://github.com/SeleniumHQ/selenium/blob/trunk/cpp/iedriverserver/CHANGELOG)** -
- tag_name: selenium-${{ env.VERSION }} + artifacts: "build/dist/*.*" + bodyFile: "scripts/github-actions/release_header.md" draft: true - generate_release_notes: true + generateReleaseNotes: true + name: "Selenium ${{ env.VERSION }}" prerelease: false - files: build/dist/*.* + skipIfReleaseExists: true + tag: "selenium-${{ env.VERSION }}" + commit: "${{ github.sha }}" update-documentation: needs: github-release diff --git a/.github/workflows/update-documentation.yml b/.github/workflows/update-documentation.yml index 7e2e5efee541f..4bed149651701 100644 --- a/.github/workflows/update-documentation.yml +++ b/.github/workflows/update-documentation.yml @@ -46,7 +46,7 @@ jobs: git config --local user.email "selenium-ci@users.noreply.github.com" git config --local user.name "Selenium CI Bot" - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: 17 distribution: 'temurin' @@ -58,7 +58,7 @@ jobs: git format-patch -1 HEAD --stdout > java-docs.patch - name: Upload patch if: needs.determine-language.outputs.language == 'all' || needs.determine-language.outputs.language == 'java' - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: java-docs-patch path: java-docs.patch @@ -76,10 +76,12 @@ jobs: git config --local user.email "selenium-ci@users.noreply.github.com" git config --local user.name "Selenium CI Bot" - name: Setup Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: java-version: 17 distribution: 'temurin' + - name: Setup curl for Ubuntu + run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev - name: Update Documentation if: needs.determine-language.outputs.language == 'all' || needs.determine-language.outputs.language == 'ruby' run: ./go rb:docs @@ -88,7 +90,7 @@ jobs: git format-patch -1 HEAD --stdout > ruby-docs.patch - name: Upload patch if: needs.determine-language.outputs.language == 'all' || needs.determine-language.outputs.language == 'ruby' - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: ruby-docs-patch path: ruby-docs.patch @@ -106,7 +108,7 @@ jobs: git config --local user.email "selenium-ci@users.noreply.github.com" git config --local user.name "Selenium CI Bot" - name: Set up Python 3.8 - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: 3.8 - name: Install dependencies @@ -121,7 +123,7 @@ jobs: git format-patch -1 HEAD --stdout > python-docs.patch - name: Upload patch if: needs.determine-language.outputs.language == 'all' || needs.determine-language.outputs.language == 'python' - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: python-docs-patch path: python-docs.patch @@ -150,7 +152,7 @@ jobs: git format-patch -1 HEAD --stdout > dotnet-docs.patch - name: Upload patch if: needs.determine-language.outputs.language == 'all' || needs.determine-language.outputs.language == 'dotnet' - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: dotnet-docs-patch path: dotnet-docs.patch @@ -179,7 +181,7 @@ jobs: git format-patch -1 HEAD --stdout > node-docs.patch - name: Upload patch if: needs.determine-language.outputs.language == 'all' || needs.determine-language.outputs.language == 'node' - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: node-docs-patch path: node-docs.patch @@ -192,46 +194,26 @@ jobs: uses: actions/checkout@v4 with: ref: 'gh-pages' + fetch-depth: 0 + fetch-tags: true - name: Create and checkout new branch run: | git config --local user.email "selenium-ci@users.noreply.github.com" git config --local user.name "Selenium CI Bot" git checkout -b api-docs-${{ inputs.tag }} - - name: Download Java patch - if: needs.determine-language.outputs.language == 'all' || needs.determine-language.outputs.language == 'java' - uses: actions/download-artifact@v2 - with: - name: java-docs-patch - path: patches/ - - name: Download Ruby patch - if: needs.determine-language.outputs.language == 'all' || needs.determine-language.outputs.language == 'ruby' - uses: actions/download-artifact@v2 - with: - name: ruby-docs-patch - path: patches/ - - name: Download Python patch - if: needs.determine-language.outputs.language == 'all' || needs.determine-language.outputs.language == 'python' - uses: actions/download-artifact@v2 + - name: Download all patches + uses: actions/download-artifact@v4 with: - name: python-docs-patch - path: patches/ - - name: Download .NET patch - if: needs.determine-language.outputs.language == 'all' || needs.determine-language.outputs.language == 'dotnet' - uses: actions/download-artifact@v2 - with: - name: dotnet-docs-patch - path: patches/ - - name: Download Node patch - if: needs.determine-language.outputs.language == 'all' || needs.determine-language.outputs.language == 'node' - uses: actions/download-artifact@v2 - with: - name: node-docs-patch path: patches/ + merge-multiple: true + - name: Show downloaded patches + run: ls -lah patches/ - name: Apply patches run: | for patch in patches/*.patch; do git am < "$patch" done + rm -rf patches/ - name: Push Branch run: git push origin api-docs-${{ inputs.tag }} - name: Documentation Pull Request diff --git a/.gitignore b/.gitignore index 259551ffd4482..0a10c80ea2aae 100644 --- a/.gitignore +++ b/.gitignore @@ -78,6 +78,7 @@ py/docs/source/**/* py/build/ py/LICENSE py/pytestdebug.log +py/python.iml selenium.egg-info/ third_party/java/jetty/jetty-repacked.jar *.user @@ -140,3 +141,4 @@ javascript/node/selenium-webdriver/.vscode/settings.json dotnet-bin .metadata/ +.npmrc diff --git a/.skipped-tests b/.skipped-tests index 0ab38eb93fdce..2f8b21cfba2c2 100644 --- a/.skipped-tests +++ b/.skipped-tests @@ -18,9 +18,20 @@ -//javascript/atoms:test-chrome -//javascript/atoms:test-edge -//javascript/atoms:test-firefox-beta +-//javascript/chrome-driver/... +-//javascript/node/selenium-webdriver:test-bidi-network-test.js-chrome +-//javascript/node/selenium-webdriver:test-builder-test.js-chrome +-//javascript/node/selenium-webdriver:test-builder-test.js-firefox +-//javascript/node/selenium-webdriver:test-chrome-devtools-test.js-chrome +-//javascript/node/selenium-webdriver:test-chrome-options-test.js-chrome +-//javascript/node/selenium-webdriver:test-chrome-service-test.js-chrome +-//javascript/node/selenium-webdriver:test-firefox-options-test.js-firefox +-//javascript/node/selenium-webdriver:test-lib-capabilities-test.js-chrome -//py:test-chrome-test/selenium/webdriver/chrome/chrome_launcher_tests.py -//py:test-chrome-test/selenium/webdriver/chrome/chrome_service_tests.py -//py:test-chrome-test/selenium/webdriver/chrome/proxy_tests.py +-//py:test-edge-test/selenium/webdriver/edge/edge_launcher_tests.py +-//py:test-edge-test/selenium/webdriver/edge/edge_service_tests.py -//rb/spec/integration/selenium/webdriver/chrome:service-chrome -//rb/spec/integration/selenium/webdriver/chrome:service-chrome-bidi -//rb/spec/integration/selenium/webdriver/chrome:service-chrome-remote @@ -45,3 +56,4 @@ -//rb/spec/integration/selenium/webdriver:element-chrome -//rb/spec/integration/selenium/webdriver:element-chrome-bidi -//rb/spec/integration/selenium/webdriver:element-chrome-remote +-//rust/tests/... diff --git a/AUTHORS b/AUTHORS index 39da6a60b9d47..4eeedcf9c0014 100644 --- a/AUTHORS +++ b/AUTHORS @@ -68,9 +68,11 @@ Andrei Andrei Botalov Andrei Rusu Andrei Solntsev +Andrew Nesbitt Andrey Botalov Andrii Rohovets Andy Duncan +Angie Jones anonymous_sdet Anthony Sottile Anton Usmansky @@ -90,6 +92,7 @@ Ashley Trinh Aslak Hellesøy asmundak Atsushi Tatsuma +Augustin Gottlieb <33221555+aguspe@users.noreply.github.com> Augustin Gottlieb Pequeno <33221555+aguspe@users.noreply.github.com> Aurélien Pupier Austin Michael Wilkins <42476341+amwilkins@users.noreply.github.com> @@ -105,6 +108,7 @@ bgermann bhecquet bhkwan Bill Agee +BlitzDestroyer <143762104+BlitzDestroyer@users.noreply.github.com> bob Bob Baron Bob Lubecker @@ -146,10 +150,12 @@ Chirag Jayswal chris Chris Block Chris Gamache +Chris Gossett <54162250+cgossett@users.noreply.github.com> Chris Martin Chris Mohr Chris Stringer Chris Ward +Christian Ansel <36796016+ChrstnAnsl@users.noreply.github.com> Christian Biesinger Christian Clauss Christopher Buttkus @@ -196,6 +202,7 @@ Darrin Cherry Dave Hoover Dave Hunt daviande +David Bernhard David Burns David English David Fischer @@ -221,12 +228,14 @@ Diego Fernández Santos Diego Molina Dima Kovalenko Dima Veselov +Diogo Teles Sant'Anna Dmitriy Sintsov Dmitry Dubenets Dmitry Tokarev Dmytro Shpakovskyi dnknitro doctor-house <66467615+doctor-house@users.noreply.github.com> +Dominic Evans <8060970+dnwe@users.noreply.github.com> Dominik Dary Dominik Rauch Dominik Stadler @@ -242,6 +251,8 @@ Dylan Reichstadt Dylan Semler Earlopain <14981592+Earlopain@users.noreply.github.com> Eberhard Beilharz +Ed Manlove +Ed Manlove Edi Weissmann Edirin Atumah Eduardo Wermuth @@ -324,6 +335,7 @@ Harshit Agrawal <94462364+harshit-bs@users.noreply.github.com> havja Haw-bin Chai hectorhon +HeeJun <64578367+syber911911@users.noreply.github.com> Heky helen3141 <54561656+helen3141@users.noreply.github.com> Henrik Skupin @@ -344,6 +356,7 @@ ifland Ilya Kozhevnikov Ilyas Bayraktar Immanuel Hayden +Indomitable Innokenty Shuvalov Isaac A. Murchie Isaul Vargas @@ -447,6 +460,7 @@ Jonathan Lipps Jonathon Kereliuk Jongkuen Hong Jordan Mace +Jose D. Gomez R. <1josegomezr@gmail.com> josephg Josh Goldberg Joshua Bruning @@ -603,6 +617,7 @@ ming Mirko Nasato mitchloudenbeck Miten Chauhan +mk868 mkvetko MMK-IBSEN <124664589+MMK-IBSEN@users.noreply.github.com> Mohab Mohie @@ -617,14 +632,17 @@ mpurland mtrea <32470080+mtrea@users.noreply.github.com> Mubariz Hajimuradov Muhammad Hammad <33136628+mhnaeem@users.noreply.github.com> +MustafaAgamy Muthu Kannan MWschutte <72599545+MWschutte@users.noreply.github.com> myslak71 +Natalia Pozhidaeva Nate Lowry Nathan Isom native-api Naveen <172697+naveensrinivasan@users.noreply.github.com> Naveen Singh <36371707+Naveen3Singh@users.noreply.github.com> +Navin Chandra <98466550+navin772@users.noreply.github.com> Neil Carvalho Nelson Sproul Nick Crews @@ -646,6 +664,7 @@ nvonop Oboleninov Anton Oleg Höfling Oleg Ridchenko <73664101+oleg-rd@users.noreply.github.com> +Oleksandr Kulychok Oleksandr Kulychok Oleksii Olivier SCHNEIDER @@ -666,6 +685,7 @@ Patrick Lightbody Paul G Webster Paul Hammant Pavel Lobashov +Pavel Sobolev Perryn Fowler Pete Johns Peter Hedenskog @@ -683,6 +703,7 @@ PombaM Potapov Dmitriy Prakhar Rawat praveendvd <45095911+praveendvd@users.noreply.github.com> +Priyansh Garg Puja Jagani Pulkit Sharma Pydi Chandra @@ -706,6 +727,7 @@ richard.hines RichCrook richseviora Rishav Trivedi +Rob Brackett Rob Richardson Rob Wu Robert Elliot @@ -769,6 +791,7 @@ Shishu Raj Pandey Shreyan Avigyan <74560907+shreyanavigyan@users.noreply.github.com> Shubham Singh <41840111+singh811@users.noreply.github.com> Shuhai Shen +Simon Benzer <69980130+shbenzer@users.noreply.github.com> Simon K Simon Perepelitsa Simon Stewart @@ -794,6 +817,7 @@ Stuart Knightly sufyanAbbasi sugama sunnyyukaige +Swastik Baranwal symonk Take take0x <89313929+take0x@users.noreply.github.com> diff --git a/MODULE.bazel b/MODULE.bazel index b9e8069676731..9b53a716a698f 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -1,10 +1,10 @@ module(name = "selenium") -bazel_dep(name = "apple_rules_lint", version = "0.3.2") -bazel_dep(name = "aspect_bazel_lib", version = "2.7.7") -bazel_dep(name = "aspect_rules_esbuild", version = "0.20.1") -bazel_dep(name = "aspect_rules_js", version = "1.42.3") -bazel_dep(name = "aspect_rules_ts", version = "2.4.2") +bazel_dep(name = "apple_rules_lint", version = "0.4.0") +bazel_dep(name = "aspect_bazel_lib", version = "2.8.1") +bazel_dep(name = "aspect_rules_esbuild", version = "0.21.0") +bazel_dep(name = "aspect_rules_js", version = "2.0.1") +bazel_dep(name = "aspect_rules_ts", version = "3.1.0") bazel_dep(name = "bazel_features", version = "1.13.0") bazel_dep(name = "bazel_skylib", version = "1.7.1") bazel_dep(name = "buildifier_prebuilt", version = "6.4.0") @@ -12,20 +12,20 @@ bazel_dep(name = "contrib_rules_jvm", version = "0.27.0") bazel_dep(name = "platforms", version = "0.0.10") # Required for the closure rules -bazel_dep(name = "protobuf", version = "21.7", dev_dependency = True, repo_name = "com_google_protobuf") +bazel_dep(name = "protobuf", version = "29.1", dev_dependency = True, repo_name = "com_google_protobuf") # Required for rules_rust to import the crates properly bazel_dep(name = "rules_cc", version = "0.0.9", dev_dependency = True) -bazel_dep(name = "rules_dotnet", version = "0.15.1") -bazel_dep(name = "rules_java", version = "7.6.3") -bazel_dep(name = "rules_jvm_external", version = "6.1") -bazel_dep(name = "rules_nodejs", version = "6.2.0") +bazel_dep(name = "rules_dotnet", version = "0.16.1") +bazel_dep(name = "rules_java", version = "7.11.1") +bazel_dep(name = "rules_jvm_external", version = "6.6") +bazel_dep(name = "rules_nodejs", version = "6.3.0") bazel_dep(name = "rules_oci", version = "1.7.6") bazel_dep(name = "rules_pkg", version = "0.10.1") bazel_dep(name = "rules_python", version = "0.33.0") bazel_dep(name = "rules_proto", version = "6.0.0") -bazel_dep(name = "rules_ruby", version = "0.11.0") +bazel_dep(name = "rules_ruby", version = "0.13.0") linter = use_extension("@apple_rules_lint//lint:extensions.bzl", "linter") linter.configure( @@ -39,9 +39,13 @@ linter.configure( linter.register(name = "rust-rustfmt") node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node") -node.toolchain(node_version = "18.17.0") +node.toolchain(node_version = "20.9.0") -pnpm = use_extension("@aspect_rules_js//npm:extensions.bzl", "pnpm", dev_dependency = True) +pnpm = use_extension( + "@aspect_rules_js//npm:extensions.bzl", + "pnpm", + dev_dependency = True, +) use_repo(pnpm, "pnpm") npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm") @@ -72,13 +76,13 @@ rules_ts_ext.deps( use_repo(rules_ts_ext, "npm_typescript") esbuild = use_extension("@aspect_rules_esbuild//esbuild:extensions.bzl", "esbuild") -esbuild.toolchain(esbuild_version = "0.19.9") +esbuild.toolchain(esbuild_version = "0.23.0") use_repo(esbuild, "esbuild_toolchains") register_toolchains("@esbuild_toolchains//:all") dotnet = use_extension("@rules_dotnet//dotnet:extensions.bzl", "dotnet") -dotnet.toolchain(dotnet_version = "7.0.400") +dotnet.toolchain(dotnet_version = "8.0.203") use_repo(dotnet, "dotnet_toolchains") selenium_paket = use_extension("//dotnet:paket.nuget_extension.bzl", "nuget_extension") @@ -165,60 +169,65 @@ maven.install( name = "maven", artifacts = [ "com.beust:jcommander:1.82", - "com.github.javaparser:javaparser-core:3.26.0", + "com.github.javaparser:javaparser-core:3.26.2", "com.github.spotbugs:spotbugs:4.8.6", "com.github.stephenc.jcip:jcip-annotations:1.0-1", "com.google.code.gson:gson:2.11.0", - "com.google.guava:guava:33.2.1-jre", + "com.google.guava:guava:33.3.1-jre", "com.google.auto:auto-common:1.2.2", "com.google.auto.service:auto-service:1.1.1", "com.google.auto.service:auto-service-annotations:1.1.1", - "com.google.googlejavaformat:google-java-format:jar:1.22.0", - "com.graphql-java:graphql-java:20.2", - "com.graphql-java:java-dataloader:3.2.0", + "com.google.googlejavaformat:google-java-format:jar:1.25.0", + "com.graphql-java:graphql-java:22.3", "dev.failsafe:failsafe:3.3.2", - "io.grpc:grpc-context:1.64.0", - "io.lettuce:lettuce-core:6.3.2.RELEASE", - "io.netty:netty-buffer:4.1.111.Final", - "io.netty:netty-codec-http:4.1.111.Final", - "io.netty:netty-codec-http2:4.1.111.Final", - "io.netty:netty-common:4.1.111.Final", - "io.netty:netty-handler:4.1.111.Final", - "io.netty:netty-handler-proxy:4.1.111.Final", - "io.netty:netty-transport:4.1.111.Final", - "io.opentelemetry:opentelemetry-api:1.39.0", - "io.opentelemetry:opentelemetry-context:1.39.0", - "io.opentelemetry:opentelemetry-exporter-logging:1.39.0", - "io.opentelemetry:opentelemetry-sdk:1.39.0", - "io.opentelemetry:opentelemetry-sdk-common:1.39.0", - "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:1.39.0", - "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi:1.39.0", - "io.opentelemetry:opentelemetry-sdk-testing:1.39.0", - "io.opentelemetry:opentelemetry-sdk-trace:1.39.0", - "io.opentelemetry.semconv:opentelemetry-semconv:1.25.0-alpha", - "io.ous:jtoml:2.0.0", + "io.grpc:grpc-context:1.68.1", + "io.lettuce:lettuce-core:6.5.0.RELEASE", + "io.netty:netty-buffer", + "io.netty:netty-codec-http", + "io.netty:netty-codec-http2", + "io.netty:netty-common", + "io.netty:netty-handler", + "io.netty:netty-handler-proxy", + "io.netty:netty-transport", + "io.opentelemetry:opentelemetry-api", + "io.opentelemetry:opentelemetry-context", + "io.opentelemetry:opentelemetry-exporter-logging", + "io.opentelemetry:opentelemetry-sdk", + "io.opentelemetry:opentelemetry-sdk-common", + "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure", + "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure-spi", + "io.opentelemetry:opentelemetry-sdk-testing", + "io.opentelemetry:opentelemetry-sdk-trace", + "io.opentelemetry.semconv:opentelemetry-semconv:1.28.0-alpha", "it.ozimov:embedded-redis:0.7.3", - "net.bytebuddy:byte-buddy:1.14.17", - "org.htmlunit:htmlunit-core-js:4.2.0", + "net.bytebuddy:byte-buddy:1.15.10", + "org.htmlunit:htmlunit-core-js:4.6.0", "org.apache.commons:commons-exec:1.4.0", - "org.apache.logging.log4j:log4j-core:2.23.1", - "org.assertj:assertj-core:3.26.0", - "org.bouncycastle:bcpkix-jdk18on:1.78.1", + "org.apache.logging.log4j:log4j-core:2.24.1", + "org.assertj:assertj-core:3.26.3", + "org.bouncycastle:bcpkix-jdk18on:1.79", "org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5", - "org.hsqldb:hsqldb:2.7.3", - "org.junit.jupiter:junit-jupiter-api:5.10.2", - "org.junit.jupiter:junit-jupiter-engine:5.10.2", - "org.junit.jupiter:junit-jupiter-params:5.10.2", - "org.junit.platform:junit-platform-launcher:1.10.2", - "org.junit.platform:junit-platform-reporting:1.10.2", - "org.junit.platform:junit-platform-commons:1.10.2", - "org.junit.platform:junit-platform-engine:1.10.2", - "org.mockito:mockito-core:5.12.0", - "org.redisson:redisson:3.31.0", - "org.slf4j:slf4j-api:2.0.13", - "org.slf4j:slf4j-jdk14:2.0.13", + "org.hsqldb:hsqldb:2.7.4", + "org.jspecify:jspecify:1.0.0", + "org.junit.jupiter:junit-jupiter-api", + "org.junit.jupiter:junit-jupiter-engine", + "org.junit.jupiter:junit-jupiter-params", + "org.junit.platform:junit-platform-launcher", + "org.junit.platform:junit-platform-reporting", + "org.junit.platform:junit-platform-commons", + "org.junit.platform:junit-platform-engine", + "org.mockito:mockito-core:5.14.2", + "org.redisson:redisson:3.39.0", + "org.slf4j:slf4j-api:2.0.16", + "org.slf4j:slf4j-jdk14:2.0.16", + "org.tomlj:tomlj:1.1.1", "org.zeromq:jeromq:0.6.0", ], + boms = [ + "io.opentelemetry:opentelemetry-bom:1.44.1", + "io.netty:netty-bom:4.1.115.Final", + "org.junit:junit-bom:5.11.3", + ], excluded_artifacts = [ "org.hamcrest:hamcrest-all", # Replaced by hamcrest 2 "org.hamcrest:hamcrest-core", @@ -231,6 +240,7 @@ maven.install( repositories = [ "https://repo1.maven.org/maven2", ], + resolver = "maven", strict_visibility = True, ) use_repo(maven, "maven", "unpinned_maven") @@ -238,6 +248,10 @@ use_repo(maven, "maven", "unpinned_maven") ruby = use_extension("@rules_ruby//ruby:extensions.bzl", "ruby") ruby.toolchain( name = "ruby", + msys2_packages = [ + "curl", + "libyaml", + ], version_file = "//:rb/.ruby-version", ) ruby.bundle_fetch( @@ -249,82 +263,82 @@ ruby.bundle_fetch( "//:rb/selenium-webdriver.gemspec", ], gem_checksums = { - "abbrev-0.1.2": "ad1b4eaaaed4cb722d5684d63949e4bde1d34f2a95e20db93aecfe7cbac74242", - "activesupport-7.1.3.2": "ad8445b7ae4a6d3acc5f88c8c5f437eb0b54062032aaf44856c7b6d3855b8b2e", - "addressable-2.8.6": "798f6af3556641a7619bad1dce04cdb6eb44b0216a991b0396ea7339276f2b47", + "activesupport-7.2.1.2": "6c3f6ad50c4e52ce39d67aeda38f99e1372eca8b295987d072c19460ebce4cb1", + "addressable-2.8.7": "462986537cf3735ab5f3c0f557f14155d778f4b43ea4f485a9deb9c8f7c58232", "ast-2.4.2": "1e280232e6a33754cde542bc5ef85520b74db2aac73ec14acef453784447cc12", "base64-0.2.0": "0f25e9b21a02a0cc0cea8ef92b2041035d39350946e8789c562b2d1a3da01507", - "bigdecimal-3.1.7": "e799b369a0005fc6d62eed7ef19139ac9bc319cc51470c637b9dcdf593600133", - "bigdecimal-3.1.7-java": "955f5c7aa90136874b494655e42ed70d81382abb0f49f1b42f374a1660e33c63", - "concurrent-ruby-1.2.3": "82fdd3f8a0816e28d513e637bb2b90a45d7b982bdf4f3a0511722d2e495801e2", + "bigdecimal-3.1.8": "a89467ed5a44f8ae01824af49cbc575871fa078332e8f77ea425725c1ffe27be", + "bigdecimal-3.1.8-java": "b9e94c14623fff8575f17a10320852219bbba92ecff4977571503d942687326e", + "concurrent-ruby-1.3.4": "d4aa926339b0a86b5b5054a0a8c580163e6f5dcbdfd0f4bb916b1a2570731c32", "connection_pool-2.4.1": "0f40cf997091f1f04ff66da67eabd61a9fe0d4928b9a3645228532512fab62f4", "crack-1.0.0": "c83aefdb428cdc7b66c7f287e488c796f055c0839e6e545fec2c7047743c4a49", "csv-3.3.0": "0bbd1defdc31134abefed027a639b3723c2753862150f4c3ee61cab71b20d67d", + "curb-1.0.6": "b369434efa91dc7310d72a74f8a228a5b920e3d5a89b0a3097e4c6a905af6eb2", "debug-1.9.2": "48e026c0852c7a10c60263e2e527968308958e266231e36d64e3efcabec7e7fc", "diff-lcs-1.5.1": "273223dfb40685548436d32b4733aa67351769c7dea621da7d9dd4813e63ddfe", "drb-2.2.1": "e9d472bf785f558b96b25358bae115646da0dbfd45107ad858b0bc0d935cb340", - "ffi-1.16.3": "6d3242ff10c87271b0675c58d68d3f10148fabc2ad6da52a18123f06078871fb", - "ffi-1.16.3-java": "6f107fcd7c96f9c96f7e57db749b99502cc2f65665f7b2241d087a8f8c01d42c", - "ffi-1.16.3-x64-mingw32": "6ec709011e3955e97033fa77907a8ab89a9150137d4c45c82c77399b909c9259", + "ffi-1.17.0": "51630e43425078311c056ca75f961bb3bda1641ab36e44ad4c455e0b0e4a231c", + "ffi-1.17.0-java": "f65f022616970fcde83fe176393eb873a7b959ef2703f94931cf0af6ab55ec7a", + "ffi-1.17.0-x86_64-darwin": "fdcd48c69db3303ef95aec5c64d6275fcf9878a02c0bec0afddc506ceca0f56b", "fileutils-1.7.2": "36a0fb324218263e52b486ad7408e9a295378fe8edc9fd343709e523c0980631", "git-1.19.1": "b0a422d9f6517353c48a330d6114de4db9e0c82dbe7202964a1d9f1fbc827d70", - "hashdiff-1.1.0": "b5465f0e7375f1ee883f53a766ece4dbc764b7674a7c5ffd76e79b2f5f6fc9c9", - "i18n-1.14.4": "c7deedead0866ea9102975a4eab7968f53de50793a0c211a37808f75dd187551", + "hashdiff-1.1.1": "c7966316726e0ceefe9f5c6aef107ebc3ccfef8b6db55fe3934f046b2cf0936a", + "i18n-1.14.6": "dc229a74f5d181f09942dd60ab5d6e667f7392c4ee826f35096db36d1fe3614c", "io-console-0.7.2": "f0dccff252f877a4f60d04a4dc6b442b185ebffb4b320ab69212a92b48a7a221", "io-console-0.7.2-java": "73aa382f8832b116613ceaf57b8ff5bf73dfedcaf39f0aa5420e10f63a4543ed", - "irb-1.12.0": "07634937fbb7d28d07e46da50d0aa43b4d2f7258174d08de4e32dfb57c10539d", + "irb-1.14.1": "5975003b58d36efaf492380baa982ceedf5aed36967a4d5b40996bc5c66e80f8", "jar-dependencies-0.4.1": "b2df2f1ecbff15334ce20ea7fdd5b8d8161faab67761ff72c7647d728e40d387", - "json-2.7.2": "1898b5cbc81cd36c0fd4d0b7ad2682c39fb07c5ff682fc6265f678f550d4982c", - "json-2.7.2-java": "138e3038b5361b3d06ee2e8aa2be00bed0d0de4ef5f1553fc5935e5b93aca7ee", + "json-2.7.4": "9ea6258b4add3abd25df965515be8b19be417f58b8c42619c7f2d3e86c158ece", + "json-2.7.4-java": "5d5d1593d8727a66f2e4161710dde06ba7043c9b3fa9eea0889fdc0450a107cd", "language_server-protocol-3.17.0.3": "3d5c58c02f44a20d972957a9febe386d7e7468ab3900ce6bd2b563dd910c6b3f", "listen-3.9.0": "db9e4424e0e5834480385197c139cb6b0ae0ef28cc13310cfd1ca78377d59c67", - "logger-1.6.0": "0ab7c120262dd8de2a18cb8d377f1f318cbe98535160a508af9e7710ff43ef3e", - "minitest-5.22.3": "ea84676290cb5e2b4f31f25751af6050aa90d3e43e4337141c3e3e839611981e", - "mutex_m-0.2.0": "b6ef0c6c842ede846f2ec0ade9e266b1a9dac0bc151682b04835e8ebd54840d5", - "parallel-1.24.0": "5bf38efb9b37865f8e93d7a762727f8c5fc5deb19949f4040c76481d5eee9397", - "parser-3.3.0.5": "7748313e505ca87045dc0465c776c802043f777581796eb79b1654c5d19d2687", + "logger-1.6.1": "3ad9587ed3940bf7897ea64a673971415523f4f7d6b22c5e3af5219705669653", + "minitest-5.25.1": "3db6795a80634def1cf86fda79d2d83b59b25ce5e186fa675f73c565589d2ad8", + "parallel-1.26.3": "d86babb7a2b814be9f4b81587bf0b6ce2da7d45969fab24d8ae4bf2bb4d4c7ef", + "parser-3.3.5.0": "f30ebb71b7830c2e7cdc4b2b0e0ec2234900e3fca3fe2fba47f78be759181ab3", "psych-5.1.2": "337322f58fc2bf24827d2b9bd5ab595f6a72971867d151bb39980060ea40a368", "psych-5.1.2-java": "1dd68dc609eddbc884e6892e11da942e16f7256bd30ebde9d35449d43043a6fe", - "public_suffix-5.0.5": "72c340218bb384610536919988705cc29e09749c0021fd7005f715c7e5dfc493", - "racc-1.7.3": "b785ab8a30ec43bce073c51dbbe791fd27000f68d1c996c95da98bf685316905", - "racc-1.7.3-java": "b2ad737e788cfa083263ce7c9290644bb0f2c691908249eb4f6eb48ed2815dbf", - "rack-2.2.9": "fd6301a97a1c1e955e68f85c861fcb1cde6145a32c532e1ea321a72ff8cc4042", + "public_suffix-6.0.1": "61d44e1cab5cbbbe5b31068481cf16976dd0dc1b6b07bd95617ef8c5e3e00c6f", + "racc-1.8.1": "4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f", + "racc-1.8.1-java": "54f2e6d1e1b91c154013277d986f52a90e5ececbe91465d29172e49342732b98", + "rack-2.2.10": "e4a5ee3f8f2ba45614a4498114d6dc7da1c51a0f0dd810d891906ea71d3aa72b", "rainbow-3.1.1": "039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a", "rake-13.2.1": "46cb38dae65d7d74b6020a4ac9d48afed8eb8149c040eccf0523bec91907059d", "rb-fsevent-0.11.2": "43900b972e7301d6570f64b850a5aa67833ee7d87b458ee92805d56b7318aefe", - "rb-inotify-0.10.1": "050062d4f31d307cca52c3f6a7f4b946df8de25fc4bd373e1a5142e41034a7ca", - "rbs-3.4.4": "1376d2604a00832641bb47521595e63a1c0d1cc241ded383ba48ddb4396de5a8", + "rb-inotify-0.11.1": "a0a700441239b0ff18eb65e3866236cd78613d6b9f78fea1f9ac47a85e47be6e", + "rbs-3.6.1": "ed7273d018556844583d1785ac54194e67eec594d68e317d57fa90ad035532c0", "rchardet-1.8.0": "693acd5253d5ade81a51940697955f6dd4bb2f0d245bda76a8e23deec70a52c7", - "rdoc-6.6.3.1": "39f7b749229ab5ad9d21c81586151c1dd7a549fa8be4070ee09b524f9c656345", - "regexp_parser-2.9.0": "81a00ba141cec0d4b4bf58cb80cd9193e5180836d3fa6ef623f7886d3ba8bdd9", - "reline-0.5.3": "2c46747a1dfd03e100f0666d8a374cf2930c3e734298af9b39e5fe8d35b42035", - "rexml-3.2.6": "e0669a2d4e9f109951cb1fde723d8acd285425d81594a2ea929304af50282816", + "rdoc-6.7.0": "b17d5f0f57b0853d7b880d4360a32c7caf8dbb81f8503a36426df809e617f379", + "regexp_parser-2.9.2": "5a27e767ad634f8a4b544520d5cd28a0db7aa1198a5d7c9d7e11d7b3d9066446", + "reline-0.5.10": "1660c969a792ebd034e6ceee8ca628f3b6698dcdb34f7a282a5edda37b958166", + "rexml-3.3.9": "d71875b85299f341edf47d44df0212e7658cbdf35aeb69cefdb63f57af3137c9", "rspec-3.13.0": "d490914ac1d5a5a64a0e1400c1d54ddd2a501324d703b8cfe83f458337bab993", - "rspec-core-3.13.0": "557792b4e88da883d580342b263d9652b6a10a12d5bda9ef967b01a48f15454c", - "rspec-expectations-3.13.0": "621d48c62262f955421eaa418130744760802cad47e781df70dba4d9f897102e", - "rspec-mocks-3.13.0": "735a891215758d77cdb5f4721fffc21078793959d1f0ee4a961874311d9b7f66", + "rspec-core-3.13.2": "94fbda6e4738e478f1c7532b7cc241272fcdc8b9eac03a97338b1122e4573300", + "rspec-expectations-3.13.3": "0e6b5af59b900147698ea0ff80456c4f2e69cac4394fbd392fbd1ca561f66c58", + "rspec-mocks-3.13.2": "2327335def0e1665325a9b617e3af9ae20272741d80ac550336309a7c59abdef", "rspec-support-3.13.1": "48877d4f15b772b7538f3693c22225f2eda490ba65a0515c4e7cf6f2f17de70f", - "rubocop-1.63.3": "17a31f16658f2fbb20bc7bcb4a841a06f7368da4f3be8a50365ad61e658d5f44", - "rubocop-ast-1.31.2": "7c206fb094553779923eca862aceece3913ce384f1bf85730208228e884578ec", - "rubocop-capybara-2.20.0": "2a6844b942921f230ee3ab8c94fe77f41a9406096a140245270c0e11624bb938", - "rubocop-factory_bot-2.25.1": "62751bde7af789878b8a31cbd2a82e69515ce7b23a2ad1820cb0fcc3e0150134", - "rubocop-performance-1.21.0": "ec54fa8991c2d538af7bc958361d63bdb3df2e53032da393e9903ea5e4f74a9a", - "rubocop-rspec-2.29.1": "534ee81a3006e7379ec6203687ef7c06ca1d137b7d6d67c2777b680b1ce82e13", - "rubocop-rspec_rails-2.28.3": "9769f2077cca8af2269193ba0450e0317ae1827a132c19149fdbeecaaca32818", + "rubocop-1.67.0": "8ccca7226e76d0a9974af960ea446d1fb38adf0c491214294e2fed75a85c378c", + "rubocop-ast-1.32.3": "40201e861c73a3c2d59428c7627828ef81fb2f8a306bc4a1c1801452afe3fe0f", + "rubocop-capybara-2.21.0": "5d264efdd8b6c7081a3d4889decf1451a1cfaaec204d81534e236bc825b280ab", + "rubocop-factory_bot-2.26.1": "8de13cd4edcee5ca800f255188167ecef8dbfc3d1fae9f15734e9d2e755392aa", + "rubocop-performance-1.22.1": "9ed9737af1ee90655654b483e0eac4e64702139e85d33335bf744b57a309a679", + "rubocop-rake-0.6.0": "56b6f22189af4b33d4f4e490a555c09f1281b02f4d48c3a61f6e8fe5f401d8db", + "rubocop-rspec-2.31.0": "2bae19388d78e1ceace44cd95fd34f3209f4ef20cac1b168d0a1325cbba3d672", + "rubocop-rspec_rails-2.29.1": "4ae95abbe9ca5a9b6d8be14e50d230fb5b6ba033b05d4c0981b5b76fc44988e4", "ruby-progressbar-1.13.0": "80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33", "rubyzip-2.3.2": "3f57e3935dc2255c414484fbf8d673b4909d8a6a57007ed754dde39342d2373f", "securerandom-0.3.1": "98f0450c0ea46d2f9a4b6db4f391dbd83dc08049592eada155739f40e0341bde", "steep-1.5.3": "7c6302a4d5932d0a46176ebc79766e52b853c223a85525aa2f8911e345123b85", - "stringio-3.1.0": "c1f6263ae03a15025e51194ab19b06b15e06adcaaedb7f5f6c06ab60f5d67718", + "stringio-3.1.1": "53456e14175c594e0e8eb2206a1be33f3974d4fe21c131e628908b05c8c2ae1e", "strscan-3.1.0": "01b8a81d214fbf7b5308c6fb51b5972bbfc4a6aa1f166fd3618ba97e0fcd5555", "strscan-3.1.0-java": "8645aa76e017e21764c6df572d2d79fcc1672284014f5bdbd806278cdbcd11b0", "terminal-table-3.0.2": "f951b6af5f3e00203fb290a669e0a85c5dd5b051b3b023392ccfd67ba5abae91", "tzinfo-2.0.6": "8daf828cc77bcf7d63b0e3bdb6caa47e2272dcfaf4fbfe46f8c3a9df087a829b", - "unicode-display_width-2.5.0": "7e7681dcade1add70cb9fda20dd77f300b8587c81ebbd165d14fd93144ff0ab4", - "webmock-3.23.0": "100787435c1f556129a238c11cc7cbee38cb9c2864709c6a0dcdcf822545f31f", - "webrick-1.8.1": "19411ec6912911fd3df13559110127ea2badd0c035f7762873f58afc803e158f", - "websocket-1.2.10": "2cc1a4a79b6e63637b326b4273e46adcddf7871caa5dc5711f2ca4061a629fa8", - "yard-0.9.36": "5505736c1b00c926f71053a606ab75f02070c5960d0778b901fe9d8b0a470be4", + "unicode-display_width-2.6.0": "12279874bba6d5e4d2728cef814b19197dbb10d7a7837a869bab65da943b7f5a", + "webmock-3.24.0": "be01357f6fc773606337ca79f3ba332b7d52cbe5c27587671abc0572dbec7122", + "webrick-1.8.2": "431746a349199546ff9dd272cae10849c865f938216e41c402a6489248f12f21", + "websocket-1.2.11": "b7e7a74e2410b5e85c25858b26b3322f29161e300935f70a0e0d3c35e0462737", + "yard-0.9.37": "a6e910399e78e613f80ba9add9ba7c394b1a935f083cccbef82903a3d2a26992", }, gemfile = "//:rb/Gemfile", gemfile_lock = "//:rb/Gemfile.lock", diff --git a/README.md b/README.md index 6ebfda3fbf20f..fe7ce42b18ccb 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,9 @@ # Selenium [![CI](https://github.com/SeleniumHQ/selenium/actions/workflows/ci.yml/badge.svg?branch=trunk&event=schedule)](https://github.com/SeleniumHQ/selenium/actions/workflows/ci.yml) +[![Releases downloads](https://img.shields.io/github/downloads/SeleniumHQ/selenium/total.svg)](https://github.com/SeleniumHQ/selenium/releases) -Selenium +Selenium Logo Selenium is an umbrella project encapsulating a variety of tools and libraries enabling web browser automation. Selenium specifically @@ -316,6 +317,18 @@ Run unit tests with: bazel test //py:unit ``` +To run common tests with a specific browser: + +```sh +bazel test //py:common- +``` + +To run common tests with a specific browser (include BiDi tests): + +```sh +bazel test //py:common--bidi +``` + To run tests with a specific browser: ```sh diff --git a/Rakefile b/Rakefile index e5dfee30cb892..24bb5ace8e78b 100644 --- a/Rakefile +++ b/Rakefile @@ -97,9 +97,9 @@ task '//java/test/org/openqa/selenium/environment/webserver:webserver:uber' => [ JAVA_RELEASE_TARGETS = %w[ //java/src/org/openqa/selenium/chrome:chrome.publish //java/src/org/openqa/selenium/chromium:chromium.publish - //java/src/org/openqa/selenium/devtools/v125:v125.publish - //java/src/org/openqa/selenium/devtools/v126:v126.publish - //java/src/org/openqa/selenium/devtools/v124:v124.publish + //java/src/org/openqa/selenium/devtools/v131:v131.publish + //java/src/org/openqa/selenium/devtools/v129:v129.publish + //java/src/org/openqa/selenium/devtools/v130:v130.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 @@ -331,7 +331,7 @@ task ios_driver: [ # ./go java:package['--config=release'] desc 'Create stamped zipped assets for Java for uploading to GitHub' task :'java-release-zip' do - Rake::Task['java:package'].invoke('--stamp') + Rake::Task['java:package'].invoke('--config=remote_release') end task 'release-java': %i[java-release-zip publish-maven] @@ -450,7 +450,7 @@ namespace :node do nightly = args.delete('nightly') Rake::Task['node:version'].invoke('nightly') if nightly - Bazel.execute('run', ['--stamp'], '//javascript/node/selenium-webdriver:selenium-webdriver.publish') + Bazel.execute('run', ['--config=release'], '//javascript/node/selenium-webdriver:selenium-webdriver.publish') end desc 'Release Node npm package' @@ -483,7 +483,6 @@ namespace :node do new_version = updated_version(old_version, arguments[:version], nightly) ['javascript/node/selenium-webdriver/package.json', - 'package-lock.json', 'javascript/node/selenium-webdriver/BUILD.bazel'].each do |file| text = File.read(file).gsub(old_version, new_version) File.open(file, 'w') { |f| f.puts text } @@ -513,7 +512,7 @@ namespace :py do Rake::Task['py:version'].invoke('nightly') if nightly command = nightly ? '//py:selenium-release-nightly' : '//py:selenium-release' - Bazel.execute('run', ['--stamp'], command) + Bazel.execute('run', ['--config=release'], command) end desc 'generate and copy files required for local development' @@ -583,10 +582,10 @@ namespace :py do desc 'Update Python version' task :version, [:version] do |_task, arguments| old_version = python_version - nightly = ".dev#{Time.now.strftime('%Y%m%d%H%M')}" + nightly = ".#{Time.now.strftime('%Y%m%d%H%M')}" new_version = updated_version(old_version, arguments[:version], nightly) - ['py/setup.py', + ['py/pyproject.toml', 'py/BUILD.bazel', 'py/selenium/__init__.py', 'py/selenium/webdriver/__init__.py', @@ -680,10 +679,10 @@ namespace :rb do if nightly Bazel.execute('run', [], '//rb:selenium-webdriver-bump-nightly-version') - Bazel.execute('run', ['--stamp'], '//rb:selenium-webdriver-release-nightly') + Bazel.execute('run', ['--config=release'], '//rb:selenium-webdriver-release-nightly') else - Bazel.execute('run', ['--stamp'], '//rb:selenium-webdriver-release') - Bazel.execute('run', ['--stamp'], '//rb:selenium-devtools-release') + Bazel.execute('run', ['--config=release'], '//rb:selenium-webdriver-release') + Bazel.execute('run', ['--config=release'], '//rb:selenium-devtools-release') end end @@ -753,7 +752,7 @@ namespace :dotnet do args = arguments.to_a.compact nightly = args.delete('nightly') Rake::Task['dotnet:version'].invoke('nightly') if nightly - Rake::Task['dotnet:package'].invoke('--stamp') + Rake::Task['dotnet:package'].invoke('--config=release') api_key = ENV.fetch('NUGET_API_KEY', nil) push_destination = 'https://api.nuget.org/v3/index.json' @@ -792,7 +791,7 @@ namespace :dotnet do sh 'docfx dotnet/docs/docfx.json' rescue StandardError case $CHILD_STATUS.exitstatus - when 127 + when 130 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' @@ -839,7 +838,7 @@ namespace :java do desc 'Package Java bindings and grid into releasable packages and stage for release' task :package do |_task, arguments| - args = arguments.to_a.compact.empty? ? ['--stamp'] : arguments.to_a.compact + args = arguments.to_a.compact.empty? ? ['--config=release'] : arguments.to_a.compact Bazel.execute('build', args, '//java/src/org/openqa/selenium:client-zip') Bazel.execute('build', args, '//java/src/org/openqa/selenium/grid:server-zip') Bazel.execute('build', args, '//java/src/org/openqa/selenium/grid:executable-grid') @@ -872,9 +871,10 @@ namespace :java do ENV['GPG_SIGN'] = (!nightly).to_s Rake::Task['java:version'].invoke if nightly - Rake::Task['java:package'].invoke('--stamp') - Rake::Task['java:build'].invoke('--stamp') - JAVA_RELEASE_TARGETS.each { |target| Bazel.execute('run', ['--stamp'], target) } + Rake::Task['java:package'].invoke('--config=release') + Rake::Task['java:build'].invoke('--config=release') + # Because we want to `run` things, we can't use the `release` config + JAVA_RELEASE_TARGETS.each { |target| Bazel.execute('run', ['--config=release'], target) } end desc 'Install jars to local m2 directory' @@ -1047,10 +1047,8 @@ namespace :all do 'py/selenium/webdriver/__init__.py', 'py/selenium/__init__.py', 'py/BUILD.bazel', - 'py/setup.py', 'rb/lib/selenium/webdriver/version.rb', - 'rb/Gemfile.lock', - 'package-lock.json']) + 'rb/Gemfile.lock']) print 'Do you want to push the committed changes? (Y/n): ' response = $stdin.gets.chomp.downcase @@ -1105,13 +1103,11 @@ namespace :all do 'java/version.bzl', 'javascript/node/selenium-webdriver/CHANGES.md', 'javascript/node/selenium-webdriver/package.json', - 'package-lock.json', 'py/docs/source/conf.py', 'py/selenium/__init__.py', 'py/selenium/webdriver/__init__.py', 'py/BUILD.bazel', 'py/CHANGES', - 'py/setup.py', 'rb/lib/selenium/webdriver/version.rb', 'rb/CHANGES', 'rb/Gemfile.lock', @@ -1140,7 +1136,7 @@ def updated_version(current, desired = nil, nightly = nil) desired.split('.').tap { |v| v << 0 while v.size < 3 }.join('.') elsif current.split(/\.|-/).size > 3 # if current version is already nightly, just need to bump it; this will be noop for some languages - pattern = /-?\.?(nightly|SNAPSHOT|dev)\d*$/ + pattern = /-?\.?(nightly|SNAPSHOT|dev|\d{12})\d*$/ current.gsub(pattern, nightly) elsif current.split(/\.|-/).size == 3 # if current version is not nightly, need to bump the version and make nightly diff --git a/WORKSPACE b/WORKSPACE index eb09ccc8726e0..b33f16328442d 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -6,17 +6,8 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "io_bazel_rules_closure", - patch_args = [ - "-p1", - ], - patches = [ - "//javascript:rules_closure_shell.patch", - ], - sha256 = "d66deed38a0bb20581c15664f0ab62270af5940786855c7adc3087b27168b529", - strip_prefix = "rules_closure-0.11.0", - urls = [ - "https://github.com/bazelbuild/rules_closure/archive/0.11.0.tar.gz", - ], + strip_prefix = "rules_closure-0.12.0", + url = "https://github.com/bazelbuild/rules_closure/archive/refs/tags/0.12.0.tar.gz", ) load("@io_bazel_rules_closure//closure:repositories.bzl", "rules_closure_dependencies", "rules_closure_toolchains") @@ -34,8 +25,8 @@ rules_closure_toolchains() http_archive( name = "rules_rust", - integrity = "sha256-JLN47ZcAbx9wEr5Jiib4HduZATGLiDgK7oUi/fvotzU=", - urls = ["https://github.com/bazelbuild/rules_rust/releases/download/0.42.1/rules_rust-v0.42.1.tar.gz"], + integrity = "sha256-eEXiHXSGUH6qD1bdI5KXZ/B04m0wIUeoyM7pmujzbbQ=", + urls = ["https://github.com/bazelbuild/rules_rust/releases/download/0.55.5/rules_rust-0.55.5.tar.gz"], ) load("@rules_rust//rust:repositories.bzl", "rules_rust_dependencies", "rust_register_toolchains") diff --git a/common/devtools/chromium/v124/BUILD.bazel b/common/devtools/chromium/v129/BUILD.bazel similarity index 100% rename from common/devtools/chromium/v124/BUILD.bazel rename to common/devtools/chromium/v129/BUILD.bazel diff --git a/common/devtools/chromium/v126/browser_protocol.pdl b/common/devtools/chromium/v129/browser_protocol.pdl similarity index 96% rename from common/devtools/chromium/v126/browser_protocol.pdl rename to common/devtools/chromium/v129/browser_protocol.pdl index 31028c8b42049..3a8d01b4b95e8 100644 --- a/common/devtools/chromium/v126/browser_protocol.pdl +++ b/common/devtools/chromium/v129/browser_protocol.pdl @@ -156,6 +156,7 @@ experimental domain Accessibility flowto labelledby owns + url # A node in the accessibility tree. type AXNode extends object @@ -622,6 +623,8 @@ experimental domain Audits CoopSandboxedIFrameCannotNavigateToCoopPage CorpNotSameOrigin CorpNotSameOriginAfterDefaultedToSameOriginByCoep + CorpNotSameOriginAfterDefaultedToSameOriginByDip + CorpNotSameOriginAfterDefaultedToSameOriginByCoepAndDip CorpNotSameSite # Details for a request that has been blocked with the BLOCKED_BY_RESPONSE @@ -800,7 +803,6 @@ experimental domain Audits type GenericIssueErrorType extends string enum - CrossOriginPortalPostMessageError FormLabelForNameError FormDuplicateIdForInputError FormInputWithNoLabelError @@ -889,7 +891,9 @@ experimental domain Audits ClientMetadataNoResponse ClientMetadataInvalidResponse ClientMetadataInvalidContentType + IdpNotPotentiallyTrustworthy DisabledInSettings + DisabledInFlags ErrorFetchingSignin InvalidSigninResponse AccountsHttpNotFound @@ -912,6 +916,9 @@ experimental domain Audits NotSignedInWithIdp MissingTransientUserActivation ReplacedByButtonMode + InvalidFieldsSpecified + RelyingPartyOriginIsOpaque + TypeNotMatching type FederatedAuthUserInfoRequestIssueDetails extends object properties @@ -1095,13 +1102,20 @@ experimental domain Audits parameters InspectorIssue issue -# Defines commands and events for browser extensions. Available if the client -# is connected using the --remote-debugging-pipe flag and -# the --enable-unsafe-extension-debugging flag is set. +# Defines commands and events for browser extensions. experimental domain Extensions + # Storage areas. + type StorageArea extends string + enum + session + local + sync + managed # Installs an unpacked extension from the filesystem similar to # --load-extension CLI flags. Returns extension ID once the extension - # has been installed. + # has been installed. Available if the client is connected using the + # --remote-debugging-pipe flag and the --enable-unsafe-extension-debugging + # flag is set. command loadUnpacked parameters # Absolute file path. @@ -1109,6 +1123,44 @@ experimental domain Extensions returns # Extension id. string id + # Gets data from extension storage in the given `storageArea`. If `keys` is + # specified, these are used to filter the result. + command getStorageItems + parameters + # ID of extension. + string id + # StorageArea to retrieve data from. + StorageArea storageArea + # Keys to retrieve. + optional array of string keys + returns + object data + # Removes `keys` from extension storage in the given `storageArea`. + command removeStorageItems + parameters + # ID of extension. + string id + # StorageArea to remove data from. + StorageArea storageArea + # Keys to remove. + array of string keys + # Clears extension storage in the given `storageArea`. + command clearStorageItems + parameters + # ID of extension. + string id + # StorageArea to remove data from. + StorageArea storageArea + # Sets `values` in extension storage in the given `storageArea`. The provided `values` + # will be merged with existing values in the storage area. + command setStorageItems + parameters + # ID of extension. + string id + # StorageArea to set data in. + StorageArea storageArea + # Values to set. + object values # Defines commands and events for Autofill. experimental domain Autofill @@ -1362,6 +1414,8 @@ domain Browser optional boolean userVisibleOnly # For "clipboard" permission, may specify allowWithoutSanitization. optional boolean allowWithoutSanitization + # For "fullscreen" permission, must specify allowWithoutGesture:true. + optional boolean allowWithoutGesture # For "camera" permission, may specify panTiltZoom. optional boolean panTiltZoom @@ -2002,13 +2056,6 @@ experimental domain CSS # Associated style declaration. CSSStyle style - # CSS position-fallback rule representation. - deprecated type CSSPositionFallbackRule extends object - properties - Value name - # List of keyframes. - array of CSSTryRule tryRules - # CSS @position-try rule representation. type CSSPositionTryRule extends object properties @@ -2021,6 +2068,7 @@ experimental domain CSS StyleSheetOrigin origin # Associated style declaration. CSSStyle style + boolean active # CSS keyframes rule representation. type CSSKeyframesRule extends object @@ -2194,10 +2242,11 @@ experimental domain CSS optional array of InheritedPseudoElementMatches inheritedPseudoElements # A list of CSS keyframed animations matching this node. optional array of CSSKeyframesRule cssKeyframesRules - # A list of CSS position fallbacks matching this node. - deprecated optional array of CSSPositionFallbackRule cssPositionFallbackRules - # A list of CSS @position-try rules matching this node, based on the position-try-options property. + # A list of CSS @position-try rules matching this node, based on the position-try-fallbacks property. optional array of CSSPositionTryRule cssPositionTryRules + # Index of the active fallback in the applied position-try-fallback property, + # will not be set if there is no active position-try fallback. + optional integer activePositionFallbackIndex # A list of CSS at-property rules matching this node. optional array of CSSPropertyRule cssPropertyRules # A list of CSS property registrations matching this node. @@ -2636,7 +2685,9 @@ domain DOM highlight first-line-inherited scroll-marker - scroll-markers + scroll-marker-group + scroll-next-button + scroll-prev-button scrollbar scrollbar-thumb scrollbar-button @@ -2755,6 +2806,12 @@ domain DOM optional CompatibilityMode compatibilityMode optional BackendNode assignedSlot + # A structure to hold the top-level node of a detached tree and an array of its retained descendants. + type DetachedElementInfo extends object + properties + Node treeNode + array of NodeId retainedNodeIds + # A structure holding an RGBA color. type RGBA extends object properties @@ -3265,6 +3322,12 @@ domain DOM returns string path + # Returns list of detached nodes + experimental command getDetachedDomNodes + returns + # The list of detached nodes + array of DetachedElementInfo detachedNodes + # Enables console to refer to the node with given id via $x (see Command Line API for more details # $x functions). experimental command setInspectedNode @@ -3336,6 +3399,21 @@ domain DOM # Descendant nodes with container queries against the given container. array of NodeId nodeIds + # Returns the target anchor element of the given anchor query according to + # https://www.w3.org/TR/css-anchor-position-1/#target. + experimental command getAnchorElement + parameters + # Id of the positioned element from which to find the anchor. + NodeId nodeId + # An optional anchor specifier, as defined in + # https://www.w3.org/TR/css-anchor-position-1/#anchor-specifier. + # If not provided, it will return the implicit anchor element for + # the given positioned element. + optional string anchorSpecifier + returns + # The anchor element of the given anchor query. + NodeId nodeId + # Fired when `Element`'s attribute is modified. event attributeModified parameters @@ -4157,6 +4235,21 @@ domain Emulation optional SensorReadingXYZ xyz optional SensorReadingQuaternion quaternion + experimental type PressureSource extends string + enum + cpu + + experimental type PressureState extends string + enum + nominal + fair + serious + critical + + experimental type PressureMetadata extends object + properties + optional boolean available + # Tells whether emulation is supported. deprecated command canEmulate returns @@ -4326,6 +4419,24 @@ domain Emulation SensorType type SensorReading reading + # Overrides a pressure source of a given type, as used by the Compute + # Pressure API, so that updates to PressureObserver.observe() are provided + # via setPressureStateOverride instead of being retrieved from + # platform-provided telemetry data. + experimental command setPressureSourceOverrideEnabled + parameters + boolean enabled + PressureSource source + optional PressureMetadata metadata + + # Provides a given pressure state that will be processed and eventually be + # delivered to PressureObserver users. |source| must have been previously + # overridden by setPressureSourceOverrideEnabled. + experimental command setPressureStateOverride + parameters + PressureSource source + PressureState state + # Overrides the Idle state. command setIdleOverride parameters @@ -4534,6 +4645,42 @@ domain IO # UUID of the specified Blob. string uuid +experimental domain FileSystem + depends on Network + depends on Storage + + type File extends object + properties + string name + # Timestamp + Network.TimeSinceEpoch lastModified + # Size in bytes + number size + string type + + type Directory extends object + properties + string name + array of string nestedDirectories + # Files that are directly nested under this directory. + array of File nestedFiles + + type BucketFileSystemLocator extends object + properties + # Storage key + Storage.SerializedStorageKey storageKey + # Bucket name. Not passing a `bucketName` will retrieve the default Bucket. (https://developer.mozilla.org/en-US/docs/Web/API/Storage_API#storage_buckets) + optional string bucketName + # Path to the directory using each path component as an array item. + array of string pathComponents + + command getDirectory + parameters + BucketFileSystemLocator bucketFileSystemLocator + returns + # Returns the directory object at the path. + Directory directory + experimental domain IndexedDB depends on Runtime depends on Storage @@ -5589,6 +5736,10 @@ domain Network experimental number workerFetchStart # Settled fetch event respondWith promise. experimental number workerRespondWithSettled + # Started ServiceWorker static routing source evaluation. + experimental optional number workerRouterEvaluationStart + # Started cache lookup when the source was evaluated to `cache`. + experimental optional number workerCacheLookupStart # Started sending request. number sendStart # Finished sending request. @@ -5735,6 +5886,8 @@ domain Network coop-sandboxed-iframe-cannot-navigate-to-coop-page corp-not-same-origin corp-not-same-origin-after-defaulted-to-same-origin-by-coep + 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 # The reason why request was blocked. @@ -5874,6 +6027,8 @@ domain Network # The router source of the matched rule. If there is a matched rule, this # field will be set, otherwise no value will be set. optional ServiceWorkerRouterSource matchedSourceType + # The actual router source used. + optional ServiceWorkerRouterSource actualSourceType # HTTP response data. type Response extends object @@ -6006,6 +6161,16 @@ domain Network # Set if another request triggered this request (e.g. preflight). optional RequestId requestId + # cookiePartitionKey object + # The representation of the components of the key that are created by the cookiePartitionKey class contained in net/cookies/cookie_partition_key.h. + experimental type CookiePartitionKey extends object + properties + # The site of the top-level URL the browser was visiting at the start + # of the request to the endpoint that set the cookie. + string topLevelSite + # Indicates if the cookie has any ancestors that are cross-site to the topLevelSite. + boolean hasCrossSiteAncestor + # Cookie object type Cookie extends object properties @@ -6039,9 +6204,8 @@ domain Network # An unspecified port value allows protocol clients to emulate legacy cookie scope for the port. # This is a temporary ability and it will be removed in the future. experimental integer sourcePort - # Cookie partition key. The site of the top-level URL the browser was visiting at the start - # of the request to the endpoint that set the cookie. - experimental optional string partitionKey + # Cookie partition key. + experimental optional CookiePartitionKey partitionKey # True if cookie partition key is opaque. experimental optional boolean partitionKeyOpaque @@ -6186,6 +6350,8 @@ domain Network TopLevelStorageAccess # The cookie should have been blocked by 3PCD but is exempted by CORS opt-in. CorsOptIn + # The cookie should have been blocked by 3PCD but is exempted by the first-party URL scheme. + Scheme # A cookie which was not stored from a response with the corresponding reason. experimental type BlockedSetCookieWithReason extends object @@ -6255,10 +6421,8 @@ domain Network # An unspecified port value allows protocol clients to emulate legacy cookie scope for the port. # This is a temporary ability and it will be removed in the future. experimental optional integer sourcePort - # Cookie partition key. The site of the top-level URL the browser was visiting at the start - # of the request to the endpoint that set the cookie. - # If not set, the cookie will be set as not partitioned. - experimental optional string partitionKey + # Cookie partition key. If not set, the cookie will be set as not partitioned. + experimental optional CookiePartitionKey partitionKey # Authorization challenge for HTTP status code 401 or 407. experimental type AuthChallenge extends object @@ -6461,9 +6625,9 @@ domain Network optional string domain # If specified, deletes only cookies with the exact path. optional string path - # If specified, deletes only cookies with the the given name and partitionKey where domain - # matches provided URL. - experimental optional string partitionKey + # If specified, deletes only cookies with the the given name and partitionKey where + # all partition key attributes match the cookie partition key attribute. + experimental optional CookiePartitionKey partitionKey # Disables network tracking, prevents network events from being sent to the client. command disable @@ -6640,10 +6804,8 @@ domain Network # An unspecified port value allows protocol clients to emulate legacy cookie scope for the port. # This is a temporary ability and it will be removed in the future. experimental optional integer sourcePort - # Cookie partition key. The site of the top-level URL the browser was visiting at the start - # of the request to the endpoint that set the cookie. - # If not set, the cookie will be set as not partitioned. - experimental optional string partitionKey + # Cookie partition key. If not set, the cookie will be set as not partitioned. + experimental optional CookiePartitionKey partitionKey returns # Always set to true. If an error occurs, the response indicates protocol error. deprecated boolean success @@ -7035,7 +7197,7 @@ domain Network optional string headersText # The cookie partition key that will be used to store partitioned cookies set in this response. # Only sent when partitioned cookies are enabled. - optional string cookiePartitionKey + experimental optional CookiePartitionKey cookiePartitionKey # True if partitioned cookies are enabled, but the partition key is not serializable to string. optional boolean cookiePartitionKeyOpaque # A list of cookies which should have been blocked by 3PCD but are exempted and stored from @@ -7069,7 +7231,7 @@ domain Network FailedPrecondition ResourceExhausted AlreadyExists - Unavailable + ResourceLimited Unauthorized BadResponse InternalError @@ -7084,6 +7246,9 @@ domain Network # The number of obtained Trust Tokens on a successful "Issuance" operation. optional integer issuedTokenCount + # Fired once security policy has been updated. + experimental event policyUpdated + # Fired once when parsing the .wbn file has succeeded. # The event contains the information about the web bundle contents. experimental event subresourceWebBundleMetadataReceived @@ -7136,6 +7301,7 @@ domain Network UnsafeNone SameOriginPlusCoep RestrictPropertiesPlusCoep + NoopenerAllowPopups experimental type CrossOriginOpenerPolicyStatus extends object properties @@ -7848,6 +8014,7 @@ domain Page experimental type PermissionsPolicyFeature extends string enum accelerometer + all-screens-capture ambient-light-sensor attribution-reporting autoplay @@ -7882,6 +8049,8 @@ domain Page clipboard-write compute-pressure cross-origin-isolated + deferred-fetch + digital-credentials-get direct-sockets display-capture document-domain @@ -7902,6 +8071,7 @@ domain Page keyboard-map local-fonts magnetometer + media-playback-while-not-visible microphone midi otp-credentials @@ -8239,14 +8409,16 @@ domain Page experimental type ClientNavigationReason extends string enum + anchorClick formSubmissionGet formSubmissionPost httpHeaderRefresh - scriptInitiated + initialFrameNavigation metaTagRefresh + other pageBlockInterstitial reload - anchorClick + scriptInitiated experimental type ClientNavigationDisposition extends string enum @@ -9214,6 +9386,11 @@ domain Page HTTPAuthRequired CookieFlushed BroadcastChannelOnMessage + WebViewSettingsChanged + WebViewJavaScriptObjectChanged + WebViewMessageListenerInjected + WebViewSafeBrowsingAllowlistChanged + WebViewDocumentStartJavascriptChanged #Blocklisted features WebSocket WebTransport @@ -9244,7 +9421,6 @@ domain Page Printing WebDatabase PictureInPicture - Portal SpeechRecognizer IdleManager PaymentManager @@ -9362,6 +9538,15 @@ domain Page FrameId frameId # Frame's new url. string url + # Navigation type + enum navigationType + # Navigation due to fragment navigation. + fragment + # Navigation due to history API usage. + historyApi + # Navigation due to other reasons. + other + # Compressed image data requested by the `startScreencast`. experimental event screencastFrame @@ -10434,6 +10619,23 @@ experimental domain Storage exact modulus + experimental type AttributionReportingAggregatableDebugReportingData extends object + properties + UnsignedInt128AsBase16 keyPiece + # number instead of integer because not all uint32 can be represented by + # int + number value + array of string types + + experimental type AttributionReportingAggregatableDebugReportingConfig extends object + properties + # number instead of integer because not all uint32 can be represented by + # int, only present for source registrations + optional number budget + UnsignedInt128AsBase16 keyPiece + array of AttributionReportingAggregatableDebugReportingData debugData + optional string aggregationCoordinatorOrigin + experimental type AttributionReportingSourceRegistration extends object properties Network.TimeSinceEpoch time @@ -10452,6 +10654,8 @@ experimental domain Storage array of AttributionReportingAggregationKeysEntry aggregationKeys optional UnsignedInt64AsBase10 debugKey AttributionReportingTriggerDataMatching triggerDataMatching + SignedInt64AsBase10 destinationLimitPriority + AttributionReportingAggregatableDebugReportingConfig aggregatableDebugReportingConfig experimental type AttributionReportingSourceRegistrationResult extends string enum @@ -10468,6 +10672,7 @@ experimental domain Storage reportingOriginsPerSiteLimitReached exceedsMaxChannelCapacity exceedsMaxTriggerStateCardinality + destinationPerDayReportingLimitReached experimental event attributionReportingSourceRegistered parameters @@ -10485,6 +10690,8 @@ experimental domain Storage # number instead of integer because not all uint32 can be represented by # int number value + UnsignedInt64AsBase10 filteringId + experimental type AttributionReportingAggregatableValueEntry extends object properties @@ -10517,10 +10724,12 @@ experimental domain Storage array of AttributionReportingEventTriggerData eventTriggerData array of AttributionReportingAggregatableTriggerData aggregatableTriggerData array of AttributionReportingAggregatableValueEntry aggregatableValues + integer aggregatableFilteringIdMaxBytes boolean debugReporting optional string aggregationCoordinatorOrigin AttributionReportingSourceRegistrationTimeConfig sourceRegistrationTimeConfig optional string triggerContextId + AttributionReportingAggregatableDebugReportingConfig aggregatableDebugReportingConfig experimental type AttributionReportingEventLevelResult extends string enum @@ -10748,7 +10957,7 @@ domain Target experimental optional Page.FrameId openerFrameId experimental optional Browser.BrowserContextID browserContextId # Provides additional details for specific target types. For example, for - # the type of "page", this may be set to "portal" or "prerender". + # the type of "page", this may be set to "prerender". experimental optional string subtype # A filter used by target query/discovery/auto-attach operations. @@ -12136,6 +12345,9 @@ experimental domain Preload JavaScriptInterfaceAdded JavaScriptInterfaceRemoved AllPrerenderingCanceled + WindowClosed + SlowNetwork + OtherPrerenderedPageActivated # Fired when a preload enabled state is updated. event preloadEnabledStateUpdated @@ -12376,15 +12588,14 @@ experimental domain PWA # manifestId. optional string installUrlOrBundleUrl - # Uninstals the given manifest_id and closes any opened app windows. + # Uninstalls the given manifest_id and closes any opened app windows. command uninstall parameters string manifestId # Launches the installed web app, or an url in the same web app instead of the - # default start url if it is provided. Returns a tab / web contents based - # Target.TargetID which can be used to attach to via Target.attachToTarget or - # similar APIs. + # default start url if it is provided. Returns a page Target.TargetID which + # can be used to attach to via Target.attachToTarget or similar APIs. command launch parameters string manifestId @@ -12392,3 +12603,127 @@ experimental domain PWA returns # ID of the tab target created as a result. Target.TargetID targetId + + # Opens one or more local files from an installed web app identified by its + # manifestId. The web app needs to have file handlers registered to process + # the files. The API returns one or more page Target.TargetIDs which can be + # used to attach to via Target.attachToTarget or similar APIs. + # If some files in the parameters cannot be handled by the web app, they will + # be ignored. If none of the files can be handled, this API returns an error. + # If no files are provided as the parameter, this API also returns an error. + # + # According to the definition of the file handlers in the manifest file, one + # Target.TargetID may represent a page handling one or more files. The order + # of the returned Target.TargetIDs is not guaranteed. + # + # TODO(crbug.com/339454034): Check the existences of the input files. + command launchFilesInApp + parameters + string manifestId + array of string files + returns + # IDs of the tab targets created as the result. + array of Target.TargetID targetIds + + # Opens the current page in its web app identified by the manifest id, needs + # to be called on a page target. This function returns immediately without + # waiting for the app to finish loading. + command openCurrentPageInApp + parameters + string manifestId + + # If user prefers opening the app in browser or an app window. + type DisplayMode extends string + enum + standalone + browser + + # Changes user settings of the web app identified by its manifestId. If the + # app was not installed, this command returns an error. Unset parameters will + # be ignored; unrecognized values will cause an error. + # + # Unlike the ones defined in the manifest files of the web apps, these + # settings are provided by the browser and controlled by the users, they + # impact the way the browser handling the web apps. + # + # See the comment of each parameter. + command changeAppUserSettings + parameters + string manifestId + # If user allows the links clicked on by the user in the app's scope, or + # extended scope if the manifest has scope extensions and the flags + # `DesktopPWAsLinkCapturingWithScopeExtensions` and + # `WebAppEnableScopeExtensions` are enabled. + # + # Note, the API does not support resetting the linkCapturing to the + # initial value, uninstalling and installing the web app again will reset + # it. + # + # TODO(crbug.com/339453269): Setting this value on ChromeOS is not + # supported yet. + optional boolean linkCapturing + optional DisplayMode displayMode + +# This domain allows configuring virtual Bluetooth devices to test +# the web-bluetooth API. +experimental domain BluetoothEmulation + # Indicates the various states of Central. + type CentralState extends string + enum + absent + powered-off + powered-on + + # Stores the manufacturer data + type ManufacturerData extends object + properties + # Company identifier + # https://bitbucket.org/bluetooth-SIG/public/src/main/assigned_numbers/company_identifiers/company_identifiers.yaml + # https://usb.org/developers + integer key + # Manufacturer-specific data + binary data + + # Stores the byte data of the advertisement packet sent by a Bluetooth device. + type ScanRecord extends object + properties + optional string name + optional array of string uuids + # Stores the external appearance description of the device. + optional integer appearance + # Stores the transmission power of a broadcasting device. + optional integer txPower + # Key is the company identifier and the value is an array of bytes of + # manufacturer specific data. + optional array of ManufacturerData manufacturerData + + # Stores the advertisement packet information that is sent by a Bluetooth device. + type ScanEntry extends object + properties + string deviceAddress + integer rssi + ScanRecord scanRecord + + # Enable the BluetoothEmulation domain. + command enable + parameters + # State of the simulated central. + CentralState state + + # Disable the BluetoothEmulation domain. + command disable + + # Simulates a peripheral with |address|, |name| and |knownServiceUuids| + # that has already been connected to the system. + command simulatePreconnectedPeripheral + parameters + string address + string name + array of ManufacturerData manufacturerData + array of string knownServiceUuids + + # Simulates an advertisement packet described in |entry| being received by + # the central. + command simulateAdvertisement + parameters + ScanEntry entry diff --git a/common/devtools/chromium/v124/js_protocol.pdl b/common/devtools/chromium/v129/js_protocol.pdl similarity index 100% rename from common/devtools/chromium/v124/js_protocol.pdl rename to common/devtools/chromium/v129/js_protocol.pdl diff --git a/common/devtools/chromium/v125/BUILD.bazel b/common/devtools/chromium/v130/BUILD.bazel similarity index 100% rename from common/devtools/chromium/v125/BUILD.bazel rename to common/devtools/chromium/v130/BUILD.bazel diff --git a/common/devtools/chromium/v125/browser_protocol.pdl b/common/devtools/chromium/v130/browser_protocol.pdl similarity index 95% rename from common/devtools/chromium/v125/browser_protocol.pdl rename to common/devtools/chromium/v130/browser_protocol.pdl index 162eeacc25478..8a9325e6f6528 100644 --- a/common/devtools/chromium/v125/browser_protocol.pdl +++ b/common/devtools/chromium/v130/browser_protocol.pdl @@ -156,6 +156,7 @@ experimental domain Accessibility flowto labelledby owns + url # A node in the accessibility tree. type AXNode extends object @@ -622,6 +623,8 @@ experimental domain Audits CoopSandboxedIFrameCannotNavigateToCoopPage CorpNotSameOrigin CorpNotSameOriginAfterDefaultedToSameOriginByCoep + CorpNotSameOriginAfterDefaultedToSameOriginByDip + CorpNotSameOriginAfterDefaultedToSameOriginByCoepAndDip CorpNotSameSite # Details for a request that has been blocked with the BLOCKED_BY_RESPONSE @@ -740,6 +743,33 @@ experimental domain Audits NoRegisterTriggerHeader NoRegisterOsSourceHeader NoRegisterOsTriggerHeader + NavigationRegistrationUniqueScopeAlreadySet + + type SharedDictionaryError extends string + enum + UseErrorCrossOriginNoCorsRequest + UseErrorDictionaryLoadFailure + UseErrorMatchingDictionaryNotUsed + UseErrorUnexpectedContentDictionaryHeader + WriteErrorCossOriginNoCorsRequest + WriteErrorDisallowedBySettings + WriteErrorExpiredResponse + WriteErrorFeatureDisabled + WriteErrorInsufficientResources + WriteErrorInvalidMatchField + WriteErrorInvalidStructuredHeader + WriteErrorNavigationRequest + WriteErrorNoMatchField + WriteErrorNonListMatchDestField + WriteErrorNonSecureContext + WriteErrorNonStringIdField + WriteErrorNonStringInMatchDestList + WriteErrorNonStringMatchField + WriteErrorNonTokenTypeField + WriteErrorRequestAborted + WriteErrorShuttingDown + WriteErrorTooLongIdField + WriteErrorUnsupportedType # Details for issues around "Attribution Reporting API" usage. # Explainer: https://github.com/WICG/attribution-reporting-api @@ -767,9 +797,13 @@ experimental domain Audits string url optional SourceCodeLocation location + type SharedDictionaryIssueDetails extends object + properties + SharedDictionaryError sharedDictionaryError + AffectedRequest request + type GenericIssueErrorType extends string enum - CrossOriginPortalPostMessageError FormLabelForNameError FormDuplicateIdForInputError FormInputWithNoLabelError @@ -818,6 +852,9 @@ experimental domain Audits type CookieDeprecationMetadataIssueDetails extends object properties array of string allowedSites + number optOutPercentage + boolean isOptOutTopLevel + CookieOperation operation type ClientHintIssueReason extends string enum @@ -855,7 +892,9 @@ experimental domain Audits ClientMetadataNoResponse ClientMetadataInvalidResponse ClientMetadataInvalidContentType + IdpNotPotentiallyTrustworthy DisabledInSettings + DisabledInFlags ErrorFetchingSignin InvalidSigninResponse AccountsHttpNotFound @@ -878,6 +917,9 @@ experimental domain Audits NotSignedInWithIdp MissingTransientUserActivation ReplacedByButtonMode + InvalidFieldsSpecified + RelyingPartyOriginIsOpaque + TypeNotMatching type FederatedAuthUserInfoRequestIssueDetails extends object properties @@ -972,6 +1014,7 @@ experimental domain Audits StylesheetLoadingIssue FederatedAuthUserInfoRequestIssue PropertyRuleIssue + SharedDictionaryIssue # 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 @@ -998,6 +1041,7 @@ experimental domain Audits optional StylesheetLoadingIssueDetails stylesheetLoadingIssueDetails optional PropertyRuleIssueDetails propertyRuleIssueDetails optional FederatedAuthUserInfoRequestIssueDetails federatedAuthUserInfoRequestIssueDetails + optional SharedDictionaryIssueDetails sharedDictionaryIssueDetails # A unique id for a DevTools inspector issue. Allows other entities (e.g. # exceptions, CDP message, console messages, etc.) to reference an issue. @@ -1059,6 +1103,66 @@ experimental domain Audits parameters InspectorIssue issue +# Defines commands and events for browser extensions. +experimental domain Extensions + # Storage areas. + type StorageArea extends string + enum + session + local + sync + managed + # Installs an unpacked extension from the filesystem similar to + # --load-extension CLI flags. Returns extension ID once the extension + # has been installed. Available if the client is connected using the + # --remote-debugging-pipe flag and the --enable-unsafe-extension-debugging + # flag is set. + command loadUnpacked + parameters + # Absolute file path. + string path + returns + # Extension id. + string id + # Gets data from extension storage in the given `storageArea`. If `keys` is + # specified, these are used to filter the result. + command getStorageItems + parameters + # ID of extension. + string id + # StorageArea to retrieve data from. + StorageArea storageArea + # Keys to retrieve. + optional array of string keys + returns + object data + # Removes `keys` from extension storage in the given `storageArea`. + command removeStorageItems + parameters + # ID of extension. + string id + # StorageArea to remove data from. + StorageArea storageArea + # Keys to remove. + array of string keys + # Clears extension storage in the given `storageArea`. + command clearStorageItems + parameters + # ID of extension. + string id + # StorageArea to remove data from. + StorageArea storageArea + # Sets `values` in extension storage in the given `storageArea`. The provided `values` + # will be merged with existing values in the storage area. + command setStorageItems + parameters + # ID of extension. + string id + # StorageArea to set data in. + StorageArea storageArea + # Values to set. + object values + # Defines commands and events for Autofill. experimental domain Autofill type CreditCard extends object @@ -1289,6 +1393,7 @@ domain Browser videoCapturePanTiltZoom wakeLockScreen wakeLockSystem + webAppInstallation windowManagement experimental type PermissionSetting extends string @@ -1311,6 +1416,8 @@ domain Browser optional boolean userVisibleOnly # For "clipboard" permission, may specify allowWithoutSanitization. optional boolean allowWithoutSanitization + # For "fullscreen" permission, must specify allowWithoutGesture:true. + optional boolean allowWithoutGesture # For "camera" permission, may specify panTiltZoom. optional boolean panTiltZoom @@ -1951,13 +2058,6 @@ experimental domain CSS # Associated style declaration. CSSStyle style - # CSS position-fallback rule representation. - deprecated type CSSPositionFallbackRule extends object - properties - Value name - # List of keyframes. - array of CSSTryRule tryRules - # CSS @position-try rule representation. type CSSPositionTryRule extends object properties @@ -1970,6 +2070,7 @@ experimental domain CSS StyleSheetOrigin origin # Associated style declaration. CSSStyle style + boolean active # CSS keyframes rule representation. type CSSKeyframesRule extends object @@ -2143,10 +2244,11 @@ experimental domain CSS optional array of InheritedPseudoElementMatches inheritedPseudoElements # A list of CSS keyframed animations matching this node. optional array of CSSKeyframesRule cssKeyframesRules - # A list of CSS position fallbacks matching this node. - deprecated optional array of CSSPositionFallbackRule cssPositionFallbackRules - # A list of CSS @position-try rules matching this node, based on the position-try-options property. + # A list of CSS @position-try rules matching this node, based on the position-try-fallbacks property. optional array of CSSPositionTryRule cssPositionTryRules + # Index of the active fallback in the applied position-try-fallback property, + # will not be set if there is no active position-try fallback. + optional integer activePositionFallbackIndex # A list of CSS at-property rules matching this node. optional array of CSSPropertyRule cssPropertyRules # A list of CSS property registrations matching this node. @@ -2577,14 +2679,18 @@ domain DOM after marker backdrop + column selection + search-text target-text spelling-error grammar-error highlight first-line-inherited scroll-marker - scroll-markers + scroll-marker-group + scroll-next-button + scroll-prev-button scrollbar scrollbar-thumb scrollbar-button @@ -2598,6 +2704,12 @@ domain DOM view-transition-image-pair view-transition-old view-transition-new + placeholder + file-selector-button + details-content + select-fallback-button + select-fallback-button-text + picker # Shadow root type. type ShadowRootType extends string @@ -2702,6 +2814,13 @@ domain DOM optional boolean isSVG optional CompatibilityMode compatibilityMode optional BackendNode assignedSlot + experimental optional boolean isScrollable + + # A structure to hold the top-level node of a detached tree and an array of its retained descendants. + type DetachedElementInfo extends object + properties + Node treeNode + array of NodeId retainedNodeIds # A structure holding an RGBA color. type RGBA extends object @@ -3084,6 +3203,20 @@ domain DOM # NodeIds of top layer elements array of NodeId nodeIds + # Returns the NodeId of the matched element according to certain relations. + experimental command getElementByRelation + parameters + # Id of the node from which to query the relation. + NodeId nodeId + # Type of relation to get. + enum relation + # Get the popover target for a given element. In this case, this given + # element can only be an HTMLFormControlElement (,