Skip to content
Permalink
Browse files

Fixes #8509. Makes URL regexp less overzealous and ensures it recogni…

…zes URL schemes which do not contain a conformant hierarchical structure ( as per section 2.1.2 of http://www.ietf.org/rfc/rfc2718.txt ). Also adds about: and adobe air's app: and app-storage: to the list of local protocols and provides a failover in case document.location is illformed. Unit test added.
  • Loading branch information
jaubourg committed Mar 15, 2011
1 parent 6c124d3 commit 714ae379db9dcb704c04080196a05d13a028f7a4
Showing with 14 additions and 4 deletions.
  1. +3 −3 src/ajax.js
  2. +11 −1 test/unit/ajax.js
@@ -7,7 +7,7 @@ var r20 = /%20/g,
rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
// #7653, #8125, #8152: local protocol detection
rlocalProtocol = /(?:^file|^widget|\-extension):$/,
rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|widget):$/,
rnoContent = /^(?:GET|HEAD)$/,
rprotocol = /^\/\//,
rquery = /\?/,
@@ -19,7 +19,7 @@ var r20 = /%20/g,
rucHeadersFunc = function( _, $1, $2 ) {
return $1 + $2.toUpperCase();
},
rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?|\/[^\/])/,
rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,

// Keep a copy of the old load method
_load = jQuery.fn.load,
@@ -61,7 +61,7 @@ try {
}

// Segment location into parts
ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() );
ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];

// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
function addToPrefiltersOrTransports( structure ) {
@@ -492,7 +492,7 @@ test(".ajax() - hash", function() {

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

expect( 5 );
expect( 6 );

var loc = document.location,
otherPort = loc.port === 666 ? 667 : 666,
@@ -508,6 +508,7 @@ test("jQuery ajax - cross-domain detection", function() {
});

jQuery.ajax({
dataType: "jsonp",
url: 'app:/path',
beforeSend: function( _ , s ) {
ok( s.crossDomain , "Adobe AIR app:/ URL detected as cross-domain" );
@@ -533,6 +534,15 @@ test("jQuery ajax - cross-domain detection", function() {
}
});

jQuery.ajax({
dataType: "jsonp",
url: "about:blank",
beforeSend: function( _ , s ) {
ok( s.crossDomain , "Test about:blank is detected as cross-domain" );
return false;
}
});

jQuery.ajax({
dataType: "jsonp",
url: loc.protocol + "//" + loc.host,

0 comments on commit 714ae37

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