https://github.com/web-platform-tests/wpt
Revision 1b5ce4ad3817e7b7247d7ff0f76b81877fce0d89 authored by Andrew Comminos on 21 December 2018, 21:45:26 UTC, committed by Chromium WPT Sync on 21 December 2018, 21:45:26 UTC
When two child elements of a flexbox overlap (for example, due to
negative margins), the element drawn in the foreground may not actually
capture the hit if the element underneath it is hit-tested in an earlier
phase (e.g. foreground before child block background), despite being
occluded. This is because painting of flexbox children is done
atomically (all phases at once). This change makes hit testing atomic as
well, in accordance with the spec [1].

[1] https://www.w3.org/TR/css-flexbox-1/#painting

Bug: 844505
Change-Id: Iceab80b42f19488dcb59565ea3c0ce40d48c483b
1 parent f3cbe03
Raw File
Tip revision: 1b5ce4ad3817e7b7247d7ff0f76b81877fce0d89 authored by Andrew Comminos on 21 December 2018, 21:45:26 UTC
Perform flexbox child hit testing by testing all children atomically
Tip revision: 1b5ce4a
.taskcluster.yml
version: 1
policy:
  pullRequests: public
tasks:
  $flattenDeep:
    - $if: tasks_for == "github-push"
      then:
        $map:
          $flatten:
            $match: {
              event.ref == "refs/heads/master": [{name: firefox, channel: nightly}, {name: chrome, channel: dev}],
              event.ref == "refs/heads/epochs/daily": [{name: firefox, channel: stable}, {name: chrome, channel: stable}],
              event.ref == "refs/heads/epochs/weekly": [{name: firefox, channel: beta}, {name: chrome, channel: beta}]
              }
        each(browser):
          $map:
            - [testharness, 1, 15]
            - [testharness, 2, 15]
            - [testharness, 3, 15]
            - [testharness, 4, 15]
            - [testharness, 5, 15]
            - [testharness, 6, 15]
            - [testharness, 7, 15]
            - [testharness, 8, 15]
            - [testharness, 9, 15]
            - [testharness, 10, 15]
            - [testharness, 11, 15]
            - [testharness, 12, 15]
            - [testharness, 13, 15]
            - [testharness, 14, 15]
            - [testharness, 15, 15]
            - [reftest, 1, 10]
            - [reftest, 2, 10]
            - [reftest, 3, 10]
            - [reftest, 4, 10]
            - [reftest, 5, 10]
            - [reftest, 6, 10]
            - [reftest, 7, 10]
            - [reftest, 8, 10]
            - [reftest, 9, 10]
            - [reftest, 10, 10]
            - [wdspec, 1, 1]
          each(chunk):
            taskId: {$eval: 'as_slugid(browser.name + browser.channel + chunk[0] + str(chunk[1]))'}
            taskGroupId: {$eval: 'as_slugid("task group")'}
            created: {$fromNow: ''}
            deadline: {$fromNow: '24 hours'}
            provisionerId: aws-provisioner-v1
            workerType:
              $if: event.repository.full_name == 'web-platform-tests/wpt'
              then:
                wpt-docker-worker
              else:
                github-worker
            metadata:
              name: wpt-${browser.name}-${browser.channel}-${chunk[0]}-${chunk[1]}
              description: >-
                A subset of WPT's "${chunk[0]}" tests (chunk number ${chunk[1]}
                of ${chunk[2]}), run in the ${browser.channel} release of
                ${browser.name}.
              owner: ${event.pusher.email}
              source: ${event.repository.url}
            payload:
              image: harjgam/web-platform-tests:0.25
              maxRunTime: 7200
              artifacts:
                public/results:
                  path: /home/test/artifacts
                  type: directory
              command:
                - /bin/bash
                - --login
                - -c
                - set -ex;
                  ~/start.sh
                    ${event.repository.url}
                    ${event.ref}
                    ${event.after}
                    ${browser.name}
                    ${browser.channel};
                  cd ~/web-platform-tests;
                  ./tools/ci/taskcluster-run.py
                    ${browser.name}
                    --
                    --channel=${browser.channel}
                    --log-wptreport=../artifacts/wpt_report.json
                    --no-fail-on-unexpected
                    --test-type=${chunk[0]}
                    --this-chunk=${chunk[1]}
                    --total-chunks=${chunk[2]};
    - $if: tasks_for == "github-pull-request"
      then:
        # Taskcluster responds to a number of events issued by the GitHub API
        # which should not trigger re-validation.
        $if: event.action in ['opened', 'reopened', 'synchronize']
        then:
          $map: [{name: firefox, channel: nightly}, {name: chrome, channel: dev}]
          each(browser):
            $map:
              - name: wpt-${browser.name}-${browser.channel}-stability
                checkout: FETCH_HEAD
                diff_range: HEAD^
                description: >-
                  Verify that all tests affected by a pull request are stable
                  when executed in ${browser.name}.
                extra_args: '--verify'
              - name: wpt-${browser.name}-${browser.channel}-results
                checkout: FETCH_HEAD
                diff_range: HEAD^
                description: >-
                  Collect results for all tests affected by a pull request in
                  ${browser.name}.
                extra_args: '--no-fail-on-unexpected --log-wptreport=../artifacts/wpt_report.json'
              - name: wpt-${browser.name}-${browser.channel}-results-without-changes
                checkout: FETCH_HEAD^
                diff_range: FETCH_HEAD
                description: >-
                  Collect results for all tests affected by a pull request in
                  ${browser.name} but without the changes in the PR.
                extra_args: '--no-fail-on-unexpected --log-wptreport=../artifacts/wpt_report.json'
            each(operation):
              taskId: {$eval: 'as_slugid(operation.name)'}
              taskGroupId: {$eval: 'as_slugid("task group")'}
              created: {$fromNow: ''}
              deadline: {$fromNow: '24 hours'}
              provisionerId: aws-provisioner-v1
              workerType:
                $if: event.repository.full_name == 'web-platform-tests/wpt'
                then:
                  wpt-docker-worker
                else:
                  github-worker
              metadata:
                name: ${operation.name}
                description: ${operation.description}
                owner: ${event.pull_request.user.login}@users.noreply.github.com
                source: ${event.repository.url}
              payload:
                image: harjgam/web-platform-tests:0.25
                maxRunTime: 7200
                artifacts:
                  public/results:
                    path: /home/test/artifacts
                    type: directory
                # Fetch the GitHub-provided merge commit (rather than the pull
                # request branch) so that the tasks simulate the behavior of the
                # submitted patch after it is merged. Using the merge commit also
                # simplifies detection of modified files because the first parent
                # of the merge commit can consistently be used to summarize the
                # changes.
                command:
                  - /bin/bash
                  - --login
                  - -c
                  - set -ex;
                    ~/start.sh
                      ${event.repository.clone_url}
                      refs/pull/${event.number}/merge
                      ${operation.checkout}
                      ${browser.name}
                      ${browser.channel};
                    cd ~/web-platform-tests;
                    ./tools/ci/taskcluster-run.py
                      --commit-range ${operation.diff_range}
                      ${browser.name}
                      --
                      --channel=${browser.channel}
                      ${operation.extra_args};
back to top