Skip to content
Permalink
Browse files

Fixes #7465. Reworked the regexp and associated test for cross-domain…

… detection so that it now includes ports. Added cross-domain detection tests for protocol, hostname and port.
  • Loading branch information...
jaubourg committed Jan 9, 2011
1 parent d515068 commit afefb4f3d28f47c0a93cc9dfddfcbadb595a8efb
Showing with 59 additions and 2 deletions.
  1. +7 −2 src/ajax.js
  2. +52 −0 test/unit/ajax.js
@@ -10,7 +10,7 @@ var r20 = /%20/g,
rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
rselectTextarea = /^(?:select|textarea)/i,
rts = /([?&])_=[^&]*/,
rurl = /^(\w+:)?\/\/([^\/?#]+)/,
rurl = /^(\w+:)?\/\/([^\/?#:]+)(?::(\d+))?/,

// Slice function
sliceFunc = Array.prototype.slice,
@@ -520,7 +520,12 @@ jQuery.extend({
// Determine if a cross-domain request is in order
var parts = rurl.exec( s.url.toLowerCase() ),
loc = location;
s.crossDomain = !!( parts && ( parts[ 1 ] && parts[ 1 ] != loc.protocol || parts[ 2 ] != loc.host ) );
s.crossDomain = !!(
parts &&
( parts[ 1 ] && parts[ 1 ] != loc.protocol ||
parts[ 2 ] != loc.hostname ||
( parts[ 3 ] || 80 ) != ( loc.port || 80 ) )
);

// Convert data if not already a string
if ( s.data && s.processData && typeof s.data != "string" ) {
@@ -358,6 +358,58 @@ test(".ajax() - hash", function() {
});
});

test("jQuery ajax - cross-domain detection", function() {

expect( 3 );

var loc = document.location,
otherPort = loc.port === 666 ? 667 : 666,
otherProtocol = loc.protocol === "http:" ? "https:" : "http:",
protocolFlag,
hostFlag,
portFlag;

if ( jQuery.ajax({
url: otherProtocol + "//" + loc.host,
beforeSend: function( _ , s ) {
protocolFlag = 1;
ok( s.crossDomain , "Test different protocols are detected as cross-domain" );
return false;
}
}) === false ) {
if ( ! protocolFlag ) {
ok( ! jQuery.support.cors , "Test different protocols are detected as cross-domain (no transport)" );
}
}

if ( jQuery.ajax({
url: loc.protocol + '//somewebsitethatdoesnotexist-656329477541.com:' + ( loc.port || 80 ),
beforeSend: function( _ , s ) {
hostFlag = 1;
ok( s.crossDomain , "Test different hostnames are detected as cross-domain" );
return false;
}
}) === false ) {
if ( ! hostFlag ) {
ok( ! jQuery.support.cors , "Test different hostnames are detected as cross-domain (no transport)" );
}
}

if ( jQuery.ajax({
url: loc.protocol + "//" + loc.hostname + ":" + otherPort,
beforeSend: function( _ , s ) {
portFlag = 1;
ok( s.crossDomain , "Test different ports are detected as cross-domain" );
return false;
}
}) === false ) {
if ( ! portFlag ) {
ok( ! jQuery.support.cors , "Test different ports are detected as cross-domain (no transport)" );
}
}

});

test(".ajax() - 304", function() {
expect( 1 );
stop();

0 comments on commit afefb4f

Please sign in to comment.
You can’t perform that action at this time.