зеркало из https://github.com/mozilla/gecko-dev.git
Merge m-c to graphics
MozReview-Commit-ID: 1TtDrgYT5Sb
This commit is contained in:
Коммит
acef3b8740
|
@ -19,6 +19,8 @@
|
|||
^gfx/ots/.*
|
||||
^gfx/qcms/.*
|
||||
^gfx/skia/.*
|
||||
^gfx/webrender.*
|
||||
^gfx/webrender_traits.*
|
||||
^gfx/ycbcr/.*
|
||||
^intl/hyphenation/hyphen/.*
|
||||
^intl/icu/.*
|
||||
|
@ -28,6 +30,7 @@
|
|||
^js/src/jit/arm64/vixl/.*
|
||||
^media/gmp-clearkey/0.1/openaes/.*
|
||||
^media/kiss_fft/.*
|
||||
^media/ffvpx/.*
|
||||
^media/libav/.*
|
||||
^media/libcubeb/.*
|
||||
^media/libjpeg/.*
|
||||
|
@ -44,17 +47,19 @@
|
|||
^media/libvorbis/.*
|
||||
^media/libvpx/.*
|
||||
^media/libyuv/.*
|
||||
^media/mtransport/.*
|
||||
^media/mtransport/third_party/.*
|
||||
^media/openmax_dl/.*
|
||||
^media/pocketsphinx/.*
|
||||
^media/sphinxbase/.*
|
||||
^media/webrtc/trunk/.*
|
||||
^media/webrtc/signaling/src/sdp/sipcc/.*
|
||||
^memory/jemalloc/src/.*
|
||||
^mfbt/decimal/.*
|
||||
^mfbt/double-conversion/source/.*
|
||||
^mfbt/lz4.*
|
||||
^mobile/android/thirdparty/.*
|
||||
^modules/brotli/.*
|
||||
^modules/fdlibm/.*
|
||||
^modules/freetype2/.*
|
||||
^modules/libbz2/.*
|
||||
^modules/libmar/.*
|
||||
|
@ -63,6 +68,7 @@
|
|||
^netwerk/srtp/src/.*
|
||||
^nsprpub/.*
|
||||
^other-licenses/.*
|
||||
^parser/expat/.*
|
||||
^security/sandbox/chromium/.*
|
||||
^testing/gtest/gmock/.*
|
||||
^testing/gtest/gtest/.*
|
||||
|
|
|
@ -84,16 +84,37 @@ devtools/client/framework/**
|
|||
!devtools/client/framework/selection.js
|
||||
!devtools/client/framework/target*
|
||||
!devtools/client/framework/toolbox*
|
||||
devtools/client/inspector/markup/test/doc_markup_events_*.html
|
||||
devtools/client/inspector/rules/test/doc_media_queries.html
|
||||
devtools/client/memory/test/chrome/*.html
|
||||
devtools/client/netmonitor/test/**
|
||||
devtools/client/netmonitor/har/test/**
|
||||
devtools/client/performance/components/test/test_jit_optimizations_01.html
|
||||
devtools/client/projecteditor/**
|
||||
devtools/client/responsive.html/test/browser/touch.html
|
||||
devtools/client/responsivedesign/**
|
||||
devtools/client/scratchpad/**
|
||||
devtools/client/shadereditor/**
|
||||
devtools/client/shared/*.jsm
|
||||
devtools/client/shared/components/reps/reps.js
|
||||
devtools/client/shared/components/reps/test/mochitest/*.html
|
||||
!devtools/client/shared/components/reps/test/mochitest/test_reps_infinity.html
|
||||
!devtools/client/shared/components/reps/test/mochitest/test_reps_nan.html
|
||||
!devtools/client/shared/components/reps/test/mochitest/test_reps_promise.html
|
||||
!devtools/client/shared/components/reps/test/mochitest/test_reps_symbol.html
|
||||
!devtools/client/shared/components/reps/test/mochitest/test_reps_text-node.html
|
||||
devtools/client/shared/components/test/mochitest/*.html
|
||||
!devtools/client/shared/components/test/mochitest/test_stack-trace.html
|
||||
devtools/client/shared/shim/test/test_*.html
|
||||
devtools/client/shared/test/browser_toolbar_webconsole_errors_count.html
|
||||
devtools/client/shared/webgl-utils.js
|
||||
devtools/client/shared/widgets/*.jsm
|
||||
devtools/client/storage/test/*.html
|
||||
!devtools/client/storage/test/storage-cookies.html
|
||||
!devtools/client/storage/test/storage-overflow.html
|
||||
!devtools/client/storage/test/storage-search.html
|
||||
!devtools/client/storage/test/storage-unsecured-iframe.html
|
||||
!devtools/client/storage/test/storage-unsecured-iframe-usercontextid.html
|
||||
devtools/client/webaudioeditor/**
|
||||
devtools/client/webconsole/net/**
|
||||
devtools/client/webconsole/test/**
|
||||
|
@ -108,11 +129,16 @@ devtools/server/actors/object.js
|
|||
devtools/server/actors/script.js
|
||||
devtools/server/actors/styleeditor.js
|
||||
devtools/server/actors/stylesheets.js
|
||||
devtools/server/tests/browser/**
|
||||
!devtools/server/tests/browser/browser_webextension_inspected_window.js
|
||||
devtools/server/tests/browser/storage-*.html
|
||||
!devtools/server/tests/browser/storage-unsecured-iframe.html
|
||||
devtools/server/tests/browser/stylesheets-nested-iframes.html
|
||||
devtools/server/tests/mochitest/**
|
||||
devtools/server/tests/unit/**
|
||||
devtools/shared/heapsnapshot/**
|
||||
devtools/shared/platform/content/test/test_clipboard.html
|
||||
devtools/shared/qrcode/tests/mochitest/test_decode.html
|
||||
devtools/shared/tests/mochitest/*.html
|
||||
devtools/shared/webconsole/test/test_*.html
|
||||
|
||||
# Ignore devtools pre-processed files
|
||||
devtools/client/framework/toolbox-process-window.js
|
||||
|
@ -287,6 +313,7 @@ toolkit/components/osfile/**
|
|||
|
||||
# External code:
|
||||
toolkit/components/microformats/test/**
|
||||
toolkit/components/microformats/microformat-shiv.js
|
||||
toolkit/components/reader/Readability.js
|
||||
toolkit/components/reader/JSDOMParser.js
|
||||
|
||||
|
|
|
@ -44,6 +44,8 @@ _OPT\.OBJ/
|
|||
# SpiderMonkey test result logs
|
||||
^js/src/tests/results-.*\.(html|txt)$
|
||||
^js/src/devtools/rootAnalysis/t/out
|
||||
# SpiderMonkey clone of the webassembly spec repository
|
||||
^js/src/wasm/spec
|
||||
|
||||
# Java HTML5 parser classes
|
||||
^parser/html/java/(html|java)parser/
|
||||
|
|
|
@ -398,10 +398,15 @@ DocAccessibleParent::RecvBindChildDoc(PDocAccessibleParent* aChildDoc, const uin
|
|||
ipc::IPCResult result = AddChildDoc(childDoc, aID, false);
|
||||
MOZ_ASSERT(result);
|
||||
MOZ_ASSERT(CheckDocTree());
|
||||
#ifdef DEBUG
|
||||
if (!result) {
|
||||
return result;
|
||||
}
|
||||
return IPC_OK();
|
||||
#else
|
||||
result = IPC_OK();
|
||||
#endif
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
ipc::IPCResult
|
||||
|
@ -412,11 +417,7 @@ DocAccessibleParent::AddChildDoc(DocAccessibleParent* aChildDoc,
|
|||
// document it self.
|
||||
ProxyEntry* e = mAccessibles.GetEntry(aParentID);
|
||||
if (!e) {
|
||||
#ifdef DEBUG
|
||||
return IPC_FAIL(this, "binding to nonexistant proxy!");
|
||||
#else
|
||||
return IPC_OK();
|
||||
#endif
|
||||
}
|
||||
|
||||
ProxyAccessible* outerDoc = e->mProxy;
|
||||
|
|
|
@ -46,6 +46,7 @@ PlatformChild::PlatformChild()
|
|||
: mAccTypelib(mozilla::mscom::RegisterTypelib(L"oleacc.dll",
|
||||
mozilla::mscom::RegistrationFlags::eUseSystemDirectory))
|
||||
, mMiscTypelib(mozilla::mscom::RegisterTypelib(L"Accessible.tlb"))
|
||||
, mSdnTypelib(mozilla::mscom::RegisterTypelib(L"AccessibleMarshal.dll"))
|
||||
{
|
||||
mozilla::mscom::InterceptorLog::Init();
|
||||
mozilla::mscom::RegisterArrayData(sPlatformChildArrayData);
|
||||
|
|
|
@ -27,6 +27,7 @@ private:
|
|||
UniquePtr<mozilla::mscom::RegisteredProxy> mIA2Proxy;
|
||||
UniquePtr<mozilla::mscom::RegisteredProxy> mAccTypelib;
|
||||
UniquePtr<mozilla::mscom::RegisteredProxy> mMiscTypelib;
|
||||
UniquePtr<mozilla::mscom::RegisteredProxy> mSdnTypelib;
|
||||
};
|
||||
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -127,6 +127,10 @@ DocAccessibleWrap::GetNativeWindow() const
|
|||
{
|
||||
if (XRE_IsContentProcess()) {
|
||||
DocAccessibleChild* ipcDoc = IPCDoc();
|
||||
if (!ipcDoc) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
HWND hWnd = ipcDoc->GetEmulatedWindowHandle();
|
||||
if (hWnd) {
|
||||
return hWnd;
|
||||
|
|
|
@ -22,27 +22,27 @@
|
|||
<!-- Add raptor performance marker -->
|
||||
window.performance.mark('gecko-shell-html-load');
|
||||
</script>
|
||||
<script type="application/javascript;version=1.8"
|
||||
<script type="application/javascript"
|
||||
src="chrome://b2g/content/settings.js"> </script>
|
||||
<script type="application/javascript;version=1.8"
|
||||
<script type="application/javascript"
|
||||
src="chrome://b2g/content/shell.js"> </script>
|
||||
|
||||
#ifndef ANDROID
|
||||
#ifndef MOZ_GRAPHENE
|
||||
<!-- various task that has to happen only on desktop -->
|
||||
<script type="application/javascript;version=1.8"
|
||||
<script type="application/javascript"
|
||||
src="chrome://b2g/content/desktop.js"> </script>
|
||||
<!-- this script handles the screen argument for desktop builds -->
|
||||
<script type="application/javascript;version=1.8"
|
||||
<script type="application/javascript"
|
||||
src="chrome://b2g/content/screen.js"> </script>
|
||||
#endif
|
||||
#else
|
||||
<!-- this file is only loaded on Gonk to manage ADB state -->
|
||||
<script type="application/javascript;version=1.8"
|
||||
<script type="application/javascript"
|
||||
src="chrome://b2g/content/devtools/adb.js"> </script>
|
||||
#endif
|
||||
<!-- manages DevTools server state -->
|
||||
<script type="application/javascript;version=1.8"
|
||||
<script type="application/javascript"
|
||||
src="chrome://b2g/content/devtools/debugger.js"> </script>
|
||||
</head>
|
||||
<body id="container">
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
<head>
|
||||
<link rel="stylesheet" href="shell.css" type="text/css">
|
||||
<script type="application/javascript;version=1.8"
|
||||
<script type="application/javascript"
|
||||
src="chrome://b2g/content/shell_remote.js"> </script>
|
||||
</head>
|
||||
<body id="container">
|
||||
|
|
|
@ -3,13 +3,13 @@
|
|||
<head>
|
||||
<title>Iframe for Recording Status</title>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="text/javascript;version=1.7" src="RecordingStatusHelper.js"></script>
|
||||
<script type="text/javascript" src="RecordingStatusHelper.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript;version=1.7">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
||||
var localStream;
|
||||
|
||||
|
|
|
@ -3,13 +3,13 @@
|
|||
<head>
|
||||
<title>Test for Recording Status</title>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="text/javascript;version=1.7" src="RecordingStatusHelper.js"></script>
|
||||
<script type="text/javascript" src="RecordingStatusHelper.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript;version=1.7">
|
||||
<script class="testbody" type="text/javascript">
|
||||
'use strict';
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
|
|
@ -3,14 +3,14 @@
|
|||
<head>
|
||||
<title>Test for Recording Status in iframe</title>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="text/javascript;version=1.7" src="RecordingStatusHelper.js"></script>
|
||||
<script type="text/javascript" src="RecordingStatusHelper.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<pre id="test">
|
||||
<iframe id="gum-iframe"></iframe>
|
||||
<script class="testbody" type="text/javascript;version=1.7">
|
||||
<script class="testbody" type="text/javascript">
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
function test() {
|
||||
|
|
|
@ -3,13 +3,13 @@
|
|||
<head>
|
||||
<title>Test for Recording Status after process shutdown</title>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="text/javascript;version=1.7" src="RecordingStatusHelper.js"></script>
|
||||
<script type="text/javascript" src="RecordingStatusHelper.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript;version=1.7">
|
||||
<script class="testbody" type="text/javascript">
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
function test() {
|
||||
|
|
|
@ -3,13 +3,13 @@
|
|||
<head>
|
||||
<title>Test for Recording Status with multiple gUM requests</title>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="text/javascript;version=1.7" src="RecordingStatusHelper.js"></script>
|
||||
<script type="text/javascript" src="RecordingStatusHelper.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript;version=1.7">
|
||||
<script class="testbody" type="text/javascript">
|
||||
'use strict';
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
|
|
@ -11,7 +11,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=951997
|
|||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1020179">Permission prompt visibilitychange test</a>
|
||||
<script type="application/javascript;version=1.8">
|
||||
<script type="application/javascript">
|
||||
|
||||
"use strict";
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=">Test for Presentation Device Selection</a>
|
||||
<script type="application/javascript;version=1.8">
|
||||
<script type="application/javascript">
|
||||
|
||||
'use strict';
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=">Test for Presentation UI Glue</a>
|
||||
<script type="application/javascript;version=1.8">
|
||||
<script type="application/javascript">
|
||||
|
||||
'use strict';
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=951997
|
|||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=951997">Permission prompt web content test</a>
|
||||
<script type="application/javascript;version=1.8">
|
||||
<script type="application/javascript">
|
||||
|
||||
"use strict";
|
||||
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -38,13 +38,13 @@
|
|||
</div>
|
||||
</body>
|
||||
|
||||
<script type="text/javascript;version=1.8"><![CDATA[
|
||||
<script type="text/javascript"><![CDATA[
|
||||
const Cu = Components.utils;
|
||||
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
|
||||
function openDirectory() {
|
||||
let url = Services.prefs.getCharPref("social.directories").split(',')[0];
|
||||
let url = Services.prefs.getCharPref("social.directories").split(",")[0];
|
||||
window.open(url);
|
||||
window.close();
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
</div>
|
||||
</body>
|
||||
|
||||
<script type="text/javascript;version=1.8"><![CDATA[
|
||||
<script type="text/javascript"><![CDATA[
|
||||
const Cu = Components.utils;
|
||||
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
|
@ -61,10 +61,10 @@
|
|||
|
||||
switch (mode) {
|
||||
case "compactInfo":
|
||||
document.getElementById("btnTryAgain").style.display = 'none';
|
||||
document.getElementById("btnTryAgain").style.display = "none";
|
||||
break;
|
||||
case "tryAgainOnly":
|
||||
//intentional fall-through
|
||||
// intentional fall-through
|
||||
case "tryAgain":
|
||||
config.tryAgainCallback = loadQueryURL;
|
||||
config.queryURL = url;
|
||||
|
|
|
@ -93,5 +93,5 @@
|
|||
</div>
|
||||
</div>
|
||||
</body>
|
||||
<script type="text/javascript;version=1.8" src="chrome://browser/content/aboutTabCrashed.js"/>
|
||||
<script type="text/javascript" src="chrome://browser/content/aboutTabCrashed.js"/>
|
||||
</html>
|
||||
|
|
|
@ -96,9 +96,9 @@
|
|||
|
||||
<iframe mozframetype="content" id="remote" />
|
||||
|
||||
<script type="application/javascript;version=1.8"
|
||||
<script type="application/javascript"
|
||||
src="chrome://browser/content/utilityOverlay.js"/>
|
||||
<script type="text/javascript;version=1.8"
|
||||
<script type="text/javascript"
|
||||
src="chrome://browser/content/aboutaccounts/aboutaccounts.js" />
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
<link rel="stylesheet"
|
||||
href="chrome://browser/content/abouthealthreport/abouthealth.css"
|
||||
type="text/css" />
|
||||
<script type="text/javascript;version=1.8"
|
||||
<script type="text/javascript"
|
||||
src="chrome://browser/content/abouthealthreport/abouthealth.js" />
|
||||
</head>
|
||||
<body>
|
||||
|
|
|
@ -339,7 +339,7 @@ function showSnippets() {
|
|||
// through DOM manipulation to activate their contents.
|
||||
Array.forEach(snippetsElt.getElementsByTagName("script"), function(elt) {
|
||||
let relocatedScript = document.createElement("script");
|
||||
relocatedScript.type = "text/javascript;version=1.8";
|
||||
relocatedScript.type = "text/javascript";
|
||||
relocatedScript.text = elt.text;
|
||||
elt.parentNode.replaceChild(relocatedScript, elt);
|
||||
});
|
||||
|
|
|
@ -28,9 +28,9 @@
|
|||
<link rel="stylesheet" type="text/css" media="all" defer="defer"
|
||||
href="chrome://browser/content/abouthome/aboutHome.css"/>
|
||||
|
||||
<script type="text/javascript;version=1.8"
|
||||
<script type="text/javascript"
|
||||
src="chrome://browser/content/abouthome/aboutHome.js"/>
|
||||
<script type="text/javascript;version=1.8"
|
||||
<script type="text/javascript"
|
||||
src="chrome://browser/content/contentSearchUI.js"/>
|
||||
</head>
|
||||
|
||||
|
|
|
@ -823,7 +823,6 @@ html|*#fullscreen-exit-button {
|
|||
.popup-anchor {
|
||||
/* should occupy space but not be visible */
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
pointer-events: none;
|
||||
-moz-stack-sizing: ignore;
|
||||
}
|
||||
|
|
|
@ -91,6 +91,6 @@
|
|||
value="⚙"
|
||||
title="&newtab.customize.title;"/>
|
||||
</body>
|
||||
<script type="text/javascript;version=1.8" src="chrome://browser/content/contentSearchUI.js"/>
|
||||
<script type="text/javascript;version=1.8" src="chrome://browser/content/newtab/newTab.js"/>
|
||||
<script type="text/javascript" src="chrome://browser/content/contentSearchUI.js"/>
|
||||
<script type="text/javascript" src="chrome://browser/content/newtab/newTab.js"/>
|
||||
</html>
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
xmlns:html="http://www.w3.org/1999/xhtml"
|
||||
title="&tabs.otherDevices.label;">
|
||||
<script type="application/javascript;version=1.8" src="chrome://browser/content/sync/aboutSyncTabs.js"/>
|
||||
<script type="application/javascript" src="chrome://browser/content/sync/aboutSyncTabs.js"/>
|
||||
<script type="application/javascript" src="chrome://browser/content/utilityOverlay.js"/>
|
||||
<html:head>
|
||||
<html:link rel="icon" href="chrome://browser/skin/sync-16.png"/>
|
||||
|
|
|
@ -4,4 +4,6 @@ support-files =
|
|||
|
||||
[browser_CaptivePortalWatcher.js]
|
||||
skip-if = os == "win" # Bug 1313894
|
||||
[browser_CaptivePortalWatcher_1.js]
|
||||
skip-if = os == "win" # Bug 1313894
|
||||
[browser_captivePortal_certErrorUI.js]
|
||||
|
|
|
@ -1,171 +1,6 @@
|
|||
"use strict";
|
||||
|
||||
Components.utils.import("resource:///modules/RecentWindow.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "CaptivePortalWatcher",
|
||||
"resource:///modules/CaptivePortalWatcher.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(this, "cps",
|
||||
"@mozilla.org/network/captive-portal-service;1",
|
||||
"nsICaptivePortalService");
|
||||
|
||||
const CANONICAL_CONTENT = "success";
|
||||
const CANONICAL_URL = "data:text/plain;charset=utf-8," + CANONICAL_CONTENT;
|
||||
const CANONICAL_URL_REDIRECTED = "data:text/plain;charset=utf-8,redirected";
|
||||
const PORTAL_NOTIFICATION_VALUE = "captive-portal-detected";
|
||||
|
||||
add_task(function* setup() {
|
||||
yield SpecialPowers.pushPrefEnv({
|
||||
set: [["captivedetect.canonicalURL", CANONICAL_URL],
|
||||
["captivedetect.canonicalContent", CANONICAL_CONTENT]],
|
||||
});
|
||||
// We need to test behavior when a portal is detected when there is no browser
|
||||
// window, but we can't close the default window opened by the test harness.
|
||||
// Instead, we deactivate CaptivePortalWatcher in the default window and
|
||||
// exclude it from RecentWindow.getMostRecentBrowserWindow in an attempt to
|
||||
// mask its presence.
|
||||
window.CaptivePortalWatcher.uninit();
|
||||
RecentWindow._getMostRecentBrowserWindowCopy = RecentWindow.getMostRecentBrowserWindow;
|
||||
let defaultWindow = window;
|
||||
RecentWindow.getMostRecentBrowserWindow = () => {
|
||||
let win = RecentWindow._getMostRecentBrowserWindowCopy();
|
||||
if (win == defaultWindow) {
|
||||
return null;
|
||||
}
|
||||
return win;
|
||||
};
|
||||
});
|
||||
|
||||
function* portalDetected() {
|
||||
Services.obs.notifyObservers(null, "captive-portal-login", null);
|
||||
yield BrowserTestUtils.waitForCondition(() => {
|
||||
return cps.state == cps.LOCKED_PORTAL;
|
||||
}, "Waiting for Captive Portal Service to update state after portal detected.");
|
||||
}
|
||||
|
||||
function* freePortal(aSuccess) {
|
||||
Services.obs.notifyObservers(null,
|
||||
"captive-portal-login-" + (aSuccess ? "success" : "abort"), null);
|
||||
yield BrowserTestUtils.waitForCondition(() => {
|
||||
return cps.state != cps.LOCKED_PORTAL;
|
||||
}, "Waiting for Captive Portal Service to update state after portal freed.");
|
||||
}
|
||||
|
||||
// If a window is provided, it will be focused. Otherwise, a new window
|
||||
// will be opened and focused.
|
||||
function* focusWindowAndWaitForPortalUI(aLongRecheck, win) {
|
||||
// CaptivePortalWatcher triggers a recheck when a window gains focus. If
|
||||
// the time taken for the check to complete is under PORTAL_RECHECK_DELAY_MS,
|
||||
// a tab with the login page is opened and selected. If it took longer,
|
||||
// no tab is opened. It's not reliable to time things in an async test,
|
||||
// so use a delay threshold of -1 to simulate a long recheck (so that any
|
||||
// amount of time is considered excessive), and a very large threshold to
|
||||
// simulate a short recheck.
|
||||
Preferences.set("captivedetect.portalRecheckDelayMS", aLongRecheck ? -1 : 1000000);
|
||||
|
||||
if (!win) {
|
||||
win = yield BrowserTestUtils.openNewBrowserWindow();
|
||||
}
|
||||
yield SimpleTest.promiseFocus(win);
|
||||
|
||||
// After a new window is opened, CaptivePortalWatcher asks for a recheck, and
|
||||
// waits for it to complete. We need to manually tell it a recheck completed.
|
||||
yield BrowserTestUtils.waitForCondition(() => {
|
||||
return win.CaptivePortalWatcher._waitingForRecheck;
|
||||
}, "Waiting for CaptivePortalWatcher to trigger a recheck.");
|
||||
Services.obs.notifyObservers(null, "captive-portal-check-complete", null);
|
||||
|
||||
let notification = ensurePortalNotification(win);
|
||||
|
||||
if (aLongRecheck) {
|
||||
ensureNoPortalTab(win);
|
||||
testShowLoginPageButtonVisibility(notification, "visible");
|
||||
return win;
|
||||
}
|
||||
|
||||
let tab = win.gBrowser.tabs[1];
|
||||
if (tab.linkedBrowser.currentURI.spec != CANONICAL_URL) {
|
||||
// The tab should load the canonical URL, wait for it.
|
||||
yield BrowserTestUtils.waitForLocationChange(win.gBrowser, CANONICAL_URL);
|
||||
}
|
||||
is(win.gBrowser.selectedTab, tab,
|
||||
"The captive portal tab should be open and selected in the new window.");
|
||||
testShowLoginPageButtonVisibility(notification, "hidden");
|
||||
return win;
|
||||
}
|
||||
|
||||
function ensurePortalTab(win) {
|
||||
// For the tests that call this function, it's enough to ensure there
|
||||
// are two tabs in the window - the default tab and the portal tab.
|
||||
is(win.gBrowser.tabs.length, 2,
|
||||
"There should be a captive portal tab in the window.");
|
||||
}
|
||||
|
||||
function ensurePortalNotification(win) {
|
||||
let notificationBox =
|
||||
win.document.getElementById("high-priority-global-notificationbox");
|
||||
let notification = notificationBox.getNotificationWithValue(PORTAL_NOTIFICATION_VALUE)
|
||||
isnot(notification, null,
|
||||
"There should be a captive portal notification in the window.");
|
||||
return notification;
|
||||
}
|
||||
|
||||
// Helper to test whether the "Show Login Page" is visible in the captive portal
|
||||
// notification (it should be hidden when the portal tab is selected).
|
||||
function testShowLoginPageButtonVisibility(notification, visibility) {
|
||||
let showLoginPageButton = notification.querySelector("button.notification-button");
|
||||
// If the visibility property was never changed from default, it will be
|
||||
// an empty string, so we pretend it's "visible" (effectively the same).
|
||||
is(showLoginPageButton.style.visibility || "visible", visibility,
|
||||
"The \"Show Login Page\" button should be " + visibility + ".");
|
||||
}
|
||||
|
||||
function ensureNoPortalTab(win) {
|
||||
is(win.gBrowser.tabs.length, 1,
|
||||
"There should be no captive portal tab in the window.");
|
||||
}
|
||||
|
||||
function ensureNoPortalNotification(win) {
|
||||
let notificationBox =
|
||||
win.document.getElementById("high-priority-global-notificationbox");
|
||||
is(notificationBox.getNotificationWithValue(PORTAL_NOTIFICATION_VALUE), null,
|
||||
"There should be no captive portal notification in the window.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Some tests open a new window and close it later. When the window is closed,
|
||||
* the original window opened by mochitest gains focus, generating a
|
||||
* xul-window-visible notification. If the next test also opens a new window
|
||||
* before this notification has a chance to fire, CaptivePortalWatcher picks
|
||||
* up the first one instead of the one from the new window. To avoid this
|
||||
* unfortunate intermittent timing issue, we wait for the notification from
|
||||
* the original window every time we close a window that we opened.
|
||||
*/
|
||||
function waitForXulWindowVisible() {
|
||||
return new Promise(resolve => {
|
||||
Services.obs.addObserver(function observe() {
|
||||
Services.obs.removeObserver(observe, "xul-window-visible");
|
||||
resolve();
|
||||
}, "xul-window-visible", false);
|
||||
});
|
||||
}
|
||||
|
||||
function* closeWindowAndWaitForXulWindowVisible(win) {
|
||||
let p = waitForXulWindowVisible();
|
||||
yield BrowserTestUtils.closeWindow(win);
|
||||
yield p;
|
||||
}
|
||||
|
||||
/**
|
||||
* BrowserTestUtils.openNewBrowserWindow() does not guarantee the newly
|
||||
* opened window has received focus when the promise resolves, so we
|
||||
* have to manually wait every time.
|
||||
*/
|
||||
function* openWindowAndWaitForFocus() {
|
||||
let win = yield BrowserTestUtils.openNewBrowserWindow();
|
||||
yield SimpleTest.promiseFocus(win);
|
||||
return win;
|
||||
}
|
||||
add_task(setupPrefsAndRecentWindowBehavior);
|
||||
|
||||
// Each of the test cases below is run twice: once for login-success and once
|
||||
// for login-abort (aSuccess set to true and false respectively).
|
||||
|
@ -278,101 +113,7 @@ let testCasesForBothSuccessAndAbort = [
|
|||
},
|
||||
];
|
||||
|
||||
let singleRunTestCases = [
|
||||
/**
|
||||
* A portal is detected when there's no browser window,
|
||||
* then a browser window is opened, and the portal is logged into
|
||||
* and redirects to a different page. The portal tab should be added
|
||||
* and focused when the window is opened, and left open after login
|
||||
* since it redirected.
|
||||
*/
|
||||
function* test_detectedWithNoBrowserWindow_Redirect() {
|
||||
yield portalDetected();
|
||||
let win = yield focusWindowAndWaitForPortalUI();
|
||||
let browser = win.gBrowser.selectedTab.linkedBrowser;
|
||||
let loadPromise =
|
||||
BrowserTestUtils.browserLoaded(browser, false, CANONICAL_URL_REDIRECTED);
|
||||
BrowserTestUtils.loadURI(browser, CANONICAL_URL_REDIRECTED);
|
||||
yield loadPromise;
|
||||
yield freePortal(true);
|
||||
ensurePortalTab(win);
|
||||
ensureNoPortalNotification(win);
|
||||
yield closeWindowAndWaitForXulWindowVisible(win);
|
||||
},
|
||||
|
||||
/**
|
||||
* Test the various expected behaviors of the "Show Login Page" button
|
||||
* in the captive portal notification. The button should be visible for
|
||||
* all tabs except the captive portal tab, and when clicked, should
|
||||
* ensure a captive portal tab is open and select it.
|
||||
*/
|
||||
function* test_showLoginPageButton() {
|
||||
let win = yield openWindowAndWaitForFocus();
|
||||
yield portalDetected();
|
||||
let notification = ensurePortalNotification(win);
|
||||
testShowLoginPageButtonVisibility(notification, "visible");
|
||||
|
||||
function testPortalTabSelectedAndButtonNotVisible() {
|
||||
is(win.gBrowser.selectedTab, tab, "The captive portal tab should be selected.");
|
||||
testShowLoginPageButtonVisibility(notification, "hidden");
|
||||
}
|
||||
|
||||
let button = notification.querySelector("button.notification-button");
|
||||
function* clickButtonAndExpectNewPortalTab() {
|
||||
let p = BrowserTestUtils.waitForNewTab(win.gBrowser, CANONICAL_URL);
|
||||
button.click();
|
||||
let tab = yield p;
|
||||
is(win.gBrowser.selectedTab, tab, "The captive portal tab should be selected.");
|
||||
return tab;
|
||||
}
|
||||
|
||||
// Simulate clicking the button. The portal tab should be opened and
|
||||
// selected and the button should hide.
|
||||
let tab = yield clickButtonAndExpectNewPortalTab();
|
||||
testPortalTabSelectedAndButtonNotVisible();
|
||||
|
||||
// Close the tab. The button should become visible.
|
||||
yield BrowserTestUtils.removeTab(tab);
|
||||
ensureNoPortalTab(win);
|
||||
testShowLoginPageButtonVisibility(notification, "visible");
|
||||
|
||||
// When the button is clicked, a new portal tab should be opened and
|
||||
// selected.
|
||||
tab = yield clickButtonAndExpectNewPortalTab();
|
||||
|
||||
// Open another arbitrary tab. The button should become visible. When it's clicked,
|
||||
// the portal tab should be selected.
|
||||
let anotherTab = yield BrowserTestUtils.openNewForegroundTab(win.gBrowser);
|
||||
testShowLoginPageButtonVisibility(notification, "visible");
|
||||
button.click();
|
||||
is(win.gBrowser.selectedTab, tab, "The captive portal tab should be selected.");
|
||||
|
||||
// Close the portal tab and select the arbitrary tab. The button should become
|
||||
// visible and when it's clicked, a new portal tab should be opened.
|
||||
yield BrowserTestUtils.removeTab(tab);
|
||||
win.gBrowser.selectedTab = anotherTab;
|
||||
testShowLoginPageButtonVisibility(notification, "visible");
|
||||
tab = yield clickButtonAndExpectNewPortalTab();
|
||||
|
||||
yield BrowserTestUtils.removeTab(anotherTab);
|
||||
yield freePortal(true);
|
||||
ensureNoPortalTab(win);
|
||||
ensureNoPortalNotification(win);
|
||||
yield closeWindowAndWaitForXulWindowVisible(win);
|
||||
},
|
||||
];
|
||||
|
||||
for (let testcase of testCasesForBothSuccessAndAbort) {
|
||||
add_task(testcase.bind(null, true));
|
||||
add_task(testcase.bind(null, false));
|
||||
}
|
||||
|
||||
for (let testcase of singleRunTestCases) {
|
||||
add_task(testcase);
|
||||
}
|
||||
|
||||
add_task(function* cleanUp() {
|
||||
RecentWindow.getMostRecentBrowserWindow = RecentWindow._getMostRecentBrowserWindowCopy;
|
||||
delete RecentWindow._getMostRecentBrowserWindowCopy;
|
||||
window.CaptivePortalWatcher.init();
|
||||
});
|
||||
|
|
|
@ -0,0 +1,91 @@
|
|||
"use strict";
|
||||
|
||||
add_task(setupPrefsAndRecentWindowBehavior);
|
||||
|
||||
let testcases = [
|
||||
/**
|
||||
* A portal is detected when there's no browser window,
|
||||
* then a browser window is opened, and the portal is logged into
|
||||
* and redirects to a different page. The portal tab should be added
|
||||
* and focused when the window is opened, and left open after login
|
||||
* since it redirected.
|
||||
*/
|
||||
function* test_detectedWithNoBrowserWindow_Redirect() {
|
||||
yield portalDetected();
|
||||
let win = yield focusWindowAndWaitForPortalUI();
|
||||
let browser = win.gBrowser.selectedTab.linkedBrowser;
|
||||
let loadPromise =
|
||||
BrowserTestUtils.browserLoaded(browser, false, CANONICAL_URL_REDIRECTED);
|
||||
BrowserTestUtils.loadURI(browser, CANONICAL_URL_REDIRECTED);
|
||||
yield loadPromise;
|
||||
yield freePortal(true);
|
||||
ensurePortalTab(win);
|
||||
ensureNoPortalNotification(win);
|
||||
yield closeWindowAndWaitForXulWindowVisible(win);
|
||||
},
|
||||
|
||||
/**
|
||||
* Test the various expected behaviors of the "Show Login Page" button
|
||||
* in the captive portal notification. The button should be visible for
|
||||
* all tabs except the captive portal tab, and when clicked, should
|
||||
* ensure a captive portal tab is open and select it.
|
||||
*/
|
||||
function* test_showLoginPageButton() {
|
||||
let win = yield openWindowAndWaitForFocus();
|
||||
yield portalDetected();
|
||||
let notification = ensurePortalNotification(win);
|
||||
testShowLoginPageButtonVisibility(notification, "visible");
|
||||
|
||||
function testPortalTabSelectedAndButtonNotVisible() {
|
||||
is(win.gBrowser.selectedTab, tab, "The captive portal tab should be selected.");
|
||||
testShowLoginPageButtonVisibility(notification, "hidden");
|
||||
}
|
||||
|
||||
let button = notification.querySelector("button.notification-button");
|
||||
function* clickButtonAndExpectNewPortalTab() {
|
||||
let p = BrowserTestUtils.waitForNewTab(win.gBrowser, CANONICAL_URL);
|
||||
button.click();
|
||||
let tab = yield p;
|
||||
is(win.gBrowser.selectedTab, tab, "The captive portal tab should be selected.");
|
||||
return tab;
|
||||
}
|
||||
|
||||
// Simulate clicking the button. The portal tab should be opened and
|
||||
// selected and the button should hide.
|
||||
let tab = yield clickButtonAndExpectNewPortalTab();
|
||||
testPortalTabSelectedAndButtonNotVisible();
|
||||
|
||||
// Close the tab. The button should become visible.
|
||||
yield BrowserTestUtils.removeTab(tab);
|
||||
ensureNoPortalTab(win);
|
||||
testShowLoginPageButtonVisibility(notification, "visible");
|
||||
|
||||
// When the button is clicked, a new portal tab should be opened and
|
||||
// selected.
|
||||
tab = yield clickButtonAndExpectNewPortalTab();
|
||||
|
||||
// Open another arbitrary tab. The button should become visible. When it's clicked,
|
||||
// the portal tab should be selected.
|
||||
let anotherTab = yield BrowserTestUtils.openNewForegroundTab(win.gBrowser);
|
||||
testShowLoginPageButtonVisibility(notification, "visible");
|
||||
button.click();
|
||||
is(win.gBrowser.selectedTab, tab, "The captive portal tab should be selected.");
|
||||
|
||||
// Close the portal tab and select the arbitrary tab. The button should become
|
||||
// visible and when it's clicked, a new portal tab should be opened.
|
||||
yield BrowserTestUtils.removeTab(tab);
|
||||
win.gBrowser.selectedTab = anotherTab;
|
||||
testShowLoginPageButtonVisibility(notification, "visible");
|
||||
tab = yield clickButtonAndExpectNewPortalTab();
|
||||
|
||||
yield BrowserTestUtils.removeTab(anotherTab);
|
||||
yield freePortal(true);
|
||||
ensureNoPortalTab(win);
|
||||
ensureNoPortalNotification(win);
|
||||
yield closeWindowAndWaitForXulWindowVisible(win);
|
||||
},
|
||||
];
|
||||
|
||||
for (let testcase of testcases) {
|
||||
add_task(testcase);
|
||||
}
|
|
@ -5,9 +5,6 @@
|
|||
|
||||
const BAD_CERT_PAGE = "https://expired.example.com/";
|
||||
|
||||
const CANONICAL_CONTENT = "success";
|
||||
const CANONICAL_URL = "data:text/plain;charset=utf-8," + CANONICAL_CONTENT;
|
||||
|
||||
// This tests the alternate cert error UI when we are behind a captive portal.
|
||||
|
||||
add_task(function* checkCaptivePortalCertErrorUI() {
|
||||
|
|
|
@ -1,3 +1,175 @@
|
|||
Components.utils.import("resource:///modules/RecentWindow.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "CaptivePortalWatcher",
|
||||
"resource:///modules/CaptivePortalWatcher.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(this, "cps",
|
||||
"@mozilla.org/network/captive-portal-service;1",
|
||||
"nsICaptivePortalService");
|
||||
|
||||
const CANONICAL_CONTENT = "success";
|
||||
const CANONICAL_URL = "data:text/plain;charset=utf-8," + CANONICAL_CONTENT;
|
||||
const CANONICAL_URL_REDIRECTED = "data:text/plain;charset=utf-8,redirected";
|
||||
const PORTAL_NOTIFICATION_VALUE = "captive-portal-detected";
|
||||
|
||||
function* setupPrefsAndRecentWindowBehavior() {
|
||||
yield SpecialPowers.pushPrefEnv({
|
||||
set: [["captivedetect.canonicalURL", CANONICAL_URL],
|
||||
["captivedetect.canonicalContent", CANONICAL_CONTENT]],
|
||||
});
|
||||
// We need to test behavior when a portal is detected when there is no browser
|
||||
// window, but we can't close the default window opened by the test harness.
|
||||
// Instead, we deactivate CaptivePortalWatcher in the default window and
|
||||
// exclude it from RecentWindow.getMostRecentBrowserWindow in an attempt to
|
||||
// mask its presence.
|
||||
window.CaptivePortalWatcher.uninit();
|
||||
let getMostRecentBrowserWindowCopy = RecentWindow.getMostRecentBrowserWindow;
|
||||
let defaultWindow = window;
|
||||
RecentWindow.getMostRecentBrowserWindow = () => {
|
||||
let win = getMostRecentBrowserWindowCopy();
|
||||
if (win == defaultWindow) {
|
||||
return null;
|
||||
}
|
||||
return win;
|
||||
};
|
||||
|
||||
registerCleanupFunction(function* cleanUp() {
|
||||
RecentWindow.getMostRecentBrowserWindow = getMostRecentBrowserWindowCopy;
|
||||
window.CaptivePortalWatcher.init();
|
||||
});
|
||||
}
|
||||
|
||||
function* portalDetected() {
|
||||
Services.obs.notifyObservers(null, "captive-portal-login", null);
|
||||
yield BrowserTestUtils.waitForCondition(() => {
|
||||
return cps.state == cps.LOCKED_PORTAL;
|
||||
}, "Waiting for Captive Portal Service to update state after portal detected.");
|
||||
}
|
||||
|
||||
function* freePortal(aSuccess) {
|
||||
Services.obs.notifyObservers(null,
|
||||
"captive-portal-login-" + (aSuccess ? "success" : "abort"), null);
|
||||
yield BrowserTestUtils.waitForCondition(() => {
|
||||
return cps.state != cps.LOCKED_PORTAL;
|
||||
}, "Waiting for Captive Portal Service to update state after portal freed.");
|
||||
}
|
||||
|
||||
// If a window is provided, it will be focused. Otherwise, a new window
|
||||
// will be opened and focused.
|
||||
function* focusWindowAndWaitForPortalUI(aLongRecheck, win) {
|
||||
// CaptivePortalWatcher triggers a recheck when a window gains focus. If
|
||||
// the time taken for the check to complete is under PORTAL_RECHECK_DELAY_MS,
|
||||
// a tab with the login page is opened and selected. If it took longer,
|
||||
// no tab is opened. It's not reliable to time things in an async test,
|
||||
// so use a delay threshold of -1 to simulate a long recheck (so that any
|
||||
// amount of time is considered excessive), and a very large threshold to
|
||||
// simulate a short recheck.
|
||||
Preferences.set("captivedetect.portalRecheckDelayMS", aLongRecheck ? -1 : 1000000);
|
||||
|
||||
if (!win) {
|
||||
win = yield BrowserTestUtils.openNewBrowserWindow();
|
||||
}
|
||||
yield SimpleTest.promiseFocus(win);
|
||||
|
||||
// After a new window is opened, CaptivePortalWatcher asks for a recheck, and
|
||||
// waits for it to complete. We need to manually tell it a recheck completed.
|
||||
yield BrowserTestUtils.waitForCondition(() => {
|
||||
return win.CaptivePortalWatcher._waitingForRecheck;
|
||||
}, "Waiting for CaptivePortalWatcher to trigger a recheck.");
|
||||
Services.obs.notifyObservers(null, "captive-portal-check-complete", null);
|
||||
|
||||
let notification = ensurePortalNotification(win);
|
||||
|
||||
if (aLongRecheck) {
|
||||
ensureNoPortalTab(win);
|
||||
testShowLoginPageButtonVisibility(notification, "visible");
|
||||
return win;
|
||||
}
|
||||
|
||||
let tab = win.gBrowser.tabs[1];
|
||||
if (tab.linkedBrowser.currentURI.spec != CANONICAL_URL) {
|
||||
// The tab should load the canonical URL, wait for it.
|
||||
yield BrowserTestUtils.waitForLocationChange(win.gBrowser, CANONICAL_URL);
|
||||
}
|
||||
is(win.gBrowser.selectedTab, tab,
|
||||
"The captive portal tab should be open and selected in the new window.");
|
||||
testShowLoginPageButtonVisibility(notification, "hidden");
|
||||
return win;
|
||||
}
|
||||
|
||||
function ensurePortalTab(win) {
|
||||
// For the tests that call this function, it's enough to ensure there
|
||||
// are two tabs in the window - the default tab and the portal tab.
|
||||
is(win.gBrowser.tabs.length, 2,
|
||||
"There should be a captive portal tab in the window.");
|
||||
}
|
||||
|
||||
function ensurePortalNotification(win) {
|
||||
let notificationBox =
|
||||
win.document.getElementById("high-priority-global-notificationbox");
|
||||
let notification = notificationBox.getNotificationWithValue(PORTAL_NOTIFICATION_VALUE)
|
||||
isnot(notification, null,
|
||||
"There should be a captive portal notification in the window.");
|
||||
return notification;
|
||||
}
|
||||
|
||||
// Helper to test whether the "Show Login Page" is visible in the captive portal
|
||||
// notification (it should be hidden when the portal tab is selected).
|
||||
function testShowLoginPageButtonVisibility(notification, visibility) {
|
||||
let showLoginPageButton = notification.querySelector("button.notification-button");
|
||||
// If the visibility property was never changed from default, it will be
|
||||
// an empty string, so we pretend it's "visible" (effectively the same).
|
||||
is(showLoginPageButton.style.visibility || "visible", visibility,
|
||||
"The \"Show Login Page\" button should be " + visibility + ".");
|
||||
}
|
||||
|
||||
function ensureNoPortalTab(win) {
|
||||
is(win.gBrowser.tabs.length, 1,
|
||||
"There should be no captive portal tab in the window.");
|
||||
}
|
||||
|
||||
function ensureNoPortalNotification(win) {
|
||||
let notificationBox =
|
||||
win.document.getElementById("high-priority-global-notificationbox");
|
||||
is(notificationBox.getNotificationWithValue(PORTAL_NOTIFICATION_VALUE), null,
|
||||
"There should be no captive portal notification in the window.");
|
||||
}
|
||||
|
||||
/**
|
||||
* Some tests open a new window and close it later. When the window is closed,
|
||||
* the original window opened by mochitest gains focus, generating a
|
||||
* xul-window-visible notification. If the next test also opens a new window
|
||||
* before this notification has a chance to fire, CaptivePortalWatcher picks
|
||||
* up the first one instead of the one from the new window. To avoid this
|
||||
* unfortunate intermittent timing issue, we wait for the notification from
|
||||
* the original window every time we close a window that we opened.
|
||||
*/
|
||||
function waitForXulWindowVisible() {
|
||||
return new Promise(resolve => {
|
||||
Services.obs.addObserver(function observe() {
|
||||
Services.obs.removeObserver(observe, "xul-window-visible");
|
||||
resolve();
|
||||
}, "xul-window-visible", false);
|
||||
});
|
||||
}
|
||||
|
||||
function* closeWindowAndWaitForXulWindowVisible(win) {
|
||||
let p = waitForXulWindowVisible();
|
||||
yield BrowserTestUtils.closeWindow(win);
|
||||
yield p;
|
||||
}
|
||||
|
||||
/**
|
||||
* BrowserTestUtils.openNewBrowserWindow() does not guarantee the newly
|
||||
* opened window has received focus when the promise resolves, so we
|
||||
* have to manually wait every time.
|
||||
*/
|
||||
function* openWindowAndWaitForFocus() {
|
||||
let win = yield BrowserTestUtils.openNewBrowserWindow();
|
||||
yield SimpleTest.promiseFocus(win);
|
||||
return win;
|
||||
}
|
||||
|
||||
function waitForCertErrorLoad(browser) {
|
||||
return new Promise(resolve => {
|
||||
info("Waiting for DOMContentLoaded event");
|
||||
|
|
|
@ -1,83 +1,83 @@
|
|||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
|
||||
<script type="text/javascript;version=1.8">
|
||||
|
||||
function init() {
|
||||
window.addEventListener("message", function process(e) {doTest(e)});
|
||||
// unless we relinquish the eventloop,
|
||||
// tests will run before the chrome event handlers are ready
|
||||
setTimeout(doTest, 0);
|
||||
}
|
||||
|
||||
function checkStatusValue(payload, expectedValue) {
|
||||
return payload.status == expectedValue;
|
||||
}
|
||||
|
||||
let tests = [
|
||||
{
|
||||
info: "Check account log in",
|
||||
event: "login",
|
||||
data: {
|
||||
email: "foo@example.com",
|
||||
uid: "1234@lcip.org",
|
||||
assertion: "foobar",
|
||||
sessionToken: "dead",
|
||||
kA: "beef",
|
||||
kB: "cafe",
|
||||
verified: true
|
||||
},
|
||||
payloadType: "message",
|
||||
validateResponse: function(payload) {
|
||||
return checkStatusValue(payload, "login");
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
let currentTest = -1;
|
||||
function doTest(evt) {
|
||||
if (evt) {
|
||||
if (currentTest < 0 || !evt.data.content)
|
||||
return; // not yet testing
|
||||
|
||||
let test = tests[currentTest];
|
||||
if (evt.data.type != test.payloadType)
|
||||
return; // skip unrequested events
|
||||
|
||||
let error = JSON.stringify(evt.data.content);
|
||||
let pass = false;
|
||||
try {
|
||||
pass = test.validateResponse(evt.data.content)
|
||||
} catch (e) {}
|
||||
reportResult(test.info, pass, error);
|
||||
}
|
||||
// start the next test if there are any left
|
||||
if (tests[++currentTest])
|
||||
sendToBrowser(tests[currentTest].event, tests[currentTest].data);
|
||||
else
|
||||
reportFinished();
|
||||
}
|
||||
|
||||
function reportResult(info, pass, error) {
|
||||
let data = {type: "testResult", info: info, pass: pass, error: error};
|
||||
let event = new CustomEvent("FirefoxAccountsTestResponse", {detail: {data: data}, bubbles: true});
|
||||
document.dispatchEvent(event);
|
||||
}
|
||||
|
||||
function reportFinished(cmd) {
|
||||
let data = {type: "testsComplete", count: tests.length};
|
||||
let event = new CustomEvent("FirefoxAccountsTestResponse", {detail: {data: data}, bubbles: true});
|
||||
document.dispatchEvent(event);
|
||||
}
|
||||
|
||||
function sendToBrowser(type, data) {
|
||||
let event = new CustomEvent("FirefoxAccountsCommand", {detail: {command: type, data: data}, bubbles: true});
|
||||
document.dispatchEvent(event);
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body onload="init()">
|
||||
</body>
|
||||
</html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
|
||||
<script type="text/javascript">
|
||||
|
||||
function init() {
|
||||
window.addEventListener("message", function process(e) { doTest(e) });
|
||||
// unless we relinquish the eventloop,
|
||||
// tests will run before the chrome event handlers are ready
|
||||
setTimeout(doTest, 0);
|
||||
}
|
||||
|
||||
function checkStatusValue(payload, expectedValue) {
|
||||
return payload.status == expectedValue;
|
||||
}
|
||||
|
||||
let tests = [
|
||||
{
|
||||
info: "Check account log in",
|
||||
event: "login",
|
||||
data: {
|
||||
email: "foo@example.com",
|
||||
uid: "1234@lcip.org",
|
||||
assertion: "foobar",
|
||||
sessionToken: "dead",
|
||||
kA: "beef",
|
||||
kB: "cafe",
|
||||
verified: true
|
||||
},
|
||||
payloadType: "message",
|
||||
validateResponse(payload) {
|
||||
return checkStatusValue(payload, "login");
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
let currentTest = -1;
|
||||
function doTest(evt) {
|
||||
if (evt) {
|
||||
if (currentTest < 0 || !evt.data.content)
|
||||
return; // not yet testing
|
||||
|
||||
let test = tests[currentTest];
|
||||
if (evt.data.type != test.payloadType)
|
||||
return; // skip unrequested events
|
||||
|
||||
let error = JSON.stringify(evt.data.content);
|
||||
let pass = false;
|
||||
try {
|
||||
pass = test.validateResponse(evt.data.content)
|
||||
} catch (e) {}
|
||||
reportResult(test.info, pass, error);
|
||||
}
|
||||
// start the next test if there are any left
|
||||
if (tests[++currentTest])
|
||||
sendToBrowser(tests[currentTest].event, tests[currentTest].data);
|
||||
else
|
||||
reportFinished();
|
||||
}
|
||||
|
||||
function reportResult(info, pass, error) {
|
||||
let data = {type: "testResult", info, pass, error};
|
||||
let event = new CustomEvent("FirefoxAccountsTestResponse", {detail: {data}, bubbles: true});
|
||||
document.dispatchEvent(event);
|
||||
}
|
||||
|
||||
function reportFinished(cmd) {
|
||||
let data = {type: "testsComplete", count: tests.length};
|
||||
let event = new CustomEvent("FirefoxAccountsTestResponse", {detail: {data}, bubbles: true});
|
||||
document.dispatchEvent(event);
|
||||
}
|
||||
|
||||
function sendToBrowser(type, data) {
|
||||
let event = new CustomEvent("FirefoxAccountsCommand", {detail: {command: type, data}, bubbles: true});
|
||||
document.dispatchEvent(event);
|
||||
}
|
||||
|
||||
</script>
|
||||
</head>
|
||||
<body onload="init()">
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -106,6 +106,7 @@ support-files =
|
|||
content_aboutAccounts.js
|
||||
[browser_aboutCertError.js]
|
||||
[browser_aboutNetError.js]
|
||||
[browser_aboutSupport.js]
|
||||
[browser_aboutSupport_newtab_security_state.js]
|
||||
[browser_aboutHealthReport.js]
|
||||
skip-if = os == "linux" # Bug 924307
|
||||
|
@ -426,6 +427,7 @@ skip-if = true # Bug 1005420 - fails intermittently. also with e10s enabled: biz
|
|||
skip-if = (os == "win" && !debug)
|
||||
[browser_web_channel.js]
|
||||
[browser_windowopen_reflows.js]
|
||||
skip-if = os == "mac" # bug 1339317
|
||||
[browser_zbug569342.js]
|
||||
skip-if = e10s || debug # Bug 1094240 - has findbar-related failures
|
||||
[browser_registerProtocolHandler_notification.js]
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
Cu.import("resource://gre/modules/AppConstants.jsm");
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
|
||||
add_task(function* () {
|
||||
yield BrowserTestUtils.withNewTab({ gBrowser, url: "about:support" }, function* (browser) {
|
||||
const strings = Services.strings.createBundle(
|
||||
"chrome://global/locale/aboutSupport.properties");
|
||||
let allowedStates = [strings.GetStringFromName("found"),
|
||||
strings.GetStringFromName("missing")];
|
||||
|
||||
let keyGoogleStatus = yield ContentTask.spawn(browser, null, function* () {
|
||||
let textBox = content.document.getElementById("key-google-box");
|
||||
yield ContentTaskUtils.waitForCondition(() => textBox.textContent.trim(),
|
||||
"Google API key status loaded");
|
||||
return textBox.textContent;
|
||||
});
|
||||
ok(allowedStates.includes(keyGoogleStatus), "Google API key status shown");
|
||||
|
||||
let keyMozillaStatus = yield ContentTask.spawn(browser, null, function* () {
|
||||
let textBox = content.document.getElementById("key-mozilla-box");
|
||||
yield ContentTaskUtils.waitForCondition(() => textBox.textContent.trim(),
|
||||
"Mozilla API key status loaded");
|
||||
return textBox.textContent;
|
||||
});
|
||||
ok(allowedStates.includes(keyMozillaStatus), "Mozilla API key status shown");
|
||||
});
|
||||
});
|
|
@ -5,10 +5,10 @@
|
|||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<script type="application/javascript;version=1.8"
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js">
|
||||
</script>
|
||||
<script type="application/javascript;version=1.8"
|
||||
<script type="application/javascript"
|
||||
src="chrome://browser/content/contentSearchUI.js">
|
||||
</script>
|
||||
<link rel="stylesheet" href="chrome://browser/content/contentSearchUI.css"/>
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<script type="application/javascript;version=1.7"
|
||||
<script type="application/javascript"
|
||||
src="healthreport_pingData.js">
|
||||
</script>
|
||||
<script type="application/javascript;version=1.7">
|
||||
<script type="application/javascript">
|
||||
|
||||
function init() {
|
||||
window.addEventListener("message", doTest);
|
||||
|
@ -16,7 +16,7 @@ function checkSubmissionValue(payload, expectedValue) {
|
|||
}
|
||||
|
||||
function isArray(arg) {
|
||||
return Object.prototype.toString.call(arg) === '[object Array]';
|
||||
return Object.prototype.toString.call(arg) === "[object Array]";
|
||||
}
|
||||
|
||||
function writeDiagnostic(text) {
|
||||
|
@ -62,7 +62,7 @@ function validateTelemetryPingList(list) {
|
|||
}
|
||||
|
||||
let valid = true;
|
||||
for (let i=0; i<list.length; ++i) {
|
||||
for (let i = 0; i < list.length; ++i) {
|
||||
let received = list[i];
|
||||
let expected = TEST_PINGS[i];
|
||||
if (received.type != expected.type ||
|
||||
|
@ -76,7 +76,7 @@ function validateTelemetryPingList(list) {
|
|||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
return valid;
|
||||
}
|
||||
|
||||
function validateTelemetryPingData(expected, received) {
|
||||
|
@ -99,7 +99,7 @@ var tests = [
|
|||
info: "Checking initial value is enabled",
|
||||
event: "RequestCurrentPrefs",
|
||||
payloadType: "prefs",
|
||||
validateResponse: function(payload) {
|
||||
validateResponse(payload) {
|
||||
return checkSubmissionValue(payload, true);
|
||||
},
|
||||
},
|
||||
|
@ -107,7 +107,7 @@ var tests = [
|
|||
info: "Verifying disabling works",
|
||||
event: "DisableDataSubmission",
|
||||
payloadType: "prefs",
|
||||
validateResponse: function(payload) {
|
||||
validateResponse(payload) {
|
||||
return checkSubmissionValue(payload, false);
|
||||
},
|
||||
},
|
||||
|
@ -115,7 +115,7 @@ var tests = [
|
|||
info: "Verifying we're still disabled",
|
||||
event: "RequestCurrentPrefs",
|
||||
payloadType: "prefs",
|
||||
validateResponse: function(payload) {
|
||||
validateResponse(payload) {
|
||||
return checkSubmissionValue(payload, false);
|
||||
},
|
||||
},
|
||||
|
@ -123,7 +123,7 @@ var tests = [
|
|||
info: "Verifying that we can get the current ping data while submission is disabled",
|
||||
event: "RequestCurrentPingData",
|
||||
payloadType: "telemetry-current-ping-data",
|
||||
validateResponse: function(payload) {
|
||||
validateResponse(payload) {
|
||||
return validateCurrentTelemetryPingData(payload);
|
||||
},
|
||||
},
|
||||
|
@ -131,7 +131,7 @@ var tests = [
|
|||
info: "Verifying enabling works",
|
||||
event: "EnableDataSubmission",
|
||||
payloadType: "prefs",
|
||||
validateResponse: function(payload) {
|
||||
validateResponse(payload) {
|
||||
return checkSubmissionValue(payload, true);
|
||||
},
|
||||
},
|
||||
|
@ -139,7 +139,7 @@ var tests = [
|
|||
info: "Verifying we're still re-enabled",
|
||||
event: "RequestCurrentPrefs",
|
||||
payloadType: "prefs",
|
||||
validateResponse: function(payload) {
|
||||
validateResponse(payload) {
|
||||
return checkSubmissionValue(payload, true);
|
||||
},
|
||||
},
|
||||
|
@ -147,7 +147,7 @@ var tests = [
|
|||
info: "Verifying that we can get the current Telemetry environment data",
|
||||
event: "RequestCurrentEnvironment",
|
||||
payloadType: "telemetry-current-environment-data",
|
||||
validateResponse: function(payload) {
|
||||
validateResponse(payload) {
|
||||
return validateCurrentTelemetryEnvironment(payload);
|
||||
},
|
||||
},
|
||||
|
@ -155,7 +155,7 @@ var tests = [
|
|||
info: "Verifying that we can get the current Telemetry ping data",
|
||||
event: "RequestCurrentPingData",
|
||||
payloadType: "telemetry-current-ping-data",
|
||||
validateResponse: function(payload) {
|
||||
validateResponse(payload) {
|
||||
return validateCurrentTelemetryPingData(payload);
|
||||
},
|
||||
},
|
||||
|
@ -163,7 +163,7 @@ var tests = [
|
|||
info: "Verifying that we get the proper Telemetry ping list",
|
||||
event: "RequestTelemetryPingList",
|
||||
payloadType: "telemetry-ping-list",
|
||||
validateResponse: function(payload) {
|
||||
validateResponse(payload) {
|
||||
// Validate the ping list
|
||||
if (!validateTelemetryPingList(payload)) {
|
||||
return false;
|
||||
|
@ -171,15 +171,15 @@ var tests = [
|
|||
|
||||
// Now that we received the ping ids, set up additional test tasks
|
||||
// that check loading the individual pings.
|
||||
for (let i=0; i<TEST_PINGS.length; ++i) {
|
||||
for (let i = 0; i < TEST_PINGS.length; ++i) {
|
||||
TEST_PINGS[i].id = payload[i].id;
|
||||
tests.push({
|
||||
info: "Verifying that we can get the proper Telemetry ping data #" + (i + 1),
|
||||
event: "RequestTelemetryPingData",
|
||||
eventData: { id: TEST_PINGS[i].id },
|
||||
payloadType: "telemetry-ping-data",
|
||||
validateResponse: function(payload) {
|
||||
return validateTelemetryPingData(TEST_PINGS[i], payload.pingData);
|
||||
validateResponse(payload2) {
|
||||
return validateTelemetryPingData(TEST_PINGS[i], payload2.pingData);
|
||||
},
|
||||
});
|
||||
}
|
||||
|
@ -214,14 +214,14 @@ function doTest(evt) {
|
|||
}
|
||||
|
||||
function reportResult(info, pass, error) {
|
||||
var data = {type: "testResult", info: info, pass: pass, error: error};
|
||||
var event = new CustomEvent("FirefoxHealthReportTestResponse", {detail: {data: data}, bubbles: true});
|
||||
var data = {type: "testResult", info, pass, error};
|
||||
var event = new CustomEvent("FirefoxHealthReportTestResponse", {detail: {data}, bubbles: true});
|
||||
document.dispatchEvent(event);
|
||||
}
|
||||
|
||||
function reportFinished(cmd) {
|
||||
var data = {type: "testsComplete", count: tests.length};
|
||||
var event = new CustomEvent("FirefoxHealthReportTestResponse", {detail: {data: data}, bubbles: true});
|
||||
var event = new CustomEvent("FirefoxHealthReportTestResponse", {detail: {data}, bubbles: true});
|
||||
document.dispatchEvent(event);
|
||||
}
|
||||
|
||||
|
@ -232,7 +232,7 @@ function sendToBrowser(type, eventData) {
|
|||
detail[key] = eventData[key];
|
||||
}
|
||||
|
||||
var event = new CustomEvent("RemoteHealthReportCommand", {detail: detail, bubbles: true});
|
||||
var event = new CustomEvent("RemoteHealthReportCommand", {detail, bubbles: true});
|
||||
document.dispatchEvent(event);
|
||||
}
|
||||
|
||||
|
|
|
@ -15,5 +15,5 @@ skip-if = (e10s && debug) || (os == "linux" && !debug) # bug 1320754 for e10s de
|
|||
[browser_devices_get_user_media_unprompted_access.js]
|
||||
[browser_devices_get_user_media_unprompted_access_in_frame.js]
|
||||
[browser_devices_get_user_media_unprompted_access_tear_off_tab.js]
|
||||
skip-if = (os == "linux") # linux: bug 1331616
|
||||
skip-if = (os == "linux") || (os == "win" && bits == 64) # linux: bug 1331616, win8: bug 1334752
|
||||
[browser_webrtc_hooks.js]
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<title>Bug 1238183</title>
|
||||
</head>
|
||||
<body>
|
||||
<script type="application/javascript;version=1.7">
|
||||
<script type="application/javascript">
|
||||
"use strict";
|
||||
|
||||
// if we have a query string, use it to set storages
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
<link rel="stylesheet" href="chrome://browser/skin/aboutWelcomeBack.css" type="text/css" media="all"/>
|
||||
<link rel="icon" type="image/png" href="chrome://global/skin/icons/information-16.png"/>
|
||||
|
||||
<script type="application/javascript;version=1.8" src="chrome://browser/content/aboutSessionRestore.js"/>
|
||||
<script type="application/javascript" src="chrome://browser/content/aboutSessionRestore.js"/>
|
||||
</head>
|
||||
|
||||
<body dir="&locale.dir;">
|
||||
|
|
|
@ -7,9 +7,9 @@
|
|||
<body>
|
||||
<div id="display" style="white-space:pre; font-family:monospace; display:inline;"></div>
|
||||
<iframe id="iframe" src="file_broadcastChanneliFrame.html"></iframe>>
|
||||
<script type="text/javascript;version=1.7">
|
||||
<script type="text/javascript">
|
||||
let bc = new BroadcastChannel("testBroadcastChannel");
|
||||
bc.onmessage = function (e) {
|
||||
bc.onmessage = function(e) {
|
||||
document.getElementById("display").innerHTML = e.data;
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -6,9 +6,9 @@
|
|||
</head>
|
||||
<body>
|
||||
<div id="display" style="white-space:pre; font-family:monospace; display:inline;"></div>
|
||||
<script type="text/javascript;version=1.7">
|
||||
<script type="text/javascript">
|
||||
let bc = new BroadcastChannel("testBroadcastChannel");
|
||||
bc.onmessage = function (e) {
|
||||
bc.onmessage = function(e) {
|
||||
window.parent.postMessage(e.data, "*");
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -14,9 +14,9 @@
|
|||
|
||||
<body>
|
||||
<pre id="test"></pre>
|
||||
<script type="application/javascript;version=1.8">
|
||||
/*globals SpecialPowers, SimpleTest, is, ok, */
|
||||
'use strict';
|
||||
<script type="application/javascript">
|
||||
/* globals SpecialPowers, SimpleTest, is, ok, */
|
||||
"use strict";
|
||||
|
||||
const {
|
||||
UNKNOWN_ACTION,
|
||||
|
@ -28,22 +28,22 @@
|
|||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
const PERMISSIONS = [{
|
||||
name: 'geolocation',
|
||||
type: 'geo'
|
||||
name: "geolocation",
|
||||
type: "geo"
|
||||
}, {
|
||||
name: 'notifications',
|
||||
type: 'desktop-notification'
|
||||
name: "notifications",
|
||||
type: "desktop-notification"
|
||||
}, {
|
||||
name: 'push',
|
||||
type: 'desktop-notification'
|
||||
name: "push",
|
||||
type: "desktop-notification"
|
||||
}, {
|
||||
name: 'persistent-storage',
|
||||
type: 'persistent-storage'
|
||||
name: "persistent-storage",
|
||||
type: "persistent-storage"
|
||||
}, ];
|
||||
|
||||
const UNSUPPORTED_PERMISSIONS = [
|
||||
'foobarbaz', // Not in spec, for testing only.
|
||||
'midi',
|
||||
"foobarbaz", // Not in spec, for testing only.
|
||||
"midi",
|
||||
];
|
||||
|
||||
// Create a closure, so that tests are run on the correct window object.
|
||||
|
@ -54,7 +54,7 @@
|
|||
return {
|
||||
type,
|
||||
allow,
|
||||
'context': aWindow.document
|
||||
"context": aWindow.document
|
||||
};
|
||||
});
|
||||
return new Promise((resolve) => {
|
||||
|
@ -64,11 +64,11 @@
|
|||
});
|
||||
},
|
||||
revokePermissions() {
|
||||
const promisesToRevoke = PERMISSIONS.map(({ name }) => {
|
||||
const promisesToRevoke = PERMISSIONS.map(({ name }) => {
|
||||
return aWindow.navigator.permissions
|
||||
.revoke({ name })
|
||||
.then(
|
||||
({ state }) => is(state, 'prompt', `correct state for '${name}'`),
|
||||
({ state }) => is(state, "prompt", `correct state for '${name}'`),
|
||||
() => ok(false, `revoke should not have rejected for '${name}'`)
|
||||
);
|
||||
});
|
||||
|
@ -80,7 +80,7 @@
|
|||
.revoke({ name })
|
||||
.then(
|
||||
() => ok(false, `revoke should not have resolved for '${name}'`),
|
||||
error => is(error.name, 'TypeError', `revoke should have thrown TypeError for '${name}'`)
|
||||
error => is(error.name, "TypeError", `revoke should have thrown TypeError for '${name}'`)
|
||||
);
|
||||
});
|
||||
return Promise.all(promisesToRevoke);
|
||||
|
@ -103,7 +103,7 @@
|
|||
.then(
|
||||
() => ok(false, `query should not have resolved for '${name}'`),
|
||||
error => {
|
||||
is(error.name, 'TypeError',
|
||||
is(error.name, "TypeError",
|
||||
`query should have thrown TypeError for '${name}'`);
|
||||
}
|
||||
);
|
||||
|
@ -127,11 +127,11 @@
|
|||
testStatusOnChange() {
|
||||
return new Promise((resolve) => {
|
||||
SpecialPowers.popPermissions(() => {
|
||||
const permission = 'geolocation';
|
||||
const promiseGranted = this.promiseStateChanged(permission, 'granted');
|
||||
const permission = "geolocation";
|
||||
const promiseGranted = this.promiseStateChanged(permission, "granted");
|
||||
this.setPermissions(ALLOW_ACTION);
|
||||
promiseGranted.then(() => {
|
||||
const promisePrompt = this.promiseStateChanged(permission, 'prompt');
|
||||
const promisePrompt = this.promiseStateChanged(permission, "prompt");
|
||||
SpecialPowers.popPermissions();
|
||||
return promisePrompt;
|
||||
}).then(resolve);
|
||||
|
@ -140,18 +140,18 @@
|
|||
},
|
||||
testInvalidQuery() {
|
||||
return aWindow.navigator.permissions
|
||||
.query({ name: 'invalid' })
|
||||
.query({ name: "invalid" })
|
||||
.then(
|
||||
() => ok(false, 'invalid query should not have resolved'),
|
||||
() => ok(true, 'invalid query should have rejected')
|
||||
() => ok(false, "invalid query should not have resolved"),
|
||||
() => ok(true, "invalid query should have rejected")
|
||||
);
|
||||
},
|
||||
testInvalidRevoke() {
|
||||
return aWindow.navigator.permissions
|
||||
.revoke({ name: 'invalid' })
|
||||
.revoke({ name: "invalid" })
|
||||
.then(
|
||||
() => ok(false, 'invalid revoke should not have resolved'),
|
||||
() => ok(true, 'invalid revoke should have rejected')
|
||||
() => ok(false, "invalid revoke should not have resolved"),
|
||||
() => ok(true, "invalid revoke should have rejected")
|
||||
);
|
||||
},
|
||||
};
|
||||
|
@ -159,9 +159,9 @@
|
|||
|
||||
function enablePrefs() {
|
||||
const ops = {
|
||||
'set': [
|
||||
['dom.permissions.revoke.enable', true],
|
||||
['privacy.firstparty.isolate', true],
|
||||
"set": [
|
||||
["dom.permissions.revoke.enable", true],
|
||||
["privacy.firstparty.isolate", true],
|
||||
],
|
||||
};
|
||||
return SpecialPowers.pushPrefEnv(ops);
|
||||
|
@ -169,13 +169,13 @@
|
|||
|
||||
function createIframe() {
|
||||
return new Promise((resolve) => {
|
||||
const iframe = document.createElement('iframe');
|
||||
iframe.src = 'file_empty.html';
|
||||
const iframe = document.createElement("iframe");
|
||||
iframe.src = "file_empty.html";
|
||||
iframe.onload = () => resolve(iframe.contentWindow);
|
||||
document.body.appendChild(iframe);
|
||||
});
|
||||
}
|
||||
debugger;
|
||||
|
||||
window.onload = () => {
|
||||
enablePrefs()
|
||||
.then(createIframe)
|
||||
|
@ -184,18 +184,18 @@
|
|||
return tester
|
||||
.checkUnsupportedPermissions()
|
||||
.then(() => tester.setPermissions(UNKNOWN_ACTION))
|
||||
.then(() => tester.checkPermissions('prompt'))
|
||||
.then(() => tester.checkPermissions("prompt"))
|
||||
.then(() => tester.setPermissions(PROMPT_ACTION))
|
||||
.then(() => tester.checkPermissions('prompt'))
|
||||
.then(() => tester.checkPermissions("prompt"))
|
||||
.then(() => tester.setPermissions(ALLOW_ACTION))
|
||||
.then(() => tester.checkPermissions('granted'))
|
||||
.then(() => tester.checkPermissions("granted"))
|
||||
.then(() => tester.setPermissions(DENY_ACTION))
|
||||
.then(() => tester.checkPermissions('denied'))
|
||||
.then(() => tester.checkPermissions("denied"))
|
||||
.then(() => tester.testStatusOnChange())
|
||||
.then(() => tester.testInvalidQuery())
|
||||
.then(() => tester.revokeUnsupportedPermissions())
|
||||
.then(() => tester.revokePermissions())
|
||||
.then(() => tester.checkPermissions('prompt'))
|
||||
.then(() => tester.checkPermissions("prompt"))
|
||||
.then(() => tester.testInvalidRevoke());
|
||||
})
|
||||
.then(SimpleTest.finish)
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
<link id="favicon" rel="icon" type="image/png"/>
|
||||
<link rel="stylesheet" href="chrome://browser/content/aboutPrivateBrowsing.css" type="text/css" media="all"/>
|
||||
<link rel="stylesheet" href="chrome://browser/skin/privatebrowsing/aboutPrivateBrowsing.css" type="text/css" media="all"/>
|
||||
<script type="application/javascript;version=1.7" src="chrome://browser/content/aboutPrivateBrowsing.js"></script>
|
||||
<script type="application/javascript" src="chrome://browser/content/aboutPrivateBrowsing.js"></script>
|
||||
</head>
|
||||
|
||||
<body dir="&locale.dir;">
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
<link rel="icon" type="image/png"
|
||||
href="chrome://browser/skin/favicon-search-16.svg"/>
|
||||
|
||||
<script type="application/javascript;version=1.8"
|
||||
<script type="application/javascript"
|
||||
src="chrome://browser/content/search/searchReset.js"/>
|
||||
</head>
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@ skip-if = artifact # bug 1315953
|
|||
[browser_google_codes.js]
|
||||
skip-if = artifact # bug 1315953
|
||||
[browser_google_nocodes.js]
|
||||
skip-if = artifact # bug 1315953
|
||||
[browser_google_behavior.js]
|
||||
skip-if = artifact # bug 1315953
|
||||
[browser_healthreport.js]
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
<link rel="stylesheet" href="chrome://browser/skin/aboutSessionRestore.css" type="text/css" media="all"/>
|
||||
<link rel="icon" type="image/png" href="chrome://global/skin/icons/warning-16.png"/>
|
||||
|
||||
<script type="application/javascript;version=1.8" src="chrome://browser/content/aboutSessionRestore.js"/>
|
||||
<script type="application/javascript" src="chrome://browser/content/aboutSessionRestore.js"/>
|
||||
</head>
|
||||
|
||||
<body dir="&locale.dir;">
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<body>
|
||||
<input id="txt" />
|
||||
|
||||
<script type="text/javascript;version=1.8">
|
||||
<script type="text/javascript">
|
||||
let isOuter = window == window.top;
|
||||
|
||||
if (isOuter) {
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<title>browser_sessionStorage.html</title>
|
||||
</head>
|
||||
<body>
|
||||
<script type="text/javascript;version=1.8">
|
||||
<script type="text/javascript">
|
||||
let isOuter = window == window.top;
|
||||
let args = window.location.search.slice(1).split("&");
|
||||
let rand = args[0];
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
<html xmlns="http://www.w3.org/1999/xhtml"
|
||||
xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<head>
|
||||
<script src="chrome://browser/content/syncedtabs/sidebar.js" type="application/javascript;version=1.8"></script>
|
||||
<script src="chrome://browser/content/syncedtabs/sidebar.js" type="application/javascript"></script>
|
||||
<script type="application/javascript" src="chrome://browser/content/utilityOverlay.js"/>
|
||||
|
||||
<link rel="stylesheet" type="text/css" media="all" href="chrome://browser/skin/syncedtabs/sidebar.css"/>
|
||||
|
|
|
@ -315,8 +315,8 @@ var FormAutofillContent = {
|
|||
return formDetails.map(record => record.fieldName);
|
||||
},
|
||||
|
||||
_identifyAutofillFields(doc) {
|
||||
this.log.debug("_identifyAutofillFields:", "" + doc.location);
|
||||
identifyAutofillFields(doc) {
|
||||
this.log.debug("identifyAutofillFields:", "" + doc.location);
|
||||
let forms = [];
|
||||
|
||||
// Collects root forms from inputs.
|
||||
|
|
|
@ -12,6 +12,7 @@ const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
|
|||
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
Cu.import("resource://formautofill/FormAutofillContent.jsm");
|
||||
|
||||
/**
|
||||
* Handles content's interactions for the frame.
|
||||
|
@ -38,14 +39,11 @@ var FormAutofillFrameScript = {
|
|||
if (!(doc instanceof Ci.nsIDOMHTMLDocument)) {
|
||||
return;
|
||||
}
|
||||
this.FormAutofillContent._identifyAutofillFields(doc);
|
||||
FormAutofillContent.identifyAutofillFields(doc);
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(FormAutofillFrameScript, "FormAutofillContent",
|
||||
"resource://formautofill/FormAutofillContent.jsm");
|
||||
|
||||
FormAutofillFrameScript.init();
|
||||
|
|
|
@ -12,6 +12,12 @@
|
|||
-moz-binding: url("chrome://formautofill/content/formautofill.xml#autocomplete-profile-listitem");
|
||||
}
|
||||
|
||||
/* Treat @collpased="true" as display: none similar to how it is for XUL elements.
|
||||
* https://developer.mozilla.org/en-US/docs/Web/CSS/visibility#Values */
|
||||
#PopupAutoComplete > richlistbox > richlistitem[originaltype="autofill-profile"][collapsed="true"] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#PopupAutoComplete[firstresultstyle="autofill-profile"] {
|
||||
min-width: 150px !important;
|
||||
}
|
||||
|
|
|
@ -77,7 +77,7 @@ TESTCASES.forEach(testcase => {
|
|||
|
||||
let doc = MockDocument.createTestDocument(
|
||||
"http://localhost:8080/test/", testcase.document);
|
||||
FormAutofillContent._identifyAutofillFields(doc);
|
||||
FormAutofillContent.identifyAutofillFields(doc);
|
||||
|
||||
for (let i in testcase.targetInput) {
|
||||
let input = doc.getElementById(testcase.targetInput[i]);
|
||||
|
|
|
@ -64,7 +64,7 @@ TESTCASES.forEach(testcase => {
|
|||
|
||||
let doc = MockDocument.createTestDocument(
|
||||
"http://localhost:8080/test/", testcase.document);
|
||||
FormAutofillContent._identifyAutofillFields(doc);
|
||||
FormAutofillContent.identifyAutofillFields(doc);
|
||||
|
||||
Assert.deepEqual(markedFieldId, testcase.expectedResult,
|
||||
"Check the fields were marked correctly.");
|
||||
|
|
|
@ -192,11 +192,7 @@ this.ExtensionsUI = {
|
|||
|
||||
let bundle = Services.strings.createBundle(BROWSER_PROPERTIES);
|
||||
|
||||
let name = info.addon.name;
|
||||
if (name.length > 50) {
|
||||
name = name.slice(0, 49) + "…";
|
||||
}
|
||||
name = this._sanitizeName(name);
|
||||
let name = this._sanitizeName(info.addon.name);
|
||||
let addonName = `<span class="addon-webext-name">${name}</span>`;
|
||||
|
||||
result.header = bundle.formatStringFromName("webextPerms.header", [addonName], 1);
|
||||
|
|
|
@ -17,6 +17,8 @@
|
|||
%define forwardTransitionLength 150ms
|
||||
%define conditionalForwardWithUrlbar window:not([chromehidden~="toolbar"]) #urlbar-wrapper
|
||||
|
||||
%include ../shared/browser.inc.css
|
||||
|
||||
:root {
|
||||
--backbutton-urlbar-overlap: 6px;
|
||||
/* icon width + border + horizontal padding (without the overlap from backbutton-urlbar-overlap) */
|
||||
|
@ -712,34 +714,7 @@ menuitem.bookmark-item {
|
|||
|
||||
#urlbar-zoom-button {
|
||||
-moz-appearance: none;
|
||||
margin: 0 3px;
|
||||
font-size: .8em;
|
||||
padding: 0 8px;
|
||||
border-radius: 1em;
|
||||
background-color: hsla(0,0%,0%,.05);
|
||||
color: inherit;
|
||||
border: 1px solid ThreeDLightShadow;
|
||||
}
|
||||
|
||||
#urlbar-zoom-button[animate="true"] {
|
||||
animation-name: urlbar-zoom-reset-pulse;
|
||||
animation-duration: 250ms;
|
||||
}
|
||||
|
||||
#urlbar-zoom-button:hover {
|
||||
background-color: hsla(0,0%,0%,.1);
|
||||
}
|
||||
|
||||
#urlbar-zoom-button:hover:active {
|
||||
background-color: hsla(0,0%,0%,.15);
|
||||
}
|
||||
|
||||
#urlbar-zoom-button > .toolbarbutton-text {
|
||||
display: -moz-box;
|
||||
}
|
||||
|
||||
#urlbar-zoom-button > .toolbarbutton-icon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#urlbar-search-footer {
|
||||
|
|
|
@ -15,6 +15,8 @@
|
|||
@namespace html url("http://www.w3.org/1999/xhtml");
|
||||
@namespace svg url("http://www.w3.org/2000/svg");
|
||||
|
||||
%include ../shared/browser.inc.css
|
||||
|
||||
:root {
|
||||
--space-above-tabbar: 9px;
|
||||
--tabs-toolbar-color: #333;
|
||||
|
@ -1649,36 +1651,6 @@ toolbar .toolbarbutton-1 > .toolbarbutton-menubutton-button {
|
|||
}
|
||||
}
|
||||
|
||||
#urlbar-zoom-button {
|
||||
margin: 0 3px;
|
||||
font-size: .8em;
|
||||
padding: 0 8px;
|
||||
border-radius: 1em;
|
||||
background-color: hsla(0,0%,0%,.05);
|
||||
border: 1px solid ThreeDLightShadow;
|
||||
}
|
||||
|
||||
#urlbar-zoom-button[animate="true"] {
|
||||
animation-name: urlbar-zoom-reset-pulse;
|
||||
animation-duration: 250ms;
|
||||
}
|
||||
|
||||
#urlbar-zoom-button:hover {
|
||||
background-color: hsla(0,0%,0%,.1);
|
||||
}
|
||||
|
||||
#urlbar-zoom-button:hover:active {
|
||||
background-color: hsla(0,0%,0%,.15);
|
||||
}
|
||||
|
||||
#urlbar-zoom-button > .toolbarbutton-text {
|
||||
display: -moz-box;
|
||||
}
|
||||
|
||||
#urlbar-zoom-button > .toolbarbutton-icon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#urlbar-search-footer {
|
||||
border-top: 1px solid var(--panel-separator-color);
|
||||
background-color: var(--arrowpanel-dimmed);
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
/* Zoom button */
|
||||
#urlbar-zoom-button {
|
||||
margin: 0 3px;
|
||||
font-size: .8em;
|
||||
padding: 0 8px;
|
||||
border-radius: 1em;
|
||||
background-color: hsla(0,0%,0%,.05);
|
||||
border: 1px solid ThreeDLightShadow;
|
||||
}
|
||||
|
||||
#urlbar-zoom-button[animate="true"] {
|
||||
animation-name: urlbar-zoom-reset-pulse;
|
||||
animation-duration: 250ms;
|
||||
}
|
||||
|
||||
#urlbar-zoom-button:hover {
|
||||
background-color: hsla(0,0%,0%,.1);
|
||||
}
|
||||
|
||||
#urlbar-zoom-button:hover:active {
|
||||
background-color: hsla(0,0%,0%,.15);
|
||||
}
|
||||
|
||||
#urlbar-zoom-button > .toolbarbutton-text {
|
||||
display: -moz-box;
|
||||
}
|
||||
|
||||
#urlbar-zoom-button > .toolbarbutton-icon {
|
||||
display: none;
|
||||
}
|
|
@ -10,6 +10,7 @@
|
|||
skin/classic/browser/aboutNetError.css (../shared/aboutNetError.css)
|
||||
skin/classic/browser/blockedSite.css (../shared/blockedSite.css)
|
||||
skin/classic/browser/error-pages.css (../shared/error-pages.css)
|
||||
skin/classic/browser/browser.inc.css (../shared/browser.inc.css)
|
||||
* skin/classic/browser/aboutProviderDirectory.css (../shared/aboutProviderDirectory.css)
|
||||
* skin/classic/browser/aboutSessionRestore.css (../shared/aboutSessionRestore.css)
|
||||
skin/classic/browser/aboutSocialError.css (../shared/aboutSocialError.css)
|
||||
|
|
|
@ -33,11 +33,12 @@
|
|||
<path d="M11.5,3.5L9,5.9V3L6,6H4C3.4,6,3,6.4,3,7v2c0,0.6,0.4,1,1,1h0.9l-2.5,2.5l1.1,1.1l9-9L11.5,3.5z M9,13V9.7l-1.7,1.7L9,13z"/>
|
||||
</g>
|
||||
<g id="tab-audio-blocked" class="icon">
|
||||
<path class="outline" d="M8,1.2C4.3,1.2,1.2,4.3,1.2,8s3.1,6.8,6.8,6.8s6.8-3.1,6.8-6.8S11.7,1.2,8,1.2z M8,11.9
|
||||
c-2.1,0-3.9-1.7-3.9-3.9c0-2.1,1.7-3.9,3.9-3.9s3.9,1.7,3.9,3.9C11.9,10.1,10.1,11.9,8,11.9z M11.1,7.3L6.6,4.6L5.4,3.9v1.4v5.3V12
|
||||
l1.2-0.7L11,8.6L12.2,8L11.1,7.3z"/>
|
||||
<path d="M8,2C4.7,2,2,4.7,2,8s2.7,6,6,6s6-2.7,6-6S11.3,2,8,2z M8,12.7c-2.6,0-4.7-2.1-4.7-4.7
|
||||
S5.4,3.3,8,3.3s4.7,2.1,4.7,4.7S10.6,12.7,8,12.7z M10.7,8L6.2,5.3v5.4L10.7,8z"/>
|
||||
<path class="outline" d="M8,2c3.3,0,6,2.7,6,6s-2.7,6-6,6s-6-2.7-6-6S4.7,2,8,2 M8,12.5c2.4,0,4.5-2,4.5-4.5S10.4,3.5,8,3.5
|
||||
S3.5,5.5,3.5,8S5.6,12.5,8,12.5 M6,5l5,3l-5,3V5 M8,1C4.1,1,1,4.1,1,8s3.1,7,7,7s7-3.1,7-7S11.9,1,8,1L8,1z M7.3,4.6
|
||||
C7.5,4.5,7.7,4.5,8,4.5c1.5,0,2.9,1.1,3.4,2.5L7.3,4.6L7.3,4.6z M5,9.7C4.7,9.2,4.5,8.6,4.5,8S4.7,6.8,5,6.3V9.7L5,9.7z M7.3,11.4
|
||||
L11.4,9c-0.4,1.4-1.8,2.5-3.4,2.5C7.7,11.5,7.5,11.5,7.3,11.4L7.3,11.4z"/>
|
||||
<path d="M8,2C4.7,2,2,4.7,2,8s2.7,6,6,6s6-2.7,6-6S11.3,2,8,2z M8,12.5c-2.4,0-4.5-2-4.5-4.5S5.6,3.5,8,3.5
|
||||
s4.5,2,4.5,4.5S10.4,12.5,8,12.5z M6,5v6l5-3L6,5z"/>
|
||||
</g>
|
||||
|
||||
<g id="tab-audio-white" class="icon white">
|
||||
|
@ -49,11 +50,11 @@
|
|||
<path d="M11.5,3.5L9,5.9V3L6,6H4C3.4,6,3,6.4,3,7v2c0,0.6,0.4,1,1,1h0.9l-2.5,2.5l1.1,1.1l9-9L11.5,3.5z M9,13V9.7l-1.7,1.7L9,13z"/>
|
||||
</g>
|
||||
<g id="tab-audio-white-blocked" class="icon white">
|
||||
<path class="outline" d="M8,2c3.3,0,6,2.7,6,6s-2.7,6-6,6s-6-2.7-6-6S4.7,2,8,2 M8,12.6c2.6,0,4.6-2.1,4.6-4.6s-2-4.6-4.6-4.6
|
||||
S3.3,5.4,3.3,8S5.4,12.6,8,12.6 M6.2,5.3L10.7,8l-4.5,2.7V5.3 M8,1C4.1,1,1,4.1,1,8s3.1,7,7,7s7-3.1,7-7S11.9,1,8,1L8,1z M6.9,4.5
|
||||
C7.2,4.4,7.6,4.4,8,4.4c1.8,0,3.3,1.3,3.6,3l-0.4-0.2L6.9,4.5L6.9,4.5z M5.2,10.3C4.7,9.7,4.3,8.9,4.3,8s0.3-1.7,0.8-2.3L5.2,10.3
|
||||
L5.2,10.3z M6.9,11.5l4.4-2.6l0.4-0.2c-0.3,1.7-1.8,3-3.6,3C7.6,11.6,7.2,11.6,6.9,11.5L6.9,11.5z"/>
|
||||
<path d="M8,2C4.7,2,2,4.7,2,8s2.7,6,6,6s6-2.7,6-6S11.3,2,8,2z M6.2,5.3v5.4L10.7,8L6.2,5.3z M8,12.7
|
||||
c-2.5,0-4.7-2.1-4.7-4.7S5.5,3.3,8,3.3s4.7,2.1,4.7,4.7S10.5,12.7,8,12.7z"/>
|
||||
<path class="outline" d="M8,2c3.3,0,6,2.7,6,6s-2.7,6-6,6s-6-2.7-6-6S4.7,2,8,2 M8,12.5c2.4,0,4.5-2,4.5-4.5S10.4,3.5,8,3.5
|
||||
S3.5,5.5,3.5,8S5.6,12.5,8,12.5 M6,5l5,3l-5,3V5 M8,1C4.1,1,1,4.1,1,8s3.1,7,7,7s7-3.1,7-7S11.9,1,8,1L8,1z M7.3,4.6
|
||||
C7.5,4.5,7.7,4.5,8,4.5c1.5,0,2.9,1.1,3.4,2.5L7.3,4.6L7.3,4.6z M5,9.7C4.7,9.2,4.5,8.6,4.5,8S4.7,6.8,5,6.3V9.7L5,9.7z M7.3,11.4
|
||||
L11.4,9c-0.4,1.4-1.8,2.5-3.4,2.5C7.7,11.5,7.5,11.5,7.3,11.4L7.3,11.4z"/>
|
||||
<path d="M8,2C4.7,2,2,4.7,2,8s2.7,6,6,6s6-2.7,6-6S11.3,2,8,2z M8,12.5c-2.4,0-4.5-2-4.5-4.5S5.6,3.5,8,3.5
|
||||
s4.5,2,4.5,4.5S10.4,12.5,8,12.5z M6,5v6l5-3L6,5z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
До Ширина: | Высота: | Размер: 4.0 KiB После Ширина: | Высота: | Размер: 4.1 KiB |
|
@ -15,6 +15,8 @@
|
|||
%define forwardTransitionLength 150ms
|
||||
%define conditionalForwardWithUrlbar window:not([chromehidden~="toolbar"]) #urlbar-wrapper
|
||||
|
||||
%include ../shared/browser.inc.css
|
||||
|
||||
:root {
|
||||
--space-above-tabbar: 15px;
|
||||
|
||||
|
@ -1300,34 +1302,7 @@ html|*.urlbar-input:-moz-lwtheme::placeholder,
|
|||
|
||||
#urlbar-zoom-button {
|
||||
-moz-appearance: none;
|
||||
margin: 0 3px;
|
||||
font-size: .8em;
|
||||
padding: 0 8px;
|
||||
border-radius: 1em;
|
||||
background-color: hsla(0,0%,0%,.05);
|
||||
color: inherit;
|
||||
border: 1px solid ThreeDLightShadow;
|
||||
}
|
||||
|
||||
#urlbar-zoom-button[animate="true"] {
|
||||
animation-name: urlbar-zoom-reset-pulse;
|
||||
animation-duration: 250ms;
|
||||
}
|
||||
|
||||
#urlbar-zoom-button:hover {
|
||||
background-color: hsla(0,0%,0%,.1);
|
||||
}
|
||||
|
||||
#urlbar-zoom-button:hover:active {
|
||||
background-color: hsla(0,0%,0%,.15);
|
||||
}
|
||||
|
||||
#urlbar-zoom-button > .toolbarbutton-text {
|
||||
display: -moz-box;
|
||||
}
|
||||
|
||||
#urlbar-zoom-button > .toolbarbutton-icon {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.search-go-container {
|
||||
|
|
|
@ -35,7 +35,7 @@ gyp_vars.update({
|
|||
'build_json': 0,
|
||||
'build_icu': 0,
|
||||
'build_opus': 0,
|
||||
'libyuv_dir': '/media/libyuv',
|
||||
'libyuv_dir': '/media/libyuv/libyuv',
|
||||
'yuv_disable_avx2': 0 if CONFIG['HAVE_X86_AVX2'] else 1,
|
||||
# don't use openssl
|
||||
'use_openssl': 0,
|
||||
|
|
|
@ -43,10 +43,10 @@ def cargo_info(cargo):
|
|||
version=Version(version),
|
||||
)
|
||||
|
||||
@depends(rustc, cargo, rustc_info)
|
||||
@depends(rustc_info, cargo_info)
|
||||
@imports(_from='textwrap', _import='dedent')
|
||||
def rust_compiler(rustc, cargo, rustc_info):
|
||||
if not rustc:
|
||||
def rust_compiler(rustc_info, cargo_info):
|
||||
if not rustc_info:
|
||||
die(dedent('''\
|
||||
Rust compiler not found.
|
||||
To compile rust language sources, you must have 'rustc' in your path.
|
||||
|
@ -74,25 +74,27 @@ def rust_compiler(rustc, cargo, rustc_info):
|
|||
installer is available from https://rustup.rs/
|
||||
'''.format(version, rustc_min_version)))
|
||||
|
||||
if not cargo:
|
||||
die(dedent('''\
|
||||
Cargo package manager not found.
|
||||
To compile Rust language sources, you must have 'cargo' in your path.
|
||||
See https://www.rust-lang.org/ for more information.
|
||||
if not cargo_info:
|
||||
die(dedent('''\
|
||||
Cargo package manager not found.
|
||||
To compile Rust language sources, you must have 'cargo' in your path.
|
||||
See https://www.rust-lang.org/ for more information.
|
||||
|
||||
You can install cargo by running './mach bootstrap'
|
||||
or by directly running the installer from https://rustup.rs/
|
||||
'''))
|
||||
version = cargo_info.version
|
||||
if version < cargo_min_version:
|
||||
die(dedent('''\
|
||||
Cargo package manager {} is too old.
|
||||
You can install cargo by running './mach bootstrap'
|
||||
or by directly running the installer from https://rustup.rs/
|
||||
'''))
|
||||
|
||||
To compile Rust language sources please install at least
|
||||
version {} of 'cargo' and make sure it is first in your path.
|
||||
version = cargo_info.version
|
||||
if version < cargo_min_version:
|
||||
die(dedent('''\
|
||||
Cargo package manager {} is too old.
|
||||
|
||||
To compile Rust language sources please install at least
|
||||
version {} of 'cargo' and make sure it is first in your path.
|
||||
|
||||
You can verify this by typing 'cargo --version'.
|
||||
''').format(version, cargo_min_version))
|
||||
|
||||
You can verify this by typing 'cargo --version'.
|
||||
''').format(version, cargo_min_version))
|
||||
return True
|
||||
|
||||
set_config('MOZ_RUST', rust_compiler)
|
||||
|
|
|
@ -78,9 +78,6 @@ check_and_add_gcc_warning('-Werror=non-literal-null-conversion',
|
|||
# catches string literals used in boolean expressions
|
||||
check_and_add_gcc_warning('-Wstring-conversion')
|
||||
|
||||
# catches inconsistent use of mutexes
|
||||
check_and_add_gcc_warning('-Wthread-safety')
|
||||
|
||||
# we inline 'new' and 'delete' in mozalloc
|
||||
check_and_add_gcc_warning('-Wno-inline-new-delete', cxx_compiler)
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1180921
|
|||
<script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="chrome://global/skin"/>
|
||||
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
|
||||
<script type="application/javascript;version=1.8">
|
||||
<script type="application/javascript">
|
||||
|
||||
/** Test for Bug 1180921 **/
|
||||
const Cc = Components.classes;
|
||||
|
|
|
@ -13,8 +13,8 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=292789
|
|||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
<script src="chrome://global/content/treeUtils.js"></script>
|
||||
<script type="application/javascript;version=1.8" src="chrome://mozapps/content/xpinstall/xpinstallConfirm.js"></script>
|
||||
<script id="resjs" type="application/javascript;version=1.8"></script>
|
||||
<script type="application/javascript" src="chrome://mozapps/content/xpinstall/xpinstallConfirm.js"></script>
|
||||
<script id="resjs" type="application/javascript"></script>
|
||||
</div>
|
||||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript">
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
<link rel="stylesheet" href="chrome://global/skin/in-content/common.css" type="text/css"/>
|
||||
<link rel="stylesheet" href="chrome://devtools/content/aboutdebugging/aboutdebugging.css" type="text/css"/>
|
||||
<script type="application/javascript" src="resource://devtools/client/shared/vendor/react.js"></script>
|
||||
<script type="application/javascript;version=1.8" src="chrome://devtools/content/aboutdebugging/initializer.js"></script>
|
||||
<script type="application/javascript" src="chrome://devtools/content/aboutdebugging/initializer.js"></script>
|
||||
</head>
|
||||
<body id="body" dir="&locale.dir;">
|
||||
</body>
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||
<link rel="stylesheet" href="chrome://devtools/skin/animationinspector.css" type="text/css"/>
|
||||
<script type="application/javascript;version=1.8" src="chrome://devtools/content/shared/theme-switching.js"/>
|
||||
<script type="application/javascript" src="chrome://devtools/content/shared/theme-switching.js"/>
|
||||
</head>
|
||||
<body class="theme-sidebar devtools-monospace" role="application" empty="true">
|
||||
<div id="global-toolbar" class="theme-toolbar">
|
||||
|
@ -26,7 +26,7 @@
|
|||
<p id="error-hint"></p>
|
||||
<button id="element-picker" data-standalone="true" class="devtools-button"></button>
|
||||
</div>
|
||||
<script type="application/javascript;version=1.8" src="animation-controller.js"></script>
|
||||
<script type="application/javascript;version=1.8" src="animation-panel.js"></script>
|
||||
<script type="application/javascript" src="animation-controller.js"></script>
|
||||
<script type="application/javascript" src="animation-panel.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<body>
|
||||
<canvas width="128" height="128"></canvas>
|
||||
|
||||
<script type="text/javascript;version=1.8">
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
|
||||
var ctx = document.querySelector("canvas").getContext("2d");
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<body>
|
||||
<canvas width="128" height="128"></canvas>
|
||||
|
||||
<script type="text/javascript;version=1.8">
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
|
||||
var ctx = document.querySelector("canvas").getContext("2d");
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<body>
|
||||
<canvas width="128" height="128"></canvas>
|
||||
|
||||
<script type="text/javascript;version=1.8">
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
|
||||
var ctx = document.querySelector("canvas").getContext("2d");
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<body>
|
||||
<canvas width="128" height="128"></canvas>
|
||||
|
||||
<script type="text/javascript;version=1.8">
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
|
||||
var ctx = document.querySelector("canvas").getContext("2d");
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<body>
|
||||
<canvas width="128" height="128"></canvas>
|
||||
|
||||
<script type="text/javascript;version=1.8">
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
|
||||
var ctx = document.querySelector("canvas").getContext("2d");
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<body>
|
||||
<canvas width="128" height="128"></canvas>
|
||||
|
||||
<script type="text/javascript;version=1.8">
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
|
||||
var ctx = document.querySelector("canvas").getContext("2d");
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<body>
|
||||
<canvas id="canvas" width="1024" height="1024"></canvas>
|
||||
|
||||
<script type="text/javascript;version=1.8">
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
|
||||
let canvas, gl;
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
gl_Position = vec4(aVertexPosition, 1.0);
|
||||
}
|
||||
</script>
|
||||
<script type="text/javascript;version=1.8">
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
|
||||
let canvas, gl, shaderProgram;
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
gl_Position = vec4(aVertexPosition, 1.0);
|
||||
}
|
||||
</script>
|
||||
<script type="text/javascript;version=1.8">
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
|
||||
let canvas, gl, shaderProgram;
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<body>
|
||||
<canvas id="canvas" width="128" height="128"></canvas>
|
||||
|
||||
<script type="text/javascript;version=1.8">
|
||||
<script type="text/javascript">
|
||||
"use strict";
|
||||
|
||||
let canvas, gl;
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
</style>
|
||||
<link rel="stylesheet" type="text/css" href="browser_cmd_csscoverage_sheetA.css">
|
||||
<link rel="stylesheet" type="text/css" href="browser_cmd_csscoverage_sheetB.css">
|
||||
<script type="application/javascript;version=1.8">
|
||||
<script type="application/javascript">
|
||||
/* How quickly do we rush through this? */
|
||||
let delay = 500;
|
||||
window.addEventListener("load", () => {
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
|
||||
<link rel="stylesheet" type="text/css" href="browser_cmd_csscoverage_sheetA.css">
|
||||
<link rel="stylesheet" type="text/css" href="browser_cmd_csscoverage_sheetB.css">
|
||||
<script type="application/javascript;version=1.8">
|
||||
<script type="application/javascript">
|
||||
/* How quickly do we rush through this? */
|
||||
let delay = 500;
|
||||
window.addEventListener("load", () => {
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
</style>
|
||||
<link rel="stylesheet" type="text/css" href="browser_cmd_csscoverage_sheetA.css">
|
||||
<link rel="stylesheet" type="text/css" href="browser_cmd_csscoverage_sheetB.css">
|
||||
<script type="application/javascript;version=1.8">
|
||||
<script type="application/javascript">
|
||||
window.addEventListener("load", () => {
|
||||
dump('TEST-INFO | load from browser_cmd_csscoverage_page3.html\n');
|
||||
});
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
width="960" height="480"
|
||||
persist="screenX screenY width height sizemode">
|
||||
|
||||
<script type="application/javascript;version=1.8"
|
||||
<script type="application/javascript"
|
||||
src="chrome://devtools/content/shared/theme-switching.js"/>
|
||||
<script type="text/javascript" src="chrome://global/content/globalOverlay.js"/>
|
||||
<script type="text/javascript" src="debugger-controller.js"/>
|
||||
|
|
|
@ -2053,57 +2053,57 @@ var Debugger =
|
|||
/***/ function(module, exports, __webpack_require__) {
|
||||
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
const React = __webpack_require__(2);
|
||||
const ReactDOM = __webpack_require__(31);
|
||||
const { DOM: dom, PropTypes } = React;
|
||||
|
||||
const Draggable = React.createClass({
|
||||
displayName: "Draggable",
|
||||
|
||||
propTypes: {
|
||||
onMove: PropTypes.func.isRequired,
|
||||
onStart: PropTypes.func,
|
||||
onStop: PropTypes.func,
|
||||
style: PropTypes.object,
|
||||
className: PropTypes.string
|
||||
},
|
||||
|
||||
startDragging(ev) {
|
||||
ev.preventDefault();
|
||||
const doc = ReactDOM.findDOMNode(this).ownerDocument;
|
||||
doc.addEventListener("mousemove", this.onMove);
|
||||
doc.addEventListener("mouseup", this.onUp);
|
||||
this.props.onStart && this.props.onStart();
|
||||
},
|
||||
|
||||
onMove(ev) {
|
||||
ev.preventDefault();
|
||||
// Use screen coordinates so, moving mouse over iframes
|
||||
// doesn't mangle (relative) coordinates.
|
||||
this.props.onMove(ev.screenX, ev.screenY);
|
||||
},
|
||||
|
||||
onUp(ev) {
|
||||
ev.preventDefault();
|
||||
const doc = ReactDOM.findDOMNode(this).ownerDocument;
|
||||
doc.removeEventListener("mousemove", this.onMove);
|
||||
doc.removeEventListener("mouseup", this.onUp);
|
||||
this.props.onStop && this.props.onStop();
|
||||
},
|
||||
|
||||
render() {
|
||||
return dom.div({
|
||||
style: this.props.style,
|
||||
className: this.props.className,
|
||||
onMouseDown: this.startDragging
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = Draggable;
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
const React = __webpack_require__(2);
|
||||
const ReactDOM = __webpack_require__(31);
|
||||
const { DOM: dom, PropTypes } = React;
|
||||
|
||||
const Draggable = React.createClass({
|
||||
displayName: "Draggable",
|
||||
|
||||
propTypes: {
|
||||
onMove: PropTypes.func.isRequired,
|
||||
onStart: PropTypes.func,
|
||||
onStop: PropTypes.func,
|
||||
style: PropTypes.object,
|
||||
className: PropTypes.string
|
||||
},
|
||||
|
||||
startDragging(ev) {
|
||||
ev.preventDefault();
|
||||
const doc = ReactDOM.findDOMNode(this).ownerDocument;
|
||||
doc.addEventListener("mousemove", this.onMove);
|
||||
doc.addEventListener("mouseup", this.onUp);
|
||||
this.props.onStart && this.props.onStart();
|
||||
},
|
||||
|
||||
onMove(ev) {
|
||||
ev.preventDefault();
|
||||
// Use screen coordinates so, moving mouse over iframes
|
||||
// doesn't mangle (relative) coordinates.
|
||||
this.props.onMove(ev.screenX, ev.screenY);
|
||||
},
|
||||
|
||||
onUp(ev) {
|
||||
ev.preventDefault();
|
||||
const doc = ReactDOM.findDOMNode(this).ownerDocument;
|
||||
doc.removeEventListener("mousemove", this.onMove);
|
||||
doc.removeEventListener("mouseup", this.onUp);
|
||||
this.props.onStop && this.props.onStop();
|
||||
},
|
||||
|
||||
render() {
|
||||
return dom.div({
|
||||
style: this.props.style,
|
||||
className: this.props.className,
|
||||
onMouseDown: this.startDragging
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = Draggable;
|
||||
|
||||
|
||||
/***/ },
|
||||
|
@ -10066,16 +10066,16 @@ var Debugger =
|
|||
/* 51 */
|
||||
/***/ function(module, exports) {
|
||||
|
||||
module.exports = function(module) {
|
||||
if(!module.webpackPolyfill) {
|
||||
module.deprecate = function() {};
|
||||
module.paths = [];
|
||||
// module.parent = undefined by default
|
||||
module.children = [];
|
||||
module.webpackPolyfill = 1;
|
||||
}
|
||||
return module;
|
||||
}
|
||||
module.exports = function(module) {
|
||||
if(!module.webpackPolyfill) {
|
||||
module.deprecate = function() {};
|
||||
module.paths = [];
|
||||
// module.parent = undefined by default
|
||||
module.children = [];
|
||||
module.webpackPolyfill = 1;
|
||||
}
|
||||
return module;
|
||||
}
|
||||
|
||||
|
||||
/***/ },
|
||||
|
@ -53149,166 +53149,166 @@ var Debugger =
|
|||
/* 318 */
|
||||
/***/ function(module, exports, __webpack_require__) {
|
||||
|
||||
(function(){
|
||||
var crypt = __webpack_require__(319),
|
||||
utf8 = __webpack_require__(320).utf8,
|
||||
isBuffer = __webpack_require__(321),
|
||||
bin = __webpack_require__(320).bin,
|
||||
|
||||
// The core
|
||||
md5 = function (message, options) {
|
||||
// Convert to byte array
|
||||
if (message.constructor == String)
|
||||
if (options && options.encoding === 'binary')
|
||||
message = bin.stringToBytes(message);
|
||||
else
|
||||
message = utf8.stringToBytes(message);
|
||||
else if (isBuffer(message))
|
||||
message = Array.prototype.slice.call(message, 0);
|
||||
else if (!Array.isArray(message))
|
||||
message = message.toString();
|
||||
// else, assume byte array already
|
||||
|
||||
var m = crypt.bytesToWords(message),
|
||||
l = message.length * 8,
|
||||
a = 1732584193,
|
||||
b = -271733879,
|
||||
c = -1732584194,
|
||||
d = 271733878;
|
||||
|
||||
// Swap endian
|
||||
for (var i = 0; i < m.length; i++) {
|
||||
m[i] = ((m[i] << 8) | (m[i] >>> 24)) & 0x00FF00FF |
|
||||
((m[i] << 24) | (m[i] >>> 8)) & 0xFF00FF00;
|
||||
}
|
||||
|
||||
// Padding
|
||||
m[l >>> 5] |= 0x80 << (l % 32);
|
||||
m[(((l + 64) >>> 9) << 4) + 14] = l;
|
||||
|
||||
// Method shortcuts
|
||||
var FF = md5._ff,
|
||||
GG = md5._gg,
|
||||
HH = md5._hh,
|
||||
II = md5._ii;
|
||||
|
||||
for (var i = 0; i < m.length; i += 16) {
|
||||
|
||||
var aa = a,
|
||||
bb = b,
|
||||
cc = c,
|
||||
dd = d;
|
||||
|
||||
a = FF(a, b, c, d, m[i+ 0], 7, -680876936);
|
||||
d = FF(d, a, b, c, m[i+ 1], 12, -389564586);
|
||||
c = FF(c, d, a, b, m[i+ 2], 17, 606105819);
|
||||
b = FF(b, c, d, a, m[i+ 3], 22, -1044525330);
|
||||
a = FF(a, b, c, d, m[i+ 4], 7, -176418897);
|
||||
d = FF(d, a, b, c, m[i+ 5], 12, 1200080426);
|
||||
c = FF(c, d, a, b, m[i+ 6], 17, -1473231341);
|
||||
b = FF(b, c, d, a, m[i+ 7], 22, -45705983);
|
||||
a = FF(a, b, c, d, m[i+ 8], 7, 1770035416);
|
||||
d = FF(d, a, b, c, m[i+ 9], 12, -1958414417);
|
||||
c = FF(c, d, a, b, m[i+10], 17, -42063);
|
||||
b = FF(b, c, d, a, m[i+11], 22, -1990404162);
|
||||
a = FF(a, b, c, d, m[i+12], 7, 1804603682);
|
||||
d = FF(d, a, b, c, m[i+13], 12, -40341101);
|
||||
c = FF(c, d, a, b, m[i+14], 17, -1502002290);
|
||||
b = FF(b, c, d, a, m[i+15], 22, 1236535329);
|
||||
|
||||
a = GG(a, b, c, d, m[i+ 1], 5, -165796510);
|
||||
d = GG(d, a, b, c, m[i+ 6], 9, -1069501632);
|
||||
c = GG(c, d, a, b, m[i+11], 14, 643717713);
|
||||
b = GG(b, c, d, a, m[i+ 0], 20, -373897302);
|
||||
a = GG(a, b, c, d, m[i+ 5], 5, -701558691);
|
||||
d = GG(d, a, b, c, m[i+10], 9, 38016083);
|
||||
c = GG(c, d, a, b, m[i+15], 14, -660478335);
|
||||
b = GG(b, c, d, a, m[i+ 4], 20, -405537848);
|
||||
a = GG(a, b, c, d, m[i+ 9], 5, 568446438);
|
||||
d = GG(d, a, b, c, m[i+14], 9, -1019803690);
|
||||
c = GG(c, d, a, b, m[i+ 3], 14, -187363961);
|
||||
b = GG(b, c, d, a, m[i+ 8], 20, 1163531501);
|
||||
a = GG(a, b, c, d, m[i+13], 5, -1444681467);
|
||||
d = GG(d, a, b, c, m[i+ 2], 9, -51403784);
|
||||
c = GG(c, d, a, b, m[i+ 7], 14, 1735328473);
|
||||
b = GG(b, c, d, a, m[i+12], 20, -1926607734);
|
||||
|
||||
a = HH(a, b, c, d, m[i+ 5], 4, -378558);
|
||||
d = HH(d, a, b, c, m[i+ 8], 11, -2022574463);
|
||||
c = HH(c, d, a, b, m[i+11], 16, 1839030562);
|
||||
b = HH(b, c, d, a, m[i+14], 23, -35309556);
|
||||
a = HH(a, b, c, d, m[i+ 1], 4, -1530992060);
|
||||
d = HH(d, a, b, c, m[i+ 4], 11, 1272893353);
|
||||
c = HH(c, d, a, b, m[i+ 7], 16, -155497632);
|
||||
b = HH(b, c, d, a, m[i+10], 23, -1094730640);
|
||||
a = HH(a, b, c, d, m[i+13], 4, 681279174);
|
||||
d = HH(d, a, b, c, m[i+ 0], 11, -358537222);
|
||||
c = HH(c, d, a, b, m[i+ 3], 16, -722521979);
|
||||
b = HH(b, c, d, a, m[i+ 6], 23, 76029189);
|
||||
a = HH(a, b, c, d, m[i+ 9], 4, -640364487);
|
||||
d = HH(d, a, b, c, m[i+12], 11, -421815835);
|
||||
c = HH(c, d, a, b, m[i+15], 16, 530742520);
|
||||
b = HH(b, c, d, a, m[i+ 2], 23, -995338651);
|
||||
|
||||
a = II(a, b, c, d, m[i+ 0], 6, -198630844);
|
||||
d = II(d, a, b, c, m[i+ 7], 10, 1126891415);
|
||||
c = II(c, d, a, b, m[i+14], 15, -1416354905);
|
||||
b = II(b, c, d, a, m[i+ 5], 21, -57434055);
|
||||
a = II(a, b, c, d, m[i+12], 6, 1700485571);
|
||||
d = II(d, a, b, c, m[i+ 3], 10, -1894986606);
|
||||
c = II(c, d, a, b, m[i+10], 15, -1051523);
|
||||
b = II(b, c, d, a, m[i+ 1], 21, -2054922799);
|
||||
a = II(a, b, c, d, m[i+ 8], 6, 1873313359);
|
||||
d = II(d, a, b, c, m[i+15], 10, -30611744);
|
||||
c = II(c, d, a, b, m[i+ 6], 15, -1560198380);
|
||||
b = II(b, c, d, a, m[i+13], 21, 1309151649);
|
||||
a = II(a, b, c, d, m[i+ 4], 6, -145523070);
|
||||
d = II(d, a, b, c, m[i+11], 10, -1120210379);
|
||||
c = II(c, d, a, b, m[i+ 2], 15, 718787259);
|
||||
b = II(b, c, d, a, m[i+ 9], 21, -343485551);
|
||||
|
||||
a = (a + aa) >>> 0;
|
||||
b = (b + bb) >>> 0;
|
||||
c = (c + cc) >>> 0;
|
||||
d = (d + dd) >>> 0;
|
||||
}
|
||||
|
||||
return crypt.endian([a, b, c, d]);
|
||||
};
|
||||
|
||||
// Auxiliary functions
|
||||
md5._ff = function (a, b, c, d, x, s, t) {
|
||||
var n = a + (b & c | ~b & d) + (x >>> 0) + t;
|
||||
return ((n << s) | (n >>> (32 - s))) + b;
|
||||
};
|
||||
md5._gg = function (a, b, c, d, x, s, t) {
|
||||
var n = a + (b & d | c & ~d) + (x >>> 0) + t;
|
||||
return ((n << s) | (n >>> (32 - s))) + b;
|
||||
};
|
||||
md5._hh = function (a, b, c, d, x, s, t) {
|
||||
var n = a + (b ^ c ^ d) + (x >>> 0) + t;
|
||||
return ((n << s) | (n >>> (32 - s))) + b;
|
||||
};
|
||||
md5._ii = function (a, b, c, d, x, s, t) {
|
||||
var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;
|
||||
return ((n << s) | (n >>> (32 - s))) + b;
|
||||
};
|
||||
|
||||
// Package private blocksize
|
||||
md5._blocksize = 16;
|
||||
md5._digestsize = 16;
|
||||
|
||||
module.exports = function (message, options) {
|
||||
if (message === undefined || message === null)
|
||||
throw new Error('Illegal argument ' + message);
|
||||
|
||||
var digestbytes = crypt.wordsToBytes(md5(message, options));
|
||||
return options && options.asBytes ? digestbytes :
|
||||
options && options.asString ? bin.bytesToString(digestbytes) :
|
||||
crypt.bytesToHex(digestbytes);
|
||||
};
|
||||
|
||||
})();
|
||||
(function(){
|
||||
var crypt = __webpack_require__(319),
|
||||
utf8 = __webpack_require__(320).utf8,
|
||||
isBuffer = __webpack_require__(321),
|
||||
bin = __webpack_require__(320).bin,
|
||||
|
||||
// The core
|
||||
md5 = function (message, options) {
|
||||
// Convert to byte array
|
||||
if (message.constructor == String)
|
||||
if (options && options.encoding === 'binary')
|
||||
message = bin.stringToBytes(message);
|
||||
else
|
||||
message = utf8.stringToBytes(message);
|
||||
else if (isBuffer(message))
|
||||
message = Array.prototype.slice.call(message, 0);
|
||||
else if (!Array.isArray(message))
|
||||
message = message.toString();
|
||||
// else, assume byte array already
|
||||
|
||||
var m = crypt.bytesToWords(message),
|
||||
l = message.length * 8,
|
||||
a = 1732584193,
|
||||
b = -271733879,
|
||||
c = -1732584194,
|
||||
d = 271733878;
|
||||
|
||||
// Swap endian
|
||||
for (var i = 0; i < m.length; i++) {
|
||||
m[i] = ((m[i] << 8) | (m[i] >>> 24)) & 0x00FF00FF |
|
||||
((m[i] << 24) | (m[i] >>> 8)) & 0xFF00FF00;
|
||||
}
|
||||
|
||||
// Padding
|
||||
m[l >>> 5] |= 0x80 << (l % 32);
|
||||
m[(((l + 64) >>> 9) << 4) + 14] = l;
|
||||
|
||||
// Method shortcuts
|
||||
var FF = md5._ff,
|
||||
GG = md5._gg,
|
||||
HH = md5._hh,
|
||||
II = md5._ii;
|
||||
|
||||
for (var i = 0; i < m.length; i += 16) {
|
||||
|
||||
var aa = a,
|
||||
bb = b,
|
||||
cc = c,
|
||||
dd = d;
|
||||
|
||||
a = FF(a, b, c, d, m[i+ 0], 7, -680876936);
|
||||
d = FF(d, a, b, c, m[i+ 1], 12, -389564586);
|
||||
c = FF(c, d, a, b, m[i+ 2], 17, 606105819);
|
||||
b = FF(b, c, d, a, m[i+ 3], 22, -1044525330);
|
||||
a = FF(a, b, c, d, m[i+ 4], 7, -176418897);
|
||||
d = FF(d, a, b, c, m[i+ 5], 12, 1200080426);
|
||||
c = FF(c, d, a, b, m[i+ 6], 17, -1473231341);
|
||||
b = FF(b, c, d, a, m[i+ 7], 22, -45705983);
|
||||
a = FF(a, b, c, d, m[i+ 8], 7, 1770035416);
|
||||
d = FF(d, a, b, c, m[i+ 9], 12, -1958414417);
|
||||
c = FF(c, d, a, b, m[i+10], 17, -42063);
|
||||
b = FF(b, c, d, a, m[i+11], 22, -1990404162);
|
||||
a = FF(a, b, c, d, m[i+12], 7, 1804603682);
|
||||
d = FF(d, a, b, c, m[i+13], 12, -40341101);
|
||||
c = FF(c, d, a, b, m[i+14], 17, -1502002290);
|
||||
b = FF(b, c, d, a, m[i+15], 22, 1236535329);
|
||||
|
||||
a = GG(a, b, c, d, m[i+ 1], 5, -165796510);
|
||||
d = GG(d, a, b, c, m[i+ 6], 9, -1069501632);
|
||||
c = GG(c, d, a, b, m[i+11], 14, 643717713);
|
||||
b = GG(b, c, d, a, m[i+ 0], 20, -373897302);
|
||||
a = GG(a, b, c, d, m[i+ 5], 5, -701558691);
|
||||
d = GG(d, a, b, c, m[i+10], 9, 38016083);
|
||||
c = GG(c, d, a, b, m[i+15], 14, -660478335);
|
||||
b = GG(b, c, d, a, m[i+ 4], 20, -405537848);
|
||||
a = GG(a, b, c, d, m[i+ 9], 5, 568446438);
|
||||
d = GG(d, a, b, c, m[i+14], 9, -1019803690);
|
||||
c = GG(c, d, a, b, m[i+ 3], 14, -187363961);
|
||||
b = GG(b, c, d, a, m[i+ 8], 20, 1163531501);
|
||||
a = GG(a, b, c, d, m[i+13], 5, -1444681467);
|
||||
d = GG(d, a, b, c, m[i+ 2], 9, -51403784);
|
||||
c = GG(c, d, a, b, m[i+ 7], 14, 1735328473);
|
||||
b = GG(b, c, d, a, m[i+12], 20, -1926607734);
|
||||
|
||||
a = HH(a, b, c, d, m[i+ 5], 4, -378558);
|
||||
d = HH(d, a, b, c, m[i+ 8], 11, -2022574463);
|
||||
c = HH(c, d, a, b, m[i+11], 16, 1839030562);
|
||||
b = HH(b, c, d, a, m[i+14], 23, -35309556);
|
||||
a = HH(a, b, c, d, m[i+ 1], 4, -1530992060);
|
||||
d = HH(d, a, b, c, m[i+ 4], 11, 1272893353);
|
||||
c = HH(c, d, a, b, m[i+ 7], 16, -155497632);
|
||||
b = HH(b, c, d, a, m[i+10], 23, -1094730640);
|
||||
a = HH(a, b, c, d, m[i+13], 4, 681279174);
|
||||
d = HH(d, a, b, c, m[i+ 0], 11, -358537222);
|
||||
c = HH(c, d, a, b, m[i+ 3], 16, -722521979);
|
||||
b = HH(b, c, d, a, m[i+ 6], 23, 76029189);
|
||||
a = HH(a, b, c, d, m[i+ 9], 4, -640364487);
|
||||
d = HH(d, a, b, c, m[i+12], 11, -421815835);
|
||||
c = HH(c, d, a, b, m[i+15], 16, 530742520);
|
||||
b = HH(b, c, d, a, m[i+ 2], 23, -995338651);
|
||||
|
||||
a = II(a, b, c, d, m[i+ 0], 6, -198630844);
|
||||
d = II(d, a, b, c, m[i+ 7], 10, 1126891415);
|
||||
c = II(c, d, a, b, m[i+14], 15, -1416354905);
|
||||
b = II(b, c, d, a, m[i+ 5], 21, -57434055);
|
||||
a = II(a, b, c, d, m[i+12], 6, 1700485571);
|
||||
d = II(d, a, b, c, m[i+ 3], 10, -1894986606);
|
||||
c = II(c, d, a, b, m[i+10], 15, -1051523);
|
||||
b = II(b, c, d, a, m[i+ 1], 21, -2054922799);
|
||||
a = II(a, b, c, d, m[i+ 8], 6, 1873313359);
|
||||
d = II(d, a, b, c, m[i+15], 10, -30611744);
|
||||
c = II(c, d, a, b, m[i+ 6], 15, -1560198380);
|
||||
b = II(b, c, d, a, m[i+13], 21, 1309151649);
|
||||
a = II(a, b, c, d, m[i+ 4], 6, -145523070);
|
||||
d = II(d, a, b, c, m[i+11], 10, -1120210379);
|
||||
c = II(c, d, a, b, m[i+ 2], 15, 718787259);
|
||||
b = II(b, c, d, a, m[i+ 9], 21, -343485551);
|
||||
|
||||
a = (a + aa) >>> 0;
|
||||
b = (b + bb) >>> 0;
|
||||
c = (c + cc) >>> 0;
|
||||
d = (d + dd) >>> 0;
|
||||
}
|
||||
|
||||
return crypt.endian([a, b, c, d]);
|
||||
};
|
||||
|
||||
// Auxiliary functions
|
||||
md5._ff = function (a, b, c, d, x, s, t) {
|
||||
var n = a + (b & c | ~b & d) + (x >>> 0) + t;
|
||||
return ((n << s) | (n >>> (32 - s))) + b;
|
||||
};
|
||||
md5._gg = function (a, b, c, d, x, s, t) {
|
||||
var n = a + (b & d | c & ~d) + (x >>> 0) + t;
|
||||
return ((n << s) | (n >>> (32 - s))) + b;
|
||||
};
|
||||
md5._hh = function (a, b, c, d, x, s, t) {
|
||||
var n = a + (b ^ c ^ d) + (x >>> 0) + t;
|
||||
return ((n << s) | (n >>> (32 - s))) + b;
|
||||
};
|
||||
md5._ii = function (a, b, c, d, x, s, t) {
|
||||
var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;
|
||||
return ((n << s) | (n >>> (32 - s))) + b;
|
||||
};
|
||||
|
||||
// Package private blocksize
|
||||
md5._blocksize = 16;
|
||||
md5._digestsize = 16;
|
||||
|
||||
module.exports = function (message, options) {
|
||||
if (message === undefined || message === null)
|
||||
throw new Error('Illegal argument ' + message);
|
||||
|
||||
var digestbytes = crypt.wordsToBytes(md5(message, options));
|
||||
return options && options.asBytes ? digestbytes :
|
||||
options && options.asString ? bin.bytesToString(digestbytes) :
|
||||
crypt.bytesToHex(digestbytes);
|
||||
};
|
||||
|
||||
})();
|
||||
|
||||
|
||||
/***/ },
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
</head>
|
||||
<body>
|
||||
<div id="mount"></div>
|
||||
<script type="application/javascript;version=1.8"
|
||||
<script type="application/javascript"
|
||||
src="chrome://devtools/content/shared/theme-switching.js"></script>
|
||||
<script type="text/javascript">
|
||||
const { BrowserLoader } = Components.utils.import("resource://devtools/client/shared/browser-loader.js", {});
|
||||
|
|
|
@ -19,7 +19,7 @@ function test() {
|
|||
"<script type='text/javascript'>",
|
||||
"let b = 42;",
|
||||
"</SCRIPT>",
|
||||
"<script type='text/javascript;version=1.8'>",
|
||||
"<script type='text/javascript'>",
|
||||
"let c + 42;",
|
||||
"</SCRIPT>",
|
||||
"</head>"
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<input type="text" value=""/>
|
||||
<input type="button" value="Click me!" onclick="test()"/>
|
||||
|
||||
<script type="application/javascript;version=1.7">
|
||||
<script type="application/javascript">
|
||||
let output = document.querySelector("input");
|
||||
output.value = "";
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<script type="text/javascript" src="code_function-search-02.js"></script>
|
||||
<script type="text/javascript" src="code_function-search-03.js"></script>
|
||||
|
||||
<script type="text/javascript;version=1.8">
|
||||
<script type="text/javascript">
|
||||
function inline() {}
|
||||
var arrow = () => {}
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<link href="resource://devtools/client/jsonview/css/toolbar.css" rel="stylesheet" />
|
||||
<link href="resource://devtools/client/shared/components/tree/tree-view.css" rel="stylesheet" />
|
||||
|
||||
<script type="text/javascript;version=1.8"
|
||||
<script type="text/javascript"
|
||||
src="chrome://devtools/content/shared/theme-switching.js"></script>
|
||||
</head>
|
||||
<body class="theme-body devtools-monospace" role="application">
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
<title>&title;</title>
|
||||
<link rel="stylesheet" href="chrome://devtools/skin/dark-theme.css" type="text/css"/>
|
||||
<link rel="stylesheet" href="chrome://devtools/content/framework/connect/connect.css" type="text/css"/>
|
||||
<script type="application/javascript;version=1.8" src="connect.js"></script>
|
||||
<script type="application/javascript" src="connect.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>&header;</h1>
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
font-size: 20px
|
||||
}
|
||||
</style>
|
||||
<script type="application/javascript;version=1.8">
|
||||
<script type="application/javascript">
|
||||
function log(msg) {
|
||||
let output = document.getElementById("output");
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
margin-top: 10px;
|
||||
}
|
||||
</style>
|
||||
<script type="application/javascript;version=1.8">
|
||||
<script type="application/javascript">
|
||||
function log(msg) {
|
||||
let output = document.getElementById("output");
|
||||
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<?xml-stylesheet href="chrome://devtools/content/shared/widgets/widgets.css" type="text/css"?>
|
||||
<?xml-stylesheet href="chrome://devtools/skin/widgets.css" type="text/css"?>
|
||||
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<script type="application/javascript;version=1.8" src="chrome://devtools/content/shared/theme-switching.js"/>
|
||||
<script type="application/javascript" src="chrome://devtools/content/shared/theme-switching.js"/>
|
||||
<box flex="1" class="devtools-responsive-container theme-body">
|
||||
<vbox flex="1" class="devtools-main-content" id="content">test</vbox>
|
||||
<splitter class="devtools-side-splitter"/>
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
<title>Toolbox option</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
||||
<link rel="stylesheet" href="chrome://devtools/content/framework/options-panel.css" type="text/css"/>
|
||||
<script type="application/javascript;version=1.8" src="chrome://devtools/content/shared/theme-switching.js"/>
|
||||
<script type="application/javascript" src="chrome://devtools/content/shared/theme-switching.js"/>
|
||||
</head>
|
||||
<body role="application" class="theme-body">
|
||||
<form id="options-panel">
|
||||
|
|
|
@ -20,13 +20,13 @@
|
|||
<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
xmlns:html="http://www.w3.org/1999/xhtml">
|
||||
|
||||
<script type="application/javascript;version=1.8"
|
||||
<script type="application/javascript"
|
||||
src="chrome://devtools/content/shared/theme-switching.js"/>
|
||||
<script type="application/javascript"
|
||||
src="chrome://global/content/viewSourceUtils.js"/>
|
||||
|
||||
<script type="application/javascript" src="chrome://global/content/globalOverlay.js"/>
|
||||
<script type="application/javascript;version=1.8"
|
||||
<script type="application/javascript"
|
||||
src="chrome://devtools/content/framework/toolbox-init.js"/>
|
||||
|
||||
<commandset id="editMenuCommands"/>
|
||||
|
|
|
@ -330,7 +330,6 @@ SelectorAutocompleter.prototype = {
|
|||
*/
|
||||
_onSearchKeypress: function (event) {
|
||||
let popup = this.searchPopup;
|
||||
|
||||
switch (event.keyCode) {
|
||||
case KeyCodes.DOM_VK_RETURN:
|
||||
case KeyCodes.DOM_VK_TAB:
|
||||
|
@ -373,6 +372,9 @@ SelectorAutocompleter.prototype = {
|
|||
case KeyCodes.DOM_VK_ESCAPE:
|
||||
if (popup.isOpen) {
|
||||
this.hidePopup();
|
||||
} else {
|
||||
this.emit("processing-done");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -22,8 +22,9 @@
|
|||
<link rel="stylesheet" href="resource://devtools/client/inspector/components/inspector-tab-panel.css"/>
|
||||
<link rel="stylesheet" href="resource://devtools/client/shared/components/splitter/split-box.css"/>
|
||||
<link rel="stylesheet" href="resource://devtools/client/inspector/layout/components/Accordion.css"/>
|
||||
<link rel="stylesheet" href="resource://devtools/client/shared/components/reps/reps.css"/>
|
||||
|
||||
<script type="application/javascript;version=1.8"
|
||||
<script type="application/javascript"
|
||||
src="chrome://devtools/content/shared/theme-switching.js"></script>
|
||||
<script type="text/javascript">
|
||||
/* eslint-disable */
|
||||
|
@ -37,7 +38,7 @@
|
|||
</script>
|
||||
|
||||
<!-- in content, inspector.js is mapped to the dynamically generated webpack bundle -->
|
||||
<script type="application/javascript;version=1.8" src="inspector.js" defer="true"></script>
|
||||
<script type="application/javascript" src="inspector.js" defer="true"></script>
|
||||
</head>
|
||||
<body class="theme-body" role="application">
|
||||
<div class="inspector-responsive-container theme-body inspector">
|
||||
|
|
|
@ -30,7 +30,9 @@ const App = createClass({
|
|||
getSwatchColorPickerTooltip: PropTypes.func.isRequired,
|
||||
grids: PropTypes.arrayOf(PropTypes.shape(Types.grid)).isRequired,
|
||||
highlighterSettings: PropTypes.shape(Types.highlighterSettings).isRequired,
|
||||
setSelectedNode: PropTypes.func.isRequired,
|
||||
showBoxModelProperties: PropTypes.bool.isRequired,
|
||||
showGridOutline: PropTypes.bool.isRequired,
|
||||
onHideBoxModelHighlighter: PropTypes.func.isRequired,
|
||||
onSetGridOverlayColor: PropTypes.func.isRequired,
|
||||
onShowBoxModelEditor: PropTypes.func.isRequired,
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче