MozReview-Commit-ID: 1TtDrgYT5Sb
This commit is contained in:
Kartikaya Gupta 2017-02-27 10:39:39 -05:00
Родитель 712d4c80f9 4039fb4c58
Коммит acef3b8740
2750 изменённых файлов: 280213 добавлений и 88278 удалений

Просмотреть файл

@ -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="&#x2699;"
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,

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше