WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
26510
Add tests for authentication behavior with cross-origin XMLHttpRequest
https://bugs.webkit.org/show_bug.cgi?id=26510
Summary
Add tests for authentication behavior with cross-origin XMLHttpRequest
Alexey Proskuryakov
Reported
2009-06-18 03:02:30 PDT
We need to test how withCredentials attribute affects XMLHttpRequest.
Attachments
proposed patch
(20.28 KB, patch)
2009-06-18 09:38 PDT
,
Alexey Proskuryakov
mjs
: review+
Details
Formatted Diff
Diff
View All
Add attachment
proposed patch, testcase, etc.
Alexey Proskuryakov
Comment 1
2009-06-18 09:38:25 PDT
Created
attachment 31499
[details]
proposed patch
Maciej Stachowiak
Comment 2
2009-06-18 10:31:03 PDT
Comment on
attachment 31499
[details]
proposed patch r=me
David Levin
Comment 3
2009-06-18 11:08:33 PDT
It looks like mjs gave an r+ while i was looking at this so I'll just send along my comments as an fyi.
> Index: LayoutTests/http/tests/xmlhttprequest/cross-origin-authorization-expected.txt > =================================================================== > +Start > +Trying different ways to access a password protected resource from another origin. The UA already has login and password for this protection space.
It would be nice to indicate the expected result here for anyone running it standalone. Something like "You should see a several PASSes followed by a DONE."
> Index: LayoutTests/http/tests/xmlhttprequest/cross-origin-authorization.html > =================================================================== > +function test() > +{ > + log("Trying different ways to access a password protected resource from another origin. The UA already has login and password for this protection space.\n") > + log("SCRIPT SRC='...' Should succeed, since authorization is sent for cross-origin subresource loads."); > + var scriptElement = document.createElement("script"); > + scriptElement.setAttribute("src", "
http://localhost:8000/xmlhttprequest/resources/cross-origin-authorization.php
"); > + scriptElement.setAttribute("onload", "test_sync_auth_stored()"); > + scriptElement.setAttribute("onerror", "test_sync_auth_stored()");
Why does it run the function for onload or onerror?
> + document.body.appendChild(scriptElement); > +} > + > +function test_sync_auth_stored()
testSyncAuthStored seems like it is more consistent with function names (even in js). Same thing for the other functions in here.
> + > +function test_async_cookies() > +{ > + log("Cross-origin XMLHttpRequest (async), testing cookies."); > + > + var req = new XMLHttpRequest; > + req.open("GET", "
http://localhost:8000/xmlhttprequest/resources/cross-origin-check-cookies.php
", true); > + req.withCredentials = true; > + req.send(); > + req.onload = function() { > + log(req.responseText.match(/WK\-cross\-origin/) ? "PASS" : "FAIL");
There is a TAB here.
> Index: LayoutTests/http/tests/xmlhttprequest/cross-origin-no-authorization.html > +function test_async_cookies() > +{ > + log("Cross-origin XMLHttpRequest (async), testing cookies."); > + > + var req = new XMLHttpRequest; > + req.open("GET", "
http://localhost:8000/xmlhttprequest/resources/cross-origin-check-cookies.php
", true); > + req.send(); > + req.onload = function() { > + log(req.responseText.match(/WK\-cross\-origin/) ? "FAIL" : "PASS");
There is a TAB here.
> Index: LayoutTests/http/tests/xmlhttprequest/resources/cross-origin-authorization.php > =================================================================== > +<?php > +header("Set-Cookie: WK-cross-origin=1");
It seems like it would be nice to only set the cookie after the authorization was checked (after "if (!isset($_SERVER['PHP_AUTH_USER']))").
> +if (!isset($_SERVER['PHP_AUTH_USER'])) {
Why not check the actual user name and password to verify that they were sent correctly?
> Index: LayoutTests/http/tests/xmlhttprequest/resources/cross-origin-check-cookies.php > =================================================================== > +if (isset($_COOKIE['WK-cross-origin'])) { > + echo 'WK-cross-origin: ' . $_COOKIE['WK-cross-origin']; > +} else { > + echo 'Cross-origin cookie was not sent.';
TAB.
> Index: LayoutTests/http/tests/xmlhttprequest/resources/cross-origin-no-authorization.php > ===================================================================
Same comments as above for the similar code.
Alexey Proskuryakov
Comment 4
2009-06-18 13:00:12 PDT
Committed revision 44816. Note that Firefox fails some of the tests - it doesn't send cookies even when withCredentials is true, and raises an exception when trying to specify cross-site credentials explicitly (which we silently ignore). (In reply to
comment #3
)
> It would be nice to indicate the expected result here for anyone running it > standalone. Something like "You should see a several PASSes followed by a > DONE."
Done.
> Why does it run the function for onload or onerror?
It's going to the next test regardless of whether the current one passed.
> testSyncAuthStored seems like it is more consistent with function names (even > in js). > Same thing for the other functions in here.
I like to be inconsistent in tests - what if someone accidentally modifies JS parser in a way that it no longer supports underscores?
> It seems like it would be nice to only set the cookie after the authorization > was checked (after "if (!isset($_SERVER['PHP_AUTH_USER']))").
I'm not sure. The current code kind sends a signal that the cookie may be set before you expect it to - and that's the case because several tests set it anyway.
> > +if (!isset($_SERVER['PHP_AUTH_USER'])) { > Why not check the actual user name and password to verify that they were sent > correctly?
There are several user names used in the tests. Thank you for your comments!
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug