Revision fc7c0b7d097b3f584889127fd6ea350a1980cc7a authored by Emilio Cobos Álvarez on 09 April 2018, 07:01:25 UTC, committed by moz-wptsync-bot on 09 April 2018, 07:52:06 UTC
The code was trying to assert that we had frames constructed for all the nodes
in the parent chain, but we don't bail out in the
!GetContentInsertionFrameFor(aContainer) in the case that it's a children
element, because they actually have no insertion frame, though their children
do.

Move the LazyFC check after the insertion point check. That makes the previous
check work on the insertion point of the child, which makes it sound.

This also fixes bug 1410020, and with it a Shadow DOM test-case that was failing
because we had two sibling assigned to two different <slot>s, and the second one
wasn't getting properly flagged, and thus the second sibling never got a frame.

The other two test failures in this test are an event dispatch failure, where
the position of the target is not what the test expects (we don't account for
margin and padding). Filed that as bug 1450027.

Also, added a test for which we have wrong layout without these patches, and
that crashes with "Called Servo_Element_IsDisplayNone" with the first patch of
this bug applied but not this one, due to the bogus check mentioned above.
bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1303605
gecko-commit: 12a824f8d55a8fb0396fb2132974f8223c6a9606
gecko-integration-branch: central
gecko-reviewers: bz
1 parent a835486
Raw File
send-authentication-basic-setrequestheader-existing-session.htm
<!doctype html>
<html>
  <head>
    <title>XMLHttpRequest: send() - "Basic" authenticated request using setRequestHeader() when there is an existing session</title>
    <script src="/resources/testharness.js"></script>
    <script src="/resources/testharnessreport.js"></script>
    <script src="/common/utils.js"></script>
    <!-- These spec references do not make much sense simply because the spec doesn't say very much about this.. -->
    <link rel="help" href="https://xhr.spec.whatwg.org/#the-setrequestheader()-method" data-tested-assertations="following::ol[1]/li[6]" />
    <link rel="help" href="https://xhr.spec.whatwg.org/#the-send()-method" data-tested-assertations="following::code[contains(@title,'http-authorization')]/.." />
  </head>
  <body>
    <div id="log"></div>
    <script>
      var test = async_test()
      test.step(function() {
        var client = new XMLHttpRequest(),
          urlstart = location.host + location.pathname.replace(/\/[^\/]*$/, '/')
        // Initial request: no information is known to the UA about whether resources/auth4/auth.py requires authentication,
        // hence it first sends a normal request, gets a 401 response that will not be passed on to the JS, and sends a new
        // request with an Authorization header before returning
        // (Note: this test will only work as expected if run once per browsing session)
        var open_user = token()
        client.open("GET", location.protocol+'//'+urlstart + "resources/auth4/auth.py", false, open_user, 'open-pass')
        client.setRequestHeader('X-User', open_user)
        // initial request - this will get a 401 response and re-try with HTTP auth
        client.send(null)
        assert_true(client.responseText == (open_user + '\nopen-pass'), 'responseText should contain the right user and password')
        assert_equals(client.status, 200)
        assert_equals(client.getResponseHeader('x-challenge'), 'DID')
        // Another request, this time user,pass is omitted and an Authorization header set explicitly
        // Here the URL is known to require authentication (from the request above), and the UA has cached open-user:open-pass credentials
        // However, these session credentials should now be overridden by the setRequestHeader() call so the UA should immediately
        // send basic Authorization header with credentials user:pass. (This part is perhaps not well specified anywhere)
        var user = token();
        client.open("GET", location.protocol+'//'+urlstart + "resources/auth4/auth.py", true)
        client.setRequestHeader("x-user", user)
        client.setRequestHeader('Authorization', 'Basic ' + btoa(user + ":pass"))
        client.onreadystatechange = function () {
          if (client.readyState < 4) {return}
          test.step( function () {
            assert_equals(client.responseText, user + '\npass')
            assert_equals(client.status, 200)
            assert_equals(client.getResponseHeader('x-challenge'), 'DID-NOT')
            test.done()
          } )
        }
        client.send(null)
      })
    </script>
    <p>Note: this test will only work as expected once per browsing session. Restart browser to re-test.</p>
  </body>
</html>
back to top