Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(296)

Unified Diff: chrome/test/data/extensions/api_test/webrequest/test_blocking.js

Issue 348253002: Add CORS headers to URLRequestRedirectJob. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: EXPECT GURL -> std::string Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/test/data/extensions/api_test/webrequest/test_blocking.js
diff --git a/chrome/test/data/extensions/api_test/webrequest/test_blocking.js b/chrome/test/data/extensions/api_test/webrequest/test_blocking.js
index f3aee70d04ca943ef3deed4acaf7de766980f64e..93008a6a0903a70158ef92bbe7004590bf70199e 100644
--- a/chrome/test/data/extensions/api_test/webrequest/test_blocking.js
+++ b/chrome/test/data/extensions/api_test/webrequest/test_blocking.js
@@ -322,6 +322,16 @@ runTests([
navigateAndWait(getURL("complexLoad/a.html"));
},
+ // Tests redirect of <img crossorigin="anonymous" src="...">
+ function crossOriginAnonymousRedirect() {
+ testLoadCORSImage("anonymous");
+ },
+
+ // Tests redirect of <img crossorigin="use-credentials" src="...">
+ function crossOriginCredentialedRedirect() {
+ testLoadCORSImage("use-credentials");
+ },
+
// Loads a testserver page that echoes the User-Agent header that was
// sent to fetch it. We modify the outgoing User-Agent in
// onBeforeSendHeaders, so we should see that modified version.
@@ -994,3 +1004,130 @@ runTests([
});
},
]);
+
+
+// This helper verifies that extensions can successfully redirect resources even
+// if cross-origin access control is in effect via the crossorigin attribute.
+// Used by crossOriginAnonymousRedirect and crossOriginCredentialedRedirect.
+function testLoadCORSImage(crossOriginAttributeValue) {
+ // (Non-existent) image URL, with random query string to bust the cache.
+ var requestedUrl = getServerURL("cors/intercepted_by_extension.gif?" +
+ Math.random(), "original.tld");
+ var frameUrl = getServerURL(
+ "extensions/api_test/webrequest/cors/load_image.html?" +
+ "crossOrigin=" + crossOriginAttributeValue +
+ "&src=" + encodeURIComponent(requestedUrl));
+ var redirectTarget = getServerURL(
+ "extensions/api_test/webrequest/cors/redirect_target.gif", "domain.tld");
+ expect(
+ [ // events
+ { label: "onBeforeRequest-1",
+ event: "onBeforeRequest",
+ details: {
+ type: "image",
+ url: requestedUrl,
+ // Frame URL unavailable because requests are filtered by type=image.
+ frameUrl: "unknown frame URL",
+ },
+ retval: {redirectUrl: redirectTarget}
+ },
+ { label: "onBeforeRedirect",
+ event: "onBeforeRedirect",
+ details: {
+ type: "image",
+ url: requestedUrl,
+ redirectUrl: redirectTarget,
+ statusLine: "HTTP/1.1 307 Internal Redirect",
+ statusCode: 307,
+ fromCache: false,
+ }
+ },
+ { label: "onBeforeRequest-2",
+ event: "onBeforeRequest",
+ details: {
+ type: "image",
+ url: redirectTarget,
+ // Frame URL unavailable because requests are filtered by type=image.
+ frameUrl: "unknown frame URL",
+ },
+ },
+ {
+ label: "onBeforeSendHeaders",
+ event: "onBeforeSendHeaders",
+ details: {
+ type: "image",
+ url: redirectTarget,
+ }
+ },
+ {
+ label: "onSendHeaders",
+ event: "onSendHeaders",
+ details: {
+ type: "image",
+ url: redirectTarget,
+ }
+ },
+ {
+ label: "onHeadersReceived",
+ event: "onHeadersReceived",
+ details: {
+ type: "image",
+ url: redirectTarget,
+ statusLine: "HTTP/1.1 200 OK",
+ }
+ },
+ { label: "onResponseStarted",
+ event: "onResponseStarted",
+ details: {
+ type: "image",
+ url: redirectTarget,
+ fromCache: false,
+ statusCode: 200,
+ ip: "127.0.0.1",
+ statusLine: "HTTP/1.1 200 OK",
+ }
+ },
+ { label: "onCompleted",
+ event: "onCompleted",
+ details: {
+ type: "image",
+ url: redirectTarget,
+ fromCache: false,
+ statusCode: 200,
+ ip: "127.0.0.1",
+ statusLine: "HTTP/1.1 200 OK",
+ }
+ },
+ // After the image loads, the test will load the following URL
+ // to signal that the test succeeded.
+ {
+ label: "onBeforeRequest-3",
+ event: "onBeforeRequest",
+ details: {
+ type: "image",
+ url: getServerURL("signal_that_image_loaded_successfully"),
+ // Frame URL unavailable because requests are filtered by type=image.
+ frameUrl: "unknown frame URL",
+ },
+ retval: {cancel: true}
+ },
+ { label: "onErrorOccurred",
+ event: "onErrorOccurred",
+ details: {
+ type: "image",
+ url: getServerURL("signal_that_image_loaded_successfully"),
+ fromCache: false,
+ error: "net::ERR_BLOCKED_BY_CLIENT",
+ }
+ },
+ ],
+ [ // event order
+ ["onBeforeRequest-1", "onBeforeRedirect", "onBeforeRequest-2",
+ "onBeforeSendHeaders", "onSendHeaders", "onHeadersReceived",
+ "onResponseStarted", "onCompleted",
+ "onBeforeRequest-3", "onErrorOccurred"],
+ ],
+ {urls: ["<all_urls>"], types: ['image']}, // filter
+ ["blocking"]);
+ navigateAndWait(frameUrl);
+}

Powered by Google App Engine
This is Rietveld 408576698