diff --git a/.bazelrc b/.bazelrc index 1b4e7132ed04e..a0b7f912d3f75 100644 --- a/.bazelrc +++ b/.bazelrc @@ -4,33 +4,42 @@ build --flag_alias=pin_browsers=//common:pin_browsers build --flag_alias=headless=//common:headless # Set the default java toolchain + build --java_runtime_version=remotejdk_11 build --tool_java_language_version=11 # We target java 8 by default + build --javacopt="--release 8" # Require java dependencies to be used and first-order + build --experimental_strict_java_deps=strict build --explicit_java_test_deps # Ensure builds are unpolluted by the user env + build --incompatible_strict_action_env # Except for the PATH environment variable + build --action_env=PATH # For build stamping + build --workspace_status_command=scripts/build-info.py # Make sure we get something helpful when tests fail + build --verbose_failures build --test_output=errors # Tests need to be able to open sockets on localhost + build --noexperimental_sandbox_default_allow_network # pass environment variables to the test environment + build --test_env=CI build --test_env=DASHBOARD_URL build --test_env=DISPLAY @@ -41,6 +50,7 @@ build --test_env=MOZ_HEADLESS build --test_env=PATH # Remove once browser pinning works build --test_env=SELENIUM_BROWSER build --test_env=TRAVIS +build --test_env=PYTHON_VERSION test --test_timeout=1800 diff --git a/.bazelversion b/.bazelversion index fae6e3d04b2ca..ac14c3dfaa865 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -4.2.1 +5.1.1 diff --git a/.github/actions/bazel-test/action.yml b/.github/actions/bazel-test/action.yml index 7d1d8b767fceb..192b5ce67c046 100644 --- a/.github/actions/bazel-test/action.yml +++ b/.github/actions/bazel-test/action.yml @@ -1,11 +1,16 @@ name: 'Run bazel query and pass found targets to bazel test' inputs: - query: # id of input + query: # id of input + description: 'Query to execute and to be used when running tests' required: true + attempts: + description: 'Test attempts before giving up' + required: false + default: 1 runs: using: "composite" steps: - run: | cp .github/.bazelrc.local . - bazel query "${{ inputs.query }}" | xargs bazel test + bazel query "${{ inputs.query }}" | xargs bazel test --flaky_test_attempts=${{ inputs.attempts }} shell: bash diff --git a/.github/actions/bazel/action.yml b/.github/actions/bazel/action.yml index 98ab63b913971..913080e649d73 100644 --- a/.github/actions/bazel/action.yml +++ b/.github/actions/bazel/action.yml @@ -1,6 +1,8 @@ name: 'Run bazel' +description: 'Simple action to run bazel commands' inputs: command: # id of input + description: 'Bazel command to run' required: true runs: using: "composite" diff --git a/.github/actions/setup-bazelisk/action.yml b/.github/actions/setup-bazelisk/action.yml index e51bdfb1e8af9..17a09f0cb45d6 100644 --- a/.github/actions/setup-bazelisk/action.yml +++ b/.github/actions/setup-bazelisk/action.yml @@ -1,12 +1,14 @@ name: 'Setup bazelisk' +description: 'Downloads and configures bazelisk' inputs: - version: # id of input + version: + description: 'Bazelisk version to download' required: false - default: 'v1.10.1' + default: 'v1.11.0' runs: using: "composite" steps: - run: | - curl -L -o bazelisk "https://github.com/bazelbuild/bazelisk/releases/download/v1.10.1/bazelisk-linux-amd64" + curl -L -o bazelisk "https://github.com/bazelbuild/bazelisk/releases/download/$%7B%7B%20inputs.version%20%7D%7D/bazelisk-linux-amd64" chmod +x bazelisk && sudo mv bazelisk /usr/local/bin/bazel shell: bash diff --git a/.github/actions/setup-chrome/action.yml b/.github/actions/setup-chrome/action.yml index 3ba8107fc84f6..b0d724391906f 100644 --- a/.github/actions/setup-chrome/action.yml +++ b/.github/actions/setup-chrome/action.yml @@ -1,4 +1,10 @@ -name: 'Setup Chrome and chromedriver' +name: 'Setup Chrome and ChromeDriver' +description: 'Setup Chrome and ChromeDriver' +inputs: + version: + description: 'Chrome version' + required: false + default: 'stable' runs: using: "composite" steps: @@ -14,8 +20,5 @@ runs: export CHROMEDRIVER_VERSION=`curl -s https://chromedriver.storage.googleapis.com/LATEST_RELEASE_${CHROME_MAJOR_VERSION%%.*}` curl -L -O "https://chromedriver.storage.googleapis.com/$%7BCHROMEDRIVER_VERSION%7D/chromedriver_linux64.zip" unzip chromedriver_linux64.zip && chmod +x chromedriver && sudo mv chromedriver /usr/local/bin - export CHROMEDRIVER_VERSION=`curl -s https://chromedriver.storage.googleapis.com/LATEST_RELEASE_${CHROME_MAJOR_VERSION%%.*}` - curl -L -O "https://chromedriver.storage.googleapis.com/$%7BCHROMEDRIVER_VERSION%7D/chromedriver_linux64.zip" - unzip chromedriver_linux64.zip && chmod +x chromedriver && sudo mv chromedriver /usr/local/bin - chromedriver -version + chromedriver --version shell: bash diff --git a/.github/actions/setup-edge/action.yml b/.github/actions/setup-edge/action.yml new file mode 100644 index 0000000000000..66011875dfa56 --- /dev/null +++ b/.github/actions/setup-edge/action.yml @@ -0,0 +1,25 @@ +name: 'Setup Edge and EdgeDriver' +description: 'Setup Edge and EdgeDriver' +inputs: + version: + description: 'Edge version' + required: false + default: 'stable' +runs: + using: "composite" + steps: + - run: | + wget -q -O - https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - + echo "deb https://packages.microsoft.com/repos/edge stable main" | sudo tee -a /etc/apt/sources.list.d/microsoft-edge.list + sudo apt-get update -qqy + sudo apt-get -qqy install microsoft-edge-stable + EDGE_VERSION=$(microsoft-edge-stable --version) + EDGE_FULL_VERSION=${EDGE_VERSION%%.*} + EDGE_MAJOR_VERSION=${EDGE_FULL_VERSION//[!0-9]} + sudo rm /etc/apt/sources.list.d/microsoft-edge.list + + export EDGE_DRIVER_VERSION=$(wget --no-verbose -O - "https://msedgedriver.azureedge.net/LATEST_RELEASE_$%7BEDGE_MAJOR_VERSION%7D_LINUX" | tr -cd "\11\12\15\40-\176" | tr -d "\r") + wget --no-verbose https://msedgedriver.azureedge.net/${EDGE_DRIVER_VERSION}/edgedriver_linux64.zip + unzip edgedriver_linux64.zip && chmod +x msedgedriver && sudo mv msedgedriver /usr/local/bin + msedgedriver --version + shell: bash diff --git a/.github/actions/setup-firefox/action.yml b/.github/actions/setup-firefox/action.yml index 7ca4301c5ad89..0e903f5426d64 100644 --- a/.github/actions/setup-firefox/action.yml +++ b/.github/actions/setup-firefox/action.yml @@ -1,13 +1,20 @@ -name: 'Setup Firefox and geckodriver' +name: 'Setup Firefox and GeckoDriver' +description: 'Setup Firefox and GeckoDriver via browser-actions' +inputs: + version: + description: 'Firefox version' + required: false + default: 'latest' runs: using: "composite" steps: - - run: | - GECKODRIVER_URL=`curl -Ls -o /dev/null -w %{url_effective} https://github.com/mozilla/geckodriver/releases/latest` - GECKODRIVER_VERSION=`echo $GECKODRIVER_URL | sed 's#.*/##'` - export GECKODRIVER_DOWNLOAD="https://github.com/mozilla/geckodriver/releases/download/$GECKODRIVER_VERSION/geckodriver-$GECKODRIVER_VERSION-linux64.tar.gz" - curl -L -o geckodriver.tar.gz $GECKODRIVER_DOWNLOAD - gunzip -c geckodriver.tar.gz | tar xopf - - chmod +x geckodriver && sudo mv geckodriver /usr/local/bin - geckodriver --version + - name: Setup Firefox + uses: browser-actions/setup-firefox@latest + with: + firefox-version: ${{ inputs.version }} + - name: Check GeckoDriver + run: geckodriver --version shell: bash +# Deactivating until https://github.com/mozilla/geckodriver/issues/2009 gets fixed +# - name: Setup GeckoDriver +# uses: browser-actions/setup-geckodriver@latest diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000000..201fa59406196 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,8 @@ +version: 2 +updates: + - package-ecosystem: github-actions + directory: "/" + schedule: + interval: daily + time: '08:00' + open-pull-requests-limit: 99 diff --git a/.github/label-commenter-config.yml b/.github/label-commenter-config.yml index c8207477b1d80..140b67edbc1af 100644 --- a/.github/label-commenter-config.yml +++ b/.github/label-commenter-config.yml @@ -24,8 +24,8 @@ labels: If the issue is valid but there is no time to troubleshoot it, consider adding the help wanted label.

- If the issue requires changes or fixes from an external project (e.g., ChromeDriver, GeckoDriver, W3C), - add the applicable G-* label, and it will provide the correct link and auto-close the + If the issue requires changes or fixes from an external project (e.g., ChromeDriver, GeckoDriver, MSEdgeDriver, W3C), + add the applicable G-* label, and it will provide the correct link and auto-close the issue.

@@ -70,7 +70,20 @@ labels: You can see if the feature is passing in the [Web Platform Tests](https://wpt.fyi/results/webdriver/tests). - If it is something new, please [Create an Issue](https://github.com/mozilla/geckodriver/issues/new) with the GeckoDriver team. + If it is something new, please [create an Issue](https://github.com/mozilla/geckodriver/issues/new) with the GeckoDriver team. + + Feel free to comment the issues that you raise back in this issue. Thank you. + action: close + - name: G-msedgedriver + labeled: + issue: + body: | + Hi, @{{ issue.user.login }}. + This issue has been determined to require fixes in [MSEdgeDriver](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/). + + You can see if the feature is passing in the [Web Platform Tests](https://wpt.fyi/results/webdriver/tests). + + If it is something new, please [create an Issue](https://github.com/MicrosoftEdge/EdgeWebDriver/issues/new) with the MSEdgeDriver team. Feel free to comment the issues that you raise back in this issue. Thank you. action: close @@ -81,7 +94,9 @@ labels: Hi, @{{ issue.user.login }}. Please follow the issue template, we need more information to reproduce the issue. - Either a complete code snippet (if more than one file is needed, provide a GitHub repo and instructions to run the code), the specific versions used, or a more detailed description to help us understand the issue. + Either a complete code snippet and URL/HTML (if more than one file is needed, provide a GitHub repo and instructions to run the code), the specific versions used, or a more detailed description to help us understand the issue. + + Note: If you cannot share your code and URL/HTML, any complete code snippet and URL/HTML that reproduces the issue is good enough. Reply to this issue when all information is provided, thank you. - name: I-question diff --git a/.github/workflows/java.yml b/.github/workflows/ci-java.yml similarity index 57% rename from .github/workflows/java.yml rename to .github/workflows/ci-java.yml index 91d4acc1c3466..358083d70d0c9 100644 --- a/.github/workflows/java.yml +++ b/.github/workflows/ci-java.yml @@ -1,22 +1,35 @@ -name: Java workflow +# Configuration for Java CI +# To force the execution of this workflow, add [run java] to your commit message +name: 'CI - Java' on: + workflow_dispatch: + + schedule: + - cron: '15 9,21 * * *' + push: - branches: - - trunk + pull_request: - branches: - - trunk env: - NODE_VERSION: '13.x' + NODE_VERSION: '16.x' jobs: + check_workflow: + permissions: + contents: none + uses: ./.github/workflows/should-workflow-run.yml + with: + bazel-target-prefix: '//java' + build: + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run java]') == true }} + needs: check_workflow runs-on: ubuntu-latest steps: - name: Checkout source tree - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Cache Bazel artifacts uses: actions/cache@v2 with: @@ -38,11 +51,12 @@ jobs: command: build grid small_tests: - needs: build + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run java]') == true }} + needs: [ check_workflow, build ] runs-on: ubuntu-latest steps: - name: Checkout source tree - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 0 - name: Cache Bazel artifacts @@ -71,21 +85,24 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - lint: - needs: build + medium_tests: + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run java]') == true }} + needs: [ check_workflow, small_tests ] runs-on: ubuntu-latest steps: - name: Checkout source tree - uses: actions/checkout@v2 + uses: actions/checkout@v3 + with: + fetch-depth: 0 - name: Cache Bazel artifacts uses: actions/cache@v2 with: path: | ~/.cache/bazel-disk ~/.cache/bazel-repo - key: ${{ runner.os }}-bazel-lint-${{ hashFiles('**/BUILD.bazel') }} + key: ${{ runner.os }}-bazel-medium-tests-${{ hashFiles('**/BUILD.bazel') }} restore-keys: | - ${{ runner.os }}-bazel-lint- + ${{ runner.os }}-bazel-medium-tests- ${{ runner.os }}-bazel-build- - name: Setup bazelisk uses: ./.github/actions/setup-bazelisk @@ -93,26 +110,28 @@ jobs: uses: actions/setup-java@v1 with: java-version: '11' - - name: Run linter + - name: Run medium tests uses: ./.github/actions/bazel-test with: - query: attr(tags, lint, tests(//java/...)) + query: attr(size, medium, tests(//java/...)) except attr(tags, lint, tests(//java/...)) + attempts: 3 - chrome_tests: - needs: small_tests + lint: + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run java]') == true }} + needs: [ check_workflow, build ] runs-on: ubuntu-latest steps: - name: Checkout source tree - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Cache Bazel artifacts uses: actions/cache@v2 with: path: | ~/.cache/bazel-disk ~/.cache/bazel-repo - key: ${{ runner.os }}-bazel-chrome-tests-${{ hashFiles('**/BUILD.bazel') }} + key: ${{ runner.os }}-bazel-lint-${{ hashFiles('**/BUILD.bazel') }} restore-keys: | - ${{ runner.os }}-bazel-chrome-tests- + ${{ runner.os }}-bazel-lint- ${{ runner.os }}-bazel-build- - name: Setup bazelisk uses: ./.github/actions/setup-bazelisk @@ -120,32 +139,35 @@ jobs: uses: actions/setup-java@v1 with: java-version: '11' - - name: Setup Chrome and ChromeDriver - uses: ./.github/actions/setup-chrome - - name: Start XVFB - run: Xvfb :99 & - - name: Run browser tests in Chrome + - name: Run linter uses: ./.github/actions/bazel-test with: - query: attr(tags, chrome, tests(//java/...)) except attr(tags, remote, tests(//java/...)) - env: - DISPLAY: :99 + query: attr(tags, lint, tests(//java/...)) - firefox_tests: - needs: small_tests + browser_tests: + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run java]') == true }} + needs: [ check_workflow, small_tests ] runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + - { "browser": "firefox", "version": "latest" } + - { "browser": "firefox", "version": "latest-beta" } + - { "browser": "firefox", "version": "latest-devedition" } + - { "browser": "chrome", "version": "stable" } steps: - name: Checkout source tree - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Cache Bazel artifacts uses: actions/cache@v2 with: path: | ~/.cache/bazel-disk ~/.cache/bazel-repo - key: ${{ runner.os }}-bazel-firefox-tests-${{ hashFiles('**/BUILD.bazel') }} + key: ${{ runner.os }}-bazel-${{ matrix.browser }}-tests-${{ hashFiles('**/BUILD.bazel') }} restore-keys: | - ${{ runner.os }}-bazel-firefox-tests- + ${{ runner.os }}-bazel-${{ matrix.browser }}-tests- ${{ runner.os }}-bazel-build- - name: Setup bazelisk uses: ./.github/actions/setup-bazelisk @@ -155,33 +177,51 @@ jobs: java-version: '11' - name: Setup Firefox and GeckoDriver uses: ./.github/actions/setup-firefox + with: + version: ${{ matrix.version }} + if: | + matrix.browser == 'firefox' + - name: Setup Chrome and ChromeDriver + uses: ./.github/actions/setup-chrome + with: + version: ${{ matrix.version }} + if: | + matrix.browser == 'chrome' - name: Start XVFB run: Xvfb :99 & - - name: Run browser tests in Firefox + - name: Run browser tests in ${{ matrix.browser }} uses: ./.github/actions/bazel-test with: - query: attr(tags, firefox, tests(//java/...)) except attr(tags, 'rc|remote', tests(//java/...)) + query: attr(tags, ${{ matrix.browser }}, tests(//java/...)) except attr(tags, 'lint|rc|remote', tests(//java/...)) + attempts: 3 env: DISPLAY: :99 - server_tests: - needs: [ chrome_tests, firefox_tests ] + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run java]') == true }} + needs: [ check_workflow, small_tests ] runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + - { "browser": "firefox", "version": "latest" } + - { "browser": "firefox", "version": "latest-beta" } + - { "browser": "firefox", "version": "latest-devedition" } + - { "browser": "chrome", "version": "stable" } steps: - name: Checkout source tree - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Cache Bazel artifacts uses: actions/cache@v2 with: path: | ~/.cache/bazel-disk ~/.cache/bazel-repo - key: ${{ runner.os }}-bazel-server-tests-${{ hashFiles('**/BUILD.bazel') }} + key: ${{ runner.os }}-bazel-${{ matrix.browser }}-server-tests-${{ hashFiles('**/BUILD.bazel') }} restore-keys: | - ${{ runner.os }}-bazel-server-tests- - ${{ runner.os }}-bazel-chrome-tests- - ${{ runner.os }}-bazel-firefox-tests- + ${{ runner.os }}-bazel-${{ matrix.browser }}-server-tests- + ${{ runner.os }}-bazel-${{ matrix.browser }}-tests- ${{ runner.os }}-bazel-build- - name: Setup bazelisk uses: ./.github/actions/setup-bazelisk @@ -189,25 +229,35 @@ jobs: uses: actions/setup-java@v1 with: java-version: '11' - - name: Setup Chrome and ChromeDriver - uses: ./.github/actions/setup-chrome - name: Setup Firefox and GeckoDriver uses: ./.github/actions/setup-firefox + with: + version: ${{ matrix.version }} + if: | + matrix.browser == 'firefox' + - name: Setup Chrome and ChromeDriver + uses: ./.github/actions/setup-chrome + with: + version: ${{ matrix.version }} + if: | + matrix.browser == 'chrome' - name: Start XVFB run: Xvfb :99 & - name: Run server tests uses: ./.github/actions/bazel-test with: - query: tests(//java/...) except attr(tags, 'rc|lint|ie|edge|edgehtml|safari', tests(//java/...)) + query: attr(tags, ${{ matrix.browser }}, tests(//java/...)) intersect attr(tags, 'remote', tests(//java/...)) + attempts: 3 env: DISPLAY: :99 rc_tests: - needs: small_tests + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run java]') == true }} + needs: [ check_workflow, small_tests ] runs-on: ubuntu-latest steps: - name: Checkout source tree - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Cache Bazel artifacts uses: actions/cache@v2 with: @@ -226,21 +276,25 @@ jobs: java-version: '11' - name: Setup Firefox and GeckoDriver uses: ./.github/actions/setup-firefox + with: + version: latest - name: Start XVFB run: Xvfb :99 & - name: Run browser tests in Firefox uses: ./.github/actions/bazel-test with: query: attr(tags, rc, tests(//java/...)) + attempts: 3 env: DISPLAY: :99 javadoc: - needs: build + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run java]') == true }} + needs: [ check_workflow, build ] runs-on: ubuntu-latest steps: - name: Checkout source tree - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Cache Bazel artifacts uses: actions/cache@v2 with: diff --git a/.github/workflows/javascript.yml b/.github/workflows/ci-javascript.yml similarity index 56% rename from .github/workflows/javascript.yml rename to .github/workflows/ci-javascript.yml index 22dd20a1444c7..4ad3f705e5461 100644 --- a/.github/workflows/javascript.yml +++ b/.github/workflows/ci-javascript.yml @@ -1,31 +1,35 @@ -name: JavaScript workflow +# Configuration for JavaScript CI +# To force the execution of this workflow, add [run javascript] to your commit message +name: 'CI - JavaScript' on: + workflow_dispatch: + + schedule: + - cron: '45 9,21 * * *' + push: - branches: - - trunk - paths: - - .bazel* - - .github/actions/** - - .github/workflows/javascript.yml - - javascript/** - - common/** - - package.json - - package-lock.json + pull_request: - branches: - - trunk - paths: - - .bazel* - - .github/actions/** - - .github/workflows/javascript.yml - - javascript/** - - common/** - - package.json - - package-lock.json + jobs: + check_workflow: + permissions: + contents: none + uses: ./.github/workflows/should-workflow-run.yml + with: + bazel-target-prefix: '//javascript' + node_tests: + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run javascript]') == true }} + needs: check_workflow runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + - { "browser": "firefox", "version": "latest" } + - { "browser": "chrome", "version": "stable" } steps: - name: Checkout source tree uses: actions/checkout@v2 @@ -49,19 +53,32 @@ jobs: java-version: 11 - name: Setup bazelisk uses: ./.github/actions/setup-bazelisk - - name: Setup Firefox and geckodriver + - name: Setup Firefox and GeckoDriver uses: ./.github/actions/setup-firefox + with: + version: ${{ matrix.version }} + if: | + matrix.browser == 'firefox' + - name: Setup Chrome and ChromeDriver + uses: ./.github/actions/setup-chrome + with: + version: ${{ matrix.version }} + if: | + matrix.browser == 'chrome' - name: Start XVFB run: Xvfb :99 & - - name: Run JavaScript tests on Firefox - uses: ./.github/actions/bazel + - name: Run JavaScript tests + uses: ./.github/actions/bazel-test with: - command: test //javascript/node/selenium-webdriver:tests + query: //javascript/node/selenium-webdriver:tests + attempts: 3 env: DISPLAY: :99 - SELENIUM_BROWSER: firefox + SELENIUM_BROWSER: ${{ matrix.browser }} firefox_atom_tests: + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run javascript]') == true }} + needs: check_workflow runs-on: ubuntu-latest steps: - name: Checkout source tree @@ -81,8 +98,10 @@ jobs: java-version: 11 - name: Setup bazelisk uses: ./.github/actions/setup-bazelisk - - name: Setup Firefox and geckodriver + - name: Setup Firefox and GeckoDriver uses: ./.github/actions/setup-firefox + with: + version: ${{ matrix.version }} - name: Start XVFB run: Xvfb :99 & - name: Run atom tests on Firefox @@ -96,6 +115,8 @@ jobs: # As soon as this gets merged https://github.com/facebook/jest/pull/9351, we should upgrade Jest and # run bazel test javascript/grid-ui:test for these tests grid_ui_unit_tests: + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run javascript]') == true }} + needs: check_workflow runs-on: ubuntu-latest steps: - name: Checkout source tree @@ -103,7 +124,7 @@ jobs: - name: Setup Node uses: actions/setup-node@v2 with: - node-version: '15.x' + node-version: '16.x' - name: NPM install run: cd javascript/grid-ui && npm install - name: Run unit tests diff --git a/.github/workflows/python.yml b/.github/workflows/ci-python.yml similarity index 70% rename from .github/workflows/python.yml rename to .github/workflows/ci-python.yml index 29ba4d584ebe7..8a20a7a072b21 100644 --- a/.github/workflows/python.yml +++ b/.github/workflows/ci-python.yml @@ -1,33 +1,28 @@ -name: Python workflow +# Configuration for Python CI +# To force the execution of this workflow, add [run python] to your commit message +name: 'CI - Python' on: + workflow_dispatch: + + schedule: + - cron: '05 9,21 * * *' + push: - branches: - - trunk - paths: - - .bazel* - - .github/actions/** - - .github/workflows/python.yml - - common/** - - javascript/atoms/** - - javascript/cdp-support/** - - javascript/webdriver/** - - py/** + pull_request: - branches: - - trunk - paths: - - .bazel* - - .github/actions/** - - .github/workflows/python.yml - - common/** - - javascript/atoms/** - - javascript/cdp-support/** - - javascript/webdriver/** - - py/** jobs: + check_workflow: + permissions: + contents: none + uses: ./.github/workflows/should-workflow-run.yml + with: + bazel-target-prefix: '//py' + tox_flake8: + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run python]') == true }} + needs: check_workflow runs-on: ubuntu-latest steps: - name: Checkout source tree @@ -46,6 +41,8 @@ jobs: TOXENV: flake8 tox_docs: + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run python]') == true }} + needs: check_workflow runs-on: ubuntu-latest steps: - name: Checkout source tree @@ -64,6 +61,8 @@ jobs: TOXENV: docs tox_mypy: + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run python]') == true }} + needs: check_workflow runs-on: ubuntu-latest steps: - name: Checkout source tree @@ -84,6 +83,8 @@ jobs: TOXENV: mypy unit_tests: + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run python]') == true }} + needs: check_workflow runs-on: ubuntu-latest steps: - name: Checkout source tree @@ -113,7 +114,8 @@ jobs: command: test //py:unit chrome_tests: - needs: unit_tests + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run python]') == true }} + needs: [ check_workflow, unit_tests ] runs-on: ubuntu-latest steps: - name: Checkout source tree @@ -150,7 +152,8 @@ jobs: DISPLAY: :99 firefox_tests_remote: - needs: unit_tests + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run python]') == true }} + needs: [ check_workflow, unit_tests ] runs-on: ubuntu-latest steps: - name: Checkout source tree @@ -175,8 +178,10 @@ jobs: uses: actions/setup-java@v1 with: java-version: '11' - - name: Setup Firefox and GeckoDriver - uses: ./.github/actions/setup-firefox + - name: Setup Firefox + uses: browser-actions/setup-firefox@latest + - name: Setup GeckoDriver + uses: browser-actions/setup-geckodriver@latest - name: Start XVFB run: Xvfb :99 & - name: Run browser tests in Firefox (Remote) @@ -187,7 +192,8 @@ jobs: DISPLAY: :99 firefox_tests: - needs: unit_tests + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run python]') == true }} + needs: [ check_workflow, unit_tests ] runs-on: ubuntu-latest steps: - name: Checkout source tree @@ -212,8 +218,10 @@ jobs: uses: actions/setup-java@v1 with: java-version: '11' - - name: Setup Firefox and GeckoDriver - uses: ./.github/actions/setup-firefox + - name: Setup Firefox + uses: browser-actions/setup-firefox@latest + - name: Setup GeckoDriver + uses: browser-actions/setup-geckodriver@latest - name: Start XVFB run: Xvfb :99 & - name: Run browser tests in Firefox @@ -222,3 +230,4 @@ jobs: command: test //py:test-firefox env: DISPLAY: :99 + diff --git a/.github/workflows/ruby.yml b/.github/workflows/ci-ruby.yml similarity index 65% rename from .github/workflows/ruby.yml rename to .github/workflows/ci-ruby.yml index 3f45b4b38ab37..35e5f312fbc11 100644 --- a/.github/workflows/ruby.yml +++ b/.github/workflows/ci-ruby.yml @@ -1,20 +1,33 @@ -name: Ruby workflow +# Configuration for Ruby CI +# To force the execution of this workflow, add [run ruby] to your commit message +name: 'CI - Ruby' on: + workflow_dispatch: + + schedule: + - cron: '35 9,21 * * *' + push: - branches: - - trunk + pull_request: - branches: - - trunk jobs: + check_workflow: + permissions: + contents: none + uses: ./.github/workflows/should-workflow-run.yml + with: + bazel-target-prefix: '//rb' + build: + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run ruby]') == true }} + needs: check_workflow runs-on: ubuntu-latest strategy: fail-fast: false matrix: - target: ['selenium-devtools', 'selenium-webdriver'] + target: [ 'selenium-devtools', 'selenium-webdriver' ] steps: - uses: actions/checkout@v2 - uses: actions/setup-java@v1 @@ -22,7 +35,7 @@ jobs: java-version: 11 - uses: ruby/setup-ruby@v1 with: - ruby-version: 2.6 + ruby-version: 2.7 - uses: actions/cache@v2 with: path: | @@ -37,11 +50,13 @@ jobs: command: build //rb:${{ matrix.target }} chrome-test: + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run ruby]') == true }} + needs: check_workflow runs-on: ubuntu-latest strategy: fail-fast: false matrix: - target: ['chrome-test', 'remote-chrome-test'] + target: [ 'chrome-test', 'remote-chrome-test' ] steps: - uses: actions/checkout@v2 - uses: actions/setup-java@v1 @@ -49,7 +64,7 @@ jobs: java-version: 11 - uses: ruby/setup-ruby@v1 with: - ruby-version: 2.6 + ruby-version: 2.7 - uses: actions/cache@v2 with: path: | @@ -68,11 +83,13 @@ jobs: DISPLAY: :99 firefox-test: + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run ruby]') == true }} + needs: check_workflow runs-on: ubuntu-latest strategy: fail-fast: false matrix: - target: ['firefox-test', 'remote-firefox-test'] + target: [ 'firefox-test', 'remote-firefox-test' ] steps: - uses: actions/checkout@v2 - uses: actions/setup-java@v1 @@ -80,7 +97,7 @@ jobs: java-version: 11 - uses: ruby/setup-ruby@v1 with: - ruby-version: 2.6 + ruby-version: 2.7 - uses: actions/cache@v2 with: path: | @@ -90,7 +107,10 @@ jobs: restore-keys: | ${{ runner.os }}-bazel-ruby-${{ matrix.target }}- - uses: ./.github/actions/setup-bazelisk - - uses: ./.github/actions/setup-firefox + - name: Setup Firefox + uses: browser-actions/setup-firefox@latest + - name: Setup GeckoDriver + uses: browser-actions/setup-geckodriver@latest - run: Xvfb :99 & - uses: ./.github/actions/bazel with: @@ -99,12 +119,14 @@ jobs: DISPLAY: :99 docs: + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run ruby]') == true }} + needs: check_workflow runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: ruby/setup-ruby@v1 with: - ruby-version: 2.6 + ruby-version: 2.7 - uses: actions/cache@v2 with: path: | @@ -119,12 +141,14 @@ jobs: command: run //rb:docs lint: + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run ruby]') == true }} + needs: check_workflow runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: ruby/setup-ruby@v1 with: - ruby-version: 2.6 + ruby-version: 2.7 - uses: actions/cache@v2 with: path: | @@ -139,11 +163,13 @@ jobs: command: run //rb:lint unit-test: + if: ${{ needs.check_workflow.outputs.result == 'true' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(toJson(github.event.commits), '[run ruby]') == true }} + needs: check_workflow runs-on: ubuntu-latest strategy: fail-fast: false matrix: - ruby: ['2.6', 'jruby-9.3.0.0'] + ruby: [ '2.7', '3.1' ] steps: - uses: actions/checkout@v2 - uses: ruby/setup-ruby@v1 diff --git a/.github/workflows/should-workflow-run.yml b/.github/workflows/should-workflow-run.yml new file mode 100644 index 0000000000000..f1dfa2bca6ca4 --- /dev/null +++ b/.github/workflows/should-workflow-run.yml @@ -0,0 +1,46 @@ +name: Should workflow run? + +on: + workflow_call: + inputs: + commit-range: + description: Commits considered to determine bazel targets + required: false + type: string + default: HEAD^..HEAD + bazel-target-prefix: + description: Bazel target prefix used to determine if the code path will be used + required: true + type: string + + outputs: + result: + description: "Boolean to be used in the job to decide if the job runs or not" + value: ${{ jobs.check_workflow_run.outputs.result }} + +jobs: + check_workflow_run: + runs-on: ubuntu-latest + outputs: + result: ${{ steps.check-bazel-target-prefix.outputs.run-workflow }} + steps: + - name: Checkout source tree + uses: actions/checkout@v2 + with: + fetch-depth: 50 + - name: Setup bazelisk + uses: ./.github/actions/setup-bazelisk + - name: Setup Java + uses: actions/setup-java@v1 + with: + java-version: '11' + - name: Copy bazelrc + run: cp .github/.bazelrc.local . + shell: bash + - name: Check bazel target prefix + id: check-bazel-target-prefix + run: | + ./scripts/github-actions/should-workflow-run.sh + shell: bash + env: + BAZEL_TARGET_PREFIX: ${{ inputs.bazel-target-prefix }} diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index fe3a81d7a6318..555bc3b15a467 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -5,16 +5,21 @@ on: schedule: - cron: '15 10,20 * * *' +permissions: + contents: read + jobs: stale: + permissions: + issues: write # for actions/stale to close stale issues + pull-requests: write # for actions/stale to close stale PRs runs-on: ubuntu-latest steps: - uses: actions/stale@v4 with: - stale-issue-message: 'This issue is stale because it has been open 365 days with no activity. Remove stale label or comment or this will be closed in 14 days.' + stale-issue-message: 'This issue is stale because it has been open 280 days with no activity. Remove stale label or comment or this will be closed in 14 days.' close-issue-message: 'This issue was closed because it has been stalled for 14 days with no activity.' stale-issue-label: 'I-stale' - exempt-issue-labels: 'help wanted' - days-before-stale: 365 + days-before-stale: 280 days-before-close: 14 operations-per-run: 200 diff --git a/.gitignore b/.gitignore index 50d9d74a64a4e..4f1bc99771b08 100644 --- a/.gitignore +++ b/.gitignore @@ -107,6 +107,7 @@ Gemfile.lock .idea/inspectionProfiles/Project_Default.xml .idea/misc.xml third_party/py/googlestorage/client_secrets.json +.venv venv venv3 py/.idea diff --git a/BUILD.bazel b/BUILD.bazel index 118da4c4286c8..064dbd86fb22e 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -11,6 +11,31 @@ filegroup( visibility = ["//visibility:public"], ) +load("@rules_python//python:defs.bzl", "py_runtime_pair") + +py_runtime( + name = "py3_runtime", + interpreter_path = select({ + "@platforms//os:macos": "/usr/bin/python3", + "@platforms//os:linux": "/usr/bin/python", + "@platforms//os:windows": "C:\\Python310\\python", + }), + python_version = "PY3", + stub_shebang = "#!/usr/bin/python3", +) + +py_runtime_pair( + name = "py_runtime_pair", + py2_runtime = None, + py3_runtime = ":py3_runtime", +) + +toolchain( + name = "py_toolchain", + toolchain = ":py_runtime_pair", + toolchain_type = "@rules_python//python:toolchain_type", +) + alias( name = "grid", actual = "//java/src/org/openqa/selenium/grid:executable-grid", diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9c3bfaf1debc9..ad009486d953f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -180,7 +180,106 @@ Use `git rebase` (not `git merge`) to sync your work from time to time. ### Step 5: Test Bug fixes and features **should have tests**. Look at other tests to -see how they should be structured. +see how they should be structured. Verify that new and existing tests are +passing locally before pushing code. + +#### Running tests locally + +Build your code for the latest changes and run tests locally. + +##### Python +

+ + Click to see How to run Python Tests. + + + It's not mandatory to run tests sequentially but running Unit tests + before browser testing is recommended. + + Unit Tests + ```shell + % bazel test //py:unit + ``` + + Remote Tests + ```shell + % bazel test --jobs 1 //py:test-remote + ``` + + Browser Tests + ```shell + % bazel test //py:test- #eg test-chrome, test-firefox + ``` +
+ +##### Javascript +
+ + Click to see How to run JavaScript Tests. + + + Node Tests + ```shell + % bazel test //javascript/node/selenium-webdriver:tests + ``` + + Firefox Atom Tests + ```shell + % bazel test --test_tag_filters=firefox //javascript/atoms/... //javascript/selenium-atoms/... //javascript/webdriver/... + ``` + + Grid UI Unit Tests + ```shell + % cd javascript/grid-ui && npm install && npm test + ``` +
+ +##### Java +
+ + Click to see How to run Java Tests. + + + Small Tests + ```shell + % bazel test --cache_test_results=no --test_size_filters=small grid java/test/... + ``` + + Large Tests + ```shell + % bazel test --cache_test_results=no java/test/org/openqa/selenium/grid/router:large-tests + ``` + + Browser Tests + ```shell + bazel test --test_size_filters=small,medium --cache_test_results=no --test_tag_filters=-browser-test //java/... + ``` +
+ +##### Ruby +
+ + Click to see How to run Ruby Tests. + + + It's not mandatory to run tests sequentially but running Unit tests + before browser testing is recommended. + + Unit Tests + ```shell + % bazel test rb:unit-test + ``` + + Chrome Tests + ```shell + bazel test rb:chrome-test + ``` + + Remote Tests + ```shell + % bazel test --test_output=all --test_arg="-tfocus" --test_arg="--fail-fast" rb:remote-chrome-test + ``` +
### Step 6: Push diff --git a/LICENSE b/LICENSE index 3806328d0f7bb..ff027be4de8b8 100644 --- a/LICENSE +++ b/LICENSE @@ -187,7 +187,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright 2021 Software Freedom Conservancy (SFC) + Copyright 2022 Software Freedom Conservancy (SFC) Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/NOTICE b/NOTICE index 20a6bb6e21521..35e36f3e053b1 100644 --- a/NOTICE +++ b/NOTICE @@ -1,2 +1,2 @@ -Copyright 2011-2021 Software Freedom Conservancy +Copyright 2011-2022 Software Freedom Conservancy Copyright 2004-2011 Selenium committers diff --git a/README.md b/README.md index 1ee1f17911387..adb982e074f90 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,9 @@ # Selenium -[![Python workflow](https://github.com/SeleniumHQ/selenium/workflows/Python%20workflow/badge.svg)](https://github.com/SeleniumHQ/selenium/actions?query=workflow%3A%22Python+workflow%22) -[![Ruby workflow](https://github.com/SeleniumHQ/selenium/workflows/Ruby%20workflow/badge.svg)](https://github.com/SeleniumHQ/selenium/actions?query=workflow%3A%22Ruby+workflow%22) -[![JavaScript workflow](https://github.com/SeleniumHQ/selenium/workflows/JavaScript%20workflow/badge.svg)](https://github.com/SeleniumHQ/selenium/actions?query=workflow%3A%22JavaScript+workflow%22) -[![Java workflow](https://github.com/SeleniumHQ/selenium/workflows/Java%20workflow/badge.svg)](https://github.com/SeleniumHQ/selenium/actions?query=workflow%3A%22Java+workflow%22) - +[![CI - Ruby](https://github.com/SeleniumHQ/selenium/actions/workflows/ci-ruby.yml/badge.svg)](https://github.com/SeleniumHQ/selenium/actions/workflows/ci-ruby.yml) +[![CI - Python](https://github.com/SeleniumHQ/selenium/actions/workflows/ci-python.yml/badge.svg)](https://github.com/SeleniumHQ/selenium/actions/workflows/ci-python.yml) +[![CI - JavaScript](https://github.com/SeleniumHQ/selenium/actions/workflows/ci-javascript.yml/badge.svg)](https://github.com/SeleniumHQ/selenium/actions/workflows/ci-javascript.yml) +[![CI - Java](https://github.com/SeleniumHQ/selenium/actions/workflows/ci-java.yml/badge.svg)](https://github.com/SeleniumHQ/selenium/actions/workflows/ci-java.yml) Selenium @@ -44,34 +43,26 @@ before submitting your pull requests. the version of Bazel specified in `.bazelversion` file and transparently passes through all command-line arguments to the real Bazel binary. * The latest version of the [Java 11 OpenJDK](https://openjdk.java.net/) -* `java` and `jar` on the PATH (make sure you use `java` executable from JDK but not JRE). +* `java` and `jar` on the `$PATH` (make sure you use `java` executable from JDK but not JRE). * To test this, try running the command `javac`. This command won't exist if you only have the JRE installed. If you're met with a list of command-line options, you're referencing the JDK properly. -* [Python 3.7+](https://www.python.org/downloads/) -* `python` on the PATH +* [Python 3.7+](https://www.python.org/downloads/) and `python` on the `PATH` +* [Ruby 3+](https://www.ruby-lang.org/en/documentation/installation/) and `ruby` on the `PATH` * [The tox automation project](http://tox.readthedocs.org/) for Python: `pip install tox` -* MacOS users should have the latest version of Xcode installed, including the command-line tools. -The following command should work: - -```bash -xcode-select --install -``` - -* Users of Apple Silicon Macs should add `build - --host_platform=//:rosetta` to their `.bazelrc.local` file. We are working +* macOS users: + * Install the latest version of Xcode including the command-line tools. This command should work `xcode-select --install` + * Apple Silicon Macs should add `build --host_platform=//:rosetta` to their `.bazelrc.local` file. We are working to make sure this isn't required in the long run. - -* Windows users should have the latest version of Visual Studio command line tools and build tools installed +* Windows users: + * Latest version of [Visual Studio](https://www.visualstudio.com/) with command line tools and build tools installed * `BAZEL_VS` environment variable should point to the location of the build tools, e.g. `C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools` * `BAZEL_VC` environment variable should point to the location of the command line tools, e.g. `C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC` * `BAZEL_VC_FULL_VERSION` environment variable should contain the version of the installed command line tools, e.g. `14.27.29110` - -### Optional Requirements - -* Ruby 2.0 + * A detailed setup guide can be seen on Jim Evan's [post](http://jimevansmusic.blogspot.com/2020/04/setting-up-windows-development.html) + * If the Jim's blog instructions were followed, also make sure `C:\tools\msys65\usr\bin` is on the `PATH`. ### Internet Explorer Driver @@ -127,6 +118,15 @@ medium is akin to integration tests, and large is akin to end to end tests. The `test_tag_filters` allow us to pass in browser names and a few different tags that we can find in the code base. + +To build the Grid deployment jar, run this command: + +```sh +bazel build grid +``` + +The log will show where the output jar is located. + #### JavaScript @@ -177,8 +177,15 @@ bazel test //py:test- ``` If you add `--//common:pin_browsers` it will download the browsers and drivers for you to use. + +To install locally run: + +```sh +bazel build //py:selenium-wheel +pip install bazel-bin/py/selenium-*.whl +``` -To publish run +To publish run: ```sh bazel build //py:selenium-wheel @@ -206,16 +213,20 @@ To build the .NET code run: ```sh bazel build //dotnet/... ``` + +Also +```sh +bazel build //dotnet/test/common:chrome +``` + ### Build Details -* Bazel files are called BUILD.bazel -* [crazyfun](https://github.com/SeleniumHQ/selenium/wiki/Crazy-Fun-Build) build files are called -*build.desc*. This is an older build system, still in use in the project for Ruby bindings mostly. -The order the modules are built is determined by the build system. If you want to build an -individual module (assuming all dependent modules have previously been built), try the following: +Bazel files are called BUILD.bazel, and the order the modules are built is determined +by the build system. If you want to build an individual module (assuming all dependent +modules have previously been built), try the following: ```sh bazel test javascript/atoms:test @@ -227,8 +238,12 @@ In this case, `javascript/atoms` is the module directory, As you see *build targets* scroll past in the log, you may want to run them individually. +### Build Output + +`bazel` makes a top-level group of directories with the `bazel-` prefix on each directory. + -## Common Tasks (Bazel) +### Common Tasks (Bazel) To build the bulk of the Selenium binaries from source, run the following command from the root folder: @@ -237,12 +252,6 @@ following command from the root folder: bazel build java/... javascript/... ``` -To build the grid deployment jar, run this command: - -```sh -bazel build grid -``` - To run tests within a particular area of the project, use the "test" command, followed by the folder or target. Tests are tagged with "small", "medium", or "large", and can be filtered with the `--test_size_filters` option: @@ -260,7 +269,7 @@ To bump the versions of the pinned browsers to their latest stable versions: bazel run scripts:pinned_browsers > temp.bzl && mv temp.bzl common/repositories.bzl ``` -## Editing Code +### Editing Code Most of the team use either Intellij IDEA or VS.Code for their day-to-day editing. If you're working in IntelliJ, then we highly recommend installing the [Bazel IJ @@ -275,9 +284,8 @@ running, and editing code :) ## Tour The codebase is generally segmented around the languages used to -write the component. Selenium makes extensive use of JavaScript, so -let's start there. Working on the JavaScript is easy. First of all, -start the development server: +write the component. Selenium makes extensive use of JavaScript, so +let's start there. First of all, start the development server: ```sh bazel run debug-server @@ -286,23 +294,13 @@ bazel run debug-server Now, navigate to [http://localhost:2310/javascript](http://localhost:2310/javascript). You'll find the contents of the `javascript/` directory being shown. -We use the [Closure -Library](https://developers.google.com/closure/library/) for -developing much of the JavaScript, so now navigate to +We use the [Closure Library](https://developers.google.com/closure/library/) +for developing much of the JavaScript, so now navigate to [http://localhost:2310/javascript/atoms/test](http://localhost:2310/javascript/atoms/test). The tests in this directory are normal HTML files with names ending with `_test.html`. Click on one to load the page and run the test. -## Maven POM files - -Here is the [public Selenium Maven -repository](https://repo1.maven.org/maven2/org/seleniumhq/selenium/). - -## Build Output - -`bazel` makes a top-level group of directories with the `bazel-` prefix on each directory. - ## Help with `go` More general, but basic, help for `go`… @@ -311,21 +309,21 @@ More general, but basic, help for `go`… ./go --help ``` -`go` is just a wrapper around +`go` is a wrapper around [Rake](http://rake.rubyforge.org/), so you can use the standard commands such as `rake -T` to get more information about available targets. ## Maven _per se_ -If it is not clear already, Selenium is not built with Maven. It is -built with `bazel`, though that is invoked with `go` as outlined above, +Selenium is not built with Maven. It is built with `bazel`, +though that is invoked with `go` as outlined above, so you do not have to learn too much about that. That said, it is possible to relatively quickly build Selenium pieces for Maven to use. You are only really going to want to do this when you are testing the cutting-edge of Selenium development (which we -welcome) against your application. Here is the quickest way to build +welcome) against your application. Here is the quickest way to build and deploy into your local maven repository (`~/.m2/repository`), while skipping Selenium's own tests. @@ -335,12 +333,35 @@ skipping Selenium's own tests. The maven jars should now be in your local `~/.m2/repository`. -## Useful Resources +## Updating Java dependencies + +The coordinates (_groupId_:_artifactId_:_version_) of the Java dependencies +are defined in the file [maven_deps.bzl](https://github.com/SeleniumHQ/selenium/blob/trunk/java/maven_deps.bzl). +The process to modify these dependencies is the following: -Refer to the [Build Instructions](https://github.com/SeleniumHQ/selenium/wiki/Build-Instructions) -wiki page for the last word on building the bits and pieces of Selenium. +1. (Optional) If we want to detect the dependencies which are not updated, + we can use the following command for automatic discovery: -## Running Browser Tests on Linux +```sh +bazel run @maven//:outdated +``` + +2. Modify [maven_deps.bzl](https://github.com/SeleniumHQ/selenium/blob/trunk/java/maven_deps.bzl). + For instance, we can bump the version of a given artifact detected in the step before. + +3. Repin dependencies. This process is required to update the file [maven_install.json](https://github.com/SeleniumHQ/selenium/blob/trunk/java/maven_install.json), + which is used to manage the Maven dependencies tree (see [rules_jvm_external](https://github.com/bazelbuild/rules_jvm_external) for further details). The command to carry out this step is the following: + +```sh +REPIN=1 bazel run @unpinned_maven//:pin +``` + +4. (Optional) If we use IntelliJ with the Bazel plugin, we need to synchronize + our project. To that aim, we click on _Bazel_ → _Sync_ → _Sync Project + with BUILD Files_. + + +## Running browser tests on Linux In order to run Browser tests, you first need to install the browser-specific drivers, such as [`geckodriver`](https://github.com/mozilla/geckodriver/releases), @@ -408,64 +429,3 @@ The first command will prompt you for a password. The second step requires you t license, and then accept it by typing "agree". (Thanks to [this thread](https://github.com/bazelbuild/bazel/issues/4314) for these steps) - -## Releasing - -Begin by tagging the revision you're about to release, and push that tag to GitHub. - -Before running a release build, you must ensure that the `--stamp` flag is used by -the build. The easiest way to do this is: - -```shell -echo build --stamp >>.bazelrc.local -``` - -### GitHub Release Page - -* Draft a new (perhaps pre-release) -* Make sure this release is for the tag you created earlier -* Set the title to be whatever the release is. -* Use `git log $PREV_RELEASE..$NEW_TAG --format=format:'* [`%h`](https://github.com/seleniumhq/selenium/commit/%H) - %s :: %an' | pbcopy` - to generate the list of changes. Make sure you've set - `$PREV_RELEASE` and `$NEW_TAG`! -* The release notes are: -``` -### Changelog - -For each component's detailed changelog, please check: -* [Ruby](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES) -* [Python](https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES) -* [JavaScript](https://github.com/SeleniumHQ/selenium/blob/trunk/javascript/node/selenium-webdriver/CHANGES.md) -* [Java](https://github.com/SeleniumHQ/selenium/blob/trunk/java/CHANGELOG) -* [DotNet](https://github.com/SeleniumHQ/selenium/blob/trunk/dotnet/CHANGELOG) -* [IEDriverServer](https://github.com/SeleniumHQ/selenium/blob/trunk/cpp/iedriverserver/CHANGELOG) - -### Commits in this release -
-Click to see all the commits included in this release - - INSERT LIST OF CHANGES HERE! - -
- ``` -* Now publish the release. - -### Java - -To release the Java components, make sure you have permission to push to the OSS Sonatype -repo. You will need these credentials when pushing the maven release. - -Make sure that the java `CHANGELOG` is up to date, then just run: - -```shell -./go release-java -``` - -This will do two things: - -1. Build the publishable artifacts and push them to a staging repo on the - OSS Sonatype server. -2. Create zip files to upload in `build/dist` - -You will need to manually release the maven artifacts, and also upload -the artifacts from `build/dist` to the GitHub release. diff --git a/Rakefile b/Rakefile index b75cbb0ed407a..53ba05232fe38 100644 --- a/Rakefile +++ b/Rakefile @@ -51,7 +51,7 @@ $DEBUG = true if ENV['debug'] == 'true' verbose($DEBUG) def release_version - '4.1' + '4.2' end def version @@ -83,7 +83,7 @@ CrazyFun::Mappings::RakeMappings.new.add_all(crazy_fun) # FIXME: the rules for the targets were removed and build files won't load # crazy_fun.create_tasks(Dir['**/build.desc']) -#  If it looks like a bazel target, build it with bazel +# If it looks like a bazel target, build it with bazel rule /\/\/.*/ do |task| task.out = Bazel.execute('build', %w[--workspace_status_command scripts/build-info.py], task.name) end @@ -96,15 +96,13 @@ task '//java/test/org/openqa/selenium/environment/webserver:webserver:uber' => [ # Java targets required for release. These should all be java_export targets. # Generated from: bazel query 'kind(maven_publish, set(//java/... //third_party/...))' | sort JAVA_RELEASE_TARGETS = %w[ - //java/src/com/thoughtworks/selenium/webdriven:webdriven.publish //java/src/org/openqa/selenium/chrome:chrome.publish //java/src/org/openqa/selenium/chromium:chromium.publish //java/src/org/openqa/selenium/devtools/v85:v85.publish - //java/src/org/openqa/selenium/devtools/v94:v94.publish - //java/src/org/openqa/selenium/devtools/v95:v95.publish - //java/src/org/openqa/selenium/devtools/v96:v96.publish + //java/src/org/openqa/selenium/devtools/v100:v100.publish + //java/src/org/openqa/selenium/devtools/v101:v101.publish + //java/src/org/openqa/selenium/devtools/v102:v102.publish //java/src/org/openqa/selenium/edge:edge.publish - //java/src/org/openqa/selenium/firefox/xpi:xpi.publish //java/src/org/openqa/selenium/firefox:firefox.publish //java/src/org/openqa/selenium/grid/sessionmap/jdbc:jdbc.publish //java/src/org/openqa/selenium/grid/sessionmap/redis:redis.publish @@ -262,8 +260,7 @@ task test_rb_remote: [ '//rb:remote-firefox-test', ('//rb:remote-firefox-nightly-test' if ENV['FIREFOX_NIGHTLY_BINARY']), ('//rb:remote-safari-test' if SeleniumRake::Checks.mac?), - # BUG - https://github.com/SeleniumHQ/selenium/issues/6791 - # ('//rb:remote-safari-preview-test' if SeleniumRake::Checks.mac?), + ('//rb:remote-safari-preview-test' if SeleniumRake::Checks.mac?), ('//rb:remote-ie-test' if SeleniumRake::Checks.windows?), ('//rb:remote-edge-test' unless SeleniumRake::Checks.linux?) ].compact @@ -363,10 +360,12 @@ task 'prep-release-zip': [ '//java/src/org/openqa/selenium:client-zip', '//java/src/org/openqa/selenium/grid:server-zip', '//java/src/org/openqa/selenium/grid:executable-grid', - '//java/src/org/openqa/selenium/server/htmlrunner:selenium-runner_deploy.jar' ] do - ["build/dist/selenium-server-#{version}.zip", "build/dist/selenium-java-#{version}.zip", - "build/dist/selenium-server-#{version}.jar", "build/dist/selenium-html-runner-#{version}.jar"].each do |f| + [ + "build/dist/selenium-server-#{version}.zip", + "build/dist/selenium-java-#{version}.zip", + "build/dist/selenium-server-#{version}.jar" + ].each do |f| rm_f(f) if File.exists?(f) end @@ -378,8 +377,6 @@ task 'prep-release-zip': [ chmod 0666, "build/dist/selenium-java-#{version}.zip" cp Rake::Task['//java/src/org/openqa/selenium/grid:executable-grid'].out, "build/dist/selenium-server-#{version}.jar", preserve: false chmod 0666, "build/dist/selenium-server-#{version}.jar" - cp Rake::Task['//java/src/org/openqa/selenium/server/htmlrunner:selenium-runner_deploy.jar'].out, "build/dist/selenium-html-runner-#{version}.jar", preserve: false - chmod 0666, "build/dist/selenium-html-runner-#{version}.jar" end task 'release-java': %i[prep-release-zip publish-maven] @@ -404,7 +401,7 @@ def read_user_pass_from_m2_settings return [user, pass] end -task 'publish-maven': JAVA_RELEASE_TARGETS + %w[//java/src/org/openqa/selenium/server/htmlrunner:selenium-runner_deploy.jar] do +task 'publish-maven': JAVA_RELEASE_TARGETS do creds = read_user_pass_from_m2_settings JAVA_RELEASE_TARGETS.each do |p| Bazel::execute('run', ['--stamp', '--define', 'maven_repo=https://oss.sonatype.org/service/local/staging/deploy/maven2', '--define', "maven_user=#{creds[0]}", '--define', "maven_password=#{creds[1]}", '--define', 'gpg_sign=true'], p) @@ -413,7 +410,7 @@ end task :'maven-install' do JAVA_RELEASE_TARGETS.each do |p| - Bazel::execute('run', ['--stamp', '--define', "maven_repo=file://#{ENV['HOME']}/.m2/repository", '--define', 'gpg_sign=true'], p) + Bazel::execute('run', ['--stamp', '--define', "maven_repo=file://#{ENV['HOME']}/.m2/repository", '--define', 'gpg_sign=false'], p) end end diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 66ebd501ab61c..0000000000000 --- a/SECURITY.md +++ /dev/null @@ -1,17 +0,0 @@ -# Security Policy - -## Reporting a Vulnerability - -If you have found a security vulnerability in Selenium, or a dependency we use, please come speak to -us on [Slack](https://selenium.dev/support). - -Please join the `#selenium-tlc` channel and say that you believe you have found a security issue. -One of the [Selenium TLC members](https://www.selenium.dev/project/structure/#tlc) -will send you a direct message to understand the problem. Once the problem is understood a newly -created private channel will be created by the TLC Member and you will be invited to explain the -problem further with the rest of the TLC members. - -Please provide a [concise reproducible test case](http://sscce.org/) and describe what results you -are seeing and what results you expect. - -See [CONTRIBUTING.md](https://github.com/SeleniumHQ/selenium/blob/trunk/CONTRIBUTING.md#issue-contributions) diff --git a/WORKSPACE b/WORKSPACE index eaae5b8e151b3..dcc141263dfd7 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -6,6 +6,16 @@ workspace( }, ) +load("//common/private:env.bzl", "env") +env( + name = "python_version", + env_var=["PYTHON_VERSION"] +) +load("@python_version//:defs.bzl", "PYTHON_VERSION") + + +register_toolchains(":py_toolchain") + load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( @@ -50,18 +60,33 @@ bazel_skylib_workspace() http_archive( name = "rules_python", - url = "https://github.com/bazelbuild/rules_python/releases/download/0.5.0/rules_python-0.5.0.tar.gz", - sha256 = "cd6730ed53a002c56ce4e2f396ba3b3be262fd7cb68339f0377a45e8227fe332", + sha256 = "cdf6b84084aad8f10bf20b46b77cb48d83c319ebe6458a18e9d2cebf57807cdd", + strip_prefix = "rules_python-0.8.1", + url = "https://github.com/bazelbuild/rules_python/archive/refs/tags/0.8.1.tar.gz", +) + +load("@rules_python//python:repositories.bzl", "python_register_toolchains") + +python_register_toolchains( + name = "python_toolchain", + python_version = PYTHON_VERSION, ) +load("@python_toolchain//:defs.bzl", "interpreter") + # This one is only needed if you're using the packaging rules. -load("@rules_python//python:pip.bzl", "pip_install") +load("@rules_python//python:pip.bzl", "pip_parse") -pip_install( - name = "dev_requirements", - requirements = "//py:requirements.txt", +pip_parse( + name = "py_dev_requirements", + requirements_lock = "//py:requirements_lock.txt", + python_interpreter_target = interpreter, ) +load("@py_dev_requirements//:requirements.bzl", "install_deps") + +install_deps() + http_archive( name = "rules_proto", sha256 = "9fc210a34f0f9e7cc31598d109b5d069ef44911a82f507d5a88716db171615a8", @@ -78,6 +103,10 @@ rules_proto_dependencies() rules_proto_toolchains() +RULES_JVM_EXTERNAL_TAG = "4.2" + +RULES_JVM_EXTERNAL_SHA = "cd1a77b7b02e8e008439ca76fd34f5b07aecb8c752961f9640dea15e9e5ba1ca" + http_archive( name = "rules_jvm_external", patch_args = [ @@ -87,9 +116,9 @@ http_archive( "//java:rules_jvm_external_javadoc.patch", "//java:rules_jvm_external_visibility.patch", ], - sha256 = "f36441aa876c4f6427bfb2d1f2d723b48e9d930b62662bf723ddfb8fc80f0140", - strip_prefix = "rules_jvm_external-4.1", - url = "https://github.com/bazelbuild/rules_jvm_external/archive/4.1.zip", + sha256 = RULES_JVM_EXTERNAL_SHA, + strip_prefix = "rules_jvm_external-%s" % RULES_JVM_EXTERNAL_TAG, + url = "https://github.com/bazelbuild/rules_jvm_external/archive/%s.zip" % RULES_JVM_EXTERNAL_TAG, ) load("@rules_jvm_external//:repositories.bzl", "rules_jvm_external_deps") @@ -123,18 +152,17 @@ selenium_register_dotnet() http_archive( name = "build_bazel_rules_nodejs", - sha256 = "f7037c8e295fdc921f714962aee7c496110052511e2b14076bd8e2d46bc9819c", - urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/4.4.5/rules_nodejs-4.4.5.tar.gz"], + sha256 = "0fad45a9bda7dc1990c47b002fd64f55041ea751fafc00cd34efb96107675778", + urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/5.5.0/rules_nodejs-5.5.0.tar.gz"], ) +load("@build_bazel_rules_nodejs//:repositories.bzl", "build_bazel_rules_nodejs_dependencies") + +build_bazel_rules_nodejs_dependencies() load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories", "npm_install") node_repositories( - node_version = "16.4.1", - package_json = [ - "//:package.json", - "//javascript/grid-ui:package.json", - ], + node_version = "16.4.2", ) npm_install( @@ -145,6 +173,12 @@ npm_install( 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 = [ @@ -160,10 +194,10 @@ rules_closure_toolchains() http_archive( name = "rules_pkg", - sha256 = "a89e203d3cf264e564fcb96b6e06dd70bc0557356eb48400ce4b5d97c2c3720d", + sha256 = "62eeb544ff1ef41d786e329e1536c1d541bb9bcad27ae984d57f18f314018e66", urls = [ - "https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/releases/download/0.5.1/rules_pkg-0.5.1.tar.gz", - "https://github.com/bazelbuild/rules_pkg/releases/download/0.5.1/rules_pkg-0.5.1.tar.gz", + "https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/releases/download/0.6.0/rules_pkg-0.6.0.tar.gz", + "https://github.com/bazelbuild/rules_pkg/releases/download/0.6.0/rules_pkg-0.6.0.tar.gz", ], ) @@ -271,6 +305,7 @@ load( ) rules_ruby_dependencies() + rules_ruby_select_sdk(version = "host") load("@bazelruby_rules_ruby//ruby:defs.bzl", "ruby_bundle") diff --git a/common/browsers.bzl b/common/browsers.bzl index e5e3714e7cc75..ab102ccb3afdb 100644 --- a/common/browsers.bzl +++ b/common/browsers.bzl @@ -18,7 +18,7 @@ chrome_data = select({ }) edge_data = select({ - "@selenium//common:use_pinned_macos_chrome": [ + "@selenium//common:use_pinned_macos_edge": [ "@mac_edgedriver//:msedgedriver", "@mac_edge//:Edge.app", ], diff --git a/common/devtools/chromium/v94/BUILD.bazel b/common/devtools/chromium/v100/BUILD.bazel similarity index 100% rename from common/devtools/chromium/v94/BUILD.bazel rename to common/devtools/chromium/v100/BUILD.bazel diff --git a/common/devtools/chromium/v95/browser_protocol.pdl b/common/devtools/chromium/v100/browser_protocol.pdl similarity index 95% rename from common/devtools/chromium/v95/browser_protocol.pdl rename to common/devtools/chromium/v100/browser_protocol.pdl index db55293a58010..b73927ff89c84 100644 --- a/common/devtools/chromium/v95/browser_protocol.pdl +++ b/common/devtools/chromium/v100/browser_protocol.pdl @@ -48,6 +48,7 @@ experimental domain Accessibility # Enum of possible native property sources (as a subtype of a particular AXValueSourceType). type AXValueNativeSourceType extends string enum + description figcaption label labelfor @@ -175,10 +176,14 @@ experimental domain Accessibility optional AXValue value # All other properties optional array of AXProperty properties + # ID for this node's parent. + optional AXNodeId parentId # IDs for each of this node's child nodes. optional array of AXNodeId childIds # The backend ID for the associated DOM node, if any. optional DOM.BackendNodeId backendDOMNodeId + # The frame ID for the frame associated with this nodes document. + optional Page.FrameId frameId # Disables the accessibility domain. command disable @@ -217,6 +222,29 @@ experimental domain Accessibility returns array of AXNode nodes + # Fetches the root node. + # Requires `enable()` to have been called previously. + experimental command getRootAXNode + parameters + # The frame in whose document the node resides. + # If omitted, the root frame is used. + optional Page.FrameId frameId + returns + AXNode node + + # Fetches a node and all ancestors up to and including the root. + # Requires `enable()` to have been called previously. + experimental command getAXNodeAndAncestors + parameters + # Identifier of the node to get. + optional DOM.NodeId nodeId + # Identifier of the backend node to get. + optional DOM.BackendNodeId backendNodeId + # JavaScript object id of the node wrapper to get. + optional Runtime.RemoteObjectId objectId + returns + array of AXNode nodes + # Fetches a particular accessibility node by AXNodeId. # Requires `enable()` to have been called previously. experimental command getChildAXNodes @@ -250,6 +278,19 @@ experimental domain Accessibility # including nodes that are ignored for accessibility. array of AXNode nodes + # The loadComplete event mirrors the load complete event sent by the browser to assistive + # technology when the web page has finished loading. + experimental event loadComplete + parameters + # New document root node. + AXNode root + + # The nodesUpdated event is sent every time a previously requested node has changed the in tree. + experimental event nodesUpdated + parameters + # Updated node data. + array of AXNode nodes + experimental domain Animation depends on Runtime depends on DOM @@ -408,85 +449,6 @@ experimental domain Animation # Animation that was started. Animation animation -experimental domain ApplicationCache - depends on Page - - # Detailed application cache resource information. - type ApplicationCacheResource extends object - properties - # Resource url. - string url - # Resource size. - integer size - # Resource type. - string type - - # Detailed application cache information. - type ApplicationCache extends object - properties - # Manifest URL. - string manifestURL - # Application cache size. - number size - # Application cache creation time. - number creationTime - # Application cache update time. - number updateTime - # Application cache resources. - array of ApplicationCacheResource resources - - # Frame identifier - manifest URL pair. - type FrameWithManifest extends object - properties - # Frame identifier. - Page.FrameId frameId - # Manifest URL. - string manifestURL - # Application cache status. - integer status - - # Enables application cache domain notifications. - command enable - - # Returns relevant application cache data for the document in given frame. - command getApplicationCacheForFrame - parameters - # Identifier of the frame containing document whose application cache is retrieved. - Page.FrameId frameId - returns - # Relevant application cache data for the document in given frame. - ApplicationCache applicationCache - - # Returns array of frame identifiers with manifest urls for each frame containing a document - # associated with some application cache. - command getFramesWithManifests - returns - # Array of frame identifiers with manifest urls for each frame containing a document - # associated with some application cache. - array of FrameWithManifest frameIds - - # Returns manifest URL for document in the given frame. - command getManifestForFrame - parameters - # Identifier of the frame containing document whose manifest is retrieved. - Page.FrameId frameId - returns - # Manifest URL for document in the given frame. - string manifestURL - - event applicationCacheStatusUpdated - parameters - # Identifier of the frame containing document whose application cache updated status. - Page.FrameId frameId - # Manifest URL. - string manifestURL - # Updated application cache status. - integer status - - event networkStateUpdated - parameters - boolean isNowOnline - # Audits domain allows investigation of page violations and possible improvements. experimental domain Audits depends on Network @@ -564,6 +526,7 @@ experimental domain Audits type MixedContentResourceType extends string enum + AttributionSrc Audio Beacon CSPReport @@ -657,6 +620,7 @@ experimental domain Audits kURLViolation kTrustedTypesSinkViolation kTrustedTypesPolicyViolation + kWasmEvalViolation type SourceCodeLocation extends object properties @@ -740,6 +704,11 @@ experimental domain Audits AttributionUntrustworthyOrigin AttributionTriggerDataTooLarge AttributionEventSourceTriggerDataTooLarge + InvalidAttributionSourceExpiry + InvalidAttributionSourcePriority + InvalidEventSourceTriggerData + InvalidTriggerPriority + InvalidTriggerDedupKey # Details for issues around "Attribution Reporting API" usage. # Explainer: https://github.com/WICG/conversion-measurement-api @@ -768,12 +737,79 @@ experimental domain Audits string url optional SourceCodeLocation location - type WasmCrossOriginModuleSharingIssueDetails extends object + type GenericIssueErrorType extends string + enum + CrossOriginPortalPostMessageError + + # Depending on the concrete errorType, different properties are set. + type GenericIssueDetails extends object properties - string wasmModuleUrl - string sourceOrigin - string targetOrigin - boolean isWarning + # Issues with the same errorType are aggregated in the frontend. + GenericIssueErrorType errorType + optional Page.FrameId frameId + + # This issue tracks information needed to print a deprecation message. + # The formatting is inherited from the old console.log version, see more at: + # https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/frame/deprecation.cc + # TODO(crbug.com/1264960): Re-work format to add i18n support per: + # https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/public/devtools_protocol/README.md + type DeprecationIssueDetails extends object + properties + optional AffectedFrame affectedFrame + SourceCodeLocation sourceCodeLocation + # The content of the deprecation issue (this won't be translated), + # e.g. "window.inefficientLegacyStorageMethod will be removed in M97, + # around January 2022. Please use Web Storage or Indexed Database + # instead. This standard was abandoned in January, 1970. See + # https://www.chromestatus.com/feature/5684870116278272 for more details." + deprecated optional string message + string deprecationType + + type ClientHintIssueReason extends string + enum + # Items in the accept-ch meta tag allow list must be valid origins. + # No special values (e.g. self, none, and *) are permitted. + MetaTagAllowListInvalidOrigin + # Only accept-ch meta tags in the original HTML sent from the server + # are respected. Any injected via javascript (or other means) are ignored. + MetaTagModifiedHTML + + type FederatedAuthRequestIssueDetails extends object + properties + FederatedAuthRequestIssueReason federatedAuthRequestIssueReason + + # Represents the failure reason when a federated authentication reason fails. + # Should be updated alongside RequestIdTokenStatus in + # third_party/blink/public/mojom/devtools/inspector_issue.mojom to include + # all cases except for success. + type FederatedAuthRequestIssueReason extends string + enum + ApprovalDeclined + TooManyRequests + ManifestHttpNotFound + ManifestNoResponse + ManifestInvalidResponse + ClientMetadataHttpNotFound + ClientMetadataNoResponse + ClientMetadataInvalidResponse + ErrorFetchingSignin + InvalidSigninResponse + AccountsHttpNotFound + AccountsNoResponse + AccountsInvalidResponse + IdTokenHttpNotFound + IdTokenNoResponse + IdTokenInvalidResponse + IdTokenInvalidRequest + ErrorIdToken + Canceled + + # This issue tracks client hints related issues. It's used to deprecate old + # features, encourage the use of new ones, and provide general guidance. + type ClientHintIssueDetails extends object + properties + SourceCodeLocation sourceCodeLocation + ClientHintIssueReason clientHintIssueReason # A unique identifier for the type of issue. Each type may use one of the # optional fields in InspectorIssueDetails to convey more specific @@ -792,7 +828,10 @@ experimental domain Audits AttributionReportingIssue QuirksModeIssue NavigatorUserAgentIssue - WasmCrossOriginModuleSharingIssue + GenericIssue + DeprecationIssue + ClientHintIssue + FederatedAuthRequestIssue # 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 @@ -811,7 +850,10 @@ experimental domain Audits optional AttributionReportingIssueDetails attributionReportingIssueDetails optional QuirksModeIssueDetails quirksModeIssueDetails optional NavigatorUserAgentIssueDetails navigatorUserAgentIssueDetails - optional WasmCrossOriginModuleSharingIssueDetails wasmCrossOriginModuleSharingIssue + optional GenericIssueDetails genericIssueDetails + optional DeprecationIssueDetails deprecationIssueDetails + optional ClientHintIssueDetails clientHintIssueDetails + optional FederatedAuthRequestIssueDetails federatedAuthRequestIssueDetails # A unique id for a DevTools inspector issue. Allows other entities (e.g. # exceptions, CDP message, console messages, etc.) to reference an issue. @@ -1345,6 +1387,9 @@ experimental domain CSS # Container query list array (for rules involving container queries). # The array enumerates container queries starting with the innermost one, going outwards. experimental optional array of CSSContainerQuery containerQueries + # @supports CSS at-rule array. + # The array enumerates @supports at-rules starting with the innermost one, going outwards. + experimental optional array of CSSSupports supports # CSS coverage information. type RuleUsage extends object @@ -1481,6 +1526,17 @@ experimental domain CSS # Optional name for the container. optional string name + # CSS Supports at-rule descriptor. + experimental type CSSSupports extends object + properties + # Supports rule text. + string text + # The associated rule header range in the enclosing stylesheet (if + # available). + optional SourceRange range + # Identifier of the stylesheet containing this object (if exists). + optional StyleSheetId styleSheetId + # Information about amount of glyphs that were rendered with given font. type PlatformFontUsage extends object properties @@ -1737,6 +1793,16 @@ experimental domain CSS # The resulting CSS container query rule after modification. CSSContainerQuery containerQuery + # Modifies the expression of a supports at-rule. + experimental command setSupportsText + parameters + StyleSheetId styleSheetId + SourceRange range + string text + returns + # The resulting CSS Supports rule after modification. + CSSSupports supports + # Modifies the rule selector. command setRuleSelector parameters @@ -1955,6 +2021,11 @@ experimental domain Cast parameters string sinkName + # Starts mirroring the desktop to the sink. + command startDesktopMirroring + parameters + string sinkName + # Starts mirroring the tab to the sink. command startTabMirroring parameters @@ -2027,6 +2098,10 @@ domain DOM scrollbar-corner resizer input-list-button + transition + transition-container + transition-old-content + transition-new-content # Shadow root type. type ShadowRootType extends string @@ -2241,6 +2316,13 @@ domain DOM # Enables DOM agent for the given page. command enable + parameters + # Whether to include whitespaces in the children array of returned Nodes. + experimental optional enum includeWhitespace + # Strip whitespaces from child arrays (default). + none + # Return all children including block-level whitespace nodes. + all # Focuses the given element. command focus @@ -2888,6 +2970,23 @@ domain DOMDebugger # Resource URL substring. All XHRs having this substring in the URL will get stopped upon. string url +# EventBreakpoints permits setting breakpoints on particular operations and +# events in targets that run JavaScript but do not have a DOM. +# JavaScript execution will stop on these operations as if there was a regular +# breakpoint set. +experimental domain EventBreakpoints + # Sets breakpoint on particular native event. + command setInstrumentationBreakpoint + parameters + # Instrumentation name to stop on. + string eventName + + # Removes breakpoint on particular native event. + command removeInstrumentationBreakpoint + parameters + # Instrumentation name to stop on. + string eventName + # This domain facilitates obtaining document snapshots with DOM, layout, and style information. experimental domain DOMSnapshot depends on CSS @@ -3385,7 +3484,8 @@ domain Emulation experimental type UserAgentMetadata extends object properties optional array of UserAgentBrandVersion brands - optional string fullVersion + optional array of UserAgentBrandVersion fullVersionList + deprecated optional string fullVersion string platform string platformVersion string architecture @@ -3567,9 +3667,6 @@ domain Emulation # If set this specifies the maximum number of tasks that can be run before virtual is forced # forwards to prevent deadlock. optional integer maxVirtualTimeTaskStarvationCount - # If set the virtual time policy change should be deferred until any frame starts navigating. - # Note any previous deferred policy change is superseded. - optional boolean waitForNavigation # If set, base::Time::Now will be overridden to initially return this value. optional Network.TimeSinceEpoch initialVirtualTime returns @@ -4038,7 +4135,7 @@ domain Input optional integer location # Editing commands to send with the key event (e.g., 'selectAll') (default: []). # These are related to but not equal the command names used in `document.execCommand` and NSStandardKeyBindingResponding. - # See https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/core/editing/commands/editor_command_names.h for valid command names. + # See https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/editing/commands/editor_command_names.h for valid command names. experimental optional array of string commands # This method emulates inserting text that doesn't come from a key press, @@ -4813,8 +4910,9 @@ domain Network string logDescription # Log ID. string logId - # Issuance date. - TimeSinceEpoch timestamp + # Issuance date. Unlike TimeSinceEpoch, this contains the number of + # milliseconds since January 1, 1970, UTC, not the number of seconds. + number timestamp # Hash algorithm. string hashAlgorithm # Signature algorithm. @@ -4895,14 +4993,27 @@ domain Network PreflightInvalidAllowOriginValue PreflightAllowOriginMismatch PreflightInvalidAllowCredentials + # TODO(https://crbug.com/1263483): Remove this once frontend code does + # not reference it anymore. PreflightMissingAllowExternal + # TODO(https://crbug.com/1263483): Remove this once frontend code does + # not reference it anymore. PreflightInvalidAllowExternal + PreflightMissingAllowPrivateNetwork + PreflightInvalidAllowPrivateNetwork InvalidAllowMethodsPreflightResponse InvalidAllowHeadersPreflightResponse MethodDisallowedByPreflightResponse HeaderDisallowedByPreflightResponse RedirectContainsCredentials + # Request was a private network request initiated by a non-secure context. InsecurePrivateNetwork + # Request carried a target IP address space property that did not match + # the target resource's address space. + InvalidPrivateNetworkAccess + # Request was a private network request yet did not carry a target IP + # address space. + UnexpectedPrivateNetworkAccess NoCorsRedirectModeNotFollow type CorsErrorStatus extends object @@ -5097,6 +5208,11 @@ 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 + # True if cookie partition key is opaque. + experimental optional boolean partitionKeyOpaque # Types of reasons why a cookie may not be stored from a response. experimental type SetCookieBlockedReason extends string @@ -5151,6 +5267,9 @@ domain Network # (which is required in order to use "SameParty"); or specified the "SameSite=Strict" # attribute (which is forbidden when using "SameParty"). SamePartyConflictsWithOtherAttributes + # The cookie's name/value pair size exceeded the size limit defined in + # RFC6265bis. + NameValuePairExceedsMaxSize # Types of reasons why a cookie may not be sent with a request. experimental type CookieBlockedReason extends string @@ -5195,6 +5314,9 @@ domain Network SchemefulSameSiteUnspecifiedTreatedAsLax # The cookie had the "SameParty" attribute and the request was made from a cross-party context. SamePartyFromCrossPartyContext + # The cookie's name/value pair size exceeded the size limit defined in + # RFC6265bis. + NameValuePairExceedsMaxSize # A cookie which was not stored from a response with the corresponding reason. experimental type BlockedSetCookieWithReason extends object @@ -5249,6 +5371,10 @@ 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 # Authorization challenge for HTTP status code 401 or 407. experimental type AuthChallenge extends object @@ -5619,6 +5745,10 @@ 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 returns # Always set to true. If an error occurs, the response indicates protocol error. deprecated boolean success @@ -5780,6 +5910,10 @@ domain Network TimeSinceEpoch wallTime # Request initiator. Initiator initiator + # In the case that redirectResponse is populated, this flag indicates whether + # requestWillBeSentExtraInfo and responseReceivedExtraInfo events will be or were emitted + # for the request which was just redirected. + experimental boolean redirectHasExtraInfo # Redirect response data. optional Response redirectResponse # Type of this resource. @@ -5820,6 +5954,9 @@ domain Network ResourceType type # Response data. Response response + # Indicates whether requestWillBeSentExtraInfo and responseReceivedExtraInfo events will be + # or were emitted for this request. + experimental boolean hasExtraInfo # Frame identifier. optional Page.FrameId frameId @@ -5926,6 +6063,8 @@ domain Network Allow BlockFromInsecureToMorePrivate WarnFromInsecureToMorePrivate + PreflightBlock + PreflightWarn experimental type IPAddressSpace extends string enum @@ -6069,6 +6208,7 @@ domain Network SameOriginAllowPopups UnsafeNone SameOriginPlusCoep + SameOriginAllowPopupsPlusCoep experimental type CrossOriginOpenerPolicyStatus extends object properties @@ -6156,6 +6296,19 @@ domain Network parameters ReportingApiReport report + experimental type ReportingApiEndpoint extends object + properties + # The URL of the endpoint to which reports may be delivered. + string url + # Name of the endpoint group. + string groupName + + experimental event reportingApiEndpointsChangedForOrigin + parameters + # Origin of the document(s) which configured the endpoints. + string origin + array of ReportingApiEndpoint endpoints + # An object providing the result of a network resource load. experimental type LoadNetworkResourcePageResult extends object properties @@ -6406,6 +6559,22 @@ experimental domain Overlay # The style of the descendants' borders. optional LineStyle descendantBorder + type IsolatedElementHighlightConfig extends object + properties + # A descriptor for the highlight appearance of an element in isolation mode. + IsolationModeHighlightConfig isolationModeHighlightConfig + # Identifier of the isolated element to highlight. + DOM.NodeId nodeId + + type IsolationModeHighlightConfig extends object + properties + # The fill color of the resizers (default: transparent). + optional DOM.RGBA resizerColor + # The fill color for resizer handles (default: transparent). + optional DOM.RGBA resizerHandleColor + # The fill color for the mask covering non-isolated elements (default: transparent). + optional DOM.RGBA maskColor + type InspectMode extends string enum searchForNode @@ -6597,8 +6766,8 @@ experimental domain Overlay # True for showing scroll bottleneck rects boolean show - # Requests that backend shows hit-test borders on layers - command setShowHitTestBorders + # Deprecated, no longer has any effect. + deprecated command setShowHitTestBorders parameters # True for showing hit-test borders boolean show @@ -6620,6 +6789,12 @@ experimental domain Overlay # hinge data, null means hideHinge optional HingeConfig hingeConfig + # Show elements in isolation mode with overlays. + command setShowIsolatedElements + parameters + # An array of node identifiers and descriptors for the highlight appearance. + array of IsolatedElementHighlightConfig isolatedElementHighlightConfigs + # Fired when the node should be inspected. This happens after call to `setInspectMode` or when # user manually inspects an element. event inspectNodeRequested @@ -6715,7 +6890,6 @@ domain Page ch-device-memory ch-downlink ch-ect - ch-lang ch-prefers-color-scheme ch-rtt ch-ua @@ -6724,12 +6898,16 @@ domain Page ch-ua-platform ch-ua-model ch-ua-mobile + ch-ua-full ch-ua-full-version + ch-ua-full-version-list ch-ua-platform-version ch-ua-reduced + ch-ua-wow64 ch-viewport-height ch-viewport-width ch-width + ch-partitioned-cookies clipboard-read clipboard-write cross-origin-isolated @@ -6747,7 +6925,8 @@ domain Page gyroscope hid idle-detection - interest-cohort + join-ad-interest-group + keyboard-map magnetometer microphone midi @@ -6755,6 +6934,7 @@ domain Page payment picture-in-picture publickey-credentials-get + run-ad-auction screen-wake-lock serial shared-autofill @@ -6774,6 +6954,8 @@ domain Page Header # Declaration in iframe attribute. IframeAttribute + # Inside fenced frame. + InFencedFrameTree experimental type PermissionsPolicyBlockLocator extends object properties @@ -6801,6 +6983,7 @@ domain Page FeatureDisabled TokenDisabled FeatureDisabledForUser + UnknownTrial # Status for an Origin Trial. experimental type OriginTrialStatus extends string @@ -7051,6 +7234,14 @@ domain Page # The pictograph font-family. optional string pictograph + # Font families collection for a script. + experimental type ScriptFontFamilies extends object + properties + # Name of the script which these font families are defined for. + string script + # Generic font families collection for the script. + FontFamilies fontFamilies + # Default font sizes. experimental type FontSizes extends object properties @@ -7234,10 +7425,13 @@ domain Page optional binary primaryIcon # Returns the unique (PWA) app id. + # Only returns values if the feature flag 'WebAppEnableManifestId' is enabled experimental command getAppId returns - # Only returns a value if the feature flag 'WebAppEnableManifestId' is enabled + # App id, either from manifest's id attribute or computed from start_url optional string appId + # Recommendation for manifest's id attribute to match current id computed from start_url + optional string recommendedId # Returns all browser cookies. Depending on the backend support, will return detailed cookie # information in the `cookies` field. @@ -7508,6 +7702,8 @@ domain Page parameters # Specifies font families to set. If a font family is not specified, it won't be changed. FontFamilies fontFamilies + # Specifies font families to set for individual scripts. + optional array of ScriptFontFamilies forScripts # Set default font sizes. experimental command setFontSizes @@ -7604,18 +7800,9 @@ domain Page # Stops sending each frame in the `screencastFrame`. experimental command stopScreencast - # Forces compilation cache to be generated for every subresource script. - # See also: `Page.produceCompilationCache`. - experimental command setProduceCompilationCache - parameters - boolean enabled - # Requests backend to produce compilation cache for the specified scripts. - # Unlike setProduceCompilationCache, this allows client to only produce cache - # for specific scripts. `scripts` are appeneded to the list of scripts - # for which the cache for would produced. Disabling compilation cache with - # `setProduceCompilationCache` would reset all pending cache requests. - # The list may also be reset during page navigation. + # `scripts` are appeneded to the list of scripts for which the cache + # would be produced. The list may be reset during page navigation. # When script with a matching URL is encountered, the cache is optionally # produced upon backend discretion, based on internal heuristics. # See also: `Page.compilationCacheProduced`. @@ -7634,6 +7821,15 @@ domain Page # Clears seeded compilation cache. experimental command clearCompilationCache + # Sets the Secure Payment Confirmation transaction mode. + # https://w3c.github.io/secure-payment-confirmation/#sctn-automation-set-spc-transaction-mode + experimental command setSPCTransactionMode + parameters + enum mode + none + autoaccept + autoreject + # Generates a report for testing. experimental command generateTestReport parameters @@ -7829,7 +8025,7 @@ domain Page # List of not restored reasons for back-forward cache. experimental type BackForwardCacheNotRestoredReason extends string enum - NotMainFrame + NotPrimaryMainFrame BackForwardCacheDisabled RelatedActiveContentsExist HTTPStatusNotOK @@ -7928,6 +8124,7 @@ domain Page InjectedStyleSheet Dummy # Disabled for render frame host reasons + # See content/browser/renderer_host/back_forward_cache_disable.h for explanations. ContentSecurityHandler ContentWebAuthenticationAPI ContentFileChooser @@ -7938,6 +8135,9 @@ domain Page ContentWebUSB ContentMediaSession ContentMediaSessionService + ContentScreenReader + + # See components/back_forward_cache/back_forward_cache_disable.h for explanations. EmbedderPopupBlockerTabHelper EmbedderSafeBrowsingTriggeredPopupBlocker EmbedderSafeBrowsingThreatDetails @@ -7968,6 +8168,15 @@ domain Page # Not restored reason BackForwardCacheNotRestoredReason reason + experimental type BackForwardCacheNotRestoredExplanationTree extends object + properties + # URL of each frame + string url + # Not restored reasons of each frame + array of BackForwardCacheNotRestoredExplanation explanations + # Array of children frame + array of BackForwardCacheNotRestoredExplanationTree children + # Fired for failed bfcache history navigations if BackForwardCache feature is enabled. Do # not assume any ordering with the Page.frameNavigated event. This event is fired only for # main-frame history navigation where the document changes (non-same-document navigations), @@ -7980,6 +8189,8 @@ domain Page FrameId frameId # Array of reasons why the page could not be cached. This must not be empty. array of BackForwardCacheNotRestoredExplanation notRestoredExplanations + # Tree structure of reasons why the page could not be cached for each frame. + optional BackForwardCacheNotRestoredExplanationTree notRestoredExplanationsTree event loadEventFired parameters @@ -8322,20 +8533,20 @@ domain Security # Security state information about the page. VisibleSecurityState visibleSecurityState - # The security state of the page changed. - event securityStateChanged + # The security state of the page changed. No longer being sent. + deprecated event securityStateChanged parameters # Security state. SecurityState securityState # True if the page was loaded over cryptographic transport such as HTTPS. deprecated boolean schemeIsCryptographic - # List of explanations for the security state. If the overall security state is `insecure` or - # `warning`, at least one corresponding explanation should be included. - array of SecurityStateExplanation explanations + # Previously a list of explanations for the security state. Now always + # empty. + deprecated array of SecurityStateExplanation explanations # Information about insecure content on the page. deprecated InsecureContentStatus insecureContentStatus - # Overrides user-visible description of the state. - optional string summary + # Overrides user-visible description of the state. Always omitted. + deprecated optional string summary experimental domain ServiceWorker depends on Target @@ -8472,6 +8683,7 @@ experimental domain Storage websql service_workers cache_storage + interest_groups all other @@ -8490,6 +8702,37 @@ experimental domain Storage string issuerOrigin number count + # Enum of interest group access types. + type InterestGroupAccessType extends string + enum + join + leave + update + bid + win + + # Ad advertising element inside an interest group. + type InterestGroupAd extends object + properties + string renderUrl + optional string metadata + + # The full details of an interest group. + type InterestGroupDetails extends object + properties + string ownerOrigin + string name + Network.TimeSinceEpoch expirationTime + string joiningOrigin + optional string biddingUrl + optional string biddingWasmHelperUrl + optional string updateUrl + optional string trustedBiddingSignalsUrl + array of string trustedBiddingSignalsKeys + optional string userBiddingSignals + array of InterestGroupAd ads + array of InterestGroupAd adComponents + # Clears storage for origin. command clearDataForOrigin parameters @@ -8589,6 +8832,19 @@ experimental domain Storage # True if any tokens were deleted, false otherwise. boolean didDeleteTokens + # Gets details for a named interest group. + experimental command getInterestGroupDetails + parameters + string ownerOrigin + string name + returns + InterestGroupDetails details + + # Enables/Disables issuing of interestGroupAccessed events. + experimental command setInterestGroupTracking + parameters + boolean enable + # A cache's contents have been modified. event cacheStorageContentUpdated parameters @@ -8619,6 +8875,14 @@ experimental domain Storage # Origin to update. string origin + # One of the interest groups was accessed by the associated page. + event interestGroupAccessed + parameters + Network.TimeSinceEpoch accessTime + InterestGroupAccessType type + string ownerOrigin + string name + # The SystemInfo domain defines methods and events for querying low-level system information. experimental domain SystemInfo @@ -8836,6 +9100,9 @@ domain Target optional string proxyServer # Proxy bypass list, similar to the one passed to --proxy-bypass-list optional string proxyBypassList + # An optional list of origins to grant unlimited cross-origin access to. + # Parts of the URL other than those constituting origin are ignored. + optional array of string originsWithUniversalNetworkAccess returns # The id of the context created. @@ -8857,7 +9124,7 @@ domain Target # Frame height in DIP (headless chrome only). optional integer height # The browser context to create the page in. - optional Browser.BrowserContextID browserContextId + experimental optional Browser.BrowserContextID browserContextId # Whether BeginFrames for this target will be controlled via DevTools (headless chrome only, # not supported on MacOS yet, false by default). experimental optional boolean enableBeginFrameControl @@ -9649,6 +9916,10 @@ experimental domain WebAuthn # https://fidoalliance.org/specs/fido-v2.1-rd-20201208/fido-client-to-authenticator-protocol-v2.1-rd-20201208.html#sctn-credBlob-extension # Defaults to false. optional boolean hasCredBlob + # If set to true, the authenticator will support the minPinLength extension. + # https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#sctn-minpinlength-extension + # Defaults to false. + optional boolean hasMinPinLength # If set to true, tests of user presence will succeed immediately. # Otherwise, they will not be resolved. Defaults to true. optional boolean automaticPresenceSimulation diff --git a/common/devtools/chromium/v95/js_protocol.pdl b/common/devtools/chromium/v100/js_protocol.pdl similarity index 98% rename from common/devtools/chromium/v95/js_protocol.pdl rename to common/devtools/chromium/v100/js_protocol.pdl index b34c8551ad64b..09c420e3a6361 100644 --- a/common/devtools/chromium/v95/js_protocol.pdl +++ b/common/devtools/chromium/v100/js_protocol.pdl @@ -104,7 +104,9 @@ domain Debugger # Location in the source code. Location location # JavaScript script name or url. - string url + # Deprecated in favor of using the `location.scriptId` to resolve the URL via a previously + # sent `Debugger.scriptParsed` event. + deprecated string url # Scope chain for this call frame. array of Scope scopeChain # `this` object for this call frame. @@ -1550,6 +1552,18 @@ domain Runtime parameters string name + # This method tries to lookup and populate exception details for a + # JavaScript Error object. + # Note that the stackTrace portion of the resulting exceptionDetails will + # only be populated if the Runtime domain was enabled at the time when the + # Error was thrown. + experimental command getExceptionDetails + parameters + # The error object for which to resolve the exception details. + RemoteObjectId errorObjectId + returns + optional ExceptionDetails exceptionDetails + # Notification is issued every time when binding is called. experimental event bindingCalled parameters diff --git a/common/devtools/chromium/v95/BUILD.bazel b/common/devtools/chromium/v101/BUILD.bazel similarity index 100% rename from common/devtools/chromium/v95/BUILD.bazel rename to common/devtools/chromium/v101/BUILD.bazel diff --git a/common/devtools/chromium/v94/browser_protocol.pdl b/common/devtools/chromium/v101/browser_protocol.pdl similarity index 93% rename from common/devtools/chromium/v94/browser_protocol.pdl rename to common/devtools/chromium/v101/browser_protocol.pdl index c5c5726a4bc0c..8abe2c75451dd 100644 --- a/common/devtools/chromium/v94/browser_protocol.pdl +++ b/common/devtools/chromium/v101/browser_protocol.pdl @@ -48,6 +48,7 @@ experimental domain Accessibility # Enum of possible native property sources (as a subtype of a particular AXValueSourceType). type AXValueNativeSourceType extends string enum + description figcaption label labelfor @@ -175,10 +176,14 @@ experimental domain Accessibility optional AXValue value # All other properties optional array of AXProperty properties + # ID for this node's parent. + optional AXNodeId parentId # IDs for each of this node's child nodes. optional array of AXNodeId childIds # The backend ID for the associated DOM node, if any. optional DOM.BackendNodeId backendDOMNodeId + # The frame ID for the frame associated with this nodes document. + optional Page.FrameId frameId # Disables the accessibility domain. command disable @@ -208,13 +213,36 @@ experimental domain Accessibility parameters # The maximum depth at which descendants of the root node should be retrieved. # If omitted, the full tree is returned. - optional integer max_depth + optional integer depth # The frame for whose document the AX tree should be retrieved. # If omited, the root frame is used. optional Page.FrameId frameId returns array of AXNode nodes + # Fetches the root node. + # Requires `enable()` to have been called previously. + experimental command getRootAXNode + parameters + # The frame in whose document the node resides. + # If omitted, the root frame is used. + optional Page.FrameId frameId + returns + AXNode node + + # Fetches a node and all ancestors up to and including the root. + # Requires `enable()` to have been called previously. + experimental command getAXNodeAndAncestors + parameters + # Identifier of the node to get. + optional DOM.NodeId nodeId + # Identifier of the backend node to get. + optional DOM.BackendNodeId backendNodeId + # JavaScript object id of the node wrapper to get. + optional Runtime.RemoteObjectId objectId + returns + array of AXNode nodes + # Fetches a particular accessibility node by AXNodeId. # Requires `enable()` to have been called previously. experimental command getChildAXNodes @@ -248,6 +276,19 @@ experimental domain Accessibility # including nodes that are ignored for accessibility. array of AXNode nodes + # The loadComplete event mirrors the load complete event sent by the browser to assistive + # technology when the web page has finished loading. + experimental event loadComplete + parameters + # New document root node. + AXNode root + + # The nodesUpdated event is sent every time a previously requested node has changed the in tree. + experimental event nodesUpdated + parameters + # Updated node data. + array of AXNode nodes + experimental domain Animation depends on Runtime depends on DOM @@ -406,85 +447,6 @@ experimental domain Animation # Animation that was started. Animation animation -experimental domain ApplicationCache - depends on Page - - # Detailed application cache resource information. - type ApplicationCacheResource extends object - properties - # Resource url. - string url - # Resource size. - integer size - # Resource type. - string type - - # Detailed application cache information. - type ApplicationCache extends object - properties - # Manifest URL. - string manifestURL - # Application cache size. - number size - # Application cache creation time. - number creationTime - # Application cache update time. - number updateTime - # Application cache resources. - array of ApplicationCacheResource resources - - # Frame identifier - manifest URL pair. - type FrameWithManifest extends object - properties - # Frame identifier. - Page.FrameId frameId - # Manifest URL. - string manifestURL - # Application cache status. - integer status - - # Enables application cache domain notifications. - command enable - - # Returns relevant application cache data for the document in given frame. - command getApplicationCacheForFrame - parameters - # Identifier of the frame containing document whose application cache is retrieved. - Page.FrameId frameId - returns - # Relevant application cache data for the document in given frame. - ApplicationCache applicationCache - - # Returns array of frame identifiers with manifest urls for each frame containing a document - # associated with some application cache. - command getFramesWithManifests - returns - # Array of frame identifiers with manifest urls for each frame containing a document - # associated with some application cache. - array of FrameWithManifest frameIds - - # Returns manifest URL for document in the given frame. - command getManifestForFrame - parameters - # Identifier of the frame containing document whose manifest is retrieved. - Page.FrameId frameId - returns - # Manifest URL for document in the given frame. - string manifestURL - - event applicationCacheStatusUpdated - parameters - # Identifier of the frame containing document whose application cache updated status. - Page.FrameId frameId - # Manifest URL. - string manifestURL - # Updated application cache status. - integer status - - event networkStateUpdated - parameters - boolean isNowOnline - # Audits domain allows investigation of page violations and possible improvements. experimental domain Audits depends on Network @@ -509,7 +471,7 @@ experimental domain Audits properties Page.FrameId frameId - type SameSiteCookieExclusionReason extends string + type CookieExclusionReason extends string enum ExcludeSameSiteUnspecifiedTreatedAsLax ExcludeSameSiteNoneInsecure @@ -518,7 +480,7 @@ experimental domain Audits ExcludeInvalidSameParty ExcludeSamePartyCrossPartyContext - type SameSiteCookieWarningReason extends string + type CookieWarningReason extends string enum WarnSameSiteUnspecifiedCrossSiteContext WarnSameSiteNoneInsecure @@ -528,8 +490,9 @@ experimental domain Audits WarnSameSiteStrictCrossDowngradeLax WarnSameSiteLaxCrossDowngradeStrict WarnSameSiteLaxCrossDowngradeLax + WarnAttributeValueExceedsMaxSize - type SameSiteCookieOperation extends string + type CookieOperation extends string enum SetCookie ReadCookie @@ -537,7 +500,7 @@ experimental domain Audits # This information is currently necessary, as the front-end has a difficult # time finding a specific cookie. With this, we can convey specific error # information without the cookie. - type SameSiteCookieIssueDetails extends object + type CookieIssueDetails extends object properties # If AffectedCookie is not set then rawCookieLine contains the raw # Set-Cookie header string. This hints at a problem where the @@ -545,11 +508,11 @@ experimental domain Audits # that no valid cookie could be created. optional AffectedCookie cookie optional string rawCookieLine - array of SameSiteCookieWarningReason cookieWarningReasons - array of SameSiteCookieExclusionReason cookieExclusionReasons + array of CookieWarningReason cookieWarningReasons + array of CookieExclusionReason cookieExclusionReasons # Optionally identifies the site-for-cookies and the cookie url, which # may be used by the front-end as additional context. - SameSiteCookieOperation operation + CookieOperation operation optional string siteForCookies optional string cookieUrl optional AffectedRequest request @@ -562,6 +525,7 @@ experimental domain Audits type MixedContentResourceType extends string enum + AttributionSrc Audio Beacon CSPReport @@ -655,6 +619,7 @@ experimental domain Audits kURLViolation kTrustedTypesSinkViolation kTrustedTypesPolicyViolation + kWasmEvalViolation type SourceCodeLocation extends object properties @@ -736,6 +701,13 @@ experimental domain Audits InvalidAttributionData AttributionSourceUntrustworthyOrigin AttributionUntrustworthyOrigin + AttributionTriggerDataTooLarge + AttributionEventSourceTriggerDataTooLarge + InvalidAttributionSourceExpiry + InvalidAttributionSourcePriority + InvalidEventSourceTriggerData + InvalidTriggerPriority + InvalidTriggerDedupKey # Details for issues around "Attribution Reporting API" usage. # Explainer: https://github.com/WICG/conversion-measurement-api @@ -764,19 +736,89 @@ experimental domain Audits string url optional SourceCodeLocation location - type WasmCrossOriginModuleSharingIssueDetails extends object + type GenericIssueErrorType extends string + enum + CrossOriginPortalPostMessageError + + # Depending on the concrete errorType, different properties are set. + type GenericIssueDetails extends object properties - string wasmModuleUrl - string sourceOrigin - string targetOrigin - boolean isWarning + # Issues with the same errorType are aggregated in the frontend. + GenericIssueErrorType errorType + optional Page.FrameId frameId + + # This issue tracks information needed to print a deprecation message. + # The formatting is inherited from the old console.log version, see more at: + # https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/frame/deprecation.cc + # TODO(crbug.com/1264960): Re-work format to add i18n support per: + # https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/public/devtools_protocol/README.md + type DeprecationIssueDetails extends object + properties + optional AffectedFrame affectedFrame + SourceCodeLocation sourceCodeLocation + # The content of an untranslated deprecation issue, + # e.g. "window.inefficientLegacyStorageMethod will be removed in M97, + # around January 2022. Please use Web Storage or Indexed Database + # instead. This standard was abandoned in January, 1970. See + # https://www.chromestatus.com/feature/5684870116278272 for more details." + deprecated optional string message + # The id of an untranslated deprecation issue e.g. PrefixedStorageInfo. + deprecated string deprecationType + + type ClientHintIssueReason extends string + enum + # Items in the accept-ch meta tag allow list must be valid origins. + # No special values (e.g. self, none, and *) are permitted. + MetaTagAllowListInvalidOrigin + # Only accept-ch meta tags in the original HTML sent from the server + # are respected. Any injected via javascript (or other means) are ignored. + MetaTagModifiedHTML + + type FederatedAuthRequestIssueDetails extends object + properties + FederatedAuthRequestIssueReason federatedAuthRequestIssueReason + + # Represents the failure reason when a federated authentication reason fails. + # Should be updated alongside RequestIdTokenStatus in + # third_party/blink/public/mojom/devtools/inspector_issue.mojom to include + # all cases except for success. + type FederatedAuthRequestIssueReason extends string + enum + ApprovalDeclined + TooManyRequests + ManifestHttpNotFound + ManifestNoResponse + ManifestInvalidResponse + ClientMetadataHttpNotFound + ClientMetadataNoResponse + ClientMetadataInvalidResponse + ClientMetadataMissingPrivacyPolicyUrl + DisabledInSettings + ErrorFetchingSignin + InvalidSigninResponse + AccountsHttpNotFound + AccountsNoResponse + AccountsInvalidResponse + IdTokenHttpNotFound + IdTokenNoResponse + IdTokenInvalidResponse + IdTokenInvalidRequest + ErrorIdToken + Canceled + + # This issue tracks client hints related issues. It's used to deprecate old + # features, encourage the use of new ones, and provide general guidance. + type ClientHintIssueDetails extends object + properties + SourceCodeLocation sourceCodeLocation + ClientHintIssueReason clientHintIssueReason # A unique identifier for the type of issue. Each type may use one of the # optional fields in InspectorIssueDetails to convey more specific # information about the kind of issue. type InspectorIssueCode extends string enum - SameSiteCookieIssue + CookieIssue MixedContentIssue BlockedByResponseIssue HeavyAdIssue @@ -788,14 +830,17 @@ experimental domain Audits AttributionReportingIssue QuirksModeIssue NavigatorUserAgentIssue - WasmCrossOriginModuleSharingIssue + GenericIssue + DeprecationIssue + ClientHintIssue + FederatedAuthRequestIssue # 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 # add a new optional field to this type. type InspectorIssueDetails extends object properties - optional SameSiteCookieIssueDetails sameSiteCookieIssueDetails + optional CookieIssueDetails cookieIssueDetails optional MixedContentIssueDetails mixedContentIssueDetails optional BlockedByResponseIssueDetails blockedByResponseIssueDetails optional HeavyAdIssueDetails heavyAdIssueDetails @@ -807,7 +852,10 @@ experimental domain Audits optional AttributionReportingIssueDetails attributionReportingIssueDetails optional QuirksModeIssueDetails quirksModeIssueDetails optional NavigatorUserAgentIssueDetails navigatorUserAgentIssueDetails - optional WasmCrossOriginModuleSharingIssueDetails wasmCrossOriginModuleSharingIssue + optional GenericIssueDetails genericIssueDetails + optional DeprecationIssueDetails deprecationIssueDetails + optional ClientHintIssueDetails clientHintIssueDetails + optional FederatedAuthRequestIssueDetails federatedAuthRequestIssueDetails # A unique id for a DevTools inspector issue. Allows other entities (e.g. # exceptions, CDP message, console messages, etc.) to reference an issue. @@ -1254,6 +1302,12 @@ experimental domain CSS # Matches of CSS rules matching the ancestor node in the style inheritance chain. array of RuleMatch matchedCSSRules + # Inherited pseudo element matches from pseudos of an ancestor node. + type InheritedPseudoElementMatches extends object + properties + # Matches of pseudo styles from the pseudos of an ancestor node. + array of PseudoElementMatches pseudoElements + # Match data for a CSS rule. type RuleMatch extends object properties @@ -1341,6 +1395,12 @@ experimental domain CSS # Container query list array (for rules involving container queries). # The array enumerates container queries starting with the innermost one, going outwards. experimental optional array of CSSContainerQuery containerQueries + # @supports CSS at-rule array. + # The array enumerates @supports at-rules starting with the innermost one, going outwards. + experimental optional array of CSSSupports supports + # Cascade layer array. Contains the layer hierarchy that this rule belongs to starting + # with the innermost layer and going outwards. + experimental optional array of CSSLayer layers # CSS coverage information. type RuleUsage extends object @@ -1477,6 +1537,41 @@ experimental domain CSS # Optional name for the container. optional string name + # CSS Supports at-rule descriptor. + experimental type CSSSupports extends object + properties + # Supports rule text. + string text + # Whether the supports condition is satisfied. + boolean active + # The associated rule header range in the enclosing stylesheet (if + # available). + optional SourceRange range + # Identifier of the stylesheet containing this object (if exists). + optional StyleSheetId styleSheetId + + # CSS Layer at-rule descriptor. + experimental type CSSLayer extends object + properties + # Layer name. + string text + # The associated rule header range in the enclosing stylesheet (if + # available). + optional SourceRange range + # Identifier of the stylesheet containing this object (if exists). + optional StyleSheetId styleSheetId + + # CSS Layer data. + experimental type CSSLayerData extends object + properties + # Layer name. + string name + # Direct sub-layers + optional array of CSSLayerData subLayers + # Layer order. The order determines the order of the layer in the cascade order. + # A higher number has higher priority in the cascade order. + number order + # Information about amount of glyphs that were rendered with given font. type PlatformFontUsage extends object properties @@ -1653,6 +1748,8 @@ experimental domain CSS optional array of PseudoElementMatches pseudoElements # A chain of inherited styles (from the immediate node parent up to the DOM tree root). optional array of InheritedStyleEntry inherited + # A chain of inherited pseudo element styles (from the immediate node parent up to the DOM tree root). + optional array of InheritedPseudoElementMatches inheritedPseudoElements # A list of CSS keyframed animations matching this node. optional array of CSSKeyframesRule cssKeyframesRules @@ -1678,6 +1775,16 @@ experimental domain CSS # The stylesheet text. string text + # Returns all layers parsed by the rendering engine for the tree scope of a node. + # Given a DOM element identified by nodeId, getLayersForNode returns the root + # layer for the nearest ancestor document or shadow root. The layer root contains + # the full layer tree for the tree scope and their ordering. + experimental command getLayersForNode + parameters + DOM.NodeId nodeId + returns + CSSLayerData rootLayer + # Starts tracking the given computed styles for updates. The specified array of properties # replaces the one previously specified. Pass empty array to disable tracking. # Use takeComputedStyleUpdates to retrieve the list of nodes that had properties modified. @@ -1733,6 +1840,16 @@ experimental domain CSS # The resulting CSS container query rule after modification. CSSContainerQuery containerQuery + # Modifies the expression of a supports at-rule. + experimental command setSupportsText + parameters + StyleSheetId styleSheetId + SourceRange range + string text + returns + # The resulting CSS Supports rule after modification. + CSSSupports supports + # Modifies the rule selector. command setRuleSelector parameters @@ -1951,6 +2068,11 @@ experimental domain Cast parameters string sinkName + # Starts mirroring the desktop to the sink. + command startDesktopMirroring + parameters + string sinkName + # Starts mirroring the tab to the sink. command startTabMirroring parameters @@ -2023,6 +2145,11 @@ domain DOM scrollbar-corner resizer input-list-button + page-transition + page-transition-container + page-transition-image-wrapper + page-transition-outgoing-image + page-transition-incoming-image # Shadow root type. type ShadowRootType extends string @@ -2237,6 +2364,13 @@ domain DOM # Enables DOM agent for the given page. command enable + parameters + # Whether to include whitespaces in the children array of returned Nodes. + experimental optional enum includeWhitespace + # Strip whitespaces from child arrays (default). + none + # Return all children including block-level whitespace nodes. + all # Focuses the given element. command focus @@ -2884,6 +3018,23 @@ domain DOMDebugger # Resource URL substring. All XHRs having this substring in the URL will get stopped upon. string url +# EventBreakpoints permits setting breakpoints on particular operations and +# events in targets that run JavaScript but do not have a DOM. +# JavaScript execution will stop on these operations as if there was a regular +# breakpoint set. +experimental domain EventBreakpoints + # Sets breakpoint on particular native event. + command setInstrumentationBreakpoint + parameters + # Instrumentation name to stop on. + string eventName + + # Removes breakpoint on particular native event. + command removeInstrumentationBreakpoint + parameters + # Instrumentation name to stop on. + string eventName + # This domain facilitates obtaining document snapshots with DOM, layout, and style information. experimental domain DOMSnapshot depends on CSS @@ -3381,7 +3532,8 @@ domain Emulation experimental type UserAgentMetadata extends object properties optional array of UserAgentBrandVersion brands - optional string fullVersion + optional array of UserAgentBrandVersion fullVersionList + deprecated optional string fullVersion string platform string platformVersion string architecture @@ -3409,6 +3561,13 @@ domain Emulation # Whether to enable to disable focus emulation. boolean enabled + # Automatically render all web contents using a dark theme. + experimental command setAutoDarkModeOverride + parameters + # Whether to enable or disable automatic dark mode. + # If not specified, any existing override will be cleared. + optional boolean enabled + # Enables CPU throttling to emulate slow CPUs. experimental command setCPUThrottlingRate parameters @@ -3556,9 +3715,6 @@ domain Emulation # If set this specifies the maximum number of tasks that can be run before virtual is forced # forwards to prevent deadlock. optional integer maxVirtualTimeTaskStarvationCount - # If set the virtual time policy change should be deferred until any frame starts navigating. - # Note any previous deferred policy change is superseded. - optional boolean waitForNavigation # If set, base::Time::Now will be overridden to initially return this value. optional Network.TimeSinceEpoch initialVirtualTime returns @@ -3616,6 +3772,12 @@ domain Emulation # To be sent in Sec-CH-UA-* headers and returned in navigator.userAgentData experimental optional UserAgentMetadata userAgentMetadata + # Allows overriding the automation flag. + experimental command setAutomationOverride + parameters + # Whether the override should be enabled. + boolean enabled + # This domain provides experimental commands only supported in headless mode. experimental domain HeadlessExperimental depends on Page @@ -4027,7 +4189,7 @@ domain Input optional integer location # Editing commands to send with the key event (e.g., 'selectAll') (default: []). # These are related to but not equal the command names used in `document.execCommand` and NSStandardKeyBindingResponding. - # See https://source.chromium.org/chromium/chromium/src/+/master:third_party/blink/renderer/core/editing/commands/editor_command_names.h for valid command names. + # See https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/editing/commands/editor_command_names.h for valid command names. experimental optional array of string commands # This method emulates inserting text that doesn't come from a key press, @@ -4448,6 +4610,8 @@ domain Log error # Logged text. string text + optional enum category + cors # Timestamp when this entry was added. Runtime.Timestamp timestamp # URL of the resource if known. @@ -4800,8 +4964,9 @@ domain Network string logDescription # Log ID. string logId - # Issuance date. - TimeSinceEpoch timestamp + # Issuance date. Unlike TimeSinceEpoch, this contains the number of + # milliseconds since January 1, 1970, UTC, not the number of seconds. + number timestamp # Hash algorithm. string hashAlgorithm # Signature algorithm. @@ -4882,14 +5047,27 @@ domain Network PreflightInvalidAllowOriginValue PreflightAllowOriginMismatch PreflightInvalidAllowCredentials + # TODO(https://crbug.com/1263483): Remove this once frontend code does + # not reference it anymore. PreflightMissingAllowExternal + # TODO(https://crbug.com/1263483): Remove this once frontend code does + # not reference it anymore. PreflightInvalidAllowExternal + PreflightMissingAllowPrivateNetwork + PreflightInvalidAllowPrivateNetwork InvalidAllowMethodsPreflightResponse InvalidAllowHeadersPreflightResponse MethodDisallowedByPreflightResponse HeaderDisallowedByPreflightResponse RedirectContainsCredentials + # Request was a private network request initiated by a non-secure context. InsecurePrivateNetwork + # Request carried a target IP address space property that did not match + # the target resource's address space. + InvalidPrivateNetworkAccess + # Request was a private network request yet did not carry a target IP + # address space. + UnexpectedPrivateNetworkAccess NoCorsRedirectModeNotFollow type CorsErrorStatus extends object @@ -5084,6 +5262,11 @@ 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 + # True if cookie partition key is opaque. + experimental optional boolean partitionKeyOpaque # Types of reasons why a cookie may not be stored from a response. experimental type SetCookieBlockedReason extends string @@ -5138,6 +5321,9 @@ domain Network # (which is required in order to use "SameParty"); or specified the "SameSite=Strict" # attribute (which is forbidden when using "SameParty"). SamePartyConflictsWithOtherAttributes + # The cookie's name/value pair size exceeded the size limit defined in + # RFC6265bis. + NameValuePairExceedsMaxSize # Types of reasons why a cookie may not be sent with a request. experimental type CookieBlockedReason extends string @@ -5182,6 +5368,9 @@ domain Network SchemefulSameSiteUnspecifiedTreatedAsLax # The cookie had the "SameParty" attribute and the request was made from a cross-party context. SamePartyFromCrossPartyContext + # The cookie's name/value pair size exceeded the size limit defined in + # RFC6265bis. + NameValuePairExceedsMaxSize # A cookie which was not stored from a response with the corresponding reason. experimental type BlockedSetCookieWithReason extends object @@ -5236,6 +5425,10 @@ 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 # Authorization challenge for HTTP status code 401 or 407. experimental type AuthChallenge extends object @@ -5606,6 +5799,10 @@ 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 returns # Always set to true. If an error occurs, the response indicates protocol error. deprecated boolean success @@ -5767,6 +5964,10 @@ domain Network TimeSinceEpoch wallTime # Request initiator. Initiator initiator + # In the case that redirectResponse is populated, this flag indicates whether + # requestWillBeSentExtraInfo and responseReceivedExtraInfo events will be or were emitted + # for the request which was just redirected. + experimental boolean redirectHasExtraInfo # Redirect response data. optional Response redirectResponse # Type of this resource. @@ -5807,6 +6008,9 @@ domain Network ResourceType type # Response data. Response response + # Indicates whether requestWillBeSentExtraInfo and responseReceivedExtraInfo events will be + # or were emitted for this request. + experimental boolean hasExtraInfo # Frame identifier. optional Page.FrameId frameId @@ -5913,6 +6117,8 @@ domain Network Allow BlockFromInsecureToMorePrivate WarnFromInsecureToMorePrivate + PreflightBlock + PreflightWarn experimental type IPAddressSpace extends string enum @@ -5921,6 +6127,13 @@ domain Network Public Unknown + experimental type ConnectTiming extends object + properties + # Timing's requestTime is a baseline in seconds, while the other numbers are ticks in + # milliseconds relatively to this requestTime. Matches ResourceTiming's requestTime for + # the same request (but not for redirected requests). + number requestTime + experimental type ClientSecurityState extends object properties boolean initiatorIsSecureContext @@ -5940,6 +6153,8 @@ domain Network array of BlockedCookieWithReason associatedCookies # Raw request headers as they will be sent over the wire. Headers headers + # Connection timing information for the request. + experimental ConnectTiming connectTiming # The client security state set for the request. optional ClientSecurityState clientSecurityState @@ -6047,6 +6262,7 @@ domain Network SameOriginAllowPopups UnsafeNone SameOriginPlusCoep + SameOriginAllowPopupsPlusCoep experimental type CrossOriginOpenerPolicyStatus extends object properties @@ -6081,6 +6297,72 @@ domain Network returns SecurityIsolationStatus status + # Enables tracking for the Reporting API, events generated by the Reporting API will now be delivered to the client. + # Enabling triggers 'reportingApiReportAdded' for all existing reports. + experimental command enableReportingApi + parameters + # Whether to enable or disable events for the Reporting API + boolean enable + + # The status of a Reporting API report. + experimental type ReportStatus extends string + enum + # Report has been queued and no attempt has been made to deliver it yet, + # or attempted previous upload failed (impermanently). + Queued + # There is an ongoing attempt to upload this report. + Pending + # Deletion of this report was requested while it was pending, so it will + # be removed after possibly outstanding upload attempts complete (successful + # or not). + MarkedForRemoval + # Successfully uploaded and MarkedForRemoval. + Success + + experimental type ReportId extends string + + # An object representing a report generated by the Reporting API. + experimental type ReportingApiReport extends object + properties + ReportId id + # The URL of the document that triggered the report. + string initiatorUrl + # The name of the endpoint group that should be used to deliver the report. + string destination + # The type of the report (specifies the set of data that is contained in the report body). + string type + # When the report was generated. + Network.TimeSinceEpoch timestamp + # How many uploads deep the related request was. + integer depth + # The number of delivery attempts made so far, not including an active attempt. + integer completedAttempts + object body + ReportStatus status + + # Is sent whenever a new report is added. + # And after 'enableReportingApi' for all existing reports. + experimental event reportingApiReportAdded + parameters + ReportingApiReport report + + experimental event reportingApiReportUpdated + parameters + ReportingApiReport report + + experimental type ReportingApiEndpoint extends object + properties + # The URL of the endpoint to which reports may be delivered. + string url + # Name of the endpoint group. + string groupName + + experimental event reportingApiEndpointsChangedForOrigin + parameters + # Origin of the document(s) which configured the endpoints. + string origin + array of ReportingApiEndpoint endpoints + # An object providing the result of a network resource load. experimental type LoadNetworkResourcePageResult extends object properties @@ -6272,6 +6554,7 @@ experimental domain Overlay enum rgb hsl + hwb hex # Configurations for Persistent Grid Highlight @@ -6331,6 +6614,22 @@ experimental domain Overlay # The style of the descendants' borders. optional LineStyle descendantBorder + type IsolatedElementHighlightConfig extends object + properties + # A descriptor for the highlight appearance of an element in isolation mode. + IsolationModeHighlightConfig isolationModeHighlightConfig + # Identifier of the isolated element to highlight. + DOM.NodeId nodeId + + type IsolationModeHighlightConfig extends object + properties + # The fill color of the resizers (default: transparent). + optional DOM.RGBA resizerColor + # The fill color for resizer handles (default: transparent). + optional DOM.RGBA resizerHandleColor + # The fill color for the mask covering non-isolated elements (default: transparent). + optional DOM.RGBA maskColor + type InspectMode extends string enum searchForNode @@ -6522,8 +6821,8 @@ experimental domain Overlay # True for showing scroll bottleneck rects boolean show - # Requests that backend shows hit-test borders on layers - command setShowHitTestBorders + # Deprecated, no longer has any effect. + deprecated command setShowHitTestBorders parameters # True for showing hit-test borders boolean show @@ -6545,6 +6844,12 @@ experimental domain Overlay # hinge data, null means hideHinge optional HingeConfig hingeConfig + # Show elements in isolation mode with overlays. + command setShowIsolatedElements + parameters + # An array of node identifiers and descriptors for the highlight appearance. + array of IsolatedElementHighlightConfig isolatedElementHighlightConfigs + # Fired when the node should be inspected. This happens after call to `setInspectMode` or when # user manually inspects an element. event inspectNodeRequested @@ -6635,12 +6940,12 @@ domain Page ambient-light-sensor attribution-reporting autoplay + browsing-topics camera ch-dpr ch-device-memory ch-downlink ch-ect - ch-lang ch-prefers-color-scheme ch-rtt ch-ua @@ -6649,11 +6954,16 @@ domain Page ch-ua-platform ch-ua-model ch-ua-mobile + ch-ua-full ch-ua-full-version + ch-ua-full-version-list ch-ua-platform-version ch-ua-reduced + ch-ua-wow64 + ch-viewport-height ch-viewport-width ch-width + ch-partitioned-cookies clipboard-read clipboard-write cross-origin-isolated @@ -6672,6 +6982,8 @@ domain Page hid idle-detection interest-cohort + join-ad-interest-group + keyboard-map magnetometer microphone midi @@ -6679,6 +6991,7 @@ domain Page payment picture-in-picture publickey-credentials-get + run-ad-auction screen-wake-lock serial shared-autofill @@ -6698,6 +7011,8 @@ domain Page Header # Declaration in iframe attribute. IframeAttribute + # Inside fenced frame. + InFencedFrameTree experimental type PermissionsPolicyBlockLocator extends object properties @@ -6725,6 +7040,7 @@ domain Page FeatureDisabled TokenDisabled FeatureDisabledForUser + UnknownTrial # Status for an Origin Trial. experimental type OriginTrialStatus extends string @@ -6796,8 +7112,6 @@ domain Page experimental CrossOriginIsolatedContextType crossOriginIsolatedContextType # Indicated which gated APIs / features are available. experimental array of GatedAPIFeatures gatedAPIFeatures - # Frame document's origin trials with at least one token present. - experimental optional array of OriginTrial originTrials # Information about the Resource on the page. experimental type FrameResource extends object @@ -6977,6 +7291,14 @@ domain Page # The pictograph font-family. optional string pictograph + # Font families collection for a script. + experimental type ScriptFontFamilies extends object + properties + # Name of the script which these font families are defined for. + string script + # Generic font families collection for the script. + FontFamilies fontFamilies + # Default font sizes. experimental type FontSizes extends object properties @@ -7159,6 +7481,15 @@ domain Page returns optional binary primaryIcon + # Returns the unique (PWA) app id. + # Only returns values if the feature flag 'WebAppEnableManifestId' is enabled + experimental command getAppId + returns + # App id, either from manifest's id attribute or computed from start_url + optional string appId + # Recommendation for manifest's id attribute to match current id computed from start_url + optional string recommendedId + # Returns all browser cookies. Depending on the backend support, will return detailed cookie # information in the `cookies` field. experimental deprecated command getCookies @@ -7428,6 +7759,8 @@ domain Page parameters # Specifies font families to set. If a font family is not specified, it won't be changed. FontFamilies fontFamilies + # Specifies font families to set for individual scripts. + optional array of ScriptFontFamilies forScripts # Set default font sizes. experimental command setFontSizes @@ -7524,18 +7857,9 @@ domain Page # Stops sending each frame in the `screencastFrame`. experimental command stopScreencast - # Forces compilation cache to be generated for every subresource script. - # See also: `Page.produceCompilationCache`. - experimental command setProduceCompilationCache - parameters - boolean enabled - # Requests backend to produce compilation cache for the specified scripts. - # Unlike setProduceCompilationCache, this allows client to only produce cache - # for specific scripts. `scripts` are appeneded to the list of scripts - # for which the cache for would produced. Disabling compilation cache with - # `setProduceCompilationCache` would reset all pending cache requests. - # The list may also be reset during page navigation. + # `scripts` are appeneded to the list of scripts for which the cache + # would be produced. The list may be reset during page navigation. # When script with a matching URL is encountered, the cache is optionally # produced upon backend discretion, based on internal heuristics. # See also: `Page.compilationCacheProduced`. @@ -7554,6 +7878,15 @@ domain Page # Clears seeded compilation cache. experimental command clearCompilationCache + # Sets the Secure Payment Confirmation transaction mode. + # https://w3c.github.io/secure-payment-confirmation/#sctn-automation-set-spc-transaction-mode + experimental command setSPCTransactionMode + parameters + enum mode + none + autoaccept + autoreject + # Generates a report for testing. experimental command generateTestReport parameters @@ -7749,7 +8082,7 @@ domain Page # List of not restored reasons for back-forward cache. experimental type BackForwardCacheNotRestoredReason extends string enum - NotMainFrame + NotPrimaryMainFrame BackForwardCacheDisabled RelatedActiveContentsExist HTTPStatusNotOK @@ -7793,6 +8126,7 @@ domain Page BrowsingInstanceNotSwapped BackForwardCacheDisabledForDelegate OptInUnloadHeaderNotPresent + UnloadHandlerExistsInMainFrame UnloadHandlerExistsInSubFrame ServiceWorkerUnregistration CacheControlNoStore @@ -7801,6 +8135,7 @@ domain Page NoResponseHead Unknown ActivationNavigationsDisallowedForBug1234857 + ErrorDocument #Blocklisted features WebSocket WebTransport @@ -7829,7 +8164,6 @@ domain Page WebShare RequestedStorageAccessGrant WebNfc - WebFileSystem OutstandingNetworkRequestFetch OutstandingNetworkRequestXHR AppBanner @@ -7844,19 +8178,39 @@ domain Page KeyboardLock WebOTPService OutstandingNetworkRequestDirectSocket - IsolatedWorldScript + InjectedJavascript InjectedStyleSheet + Dummy # Disabled for render frame host reasons - MediaSessionImplOnServiceCreated - SecurityHandler - WebAuthenticationAPI - FileChooser - Serial - FileSystemAccess - MediaDevicesDispatcherHost - WebBluetooth - WebUSB - MediaSession + # See content/browser/renderer_host/back_forward_cache_disable.h for explanations. + ContentSecurityHandler + ContentWebAuthenticationAPI + ContentFileChooser + ContentSerial + ContentFileSystemAccess + ContentMediaDevicesDispatcherHost + ContentWebBluetooth + ContentWebUSB + ContentMediaSession + ContentMediaSessionService + ContentScreenReader + + # See components/back_forward_cache/back_forward_cache_disable.h for explanations. + EmbedderPopupBlockerTabHelper + EmbedderSafeBrowsingTriggeredPopupBlocker + EmbedderSafeBrowsingThreatDetails + EmbedderAppBannerManager + EmbedderDomDistillerViewerSource + EmbedderDomDistillerSelfDeletingRequestDelegate + EmbedderOomInterventionTabHelper + EmbedderOfflinePage + EmbedderChromePasswordManagerClientBindCredentialManager + EmbedderPermissionRequestManager + EmbedderModalDialog + EmbedderExtensions + EmbedderExtensionMessaging + EmbedderExtensionMessagingForOpenPort + EmbedderExtensionSentMessageToCachedFrame # Types of not restored reasons for back-forward cache. experimental type BackForwardCacheNotRestoredReasonType extends string @@ -7871,6 +8225,20 @@ domain Page BackForwardCacheNotRestoredReasonType type # Not restored reason BackForwardCacheNotRestoredReason reason + # Context associated with the reason. The meaning of this context is + # dependent on the reason: + # - EmbedderExtensionSentMessageToCachedFrame: the extension ID. + # + optional string context + + experimental type BackForwardCacheNotRestoredExplanationTree extends object + properties + # URL of each frame + string url + # Not restored reasons of each frame + array of BackForwardCacheNotRestoredExplanation explanations + # Array of children frame + array of BackForwardCacheNotRestoredExplanationTree children # Fired for failed bfcache history navigations if BackForwardCache feature is enabled. Do # not assume any ordering with the Page.frameNavigated event. This event is fired only for @@ -7884,6 +8252,8 @@ domain Page FrameId frameId # Array of reasons why the page could not be cached. This must not be empty. array of BackForwardCacheNotRestoredExplanation notRestoredExplanations + # Tree structure of reasons why the page could not be cached for each frame. + optional BackForwardCacheNotRestoredExplanationTree notRestoredExplanationsTree event loadEventFired parameters @@ -8226,20 +8596,20 @@ domain Security # Security state information about the page. VisibleSecurityState visibleSecurityState - # The security state of the page changed. - event securityStateChanged + # The security state of the page changed. No longer being sent. + deprecated event securityStateChanged parameters # Security state. SecurityState securityState # True if the page was loaded over cryptographic transport such as HTTPS. deprecated boolean schemeIsCryptographic - # List of explanations for the security state. If the overall security state is `insecure` or - # `warning`, at least one corresponding explanation should be included. - array of SecurityStateExplanation explanations + # Previously a list of explanations for the security state. Now always + # empty. + deprecated array of SecurityStateExplanation explanations # Information about insecure content on the page. deprecated InsecureContentStatus insecureContentStatus - # Overrides user-visible description of the state. - optional string summary + # Overrides user-visible description of the state. Always omitted. + deprecated optional string summary experimental domain ServiceWorker depends on Target @@ -8376,6 +8746,7 @@ experimental domain Storage websql service_workers cache_storage + interest_groups all other @@ -8394,6 +8765,37 @@ experimental domain Storage string issuerOrigin number count + # Enum of interest group access types. + type InterestGroupAccessType extends string + enum + join + leave + update + bid + win + + # Ad advertising element inside an interest group. + type InterestGroupAd extends object + properties + string renderUrl + optional string metadata + + # The full details of an interest group. + type InterestGroupDetails extends object + properties + string ownerOrigin + string name + Network.TimeSinceEpoch expirationTime + string joiningOrigin + optional string biddingUrl + optional string biddingWasmHelperUrl + optional string updateUrl + optional string trustedBiddingSignalsUrl + array of string trustedBiddingSignalsKeys + optional string userBiddingSignals + array of InterestGroupAd ads + array of InterestGroupAd adComponents + # Clears storage for origin. command clearDataForOrigin parameters @@ -8493,6 +8895,19 @@ experimental domain Storage # True if any tokens were deleted, false otherwise. boolean didDeleteTokens + # Gets details for a named interest group. + experimental command getInterestGroupDetails + parameters + string ownerOrigin + string name + returns + InterestGroupDetails details + + # Enables/Disables issuing of interestGroupAccessed events. + experimental command setInterestGroupTracking + parameters + boolean enable + # A cache's contents have been modified. event cacheStorageContentUpdated parameters @@ -8523,6 +8938,14 @@ experimental domain Storage # Origin to update. string origin + # One of the interest groups was accessed by the associated page. + event interestGroupAccessed + parameters + Network.TimeSinceEpoch accessTime + InterestGroupAccessType type + string ownerOrigin + string name + # The SystemInfo domain defines methods and events for querying low-level system information. experimental domain SystemInfo @@ -8740,6 +9163,9 @@ domain Target optional string proxyServer # Proxy bypass list, similar to the one passed to --proxy-bypass-list optional string proxyBypassList + # An optional list of origins to grant unlimited cross-origin access to. + # Parts of the URL other than those constituting origin are ignored. + optional array of string originsWithUniversalNetworkAccess returns # The id of the context created. @@ -8761,7 +9187,7 @@ domain Target # Frame height in DIP (headless chrome only). optional integer height # The browser context to create the page in. - optional Browser.BrowserContextID browserContextId + experimental optional Browser.BrowserContextID browserContextId # Whether BeginFrames for this target will be controlled via DevTools (headless chrome only, # not supported on MacOS yet, false by default). experimental optional boolean enableBeginFrameControl @@ -8815,6 +9241,8 @@ domain Target # Controls whether to automatically attach to new targets which are considered to be related to # this one. When turned on, attaches to all existing related targets as well. When turned off, # automatically detaches from all currently attached targets. + # This also clears all targets added by `autoAttachRelated` from the list of targets to watch + # for creation of related targets. experimental command setAutoAttach parameters # Whether to auto-attach to related targets. @@ -8827,6 +9255,18 @@ domain Target # and eventually retire it. See crbug.com/991325. optional boolean flatten + # Adds the specified target to the list of targets that will be monitored for any related target + # creation (such as child frames, child workers and new versions of service worker) and reported + # through `attachedToTarget`. The specified target is also auto-attached. + # This cancels the effect of any previous `setAutoAttach` and is also cancelled by subsequent + # `setAutoAttach`. Only available at the Browser target. + experimental command autoAttachRelated + parameters + TargetID targetId + # Whether to pause new targets when attaching to them. Use `Runtime.runIfWaitingForDebugger` + # to run paused targets. + boolean waitForDebuggerOnStart + # Controls whether to discover available targets and notify via # `targetCreated/targetInfoChanged/targetDestroyed` events. command setDiscoverTargets @@ -9166,7 +9606,9 @@ domain Fetch # need to represent some non-UTF8 values that can't be transmitted # over the protocol as text. optional binary binaryResponseHeaders - # A response body. + # A response body. If absent, original response body will be used if + # the request is intercepted at the response stage and empty body + # will be used if the request is intercepted at the request stage. optional binary body # A textual representation of responseCode. # If absent, a standard phrase matching responseCode is used. @@ -9196,6 +9638,26 @@ domain Fetch # Response to with an authChallenge. AuthChallengeResponse authChallengeResponse + # Continues loading of the paused response, optionally modifying the + # response headers. If either responseCode or headers are modified, all of them + # must be present. + experimental command continueResponse + parameters + # An id the client received in requestPaused event. + RequestId requestId + # An HTTP response code. If absent, original response code will be used. + optional integer responseCode + # A textual representation of responseCode. + # If absent, a standard phrase matching responseCode is used. + optional string responsePhrase + # Response headers. If absent, original response headers will be used. + optional array of HeaderEntry responseHeaders + # Alternative way of specifying response headers as a \0-separated + # series of name: value pairs. Prefer the above method unless you + # need to represent some non-UTF8 values that can't be transmitted + # over the protocol as text. + optional binary binaryResponseHeaders + # Causes the body of the response to be received from the server and # returned as a single string. May only be issued for a request that # is paused in the Response stage and is mutually exclusive with @@ -9248,6 +9710,8 @@ domain Fetch optional Network.ErrorReason responseErrorReason # Response code if intercepted at response stage. optional integer responseStatusCode + # Response status text if intercepted at response stage. + optional string responseStatusText # Response headers if intercepted at the response stage. optional array of HeaderEntry responseHeaders # If the intercepted request had a corresponding Network.requestWillBeSent event fired for it, @@ -9515,6 +9979,10 @@ experimental domain WebAuthn # https://fidoalliance.org/specs/fido-v2.1-rd-20201208/fido-client-to-authenticator-protocol-v2.1-rd-20201208.html#sctn-credBlob-extension # Defaults to false. optional boolean hasCredBlob + # If set to true, the authenticator will support the minPinLength extension. + # https://fidoalliance.org/specs/fido-v2.1-ps-20210615/fido-client-to-authenticator-protocol-v2.1-ps-20210615.html#sctn-minpinlength-extension + # Defaults to false. + optional boolean hasMinPinLength # If set to true, tests of user presence will succeed immediately. # Otherwise, they will not be resolved. Defaults to true. optional boolean automaticPresenceSimulation diff --git a/common/devtools/chromium/v96/js_protocol.pdl b/common/devtools/chromium/v101/js_protocol.pdl similarity index 98% rename from common/devtools/chromium/v96/js_protocol.pdl rename to common/devtools/chromium/v101/js_protocol.pdl index b34c8551ad64b..09c420e3a6361 100644 --- a/common/devtools/chromium/v96/js_protocol.pdl +++ b/common/devtools/chromium/v101/js_protocol.pdl @@ -104,7 +104,9 @@ domain Debugger # Location in the source code. Location location # JavaScript script name or url. - string url + # Deprecated in favor of using the `location.scriptId` to resolve the URL via a previously + # sent `Debugger.scriptParsed` event. + deprecated string url # Scope chain for this call frame. array of Scope scopeChain # `this` object for this call frame. @@ -1550,6 +1552,18 @@ domain Runtime parameters string name + # This method tries to lookup and populate exception details for a + # JavaScript Error object. + # Note that the stackTrace portion of the resulting exceptionDetails will + # only be populated if the Runtime domain was enabled at the time when the + # Error was thrown. + experimental command getExceptionDetails + parameters + # The error object for which to resolve the exception details. + RemoteObjectId errorObjectId + returns + optional ExceptionDetails exceptionDetails + # Notification is issued every time when binding is called. experimental event bindingCalled parameters diff --git a/common/devtools/chromium/v96/BUILD.bazel b/common/devtools/chromium/v102/BUILD.bazel similarity index 100% rename from common/devtools/chromium/v96/BUILD.bazel rename to common/devtools/chromium/v102/BUILD.bazel diff --git a/common/devtools/chromium/v102/browser_protocol.pdl b/common/devtools/chromium/v102/browser_protocol.pdl new file mode 100644 index 0000000000000..7bbc5c4ca3952 --- /dev/null +++ b/common/devtools/chromium/v102/browser_protocol.pdl @@ -0,0 +1,10196 @@ +# Copyright 2017 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +# +# Contributing to Chrome DevTools Protocol: https://docs.google.com/document/d/1c-COD2kaK__5iMM5SEx-PzNA7HFmgttcYfOHHX0HaOM/edit?usp=sharing + +version + major 1 + minor 3 + +experimental domain Accessibility + depends on DOM + + # Unique accessibility node identifier. + type AXNodeId extends string + + # Enum of possible property types. + type AXValueType extends string + enum + boolean + tristate + booleanOrUndefined + idref + idrefList + integer + node + nodeList + number + string + computedString + token + tokenList + domRelation + role + internalRole + valueUndefined + + # Enum of possible property sources. + type AXValueSourceType extends string + enum + attribute + implicit + style + contents + placeholder + relatedElement + + # Enum of possible native property sources (as a subtype of a particular AXValueSourceType). + type AXValueNativeSourceType extends string + enum + description + figcaption + label + labelfor + labelwrapped + legend + rubyannotation + tablecaption + title + other + + # A single source for a computed AX property. + type AXValueSource extends object + properties + # What type of source this is. + AXValueSourceType type + # The value of this property source. + optional AXValue value + # The name of the relevant attribute, if any. + optional string attribute + # The value of the relevant attribute, if any. + optional AXValue attributeValue + # Whether this source is superseded by a higher priority source. + optional boolean superseded + # The native markup source for this value, e.g. a