From 5f8de423f190bbb79a62f804151bc24824fa32d8 Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Fri, 2 Feb 2018 04:16:08 -0500 Subject: Add m-esr52 at 52.6.0 --- .../extensions/test/mochitest/.eslintrc.js | 35 ++ .../extensions/test/mochitest/chrome.ini | 35 ++ .../extensions/test/mochitest/chrome_head.js | 12 + .../test/mochitest/file_WebNavigation_page1.html | 12 + .../test/mochitest/file_WebNavigation_page2.html | 7 + .../test/mochitest/file_WebNavigation_page3.html | 9 + .../test/mochitest/file_WebRequest_page3.html | 11 + .../extensions/test/mochitest/file_csp.html | 14 + .../test/mochitest/file_csp.html^headers^ | 1 + .../test/mochitest/file_ext_test_api_injection.js | 12 + .../extensions/test/mochitest/file_image_bad.png | Bin 0 -> 5401 bytes .../extensions/test/mochitest/file_image_good.png | Bin 0 -> 580 bytes .../test/mochitest/file_image_redirect.png | Bin 0 -> 5401 bytes .../extensions/test/mochitest/file_mixed.html | 13 + .../test/mochitest/file_permission_xhr.html | 55 ++ .../test/mochitest/file_privilege_escalation.html | 13 + .../extensions/test/mochitest/file_sample.html | 12 + .../extensions/test/mochitest/file_script_bad.js | 3 + .../extensions/test/mochitest/file_script_good.js | 3 + .../test/mochitest/file_script_redirect.js | 4 + .../extensions/test/mochitest/file_script_xhr.js | 5 + .../extensions/test/mochitest/file_style_bad.css | 3 + .../extensions/test/mochitest/file_style_good.css | 3 + .../test/mochitest/file_style_redirect.css | 3 + .../test/mochitest/file_teardown_test.js | 24 + .../file_webNavigation_clientRedirect.html | 9 + ...e_webNavigation_clientRedirect_httpHeaders.html | 8 + ...gation_clientRedirect_httpHeaders.html^headers^ | 1 + .../file_webNavigation_frameClientRedirect.html | 12 + .../file_webNavigation_frameRedirect.html | 12 + .../file_webNavigation_manualSubframe.html | 12 + .../file_webNavigation_manualSubframe_page1.html | 8 + .../file_webNavigation_manualSubframe_page2.html | 7 + .../test/mochitest/file_with_about_blank.html | 10 + .../components/extensions/test/mochitest/head.js | 13 + .../extensions/test/mochitest/head_cookies.js | 167 ++++++ .../extensions/test/mochitest/head_webrequest.js | 331 ++++++++++++ .../extensions/test/mochitest/mochitest.ini | 114 +++++ .../extensions/test/mochitest/redirection.sjs | 4 + .../extensions/test/mochitest/return_headers.sjs | 20 + .../test_chrome_ext_background_debug_global.html | 166 ++++++ .../mochitest/test_chrome_ext_background_page.html | 84 ++++ ...ext_contentscript_unrecognizedprop_warning.html | 80 +++ .../test_chrome_ext_downloads_saveAs.html | 68 +++ .../test_chrome_ext_eventpage_warning.html | 106 ++++ .../mochitest/test_chrome_ext_hybrid_addons.html | 141 ++++++ .../test/mochitest/test_chrome_ext_idle.html | 64 +++ .../test_chrome_ext_shutdown_cleanup.html | 50 ++ .../mochitest/test_chrome_ext_storage_cleanup.html | 164 ++++++ .../test_chrome_ext_trustworthy_origin.html | 53 ++ ...est_chrome_ext_webnavigation_resolved_urls.html | 83 +++ ...st_chrome_ext_webrequest_background_events.html | 96 ++++ .../test_chrome_native_messaging_paths.html | 61 +++ .../extensions/test/mochitest/test_clipboard.html | 140 ++++++ .../extensions/test/mochitest/test_ext_all_apis.js | 158 ++++++ .../test_ext_background_api_injection.html | 46 ++ .../test/mochitest/test_ext_background_canvas.html | 47 ++ .../test_ext_background_generated_url.html | 47 ++ .../mochitest/test_ext_background_teardown.html | 76 +++ .../test_ext_content_security_policy.html | 162 ++++++ .../test/mochitest/test_ext_contentscript.html | 116 +++++ .../test_ext_contentscript_about_blank.html | 117 +++++ .../test_ext_contentscript_api_injection.html | 88 ++++ .../test_ext_contentscript_async_loading.html | 54 ++ .../mochitest/test_ext_contentscript_context.html | 81 +++ .../test_ext_contentscript_create_iframe.html | 165 ++++++ .../test/mochitest/test_ext_contentscript_css.html | 48 ++ .../test_ext_contentscript_devtools_metadata.html | 81 +++ .../test_ext_contentscript_exporthelpers.html | 95 ++++ .../test_ext_contentscript_incognito.html | 89 ++++ .../test_ext_contentscript_permission.html | 59 +++ .../mochitest/test_ext_contentscript_teardown.html | 96 ++++ .../test/mochitest/test_ext_cookies.html | 234 +++++++++ .../mochitest/test_ext_cookies_containers.html | 93 ++++ .../test/mochitest/test_ext_cookies_expiry.html | 72 +++ .../test_ext_cookies_permissions_bad.html | 112 +++++ .../test_ext_cookies_permissions_good.html | 86 ++++ .../mochitest/test_ext_exclude_include_globs.html | 92 ++++ .../test/mochitest/test_ext_generate.html | 49 ++ .../extensions/test/mochitest/test_ext_geturl.html | 72 +++ .../extensions/test/mochitest/test_ext_i18n.html | 432 ++++++++++++++++ .../test/mochitest/test_ext_i18n_css.html | 116 +++++ .../test_ext_inIncognitoContext_window.html | 49 ++ .../test/mochitest/test_ext_jsversion.html | 86 ++++ .../test/mochitest/test_ext_listener_proxies.html | 63 +++ .../test/mochitest/test_ext_notifications.html | 224 +++++++++ .../test/mochitest/test_ext_permission_xhr.html | 119 +++++ .../test/mochitest/test_ext_runtime_connect.html | 83 +++ .../test/mochitest/test_ext_runtime_connect2.html | 103 ++++ .../mochitest/test_ext_runtime_connect_twoway.html | 127 +++++ .../mochitest/test_ext_runtime_disconnect.html | 78 +++ .../test/mochitest/test_ext_runtime_id.html | 61 +++ .../test/mochitest/test_ext_sandbox_var.html | 60 +++ .../extensions/test/mochitest/test_ext_schema.html | 73 +++ .../test_ext_sendmessage_doublereply.html | 101 ++++ .../test_ext_sendmessage_no_receiver.html | 83 +++ .../test/mochitest/test_ext_sendmessage_reply.html | 79 +++ .../mochitest/test_ext_sendmessage_reply2.html | 93 ++++ .../test/mochitest/test_ext_storage_content.html | 330 ++++++++++++ .../test/mochitest/test_ext_storage_tab.html | 118 +++++ .../mochitest/test_ext_subframes_privileges.html | 202 ++++++++ .../test/mochitest/test_ext_tab_teardown.html | 150 ++++++ .../extensions/test/mochitest/test_ext_test.html | 191 +++++++ .../test/mochitest/test_ext_unload_frame.html | 170 +++++++ .../test_ext_web_accessible_resources.html | 353 +++++++++++++ .../test/mochitest/test_ext_webnavigation.html | 559 +++++++++++++++++++++ .../mochitest/test_ext_webnavigation_filters.html | 308 ++++++++++++ .../test_ext_webrequest_background_events.html | 116 +++++ .../test/mochitest/test_ext_webrequest_basic.html | 327 ++++++++++++ .../mochitest/test_ext_webrequest_suspend.html | 216 ++++++++ .../test/mochitest/test_ext_webrequest_upload.html | 199 ++++++++ .../mochitest/test_ext_window_postMessage.html | 105 ++++ .../test/mochitest/test_ext_xhr_capabilities.html | 86 ++++ .../test/mochitest/webrequest_chromeworker.js | 8 + .../extensions/test/mochitest/webrequest_test.jsm | 22 + .../extensions/test/mochitest/webrequest_worker.js | 3 + 116 files changed, 10301 insertions(+) create mode 100644 toolkit/components/extensions/test/mochitest/.eslintrc.js create mode 100644 toolkit/components/extensions/test/mochitest/chrome.ini create mode 100644 toolkit/components/extensions/test/mochitest/chrome_head.js create mode 100644 toolkit/components/extensions/test/mochitest/file_WebNavigation_page1.html create mode 100644 toolkit/components/extensions/test/mochitest/file_WebNavigation_page2.html create mode 100644 toolkit/components/extensions/test/mochitest/file_WebNavigation_page3.html create mode 100644 toolkit/components/extensions/test/mochitest/file_WebRequest_page3.html create mode 100644 toolkit/components/extensions/test/mochitest/file_csp.html create mode 100644 toolkit/components/extensions/test/mochitest/file_csp.html^headers^ create mode 100644 toolkit/components/extensions/test/mochitest/file_ext_test_api_injection.js create mode 100644 toolkit/components/extensions/test/mochitest/file_image_bad.png create mode 100644 toolkit/components/extensions/test/mochitest/file_image_good.png create mode 100644 toolkit/components/extensions/test/mochitest/file_image_redirect.png create mode 100644 toolkit/components/extensions/test/mochitest/file_mixed.html create mode 100644 toolkit/components/extensions/test/mochitest/file_permission_xhr.html create mode 100644 toolkit/components/extensions/test/mochitest/file_privilege_escalation.html create mode 100644 toolkit/components/extensions/test/mochitest/file_sample.html create mode 100644 toolkit/components/extensions/test/mochitest/file_script_bad.js create mode 100644 toolkit/components/extensions/test/mochitest/file_script_good.js create mode 100644 toolkit/components/extensions/test/mochitest/file_script_redirect.js create mode 100644 toolkit/components/extensions/test/mochitest/file_script_xhr.js create mode 100644 toolkit/components/extensions/test/mochitest/file_style_bad.css create mode 100644 toolkit/components/extensions/test/mochitest/file_style_good.css create mode 100644 toolkit/components/extensions/test/mochitest/file_style_redirect.css create mode 100644 toolkit/components/extensions/test/mochitest/file_teardown_test.js create mode 100644 toolkit/components/extensions/test/mochitest/file_webNavigation_clientRedirect.html create mode 100644 toolkit/components/extensions/test/mochitest/file_webNavigation_clientRedirect_httpHeaders.html create mode 100644 toolkit/components/extensions/test/mochitest/file_webNavigation_clientRedirect_httpHeaders.html^headers^ create mode 100644 toolkit/components/extensions/test/mochitest/file_webNavigation_frameClientRedirect.html create mode 100644 toolkit/components/extensions/test/mochitest/file_webNavigation_frameRedirect.html create mode 100644 toolkit/components/extensions/test/mochitest/file_webNavigation_manualSubframe.html create mode 100644 toolkit/components/extensions/test/mochitest/file_webNavigation_manualSubframe_page1.html create mode 100644 toolkit/components/extensions/test/mochitest/file_webNavigation_manualSubframe_page2.html create mode 100644 toolkit/components/extensions/test/mochitest/file_with_about_blank.html create mode 100644 toolkit/components/extensions/test/mochitest/head.js create mode 100644 toolkit/components/extensions/test/mochitest/head_cookies.js create mode 100644 toolkit/components/extensions/test/mochitest/head_webrequest.js create mode 100644 toolkit/components/extensions/test/mochitest/mochitest.ini create mode 100644 toolkit/components/extensions/test/mochitest/redirection.sjs create mode 100644 toolkit/components/extensions/test/mochitest/return_headers.sjs create mode 100644 toolkit/components/extensions/test/mochitest/test_chrome_ext_background_debug_global.html create mode 100644 toolkit/components/extensions/test/mochitest/test_chrome_ext_background_page.html create mode 100644 toolkit/components/extensions/test/mochitest/test_chrome_ext_contentscript_unrecognizedprop_warning.html create mode 100644 toolkit/components/extensions/test/mochitest/test_chrome_ext_downloads_saveAs.html create mode 100644 toolkit/components/extensions/test/mochitest/test_chrome_ext_eventpage_warning.html create mode 100644 toolkit/components/extensions/test/mochitest/test_chrome_ext_hybrid_addons.html create mode 100644 toolkit/components/extensions/test/mochitest/test_chrome_ext_idle.html create mode 100644 toolkit/components/extensions/test/mochitest/test_chrome_ext_shutdown_cleanup.html create mode 100644 toolkit/components/extensions/test/mochitest/test_chrome_ext_storage_cleanup.html create mode 100644 toolkit/components/extensions/test/mochitest/test_chrome_ext_trustworthy_origin.html create mode 100644 toolkit/components/extensions/test/mochitest/test_chrome_ext_webnavigation_resolved_urls.html create mode 100644 toolkit/components/extensions/test/mochitest/test_chrome_ext_webrequest_background_events.html create mode 100644 toolkit/components/extensions/test/mochitest/test_chrome_native_messaging_paths.html create mode 100644 toolkit/components/extensions/test/mochitest/test_clipboard.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_all_apis.js create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_background_api_injection.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_background_canvas.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_background_generated_url.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_background_teardown.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_content_security_policy.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_contentscript.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_contentscript_about_blank.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_contentscript_api_injection.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_contentscript_async_loading.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_contentscript_context.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_contentscript_create_iframe.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_contentscript_css.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_contentscript_devtools_metadata.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_contentscript_exporthelpers.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_contentscript_incognito.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_contentscript_permission.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_contentscript_teardown.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_cookies.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_cookies_containers.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_cookies_expiry.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_cookies_permissions_bad.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_cookies_permissions_good.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_exclude_include_globs.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_generate.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_geturl.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_i18n.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_i18n_css.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_inIncognitoContext_window.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_jsversion.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_listener_proxies.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_notifications.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_permission_xhr.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_runtime_connect.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_runtime_connect2.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_runtime_connect_twoway.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_runtime_disconnect.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_runtime_id.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_sandbox_var.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_schema.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_sendmessage_doublereply.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_sendmessage_no_receiver.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_sendmessage_reply.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_sendmessage_reply2.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_storage_content.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_storage_tab.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_subframes_privileges.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_tab_teardown.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_test.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_unload_frame.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_web_accessible_resources.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_webnavigation.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_webnavigation_filters.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_webrequest_background_events.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_webrequest_basic.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_webrequest_suspend.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_webrequest_upload.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_window_postMessage.html create mode 100644 toolkit/components/extensions/test/mochitest/test_ext_xhr_capabilities.html create mode 100644 toolkit/components/extensions/test/mochitest/webrequest_chromeworker.js create mode 100644 toolkit/components/extensions/test/mochitest/webrequest_test.jsm create mode 100644 toolkit/components/extensions/test/mochitest/webrequest_worker.js (limited to 'toolkit/components/extensions/test/mochitest') diff --git a/toolkit/components/extensions/test/mochitest/.eslintrc.js b/toolkit/components/extensions/test/mochitest/.eslintrc.js new file mode 100644 index 000000000..53938410b --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/.eslintrc.js @@ -0,0 +1,35 @@ +"use strict"; + +module.exports = { // eslint-disable-line no-undef + "extends": "../../../../../testing/mochitest/mochitest.eslintrc.js", + + "env": { + "webextensions": true, + }, + + "globals": { + "ChromeWorker": false, + "onmessage": true, + "sendAsyncMessage": false, + + "waitForLoad": true, + "promiseConsoleOutput": true, + + "ExtensionTestUtils": false, + "NetUtil": true, + "webrequest_test": false, + "XPCOMUtils": true, + + // head_webrequest.js symbols + "addStylesheet": true, + "addLink": true, + "addImage": true, + "addScript": true, + "addFrame": true, + "makeExtension": false, + }, + + "rules": { + "no-shadow": 0, + }, +}; diff --git a/toolkit/components/extensions/test/mochitest/chrome.ini b/toolkit/components/extensions/test/mochitest/chrome.ini new file mode 100644 index 000000000..26585cad7 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/chrome.ini @@ -0,0 +1,35 @@ +[DEFAULT] +support-files = + chrome_head.js + head.js + head_cookies.js + file_sample.html + webrequest_chromeworker.js + webrequest_test.jsm +tags = webextensions + +[test_chrome_ext_background_debug_global.html] +skip-if = (os == 'android') # android doesn't have devtools +[test_chrome_ext_background_page.html] +skip-if = (toolkit == 'android') # android doesn't have devtools +[test_chrome_ext_eventpage_warning.html] +[test_chrome_ext_contentscript_unrecognizedprop_warning.html] +skip-if = (os == 'android') # browser.tabs is undefined. Bug 1258975 on android. +[test_chrome_ext_hybrid_addons.html] +[test_chrome_ext_trustworthy_origin.html] +[test_chrome_ext_webnavigation_resolved_urls.html] +skip-if = (os == 'android') # browser.tabs is undefined. Bug 1258975 on android. +[test_chrome_ext_shutdown_cleanup.html] +[test_chrome_native_messaging_paths.html] +skip-if = os != "mac" && os != "linux" +[test_ext_cookies_expiry.html] +[test_ext_cookies_permissions_bad.html] +[test_ext_cookies_permissions_good.html] +[test_ext_cookies_containers.html] +[test_ext_jsversion.html] +[test_ext_schema.html] +[test_chrome_ext_storage_cleanup.html] +[test_chrome_ext_idle.html] +[test_chrome_ext_downloads_saveAs.html] +[test_chrome_ext_webrequest_background_events.html] +skip-if = os == 'android' # webrequest api unsupported (bug 1258975). diff --git a/toolkit/components/extensions/test/mochitest/chrome_head.js b/toolkit/components/extensions/test/mochitest/chrome_head.js new file mode 100644 index 000000000..da2f53a02 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/chrome_head.js @@ -0,0 +1,12 @@ +"use strict"; + +const { + classes: Cc, + interfaces: Ci, + utils: Cu, + results: Cr, +} = Components; + +Cu.import("resource://gre/modules/Services.jsm"); +Cu.import("resource://gre/modules/NetUtil.jsm"); + diff --git a/toolkit/components/extensions/test/mochitest/file_WebNavigation_page1.html b/toolkit/components/extensions/test/mochitest/file_WebNavigation_page1.html new file mode 100644 index 000000000..663ebc611 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_WebNavigation_page1.html @@ -0,0 +1,12 @@ + + + + + + + +
+
+ + + diff --git a/toolkit/components/extensions/test/mochitest/file_WebNavigation_page2.html b/toolkit/components/extensions/test/mochitest/file_WebNavigation_page2.html new file mode 100644 index 000000000..cc1acc83d --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_WebNavigation_page2.html @@ -0,0 +1,7 @@ + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/file_WebNavigation_page3.html b/toolkit/components/extensions/test/mochitest/file_WebNavigation_page3.html new file mode 100644 index 000000000..a0a26a2e9 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_WebNavigation_page3.html @@ -0,0 +1,9 @@ + + + + + +click me + + + diff --git a/toolkit/components/extensions/test/mochitest/file_WebRequest_page3.html b/toolkit/components/extensions/test/mochitest/file_WebRequest_page3.html new file mode 100644 index 000000000..5807dd439 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_WebRequest_page3.html @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/file_csp.html b/toolkit/components/extensions/test/mochitest/file_csp.html new file mode 100644 index 000000000..206e44390 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_csp.html @@ -0,0 +1,14 @@ + + + + + + + + +
Sample text
+ + + + + diff --git a/toolkit/components/extensions/test/mochitest/file_csp.html^headers^ b/toolkit/components/extensions/test/mochitest/file_csp.html^headers^ new file mode 100644 index 000000000..4c6fa3c26 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_csp.html^headers^ @@ -0,0 +1 @@ +Content-Security-Policy: default-src 'self' diff --git a/toolkit/components/extensions/test/mochitest/file_ext_test_api_injection.js b/toolkit/components/extensions/test/mochitest/file_ext_test_api_injection.js new file mode 100644 index 000000000..06dfae65e --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_ext_test_api_injection.js @@ -0,0 +1,12 @@ +"use strict"; + +var {interfaces: Ci} = Components; + +Components.utils.import("resource://gre/modules/Services.jsm"); + +Services.console.registerListener(function listener(message) { + if (/WebExt Privilege Escalation/.test(message.message)) { + Services.console.unregisterListener(listener); + sendAsyncMessage("console-message", {message: message.message}); + } +}); diff --git a/toolkit/components/extensions/test/mochitest/file_image_bad.png b/toolkit/components/extensions/test/mochitest/file_image_bad.png new file mode 100644 index 000000000..4c3be5084 Binary files /dev/null and b/toolkit/components/extensions/test/mochitest/file_image_bad.png differ diff --git a/toolkit/components/extensions/test/mochitest/file_image_good.png b/toolkit/components/extensions/test/mochitest/file_image_good.png new file mode 100644 index 000000000..769c63634 Binary files /dev/null and b/toolkit/components/extensions/test/mochitest/file_image_good.png differ diff --git a/toolkit/components/extensions/test/mochitest/file_image_redirect.png b/toolkit/components/extensions/test/mochitest/file_image_redirect.png new file mode 100644 index 000000000..4c3be5084 Binary files /dev/null and b/toolkit/components/extensions/test/mochitest/file_image_redirect.png differ diff --git a/toolkit/components/extensions/test/mochitest/file_mixed.html b/toolkit/components/extensions/test/mochitest/file_mixed.html new file mode 100644 index 000000000..f3c7dda58 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_mixed.html @@ -0,0 +1,13 @@ + + + + + + + + +
Sample text
+ + + + diff --git a/toolkit/components/extensions/test/mochitest/file_permission_xhr.html b/toolkit/components/extensions/test/mochitest/file_permission_xhr.html new file mode 100644 index 000000000..22a55f90d --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_permission_xhr.html @@ -0,0 +1,55 @@ + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/file_privilege_escalation.html b/toolkit/components/extensions/test/mochitest/file_privilege_escalation.html new file mode 100644 index 000000000..258f7058d --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_privilege_escalation.html @@ -0,0 +1,13 @@ + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/file_sample.html b/toolkit/components/extensions/test/mochitest/file_sample.html new file mode 100644 index 000000000..a20e49a1f --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_sample.html @@ -0,0 +1,12 @@ + + + + + + + + +
Sample text
+ + + diff --git a/toolkit/components/extensions/test/mochitest/file_script_bad.js b/toolkit/components/extensions/test/mochitest/file_script_bad.js new file mode 100644 index 000000000..c425122c7 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_script_bad.js @@ -0,0 +1,3 @@ +"use strict"; + +window.failure = true; diff --git a/toolkit/components/extensions/test/mochitest/file_script_good.js b/toolkit/components/extensions/test/mochitest/file_script_good.js new file mode 100644 index 000000000..1848edf68 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_script_good.js @@ -0,0 +1,3 @@ +"use strict"; + +window.success = window.success ? window.success + 1 : 1; diff --git a/toolkit/components/extensions/test/mochitest/file_script_redirect.js b/toolkit/components/extensions/test/mochitest/file_script_redirect.js new file mode 100644 index 000000000..c89a196c2 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_script_redirect.js @@ -0,0 +1,4 @@ +"use strict"; + +window.failure = true; + diff --git a/toolkit/components/extensions/test/mochitest/file_script_xhr.js b/toolkit/components/extensions/test/mochitest/file_script_xhr.js new file mode 100644 index 000000000..07f80eb2e --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_script_xhr.js @@ -0,0 +1,5 @@ +"use strict"; + +var request = new XMLHttpRequest(); +request.open("get", "http://mochi.test:8888/tests/toolkit/components/extensions/test/mochitest/xhr_resource", false); +request.send(); diff --git a/toolkit/components/extensions/test/mochitest/file_style_bad.css b/toolkit/components/extensions/test/mochitest/file_style_bad.css new file mode 100644 index 000000000..8dbc8dc7a --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_style_bad.css @@ -0,0 +1,3 @@ +#test { + color: green !important; +} diff --git a/toolkit/components/extensions/test/mochitest/file_style_good.css b/toolkit/components/extensions/test/mochitest/file_style_good.css new file mode 100644 index 000000000..46f9774b5 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_style_good.css @@ -0,0 +1,3 @@ +#test { + color: red; +} diff --git a/toolkit/components/extensions/test/mochitest/file_style_redirect.css b/toolkit/components/extensions/test/mochitest/file_style_redirect.css new file mode 100644 index 000000000..8dbc8dc7a --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_style_redirect.css @@ -0,0 +1,3 @@ +#test { + color: green !important; +} diff --git a/toolkit/components/extensions/test/mochitest/file_teardown_test.js b/toolkit/components/extensions/test/mochitest/file_teardown_test.js new file mode 100644 index 000000000..7246012ad --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_teardown_test.js @@ -0,0 +1,24 @@ +"use strict"; + +/* globals addMessageListener */ +let {Management} = Components.utils.import("resource://gre/modules/Extension.jsm", {}); +let events = []; +function record(type, extensionContext) { + let eventType = type == "proxy-context-load" ? "load" : "unload"; + let url = extensionContext.uri.spec; + let extensionId = extensionContext.extension.id; + events.push({eventType, url, extensionId}); +} + +Management.on("proxy-context-load", record); +Management.on("proxy-context-unload", record); +addMessageListener("cleanup", () => { + Management.off("proxy-context-load", record); + Management.off("proxy-context-unload", record); +}); + +addMessageListener("get-context-events", extensionId => { + sendAsyncMessage("context-events", events); + events = []; +}); +sendAsyncMessage("chromescript-startup"); diff --git a/toolkit/components/extensions/test/mochitest/file_webNavigation_clientRedirect.html b/toolkit/components/extensions/test/mochitest/file_webNavigation_clientRedirect.html new file mode 100644 index 000000000..cba3043f7 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_webNavigation_clientRedirect.html @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/file_webNavigation_clientRedirect_httpHeaders.html b/toolkit/components/extensions/test/mochitest/file_webNavigation_clientRedirect_httpHeaders.html new file mode 100644 index 000000000..c5b436979 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_webNavigation_clientRedirect_httpHeaders.html @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/file_webNavigation_clientRedirect_httpHeaders.html^headers^ b/toolkit/components/extensions/test/mochitest/file_webNavigation_clientRedirect_httpHeaders.html^headers^ new file mode 100644 index 000000000..574a392a1 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_webNavigation_clientRedirect_httpHeaders.html^headers^ @@ -0,0 +1 @@ +Refresh: 1;url=dummy_page.html diff --git a/toolkit/components/extensions/test/mochitest/file_webNavigation_frameClientRedirect.html b/toolkit/components/extensions/test/mochitest/file_webNavigation_frameClientRedirect.html new file mode 100644 index 000000000..d360bcbb1 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_webNavigation_frameClientRedirect.html @@ -0,0 +1,12 @@ + + + + + + + +
+
+ + + diff --git a/toolkit/components/extensions/test/mochitest/file_webNavigation_frameRedirect.html b/toolkit/components/extensions/test/mochitest/file_webNavigation_frameRedirect.html new file mode 100644 index 000000000..06dbd4374 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_webNavigation_frameRedirect.html @@ -0,0 +1,12 @@ + + + + + + + +
+
+ + + diff --git a/toolkit/components/extensions/test/mochitest/file_webNavigation_manualSubframe.html b/toolkit/components/extensions/test/mochitest/file_webNavigation_manualSubframe.html new file mode 100644 index 000000000..307990714 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_webNavigation_manualSubframe.html @@ -0,0 +1,12 @@ + + + + + + + +
+
+ + + diff --git a/toolkit/components/extensions/test/mochitest/file_webNavigation_manualSubframe_page1.html b/toolkit/components/extensions/test/mochitest/file_webNavigation_manualSubframe_page1.html new file mode 100644 index 000000000..55bb7aa6a --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_webNavigation_manualSubframe_page1.html @@ -0,0 +1,8 @@ + + + + +

page1

+ page2 + + diff --git a/toolkit/components/extensions/test/mochitest/file_webNavigation_manualSubframe_page2.html b/toolkit/components/extensions/test/mochitest/file_webNavigation_manualSubframe_page2.html new file mode 100644 index 000000000..8f589f8bb --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_webNavigation_manualSubframe_page2.html @@ -0,0 +1,7 @@ + + + + +

page2

+ + diff --git a/toolkit/components/extensions/test/mochitest/file_with_about_blank.html b/toolkit/components/extensions/test/mochitest/file_with_about_blank.html new file mode 100644 index 000000000..af51c2e52 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/file_with_about_blank.html @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/head.js b/toolkit/components/extensions/test/mochitest/head.js new file mode 100644 index 000000000..1b1a29472 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/head.js @@ -0,0 +1,13 @@ +"use strict"; + +/* exported waitForLoad */ + +function waitForLoad(win) { + return new Promise(resolve => { + win.addEventListener("load", function listener() { + win.removeEventListener("load", listener, true); + resolve(); + }, true); + }); +} + diff --git a/toolkit/components/extensions/test/mochitest/head_cookies.js b/toolkit/components/extensions/test/mochitest/head_cookies.js new file mode 100644 index 000000000..9f6966551 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/head_cookies.js @@ -0,0 +1,167 @@ +/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set sts=2 sw=2 et tw=80: */ +"use strict"; + +/* exported testCookies */ + +function* testCookies(options) { + // Changing the options object is a bit of a hack, but it allows us to easily + // pass an expiration date to the background script. + options.expiry = Date.now() / 1000 + 3600; + + async function background(backgroundOptions) { + // Ask the parent scope to change some cookies we may or may not have + // permission for. + let awaitChanges = new Promise(resolve => { + browser.test.onMessage.addListener(msg => { + browser.test.assertEq("cookies-changed", msg, "browser.test.onMessage"); + resolve(); + }); + }); + + let changed = []; + browser.cookies.onChanged.addListener(event => { + changed.push(`${event.cookie.name}:${event.cause}`); + }); + browser.test.sendMessage("change-cookies"); + + + // Try to access some cookies in various ways. + let {url, domain, secure} = backgroundOptions; + + let failures = 0; + let tallyFailure = error => { + failures++; + }; + + try { + await awaitChanges; + + let cookie = await browser.cookies.get({url, name: "foo"}); + browser.test.assertEq(backgroundOptions.shouldPass, cookie != null, "should pass == get cookie"); + + let cookies = await browser.cookies.getAll({domain}); + if (backgroundOptions.shouldPass) { + browser.test.assertEq(2, cookies.length, "expected number of cookies"); + } else { + browser.test.assertEq(0, cookies.length, "expected number of cookies"); + } + + await Promise.all([ + browser.cookies.set({url, domain, secure, name: "foo", "value": "baz", expirationDate: backgroundOptions.expiry}).catch(tallyFailure), + browser.cookies.set({url, domain, secure, name: "bar", "value": "quux", expirationDate: backgroundOptions.expiry}).catch(tallyFailure), + browser.cookies.remove({url, name: "deleted"}), + ]); + + if (backgroundOptions.shouldPass) { + // The order of eviction events isn't guaranteed, so just check that + // it's there somewhere. + let evicted = changed.indexOf("evicted:evicted"); + if (evicted < 0) { + browser.test.fail("got no eviction event"); + } else { + browser.test.succeed("got eviction event"); + changed.splice(evicted, 1); + } + + browser.test.assertEq("x:explicit,x:overwrite,x:explicit,x:explicit,foo:overwrite,foo:explicit,bar:explicit,deleted:explicit", + changed.join(","), "expected changes"); + } else { + browser.test.assertEq("", changed.join(","), "expected no changes"); + } + + if (!(backgroundOptions.shouldPass || backgroundOptions.shouldWrite)) { + browser.test.assertEq(2, failures, "Expected failures"); + } else { + browser.test.assertEq(0, failures, "Expected no failures"); + } + + browser.test.notifyPass("cookie-permissions"); + } catch (error) { + browser.test.fail(`Error: ${error} :: ${error.stack}`); + browser.test.notifyFail("cookie-permissions"); + } + } + + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + "permissions": options.permissions, + }, + + background: `(${background})(${JSON.stringify(options)})`, + }); + + + let cookieSvc = SpecialPowers.Services.cookies; + + let domain = options.domain.replace(/^\.?/, "."); + + // This will be evicted after we add a fourth cookie. + cookieSvc.add(domain, "/", "evicted", "bar", options.secure, false, false, options.expiry); + // This will be modified by the background script. + cookieSvc.add(domain, "/", "foo", "bar", options.secure, false, false, options.expiry); + // This will be deleted by the background script. + cookieSvc.add(domain, "/", "deleted", "bar", options.secure, false, false, options.expiry); + + + yield extension.startup(); + + yield extension.awaitMessage("change-cookies"); + cookieSvc.add(domain, "/", "x", "y", options.secure, false, false, options.expiry); + cookieSvc.add(domain, "/", "x", "z", options.secure, false, false, options.expiry); + cookieSvc.remove(domain, "x", "/", false, {}); + extension.sendMessage("cookies-changed"); + + yield extension.awaitFinish("cookie-permissions"); + yield extension.unload(); + + + function getCookies(host) { + let cookies = []; + let enum_ = cookieSvc.getCookiesFromHost(host, {}); + while (enum_.hasMoreElements()) { + cookies.push(enum_.getNext().QueryInterface(SpecialPowers.Ci.nsICookie2)); + } + return cookies.sort((a, b) => String.localeCompare(a.name, b.name)); + } + + let cookies = getCookies(options.domain); + info(`Cookies: ${cookies.map(c => `${c.name}=${c.value}`)}`); + + if (options.shouldPass) { + is(cookies.length, 2, "expected two cookies for host"); + + is(cookies[0].name, "bar", "correct cookie name"); + is(cookies[0].value, "quux", "correct cookie value"); + + is(cookies[1].name, "foo", "correct cookie name"); + is(cookies[1].value, "baz", "correct cookie value"); + } else if (options.shouldWrite) { + // Note: |shouldWrite| applies only when |shouldPass| is false. + // This is necessary because, unfortunately, websites (and therefore web + // extensions) are allowed to write some cookies which they're not allowed + // to read. + is(cookies.length, 3, "expected three cookies for host"); + + is(cookies[0].name, "bar", "correct cookie name"); + is(cookies[0].value, "quux", "correct cookie value"); + + is(cookies[1].name, "deleted", "correct cookie name"); + + is(cookies[2].name, "foo", "correct cookie name"); + is(cookies[2].value, "baz", "correct cookie value"); + } else { + is(cookies.length, 2, "expected two cookies for host"); + + is(cookies[0].name, "deleted", "correct second cookie name"); + + is(cookies[1].name, "foo", "correct cookie name"); + is(cookies[1].value, "bar", "correct cookie value"); + } + + for (let cookie of cookies) { + cookieSvc.remove(cookie.host, cookie.name, "/", false, {}); + } + // Make sure we don't silently poison subsequent tests if something goes wrong. + is(getCookies(options.domain).length, 0, "cookies cleared"); +} diff --git a/toolkit/components/extensions/test/mochitest/head_webrequest.js b/toolkit/components/extensions/test/mochitest/head_webrequest.js new file mode 100644 index 000000000..96924e505 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/head_webrequest.js @@ -0,0 +1,331 @@ +"use strict"; + +let commonEvents = { + "onBeforeRequest": [{urls: [""]}, ["blocking"]], + "onBeforeSendHeaders": [{urls: [""]}, ["blocking", "requestHeaders"]], + "onSendHeaders": [{urls: [""]}, ["requestHeaders"]], + "onBeforeRedirect": [{urls: [""]}], + "onHeadersReceived": [{urls: [""]}, ["blocking", "responseHeaders"]], + "onResponseStarted": [{urls: [""]}], + "onCompleted": [{urls: [""]}, ["responseHeaders"]], + "onErrorOccurred": [{urls: [""]}], +}; + +function background(events) { + let expect; + let ignore; + let defaultOrigin; + + browser.test.onMessage.addListener((msg, expected) => { + if (msg !== "set-expected") { + return; + } + expect = expected.expect; + defaultOrigin = expected.origin; + ignore = expected.ignore; + let promises = []; + // Initialize some stuff we'll need in the tests. + for (let entry of Object.values(expect)) { + // a place for the test infrastructure to store some state. + entry.test = {}; + // Each entry in expected gets a Promise that will be resolved in the + // last event for that entry. This will either be onCompleted, or the + // last entry if an events list was provided. + promises.push(new Promise(resolve => { entry.test.resolve = resolve; })); + // If events was left undefined, we're expecting all normal events we're + // listening for, exclude onBeforeRedirect and onErrorOccurred + if (entry.events === undefined) { + entry.events = Object.keys(events).filter(name => name != "onErrorOccurred" && name != "onBeforeRedirect"); + } + if (entry.optional_events === undefined) { + entry.optional_events = []; + } + } + // When every expected entry has finished our test is done. + Promise.all(promises).then(() => { + browser.test.sendMessage("done"); + }); + browser.test.sendMessage("continue"); + }); + + // Retrieve the per-file/test expected values. + function getExpected(details) { + let url = new URL(details.url); + let filename; + if (url.protocol == "data:") { + // pathname is everything after protocol. + filename = url.pathname; + } else { + filename = url.pathname.split("/").pop(); + } + if (ignore && ignore.includes(filename)) { + return; + } + let expected = expect[filename]; + if (!expected) { + browser.test.fail(`unexpected request ${filename}`); + return; + } + // Save filename for redirect verification. + expected.test.filename = filename; + return expected; + } + + // Process any test header modifications that can happen in request or response phases. + // If a test includes headers, it needs a complete header object, no undefined + // objects even if empty: + // request: { + // add: {"HeaderName": "value",}, + // modify: {"HeaderName": "value",}, + // remove: ["HeaderName",], + // }, + // response: { + // add: {"HeaderName": "value",}, + // modify: {"HeaderName": "value",}, + // remove: ["HeaderName",], + // }, + function processHeaders(phase, expected, details) { + // This should only happen once per phase [request|response]. + browser.test.assertFalse(!!expected.test[phase], `First processing of headers for ${phase}`); + expected.test[phase] = true; + + let headers = details[`${phase}Headers`]; + browser.test.assertTrue(Array.isArray(headers), `${phase}Headers array present`); + + let {add, modify, remove} = expected.headers[phase]; + + for (let name in add) { + browser.test.assertTrue(!headers.find(h => h.name === name), `header ${name} to be added not present yet in ${phase}Headers`); + let header = {name: name}; + if (name.endsWith("-binary")) { + header.binaryValue = Array.from(add[name], c => c.charCodeAt(0)); + } else { + header.value = add[name]; + } + headers.push(header); + } + + let modifiedAny = false; + for (let header of headers) { + if (header.name.toLowerCase() in modify) { + header.value = modify[header.name.toLowerCase()]; + modifiedAny = true; + } + } + browser.test.assertTrue(modifiedAny, `at least one ${phase}Headers element to modify`); + + let deletedAny = false; + for (let j = headers.length; j-- > 0;) { + if (remove.includes(headers[j].name.toLowerCase())) { + headers.splice(j, 1); + deletedAny = true; + } + } + browser.test.assertTrue(deletedAny, `at least one ${phase}Headers element to delete`); + + return headers; + } + + // phase is request or response. + function checkHeaders(phase, expected, details) { + if (!/^https?:/.test(details.url)) { + return; + } + + let headers = details[`${phase}Headers`]; + browser.test.assertTrue(Array.isArray(headers), `valid ${phase}Headers array`); + + let {add, modify, remove} = expected.headers[phase]; + for (let name in add) { + let value = headers.find(h => h.name.toLowerCase() === name.toLowerCase()).value; + browser.test.assertEq(value, add[name], `header ${name} correctly injected in ${phase}Headers`); + } + + for (let name in modify) { + let value = headers.find(h => h.name.toLowerCase() === name.toLowerCase()).value; + browser.test.assertEq(value, modify[name], `header ${name} matches modified value`); + } + + for (let name of remove) { + let found = headers.find(h => h.name.toLowerCase() === name.toLowerCase()); + browser.test.assertFalse(!!found, `deleted header ${name} still found in ${phase}Headers`); + } + } + + function getListener(name) { + return details => { + let result = {}; + browser.test.log(`${name} ${details.requestId} ${details.url}`); + let expected = getExpected(details); + if (!expected) { + return result; + } + let expectedEvent = expected.events[0] == name; + if (expectedEvent) { + expected.events.shift(); + } else { + expectedEvent = expected.optional_events[0] == name; + if (expectedEvent) { + expected.optional_events.shift(); + } + } + browser.test.assertTrue(expectedEvent, `received ${name}`); + browser.test.assertEq(expected.type, details.type, "resource type is correct"); + browser.test.assertEq(expected.origin || defaultOrigin, details.originUrl, "origin is correct"); + + if (name == "onBeforeRequest") { + // Save some values to test request consistency in later events. + browser.test.assertTrue(details.tabId !== undefined, `tabId ${details.tabId}`); + browser.test.assertTrue(details.requestId !== undefined, `requestId ${details.requestId}`); + // Validate requestId if it's already set, this happens with redirects. + if (expected.test.requestId !== undefined) { + browser.test.assertEq("string", typeof expected.test.requestId, `requestid ${expected.test.requestId} is string`); + browser.test.assertEq("string", typeof details.requestId, `requestid ${details.requestId} is string`); + browser.test.assertEq("number", typeof parseInt(details.requestId, 10), "parsed requestid is number"); + browser.test.assertNotEq(expected.test.requestId, details.requestId, + `last requestId ${expected.test.requestId} different from this one ${details.requestId}`); + } else { + // Save any values we want to validate in later events. + expected.test.requestId = details.requestId; + expected.test.tabId = details.tabId; + } + // Tests we don't need to do every event. + browser.test.assertTrue(details.type.toUpperCase() in browser.webRequest.ResourceType, `valid resource type ${details.type}`); + if (details.type == "main_frame") { + browser.test.assertEq(0, details.frameId, "frameId is zero when type is main_frame bug 1329299"); + } + } else { + // On events after onBeforeRequest, check the previous values. + browser.test.assertEq(expected.test.requestId, details.requestId, "correct requestId"); + browser.test.assertEq(expected.test.tabId, details.tabId, "correct tabId"); + } + if (name == "onBeforeSendHeaders") { + if (expected.headers && expected.headers.request) { + result.requestHeaders = processHeaders("request", expected, details); + } + if (expected.redirect) { + browser.test.log(`${name} redirect request`); + result.redirectUrl = details.url.replace(expected.test.filename, expected.redirect); + } + } + if (name == "onSendHeaders") { + if (expected.headers && expected.headers.request) { + checkHeaders("request", expected, details); + } + } + if (name == "onHeadersReceived") { + browser.test.assertEq(expected.status || 200, details.statusCode, + `expected HTTP status received for ${details.url}`); + if (expected.headers && expected.headers.response) { + result.responseHeaders = processHeaders("response", expected, details); + } + } + if (name == "onCompleted") { + // If we have already completed a GET request for this url, + // and it was found, we expect for the response to come fromCache. + // expected.cached may be undefined, force boolean. + let expectCached = !!expected.cached && details.method === "GET" && details.statusCode != 404; + browser.test.assertEq(expectCached, details.fromCache, "fromCache is correct"); + // We can only tell IPs for non-cached HTTP requests. + if (!details.fromCache && /^https?:/.test(details.url)) { + browser.test.assertEq("127.0.0.1", details.ip, `correct ip for ${details.url}`); + } + if (expected.headers && expected.headers.response) { + checkHeaders("response", expected, details); + } + } + + if (expected.cancel && expected.cancel == name) { + browser.test.log(`${name} cancel request`); + browser.test.sendMessage("cancelled"); + result.cancel = true; + } + // If we've used up all the events for this test, resolve the promise. + // If something wrong happens and more events come through, there will be + // failures. + if (expected.events.length <= 0) { + expected.test.resolve(); + } + return result; + }; + } + + for (let [name, args] of Object.entries(events)) { + browser.test.log(`adding listener for ${name}`); + try { + browser.webRequest[name].addListener(getListener(name), ...args); + } catch (e) { + browser.test.assertTrue(/\brequestBody\b/.test(e.message), + "Request body is unsupported"); + + // RequestBody is disabled in release builds. + if (!/\brequestBody\b/.test(e.message)) { + throw e; + } + + args.splice(args.indexOf("requestBody"), 1); + browser.webRequest[name].addListener(getListener(name), ...args); + } + } +} + +/* exported makeExtension */ + +function makeExtension(events = commonEvents) { + return ExtensionTestUtils.loadExtension({ + manifest: { + permissions: [ + "webRequest", + "webRequestBlocking", + "", + ], + }, + background: `(${background})(${JSON.stringify(events)})`, + }); +} + +/* exported addStylesheet */ + +function addStylesheet(file) { + let link = document.createElement("link"); + link.setAttribute("rel", "stylesheet"); + link.setAttribute("href", file); + document.body.appendChild(link); +} + +/* exported addLink */ + +function addLink(file) { + let a = document.createElement("a"); + a.setAttribute("href", file); + a.setAttribute("target", "_blank"); + document.body.appendChild(a); + return a; +} + +/* exported addImage */ + +function addImage(file) { + let img = document.createElement("img"); + img.setAttribute("src", file); + document.body.appendChild(img); +} + +/* exported addScript */ + +function addScript(file) { + let script = document.createElement("script"); + script.setAttribute("type", "text/javascript"); + script.setAttribute("src", file); + document.getElementsByTagName("head").item(0).appendChild(script); +} + +/* exported addFrame */ + +function addFrame(file) { + let frame = document.createElement("iframe"); + frame.setAttribute("width", "200"); + frame.setAttribute("height", "200"); + frame.setAttribute("src", file); + document.body.appendChild(frame); +} diff --git a/toolkit/components/extensions/test/mochitest/mochitest.ini b/toolkit/components/extensions/test/mochitest/mochitest.ini new file mode 100644 index 000000000..45586237e --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/mochitest.ini @@ -0,0 +1,114 @@ +[DEFAULT] +support-files = + head.js + file_mixed.html + head_webrequest.js + file_csp.html + file_csp.html^headers^ + file_WebRequest_page3.html + file_webNavigation_clientRedirect.html + file_webNavigation_clientRedirect_httpHeaders.html + file_webNavigation_clientRedirect_httpHeaders.html^headers^ + file_webNavigation_frameClientRedirect.html + file_webNavigation_frameRedirect.html + file_webNavigation_manualSubframe.html + file_webNavigation_manualSubframe_page1.html + file_webNavigation_manualSubframe_page2.html + file_WebNavigation_page1.html + file_WebNavigation_page2.html + file_WebNavigation_page3.html + file_with_about_blank.html + file_image_good.png + file_image_bad.png + file_image_redirect.png + file_style_good.css + file_style_bad.css + file_style_redirect.css + file_script_good.js + file_script_bad.js + file_script_redirect.js + file_script_xhr.js + file_sample.html + redirection.sjs + file_privilege_escalation.html + file_ext_test_api_injection.js + file_permission_xhr.html + file_teardown_test.js + return_headers.sjs + webrequest_worker.js +tags = webextensions + +[test_clipboard.html] +# skip-if = # disabled test case with_permission_allow_copy, see inline comment. +[test_ext_inIncognitoContext_window.html] +skip-if = os == 'android' # Android does not currently support windows. +[test_ext_geturl.html] +[test_ext_background_canvas.html] +[test_ext_content_security_policy.html] +[test_ext_contentscript.html] +[test_ext_contentscript_api_injection.html] +[test_ext_contentscript_async_loading.html] +[test_ext_contentscript_context.html] +[test_ext_contentscript_create_iframe.html] +[test_ext_contentscript_devtools_metadata.html] +[test_ext_contentscript_exporthelpers.html] +[test_ext_contentscript_css.html] +[test_ext_contentscript_about_blank.html] +[test_ext_contentscript_permission.html] +skip-if = os == 'android' # Android does not support tabs API. Bug 1260250 +[test_ext_contentscript_teardown.html] +skip-if = (os == 'android') # Android does not support tabs API. Bug 1260250 +[test_ext_exclude_include_globs.html] +[test_ext_i18n_css.html] +[test_ext_generate.html] +[test_ext_notifications.html] +[test_ext_permission_xhr.html] +[test_ext_runtime_connect.html] +skip-if = os == 'android' # port.sender.tab is undefined on Android (bug 1258975). +[test_ext_runtime_connect_twoway.html] +skip-if = os == 'android' # port.sender.tab is undefined on Android (bug 1258975). +[test_ext_runtime_connect2.html] +skip-if = os == 'android' # port.sender.tab is undefined on Android (bug 1258975). +[test_ext_runtime_disconnect.html] +[test_ext_runtime_id.html] +[test_ext_sandbox_var.html] +[test_ext_sendmessage_reply.html] +skip-if = os == 'android' # port.sender.tab is undefined on Android (bug 1258975). +[test_ext_sendmessage_reply2.html] +skip-if = os == 'android' # port.sender.tab is undefined on Android (bug 1258975). +[test_ext_sendmessage_doublereply.html] +skip-if = os == 'android' # port.sender.tab is undefined on Android (bug 1258975). +[test_ext_sendmessage_no_receiver.html] +[test_ext_storage_content.html] +[test_ext_storage_tab.html] +skip-if = os == 'android' # Android does not currently support tabs. +[test_ext_test.html] +[test_ext_cookies.html] +skip-if = os == 'android' # Bug 1258975 on android. +[test_ext_background_api_injection.html] +[test_ext_background_generated_url.html] +[test_ext_background_teardown.html] +[test_ext_tab_teardown.html] +skip-if = (os == 'android') # Android does not support tabs API. Bug 1260250 +[test_ext_unload_frame.html] +[test_ext_i18n.html] +skip-if = (os == 'android') # Bug 1258975 on android. +[test_ext_listener_proxies.html] +[test_ext_web_accessible_resources.html] +skip-if = (os == 'android') # Bug 1258975 on android. +[test_ext_webrequest_background_events.html] +skip-if = os == 'android' # webrequest api unsupported (bug 1258975). +[test_ext_webrequest_basic.html] +skip-if = os == 'android' # webrequest api unsupported (bug 1258975). +[test_ext_webrequest_suspend.html] +skip-if = os == 'android' # webrequest api unsupported (bug 1258975). +[test_ext_webrequest_upload.html] +skip-if = release_or_beta || os == 'android' # webrequest api unsupported (bug 1258975). +[test_ext_webnavigation.html] +skip-if = os == 'android' # port.sender.tab is undefined on Android (bug 1258975). +[test_ext_webnavigation_filters.html] +skip-if = os == 'android' # port.sender.tab is undefined on Android (bug 1258975). +[test_ext_window_postMessage.html] +[test_ext_subframes_privileges.html] +skip-if = os == 'android' # port.sender.tab is undefined on Android (bug 1258975). +[test_ext_xhr_capabilities.html] diff --git a/toolkit/components/extensions/test/mochitest/redirection.sjs b/toolkit/components/extensions/test/mochitest/redirection.sjs new file mode 100644 index 000000000..370ecd213 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/redirection.sjs @@ -0,0 +1,4 @@ +function handleRequest(aRequest, aResponse) { + aResponse.setStatusLine(aRequest.httpVersion, 302); + aResponse.setHeader("Location", "./dummy_page.html"); +} diff --git a/toolkit/components/extensions/test/mochitest/return_headers.sjs b/toolkit/components/extensions/test/mochitest/return_headers.sjs new file mode 100644 index 000000000..54e2e5fb4 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/return_headers.sjs @@ -0,0 +1,20 @@ +/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set ft=javascript sts=2 sw=2 et tw=80: */ +"use strict"; + +/* exported handleRequest */ + +function handleRequest(request, response) { + response.setHeader("Content-Type", "text/plain", false); + + let headers = {}; + // Why on earth is this a nsISimpleEnumerator... + let enumerator = request.headers; + while (enumerator.hasMoreElements()) { + let header = enumerator.getNext().data; + headers[header.toLowerCase()] = request.getHeader(header); + } + + response.write(JSON.stringify(headers)); +} + diff --git a/toolkit/components/extensions/test/mochitest/test_chrome_ext_background_debug_global.html b/toolkit/components/extensions/test/mochitest/test_chrome_ext_background_debug_global.html new file mode 100644 index 000000000..0edf5ea86 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_chrome_ext_background_debug_global.html @@ -0,0 +1,166 @@ + + + + WebExtension test + + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_chrome_ext_background_page.html b/toolkit/components/extensions/test/mochitest/test_chrome_ext_background_page.html new file mode 100644 index 000000000..3c4774652 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_chrome_ext_background_page.html @@ -0,0 +1,84 @@ + + + + WebExtension test + + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_chrome_ext_contentscript_unrecognizedprop_warning.html b/toolkit/components/extensions/test/mochitest/test_chrome_ext_contentscript_unrecognizedprop_warning.html new file mode 100644 index 000000000..e08121a8f --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_chrome_ext_contentscript_unrecognizedprop_warning.html @@ -0,0 +1,80 @@ + + + + Test for content script unrecognized property on manifest + + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_chrome_ext_downloads_saveAs.html b/toolkit/components/extensions/test/mochitest/test_chrome_ext_downloads_saveAs.html new file mode 100644 index 000000000..c1aaae035 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_chrome_ext_downloads_saveAs.html @@ -0,0 +1,68 @@ + + + + Test downloads.download() saveAs option + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_chrome_ext_eventpage_warning.html b/toolkit/components/extensions/test/mochitest/test_chrome_ext_eventpage_warning.html new file mode 100644 index 000000000..ecea8237e --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_chrome_ext_eventpage_warning.html @@ -0,0 +1,106 @@ + + + + Test for WebExtension EventPage Warning + + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_chrome_ext_hybrid_addons.html b/toolkit/components/extensions/test/mochitest/test_chrome_ext_hybrid_addons.html new file mode 100644 index 000000000..a74c551f0 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_chrome_ext_hybrid_addons.html @@ -0,0 +1,141 @@ + + + + Test for hybrid addons: SDK or bootstrap.js + embedded WebExtension + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_chrome_ext_idle.html b/toolkit/components/extensions/test/mochitest/test_chrome_ext_idle.html new file mode 100644 index 000000000..3c3063e67 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_chrome_ext_idle.html @@ -0,0 +1,64 @@ + + + + WebExtension test + + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_chrome_ext_shutdown_cleanup.html b/toolkit/components/extensions/test/mochitest/test_chrome_ext_shutdown_cleanup.html new file mode 100644 index 000000000..e3098e6b1 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_chrome_ext_shutdown_cleanup.html @@ -0,0 +1,50 @@ + + + + WebExtension test + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_chrome_ext_storage_cleanup.html b/toolkit/components/extensions/test/mochitest/test_chrome_ext_storage_cleanup.html new file mode 100644 index 000000000..010769500 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_chrome_ext_storage_cleanup.html @@ -0,0 +1,164 @@ + + + + WebExtension test + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_chrome_ext_trustworthy_origin.html b/toolkit/components/extensions/test/mochitest/test_chrome_ext_trustworthy_origin.html new file mode 100644 index 000000000..573c08806 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_chrome_ext_trustworthy_origin.html @@ -0,0 +1,53 @@ + + + + WebExtension test + + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_chrome_ext_webnavigation_resolved_urls.html b/toolkit/components/extensions/test/mochitest/test_chrome_ext_webnavigation_resolved_urls.html new file mode 100644 index 000000000..768eb31fd --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_chrome_ext_webnavigation_resolved_urls.html @@ -0,0 +1,83 @@ + + + + Test for simple WebExtension + + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_chrome_ext_webrequest_background_events.html b/toolkit/components/extensions/test/mochitest/test_chrome_ext_webrequest_background_events.html new file mode 100644 index 000000000..a13c4d475 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_chrome_ext_webrequest_background_events.html @@ -0,0 +1,96 @@ + + + + Test for simple WebExtension + + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_chrome_native_messaging_paths.html b/toolkit/components/extensions/test/mochitest/test_chrome_native_messaging_paths.html new file mode 100644 index 000000000..29a148063 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_chrome_native_messaging_paths.html @@ -0,0 +1,61 @@ + + + + WebExtension test + + + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_clipboard.html b/toolkit/components/extensions/test/mochitest/test_clipboard.html new file mode 100644 index 000000000..900ee5f10 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_clipboard.html @@ -0,0 +1,140 @@ + + + + clipboard permission test + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_all_apis.js b/toolkit/components/extensions/test/mochitest/test_ext_all_apis.js new file mode 100644 index 000000000..0f617c37e --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_all_apis.js @@ -0,0 +1,158 @@ +/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set sts=2 sw=2 et tw=80: */ +"use strict"; + +// Tests whether not too many APIs are visible by default. +// This file is used by test_ext_all_apis.html in browser/ and mobile/android/, +// which may modify the following variables to add or remove expected APIs. +/* globals expectedContentApisTargetSpecific */ +/* globals expectedBackgroundApisTargetSpecific */ + +// Generates a list of expectations. +function generateExpectations(list) { + return list.reduce((allApis, path) => { + return allApis.concat(`browser.${path}`, `chrome.${path}`); + }, []).sort(); +} + +let expectedCommonApis = [ + "extension.getURL", + "extension.inIncognitoContext", + "extension.lastError", + "i18n.detectLanguage", + "i18n.getAcceptLanguages", + "i18n.getMessage", + "i18n.getUILanguage", + "runtime.OnInstalledReason", + "runtime.OnRestartRequiredReason", + "runtime.PlatformArch", + "runtime.PlatformOs", + "runtime.RequestUpdateCheckStatus", + "runtime.getManifest", + "runtime.connect", + "runtime.getURL", + "runtime.id", + "runtime.lastError", + "runtime.onConnect", + "runtime.onMessage", + "runtime.sendMessage", + // If you want to add a new powerful test API, please see bug 1287233. + "test.assertEq", + "test.assertFalse", + "test.assertRejects", + "test.assertThrows", + "test.assertTrue", + "test.fail", + "test.log", + "test.notifyFail", + "test.notifyPass", + "test.onMessage", + "test.sendMessage", + "test.succeed", +]; + +let expectedContentApis = [ + ...expectedCommonApis, + ...expectedContentApisTargetSpecific, +]; + +let expectedBackgroundApis = [ + ...expectedCommonApis, + ...expectedBackgroundApisTargetSpecific, + "extension.ViewType", + "extension.getBackgroundPage", + "extension.getViews", + "extension.isAllowedFileSchemeAccess", + "extension.isAllowedIncognitoAccess", + // Note: extensionTypes is not visible in Chrome. + "extensionTypes.ImageFormat", + "extensionTypes.RunAt", + "management.ExtensionDisabledReason", + "management.ExtensionInstallType", + "management.ExtensionType", + "management.getSelf", + "management.uninstallSelf", + "runtime.getBackgroundPage", + "runtime.getBrowserInfo", + "runtime.getPlatformInfo", + "runtime.onInstalled", + "runtime.onStartup", + "runtime.onUpdateAvailable", + "runtime.openOptionsPage", + "runtime.reload", + "runtime.setUninstallURL", +]; + +function sendAllApis() { + function isEvent(key, val) { + if (!/^on[A-Z]/.test(key)) { + return false; + } + let eventKeys = []; + for (let prop in val) { + eventKeys.push(prop); + } + eventKeys = eventKeys.sort().join(); + return eventKeys === "addListener,hasListener,removeListener"; + } + function mayRecurse(key, val) { + if (Object.keys(val).filter(k => !/^[A-Z\-0-9_]+$/.test(k)).length === 0) { + // Don't recurse on constants and empty objects. + return false; + } + return !isEvent(key, val); + } + + let results = []; + function diveDeeper(path, obj) { + for (let key in obj) { + let val = obj[key]; + if (typeof val == "object" && val !== null && mayRecurse(key, val)) { + diveDeeper(`${path}.${key}`, val); + } else if (val !== undefined) { + results.push(`${path}.${key}`); + } + } + } + diveDeeper("browser", browser); + diveDeeper("chrome", chrome); + browser.test.sendMessage("allApis", results.sort()); +} + +add_task(function* test_enumerate_content_script_apis() { + let extensionData = { + manifest: { + content_scripts: [{ + matches: ["http://mochi.test/*/file_sample.html"], + js: ["contentscript.js"], + run_at: "document_start", + }], + }, + files: { + "contentscript.js": sendAllApis, + }, + }; + let extension = ExtensionTestUtils.loadExtension(extensionData); + yield extension.startup(); + + let win = window.open("file_sample.html"); + let actualApis = yield extension.awaitMessage("allApis"); + win.close(); + let expectedApis = generateExpectations(expectedContentApis); + isDeeply(actualApis, expectedApis, "content script APIs"); + + yield extension.unload(); +}); + +add_task(function* test_enumerate_background_script_apis() { + let extensionData = { + background: sendAllApis, + }; + let extension = ExtensionTestUtils.loadExtension(extensionData); + yield extension.startup(); + let actualApis = yield extension.awaitMessage("allApis"); + let expectedApis = generateExpectations(expectedBackgroundApis); + isDeeply(actualApis, expectedApis, "background script APIs"); + + yield extension.unload(); +}); diff --git a/toolkit/components/extensions/test/mochitest/test_ext_background_api_injection.html b/toolkit/components/extensions/test/mochitest/test_ext_background_api_injection.html new file mode 100644 index 000000000..f43a59f81 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_background_api_injection.html @@ -0,0 +1,46 @@ + + + + Test for privilege escalation into content pages + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_background_canvas.html b/toolkit/components/extensions/test/mochitest/test_ext_background_canvas.html new file mode 100644 index 000000000..bff7190cb --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_background_canvas.html @@ -0,0 +1,47 @@ + + + + Test for background page canvas rendering + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_background_generated_url.html b/toolkit/components/extensions/test/mochitest/test_ext_background_generated_url.html new file mode 100644 index 000000000..f4fcf3d34 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_background_generated_url.html @@ -0,0 +1,47 @@ + + + + Test _generated_background_page.html + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_background_teardown.html b/toolkit/components/extensions/test/mochitest/test_ext_background_teardown.html new file mode 100644 index 000000000..bb6b2e970 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_background_teardown.html @@ -0,0 +1,76 @@ + + + + Test for background script teardown + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_content_security_policy.html b/toolkit/components/extensions/test/mochitest/test_ext_content_security_policy.html new file mode 100644 index 000000000..a36f29563 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_content_security_policy.html @@ -0,0 +1,162 @@ + + + + WebExtension CSP test + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_contentscript.html b/toolkit/components/extensions/test/mochitest/test_ext_contentscript.html new file mode 100644 index 000000000..39f1bfabd --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_contentscript.html @@ -0,0 +1,116 @@ + + + + Test for content script + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_contentscript_about_blank.html b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_about_blank.html new file mode 100644 index 000000000..3766678e7 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_about_blank.html @@ -0,0 +1,117 @@ + + + + Test content script match_about_blank option + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_contentscript_api_injection.html b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_api_injection.html new file mode 100644 index 000000000..abf3d349f --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_api_injection.html @@ -0,0 +1,88 @@ + + + + Test for privilege escalation into iframe with content script APIs + + + + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_contentscript_async_loading.html b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_async_loading.html new file mode 100644 index 000000000..d78f7ce02 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_async_loading.html @@ -0,0 +1,54 @@ + + + + Test content script async loading + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_contentscript_context.html b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_context.html new file mode 100644 index 000000000..97b1645dd --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_context.html @@ -0,0 +1,81 @@ + + + + Test for content script contexts + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_contentscript_create_iframe.html b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_create_iframe.html new file mode 100644 index 000000000..8aac3e213 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_create_iframe.html @@ -0,0 +1,165 @@ + + + + Test for content script + + + + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_contentscript_css.html b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_css.html new file mode 100644 index 000000000..5630a1d68 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_css.html @@ -0,0 +1,48 @@ + + + + Test for content script + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_contentscript_devtools_metadata.html b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_devtools_metadata.html new file mode 100644 index 000000000..137a3cda4 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_devtools_metadata.html @@ -0,0 +1,81 @@ + + + + Test for Sandbox metadata on WebExtensions ContentScripts + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_contentscript_exporthelpers.html b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_exporthelpers.html new file mode 100644 index 000000000..f3414901d --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_exporthelpers.html @@ -0,0 +1,95 @@ + + + + Test for content script + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_contentscript_incognito.html b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_incognito.html new file mode 100644 index 000000000..a2f38dce6 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_incognito.html @@ -0,0 +1,89 @@ + + + + Test for content script private browsing ID + + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_contentscript_permission.html b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_permission.html new file mode 100644 index 000000000..eaf815092 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_permission.html @@ -0,0 +1,59 @@ + + + + Test for content script + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_contentscript_teardown.html b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_teardown.html new file mode 100644 index 000000000..33a8c4ccc --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_contentscript_teardown.html @@ -0,0 +1,96 @@ + + + + Test for content script teardown + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_cookies.html b/toolkit/components/extensions/test/mochitest/test_ext_cookies.html new file mode 100644 index 000000000..d414a4e46 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_cookies.html @@ -0,0 +1,234 @@ + + + + WebExtension test + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_cookies_containers.html b/toolkit/components/extensions/test/mochitest/test_ext_cookies_containers.html new file mode 100644 index 000000000..bc4994eec --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_cookies_containers.html @@ -0,0 +1,93 @@ + + + + WebExtension test + + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_cookies_expiry.html b/toolkit/components/extensions/test/mochitest/test_ext_cookies_expiry.html new file mode 100644 index 000000000..3927d9e94 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_cookies_expiry.html @@ -0,0 +1,72 @@ + + + + WebExtension test + + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_cookies_permissions_bad.html b/toolkit/components/extensions/test/mochitest/test_ext_cookies_permissions_bad.html new file mode 100644 index 000000000..15a62855a --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_cookies_permissions_bad.html @@ -0,0 +1,112 @@ + + + + WebExtension test + + + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_cookies_permissions_good.html b/toolkit/components/extensions/test/mochitest/test_ext_cookies_permissions_good.html new file mode 100644 index 000000000..31e83188c --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_cookies_permissions_good.html @@ -0,0 +1,86 @@ + + + + WebExtension test + + + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_exclude_include_globs.html b/toolkit/components/extensions/test/mochitest/test_ext_exclude_include_globs.html new file mode 100644 index 000000000..640522b40 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_exclude_include_globs.html @@ -0,0 +1,92 @@ + + + + Test for content script + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_generate.html b/toolkit/components/extensions/test/mochitest/test_ext_generate.html new file mode 100644 index 000000000..cfafcbad9 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_generate.html @@ -0,0 +1,49 @@ + + + + Test for generating WebExtensions + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_geturl.html b/toolkit/components/extensions/test/mochitest/test_ext_geturl.html new file mode 100644 index 000000000..6e39c2f5d --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_geturl.html @@ -0,0 +1,72 @@ + + + + WebExtension test + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_i18n.html b/toolkit/components/extensions/test/mochitest/test_ext_i18n.html new file mode 100644 index 000000000..1f7330bbb --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_i18n.html @@ -0,0 +1,432 @@ + + + + + Test for WebExtension localization APIs + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_i18n_css.html b/toolkit/components/extensions/test/mochitest/test_ext_i18n_css.html new file mode 100644 index 000000000..7c6a8eeaa --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_i18n_css.html @@ -0,0 +1,116 @@ + + + + Test for content script + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_inIncognitoContext_window.html b/toolkit/components/extensions/test/mochitest/test_ext_inIncognitoContext_window.html new file mode 100644 index 000000000..675cbb298 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_inIncognitoContext_window.html @@ -0,0 +1,49 @@ + + + + WebExtension test + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_jsversion.html b/toolkit/components/extensions/test/mochitest/test_ext_jsversion.html new file mode 100644 index 000000000..da0c355e0 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_jsversion.html @@ -0,0 +1,86 @@ + + + + Test for simple WebExtension + + + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_listener_proxies.html b/toolkit/components/extensions/test/mochitest/test_ext_listener_proxies.html new file mode 100644 index 000000000..ca8db873e --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_listener_proxies.html @@ -0,0 +1,63 @@ + + + + Test for content script + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_notifications.html b/toolkit/components/extensions/test/mochitest/test_ext_notifications.html new file mode 100644 index 000000000..d1b798cf9 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_notifications.html @@ -0,0 +1,224 @@ + + + + Test for notifications + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_permission_xhr.html b/toolkit/components/extensions/test/mochitest/test_ext_permission_xhr.html new file mode 100644 index 000000000..07967d5d0 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_permission_xhr.html @@ -0,0 +1,119 @@ + + + + WebExtension Test + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_runtime_connect.html b/toolkit/components/extensions/test/mochitest/test_ext_runtime_connect.html new file mode 100644 index 000000000..60351eaee --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_runtime_connect.html @@ -0,0 +1,83 @@ + + + + WebExtension test + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_runtime_connect2.html b/toolkit/components/extensions/test/mochitest/test_ext_runtime_connect2.html new file mode 100644 index 000000000..dce12b21b --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_runtime_connect2.html @@ -0,0 +1,103 @@ + + + + WebExtension test + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_runtime_connect_twoway.html b/toolkit/components/extensions/test/mochitest/test_ext_runtime_connect_twoway.html new file mode 100644 index 000000000..e84134eff --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_runtime_connect_twoway.html @@ -0,0 +1,127 @@ + + + + WebExtension test + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_runtime_disconnect.html b/toolkit/components/extensions/test/mochitest/test_ext_runtime_disconnect.html new file mode 100644 index 000000000..5764d0a3c --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_runtime_disconnect.html @@ -0,0 +1,78 @@ + + + + WebExtension test + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_runtime_id.html b/toolkit/components/extensions/test/mochitest/test_ext_runtime_id.html new file mode 100644 index 000000000..4cdefda41 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_runtime_id.html @@ -0,0 +1,61 @@ + + + + + Test for browser.runtime.id + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_sandbox_var.html b/toolkit/components/extensions/test/mochitest/test_ext_sandbox_var.html new file mode 100644 index 000000000..426a71ac6 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_sandbox_var.html @@ -0,0 +1,60 @@ + + + + Test for content script + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_schema.html b/toolkit/components/extensions/test/mochitest/test_ext_schema.html new file mode 100644 index 000000000..8a0e11c56 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_schema.html @@ -0,0 +1,73 @@ + + + + Test for schema API creation + + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_sendmessage_doublereply.html b/toolkit/components/extensions/test/mochitest/test_ext_sendmessage_doublereply.html new file mode 100644 index 000000000..a3ef37cad --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_sendmessage_doublereply.html @@ -0,0 +1,101 @@ + + + + WebExtension test + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_sendmessage_no_receiver.html b/toolkit/components/extensions/test/mochitest/test_ext_sendmessage_no_receiver.html new file mode 100644 index 000000000..96af6558e --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_sendmessage_no_receiver.html @@ -0,0 +1,83 @@ + + + + WebExtension test + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_sendmessage_reply.html b/toolkit/components/extensions/test/mochitest/test_ext_sendmessage_reply.html new file mode 100644 index 000000000..a4ac708b2 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_sendmessage_reply.html @@ -0,0 +1,79 @@ + + + + WebExtension test + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_sendmessage_reply2.html b/toolkit/components/extensions/test/mochitest/test_ext_sendmessage_reply2.html new file mode 100644 index 000000000..1ebc1b40f --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_sendmessage_reply2.html @@ -0,0 +1,93 @@ + + + + WebExtension test + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_storage_content.html b/toolkit/components/extensions/test/mochitest/test_ext_storage_content.html new file mode 100644 index 000000000..09a33814a --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_storage_content.html @@ -0,0 +1,330 @@ + + + + WebExtension test + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_storage_tab.html b/toolkit/components/extensions/test/mochitest/test_ext_storage_tab.html new file mode 100644 index 000000000..32d8e6af0 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_storage_tab.html @@ -0,0 +1,118 @@ + + + + WebExtension test + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_subframes_privileges.html b/toolkit/components/extensions/test/mochitest/test_ext_subframes_privileges.html new file mode 100644 index 000000000..1f3a9a3c9 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_subframes_privileges.html @@ -0,0 +1,202 @@ + + + + WebExtension test + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_tab_teardown.html b/toolkit/components/extensions/test/mochitest/test_ext_tab_teardown.html new file mode 100644 index 000000000..dc351e48a --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_tab_teardown.html @@ -0,0 +1,150 @@ + + + + Test for extension tab teardown + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_test.html b/toolkit/components/extensions/test/mochitest/test_ext_test.html new file mode 100644 index 000000000..fef31e0e2 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_test.html @@ -0,0 +1,191 @@ + + + + Testing test + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_unload_frame.html b/toolkit/components/extensions/test/mochitest/test_ext_unload_frame.html new file mode 100644 index 000000000..5572de281 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_unload_frame.html @@ -0,0 +1,170 @@ + + + + WebExtensions test + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_web_accessible_resources.html b/toolkit/components/extensions/test/mochitest/test_ext_web_accessible_resources.html new file mode 100644 index 000000000..fa3228739 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_web_accessible_resources.html @@ -0,0 +1,353 @@ + + + + Test the web_accessible_resources manifest directive + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_webnavigation.html b/toolkit/components/extensions/test/mochitest/test_ext_webnavigation.html new file mode 100644 index 000000000..2287fd9b1 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_webnavigation.html @@ -0,0 +1,559 @@ + + + + Test for simple WebExtension + + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_webnavigation_filters.html b/toolkit/components/extensions/test/mochitest/test_ext_webnavigation_filters.html new file mode 100644 index 000000000..a0de5e9e5 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_webnavigation_filters.html @@ -0,0 +1,308 @@ + + + + Test for simple WebExtension + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_webrequest_background_events.html b/toolkit/components/extensions/test/mochitest/test_ext_webrequest_background_events.html new file mode 100644 index 000000000..78efeab35 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_webrequest_background_events.html @@ -0,0 +1,116 @@ + + + + Test for simple WebExtension + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_webrequest_basic.html b/toolkit/components/extensions/test/mochitest/test_ext_webrequest_basic.html new file mode 100644 index 000000000..ef77fee3b --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_webrequest_basic.html @@ -0,0 +1,327 @@ + + + + + + + + + + + + + + +
Sample text
+ + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_webrequest_suspend.html b/toolkit/components/extensions/test/mochitest/test_ext_webrequest_suspend.html new file mode 100644 index 000000000..c8423ec7c --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_webrequest_suspend.html @@ -0,0 +1,216 @@ + + + + Test for simple WebExtension + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_webrequest_upload.html b/toolkit/components/extensions/test/mochitest/test_ext_webrequest_upload.html new file mode 100644 index 000000000..998ab9800 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_webrequest_upload.html @@ -0,0 +1,199 @@ + + + + + + + + + + + + + +
+ + + + +
+ +
+ + + +
+ + +
+ + +
+ + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_window_postMessage.html b/toolkit/components/extensions/test/mochitest/test_ext_window_postMessage.html new file mode 100644 index 000000000..7d49d55ba --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_window_postMessage.html @@ -0,0 +1,105 @@ + + + + Test for content script + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/test_ext_xhr_capabilities.html b/toolkit/components/extensions/test/mochitest/test_ext_xhr_capabilities.html new file mode 100644 index 000000000..1afdadb9f --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/test_ext_xhr_capabilities.html @@ -0,0 +1,86 @@ + + + + Test XHR capabilities + + + + + + + + + + + + diff --git a/toolkit/components/extensions/test/mochitest/webrequest_chromeworker.js b/toolkit/components/extensions/test/mochitest/webrequest_chromeworker.js new file mode 100644 index 000000000..ccfb2ac1f --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/webrequest_chromeworker.js @@ -0,0 +1,8 @@ +"use strict"; + +onmessage = function(event) { + fetch("https://example.com/example.txt").then(() => { + postMessage("Done!"); + }); +}; + diff --git a/toolkit/components/extensions/test/mochitest/webrequest_test.jsm b/toolkit/components/extensions/test/mochitest/webrequest_test.jsm new file mode 100644 index 000000000..bfb148301 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/webrequest_test.jsm @@ -0,0 +1,22 @@ +"use strict"; + +this.EXPORTED_SYMBOLS = ["webrequest_test"]; + +Components.utils.importGlobalProperties(["fetch", "XMLHttpRequest"]); + +this.webrequest_test = { + testFetch(url) { + return fetch(url); + }, + + testXHR(url) { + return new Promise(resolve => { + let xhr = new XMLHttpRequest(); + xhr.open("HEAD", url); + xhr.onload = () => { + resolve(); + }; + xhr.send(); + }); + }, +}; diff --git a/toolkit/components/extensions/test/mochitest/webrequest_worker.js b/toolkit/components/extensions/test/mochitest/webrequest_worker.js new file mode 100644 index 000000000..dcffd0857 --- /dev/null +++ b/toolkit/components/extensions/test/mochitest/webrequest_worker.js @@ -0,0 +1,3 @@ +"use strict"; + +fetch("https://example.com/example.txt"); -- cgit v1.2.3