Merge m-c to inbound. a=merge
@ -15,7 +15,7 @@
|
||||
<project name="platform_build" path="build" remote="b2g" revision="e862ab9177af664f00b4522e2350f4cb13866d73">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="4b09b8824e3c68d8f5208a53f9ae3a8917dc9560"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="dd50945885765697f9fad93e05f6d8c78e1d742c"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
@ -23,7 +23,7 @@
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="6fc5f99a38660f33282e8c0426fe48ddba66f70e"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="a6f9a1245d98c51172c15afecb9ade1a6ca511e2"/>
|
||||
<!-- Stock Android things -->
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="95bb5b66b3ec5769c3de8d3f25d681787418e7d2"/>
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="ebdad82e61c16772f6cd47e9f11936bf6ebe9aa0"/>
|
||||
|
@ -15,7 +15,7 @@
|
||||
<project name="platform_build" path="build" remote="b2g" revision="e862ab9177af664f00b4522e2350f4cb13866d73">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="4b09b8824e3c68d8f5208a53f9ae3a8917dc9560"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="dd50945885765697f9fad93e05f6d8c78e1d742c"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
@ -23,7 +23,7 @@
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="6fc5f99a38660f33282e8c0426fe48ddba66f70e"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="a6f9a1245d98c51172c15afecb9ade1a6ca511e2"/>
|
||||
<!-- Stock Android things -->
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="95bb5b66b3ec5769c3de8d3f25d681787418e7d2"/>
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="ebdad82e61c16772f6cd47e9f11936bf6ebe9aa0"/>
|
||||
|
@ -19,7 +19,7 @@
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="4b09b8824e3c68d8f5208a53f9ae3a8917dc9560"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="dd50945885765697f9fad93e05f6d8c78e1d742c"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="2d58f4b9206b50b8fda0d5036da6f0c62608db7c"/>
|
||||
|
@ -17,10 +17,10 @@
|
||||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="4b09b8824e3c68d8f5208a53f9ae3a8917dc9560"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="dd50945885765697f9fad93e05f6d8c78e1d742c"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="bfdb6348725a33bdcdc4e17999cb500be6beedb5"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="6fc5f99a38660f33282e8c0426fe48ddba66f70e"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="a6f9a1245d98c51172c15afecb9ade1a6ca511e2"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
<!-- Stock Android things -->
|
||||
|
@ -15,7 +15,7 @@
|
||||
<project name="platform_build" path="build" remote="b2g" revision="e862ab9177af664f00b4522e2350f4cb13866d73">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="4b09b8824e3c68d8f5208a53f9ae3a8917dc9560"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="dd50945885765697f9fad93e05f6d8c78e1d742c"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
@ -23,7 +23,7 @@
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="6fc5f99a38660f33282e8c0426fe48ddba66f70e"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="a6f9a1245d98c51172c15afecb9ade1a6ca511e2"/>
|
||||
<!-- Stock Android things -->
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="f92a936f2aa97526d4593386754bdbf02db07a12"/>
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="6e47ff2790f5656b5b074407829ceecf3e6188c4"/>
|
||||
|
@ -15,7 +15,7 @@
|
||||
<project name="platform_build" path="build" remote="b2g" revision="05a36844c1046a1eb07d5b1325f85ed741f961ea">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="4b09b8824e3c68d8f5208a53f9ae3a8917dc9560"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="dd50945885765697f9fad93e05f6d8c78e1d742c"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
@ -23,7 +23,7 @@
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="6fc5f99a38660f33282e8c0426fe48ddba66f70e"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="a6f9a1245d98c51172c15afecb9ade1a6ca511e2"/>
|
||||
<!-- Stock Android things -->
|
||||
<project groups="pdk,linux" name="platform/prebuilts/clang/linux-x86/host/3.5" path="prebuilts/clang/linux-x86/host/3.5" revision="ffc05a232799fe8fcb3e47b7440b52b1fb4244c0"/>
|
||||
<project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" path="prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" revision="337e0ef5e40f02a1ae59b90db0548976c70a7226"/>
|
||||
|
@ -19,7 +19,7 @@
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="4b09b8824e3c68d8f5208a53f9ae3a8917dc9560"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="dd50945885765697f9fad93e05f6d8c78e1d742c"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="2d58f4b9206b50b8fda0d5036da6f0c62608db7c"/>
|
||||
|
@ -15,7 +15,7 @@
|
||||
<project name="platform_build" path="build" remote="b2g" revision="e862ab9177af664f00b4522e2350f4cb13866d73">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="4b09b8824e3c68d8f5208a53f9ae3a8917dc9560"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="dd50945885765697f9fad93e05f6d8c78e1d742c"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
@ -23,7 +23,7 @@
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="6fc5f99a38660f33282e8c0426fe48ddba66f70e"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="a6f9a1245d98c51172c15afecb9ade1a6ca511e2"/>
|
||||
<!-- Stock Android things -->
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="95bb5b66b3ec5769c3de8d3f25d681787418e7d2"/>
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="ebdad82e61c16772f6cd47e9f11936bf6ebe9aa0"/>
|
||||
|
@ -1,9 +1,9 @@
|
||||
{
|
||||
"git": {
|
||||
"git_revision": "4b09b8824e3c68d8f5208a53f9ae3a8917dc9560",
|
||||
"git_revision": "dd50945885765697f9fad93e05f6d8c78e1d742c",
|
||||
"remote": "https://git.mozilla.org/releases/gaia.git",
|
||||
"branch": ""
|
||||
},
|
||||
"revision": "74ba42b610e520caa4e67264d52ef3c30d3193ae",
|
||||
"revision": "68f78bcc8c51fea5242ba041b3b107e3acbfa4ac",
|
||||
"repo_path": "integration/gaia-central"
|
||||
}
|
||||
|
@ -17,10 +17,10 @@
|
||||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="4b09b8824e3c68d8f5208a53f9ae3a8917dc9560"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="dd50945885765697f9fad93e05f6d8c78e1d742c"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="bfdb6348725a33bdcdc4e17999cb500be6beedb5"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="6fc5f99a38660f33282e8c0426fe48ddba66f70e"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="a6f9a1245d98c51172c15afecb9ade1a6ca511e2"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
<!-- Stock Android things -->
|
||||
|
@ -15,7 +15,7 @@
|
||||
<project name="platform_build" path="build" remote="b2g" revision="05a36844c1046a1eb07d5b1325f85ed741f961ea">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="4b09b8824e3c68d8f5208a53f9ae3a8917dc9560"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="dd50945885765697f9fad93e05f6d8c78e1d742c"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
@ -23,7 +23,7 @@
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="6fc5f99a38660f33282e8c0426fe48ddba66f70e"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="a6f9a1245d98c51172c15afecb9ade1a6ca511e2"/>
|
||||
<!-- Stock Android things -->
|
||||
<project groups="pdk,linux" name="platform/prebuilts/clang/linux-x86/host/3.5" path="prebuilts/clang/linux-x86/host/3.5" revision="ffc05a232799fe8fcb3e47b7440b52b1fb4244c0"/>
|
||||
<project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" path="prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" revision="337e0ef5e40f02a1ae59b90db0548976c70a7226"/>
|
||||
|
@ -9,7 +9,7 @@ html, body {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#manage, #intro, #stage {
|
||||
#networkError, #manage, #intro, #stage {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
@ -114,6 +114,10 @@ let wrapper = {
|
||||
|
||||
let iframe = document.getElementById("remote");
|
||||
this.iframe = iframe;
|
||||
this.iframe.QueryInterface(Ci.nsIFrameLoaderOwner);
|
||||
let docShell = this.iframe.frameLoader.docShell;
|
||||
docShell.QueryInterface(Ci.nsIWebProgress);
|
||||
docShell.addProgressListener(this.iframeListener, Ci.nsIWebProgress.NOTIFY_STATE_DOCUMENT);
|
||||
iframe.addEventListener("load", this);
|
||||
|
||||
// Ideally we'd just merge urlParams with new URL(url).searchParams, but our
|
||||
@ -122,9 +126,56 @@ let wrapper = {
|
||||
if (urlParamStr) {
|
||||
url += (url.includes("?") ? "&" : "?") + urlParamStr;
|
||||
}
|
||||
this.url = url;
|
||||
iframe.src = url;
|
||||
},
|
||||
|
||||
retry: function () {
|
||||
let webNav = this.iframe.frameLoader.docShell.QueryInterface(Ci.nsIWebNavigation);
|
||||
webNav.loadURI(this.url, null, null, null, null);
|
||||
},
|
||||
|
||||
iframeListener: {
|
||||
QueryInterface: XPCOMUtils.generateQI([Ci.nsIWebProgressListener,
|
||||
Ci.nsISupportsWeakReference,
|
||||
Ci.nsISupports]),
|
||||
|
||||
onStateChange: function(aWebProgress, aRequest, aState, aStatus) {
|
||||
let failure = false;
|
||||
|
||||
// Captive portals sometimes redirect users
|
||||
if ((aState & Ci.nsIWebProgressListener.STATE_REDIRECTING)) {
|
||||
failure = true;
|
||||
} else if ((aState & Ci.nsIWebProgressListener.STATE_STOP)) {
|
||||
if (aRequest instanceof Ci.nsIHttpChannel) {
|
||||
try {
|
||||
failure = aRequest.responseStatus != 200;
|
||||
} catch (e) {
|
||||
failure = aStatus != Components.results.NS_OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Calling cancel() will raise some OnStateChange notifications by itself,
|
||||
// so avoid doing that more than once
|
||||
if (failure && aStatus != Components.results.NS_BINDING_ABORTED) {
|
||||
aRequest.cancel(Components.results.NS_BINDING_ABORTED);
|
||||
setErrorPage();
|
||||
}
|
||||
},
|
||||
|
||||
onLocationChange: function(aWebProgress, aRequest, aLocation, aFlags) {
|
||||
if (aRequest && aFlags & Ci.nsIWebProgressListener.LOCATION_CHANGE_ERROR_PAGE) {
|
||||
aRequest.cancel(Components.results.NS_BINDING_ABORTED);
|
||||
setErrorPage();
|
||||
}
|
||||
},
|
||||
|
||||
onProgressChange: function() {},
|
||||
onStatusChange: function() {},
|
||||
onSecurityChange: function() {},
|
||||
},
|
||||
|
||||
handleEvent: function (evt) {
|
||||
switch (evt.type) {
|
||||
case "load":
|
||||
@ -292,6 +343,11 @@ function getStarted() {
|
||||
show("remote");
|
||||
}
|
||||
|
||||
function retry() {
|
||||
show("remote");
|
||||
wrapper.retry();
|
||||
}
|
||||
|
||||
function openPrefs() {
|
||||
window.openPreferences("paneSync");
|
||||
}
|
||||
@ -363,6 +419,10 @@ function init() {
|
||||
});
|
||||
}
|
||||
|
||||
function setErrorPage() {
|
||||
show("stage", "networkError");
|
||||
}
|
||||
|
||||
// Causes the "top-level" element with |id| to be shown - all other top-level
|
||||
// elements are hidden. Optionally, ensures that only 1 "second-level" element
|
||||
// inside the top-level one is shown.
|
||||
@ -449,6 +509,9 @@ document.addEventListener("DOMContentLoaded", function onload() {
|
||||
var buttonGetStarted = document.getElementById('buttonGetStarted');
|
||||
buttonGetStarted.addEventListener('click', getStarted);
|
||||
|
||||
var buttonRetry = document.getElementById('buttonRetry');
|
||||
buttonRetry.addEventListener('click', retry);
|
||||
|
||||
var oldsync = document.getElementById('oldsync');
|
||||
oldsync.addEventListener('click', handleOldSync);
|
||||
|
||||
|
@ -71,6 +71,22 @@
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div id="networkError">
|
||||
<header>
|
||||
<h1>&aboutAccounts.noConnection.title;</h1>
|
||||
</header>
|
||||
|
||||
<section>
|
||||
<div class="graphic graphic-sync-intro"> </div>
|
||||
|
||||
<div class="description">&aboutAccounts.noConnection.description;</div>
|
||||
|
||||
<div class="button-row">
|
||||
<button id="buttonRetry" class="button" tabindex="3">&aboutAccounts.noConnection.retry;</button>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<iframe mozframetype="content" id="remote" />
|
||||
|
@ -458,7 +458,23 @@ var FullScreen = {
|
||||
this._element.removeAttribute(currentState);
|
||||
}
|
||||
if (newState != "hidden") {
|
||||
this._element.setAttribute(newState, true);
|
||||
if (currentState != "hidden") {
|
||||
this._element.setAttribute(newState, true);
|
||||
} else {
|
||||
// When the previous state is hidden, the display was none,
|
||||
// thus no box was constructed. We need to wait for the new
|
||||
// display value taking effect first, otherwise, there won't
|
||||
// be any transition. Since requestAnimationFrame callback is
|
||||
// generally triggered before any style flush and layout, we
|
||||
// should wait for the second animation frame.
|
||||
requestAnimationFrame(() => {
|
||||
requestAnimationFrame(() => {
|
||||
if (this._element) {
|
||||
this._element.setAttribute(newState, true);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
@ -476,7 +492,7 @@ var FullScreen = {
|
||||
}
|
||||
} else {
|
||||
let elemRect = this._element.getBoundingClientRect();
|
||||
if (state == "hiding") {
|
||||
if (state == "hiding" && this._lastState != "hidden") {
|
||||
// If we are on the hiding transition, and the pointer
|
||||
// moved near the box, restore to the previous state.
|
||||
if (event.clientY <= elemRect.bottom + 50) {
|
||||
|
@ -670,7 +670,6 @@ window[chromehidden~="toolbar"] toolbar:not(#nav-bar):not(#TabsToolbar):not(#pri
|
||||
}
|
||||
|
||||
#fullscreen-warning {
|
||||
display: flex;
|
||||
position: fixed;
|
||||
z-index: 2147483647 !important;
|
||||
visibility: visible;
|
||||
@ -684,13 +683,8 @@ window[chromehidden~="toolbar"] toolbar:not(#nav-bar):not(#TabsToolbar):not(#pri
|
||||
max-width: 95%;
|
||||
pointer-events: none;
|
||||
}
|
||||
#fullscreen-warning[hidden] {
|
||||
/* To ensure the transition always works fine, never change
|
||||
the value of display property. */
|
||||
#fullscreen-warning:not([hidden]) {
|
||||
display: flex;
|
||||
visibility: hidden !important;
|
||||
transition: initial;
|
||||
pointer-events: none !important;
|
||||
}
|
||||
#fullscreen-warning[onscreen] {
|
||||
transform: translate(-50%, 50px);
|
||||
|
@ -85,7 +85,8 @@ let gTests = [
|
||||
stage: false, // parent of 'manage' and 'intro'
|
||||
manage: false,
|
||||
intro: false, // this is "get started"
|
||||
remote: true
|
||||
remote: true,
|
||||
networkError: false
|
||||
});
|
||||
}
|
||||
},
|
||||
@ -112,7 +113,48 @@ let gTests = [
|
||||
stage: true, // parent of 'manage' and 'intro'
|
||||
manage: true,
|
||||
intro: false, // this is "get started"
|
||||
remote: false
|
||||
remote: false,
|
||||
networkError: false
|
||||
});
|
||||
}
|
||||
},
|
||||
{
|
||||
desc: "Test action=signin - captive portal",
|
||||
teardown: () => gBrowser.removeCurrentTab(),
|
||||
run: function* ()
|
||||
{
|
||||
const signinUrl = "https://redirproxy.example.com/test";
|
||||
setPref("identity.fxaccounts.remote.signin.uri", signinUrl);
|
||||
let [tab, url] = yield promiseNewTabWithIframeLoadEvent("about:accounts?action=signin");
|
||||
yield checkVisibilities(tab, {
|
||||
stage: true, // parent of 'manage' and 'intro'
|
||||
manage: false,
|
||||
intro: false, // this is "get started"
|
||||
remote: false,
|
||||
networkError: true
|
||||
});
|
||||
}
|
||||
},
|
||||
{
|
||||
desc: "Test action=signin - offline",
|
||||
teardown: () => {
|
||||
gBrowser.removeCurrentTab();
|
||||
BrowserOffline.toggleOfflineStatus();
|
||||
},
|
||||
run: function* ()
|
||||
{
|
||||
BrowserOffline.toggleOfflineStatus();
|
||||
Services.cache2.clear();
|
||||
|
||||
const signinUrl = "https://unknowndomain.cow";
|
||||
setPref("identity.fxaccounts.remote.signin.uri", signinUrl);
|
||||
let [tab, url] = yield promiseNewTabWithIframeLoadEvent("about:accounts?action=signin");
|
||||
yield checkVisibilities(tab, {
|
||||
stage: true, // parent of 'manage' and 'intro'
|
||||
manage: false,
|
||||
intro: false, // this is "get started"
|
||||
remote: false,
|
||||
networkError: true
|
||||
});
|
||||
}
|
||||
},
|
||||
@ -130,7 +172,8 @@ let gTests = [
|
||||
stage: false, // parent of 'manage' and 'intro'
|
||||
manage: false,
|
||||
intro: false, // this is "get started"
|
||||
remote: true
|
||||
remote: true,
|
||||
networkError: false
|
||||
});
|
||||
},
|
||||
},
|
||||
@ -149,7 +192,8 @@ let gTests = [
|
||||
stage: true, // parent of 'manage' and 'intro'
|
||||
manage: true,
|
||||
intro: false, // this is "get started"
|
||||
remote: false
|
||||
remote: false,
|
||||
networkError: false
|
||||
});
|
||||
},
|
||||
},
|
||||
|
@ -22,12 +22,14 @@ addEventListener("DOMContentLoaded", function domContentLoaded(event) {
|
||||
// at least one test initially loads about:blank - in that case, we are done.
|
||||
return;
|
||||
}
|
||||
iframe.addEventListener("load", function iframeLoaded(event) {
|
||||
// We use DOMContentLoaded here as that fires for our iframe even when we've
|
||||
// arranged for the URL in the iframe to cause an error.
|
||||
addEventListener("DOMContentLoaded", function iframeLoaded(event) {
|
||||
if (iframe.contentWindow.location.href == "about:blank" ||
|
||||
event.target != iframe) {
|
||||
event.target != iframe.contentDocument) {
|
||||
return;
|
||||
}
|
||||
iframe.removeEventListener("load", iframeLoaded, true);
|
||||
removeEventListener("DOMContentLoaded", iframeLoaded, true);
|
||||
sendAsyncMessage("test:iframe:load", {url: iframe.getAttribute("src")});
|
||||
// And an event listener for the test responses, which we send to the test
|
||||
// via a message.
|
||||
|
@ -51,7 +51,12 @@
|
||||
insertScript("//www.google-analytics.com/analytics.js");
|
||||
|
||||
window.ga("create", "UA-36116321-15", "auto");
|
||||
window.ga("set", "anonymizeIp", true);
|
||||
/* Don't send conversation ids to GA, by specifying our own location. */
|
||||
window.ga("set", {
|
||||
"location": document.location.origin + "/conversation/",
|
||||
"anonymizeIp": true,
|
||||
"title": "Link Clicker"
|
||||
});
|
||||
window.ga("send", "pageview");
|
||||
}
|
||||
})();
|
||||
|
@ -362,7 +362,7 @@ let gSyncPane = {
|
||||
document.getElementById("fxaChangeDeviceName").disabled = !syncReady;
|
||||
|
||||
// Clear the profile image (if any) of the previously logged in account.
|
||||
document.getElementById("fxaProfileImage").style.removeProperty("background-image");
|
||||
document.getElementById("fxaProfileImage").style.removeProperty("list-style-image");
|
||||
|
||||
// If the account is verified the next promise in the chain will
|
||||
// fetch profile data.
|
||||
@ -385,7 +385,7 @@ let gSyncPane = {
|
||||
let img = new Image();
|
||||
img.onload = () => {
|
||||
let bgImage = "url('" + data.avatar + "')";
|
||||
document.getElementById("fxaProfileImage").style.backgroundImage = bgImage;
|
||||
document.getElementById("fxaProfileImage").style.listStyleImage = bgImage;
|
||||
};
|
||||
img.src = data.avatar;
|
||||
}
|
||||
|
@ -200,102 +200,111 @@
|
||||
<!-- These panels are for the Firefox Accounts identity provider -->
|
||||
<vbox id="noFxaAccount">
|
||||
<hbox>
|
||||
<groupbox id="noFxaGroup">
|
||||
<vbox>
|
||||
<label id="noFxaCaption">&signedOut.caption;</label>
|
||||
<description id="noFxaDescription" flex="1">&signedOut.description;</description>
|
||||
<hbox class="fxaAccountBox">
|
||||
<image class="fxaFirefoxLogo"/>
|
||||
<vbox>
|
||||
<label id="signedOutAccountBoxTitle">&signedOut.accountBox.title;</label>
|
||||
<hbox>
|
||||
<button id="noFxaSignUp" label="&signedOut.accountBox.create;"/>
|
||||
<button id="noFxaSignIn" label="&signedOut.accountBox.signin;"/>
|
||||
</hbox>
|
||||
</vbox>
|
||||
</hbox>
|
||||
</vbox>
|
||||
</groupbox>
|
||||
<image class="fxaSyncIllustration"/>
|
||||
</hbox>
|
||||
<hbox class="fxaMobilePromo">
|
||||
<label>&mobilePromo.start;</label>
|
||||
<image class="androidLogo"/>
|
||||
<label class="text-link"
|
||||
href="https://www.mozilla.org/firefox/android/">
|
||||
&mobilePromo.androidLink;
|
||||
</label>
|
||||
<label>&mobilePromo.end;</label>
|
||||
<vbox id="fxaContentWrapper">
|
||||
<groupbox id="noFxaGroup">
|
||||
<vbox>
|
||||
<label id="noFxaCaption">&signedOut.caption;</label>
|
||||
<description id="noFxaDescription" flex="1">&signedOut.description;</description>
|
||||
<hbox class="fxaAccountBox">
|
||||
<vbox>
|
||||
<image class="fxaFirefoxLogo"/>
|
||||
</vbox>
|
||||
<vbox flex="1">
|
||||
<label id="signedOutAccountBoxTitle">&signedOut.accountBox.title;</label>
|
||||
<description class="fxaAccountBoxButtons">
|
||||
<button id="noFxaSignUp">&signedOut.accountBox.create;</button>
|
||||
<button id="noFxaSignIn">&signedOut.accountBox.signin;</button>
|
||||
</description>
|
||||
</vbox>
|
||||
</hbox>
|
||||
</vbox>
|
||||
</groupbox>
|
||||
</vbox>
|
||||
<vbox>
|
||||
<image class="fxaSyncIllustration"/>
|
||||
</vbox>
|
||||
</hbox>
|
||||
<label class="fxaMobilePromo">
|
||||
&mobilePromo.start;<!-- We put these comments to avoid inserting white spaces
|
||||
--><image class="androidLogo"/><!--
|
||||
--><label class="androidLink text-link" href="https://www.mozilla.org/firefox/android/"><!--
|
||||
-->&mobilePromo.androidLink;</label><!--
|
||||
-->&mobilePromo.end;
|
||||
</label>
|
||||
<label class="androidAttribution">&androidAttribution;</label>
|
||||
</vbox>
|
||||
|
||||
<vbox id="hasFxaAccount">
|
||||
<hbox>
|
||||
<vbox>
|
||||
<vbox id="fxaContentWrapper">
|
||||
<groupbox id="fxaGroup">
|
||||
<caption><label>&syncBrand.fxAccount.label;</label></caption>
|
||||
<deck id="fxaLoginStatus">
|
||||
|
||||
<deck id="fxaLoginStatus">
|
||||
<!-- logged in and verified and all is good -->
|
||||
<hbox id="fxaLoginVerified" class="fxaAccountBox">
|
||||
<vbox>
|
||||
<image id="fxaProfileImage"
|
||||
onclick="gSyncPane.openChangeProfileImage();" hidden="true"
|
||||
tooltiptext="&profilePicture.tooltip;" class="actionable"/>
|
||||
</vbox>
|
||||
<vbox flex="1">
|
||||
<label id="fxaEmailAddress1"/>
|
||||
<label id="fxaDisplayName" hidden="true"/>
|
||||
<description class="fxaAccountBoxButtons">
|
||||
<button id="verifiedManage">&manage.label;</button>
|
||||
<button id="fxaUnlinkButton">&disconnect.label;</button>
|
||||
</description>
|
||||
</vbox>
|
||||
</hbox>
|
||||
|
||||
<!-- logged in and verified and all is good -->
|
||||
<hbox id="fxaLoginVerified" class="fxaAccountBox">
|
||||
<image id="fxaProfileImage"
|
||||
onclick="gSyncPane.openChangeProfileImage();" hidden="true"
|
||||
tooltiptext="&profilePicture.tooltip;" class="actionable"/>
|
||||
<vbox>
|
||||
<label id="fxaEmailAddress1"/>
|
||||
<label id="fxaDisplayName" hidden="true"/>
|
||||
<hbox class="fxaAccountBoxButtons">
|
||||
<button id="verifiedManage" label="&manage.label;"/>
|
||||
<button id="fxaUnlinkButton" label="&disconnect.label;"/>
|
||||
</hbox>
|
||||
</vbox>
|
||||
<!-- logged in to an unverified account -->
|
||||
<hbox id="fxaLoginUnverified" class="fxaAccountBox">
|
||||
<vbox>
|
||||
<image id="fxaProfileImage"/>
|
||||
</vbox>
|
||||
<vbox flex="1">
|
||||
<hbox>
|
||||
<vbox><image id="fxaLoginRejectedWarning"/></vbox>
|
||||
<description flex="1">
|
||||
&signedInUnverified.beforename.label;
|
||||
<label id="fxaEmailAddress2"/>
|
||||
&signedInUnverified.aftername.label;
|
||||
</description>
|
||||
</hbox>
|
||||
<description class="fxaAccountBoxButtons">
|
||||
<button id="verifyFxaAccount">&verify.label;</button>
|
||||
<button id="unverifiedUnlinkFxaAccount">&forget.label;</button>
|
||||
</description>
|
||||
</vbox>
|
||||
</hbox>
|
||||
|
||||
<!-- logged in to an unverified account -->
|
||||
<hbox id="fxaLoginUnverified" class="fxaAccountBox">
|
||||
<image id="fxaProfileImage"/>
|
||||
<vbox>
|
||||
<hbox>
|
||||
<vbox><image id="fxaLoginRejectedWarning"/></vbox>
|
||||
<description>
|
||||
&signedInUnverified.beforename.label;
|
||||
<label id="fxaEmailAddress2"/>
|
||||
&signedInUnverified.aftername.label;
|
||||
</description>
|
||||
</hbox>
|
||||
<hbox class="fxaAccountBoxButtons">
|
||||
<button id="verifyFxaAccount" label="&verify.label;"/>
|
||||
<button id="unverifiedUnlinkFxaAccount" label="&forget.label;"/>
|
||||
</hbox>
|
||||
</vbox>
|
||||
<!-- logged in locally but server rejected credentials -->
|
||||
<hbox id="fxaLoginRejected" class="fxaAccountBox">
|
||||
<vbox>
|
||||
<image id="fxaProfileImage"/>
|
||||
</vbox>
|
||||
<vbox flex="1">
|
||||
<hbox>
|
||||
<vbox><image id="fxaLoginRejectedWarning"/></vbox>
|
||||
<description flex="1">
|
||||
&signedInLoginFailure.beforename.label;
|
||||
<label id="fxaEmailAddress3"/>
|
||||
&signedInLoginFailure.aftername.label;
|
||||
</description>
|
||||
</hbox>
|
||||
|
||||
<!-- logged in locally but server rejected credentials -->
|
||||
<hbox id="fxaLoginRejected" class="fxaAccountBox">
|
||||
<image id="fxaProfileImage"/>
|
||||
<vbox>
|
||||
<hbox>
|
||||
<vbox><image id="fxaLoginRejectedWarning"/></vbox>
|
||||
<description>
|
||||
&signedInLoginFailure.beforename.label;
|
||||
<label id="fxaEmailAddress3"/>
|
||||
&signedInLoginFailure.aftername.label;
|
||||
</description>
|
||||
</hbox>
|
||||
<hbox class="fxaAccountBoxButtons">
|
||||
<button id="rejectReSignIn" label="&signIn.label;"/>
|
||||
<button id="rejectUnlinkFxaAccount" label="&forget.label;"/>
|
||||
</hbox>
|
||||
</vbox>
|
||||
</hbox>
|
||||
</deck>
|
||||
<description class="fxaAccountBoxButtons">
|
||||
<button id="rejectReSignIn">&signIn.label;</button>
|
||||
<button id="rejectUnlinkFxaAccount">&forget.label;</button>
|
||||
</description>
|
||||
</vbox>
|
||||
</hbox>
|
||||
</deck>
|
||||
</groupbox>
|
||||
<groupbox id="syncOptions">
|
||||
<caption><label>&signedIn.engines.label;</label></caption>
|
||||
<hbox id="fxaSyncEngines">
|
||||
<vbox align="start">
|
||||
<vbox align="start" flex="1">
|
||||
<checkbox label="&engine.tabs.label;"
|
||||
accesskey="&engine.tabs.accesskey;"
|
||||
preference="engine.tabs"/>
|
||||
@ -306,7 +315,7 @@
|
||||
accesskey="&engine.passwords.accesskey;"
|
||||
preference="engine.passwords"/>
|
||||
</vbox>
|
||||
<vbox align="start">
|
||||
<vbox align="start" flex="1">
|
||||
<checkbox label="&engine.history.label;"
|
||||
accesskey="&engine.history.accesskey;"
|
||||
preference="engine.history"/>
|
||||
@ -321,8 +330,9 @@
|
||||
</hbox>
|
||||
</groupbox>
|
||||
</vbox>
|
||||
<spacer flex="1"/>
|
||||
<image class="fxaSyncIllustration"/>
|
||||
<vbox>
|
||||
<image class="fxaSyncIllustration"/>
|
||||
</vbox>
|
||||
</hbox>
|
||||
<spacer class="separator"/>
|
||||
<groupbox>
|
||||
@ -333,10 +343,7 @@
|
||||
</label>
|
||||
</caption>
|
||||
<hbox id="fxaDeviceName">
|
||||
<hbox>
|
||||
<textbox id="fxaSyncComputerName" disabled="true" flex="1"/>
|
||||
</hbox>
|
||||
<spacer flex="1"/>
|
||||
<textbox id="fxaSyncComputerName" disabled="true"/>
|
||||
<hbox>
|
||||
<button id="fxaChangeDeviceName"
|
||||
label="&changeSyncDeviceName.label;"/>
|
||||
@ -350,15 +357,13 @@
|
||||
</hbox>
|
||||
</groupbox>
|
||||
<spacer class="separator"/>
|
||||
<hbox class="fxaMobilePromo">
|
||||
<label>&mobilePromo.start;</label>
|
||||
<image class="androidLogo"/>
|
||||
<label class="text-link"
|
||||
href="https://www.mozilla.org/firefox/android/">
|
||||
&mobilePromo.androidLink;
|
||||
</label>
|
||||
<label>&mobilePromo.end;</label>
|
||||
</hbox>
|
||||
<label class="fxaMobilePromo">
|
||||
&mobilePromo.start;<!-- We put these comments to avoid inserting white spaces
|
||||
--><image class="androidLogo"/><!--
|
||||
--><label class="androidLink text-link" href="https://www.mozilla.org/firefox/android/"><!--
|
||||
-->&mobilePromo.androidLink;</label><!--
|
||||
-->&mobilePromo.end;
|
||||
</label>
|
||||
<spacer flex="1"/>
|
||||
<vbox id="tosPP-small" align="start">
|
||||
<label id="tosPP-small-ToS" class="text-link">
|
||||
|
@ -2738,11 +2738,10 @@ ElementEditor.prototype = {
|
||||
// Create links in the attribute value, and collapse long attributes if
|
||||
// needed.
|
||||
let collapse = value => {
|
||||
if (value.match(COLLAPSE_DATA_URL_REGEX)) {
|
||||
if (value && value.match(COLLAPSE_DATA_URL_REGEX)) {
|
||||
return truncateString(value, COLLAPSE_DATA_URL_LENGTH);
|
||||
} else {
|
||||
return truncateString(value, COLLAPSE_ATTRIBUTE_LENGTH);
|
||||
}
|
||||
return truncateString(value, COLLAPSE_ATTRIBUTE_LENGTH);
|
||||
};
|
||||
|
||||
val.innerHTML = "";
|
||||
@ -2920,7 +2919,7 @@ function nodeDocument(node) {
|
||||
}
|
||||
|
||||
function truncateString(str, maxLength) {
|
||||
if (str.length <= maxLength) {
|
||||
if (!str || str.length <= maxLength) {
|
||||
return str;
|
||||
}
|
||||
|
||||
|
@ -9,3 +9,6 @@
|
||||
<!ENTITY aboutAccountsConfig.startButton.label "Get started">
|
||||
<!ENTITY aboutAccountsConfig.useOldSync.label "Using an older version of Sync?">
|
||||
<!ENTITY aboutAccountsConfig.syncPreferences.label "Sync preferences">
|
||||
<!ENTITY aboutAccounts.noConnection.title "No connection">
|
||||
<!ENTITY aboutAccounts.noConnection.description "You must be connected to the internet to sign in.">
|
||||
<!ENTITY aboutAccounts.noConnection.retry "Try again">
|
||||
|
@ -88,16 +88,12 @@
|
||||
<!ENTITY performanceUI.table.selfAlloc "Self Sampled Allocations">
|
||||
<!ENTITY performanceUI.table.selfAlloc.tooltip "The number of Object allocations sampled at this location.">
|
||||
|
||||
<!-- LOCALIZATION NOTE (performanceUI.newtab.tooltiptext): The tooltiptext shown
|
||||
- on the "+" (new tab) button for a profile when a selection is available. -->
|
||||
<!ENTITY performanceUI.newtab.tooltiptext "Add new tab from selection">
|
||||
|
||||
<!-- LOCALIZATION NOTE (performanceUI.toolbar.filter.tooltiptext): This string
|
||||
<!-- LOCALIZATION NOTE (performanceUI.options.filter.tooltiptext): This string
|
||||
- is displayed next to the filter button-->
|
||||
<!ENTITY performanceUI.options.filter.tooltiptext "Select what data to display in the timeline">
|
||||
|
||||
<!-- LOCALIZATION NOTE (performanceUI.options.tooltiptext): This is the tooltip
|
||||
- for the options button. -->
|
||||
<!-- LOCALIZATION NOTE (performanceUI.options.gear.tooltiptext): This is the
|
||||
- tooltip for the options button. -->
|
||||
<!ENTITY performanceUI.options.gear.tooltiptext "Configure performance preferences.">
|
||||
|
||||
<!-- LOCALIZATION NOTE (performanceUI.invertTree): This is the label shown next to
|
||||
|
@ -113,11 +113,6 @@ table.idle=(idle)
|
||||
# labels which, when clicked, jump to the debugger.
|
||||
table.url.tooltiptext=View source in Debugger
|
||||
|
||||
# LOCALIZATION NOTE (table.zoom.tooltiptext):
|
||||
# This string is displayed in the call tree as the tooltip text for the 'zoom'
|
||||
# buttons (small magnifying glass icons) which spawn a new tab.
|
||||
table.zoom.tooltiptext=Inspect frame in new tab
|
||||
|
||||
# LOCALIZATION NOTE (table.view-optimizations.tooltiptext):
|
||||
# This string is displayed in the icon displayed next to frames that
|
||||
# have optimization data
|
||||
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 279 B |
Before Width: | Height: | Size: 736 B After Width: | Height: | Size: 488 B |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 5.9 KiB |
@ -372,11 +372,9 @@ description > html|a {
|
||||
*/
|
||||
|
||||
#fxaProfileImage {
|
||||
width: 60px;
|
||||
max-height: 60px;
|
||||
max-width: 60px;
|
||||
border-radius: 50%;
|
||||
background-image: url(chrome://browser/skin/fxa/default-avatar.png);
|
||||
background-size: contain;
|
||||
list-style-image: url(chrome://browser/skin/fxa/default-avatar.png);
|
||||
margin-inline-end: 15px;
|
||||
}
|
||||
|
||||
@ -396,13 +394,24 @@ description > html|a {
|
||||
/* Overriding the margins from the base preferences.css theme file.
|
||||
These overrides can be simplified by fixing bug 1027174 */
|
||||
margin: 0;
|
||||
padding-top: 15px;
|
||||
}
|
||||
|
||||
#fxaContentWrapper {
|
||||
-moz-box-flex: 1;
|
||||
}
|
||||
|
||||
#noFxaGroup {
|
||||
-moz-box-flex: 1;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#noFxaGroup > vbox {
|
||||
#fxaContentWrapper {
|
||||
padding-right: 15px;
|
||||
}
|
||||
|
||||
#noFxaGroup > vbox,
|
||||
#fxaGroup {
|
||||
-moz-box-align: start;
|
||||
}
|
||||
|
||||
@ -412,7 +421,7 @@ description > html|a {
|
||||
|
||||
#fxaSyncComputerName {
|
||||
margin-inline-start: 0px;
|
||||
width: 500px;
|
||||
-moz-box-flex: 1;
|
||||
}
|
||||
|
||||
#tosPP-small-ToS {
|
||||
@ -453,41 +462,38 @@ description > html|a {
|
||||
#signedOutAccountBoxTitle {
|
||||
margin-inline-start: 6px !important;
|
||||
font-weight: bold;
|
||||
margin-bottom: 11px;
|
||||
}
|
||||
|
||||
.fxaAccountBox button {
|
||||
.fxaAccountBoxButtons {
|
||||
margin-bottom: 0 !important;
|
||||
margin-top: 11px;
|
||||
}
|
||||
|
||||
.fxaAccountBoxButtons > button {
|
||||
padding-left: 11px;
|
||||
padding-right: 11px;
|
||||
}
|
||||
|
||||
.fxaSyncIllustration {
|
||||
width: 231px;
|
||||
max-height: 200px;
|
||||
list-style-image: url(chrome://browser/skin/fxa/sync-illustration.png)
|
||||
}
|
||||
|
||||
#fxaEmailAddress1,
|
||||
#fxaEmailAddress2,
|
||||
#fxaEmailAddress3 {
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.fxaFirefoxLogo {
|
||||
list-style-image: url(chrome://browser/skin/fxa/logo.png);
|
||||
max-width: 64px;
|
||||
margin-inline-end: 14px;
|
||||
}
|
||||
|
||||
#noFxaAccount .fxaMobilePromo {
|
||||
margin-bottom: 55px;
|
||||
}
|
||||
|
||||
#hasFxaAccount .fxaMobilePromo {
|
||||
.fxaMobilePromo {
|
||||
margin-top: 14px;
|
||||
margin-bottom: 41px;
|
||||
margin-top: 27.5px;
|
||||
}
|
||||
|
||||
.fxaMobilePromo > label {
|
||||
margin-inline-start: 0;
|
||||
}
|
||||
|
||||
#hasFxaAccount .fxaAccountBoxButtons {
|
||||
margin-top: 11px;
|
||||
}
|
||||
|
||||
#fxaLoginRejectedWarning {
|
||||
@ -503,8 +509,14 @@ description > html|a {
|
||||
.androidLogo {
|
||||
list-style-image: url(chrome://browser/skin/fxa/android.png);
|
||||
max-width: 24px;
|
||||
margin-top: -4px;
|
||||
margin-inline-end: 4px;
|
||||
position: relative;
|
||||
top: 8px;
|
||||
margin: 0px;
|
||||
margin-inline-end: 5px;
|
||||
}
|
||||
|
||||
.androidLink {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#tosPP-small {
|
||||
@ -527,6 +539,6 @@ description > html|a {
|
||||
list-style-image: url(chrome://browser/skin/fxa/android@2x.png);
|
||||
}
|
||||
#fxaProfileImage {
|
||||
background-image: url(chrome://browser/skin/fxa/default-avatar@2x.png);
|
||||
list-style-image: url(chrome://browser/skin/fxa/default-avatar@2x.png);
|
||||
}
|
||||
}
|
||||
|
@ -39,6 +39,8 @@ XPCOMUtils.defineLazyServiceGetter(this, "uuidgen",
|
||||
"@mozilla.org/uuid-generator;1",
|
||||
"nsIUUIDGenerator");
|
||||
|
||||
const kObserverSoftLimit = 10;
|
||||
|
||||
/**
|
||||
* In order to make SettingsManager work with Privileged Apps, we need the lock
|
||||
* to be OOP. However, the lock state needs to be managed on the child process,
|
||||
@ -363,14 +365,26 @@ SettingsManager.prototype = {
|
||||
|
||||
addObserver: function addObserver(aName, aCallback) {
|
||||
if (VERBOSE) debug("addObserver " + aName);
|
||||
|
||||
if (!this._callbacks) {
|
||||
this._callbacks = {};
|
||||
}
|
||||
|
||||
if (!this._callbacks[aName]) {
|
||||
this._callbacks[aName] = [aCallback];
|
||||
} else {
|
||||
this._callbacks[aName].push(aCallback);
|
||||
}
|
||||
|
||||
let length = this._callbacks[aName].length;
|
||||
if (length >= kObserverSoftLimit) {
|
||||
debug("WARNING: MORE THAN " + kObserverSoftLimit + " OBSERVERS FOR " +
|
||||
aName + ": " + length + " FROM" + (new Error).stack);
|
||||
#ifdef DEBUG
|
||||
throw Components.results.NS_ERROR_ABORT;
|
||||
#endif
|
||||
}
|
||||
|
||||
this.checkMessageRegistration();
|
||||
},
|
||||
|
||||
@ -421,7 +435,7 @@ SettingsManager.prototype = {
|
||||
}
|
||||
|
||||
let path;
|
||||
if (length < 20) {
|
||||
if (length < kObserverSoftLimit) {
|
||||
path = "settings-observers";
|
||||
} else {
|
||||
path = "settings-observers-suspect/referent(topic=" +
|
||||
|
@ -5,8 +5,11 @@
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
EXTRA_COMPONENTS += [
|
||||
'SettingsManager.js',
|
||||
'SettingsManager.manifest',
|
||||
'SettingsManager.manifest'
|
||||
]
|
||||
|
||||
EXTRA_PP_COMPONENTS += [
|
||||
'SettingsManager.js'
|
||||
]
|
||||
|
||||
if CONFIG['MOZ_B2G']:
|
||||
|
@ -12,4 +12,6 @@ support-files =
|
||||
[test_settings_navigator_object.html]
|
||||
[test_settings_onsettingchange.html]
|
||||
[test_settings_bug1110872.html]
|
||||
skip-if = !e10s
|
||||
skip-if = !e10s
|
||||
[test_settings_observer_killer.html]
|
||||
skip-if = !debug
|
||||
|
68
dom/settings/tests/test_settings_observer_killer.html
Normal file
@ -0,0 +1,68 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=1193469
|
||||
-->
|
||||
<head>
|
||||
<title>Test for Bug 1193469 Settings API</title>
|
||||
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1193469">Mozilla Bug 1193469</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
<iframe></iframe>
|
||||
</div>
|
||||
<pre id="test">
|
||||
<script class="testbody" type="text/javascript;version=1.7">
|
||||
|
||||
var url = SimpleTest.getTestFileURL("file_loadserver.js");
|
||||
var script = SpecialPowers.loadChromeScript(url);
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
SpecialPowers.pushPermissions([
|
||||
{type: "settings-api-read", allow: 1, context: document},
|
||||
{type: "settings-api-write", allow: 1, context: document},
|
||||
{type: "settings-read", allow: 1, context: document},
|
||||
{type: "settings-write", allow: 1, context: document},
|
||||
{type: "settings-clear", allow: 1, context: document}
|
||||
], function() {
|
||||
SpecialPowers.pushPrefEnv({
|
||||
set: [["dom.mozSettings.enabled", true]]
|
||||
},
|
||||
function () {
|
||||
ok(true, "abusing observers");
|
||||
|
||||
var obs;
|
||||
for (obs = 0; obs < 9; obs++) {
|
||||
navigator.mozSettings.addObserver("fake.setting.key", function(v) {
|
||||
// nothing to do for real ...
|
||||
ok(false, "should not be called");
|
||||
});
|
||||
ok(true, "first: added observer #" + obs);
|
||||
}
|
||||
ok(true, "adding first observers, should not have thrown");
|
||||
|
||||
try {
|
||||
ok(true, "second: adding new observer");
|
||||
navigator.mozSettings.addObserver("fake.setting.key", function(v) {
|
||||
// nothing to do for real ...
|
||||
ok(false, "should not be called");
|
||||
});
|
||||
ok(false, "adding too many observers should have thrown");
|
||||
} catch (ex) {
|
||||
ok(true, "got exception when trying to add too many observers");
|
||||
}
|
||||
|
||||
SimpleTest.finish();
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
@ -221,7 +221,7 @@
|
||||
</style>
|
||||
|
||||
<style name="Widget.HomeListView" parent="Widget.ListView">
|
||||
<item name="android:divider">#E7ECF0</item>
|
||||
<item name="android:divider">@color/divider_light</item>
|
||||
</style>
|
||||
|
||||
<style name="Widget.TopSitesListView" parent="Widget.BookmarksListView"/>
|
||||
@ -559,7 +559,7 @@
|
||||
</style>
|
||||
|
||||
<style name="Widget.RemoteTabsListView" parent="Widget.HomeListView">
|
||||
<item name="android:childDivider">#E7ECF0</item>
|
||||
<item name="android:childDivider">@color/divider_light</item>
|
||||
<item name="android:drawSelectorOnTop">true</item>
|
||||
</style>
|
||||
|
||||
|
@ -89,10 +89,6 @@ const SCHEDULER_TICK_IDLE_INTERVAL_MS = 60 * 60 * 1000;
|
||||
// The tolerance we have when checking if it's midnight (15 minutes).
|
||||
const SCHEDULER_MIDNIGHT_TOLERANCE_MS = 15 * 60 * 1000;
|
||||
|
||||
// Coalesce the daily and aborted-session pings if they are both due within
|
||||
// two minutes from each other.
|
||||
const SCHEDULER_COALESCE_THRESHOLD_MS = 2 * 60 * 1000;
|
||||
|
||||
// Seconds of idle time before pinging.
|
||||
// On idle-daily a gather-telemetry notification is fired, during it probes can
|
||||
// start asynchronous tasks to gather data.
|
||||
|
@ -53,7 +53,6 @@ public:
|
||||
virtual void NotifyBootAnimationStopped();
|
||||
|
||||
private:
|
||||
void StopBootAnim();
|
||||
void CreateSurface(android::sp<ANativeWindow>& aNativeWindow,
|
||||
android::sp<android::DisplaySurface>& aDisplaySurface,
|
||||
uint32_t aWidth, uint32_t aHeight);
|
||||
|