Bug 1416872 fix canceling request, r?rpl
MozReview-Commit-ID: BqZFsPHo4Ty
--- a/toolkit/components/extensions/ext-identity.js
+++ b/toolkit/components/extensions/ext-identity.js
@@ -64,19 +64,22 @@ const openOAuthWindow = (details, redire
function unloadlistener() {
window.removeEventListener("unload", unloadlistener);
window.gBrowser.removeProgressListener(wpl);
reject({message: "User cancelled or denied access."});
}
wpl = {
onStateChange(progress, request, flags, status) {
- if (request instanceof Ci.nsIHttpChannel &&
+ // "request" is now a RemoteWebProgressRequest and is not cancelable
+ // using request.cancel. We can however, stop everything using
+ // webNavigation.
+ if (request && request.URI &&
request.URI.spec.startsWith(redirectURI)) {
- request.cancel(Components.results.NS_BINDING_ABORTED);
+ window.gBrowser.webNavigation.stop(Ci.nsIWebNavigation.STOP_ALL);
window.removeEventListener("unload", unloadlistener);
window.gBrowser.removeProgressListener(wpl);
window.close();
resolve(request.URI.spec);
}
},
};
--- a/toolkit/components/extensions/test/mochitest/chrome.ini
+++ b/toolkit/components/extensions/test/mochitest/chrome.ini
@@ -4,32 +4,28 @@ support-files =
chrome_cleanup_script.js
head.js
head_cookies.js
file_image_great.png
file_sample.html
file_with_images.html
webrequest_chromeworker.js
webrequest_test.jsm
- oauth.html
- redirect_auto.sjs
tags = webextensions in-process-webextensions
[test_chrome_ext_background_page.html]
skip-if = (toolkit == 'android') # android doesn't have devtools
[test_chrome_ext_contentscript_data_uri.html]
[test_chrome_ext_contentscript_telemetry.html]
[test_chrome_ext_contentscript_unrecognizedprop_warning.html]
[test_chrome_ext_downloads_open.html]
[test_chrome_ext_downloads_saveAs.html]
[test_chrome_ext_downloads_uniquify.html]
[test_chrome_ext_eventpage_warning.html]
[test_chrome_ext_idle.html]
-[test_chrome_ext_identity.html]
-skip-if = os == 'android' # unsupported.
[test_chrome_ext_permissions.html]
skip-if = os == 'android' # Bug 1350559
[test_chrome_ext_storage_cleanup.html]
[test_chrome_ext_trackingprotection.html]
[test_chrome_ext_trustworthy_origin.html]
[test_chrome_ext_webnavigation_resolved_urls.html]
[test_chrome_ext_webrequest_background_events.html]
[test_chrome_ext_webrequest_errors.html]
--- a/toolkit/components/extensions/test/mochitest/mochitest-common.ini
+++ b/toolkit/components/extensions/test/mochitest/mochitest-common.ini
@@ -51,16 +51,17 @@ support-files =
file_ext_test_api_injection.js
file_permission_xhr.html
file_teardown_test.js
lorem.html.gz
lorem.html.gz^headers^
return_headers.sjs
slow_response.sjs
webrequest_worker.js
+ oauth.html
!/toolkit/components/passwordmgr/test/authenticate.sjs
!/dom/tests/mochitest/geolocation/network_geolocation.sjs
[test_ext_clipboard.html]
[test_ext_clipboard_image.html]
skip-if = headless # disabled test case with_permission_allow_copy, see inline comment. Headless: Bug 1405872
[test_ext_inIncognitoContext_window.html]
skip-if = os == 'android' # Android does not support multiple windows.
@@ -84,16 +85,18 @@ skip-if = os == 'android' # Android does
skip-if = os == 'android' # bug 1369440
[test_ext_contentscript_permission.html]
[test_ext_contentscript_teardown.html]
[test_ext_exclude_include_globs.html]
[test_ext_external_messaging.html]
[test_ext_generate.html]
[test_ext_geolocation.html]
skip-if = os == 'android' # Android support Bug 1336194
+[test_ext_identity.html]
+skip-if = os == 'android' # unsupported.
[test_ext_new_tab_processType.html]
[test_ext_notifications.html]
skip-if = os == "win" # Bug 1398518
[test_ext_permission_xhr.html]
[test_ext_redirect_jar.html]
[test_ext_runtime_connect.html]
[test_ext_runtime_connect_twoway.html]
[test_ext_runtime_connect2.html]
rename from toolkit/components/extensions/test/mochitest/test_chrome_ext_identity.html
rename to toolkit/components/extensions/test/mochitest/test_ext_identity.html
--- a/toolkit/components/extensions/test/mochitest/test_chrome_ext_identity.html
+++ b/toolkit/components/extensions/test/mochitest/test_ext_identity.html
@@ -1,18 +1,17 @@
<!DOCTYPE HTML>
<html>
<head>
<title>Test for WebExtension Identity</title>
- <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script src="chrome://mochikit/content/tests/SimpleTest/SpawnTask.js"></script>
- <script src="chrome://mochikit/content/tests/SimpleTest/ExtensionTestUtils.js"></script>
- <script type="text/javascript" src="chrome_head.js"></script>
- <script type="text/javascript" src="head.js"></script>
- <link rel="stylesheet" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
+ <script src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script src="/tests/SimpleTest/SpawnTask.js"></script>
+ <script src="/tests/SimpleTest/ExtensionTestUtils.js"></script>
+ <script src="head.js"></script>
+ <link rel="stylesheet" href="/tests/SimpleTest/test.css">
</head>
<body>
<script type="text/javascript">
"use strict";
add_task(async function setup() {
await SpecialPowers.pushPrefEnv({
@@ -94,17 +93,17 @@ add_task(async function test_badRequestU
let extension = ExtensionTestUtils.loadExtension({
manifest: {
"permissions": [
"identity",
"https://example.com/",
],
},
async background() {
- let base_uri = "https://example.com/chrome/toolkit/components/extensions/test/mochitest/";
+ let base_uri = "https://example.com/tests/toolkit/components/extensions/test/mochitest/";
let url = `${base_uri}?redirect_uri=badrobot}`;
await browser.test.assertRejects(browser.identity.launchWebAuthFlow({interactive: true, url}),
"redirect_uri is invalid", "invalid redirect url");
browser.test.sendMessage("done");
},
});
await extension.startup();
@@ -116,32 +115,32 @@ add_task(async function test_otherRedire
let extension = ExtensionTestUtils.loadExtension({
manifest: {
"permissions": [
"identity",
"https://example.com/",
],
},
async background() {
- let base_uri = "https://example.com/chrome/toolkit/components/extensions/test/mochitest/";
+ let base_uri = "https://example.com/tests/toolkit/components/extensions/test/mochitest/";
let url = `${base_uri}?redirect_uri=https://somesite.com/redirect`;
await browser.test.assertRejects(browser.identity.launchWebAuthFlow({interactive: false, url}),
"Requires user interaction", "alternate redirect_uri ok");
browser.test.sendMessage("done");
},
});
await extension.startup();
await extension.awaitMessage("done");
await extension.unload();
});
function background_launchWebAuthFlow(interactive, path, redirect = true) {
let expected_redirect = "https://35b64b676900f491c00e7f618d43f7040e88422e.example.com/identity_cb";
- let base_uri = "https://example.com/chrome/toolkit/components/extensions/test/mochitest/";
+ let base_uri = "https://example.com/tests/toolkit/components/extensions/test/mochitest/";
let redirect_uri = browser.identity.getRedirectURL("/identity_cb");
browser.test.assertEq(expected_redirect, redirect_uri, "expected redirect uri matches hash");
let url = `${base_uri}${path}?redirect_uri=${encodeURIComponent(redirect_uri)}`;
if (!redirect) {
url = `${url}&no_redirect=1`;
}
// Ensure we do not start the actual request for the redirect url.