Merge m-c to m-i
|
@ -15,9 +15,9 @@
|
|||
<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="0afa6429bf6a772289801600a84438cd7aa27b11"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="3e5271663e7ef26290c29a45d2e42c0d3c20fe04"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4d9fbc08e87731447c19e96e13d8c7444baafcca"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
|
|
|
@ -15,9 +15,9 @@
|
|||
<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="0afa6429bf6a772289801600a84438cd7aa27b11"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="3e5271663e7ef26290c29a45d2e42c0d3c20fe04"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4d9fbc08e87731447c19e96e13d8c7444baafcca"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
|
|
|
@ -19,8 +19,8 @@
|
|||
<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="0afa6429bf6a772289801600a84438cd7aa27b11"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4d9fbc08e87731447c19e96e13d8c7444baafcca"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="3e5271663e7ef26290c29a45d2e42c0d3c20fe04"/>
|
||||
<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"/>
|
||||
<project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="d70e4bfdcb65e7514de0f9315b74aea1c811678d"/>
|
||||
|
|
|
@ -17,8 +17,8 @@
|
|||
</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="0afa6429bf6a772289801600a84438cd7aa27b11"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4d9fbc08e87731447c19e96e13d8c7444baafcca"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="3e5271663e7ef26290c29a45d2e42c0d3c20fe04"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="735805df70bc64af1e5b709133afb76499a92ee1"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
|
|
|
@ -15,9 +15,9 @@
|
|||
<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="0afa6429bf6a772289801600a84438cd7aa27b11"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="3e5271663e7ef26290c29a45d2e42c0d3c20fe04"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4d9fbc08e87731447c19e96e13d8c7444baafcca"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
|
|
|
@ -15,9 +15,9 @@
|
|||
<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="0afa6429bf6a772289801600a84438cd7aa27b11"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="3e5271663e7ef26290c29a45d2e42c0d3c20fe04"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4d9fbc08e87731447c19e96e13d8c7444baafcca"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
|
|
|
@ -19,8 +19,8 @@
|
|||
<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="0afa6429bf6a772289801600a84438cd7aa27b11"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4d9fbc08e87731447c19e96e13d8c7444baafcca"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="3e5271663e7ef26290c29a45d2e42c0d3c20fe04"/>
|
||||
<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"/>
|
||||
<project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="d70e4bfdcb65e7514de0f9315b74aea1c811678d"/>
|
||||
|
|
|
@ -15,9 +15,9 @@
|
|||
<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="0afa6429bf6a772289801600a84438cd7aa27b11"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="3e5271663e7ef26290c29a45d2e42c0d3c20fe04"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4d9fbc08e87731447c19e96e13d8c7444baafcca"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
|
@ -125,7 +125,7 @@
|
|||
<!-- Flame specific things -->
|
||||
<project name="device/generic/armv7-a-neon" path="device/generic/armv7-a-neon" revision="1bb28abbc215f45220620af5cd60a8ac1be93722"/>
|
||||
<project name="device/qcom/common" path="device/qcom/common" revision="2501e5940ba69ece7654ff85611c76ae5bda299c"/>
|
||||
<project name="device-flame" path="device/t2m/flame" remote="b2g" revision="41d3e221039d1c4486fc13ff26793a7a39226423"/>
|
||||
<project name="device-flame" path="device/t2m/flame" remote="b2g" revision="c4779d6da0f85894b1f78f0351b43f2949e8decd"/>
|
||||
<project name="codeaurora_kernel_msm" path="kernel" remote="b2g" revision="47aac20dbffea5874cbbbdc6556558855c38dce4"/>
|
||||
<project name="kernel_lk" path="bootable/bootloader/lk" remote="b2g" revision="fda40423ffa573dc6cafd3780515010cb2a086be"/>
|
||||
<project name="platform_bootable_recovery" path="bootable/recovery" remote="b2g" revision="d5e53ed6f22fa06052351dc03510af9473af01ea"/>
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
{
|
||||
"git": {
|
||||
"git_revision": "0afa6429bf6a772289801600a84438cd7aa27b11",
|
||||
"git_revision": "3e5271663e7ef26290c29a45d2e42c0d3c20fe04",
|
||||
"remote": "https://git.mozilla.org/releases/gaia.git",
|
||||
"branch": ""
|
||||
},
|
||||
"revision": "6bf26f38e5c3092166347c2988f0f95be74333b3",
|
||||
"revision": "7051317f9ab92e5226b585127aa6b69f030bf759",
|
||||
"repo_path": "integration/gaia-central"
|
||||
}
|
||||
|
|
|
@ -17,8 +17,8 @@
|
|||
</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="0afa6429bf6a772289801600a84438cd7aa27b11"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4d9fbc08e87731447c19e96e13d8c7444baafcca"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="3e5271663e7ef26290c29a45d2e42c0d3c20fe04"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="735805df70bc64af1e5b709133afb76499a92ee1"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
|
|
|
@ -15,9 +15,9 @@
|
|||
<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="0afa6429bf6a772289801600a84438cd7aa27b11"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="3e5271663e7ef26290c29a45d2e42c0d3c20fe04"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4d9fbc08e87731447c19e96e13d8c7444baafcca"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
|
|
|
@ -7,6 +7,12 @@ Components.utils.import("resource://gre/modules/Services.jsm");
|
|||
|
||||
const PREF_EM_HOTFIX_ID = "extensions.hotfix.id";
|
||||
|
||||
let gMenuButton = null;
|
||||
try {
|
||||
gMenuButton = Services.wm.getMostRecentWindow("navigator:browser")
|
||||
.document.getElementById("PanelUI-menu-button");
|
||||
} catch (ex) { };
|
||||
|
||||
function init(aEvent)
|
||||
{
|
||||
if (aEvent.target != document)
|
||||
|
@ -49,6 +55,17 @@ function init(aEvent)
|
|||
document.getElementById("communityDesc").hidden = true;
|
||||
}
|
||||
|
||||
if (/^42/.test(version)) {
|
||||
document.getElementById("version").addEventListener("click", event => {
|
||||
if (gMenuButton) {
|
||||
gMenuButton.classList.add("thumburger");
|
||||
if (event.shiftKey) {
|
||||
gMenuButton = null;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
#ifdef MOZ_UPDATER
|
||||
gAppUpdater = new appUpdater();
|
||||
|
||||
|
@ -83,6 +100,9 @@ function onUnload(aEvent) {
|
|||
// Safe to call even when there isn't a download in progress.
|
||||
gAppUpdater.removeDownloadListener();
|
||||
gAppUpdater = null;
|
||||
if (gMenuButton) {
|
||||
gMenuButton.classList.remove("thumburger");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -66,6 +66,9 @@ header h1
|
|||
margin-bottom: 23px;
|
||||
color: rgb(138, 155, 168);
|
||||
font-size: 19px;
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.description {
|
||||
|
|
|
@ -767,10 +767,6 @@ window[chromehidden~="toolbar"] toolbar:not(#nav-bar):not(#TabsToolbar):not(#pri
|
|||
-moz-binding: url("chrome://browser/content/urlbarBindings.xml#identity-request-notification");
|
||||
}
|
||||
|
||||
#bad-content-notification {
|
||||
-moz-binding: url("chrome://browser/content/urlbarBindings.xml#bad-content-notification");
|
||||
}
|
||||
|
||||
#click-to-play-plugins-notification {
|
||||
-moz-binding: url("chrome://browser/content/urlbarBindings.xml#click-to-play-plugins-notification");
|
||||
}
|
||||
|
@ -1333,16 +1329,6 @@ toolbarpaletteitem[place="palette"][hidden] {
|
|||
display: none;
|
||||
}
|
||||
|
||||
/* Tracking protection doorhanger */
|
||||
.popup-notification-footer[popupid="bad-content"] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.popup-notification-footer[popupid="bad-content"][mixedblockdisabled],
|
||||
.popup-notification-footer[popupid="bad-content"][trackingblockdisabled] {
|
||||
display: block;
|
||||
}
|
||||
|
||||
#login-fill-doorhanger:not([inDetailView]) > #login-fill-clickcapturer {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
|
|
@ -6917,47 +6917,6 @@ var gIdentityHandler = {
|
|||
// we receive a new security state. If the user opened the popup and looks
|
||||
// at the provided information we don't want to suddenly change the panel
|
||||
// contents.
|
||||
|
||||
// Show the doorhanger when:
|
||||
// - mixed active content is blocked
|
||||
// - mixed active content is loaded (detected but not blocked)
|
||||
// - tracking content is blocked
|
||||
// - tracking content is not blocked
|
||||
if (state &
|
||||
(nsIWebProgressListener.STATE_BLOCKED_MIXED_ACTIVE_CONTENT |
|
||||
nsIWebProgressListener.STATE_LOADED_MIXED_ACTIVE_CONTENT |
|
||||
nsIWebProgressListener.STATE_BLOCKED_TRACKING_CONTENT |
|
||||
nsIWebProgressListener.STATE_LOADED_TRACKING_CONTENT)) {
|
||||
this.showBadContentDoorhanger(state);
|
||||
}
|
||||
},
|
||||
|
||||
showBadContentDoorhanger : function(state) {
|
||||
var currentNotification =
|
||||
PopupNotifications.getNotification("bad-content",
|
||||
gBrowser.selectedBrowser);
|
||||
|
||||
// Avoid showing the same notification (same state) repeatedly.
|
||||
if (currentNotification && currentNotification.options.state == state)
|
||||
return;
|
||||
|
||||
let options = {
|
||||
/* keep doorhanger collapsed */
|
||||
dismissed: true,
|
||||
state: state
|
||||
};
|
||||
|
||||
// default
|
||||
let iconState = "bad-content-blocked-notification-icon";
|
||||
|
||||
if (state &
|
||||
(Ci.nsIWebProgressListener.STATE_LOADED_MIXED_ACTIVE_CONTENT |
|
||||
Ci.nsIWebProgressListener.STATE_LOADED_TRACKING_CONTENT)) {
|
||||
iconState = "bad-content-unblocked-notification-icon";
|
||||
}
|
||||
|
||||
PopupNotifications.show(gBrowser.selectedBrowser, "bad-content",
|
||||
"", iconState, null, null, options);
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
|
@ -742,8 +742,6 @@
|
|||
<image id="webapps-notification-icon" class="notification-anchor-icon" role="button"/>
|
||||
<image id="plugins-notification-icon" class="notification-anchor-icon" role="button"/>
|
||||
<image id="web-notifications-notification-icon" class="notification-anchor-icon" role="button"/>
|
||||
<image id="bad-content-blocked-notification-icon" class="notification-anchor-icon" role="button"/>
|
||||
<image id="bad-content-unblocked-notification-icon" class="notification-anchor-icon" role="button"/>
|
||||
<image id="webRTC-shareDevices-notification-icon" class="notification-anchor-icon" role="button"/>
|
||||
<image id="webRTC-sharingDevices-notification-icon" class="notification-anchor-icon" role="button"/>
|
||||
<image id="webRTC-shareMicrophone-notification-icon" class="notification-anchor-icon" role="button"/>
|
||||
|
|
|
@ -259,12 +259,15 @@ skip-if = os == "mac" # Bug 1102331 - does focus things on the content window wh
|
|||
[browser_bug783614.js]
|
||||
[browser_bug817947.js]
|
||||
[browser_bug822367.js]
|
||||
tags = mcb
|
||||
[browser_bug832435.js]
|
||||
[browser_bug839103.js]
|
||||
[browser_bug880101.js]
|
||||
[browser_bug882977.js]
|
||||
[browser_bug902156.js]
|
||||
tags = mcb
|
||||
[browser_bug906190.js]
|
||||
tags = mcb
|
||||
skip-if = buildapp == "mulet" || e10s # Bug 1093642 - test manipulates content and relies on content focus
|
||||
[browser_mixedContentFromOnunload.js]
|
||||
[browser_bug970746.js]
|
||||
|
@ -330,6 +333,7 @@ skip-if = os != "win" # The Fitts Law menu button is only supported on Windows (
|
|||
[browser_minimize.js]
|
||||
skip-if = e10s # Bug 1100664 - test directly access content docShells (TypeError: gBrowser.docShell is null)
|
||||
[browser_mixedcontent_securityflags.js]
|
||||
tags = mcb
|
||||
[browser_notification_tab_switching.js]
|
||||
skip-if = buildapp == 'mulet' || e10s # Bug 1100662 - content access causing uncaught exception - Error: cannot ipc non-cpow object at chrome://mochitests/content/browser/browser/base/content/test/general/browser_notification_tab_switching.js:32 (or in RemoteAddonsChild.jsm)
|
||||
[browser_offlineQuotaNotification.js]
|
||||
|
@ -489,6 +493,7 @@ skip-if = e10s # Bug 1094240 - has findbar-related failures
|
|||
[browser_addCertException.js]
|
||||
skip-if = e10s # Bug 1100687 - test directly manipulates content (content.document.getElementById)
|
||||
[browser_bug1045809.js]
|
||||
tags = mcb
|
||||
[browser_e10s_switchbrowser.js]
|
||||
[browser_e10s_about_process.js]
|
||||
[browser_e10s_chrome_process.js]
|
||||
|
@ -497,6 +502,7 @@ skip-if = e10s # Bug 1100687 - test directly manipulates content (content.docume
|
|||
tags = psm
|
||||
skip-if = e10s # bug 1100687 - test directly manipulates content (content.document.getElementById)
|
||||
[browser_mcb_redirect.js]
|
||||
tags = mcb
|
||||
[browser_windowactivation.js]
|
||||
[browser_contextmenu_childprocess.js]
|
||||
[browser_bug963945.js]
|
||||
|
|
|
@ -38,7 +38,9 @@ add_task(function*() {
|
|||
let result = yield promise_first_result("keyword something");
|
||||
isnot(result, null, "Expect a keyword result");
|
||||
|
||||
is(result.getAttribute("type"), "action keyword", "Expect correct `type` attribute");
|
||||
let types = new Set(result.getAttribute("type").split(/\s+/));
|
||||
Assert.ok(types.has("action"));
|
||||
Assert.ok(types.has("keyword"));
|
||||
is(result.getAttribute("actiontype"), "keyword", "Expect correct `actiontype` attribute");
|
||||
is(result.getAttribute("title"), "example.com", "Expect correct title");
|
||||
|
||||
|
|
|
@ -1,14 +1,20 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
add_task(function*() {
|
||||
// This test is only relevant if UnifiedComplete is enabled.
|
||||
let ucpref = Services.prefs.getBoolPref("browser.urlbar.unifiedcomplete");
|
||||
Services.prefs.setBoolPref("browser.urlbar.unifiedcomplete", true);
|
||||
registerCleanupFunction(() => {
|
||||
Services.prefs.setBoolPref("browser.urlbar.unifiedcomplete", ucpref);
|
||||
});
|
||||
const UNIFIEDCOMPLETE_PREF = "browser.urlbar.unifiedcomplete";
|
||||
const SUGGEST_ALL_PREF = "browser.search.suggest.enabled";
|
||||
const SUGGEST_URLBAR_PREF = "browser.urlbar.suggest.searches";
|
||||
const TEST_ENGINE_BASENAME = "searchSuggestionEngine.xml";
|
||||
|
||||
add_task(function* prepare() {
|
||||
// This test is only relevant if UnifiedComplete is enabled.
|
||||
Services.prefs.setBoolPref(UNIFIEDCOMPLETE_PREF, true);
|
||||
registerCleanupFunction(() => {
|
||||
Services.prefs.clearUserPref(UNIFIEDCOMPLETE_PREF);
|
||||
});
|
||||
});
|
||||
|
||||
add_task(function* switchToTab() {
|
||||
let tab = gBrowser.addTab("about:about");
|
||||
yield promiseTabLoaded(tab);
|
||||
|
||||
|
@ -18,9 +24,45 @@ add_task(function*() {
|
|||
ok(gURLBar.popup.richlistbox.children.length > 1, "Should get at least 2 results");
|
||||
let result = gURLBar.popup.richlistbox.children[1];
|
||||
is(result.getAttribute("type"), "action switchtab", "Expect right type attribute");
|
||||
is(result.label, "about:about " + actionURL + " Tab", "Result a11y label should be as expected");
|
||||
is(result.label, "about:about about:about Tab", "Result a11y label should be: <title> <url> Tab");
|
||||
|
||||
gURLBar.popup.hidePopup();
|
||||
yield promisePopupHidden(gURLBar.popup);
|
||||
gBrowser.removeTab(tab);
|
||||
});
|
||||
|
||||
add_task(function* searchSuggestions() {
|
||||
let engine = yield promiseNewSearchEngine(TEST_ENGINE_BASENAME);
|
||||
let oldCurrentEngine = Services.search.currentEngine;
|
||||
Services.search.currentEngine = engine;
|
||||
Services.prefs.setBoolPref(SUGGEST_ALL_PREF, true);
|
||||
Services.prefs.setBoolPref(SUGGEST_URLBAR_PREF, true);
|
||||
registerCleanupFunction(function () {
|
||||
Services.search.currentEngine = oldCurrentEngine;
|
||||
Services.prefs.clearUserPref(SUGGEST_ALL_PREF);
|
||||
Services.prefs.clearUserPref(SUGGEST_URLBAR_PREF);
|
||||
});
|
||||
|
||||
yield promiseAutocompleteResultPopup("foo");
|
||||
// Don't assume that the search doesn't match history or bookmarks left around
|
||||
// by earlier tests.
|
||||
Assert.ok(gURLBar.popup.richlistbox.children.length >= 3,
|
||||
"Should get at least heuristic result + two search suggestions");
|
||||
// The first expected search is the search term itself since the heuristic
|
||||
// result will come before the search suggestions.
|
||||
let expectedSearches = [
|
||||
"foo",
|
||||
"foofoo",
|
||||
"foobar",
|
||||
];
|
||||
for (let child of gURLBar.popup.richlistbox.children) {
|
||||
if (child.getAttribute("type").split(/\s+/).indexOf("searchengine") >= 0) {
|
||||
Assert.ok(expectedSearches.length > 0);
|
||||
let suggestion = expectedSearches.shift();
|
||||
Assert.equal(child.label, suggestion + " browser_searchSuggestionEngine searchSuggestionEngine.xml Search",
|
||||
"Result label should be: <search term> <engine name> Search");
|
||||
}
|
||||
}
|
||||
Assert.ok(expectedSearches.length == 0);
|
||||
gURLBar.closePopup();
|
||||
});
|
||||
|
|
|
@ -35,42 +35,27 @@ add_task(function* () {
|
|||
});
|
||||
|
||||
function* test1(gTestBrowser) {
|
||||
var notification =
|
||||
PopupNotifications.getNotification("bad-content", gTestBrowser);
|
||||
isnot(notification, null, "Mixed Content Doorhanger did appear in Test1");
|
||||
yield promiseNotificationShown(notification);
|
||||
isnot(PopupNotifications.panel.firstChild.isMixedContentBlocked, 0,
|
||||
"Mixed Content is being blocked in Test1");
|
||||
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
|
||||
|
||||
var x = content.document.getElementsByTagName('iframe')[0].contentDocument.getElementById('mixedContentContainer');
|
||||
is(x, null, "Mixed Content is NOT to be found in Test1");
|
||||
|
||||
// Disable Mixed Content Protection for the page (and reload)
|
||||
PopupNotifications.panel.firstChild.disableMixedContentProtection();
|
||||
gIdentityHandler.disableMixedContentProtection();
|
||||
}
|
||||
|
||||
function* test2(gTestBrowser) {
|
||||
var notification =
|
||||
PopupNotifications.getNotification("bad-content", gTestBrowser);
|
||||
isnot(notification, null, "Mixed Content Doorhanger did appear in Test2");
|
||||
yield promiseNotificationShown(notification);
|
||||
is(PopupNotifications.panel.firstChild.isMixedContentBlocked, 0,
|
||||
"Mixed Content is NOT being blocked in Test2");
|
||||
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: true, activeBlocked: false, passiveLoaded: false});
|
||||
|
||||
var x = content.document.getElementsByTagName('iframe')[0].contentDocument.getElementById('mixedContentContainer');
|
||||
isnot(x, null, "Mixed Content is to be found in Test2");
|
||||
|
||||
// Re-enable Mixed Content Protection for the page (and reload)
|
||||
PopupNotifications.panel.firstChild.enableMixedContentProtection();
|
||||
gIdentityHandler.enableMixedContentProtection();
|
||||
}
|
||||
|
||||
function* test3(gTestBrowser) {
|
||||
var notification =
|
||||
PopupNotifications.getNotification("bad-content", gTestBrowser);
|
||||
isnot(notification, null, "Mixed Content Doorhanger did appear in Test3");
|
||||
yield promiseNotificationShown(notification);
|
||||
isnot(PopupNotifications.panel.firstChild.isMixedContentBlocked, 0,
|
||||
"Mixed Content is being blocked in Test3");
|
||||
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
|
||||
|
||||
var x = content.document.getElementsByTagName('iframe')[0].contentDocument.getElementById('mixedContentContainer');
|
||||
is(x, null, "Mixed Content is NOT to be found in Test3");
|
||||
|
|
|
@ -50,11 +50,11 @@ function test() {
|
|||
function MixedTest1A() {
|
||||
gTestBrowser.removeEventListener("load", MixedTest1A, true);
|
||||
gTestBrowser.addEventListener("load", MixedTest1B, true);
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestBrowser);
|
||||
ok(notification, "Mixed Content Doorhanger did appear");
|
||||
notification.reshow();
|
||||
ok(PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is being blocked");
|
||||
PopupNotifications.panel.firstChild.disableMixedContentProtection();
|
||||
|
||||
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
|
||||
|
||||
let {gIdentityHandler} = gTestBrowser.ownerGlobal;
|
||||
gIdentityHandler.disableMixedContentProtection();
|
||||
}
|
||||
function MixedTest1B() {
|
||||
waitForCondition(function() content.document.getElementById('p1').innerHTML == "hello", MixedTest1C, "Waited too long for mixed script to run in Test 1");
|
||||
|
@ -73,8 +73,7 @@ function MixedTest2() {
|
|||
}
|
||||
|
||||
function MixedTest2A() {
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestBrowser);
|
||||
ok(!notification, "Mixed Content Doorhanger did not appear for mixed display content!");
|
||||
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: false, passiveLoaded: false});
|
||||
MixedTest3();
|
||||
}
|
||||
|
||||
|
@ -88,11 +87,11 @@ function MixedTest3() {
|
|||
function MixedTest3A() {
|
||||
gTestBrowser.removeEventListener("load", MixedTest3A, true);
|
||||
gTestBrowser.addEventListener("load", MixedTest3B, true);
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestBrowser);
|
||||
ok(notification, "Mixed Content Doorhanger did appear for test 3");
|
||||
notification.reshow();
|
||||
ok(PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is being blocked in test 3");
|
||||
PopupNotifications.panel.firstChild.disableMixedContentProtection();
|
||||
|
||||
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
|
||||
|
||||
let {gIdentityHandler} = gTestBrowser.ownerGlobal;
|
||||
gIdentityHandler.disableMixedContentProtection();
|
||||
}
|
||||
function MixedTest3B() {
|
||||
waitForCondition(function() content.document.getElementById('p1').innerHTML == "hello", MixedTest3C, "Waited too long for mixed script to run in Test 3");
|
||||
|
@ -103,6 +102,7 @@ function MixedTest3C() {
|
|||
function MixedTest3D() {
|
||||
ok(content.document.getElementById('p1').innerHTML == "hello","Mixed script didn't load in Test 3");
|
||||
ok(content.document.getElementById('p2').innerHTML == "bye","Mixed image didn't load in Test 3");
|
||||
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: true, activeBlocked: false, passiveLoaded: true});
|
||||
MixedTest4();
|
||||
}
|
||||
|
||||
|
@ -116,22 +116,21 @@ function MixedTest4() {
|
|||
function MixedTest4A() {
|
||||
gTestBrowser.removeEventListener("load", MixedTest4A, true);
|
||||
gTestBrowser.addEventListener("load", MixedTest4B, true);
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestBrowser);
|
||||
ok(notification, "Mixed Content Doorhanger did appear for Test 4");
|
||||
notification.reshow();
|
||||
ok(PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is being blocked in Test 4");
|
||||
PopupNotifications.panel.firstChild.disableMixedContentProtection();
|
||||
|
||||
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
|
||||
|
||||
let {gIdentityHandler} = gTestBrowser.ownerGlobal;
|
||||
gIdentityHandler.disableMixedContentProtection();
|
||||
}
|
||||
function MixedTest4B() {
|
||||
waitForCondition(function() content.document.location == gHttpTestRoot + "file_bug822367_4B.html", MixedTest4C, "Waited too long for mixed script to run in Test 4");
|
||||
}
|
||||
function MixedTest4C() {
|
||||
ok(content.document.location == gHttpTestRoot + "file_bug822367_4B.html", "Location didn't change in test 4");
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestBrowser);
|
||||
ok(notification, "Mixed Content Doorhanger did appear after location change in Test 4");
|
||||
notification.reshow();
|
||||
ok(PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is being blocked in test 4");
|
||||
notification.remove();
|
||||
|
||||
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
|
||||
|
||||
let {gIdentityHandler} = gTestBrowser.ownerGlobal;
|
||||
waitForCondition(function() content.document.getElementById('p1').innerHTML == "", MixedTest4D, "Mixed script loaded in test 4 after location change!");
|
||||
}
|
||||
function MixedTest4D() {
|
||||
|
@ -149,11 +148,11 @@ function MixedTest5() {
|
|||
function MixedTest5A() {
|
||||
gTestBrowser.removeEventListener("load", MixedTest5A, true);
|
||||
gTestBrowser.addEventListener("load", MixedTest5B, true);
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestBrowser);
|
||||
ok(notification, "Mixed Content Doorhanger did appear for Test 5");
|
||||
notification.reshow();
|
||||
ok(PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is being blocked in Test 5");
|
||||
PopupNotifications.panel.firstChild.disableMixedContentProtection();
|
||||
|
||||
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
|
||||
|
||||
let {gIdentityHandler} = gTestBrowser.ownerGlobal;
|
||||
gIdentityHandler.disableMixedContentProtection();
|
||||
}
|
||||
function MixedTest5B() {
|
||||
waitForCondition(function() content.document.getElementById('p1').innerHTML == "hello", MixedTest5C, "Waited too long for mixed script to run in Test 5");
|
||||
|
@ -172,16 +171,17 @@ function MixedTest6() {
|
|||
}
|
||||
function MixedTest6A() {
|
||||
gTestBrowser.removeEventListener("load", MixedTest6A, true);
|
||||
waitForCondition(function() PopupNotifications.getNotification("bad-content", gTestBrowser), MixedTest6B, "waited too long for doorhanger");
|
||||
let {gIdentityHandler} = gTestBrowser.ownerGlobal;
|
||||
waitForCondition(() => gIdentityHandler._identityBox.classList.contains("mixedActiveBlocked"), MixedTest6B, "Waited too long for control center to get mixed active blocked state");
|
||||
}
|
||||
|
||||
function MixedTest6B() {
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestBrowser);
|
||||
ok(notification, "Mixed Content Doorhanger did appear for Test 6");
|
||||
gTestBrowser.addEventListener("load", MixedTest6C, true);
|
||||
notification.reshow();
|
||||
ok(PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is being blocked in Test 6");
|
||||
PopupNotifications.panel.firstChild.disableMixedContentProtection();
|
||||
|
||||
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
|
||||
|
||||
let {gIdentityHandler} = gTestBrowser.ownerGlobal;
|
||||
gIdentityHandler.disableMixedContentProtection();
|
||||
}
|
||||
|
||||
function MixedTest6C() {
|
||||
|
@ -196,5 +196,6 @@ function MixedTest6C() {
|
|||
}
|
||||
function MixedTest6D() {
|
||||
ok(content.document.getElementById('f1').contentDocument.getElementById('p1').innerHTML == "hello","Mixed script didn't load in Test 6");
|
||||
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: true, activeBlocked: false, passiveLoaded: false});
|
||||
MixedTestsCompleted();
|
||||
}
|
||||
|
|
|
@ -4,19 +4,19 @@
|
|||
*
|
||||
* 1. Navigate to the same domain via document.location
|
||||
* - Load a html page which has mixed content
|
||||
* - Doorhanger to disable protection appears - we disable it
|
||||
* - Control Center button to disable protection appears - we disable it
|
||||
* - Load a new page from the same origin using document.location
|
||||
* - Doorhanger should not appear anymore!
|
||||
* - Control Center button should not appear anymore!
|
||||
*
|
||||
* 2. Navigate to the same domain via simulateclick for a link on the page
|
||||
* - Load a html page which has mixed content
|
||||
* - Doorhanger to disable protection appears - we disable it
|
||||
* - Control Center button to disable protection appears - we disable it
|
||||
* - Load a new page from the same origin simulating a click
|
||||
* - Doorhanger should not appear anymore!
|
||||
* - Control Center button should not appear anymore!
|
||||
*
|
||||
* 3. Navigate to a differnet domain and show the content is still blocked
|
||||
* - Load a different html page which has mixed content
|
||||
* - Doorhanger to disable protection should appear again because
|
||||
* - Control Center button to disable protection should appear again because
|
||||
* we navigated away from html page where we disabled the protection.
|
||||
*
|
||||
* Note, for all tests we set gHttpTestRoot to use 'https'.
|
||||
|
@ -50,14 +50,11 @@ function test1A() {
|
|||
gTestBrowser.removeEventListener("load", test1A, true);
|
||||
gTestBrowser.addEventListener("load", test1B, true);
|
||||
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestBrowser);
|
||||
ok(notification, "OK: Mixed Content Doorhanger did appear in Test1A!");
|
||||
notification.reshow();
|
||||
ok(PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is being blocked in Test1A!");
|
||||
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
|
||||
|
||||
// Disable Mixed Content Protection for the page (and reload)
|
||||
PopupNotifications.panel.firstChild.disableMixedContentProtection();
|
||||
notification.remove();
|
||||
let {gIdentityHandler} = gTestBrowser.ownerGlobal;
|
||||
gIdentityHandler.disableMixedContentProtection();
|
||||
}
|
||||
|
||||
function test1B() {
|
||||
|
@ -83,13 +80,9 @@ function test1C() {
|
|||
function test1D() {
|
||||
gTestBrowser.removeEventListener("load", test1D, true);
|
||||
|
||||
// The Doorhanger should appear but isMixedContentBlocked should be NOT true,
|
||||
// The Control Center button should appear but isMixedContentBlocked should be NOT true,
|
||||
// because our decision of disabling the mixed content blocker is persistent.
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestBrowser);
|
||||
ok(notification, "OK: Mixed Content Doorhanger did appear in Test1D!");
|
||||
notification.reshow();
|
||||
ok(!PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is NOT being blocked in Test1D!");
|
||||
notification.remove();
|
||||
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: true, activeBlocked: false, passiveLoaded: false});
|
||||
|
||||
var actual = content.document.getElementById('mctestdiv').innerHTML;
|
||||
is(actual, "Mixed Content Blocker disabled", "OK: Executed mixed script in Test 1D");
|
||||
|
@ -112,14 +105,11 @@ function test2A() {
|
|||
gTestBrowser.removeEventListener("load", test2A, true);
|
||||
gTestBrowser.addEventListener("load", test2B, true);
|
||||
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestBrowser);
|
||||
ok(notification, "OK: Mixed Content Doorhanger did appear in Test 2A!");
|
||||
notification.reshow();
|
||||
ok(PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is being blocked in Test 2A!");
|
||||
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
|
||||
|
||||
// Disable Mixed Content Protection for the page (and reload)
|
||||
PopupNotifications.panel.firstChild.disableMixedContentProtection();
|
||||
notification.remove();
|
||||
let {gIdentityHandler} = gTestBrowser.ownerGlobal;
|
||||
gIdentityHandler.disableMixedContentProtection();
|
||||
}
|
||||
|
||||
function test2B() {
|
||||
|
@ -146,13 +136,9 @@ function test2C() {
|
|||
function test2D() {
|
||||
gTestBrowser.removeEventListener("load", test2D, true);
|
||||
|
||||
// The Doorhanger should appear but isMixedContentBlocked should be NOT true,
|
||||
// The Control Center button should appear but isMixedContentBlocked should be NOT true,
|
||||
// because our decision of disabling the mixed content blocker is persistent.
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestBrowser);
|
||||
ok(notification, "OK: Mixed Content Doorhanger did appear in Test2D!");
|
||||
notification.reshow();
|
||||
ok(!PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is NOT being blocked");
|
||||
notification.remove();
|
||||
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: true, activeBlocked: false, passiveLoaded: false});
|
||||
|
||||
var actual = content.document.getElementById('mctestdiv').innerHTML;
|
||||
is(actual, "Mixed Content Blocker disabled", "OK: Executed mixed script in Test 2D");
|
||||
|
@ -174,11 +160,7 @@ function test3A() {
|
|||
// one once the page is loaded with mixed content blocker disabled
|
||||
gTestBrowser.removeEventListener("load", test3A, true);
|
||||
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestBrowser);
|
||||
ok(notification, "OK: Mixed Content Doorhanger did appear in Test 3A!");
|
||||
notification.reshow();
|
||||
ok(PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is being blocked in Test 3A");
|
||||
notification.remove();
|
||||
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
|
||||
|
||||
// We are done with tests, clean up
|
||||
cleanUpAfterTests();
|
||||
|
|
|
@ -143,15 +143,11 @@ function waitForSomeTabToLoad(callback) {
|
|||
function checkPopUpNotification() {
|
||||
waitForSomeTabToLoad(reloadedTabAfterDisablingMCB);
|
||||
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestWin.gBrowser.selectedBrowser);
|
||||
ok(notification, "OK: Mixed Content Doorhanger did appear in " + curTestName + "!");
|
||||
promiseNotificationShown(notification).then(function() {
|
||||
ok(gTestWin.PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is being blocked in " + curTestName + "!");
|
||||
assertMixedContentBlockingState(gTestWin.gBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
|
||||
|
||||
// Disable Mixed Content Protection for the page (and reload page)
|
||||
gTestWin.PopupNotifications.panel.firstChild.disableMixedContentProtection();
|
||||
notification.remove();
|
||||
});
|
||||
// Disable Mixed Content Protection for the page (which reloads the page)
|
||||
let {gIdentityHandler} = gTestWin.gBrowser.ownerGlobal;
|
||||
gIdentityHandler.disableMixedContentProtection();
|
||||
}
|
||||
|
||||
function reloadedTabAfterDisablingMCB() {
|
||||
|
@ -192,18 +188,13 @@ function test1A() {
|
|||
|
||||
// The Doorhanger should appear but isMixedContentBlocked should be >> NOT << true,
|
||||
// because our decision of disabling the mixed content blocker is persistent across tabs.
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestWin.gBrowser.selectedBrowser);
|
||||
ok(notification, "OK: Mixed Content Doorhanger did appear in Test 1A!");
|
||||
promiseNotificationShown(notification).then(function() {
|
||||
ok(!gTestWin.PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is NOT being blocked in Test 1A!");
|
||||
notification.remove();
|
||||
assertMixedContentBlockingState(gTestWin.gBrowser, {activeLoaded: true, activeBlocked: false, passiveLoaded: false});
|
||||
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
is(actual, "Mixed Content Blocker disabled", "OK: Executed mixed script in Test 1A");
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
is(actual, "Mixed Content Blocker disabled", "OK: Executed mixed script in Test 1A");
|
||||
|
||||
gTestWin.gBrowser.removeCurrentTab();
|
||||
test1B();
|
||||
});
|
||||
gTestWin.gBrowser.removeCurrentTab();
|
||||
test1B();
|
||||
}
|
||||
|
||||
function test1B() {
|
||||
|
@ -221,23 +212,18 @@ function test1C() {
|
|||
|
||||
// The Doorhanger should appear but isMixedContentBlocked should be >> NOT << true,
|
||||
// because our decision of disabling the mixed content blocker is persistent across tabs.
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestWin.gBrowser.selectedBrowser);
|
||||
ok(notification, "OK: Mixed Content Doorhanger did appear in Test 1C!");
|
||||
promiseNotificationShown(notification).then(function() {
|
||||
ok(!gTestWin.PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is NOT being blocked in Test 1C!");
|
||||
notification.remove();
|
||||
assertMixedContentBlockingState(gTestWin.gBrowser, {activeLoaded: true, activeBlocked: false, passiveLoaded: false});
|
||||
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
is(actual, "Mixed Content Blocker disabled", "OK: Executed mixed script in Test 1C");
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
is(actual, "Mixed Content Blocker disabled", "OK: Executed mixed script in Test 1C");
|
||||
|
||||
// remove tabs
|
||||
gTestWin.gBrowser.removeTab(gTestWin.gBrowser.tabs[2], {animate: false});
|
||||
gTestWin.gBrowser.removeTab(gTestWin.gBrowser.tabs[1], {animate: false});
|
||||
gTestWin.gBrowser.selectTabAtIndex(0);
|
||||
// remove tabs
|
||||
gTestWin.gBrowser.removeTab(gTestWin.gBrowser.tabs[2], {animate: false});
|
||||
gTestWin.gBrowser.removeTab(gTestWin.gBrowser.tabs[1], {animate: false});
|
||||
gTestWin.gBrowser.selectTabAtIndex(0);
|
||||
|
||||
var childTabLink = gHttpTestRoot2 + "file_bug906190_2.html";
|
||||
setUpTest("Test2", "linkForTest2", test2, childTabLink);
|
||||
});
|
||||
var childTabLink = gHttpTestRoot2 + "file_bug906190_2.html";
|
||||
setUpTest("Test2", "linkForTest2", test2, childTabLink);
|
||||
}
|
||||
|
||||
//------------------------ Test 2 ------------------------------
|
||||
|
@ -256,18 +242,13 @@ function test2A() {
|
|||
|
||||
// The Doorhanger should appear and isMixedContentBlocked should be >> TRUE <<,
|
||||
// because our decision of disabling the mixed content blocker should only persist if pages are from the same domain.
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestWin.gBrowser.selectedBrowser);
|
||||
ok(notification, "OK: Mixed Content Doorhanger did appear in Test 2A!");
|
||||
promiseNotificationShown(notification).then(function() {
|
||||
ok(gTestWin.PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is being blocked in Test 2A!");
|
||||
notification.remove();
|
||||
assertMixedContentBlockingState(gTestWin.gBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
|
||||
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
is(actual, "Mixed Content Blocker enabled", "OK: Blocked mixed script in Test 2A");
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
is(actual, "Mixed Content Blocker enabled", "OK: Blocked mixed script in Test 2A");
|
||||
|
||||
gTestWin.gBrowser.removeCurrentTab();
|
||||
test2B();
|
||||
});
|
||||
gTestWin.gBrowser.removeCurrentTab();
|
||||
test2B();
|
||||
}
|
||||
|
||||
function test2B() {
|
||||
|
@ -285,24 +266,19 @@ function test2C() {
|
|||
|
||||
// The Doorhanger should appear and isMixedContentBlocked should be >> TRUE <<,
|
||||
// because our decision of disabling the mixed content blocker should only persist if pages are from the same domain.
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestWin.gBrowser.selectedBrowser);
|
||||
ok(notification, "OK: Mixed Content Doorhanger did appear in Test 2C!");
|
||||
promiseNotificationShown(notification).then(function() {
|
||||
ok(gTestWin.PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is being blocked in Test 2C!");
|
||||
notification.remove();
|
||||
assertMixedContentBlockingState(gTestWin.gBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
|
||||
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
is(actual, "Mixed Content Blocker enabled", "OK: Blocked mixed script in Test 2C");
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
is(actual, "Mixed Content Blocker enabled", "OK: Blocked mixed script in Test 2C");
|
||||
|
||||
// remove tabs
|
||||
gTestWin.gBrowser.removeTab(gTestWin.gBrowser.tabs[2], {animate: false});
|
||||
gTestWin.gBrowser.removeTab(gTestWin.gBrowser.tabs[1], {animate: false});
|
||||
gTestWin.gBrowser.selectTabAtIndex(0);
|
||||
// remove tabs
|
||||
gTestWin.gBrowser.removeTab(gTestWin.gBrowser.tabs[2], {animate: false});
|
||||
gTestWin.gBrowser.removeTab(gTestWin.gBrowser.tabs[1], {animate: false});
|
||||
gTestWin.gBrowser.selectTabAtIndex(0);
|
||||
|
||||
// file_bug906190_3_4.html redirects to page test1.example.com/* using meta-refresh
|
||||
var childTabLink = gHttpTestRoot1 + "file_bug906190_3_4.html";
|
||||
setUpTest("Test3", "linkForTest3", test3, childTabLink);
|
||||
});
|
||||
// file_bug906190_3_4.html redirects to page test1.example.com/* using meta-refresh
|
||||
var childTabLink = gHttpTestRoot1 + "file_bug906190_3_4.html";
|
||||
setUpTest("Test3", "linkForTest3", test3, childTabLink);
|
||||
}
|
||||
|
||||
//------------------------ Test 3 ------------------------------
|
||||
|
@ -324,19 +300,14 @@ function test3B() {
|
|||
gTestWin.gBrowser.selectTabAtIndex(2);
|
||||
|
||||
// The Doorhanger should appear but isMixedContentBlocked should be >> NOT << true!
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestWin.gBrowser.selectedBrowser);
|
||||
ok(notification, "OK: Mixed Content Doorhanger did appear in Test 3B!");
|
||||
promiseNotificationShown(notification).then(function() {
|
||||
ok(!gTestWin.PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is NOT being blocked in Test 3B!");
|
||||
notification.remove();
|
||||
assertMixedContentBlockingState(gTestWin.gBrowser, {activeLoaded: true, activeBlocked: false, passiveLoaded: false});
|
||||
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
is(actual, "Mixed Content Blocker disabled", "OK: Executed mixed script in Test 3B");
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
is(actual, "Mixed Content Blocker disabled", "OK: Executed mixed script in Test 3B");
|
||||
|
||||
// remove tabs
|
||||
gTestWin.gBrowser.removeCurrentTab();
|
||||
test3C();
|
||||
});
|
||||
// remove tabs
|
||||
gTestWin.gBrowser.removeCurrentTab();
|
||||
test3C();
|
||||
}
|
||||
|
||||
function test3C() {
|
||||
|
@ -357,23 +328,18 @@ function test3E() {
|
|||
gTestWin.gBrowser.selectTabAtIndex(2);
|
||||
|
||||
// The Doorhanger should appear but isMixedContentBlocked should be >> NOT << true!
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestWin.gBrowser.selectedBrowser);
|
||||
ok(notification, "OK: Mixed Content Doorhanger did appear in Test 3E!");
|
||||
promiseNotificationShown(notification).then(function() {
|
||||
ok(!gTestWin.PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is NOT being blocked in Test 3E!");
|
||||
notification.remove();
|
||||
assertMixedContentBlockingState(gTestWin.gBrowser, {activeLoaded: true, activeBlocked: false, passiveLoaded: false});
|
||||
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
is(actual, "Mixed Content Blocker disabled", "OK: Executed mixed script in Test 3E");
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
is(actual, "Mixed Content Blocker disabled", "OK: Executed mixed script in Test 3E");
|
||||
|
||||
// remove tabs
|
||||
gTestWin.gBrowser.removeTab(gTestWin.gBrowser.tabs[2], {animate: false});
|
||||
gTestWin.gBrowser.removeTab(gTestWin.gBrowser.tabs[1], {animate: false});
|
||||
gTestWin.gBrowser.selectTabAtIndex(0);
|
||||
// remove tabs
|
||||
gTestWin.gBrowser.removeTab(gTestWin.gBrowser.tabs[2], {animate: false});
|
||||
gTestWin.gBrowser.removeTab(gTestWin.gBrowser.tabs[1], {animate: false});
|
||||
gTestWin.gBrowser.selectTabAtIndex(0);
|
||||
|
||||
var childTabLink = gHttpTestRoot1 + "file_bug906190_3_4.html";
|
||||
setUpTest("Test4", "linkForTest4", test4, childTabLink);
|
||||
});
|
||||
var childTabLink = gHttpTestRoot1 + "file_bug906190_3_4.html";
|
||||
setUpTest("Test4", "linkForTest4", test4, childTabLink);
|
||||
}
|
||||
|
||||
//------------------------ Test 4 ------------------------------
|
||||
|
@ -396,19 +362,14 @@ function test4B() {
|
|||
gTestWin.gBrowser.selectTabAtIndex(2);
|
||||
|
||||
// The Doorhanger should appear and isMixedContentBlocked should be >> TRUE <<
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestWin.gBrowser.selectedBrowser);
|
||||
ok(notification, "OK: Mixed Content Doorhanger did appear in Test 4B!");
|
||||
promiseNotificationShown(notification).then(function() {
|
||||
ok(gTestWin.PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is being blocked in Test 4B!");
|
||||
notification.remove();
|
||||
assertMixedContentBlockingState(gTestWin.gBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
|
||||
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
is(actual, "Mixed Content Blocker enabled", "OK: Blocked mixed script in Test 4B");
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
is(actual, "Mixed Content Blocker enabled", "OK: Blocked mixed script in Test 4B");
|
||||
|
||||
// remove tabs
|
||||
gTestWin.gBrowser.removeCurrentTab();
|
||||
test4C();
|
||||
});
|
||||
// remove tabs
|
||||
gTestWin.gBrowser.removeCurrentTab();
|
||||
test4C();
|
||||
}
|
||||
|
||||
function test4C() {
|
||||
|
@ -429,24 +390,19 @@ function test4E() {
|
|||
gTestWin.gBrowser.selectTabAtIndex(2);
|
||||
|
||||
// The Doorhanger should appear and isMixedContentBlocked should be >> TRUE <<
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestWin.gBrowser.selectedBrowser);
|
||||
ok(notification, "OK: Mixed Content Doorhanger did appear in Test 4E!");
|
||||
promiseNotificationShown(notification).then(function() {
|
||||
ok(gTestWin.PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is being blocked in Test 4E!");
|
||||
notification.remove();
|
||||
assertMixedContentBlockingState(gTestWin.gBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
|
||||
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
is(actual, "Mixed Content Blocker enabled", "OK: Blocked mixed script in Test 4E");
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
is(actual, "Mixed Content Blocker enabled", "OK: Blocked mixed script in Test 4E");
|
||||
|
||||
// remove tabs
|
||||
gTestWin.gBrowser.removeTab(gTestWin.gBrowser.tabs[2], {animate: false});
|
||||
gTestWin.gBrowser.removeTab(gTestWin.gBrowser.tabs[1], {animate: false});
|
||||
gTestWin.gBrowser.selectTabAtIndex(0);
|
||||
// remove tabs
|
||||
gTestWin.gBrowser.removeTab(gTestWin.gBrowser.tabs[2], {animate: false});
|
||||
gTestWin.gBrowser.removeTab(gTestWin.gBrowser.tabs[1], {animate: false});
|
||||
gTestWin.gBrowser.selectTabAtIndex(0);
|
||||
|
||||
// the sjs files returns a 302 redirect- note, same origins
|
||||
var childTabLink = gHttpTestRoot1 + "file_bug906190.sjs";
|
||||
setUpTest("Test5", "linkForTest5", test5, childTabLink);
|
||||
});
|
||||
// the sjs files returns a 302 redirect- note, same origins
|
||||
var childTabLink = gHttpTestRoot1 + "file_bug906190.sjs";
|
||||
setUpTest("Test5", "linkForTest5", test5, childTabLink);
|
||||
}
|
||||
|
||||
//------------------------ Test 5 ------------------------------
|
||||
|
@ -465,19 +421,15 @@ function test5A() {
|
|||
|
||||
// The Doorhanger should appear but isMixedContentBlocked should be >> NOT << true
|
||||
// Currently it is >> TRUE << - see follow up bug 914860
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestWin.gBrowser.selectedBrowser);
|
||||
ok(notification, "OK: Mixed Content Doorhanger did appear in Test 5A!");
|
||||
promiseNotificationShown(notification).then(function() {
|
||||
todo(!gTestWin.PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is NOT being blocked in Test 5A!");
|
||||
notification.remove();
|
||||
let {gIdentityHandler} = gTestWin.gBrowser.ownerGlobal;
|
||||
todo(!gIdentityHandler._identityBox.classList.contains("mixedActiveBlocked"), "OK: Mixed Content is NOT being blocked in Test 5A!");
|
||||
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
todo_is(actual, "Mixed Content Blocker disabled", "OK: Executed mixed script in Test 5A!");
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
todo_is(actual, "Mixed Content Blocker disabled", "OK: Executed mixed script in Test 5A!");
|
||||
|
||||
// remove tabs
|
||||
gTestWin.gBrowser.removeCurrentTab();
|
||||
test5B();
|
||||
});
|
||||
// remove tabs
|
||||
gTestWin.gBrowser.removeCurrentTab();
|
||||
test5B();
|
||||
}
|
||||
|
||||
function test5B() {
|
||||
|
@ -493,26 +445,23 @@ function test5C() {
|
|||
// move the tab again
|
||||
gTestWin.gBrowser.selectTabAtIndex(2);
|
||||
|
||||
let {gIdentityHandler} = gTestWin.gBrowser.ownerGlobal;
|
||||
|
||||
// The Doorhanger should appear but isMixedContentBlocked should be >> NOT << true
|
||||
// Currently it is >> TRUE << - see follow up bug 914860
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestWin.gBrowser.selectedBrowser);
|
||||
ok(notification, "OK: Mixed Content Doorhanger did appear in Test 5C!");
|
||||
promiseNotificationShown(notification).then(function() {
|
||||
todo(!gTestWin.PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is NOT being blocked in Test 5C!");
|
||||
notification.remove();
|
||||
todo(!gIdentityHandler._identityBox.classList.contains("mixedActiveBlocked"), "OK: Mixed Content is NOT being blocked in Test 5C!");
|
||||
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
todo_is(actual, "Mixed Content Blocker disabled", "OK: Executed mixed script in Test 5C!");
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
todo_is(actual, "Mixed Content Blocker disabled", "OK: Executed mixed script in Test 5C!");
|
||||
|
||||
// remove tabs
|
||||
gTestWin.gBrowser.removeTab(gTestWin.gBrowser.tabs[2], {animate: false});
|
||||
gTestWin.gBrowser.removeTab(gTestWin.gBrowser.tabs[1], {animate: false});
|
||||
gTestWin.gBrowser.selectTabAtIndex(0);
|
||||
// remove tabs
|
||||
gTestWin.gBrowser.removeTab(gTestWin.gBrowser.tabs[2], {animate: false});
|
||||
gTestWin.gBrowser.removeTab(gTestWin.gBrowser.tabs[1], {animate: false});
|
||||
gTestWin.gBrowser.selectTabAtIndex(0);
|
||||
|
||||
// the sjs files returns a 302 redirect - note, different origins
|
||||
var childTabLink = gHttpTestRoot2 + "file_bug906190.sjs";
|
||||
setUpTest("Test6", "linkForTest6", test6, childTabLink);
|
||||
});
|
||||
// the sjs files returns a 302 redirect - note, different origins
|
||||
var childTabLink = gHttpTestRoot2 + "file_bug906190.sjs";
|
||||
setUpTest("Test6", "linkForTest6", test6, childTabLink);
|
||||
}
|
||||
|
||||
//------------------------ Test 6 ------------------------------
|
||||
|
@ -530,19 +479,14 @@ function test6A() {
|
|||
gTestWin.gBrowser.selectTabAtIndex(2);
|
||||
|
||||
// The Doorhanger should appear and isMixedContentBlocked should be >> TRUE <<
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestWin.gBrowser.selectedBrowser);
|
||||
ok(notification, "OK: Mixed Content Doorhanger did appear in Test 6A!");
|
||||
promiseNotificationShown(notification).then(function() {
|
||||
ok(gTestWin.PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is being blocked in Test 6A!");
|
||||
notification.remove();
|
||||
assertMixedContentBlockingState(gTestWin.gBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
|
||||
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
is(actual, "Mixed Content Blocker enabled", "OK: Blocked mixed script in Test 6A");
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
is(actual, "Mixed Content Blocker enabled", "OK: Blocked mixed script in Test 6A");
|
||||
|
||||
// done
|
||||
gTestWin.gBrowser.removeCurrentTab();
|
||||
test6B();
|
||||
});
|
||||
// done
|
||||
gTestWin.gBrowser.removeCurrentTab();
|
||||
test6B();
|
||||
}
|
||||
|
||||
function test6B() {
|
||||
|
@ -558,18 +502,13 @@ function test6C() {
|
|||
gTestWin.gBrowser.selectTabAtIndex(2);
|
||||
|
||||
// The Doorhanger should appear and isMixedContentBlocked should be >> TRUE <<
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestWin.gBrowser.selectedBrowser);
|
||||
ok(notification, "OK: Mixed Content Doorhanger did appear in Test 6C!");
|
||||
promiseNotificationShown(notification).then(function() {
|
||||
ok(gTestWin.PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is being blocked in Test 6C!");
|
||||
notification.remove();
|
||||
assertMixedContentBlockingState(gTestWin.gBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
|
||||
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
is(actual, "Mixed Content Blocker enabled", "OK: Blocked mixed script in Test 6C");
|
||||
var actual = gTestWin.content.document.getElementById('mctestdiv').innerHTML;
|
||||
is(actual, "Mixed Content Blocker enabled", "OK: Blocked mixed script in Test 6C");
|
||||
|
||||
gTestWin.close();
|
||||
finish();
|
||||
});
|
||||
gTestWin.close();
|
||||
finish();
|
||||
}
|
||||
|
||||
//------------------------ SETUP ------------------------------
|
||||
|
|
|
@ -100,16 +100,15 @@ function waitForCondition(condition, nextTest, errorMsg, okMsg) {
|
|||
//------------------------ Test 1 ------------------------------
|
||||
|
||||
function test1() {
|
||||
gTestBrowser.addEventListener("load", checkPopUpNotificationsForTest1, true);
|
||||
gTestBrowser.addEventListener("load", checkUIForTest1, true);
|
||||
var url = gHttpsTestRoot + "test_mcb_redirect.html"
|
||||
gTestBrowser.contentWindow.location = url;
|
||||
}
|
||||
|
||||
function checkPopUpNotificationsForTest1() {
|
||||
gTestBrowser.removeEventListener("load", checkPopUpNotificationsForTest1, true);
|
||||
function checkUIForTest1() {
|
||||
gTestBrowser.removeEventListener("load", checkUIForTest1, true);
|
||||
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestBrowser.selectedBrowser);
|
||||
ok(notification, "OK: Mixed Content Doorhanger appeared in Test1!");
|
||||
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
|
||||
|
||||
var expected = "script blocked";
|
||||
waitForCondition(
|
||||
|
@ -121,16 +120,15 @@ function checkPopUpNotificationsForTest1() {
|
|||
//------------------------ Test 2 ------------------------------
|
||||
|
||||
function test2() {
|
||||
gTestBrowser.addEventListener("load", checkPopUpNotificationsForTest2, true);
|
||||
gTestBrowser.addEventListener("load", checkUIForTest2, true);
|
||||
var url = gHttpTestRoot + "test_mcb_redirect.html"
|
||||
gTestBrowser.contentWindow.location = url;
|
||||
}
|
||||
|
||||
function checkPopUpNotificationsForTest2() {
|
||||
gTestBrowser.removeEventListener("load", checkPopUpNotificationsForTest2, true);
|
||||
function checkUIForTest2() {
|
||||
gTestBrowser.removeEventListener("load", checkUIForTest2, true);
|
||||
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestBrowser.selectedBrowser);
|
||||
ok(!notification, "OK: Mixed Content Doorhanger did not appear in 2!");
|
||||
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: false, passiveLoaded: false});
|
||||
|
||||
var expected = "script executed";
|
||||
waitForCondition(
|
||||
|
|
|
@ -39,16 +39,13 @@ function overrideMCB()
|
|||
{
|
||||
// test mixed content flags on load (reload)
|
||||
gTestBrowser.addEventListener("load", mixedContentOverrideTest, true);
|
||||
var notification = PopupNotifications.getNotification("bad-content", gTestBrowser);
|
||||
ok(notification, "Mixed Content Doorhanger should appear");
|
||||
notification.reshow();
|
||||
ok(PopupNotifications.panel.firstChild.isMixedContentBlocked, "OK: Mixed Content is being blocked");
|
||||
|
||||
// Make sure the notification has no mixedblockdisabled attribute
|
||||
ok(!PopupNotifications.panel.firstChild.hasAttribute("mixedblockdisabled"),
|
||||
"Doorhanger must have no mixedblockdisabled attribute");
|
||||
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: false, activeBlocked: true, passiveLoaded: false});
|
||||
|
||||
// Click on the doorhanger to allow mixed content (and reload page)
|
||||
PopupNotifications.panel.firstChild.disableMixedContentProtection();
|
||||
let {gIdentityHandler} = gTestBrowser.ownerGlobal;
|
||||
gIdentityHandler.disableMixedContentProtection();
|
||||
|
||||
notification.remove();
|
||||
}
|
||||
|
||||
|
@ -61,13 +58,7 @@ function mixedContentOverrideTest()
|
|||
is(gTestBrowser.docShell.hasMixedDisplayContentBlocked, false, "second hasMixedDisplayContentBlocked flag has been set");
|
||||
is(gTestBrowser.docShell.hasMixedActiveContentBlocked, false, "second hasMixedActiveContentBlocked flag has been set");
|
||||
|
||||
let notification = PopupNotifications.getNotification("bad-content", gTestBrowser);
|
||||
ok(notification, "Mixed Content Doorhanger should appear");
|
||||
notification.reshow();
|
||||
|
||||
// Make sure the notification has the mixedblockdisabled attribute set to true
|
||||
is(PopupNotifications.panel.firstChild.getAttribute("mixedblockdisabled"), "true",
|
||||
"Doorhanger must have [mixedblockdisabled='true'] attribute");
|
||||
assertMixedContentBlockingState(gTestBrowser, {activeLoaded: true, activeBlocked: false, passiveLoaded: true});
|
||||
|
||||
gBrowser.removeCurrentTab();
|
||||
finish();
|
||||
|
|
|
@ -5,7 +5,7 @@ const TEST_ENGINE_BASENAME = "searchSuggestionEngine.xml";
|
|||
|
||||
// Must run first.
|
||||
add_task(function* prepare() {
|
||||
let engine = yield promiseNewEngine(TEST_ENGINE_BASENAME);
|
||||
let engine = yield promiseNewSearchEngine(TEST_ENGINE_BASENAME);
|
||||
let oldCurrentEngine = Services.search.currentEngine;
|
||||
Services.search.currentEngine = engine;
|
||||
registerCleanupFunction(function () {
|
||||
|
@ -23,29 +23,14 @@ add_task(function* prepare() {
|
|||
});
|
||||
});
|
||||
|
||||
add_task(function* focus_allSuggestionsDisabled() {
|
||||
Services.prefs.setBoolPref(SUGGEST_ALL_PREF, false);
|
||||
Services.prefs.setBoolPref(CHOICE_PREF, false);
|
||||
gURLBar.blur();
|
||||
gURLBar.focus();
|
||||
Assert.ok(!gURLBar.popup.popupOpen, "popup should be closed");
|
||||
yield promiseAutocompleteResultPopup("foo");
|
||||
Assert.ok(gURLBar.popup.popupOpen, "popup should be open");
|
||||
assertVisible(false);
|
||||
});
|
||||
|
||||
add_task(function* focus_noChoiceMade() {
|
||||
add_task(function* focus() {
|
||||
// Focusing the urlbar used to open the popup in order to show the
|
||||
// notification, but it doesn't anymore. Make sure it does not.
|
||||
Services.prefs.setBoolPref(SUGGEST_ALL_PREF, true);
|
||||
Services.prefs.setBoolPref(CHOICE_PREF, false);
|
||||
gURLBar.blur();
|
||||
gURLBar.focus();
|
||||
Assert.ok(gURLBar.popup.popupOpen, "popup should be open");
|
||||
assertVisible(true);
|
||||
gURLBar.blur();
|
||||
Assert.ok(!gURLBar.popup.popupOpen, "popup should be closed");
|
||||
gURLBar.focus();
|
||||
Assert.ok(gURLBar.popup.popupOpen, "popup should be open again");
|
||||
assertVisible(true);
|
||||
Assert.ok(!gURLBar.popup.popupOpen, "popup should remain closed");
|
||||
});
|
||||
|
||||
add_task(function* dismissWithoutResults() {
|
||||
|
@ -53,6 +38,9 @@ add_task(function* dismissWithoutResults() {
|
|||
Services.prefs.setBoolPref(CHOICE_PREF, false);
|
||||
gURLBar.blur();
|
||||
gURLBar.focus();
|
||||
let popupPromise = promisePopupShown(gURLBar.popup);
|
||||
gURLBar.openPopup();
|
||||
yield popupPromise;
|
||||
Assert.ok(gURLBar.popup.popupOpen, "popup should be open");
|
||||
assertVisible(true);
|
||||
Assert.equal(gURLBar.popup._matchCount, 0, "popup should have no results");
|
||||
|
@ -76,9 +64,9 @@ add_task(function* dismissWithResults() {
|
|||
Services.prefs.setBoolPref(CHOICE_PREF, false);
|
||||
gURLBar.blur();
|
||||
gURLBar.focus();
|
||||
yield promiseAutocompleteResultPopup("foo");
|
||||
Assert.ok(gURLBar.popup.popupOpen, "popup should be open");
|
||||
assertVisible(true);
|
||||
yield promiseAutocompleteResultPopup("foo");
|
||||
Assert.ok(gURLBar.popup._matchCount > 0, "popup should have results");
|
||||
let disableButton = document.getAnonymousElementByAttribute(
|
||||
gURLBar.popup, "anonid", "search-suggestions-notification-disable"
|
||||
|
@ -100,6 +88,7 @@ add_task(function* disable() {
|
|||
Services.prefs.setBoolPref(CHOICE_PREF, false);
|
||||
gURLBar.blur();
|
||||
gURLBar.focus();
|
||||
yield promiseAutocompleteResultPopup("foo");
|
||||
Assert.ok(gURLBar.popup.popupOpen, "popup should be open");
|
||||
assertVisible(true);
|
||||
let disableButton = document.getAnonymousElementByAttribute(
|
||||
|
@ -161,25 +150,6 @@ function assertVisible(visible) {
|
|||
Assert.equal(style.visibility, visible ? "visible" : "collapse");
|
||||
}
|
||||
|
||||
function promiseNewEngine(basename) {
|
||||
return new Promise((resolve, reject) => {
|
||||
info("Waiting for engine to be added: " + basename);
|
||||
let url = getRootDirectory(gTestPath) + basename;
|
||||
Services.search.addEngine(url, Ci.nsISearchEngine.TYPE_MOZSEARCH, "",
|
||||
false, {
|
||||
onSuccess: function (engine) {
|
||||
info("Search engine added: " + basename);
|
||||
registerCleanupFunction(() => Services.search.removeEngine(engine));
|
||||
resolve(engine);
|
||||
},
|
||||
onError: function (errCode) {
|
||||
Assert.ok(false, "addEngine failed with error code " + errCode);
|
||||
reject();
|
||||
},
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function promiseTransition() {
|
||||
return new Promise(resolve => {
|
||||
gURLBar.popup.addEventListener("transitionend", function onEnd() {
|
||||
|
|
|
@ -758,6 +758,66 @@ function assertWebRTCIndicatorStatus(expected) {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the state of the identity box and control center to make
|
||||
* sure they are correctly showing the expected mixed content states.
|
||||
*
|
||||
* @param tabbrowser
|
||||
* @param Object states
|
||||
* MUST include the following properties:
|
||||
* {
|
||||
* activeLoaded: true|false,
|
||||
* activeBlocked: true|false,
|
||||
* passiveLoaded: true|false,
|
||||
* }
|
||||
*/
|
||||
function assertMixedContentBlockingState(tabbrowser, states = {}) {
|
||||
if (!tabbrowser || !("activeLoaded" in states) ||
|
||||
!("activeBlocked" in states) || !("passiveLoaded" in states)) {
|
||||
throw new Error("assertMixedContentBlockingState requires a browser and a states object");
|
||||
}
|
||||
|
||||
let {passiveLoaded,activeLoaded,activeBlocked} = states;
|
||||
let {gIdentityHandler} = tabbrowser.ownerGlobal;
|
||||
let doc = tabbrowser.ownerDocument;
|
||||
let identityBox = gIdentityHandler._identityBox;
|
||||
let classList = identityBox.classList;
|
||||
|
||||
// Make sure the identity box UI has the correct mixedcontent states
|
||||
is(classList.contains("mixedActiveContent"), activeLoaded,
|
||||
"identityBox has expected class for activeLoaded");
|
||||
is(classList.contains("mixedActiveBlocked"), activeBlocked && !passiveLoaded,
|
||||
"identityBox has expected class for activeBlocked && !passiveLoaded");
|
||||
is(classList.contains("mixedDisplayContent"), passiveLoaded && !activeLoaded,
|
||||
"identityBox has expected class for passiveLoaded && activeLoaded");
|
||||
is(classList.contains("mixedDisplayContentLoadedActiveBlocked"), passiveLoaded && activeBlocked,
|
||||
"identityBox has expected class for passiveLoaded && activeBlocked");
|
||||
is (classList.contains("mixedContent"), activeBlocked || activeLoaded || passiveLoaded,
|
||||
"identityBox is showing no mixed content");
|
||||
|
||||
// Make sure the identity popup has the correct mixedcontent states
|
||||
gIdentityHandler._identityBox.click();
|
||||
let popupAttr = doc.getElementById("identity-popup").getAttribute("mixedcontent");
|
||||
let bodyAttr = doc.getElementById("identity-popup-securityView-body").getAttribute("mixedcontent");
|
||||
|
||||
is(popupAttr.contains("active-loaded"), activeLoaded,
|
||||
"identity-popup has expected attr for activeLoaded");
|
||||
is(bodyAttr.contains("active-loaded"), activeLoaded,
|
||||
"securityView-body has expected attr for activeLoaded");
|
||||
|
||||
is(popupAttr.contains("active-blocked"), activeBlocked,
|
||||
"identity-popup has expected attr for activeBlocked");
|
||||
is(bodyAttr.contains("active-blocked"), activeBlocked,
|
||||
"securityView-body has expected attr for activeBlocked");
|
||||
|
||||
is(popupAttr.contains("passive-loaded"), passiveLoaded,
|
||||
"identity-popup has expected attr for passiveLoaded");
|
||||
is(bodyAttr.contains("passive-loaded"), passiveLoaded,
|
||||
"securityView-body has expected attr for passiveLoaded");
|
||||
|
||||
gIdentityHandler._identityPopup.hidden = true;
|
||||
}
|
||||
|
||||
function makeActionURI(action, params) {
|
||||
let url = "moz-action:" + action + "," + JSON.stringify(params);
|
||||
return NetUtil.newURI(url);
|
||||
|
@ -882,3 +942,22 @@ function promiseTopicObserved(aTopic)
|
|||
}, aTopic, false);
|
||||
});
|
||||
}
|
||||
|
||||
function promiseNewSearchEngine(basename) {
|
||||
return new Promise((resolve, reject) => {
|
||||
info("Waiting for engine to be added: " + basename);
|
||||
let url = getRootDirectory(gTestPath) + basename;
|
||||
Services.search.addEngine(url, Ci.nsISearchEngine.TYPE_MOZSEARCH, "",
|
||||
false, {
|
||||
onSuccess: function (engine) {
|
||||
info("Search engine added: " + basename);
|
||||
registerCleanupFunction(() => Services.search.removeEngine(engine));
|
||||
resolve(engine);
|
||||
},
|
||||
onError: function (errCode) {
|
||||
Assert.ok(false, "addEngine failed with error code " + errCode);
|
||||
reject();
|
||||
},
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
@ -768,8 +768,14 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|||
|
||||
// Trim popup selected values, but never trim results coming from
|
||||
// autofill.
|
||||
let styles = new Set(
|
||||
this.popup.selectedIndex == -1 ? [] :
|
||||
this.mController.getStyleAt(this.popup.selectedIndex).split(/\s+/)
|
||||
);
|
||||
if (this.popup.selectedIndex == -1 ||
|
||||
this.mController.getStyleAt(this.popup.selectedIndex) == "autofill") {
|
||||
this.mController
|
||||
.getStyleAt(this.popup.selectedIndex)
|
||||
.split(/\s+/).indexOf("autofill") >= 0) {
|
||||
this._disableTrim = true;
|
||||
}
|
||||
this.value = val;
|
||||
|
@ -923,20 +929,16 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|||
false
|
||||
]]></field>
|
||||
|
||||
<method name="_maybeShowSearchSuggestionsNotification">
|
||||
<body><![CDATA[
|
||||
let showNotification =
|
||||
!this._userMadeSearchSuggestionsChoice &&
|
||||
// When _urlbarFocused is true, tabbrowser would close the popup if
|
||||
// it's opened here, so don't show the notification.
|
||||
!gBrowser.selectedBrowser._urlbarFocused &&
|
||||
Services.prefs.getBoolPref("browser.search.suggest.enabled") &&
|
||||
this._prefs.getBoolPref("unifiedcomplete");
|
||||
if (showNotification) {
|
||||
this.popup.showSearchSuggestionsNotification(this, this);
|
||||
}
|
||||
]]></body>
|
||||
</method>
|
||||
<property name="shouldShowSearchSuggestionsNotification" readonly="true">
|
||||
<getter><![CDATA[
|
||||
return !this._userMadeSearchSuggestionsChoice &&
|
||||
// When _urlbarFocused is true, tabbrowser would close the
|
||||
// popup if it's opened here, so don't show the notification.
|
||||
!gBrowser.selectedBrowser._urlbarFocused &&
|
||||
Services.prefs.getBoolPref("browser.search.suggest.enabled") &&
|
||||
this._prefs.getBoolPref("unifiedcomplete");
|
||||
]]></getter>
|
||||
</property>
|
||||
|
||||
</implementation>
|
||||
|
||||
|
@ -968,7 +970,6 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|||
if (event.originalTarget == this.inputField) {
|
||||
this._hideURLTooltip();
|
||||
this.formatValue();
|
||||
this._maybeShowSearchSuggestionsNotification();
|
||||
}
|
||||
]]></handler>
|
||||
|
||||
|
@ -1586,7 +1587,13 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|||
// ie, hitting page-down will only cause is to wrap if we're already
|
||||
// at one end of the list.
|
||||
|
||||
if (!Services.prefs.getBoolPref("browser.urlbar.unifiedcomplete")) {
|
||||
// Do not allow the selection to be removed if UnifiedComplete is
|
||||
// enabled and the popup's first result is a heuristic result.
|
||||
if (!Services.prefs.getBoolPref("browser.urlbar.unifiedcomplete") ||
|
||||
(this.input.mController.matchCount > 0 &&
|
||||
this.input.mController
|
||||
.getStyleAt(0)
|
||||
.split(/\s+/).indexOf("heuristic") == -1)) {
|
||||
if (reverse && index == -1 || newIndex > maxRow && index != maxRow)
|
||||
newIndex = maxRow;
|
||||
else if (!reverse && index == -1 || newIndex < 0 && index != 0)
|
||||
|
@ -1631,11 +1638,8 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|||
// to avoid impacting startup / new window performance
|
||||
aInput.popup.hidden = false;
|
||||
|
||||
// The popup may already be open if it's showing the search
|
||||
// suggestions notification. In that case, its footer visibility
|
||||
// needs to be updated.
|
||||
if (this.popupOpen) {
|
||||
this._updateFooterVisibility();
|
||||
if (aInput.shouldShowSearchSuggestionsNotification) {
|
||||
this._showSearchSuggestionsNotification();
|
||||
}
|
||||
|
||||
this._openAutocompletePopup(aInput, aElement);
|
||||
|
@ -1651,7 +1655,7 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|||
</body>
|
||||
</method>
|
||||
|
||||
<method name="showSearchSuggestionsNotification">
|
||||
<method name="_showSearchSuggestionsNotification">
|
||||
<parameter name="aInput"/>
|
||||
<parameter name="aElement"/>
|
||||
<body>
|
||||
|
@ -1679,7 +1683,6 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|||
|
||||
this.classList.add("showSearchSuggestionsNotification");
|
||||
this._updateFooterVisibility();
|
||||
this.openAutocompletePopup(aInput, aElement);
|
||||
]]>
|
||||
</body>
|
||||
</method>
|
||||
|
@ -1790,22 +1793,39 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|||
</method>
|
||||
|
||||
<method name="createResultLabel">
|
||||
<parameter name="aTitle"/>
|
||||
<parameter name="aUrl"/>
|
||||
<parameter name="aType"/>
|
||||
<parameter name="item"/>
|
||||
<parameter name="proposedLabel"/>
|
||||
<body>
|
||||
<![CDATA[
|
||||
let label = aTitle + " " + aUrl;
|
||||
// convert aType (ex: "ac-result-type-<aType>") to text to be spoke aloud
|
||||
// by screen readers. convert "tag" and "bookmark" to the localized versions,
|
||||
// but don't do anything for "favicon" (the default)
|
||||
try {
|
||||
label += " " + this._bundle.GetStringFromName(aType + "ResultLabel");
|
||||
} catch (e) {
|
||||
// Undefined result label, do nothing.
|
||||
let parts = [proposedLabel];
|
||||
|
||||
let action = this.mInput._parseActionUrl(item.getAttribute("url"));
|
||||
if (action) {
|
||||
switch (action.type) {
|
||||
case "searchengine":
|
||||
parts = [
|
||||
action.params.searchSuggestion || action.params.searchQuery,
|
||||
action.params.engineName,
|
||||
];
|
||||
break;
|
||||
case "switchtab":
|
||||
parts = [
|
||||
item.getAttribute("title"),
|
||||
action.params.url,
|
||||
];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return label;
|
||||
let types = item.getAttribute("type").split(/\s+/);
|
||||
let type = types.find(type => type != "action" && type != "heuristic");
|
||||
try {
|
||||
// Some types intentionally do not map to strings, which is not
|
||||
// an error.
|
||||
parts.push(this._bundle.GetStringFromName(type + "ResultLabel"));
|
||||
} catch (e) {}
|
||||
|
||||
return parts.filter(str => str).join(" ");
|
||||
]]>
|
||||
</body>
|
||||
</method>
|
||||
|
@ -1816,11 +1836,16 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|||
if (!Services.prefs.getBoolPref("browser.urlbar.unifiedcomplete"))
|
||||
return;
|
||||
|
||||
// If nothing is selected yet, select the first result if it is a
|
||||
// pre-selected "heuristic" result. (See UnifiedComplete.js.)
|
||||
if (this._matchCount > 0 && this.selectedIndex == -1) {
|
||||
// Don't handle this as a user-initiated action.
|
||||
this._ignoreNextSelect = true;
|
||||
this.selectedIndex = 0;
|
||||
this._ignoreNextSelect = false;
|
||||
let styles = this.input.mController.getStyleAt(0).split(/\s+/);
|
||||
if (styles.indexOf("heuristic") >= 0) {
|
||||
// Don't handle this as a user-initiated action.
|
||||
this._ignoreNextSelect = true;
|
||||
this.selectedIndex = 0;
|
||||
this._ignoreNextSelect = false;
|
||||
}
|
||||
}
|
||||
|
||||
this.input.gotResultForCurrentQuery = true;
|
||||
|
@ -2387,259 +2412,6 @@ file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|||
</implementation>
|
||||
</binding>
|
||||
|
||||
<binding id="bad-content-notification" extends="chrome://global/content/bindings/notification.xml#popup-notification">
|
||||
<content>
|
||||
<xul:hbox align="start">
|
||||
<xul:image class="popup-notification-icon" xbl:inherits="popupid,mixedblockdisabled,trackingblockdisabled"/>
|
||||
<xul:vbox>
|
||||
<!-- header -->
|
||||
<xul:vbox>
|
||||
<xul:description anonid="badContentBlocked.title"
|
||||
class="popup-notification-item-title" xbl:inherits="popupid">
|
||||
</xul:description>
|
||||
<xul:description class="popup-notification-item-message"
|
||||
xbl:inherits="popupid">
|
||||
&badContentBlocked.moreinfo;
|
||||
</xul:description>
|
||||
</xul:vbox>
|
||||
<!-- mixed content -->
|
||||
<xul:vbox anonid="mixedContent" hidden="true">
|
||||
<xul:separator class="groove"/>
|
||||
<xul:hbox align="start">
|
||||
<xul:vbox>
|
||||
<xul:description class="popup-notification-item-title"
|
||||
xbl:inherits="popupid">
|
||||
&mixedContentBlocked2.message;
|
||||
</xul:description>
|
||||
<xul:description class="popup-notification-item-message"
|
||||
xbl:inherits="popupid,mixedblockdisabled">
|
||||
&mixedContentBlocked2.moreinfo;
|
||||
</xul:description>
|
||||
<xul:label anonid="mixedContent.helplink"
|
||||
class="text-link" href=""
|
||||
value="&mixedContentBlocked2.learnMore;"/>
|
||||
</xul:vbox>
|
||||
<xul:button
|
||||
type="menu" label="&mixedContentBlocked2.options;"
|
||||
sizetopopup="none">
|
||||
<xul:menupopup>
|
||||
<xul:menuitem anonid="mixedContentAction.unblock"
|
||||
hidden="true" label="&mixedContentBlocked2.unblock.label;"
|
||||
accesskey="&mixedContentBlocked2.unblock.accesskey;"
|
||||
oncommand="document.getBindingParent(this).disableMixedContentProtection();"/>
|
||||
<xul:menuitem anonid="mixedContentAction.block"
|
||||
hidden="true" label="&mixedContentBlocked2.block.label;"
|
||||
accesskey="&mixedContentBlocked2.block.accesskey;"
|
||||
oncommand="document.getBindingParent(this).enableMixedContentProtection();"/>
|
||||
</xul:menupopup>
|
||||
</xul:button>
|
||||
</xul:hbox>
|
||||
<xul:hbox class="popup-notification-footer" xbl:inherits="popupid,mixedblockdisabled">
|
||||
<xul:description class="popup-notification-item-message popup-notification-item-message-critical" xbl:inherits="popupid">
|
||||
&mixedContentBlocked2.disabled.message;
|
||||
</xul:description>
|
||||
</xul:hbox>
|
||||
</xul:vbox>
|
||||
<!-- tracking content -->
|
||||
<xul:vbox anonid="trackingContent" hidden="true">
|
||||
<xul:separator class="groove"/>
|
||||
<xul:hbox align="start">
|
||||
<xul:vbox>
|
||||
<xul:description class="popup-notification-item-title"
|
||||
xbl:inherits="popupid">
|
||||
&trackingContentBlocked.message;
|
||||
</xul:description>
|
||||
<xul:description class="popup-notification-item-message"
|
||||
xbl:inherits="popupid,trackingblockdisabled">
|
||||
&trackingContentBlocked.moreinfo;
|
||||
</xul:description>
|
||||
<xul:label anonid="trackingContent.helplink"
|
||||
class="text-link" href=""
|
||||
value="&trackingContentBlocked.learnMore;"/>
|
||||
</xul:vbox>
|
||||
<xul:button
|
||||
type="menu" label="&trackingContentBlocked.options;"
|
||||
sizetopopup="none">
|
||||
<xul:menupopup>
|
||||
<xul:menuitem anonid="trackingContentAction.unblock"
|
||||
hidden="true" label="&trackingContentBlocked.unblock2.label;"
|
||||
accesskey="&trackingContentBlocked.unblock2.accesskey;"
|
||||
oncommand="document.getBindingParent(this).disableTrackingContentProtection();"/>
|
||||
<xul:menuitem anonid="trackingContentAction.block"
|
||||
hidden="true" label="&trackingContentBlocked.block.label;"
|
||||
accesskey="&trackingContentBlocked.block.accesskey;"
|
||||
oncommand="document.getBindingParent(this).enableTrackingContentProtection();"/>
|
||||
</xul:menupopup>
|
||||
</xul:button>
|
||||
</xul:hbox>
|
||||
<xul:hbox class="popup-notification-footer" xbl:inherits="popupid,trackingblockdisabled">
|
||||
<xul:description class="popup-notification-item-message popup-notification-item-message-critical" xbl:inherits="popupid">
|
||||
&trackingContentBlocked.disabled.message;
|
||||
</xul:description>
|
||||
</xul:hbox>
|
||||
</xul:vbox>
|
||||
</xul:vbox>
|
||||
<xul:vbox pack="start">
|
||||
<xul:toolbarbutton anonid="closebutton"
|
||||
class="messageCloseButton popup-notification-closebutton tabbable close-icon"
|
||||
xbl:inherits="oncommand=closebuttoncommand"
|
||||
tooltiptext="&closeNotification.tooltip;"/>
|
||||
</xul:vbox>
|
||||
</xul:hbox>
|
||||
</content>
|
||||
<resources>
|
||||
<stylesheet src="chrome://global/skin/notification.css"/>
|
||||
</resources>
|
||||
<implementation>
|
||||
<field name="_brandShortName">
|
||||
document.getElementById("bundle_brand").getString("brandShortName")
|
||||
</field>
|
||||
<field name="_doorhangerTitle">
|
||||
document.getAnonymousElementByAttribute(this, "anonid",
|
||||
"badContentBlocked.title")
|
||||
</field>
|
||||
<field name="_mixedContent">
|
||||
document.getAnonymousElementByAttribute(this, "anonid",
|
||||
"mixedContent")
|
||||
</field>
|
||||
<field name="_mixedContentUnblock">
|
||||
document.getAnonymousElementByAttribute(this, "anonid",
|
||||
"mixedContentAction.unblock")
|
||||
</field>
|
||||
<field name="_mixedContentBlock">
|
||||
document.getAnonymousElementByAttribute(this, "anonid",
|
||||
"mixedContentAction.block");
|
||||
</field>
|
||||
<field name="_mixedContentHelpLink">
|
||||
document.getAnonymousElementByAttribute(this, "anonid",
|
||||
"mixedContent.helplink")
|
||||
</field>
|
||||
<property name="isMixedContentBlocked" readonly="true">
|
||||
<getter><![CDATA[
|
||||
return this.notification.options.state &
|
||||
Ci.nsIWebProgressListener.STATE_BLOCKED_MIXED_ACTIVE_CONTENT;
|
||||
]]></getter>
|
||||
</property>
|
||||
<field name="_trackingContent">
|
||||
document.getAnonymousElementByAttribute(this, "anonid",
|
||||
"trackingContent")
|
||||
</field>
|
||||
<field name="_trackingContentUnblock">
|
||||
document.getAnonymousElementByAttribute(this, "anonid",
|
||||
"trackingContentAction.unblock")
|
||||
</field>
|
||||
<field name="_trackingContentBlock">
|
||||
document.getAnonymousElementByAttribute(this, "anonid",
|
||||
"trackingContentAction.block");
|
||||
</field>
|
||||
<field name="_trackingContentHelpLink">
|
||||
document.getAnonymousElementByAttribute(this, "anonid",
|
||||
"trackingContent.helplink")
|
||||
</field>
|
||||
<property name="isTrackingContentBlocked" readonly="true">
|
||||
<getter><![CDATA[
|
||||
return !!(this.notification.options.state &
|
||||
Ci.nsIWebProgressListener.STATE_BLOCKED_TRACKING_CONTENT);
|
||||
]]></getter>
|
||||
</property>
|
||||
<constructor><![CDATA[
|
||||
// default title
|
||||
_doorhangerTitle.value =
|
||||
gNavigatorBundle.getFormattedString(
|
||||
"badContentBlocked.notblocked.message", [this._brandShortName]);
|
||||
if (this.notification.options.state &
|
||||
Ci.nsIWebProgressListener.STATE_BLOCKED_MIXED_ACTIVE_CONTENT) {
|
||||
_doorhangerTitle.value =
|
||||
gNavigatorBundle.getFormattedString(
|
||||
"badContentBlocked.blocked.message", [this._brandShortName]);
|
||||
_mixedContent.hidden = false;
|
||||
_mixedContentUnblock.hidden = false;
|
||||
_mixedContentHelpLink.href =
|
||||
Services.urlFormatter.formatURLPref("app.support.baseURL")
|
||||
+ "mixed-content";
|
||||
}
|
||||
if (this.notification.options.state &
|
||||
Ci.nsIWebProgressListener.STATE_LOADED_MIXED_ACTIVE_CONTENT) {
|
||||
this.setAttribute("mixedblockdisabled", true);
|
||||
_mixedContent.hidden = false;
|
||||
_mixedContentBlock.hidden = false;
|
||||
_mixedContentHelpLink.href =
|
||||
Services.urlFormatter.formatURLPref("app.support.baseURL")
|
||||
+ "mixed-content";
|
||||
}
|
||||
if (this.notification.options.state &
|
||||
Ci.nsIWebProgressListener.STATE_BLOCKED_TRACKING_CONTENT) {
|
||||
_doorhangerTitle.value =
|
||||
gNavigatorBundle.getFormattedString(
|
||||
"badContentBlocked.blocked.message", [this._brandShortName]);
|
||||
_trackingContent.hidden = false;
|
||||
_trackingContentUnblock.hidden = false;
|
||||
_trackingContentHelpLink.href =
|
||||
Services.urlFormatter.formatURLPref("app.support.baseURL")
|
||||
+ "tracking-protection";
|
||||
}
|
||||
if (this.notification.options.state &
|
||||
Ci.nsIWebProgressListener.STATE_LOADED_TRACKING_CONTENT) {
|
||||
this.setAttribute("trackingblockdisabled", true);
|
||||
_trackingContent.hidden = false;
|
||||
_trackingContentBlock.hidden = false;
|
||||
_trackingContentHelpLink.href =
|
||||
Services.urlFormatter.formatURLPref("app.support.baseURL")
|
||||
+ "tracking-protection";
|
||||
}
|
||||
]]></constructor>
|
||||
<method name="disableMixedContentProtection">
|
||||
<body><![CDATA[
|
||||
// Use telemetry to measure how often unblocking happens
|
||||
const kMIXED_CONTENT_UNBLOCK_EVENT = 2;
|
||||
let histogram =
|
||||
Services.telemetry.getHistogramById(
|
||||
"MIXED_CONTENT_UNBLOCK_COUNTER");
|
||||
histogram.add(kMIXED_CONTENT_UNBLOCK_EVENT);
|
||||
// Reload the page with the content unblocked
|
||||
BrowserReloadWithFlags(
|
||||
nsIWebNavigation.LOAD_FLAGS_ALLOW_MIXED_CONTENT);
|
||||
]]></body>
|
||||
</method>
|
||||
<method name="enableMixedContentProtection">
|
||||
<body><![CDATA[
|
||||
gBrowser.selectedBrowser.messageManager.sendAsyncMessage(
|
||||
"MixedContent:ReenableProtection", {});
|
||||
BrowserReload();
|
||||
]]></body>
|
||||
</method>
|
||||
<method name="disableTrackingContentProtection">
|
||||
<body><![CDATA[
|
||||
// convert document URI into the format used by
|
||||
// nsChannelClassifier::ShouldEnableTrackingProtection
|
||||
// (any scheme turned into https is correct)
|
||||
let normalizedUrl = Services.io.newURI(
|
||||
"https://" + gBrowser.selectedBrowser.currentURI.hostPort,
|
||||
null, null);
|
||||
// Add the current host/port combination in the 'trackingprotection' consumer of
|
||||
// the permission manager using a normalized URI. This effectively
|
||||
// places this host/port combination on the tracking protection allowlist.
|
||||
Services.perms.add(normalizedUrl,
|
||||
"trackingprotection", Services.perms.ALLOW_ACTION);
|
||||
BrowserReload();
|
||||
]]></body>
|
||||
</method>
|
||||
<method name="enableTrackingContentProtection">
|
||||
<body><![CDATA[
|
||||
// Remove the current host/port combination from the 'trackingprotection' consumer
|
||||
// of the permission manager. This effectively removes this host/port combination
|
||||
// from the tracking protection allowlist.
|
||||
let normalizedUrl = Services.io.newURI(
|
||||
"https://" + gBrowser.selectedBrowser.currentURI.hostPort,
|
||||
null, null);
|
||||
Services.perms.remove(normalizedUrl,
|
||||
"trackingprotection");
|
||||
BrowserReload();
|
||||
]]></body>
|
||||
</method>
|
||||
</implementation>
|
||||
</binding>
|
||||
|
||||
<binding id="click-to-play-plugins-notification" extends="chrome://global/content/bindings/notification.xml#popup-notification">
|
||||
<content align="start" style="width: &pluginNotification.width;;">
|
||||
<xul:vbox flex="1" align="stretch" class="popup-notification-main-box"
|
||||
|
|
|
@ -184,6 +184,13 @@ Object.defineProperty(ChromeProfileMigrator.prototype, "sourceHomePageURL", {
|
|||
}
|
||||
});
|
||||
|
||||
Object.defineProperty(ChromeProfileMigrator.prototype, "sourceLocked", {
|
||||
get: function Chrome_sourceLocked() {
|
||||
// There is an exclusive lock on some SQLite databases. Assume they are locked for now.
|
||||
return true;
|
||||
},
|
||||
});
|
||||
|
||||
function GetBookmarksResource(aProfileFolder) {
|
||||
let bookmarksFile = aProfileFolder.clone();
|
||||
bookmarksFile.append("Bookmarks");
|
||||
|
|
|
@ -167,6 +167,12 @@ this.MigratorPrototype = {
|
|||
*/
|
||||
get sourceHomePageURL() "",
|
||||
|
||||
/**
|
||||
* Override if the data to migrate is locked/in-use and the user should
|
||||
* probably shutdown the source browser.
|
||||
*/
|
||||
get sourceLocked() false,
|
||||
|
||||
/**
|
||||
* DO NOT OVERRIDE - After deCOMing migration, the UI will just call
|
||||
* getResources.
|
||||
|
|
|
@ -64,6 +64,15 @@ var MigrationWizard = {
|
|||
// 1 - Import Source
|
||||
onImportSourcePageShow: function ()
|
||||
{
|
||||
// Show warning message to close the selected browser when needed
|
||||
function toggleCloseBrowserWarning() {
|
||||
let visibility = "hidden";
|
||||
if (group.selectedItem.id != "nothing") {
|
||||
let migrator = MigrationUtils.getMigrator(group.selectedItem.id);
|
||||
visibility = migrator.sourceLocked ? "visible" : "hidden";
|
||||
}
|
||||
document.getElementById("closeSourceBrowser").style.visibility = visibility;
|
||||
}
|
||||
this._wiz.canRewind = false;
|
||||
|
||||
var selectedMigrator = null;
|
||||
|
@ -86,9 +95,12 @@ var MigrationWizard = {
|
|||
}
|
||||
}
|
||||
|
||||
if (selectedMigrator)
|
||||
group.addEventListener("command", toggleCloseBrowserWarning);
|
||||
|
||||
if (selectedMigrator) {
|
||||
group.selectedItem = selectedMigrator;
|
||||
else {
|
||||
toggleCloseBrowserWarning();
|
||||
} else {
|
||||
// We didn't find a migrator, notify the user
|
||||
document.getElementById("noSources").hidden = false;
|
||||
|
||||
|
|
|
@ -52,6 +52,8 @@
|
|||
<radio id="nothing" label="&importFromNothing.label;" accesskey="&importFromNothing.accesskey;" hidden="true"/>
|
||||
</radiogroup>
|
||||
<label id="noSources" hidden="true">&noMigrationSources.label;</label>
|
||||
<spacer flex="1"/>
|
||||
<description class="header" id="closeSourceBrowser" style="visibility:hidden">&closeSourceBrowser.label;</description>
|
||||
</wizardpage>
|
||||
|
||||
<wizardpage id="selectProfile" pageid="selectProfile" label="&selectProfile.title;"
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
interface nsIArray;
|
||||
interface nsIProfileStartup;
|
||||
|
||||
[scriptable, uuid(30e5a7ec-f71e-4f41-9dbd-7429c02132ec)]
|
||||
[scriptable, uuid(22b56ffc-3149-43c5-b5a9-b3a6b678de93)]
|
||||
interface nsIBrowserProfileMigrator : nsISupports
|
||||
{
|
||||
/**
|
||||
|
@ -43,16 +43,16 @@ interface nsIBrowserProfileMigrator : nsISupports
|
|||
*/
|
||||
unsigned short getMigrateData(in jsval aProfile, in boolean aDoingStartup);
|
||||
|
||||
/**
|
||||
* Whether or not there is any data that can be imported from this
|
||||
/**
|
||||
* Whether or not there is any data that can be imported from this
|
||||
* browser (i.e. whether or not it is installed, and there exists
|
||||
* a user profile)
|
||||
*/
|
||||
readonly attribute boolean sourceExists;
|
||||
|
||||
|
||||
/**
|
||||
* An enumeration of available profiles. If the import source does
|
||||
/**
|
||||
* An enumeration of available profiles. If the import source does
|
||||
* not support profiles, this attribute is null.
|
||||
*/
|
||||
readonly attribute jsval sourceProfiles;
|
||||
|
@ -61,4 +61,11 @@ interface nsIBrowserProfileMigrator : nsISupports
|
|||
* The import source homepage. Returns null if not present/available
|
||||
*/
|
||||
readonly attribute AUTF8String sourceHomePageURL;
|
||||
|
||||
|
||||
/**
|
||||
* Whether the source browser data is locked/in-use meaning migration likely
|
||||
* won't succeed and the user should be warned.
|
||||
*/
|
||||
readonly attribute boolean sourceLocked;
|
||||
};
|
||||
|
|
|
@ -99,7 +99,7 @@
|
|||
accesskey="&trackingProtection5.accesskey;"
|
||||
label="&trackingProtection5.label;" />
|
||||
<image id="trackingProtectionImage"
|
||||
src="chrome://browser/skin/bad-content-blocked-16.png"/>
|
||||
src="chrome://browser/skin/tracking-protection-16.svg"/>
|
||||
</hbox>
|
||||
<hbox align="center"
|
||||
class="indent">
|
||||
|
|
|
@ -69,8 +69,7 @@
|
|||
class="showTpDisabled">&trackingProtection.state.disabled;</span>
|
||||
</div>
|
||||
<p id="tpDiagram"/>
|
||||
<p class="showTpEnabled">&trackingProtection.description.enabled;</p>
|
||||
<p class="showTpDisabled">&trackingProtection.description.disabled;</p>
|
||||
<p>&trackingProtection.description;</p>
|
||||
<!-- Use text links to implement plain styled buttons without an href. -->
|
||||
<label xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
|
||||
id="disableTrackingProtection"
|
||||
|
|
|
@ -242,12 +242,11 @@ function getInflatedFrameCache(frameTable) {
|
|||
* @param number index
|
||||
* @param object frameTable
|
||||
* @param object stringTable
|
||||
* @param object allocationsTable
|
||||
*/
|
||||
function getOrAddInflatedFrame(cache, index, frameTable, stringTable, allocationsTable) {
|
||||
function getOrAddInflatedFrame(cache, index, frameTable, stringTable) {
|
||||
let inflatedFrame = cache[index];
|
||||
if (inflatedFrame === null) {
|
||||
inflatedFrame = cache[index] = new InflatedFrame(index, frameTable, stringTable, allocationsTable);
|
||||
inflatedFrame = cache[index] = new InflatedFrame(index, frameTable, stringTable);
|
||||
}
|
||||
return inflatedFrame;
|
||||
};
|
||||
|
@ -258,9 +257,8 @@ function getOrAddInflatedFrame(cache, index, frameTable, stringTable, allocation
|
|||
* @param number index
|
||||
* @param object frameTable
|
||||
* @param object stringTable
|
||||
* @param object allocationsTable
|
||||
*/
|
||||
function InflatedFrame(index, frameTable, stringTable, allocationsTable) {
|
||||
function InflatedFrame(index, frameTable, stringTable) {
|
||||
const LOCATION_SLOT = frameTable.schema.location;
|
||||
const IMPLEMENTATION_SLOT = frameTable.schema.implementation;
|
||||
const OPTIMIZATIONS_SLOT = frameTable.schema.optimizations;
|
||||
|
@ -274,7 +272,6 @@ function InflatedFrame(index, frameTable, stringTable, allocationsTable) {
|
|||
this.optimizations = frame[OPTIMIZATIONS_SLOT];
|
||||
this.line = frame[LINE_SLOT];
|
||||
this.column = undefined;
|
||||
this.allocations = allocationsTable ? allocationsTable[index] : 0;
|
||||
this.category = category;
|
||||
this.isContent = false;
|
||||
|
||||
|
@ -505,10 +502,10 @@ function getFrameInfo (node, options) {
|
|||
data.COSTS_CALCULATED = true;
|
||||
}
|
||||
|
||||
if (options && options.allocations && !data.ALLOCATIONS_CALCULATED) {
|
||||
data.totalAllocations = node.allocations + node.calls.reduce((acc, node) => acc + node.allocations, 0);
|
||||
data.selfAllocations = node.allocations;
|
||||
data.ALLOCATIONS_CALCULATED = true;
|
||||
if (options && options.allocations && !data.ALLOCATION_DATA_CALCULATED) {
|
||||
data.selfCount = node.youngestFrameSamples;
|
||||
data.totalCount = node.samples;
|
||||
data.ALLOCATION_DATA_CALCULATED = true;
|
||||
}
|
||||
|
||||
return data;
|
||||
|
|
|
@ -37,14 +37,14 @@ function ThreadNode(thread, options = {}) {
|
|||
this.duration = options.endTime - options.startTime;
|
||||
this.nodeType = "Thread";
|
||||
|
||||
let { samples, stackTable, frameTable, stringTable, allocationsTable } = thread;
|
||||
let { samples, stackTable, frameTable, stringTable } = thread;
|
||||
|
||||
// Nothing to do if there are no samples.
|
||||
if (samples.data.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
this._buildInverted(samples, stackTable, frameTable, stringTable, allocationsTable, options);
|
||||
this._buildInverted(samples, stackTable, frameTable, stringTable, options);
|
||||
if (!options.invertTree) {
|
||||
this._uninvert();
|
||||
}
|
||||
|
@ -67,9 +67,6 @@ ThreadNode.prototype = {
|
|||
* The table of deduplicated frames from the backend.
|
||||
* @param object stringTable
|
||||
* The table of deduplicated strings from the backend.
|
||||
* @param object allocationsTable
|
||||
* The table of allocation counts from the backend. Indexed by frame
|
||||
* index.
|
||||
* @param object options
|
||||
* Additional supported options
|
||||
* - number startTime
|
||||
|
@ -77,7 +74,7 @@ ThreadNode.prototype = {
|
|||
* - boolean contentOnly [optional]
|
||||
* - boolean invertTree [optional]
|
||||
*/
|
||||
_buildInverted: function buildInverted(samples, stackTable, frameTable, stringTable, allocationsTable, options) {
|
||||
_buildInverted: function buildInverted(samples, stackTable, frameTable, stringTable, options) {
|
||||
function getOrAddFrameNode(calls, isLeaf, frameKey, inflatedFrame, isMetaCategory, leafTable) {
|
||||
// Insert the inflated frame into the call tree at the current level.
|
||||
let frameNode;
|
||||
|
@ -203,7 +200,7 @@ ThreadNode.prototype = {
|
|||
|
||||
// Inflate the frame.
|
||||
let inflatedFrame = getOrAddInflatedFrame(inflatedFrameCache, frameIndex, frameTable,
|
||||
stringTable, allocationsTable);
|
||||
stringTable);
|
||||
|
||||
// Compute the frame key.
|
||||
mutableFrameKeyOptions.isRoot = stackIndex === null;
|
||||
|
@ -382,11 +379,10 @@ ThreadNode.prototype = {
|
|||
* Whether or not this is a platform node that should appear as a
|
||||
* generalized meta category or not.
|
||||
*/
|
||||
function FrameNode(frameKey, { location, line, category, allocations, isContent }, isMetaCategory) {
|
||||
function FrameNode(frameKey, { location, line, category, isContent }, isMetaCategory) {
|
||||
this.key = frameKey;
|
||||
this.location = location;
|
||||
this.line = line;
|
||||
this.allocations = allocations;
|
||||
this.youngestFrameSamples = 0;
|
||||
this.samples = 0;
|
||||
this.calls = [];
|
||||
|
|
|
@ -37,10 +37,10 @@ const DEFAULT_AUTO_EXPAND_DEPTH = 3; // depth
|
|||
const DEFAULT_VISIBLE_CELLS = {
|
||||
duration: true,
|
||||
percentage: true,
|
||||
allocations: false,
|
||||
count: false,
|
||||
selfDuration: true,
|
||||
selfPercentage: true,
|
||||
selfAllocations: false,
|
||||
selfCount: false,
|
||||
samples: true,
|
||||
function: true
|
||||
};
|
||||
|
@ -134,30 +134,31 @@ CallView.prototype = Heritage.extend(AbstractTreeItem.prototype, {
|
|||
*/
|
||||
_displaySelf: function(document, arrowNode) {
|
||||
let frameInfo = this.getDisplayedData();
|
||||
let cells = [];
|
||||
|
||||
if (this.visibleCells.duration) {
|
||||
var durationCell = this._createTimeCell(document, frameInfo.totalDuration);
|
||||
}
|
||||
if (this.visibleCells.selfDuration) {
|
||||
var selfDurationCell = this._createTimeCell(document, frameInfo.selfDuration, true);
|
||||
cells.push(this._createTimeCell(document, frameInfo.totalDuration));
|
||||
}
|
||||
if (this.visibleCells.percentage) {
|
||||
var percentageCell = this._createExecutionCell(document, frameInfo.totalPercentage);
|
||||
cells.push(this._createExecutionCell(document, frameInfo.totalPercentage));
|
||||
}
|
||||
if (this.visibleCells.count) {
|
||||
cells.push(this._createCountCell(document, frameInfo.totalCount));
|
||||
}
|
||||
if (this.visibleCells.selfDuration) {
|
||||
cells.push(this._createTimeCell(document, frameInfo.selfDuration, true));
|
||||
}
|
||||
if (this.visibleCells.selfPercentage) {
|
||||
var selfPercentageCell = this._createExecutionCell(document, frameInfo.selfPercentage, true);
|
||||
cells.push(this._createExecutionCell(document, frameInfo.selfPercentage, true));
|
||||
}
|
||||
if (this.visibleCells.allocations) {
|
||||
var allocationsCell = this._createAllocationsCell(document, frameInfo.totalAllocations);
|
||||
}
|
||||
if (this.visibleCells.selfAllocations) {
|
||||
var selfAllocationsCell = this._createAllocationsCell(document, frameInfo.selfAllocations, true);
|
||||
if (this.visibleCells.selfCount) {
|
||||
cells.push(this._createCountCell(document, frameInfo.selfCount, true));
|
||||
}
|
||||
if (this.visibleCells.samples) {
|
||||
var samplesCell = this._createSamplesCell(document, frameInfo.samples);
|
||||
cells.push(this._createSamplesCell(document, frameInfo.samples));
|
||||
}
|
||||
if (this.visibleCells.function) {
|
||||
var functionCell = this._createFunctionCell(document, arrowNode, frameInfo.name, frameInfo, this.level);
|
||||
cells.push(this._createFunctionCell(document, arrowNode, frameInfo.name, frameInfo, this.level));
|
||||
}
|
||||
|
||||
let targetNode = document.createElement("hbox");
|
||||
|
@ -169,29 +170,9 @@ CallView.prototype = Heritage.extend(AbstractTreeItem.prototype, {
|
|||
if (this.hidden) {
|
||||
targetNode.style.display = "none";
|
||||
}
|
||||
if (this.visibleCells.duration) {
|
||||
targetNode.appendChild(durationCell);
|
||||
}
|
||||
if (this.visibleCells.percentage) {
|
||||
targetNode.appendChild(percentageCell);
|
||||
}
|
||||
if (this.visibleCells.allocations) {
|
||||
targetNode.appendChild(allocationsCell);
|
||||
}
|
||||
if (this.visibleCells.selfDuration) {
|
||||
targetNode.appendChild(selfDurationCell);
|
||||
}
|
||||
if (this.visibleCells.selfPercentage) {
|
||||
targetNode.appendChild(selfPercentageCell);
|
||||
}
|
||||
if (this.visibleCells.selfAllocations) {
|
||||
targetNode.appendChild(selfAllocationsCell);
|
||||
}
|
||||
if (this.visibleCells.samples) {
|
||||
targetNode.appendChild(samplesCell);
|
||||
}
|
||||
if (this.visibleCells.function) {
|
||||
targetNode.appendChild(functionCell);
|
||||
|
||||
for (let i = 0; i < cells.length; i++) {
|
||||
targetNode.appendChild(cells[i]);
|
||||
}
|
||||
|
||||
return targetNode;
|
||||
|
@ -239,10 +220,10 @@ CallView.prototype = Heritage.extend(AbstractTreeItem.prototype, {
|
|||
cell.setAttribute("value", L10N.numberWithDecimals(percentage, 2) + PERCENTAGE_UNITS);
|
||||
return cell;
|
||||
},
|
||||
_createAllocationsCell: function(doc, count, isSelf = false) {
|
||||
_createCountCell: function(doc, count, isSelf = false) {
|
||||
let cell = doc.createElement("description");
|
||||
cell.className = "plain call-tree-cell";
|
||||
cell.setAttribute("type", isSelf ? "self-allocations" : "allocations");
|
||||
cell.setAttribute("type", isSelf ? "self-count" : "count");
|
||||
cell.setAttribute("crop", "end");
|
||||
cell.setAttribute("value", count || 0);
|
||||
return cell;
|
||||
|
@ -356,7 +337,7 @@ CallView.prototype = Heritage.extend(AbstractTreeItem.prototype, {
|
|||
|
||||
return this._cachedDisplayedData = this.frame.getInfo({
|
||||
root: this.root.frame,
|
||||
allocations: (this.visibleCells.allocations || this.visibleCells.selfAllocations)
|
||||
allocations: (this.visibleCells.count || this.visibleCells.selfCount)
|
||||
});
|
||||
|
||||
/**
|
||||
|
|
|
@ -305,12 +305,12 @@
|
|||
<vbox id="memory-calltree-view" flex="1">
|
||||
<hbox class="call-tree-headers-container">
|
||||
<label class="plain call-tree-header"
|
||||
type="allocations"
|
||||
type="count"
|
||||
crop="end"
|
||||
value="&performanceUI.table.totalAlloc;"
|
||||
tooltiptext="&performanceUI.table.totalAlloc.tooltip;"/>
|
||||
<label class="plain call-tree-header"
|
||||
type="self-allocations"
|
||||
type="self-count"
|
||||
crop="end"
|
||||
value="&performanceUI.table.selfAlloc;"
|
||||
tooltiptext="&performanceUI.table.selfAlloc.tooltip;"/>
|
||||
|
|
|
@ -12,7 +12,7 @@ function* spawnTest() {
|
|||
Services.prefs.setBoolPref(MEMORY_PREF, true);
|
||||
|
||||
yield startRecording(panel);
|
||||
yield busyWait(1000);
|
||||
yield busyWait(100);
|
||||
|
||||
let rendered = once(MemoryCallTreeView, EVENTS.MEMORY_CALL_TREE_RENDERED);
|
||||
yield stopRecording(panel);
|
||||
|
@ -23,10 +23,10 @@ function* spawnTest() {
|
|||
testCells($, $$, {
|
||||
"duration": false,
|
||||
"percentage": false,
|
||||
"allocations": true,
|
||||
"count": true,
|
||||
"self-duration": false,
|
||||
"self-percentage": false,
|
||||
"self-allocations": true,
|
||||
"self-count": true,
|
||||
"samples": false,
|
||||
"function": true
|
||||
});
|
||||
|
|
|
@ -96,8 +96,8 @@ let MemoryCallTreeView = Heritage.extend(DetailsSubview, {
|
|||
// Some cells like the time duration and cost percentage don't make sense
|
||||
// for a memory allocations call tree.
|
||||
visibleCells: {
|
||||
allocations: true,
|
||||
selfAllocations: true,
|
||||
selfCount: true,
|
||||
count: true,
|
||||
function: true
|
||||
}
|
||||
});
|
||||
|
|
|
@ -101,7 +101,6 @@ let FramesListView = {
|
|||
}
|
||||
this._selectedItem = target;
|
||||
target.classList.add("selected");
|
||||
console.log("Emitting select on", this, frame);
|
||||
this.emit("select", frame);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -1706,6 +1706,10 @@ CssRuleView.prototype = {
|
|||
return promise.resolve(undefined);
|
||||
}
|
||||
|
||||
if (this.popup.isOpen) {
|
||||
this.popup.hidePopup();
|
||||
}
|
||||
|
||||
this.clear();
|
||||
this.clearPseudoClassPanel();
|
||||
|
||||
|
@ -2208,6 +2212,7 @@ CssRuleView.prototype = {
|
|||
let isComputedHighlighted = false;
|
||||
|
||||
// Highlight search matches in the computed list of properties
|
||||
editor._populateComputed();
|
||||
for (let computed of editor.prop.computed) {
|
||||
if (computed.element) {
|
||||
// Get the actual property value displayed in the computed list
|
||||
|
@ -2837,6 +2842,7 @@ function TextPropertyEditor(aRuleEditor, aProperty) {
|
|||
this.prop = aProperty;
|
||||
this.prop.editor = this;
|
||||
this.browserWindow = this.doc.defaultView.top;
|
||||
this._populatedComputed = false;
|
||||
|
||||
this._onEnableClicked = this._onEnableClicked.bind(this);
|
||||
this._onExpandClicked = this._onExpandClicked.bind(this);
|
||||
|
@ -3179,15 +3185,30 @@ TextPropertyEditor.prototype = {
|
|||
},
|
||||
|
||||
/**
|
||||
* Populate the list of computed styles.
|
||||
* Update the indicator for computed styles. The computed styles themselves
|
||||
* are populated on demand, when they become visible.
|
||||
*/
|
||||
_updateComputed: function() {
|
||||
// Clear out existing viewers.
|
||||
while (this.computed.hasChildNodes()) {
|
||||
this.computed.removeChild(this.computed.lastChild);
|
||||
}
|
||||
this.computed.innerHTML = "";
|
||||
|
||||
let showExpander = this.prop.computed.some(c => c.name !== this.prop.name);
|
||||
this.expander.style.visibility = showExpander ? "visible" : "hidden";
|
||||
|
||||
this._populatedComputed = false;
|
||||
if (this.expander.hasAttribute("open")) {
|
||||
this._populateComputed();
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Populate the list of computed styles.
|
||||
*/
|
||||
_populateComputed: function() {
|
||||
if (this._populatedComputed) {
|
||||
return;
|
||||
}
|
||||
this._populatedComputed = true;
|
||||
|
||||
let showExpander = false;
|
||||
for (let computed of this.prop.computed) {
|
||||
// Don't bother to duplicate information already
|
||||
// shown in the text property.
|
||||
|
@ -3195,8 +3216,6 @@ TextPropertyEditor.prototype = {
|
|||
continue;
|
||||
}
|
||||
|
||||
showExpander = true;
|
||||
|
||||
let li = createChild(this.computed, "li", {
|
||||
class: "ruleview-computed"
|
||||
});
|
||||
|
@ -3234,13 +3253,6 @@ TextPropertyEditor.prototype = {
|
|||
// styles
|
||||
computed.element = li;
|
||||
}
|
||||
|
||||
// Show or hide the expander as needed.
|
||||
if (showExpander) {
|
||||
this.expander.style.visibility = "visible";
|
||||
} else {
|
||||
this.expander.style.visibility = "hidden";
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -3273,6 +3285,7 @@ TextPropertyEditor.prototype = {
|
|||
} else {
|
||||
this.expander.setAttribute("open", "true");
|
||||
this.computed.setAttribute("user-open", "");
|
||||
this._populateComputed();
|
||||
}
|
||||
|
||||
aEvent.stopPropagation();
|
||||
|
@ -3287,6 +3300,7 @@ TextPropertyEditor.prototype = {
|
|||
if (!this.computed.hasAttribute("user-open")) {
|
||||
this.expander.setAttribute("open", "true");
|
||||
this.computed.setAttribute("filter-open", "");
|
||||
this._populateComputed();
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
@ -74,6 +74,9 @@ support-files =
|
|||
[browser_ruleview_completion-existing-property_02.js]
|
||||
[browser_ruleview_completion-new-property_01.js]
|
||||
[browser_ruleview_completion-new-property_02.js]
|
||||
[browser_ruleview_computed_01.js]
|
||||
[browser_ruleview_computed_02.js]
|
||||
[browser_ruleview_completion-popup-hidden-after-navigation.js]
|
||||
[browser_ruleview_content_01.js]
|
||||
[browser_ruleview_content_02.js]
|
||||
skip-if = e10s # Bug 1039528: "inspect element" contextual-menu doesn't work with e10s
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
// Test that the ruleview autocomplete popup is hidden after page navigation
|
||||
|
||||
let TEST_URL = "data:text/html;charset=utf-8,<h1 style='font: 24px serif'></h1>";
|
||||
|
||||
add_task(function*() {
|
||||
yield addTab(TEST_URL);
|
||||
let {inspector, view} = yield openRuleView();
|
||||
|
||||
info("Test autocompletion popup is hidden after page navigation");
|
||||
|
||||
info("Selecting the test node");
|
||||
yield selectNode("h1", inspector);
|
||||
|
||||
info("Focusing the css property editable field");
|
||||
let propertyName = view.styleDocument.querySelectorAll(".ruleview-propertyname")[0];
|
||||
let editor = yield focusEditableField(view, propertyName);
|
||||
|
||||
info("Pressing key VK_DOWN");
|
||||
let onSuggest = once(editor.input, "keypress");
|
||||
EventUtils.synthesizeKey("VK_DOWN", {}, view.styleWindow);
|
||||
|
||||
info("Waiting for autocomplete popup to be displayed");
|
||||
yield onSuggest;
|
||||
yield wait(1);
|
||||
|
||||
ok(view.popup && view.popup.isOpen, "Popup should be opened");
|
||||
|
||||
info("Reloading the page");
|
||||
yield reloadPage(inspector);
|
||||
|
||||
ok(!(view.popup && view.popup.isOpen), "Popup should be closed");
|
||||
});
|
|
@ -0,0 +1,47 @@
|
|||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
// Tests that the rule view shows expanders for properties with computed lists.
|
||||
|
||||
let TEST_URI = `
|
||||
<style type="text/css">
|
||||
#testid {
|
||||
margin: 4px;
|
||||
top: 0px;
|
||||
}
|
||||
</style>
|
||||
<h1 id="testid">Styled Node</h1>
|
||||
`;
|
||||
|
||||
add_task(function*() {
|
||||
yield addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI));
|
||||
let {inspector, view} = yield openRuleView();
|
||||
yield selectNode("#testid", inspector);
|
||||
yield testExpandersShown(inspector, view);
|
||||
});
|
||||
|
||||
function* testExpandersShown(inspector, view) {
|
||||
let rule = getRuleViewRuleEditor(view, 1).rule;
|
||||
|
||||
info("Check that the correct rules are visible");
|
||||
is(rule.selectorText, "#testid", "Second rule is #testid.");
|
||||
is(rule.textProps[0].name, "margin", "First property is margin.");
|
||||
is(rule.textProps[1].name, "top", "Second property is top.");
|
||||
|
||||
info("Check that the expanders are shown correctly");
|
||||
is(rule.textProps[0].editor.expander.style.visibility, "visible",
|
||||
"margin expander is visible.");
|
||||
is(rule.textProps[1].editor.expander.style.visibility, "hidden",
|
||||
"top expander is hidden.");
|
||||
ok(!rule.textProps[0].editor.expander.hasAttribute("open"),
|
||||
"margin computed list is closed.");
|
||||
ok(!rule.textProps[1].editor.expander.hasAttribute("open"),
|
||||
"top computed list is closed.");
|
||||
ok(!rule.textProps[0].editor.computed.hasChildNodes(),
|
||||
"margin computed list is empty before opening.");
|
||||
ok(!rule.textProps[1].editor.computed.hasChildNodes(),
|
||||
"top computed list is empty.");
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
"use strict";
|
||||
|
||||
// Tests that the rule view computed lists can be expanded/collapsed,
|
||||
// and contain the right subproperties.
|
||||
|
||||
let TEST_URI = `
|
||||
<style type="text/css">
|
||||
#testid {
|
||||
margin: 0px 1px 2px 3px;
|
||||
top: 0px;
|
||||
}
|
||||
</style>
|
||||
<h1 id="testid">Styled Node</h1>
|
||||
`;
|
||||
|
||||
add_task(function*() {
|
||||
yield addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI));
|
||||
let {inspector, view} = yield openRuleView();
|
||||
yield selectNode("#testid", inspector);
|
||||
yield testComputedList(inspector, view);
|
||||
});
|
||||
|
||||
function* testComputedList(inspector, view) {
|
||||
let rule = getRuleViewRuleEditor(view, 1).rule;
|
||||
let propEditor = rule.textProps[0].editor;
|
||||
let expander = propEditor.expander;
|
||||
|
||||
ok(!expander.hasAttribute("open"), "margin computed list is closed");
|
||||
|
||||
info("Opening the computed list of margin property")
|
||||
expander.click();
|
||||
ok(expander.hasAttribute("open"), "margin computed list is open");
|
||||
|
||||
let computed = propEditor.prop.computed;
|
||||
let computedDom = propEditor.computed;
|
||||
let propNames = [
|
||||
"margin-top",
|
||||
"margin-right",
|
||||
"margin-bottom",
|
||||
"margin-left"
|
||||
];
|
||||
|
||||
is(computed.length, propNames.length, "There should be 4 computed values");
|
||||
is(computedDom.children.length, propNames.length, "There should be 4 nodes in the DOM");
|
||||
propNames.forEach((propName, i) => {
|
||||
let propValue = i + "px";
|
||||
is(computed[i].name, propName, "Computed property #" + i + " has name " + propName);
|
||||
is(computed[i].value, propValue, "Computed property #" + i + " has value " + propValue);
|
||||
is(computedDom.getElementsByClassName("ruleview-propertyname")[i].textContent, propName,
|
||||
"Computed property #" + i + " in DOM has correct name");
|
||||
is(computedDom.getElementsByClassName("ruleview-propertyvalue")[i].textContent, propValue,
|
||||
"Computed property #" + i + " in DOM has correct value");
|
||||
});
|
||||
|
||||
info("Closing the computed list of margin property")
|
||||
expander.click();
|
||||
ok(!expander.hasAttribute("open"), "margin computed list is closed");
|
||||
|
||||
info("Opening the computed list of margin property")
|
||||
expander.click();
|
||||
ok(expander.hasAttribute("open"), "margin computed list is open");
|
||||
is(computed.length, propNames.length, "Still 4 computed values");
|
||||
is(computedDom.children.length, propNames.length, "Still 4 nodes in the DOM");
|
||||
}
|
|
@ -196,7 +196,10 @@ function* checkCopyStyle(view, node, menuItem, expectedPattern, hidden) {
|
|||
{button: 2, type: "contextmenu"}, view.styleWindow);
|
||||
yield onPopup;
|
||||
|
||||
is(view._contextmenu.menuitemCopy.hidden, true, "Copy hidden is as expected: true");
|
||||
ok(view._contextmenu.menuitemCopy.disabled,
|
||||
"Copy disabled is as expected: true");
|
||||
ok(!view._contextmenu.menuitemCopy.hidden,
|
||||
"Copy hidden is as expected: false");
|
||||
|
||||
is(view._contextmenu.menuitemCopyLocation.hidden,
|
||||
hidden.copyLocation,
|
||||
|
|
|
@ -64,4 +64,12 @@ function* editAndCheck(view) {
|
|||
is(computed[i].name, propName, "Computed property #" + i + " has name " + propName);
|
||||
is(computed[i].value, newPaddingValue, "Computed value of " + propName + " is as expected");
|
||||
});
|
||||
|
||||
propEditor.expander.click();
|
||||
let computedDom = propEditor.computed;
|
||||
is(computedDom.children.length, propNames.length, "There should be 4 nodes in the DOM");
|
||||
propNames.forEach((propName, i) => {
|
||||
is(computedDom.getElementsByClassName("ruleview-propertyvalue")[i].textContent,
|
||||
newPaddingValue, "Computed value of " + propName + " in DOM is as expected");
|
||||
});
|
||||
}
|
||||
|
|
|
@ -197,10 +197,12 @@ skip-if = buildapp == 'mulet'
|
|||
[browser_warn_user_about_replaced_api.js]
|
||||
[browser_webconsole_abbreviate_source_url.js]
|
||||
[browser_webconsole_allow_mixedcontent_securityerrors.js]
|
||||
tags = mcb
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_webconsole_assert.js]
|
||||
[browser_webconsole_basic_net_logging.js]
|
||||
[browser_webconsole_block_mixedcontent_securityerrors.js]
|
||||
tags = mcb
|
||||
skip-if = buildapp == 'mulet'
|
||||
[browser_webconsole_bug_579412_input_focus.js]
|
||||
[browser_webconsole_bug_580001_closing_after_completion.js]
|
||||
|
|
|
@ -63,34 +63,12 @@ function pushPrefEnv() {
|
|||
return deferred.promise;
|
||||
}
|
||||
|
||||
function waitForNotificationShown(notification, callback) {
|
||||
if (PopupNotifications.panel.state == "open") {
|
||||
executeSoon(callback);
|
||||
return;
|
||||
}
|
||||
PopupNotifications.panel.addEventListener("popupshown", function onShown() {
|
||||
PopupNotifications.panel.removeEventListener("popupshown", onShown);
|
||||
callback();
|
||||
}, false);
|
||||
notification.reshow();
|
||||
}
|
||||
|
||||
function mixedContentOverrideTest2(hud, browser) {
|
||||
let notification = PopupNotifications.getNotification("bad-content", browser);
|
||||
ok(notification, "Mixed Content Doorhanger did appear");
|
||||
let deferred = promise.defer();
|
||||
waitForNotificationShown(notification, () => {
|
||||
afterNotificationShown(hud, notification, deferred);
|
||||
});
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
function afterNotificationShown(hud, notification, deferred) {
|
||||
ok(PopupNotifications.panel.firstChild.isMixedContentBlocked,
|
||||
"OK: Mixed Content is being blocked");
|
||||
// Click on the doorhanger.
|
||||
PopupNotifications.panel.firstChild.disableMixedContentProtection();
|
||||
notification.remove();
|
||||
let {gIdentityHandler} = browser.ownerGlobal;
|
||||
ok(gIdentityHandler._identityBox.classList.contains("mixedActiveBlocked"),
|
||||
"Mixed Active Content state appeared on identity box");
|
||||
gIdentityHandler.disableMixedContentProtection();
|
||||
|
||||
waitForMessages({
|
||||
webconsole: hud,
|
||||
|
@ -114,6 +92,8 @@ function afterNotificationShown(hud, notification, deferred) {
|
|||
},
|
||||
],
|
||||
}).then(msgs => deferred.resolve(msgs), Cu.reportError);
|
||||
|
||||
return deferred.promise;
|
||||
}
|
||||
|
||||
function testClickOpenNewTab(hud, match) {
|
||||
|
|
|
@ -13,19 +13,21 @@
|
|||
-->
|
||||
<!ENTITY aboutPrivateBrowsing.width "25em">
|
||||
<!ENTITY aboutPrivateBrowsing.title "You're browsing privately">
|
||||
<!ENTITY aboutPrivateBrowsing.subtitle "&brandShortName; won't remember any history for this window.">
|
||||
<!ENTITY aboutPrivateBrowsing.subtitle "In this window, &brandShortName; will not remember any history.">
|
||||
|
||||
<!ENTITY aboutPrivateBrowsing.forgotten "In this window, &brandShortName; will not remember:">
|
||||
<!ENTITY aboutPrivateBrowsing.info.forgotten "Forgotten">
|
||||
<!ENTITY aboutPrivateBrowsing.info.history "History">
|
||||
<!ENTITY aboutPrivateBrowsing.info.search "Search">
|
||||
<!ENTITY aboutPrivateBrowsing.info.search "Searches">
|
||||
<!ENTITY aboutPrivateBrowsing.info.cookies "Cookies">
|
||||
<!ENTITY aboutPrivateBrowsing.info.temporaryFiles "Temporary Files">
|
||||
|
||||
<!ENTITY aboutPrivateBrowsing.kept "&brandShortName; will keep:">
|
||||
<!ENTITY aboutPrivateBrowsing.info.kept "Kept">
|
||||
<!ENTITY aboutPrivateBrowsing.info.downloads "Downloads">
|
||||
<!ENTITY aboutPrivateBrowsing.info.bookmarks "Bookmarks">
|
||||
|
||||
<!ENTITY aboutPrivateBrowsing.note "Your employer or Internet service provider can still track the pages you visit.">
|
||||
<!ENTITY aboutPrivateBrowsing.note "Please note that your employer or Internet service provider can still track the pages you visit.">
|
||||
<!ENTITY aboutPrivateBrowsing.learnMore "Learn More.">
|
||||
|
||||
<!-- LOCALIZATION NOTE (trackingProtection.width):
|
||||
|
@ -42,8 +44,7 @@
|
|||
<!ENTITY trackingProtection.state.enabled "ON">
|
||||
<!ENTITY trackingProtection.state.disabled "OFF">
|
||||
|
||||
<!ENTITY trackingProtection.description.enabled "Private Windows now block content that tracks your browsing activity.">
|
||||
<!ENTITY trackingProtection.description.disabled "Private Windows will not block content that tracks your browsing activity.">
|
||||
<!ENTITY trackingProtection.description "Private Windows now block parts of the page that may track your browsing activity.">
|
||||
|
||||
<!ENTITY trackingProtection.disable "Turn Tracking Protection Off">
|
||||
<!ENTITY trackingProtection.enable "Turn Tracking Protection On">
|
||||
|
|
|
@ -792,19 +792,6 @@ you can use these alternative items. Otherwise, their values should be empty. -
|
|||
<!ENTITY getUserMedia.audioCapture.label "Audio from the tab will be shared.">
|
||||
<!ENTITY getUserMedia.allWindowsShared.message "All visible windows on your screen will be shared.">
|
||||
|
||||
<!-- Bad Content Blocker Doorhanger Notification -->
|
||||
<!ENTITY badContentBlocked.moreinfo "Most websites will work properly even if content is blocked.">
|
||||
|
||||
<!ENTITY mixedContentBlocked2.message "Insecure content">
|
||||
<!ENTITY mixedContentBlocked2.moreinfo "Some unencrypted elements on this website have been blocked.">
|
||||
<!ENTITY mixedContentBlocked2.learnMore "Learn More">
|
||||
<!ENTITY mixedContentBlocked2.options "Options">
|
||||
<!ENTITY mixedContentBlocked2.unblock.label "Disable protection for now">
|
||||
<!ENTITY mixedContentBlocked2.unblock.accesskey "D">
|
||||
<!ENTITY mixedContentBlocked2.block.label "Enable protection">
|
||||
<!ENTITY mixedContentBlocked2.block.accesskey "E">
|
||||
<!ENTITY mixedContentBlocked2.disabled.message "Protection is disabled">
|
||||
|
||||
<!ENTITY trackingProtection.title "Tracking Protection">
|
||||
<!ENTITY trackingProtection.detectedBlocked3 "&brandShortName; is blocking parts of the page that may track your browsing.">
|
||||
<!ENTITY trackingProtection.detectedNotBlocked3 "This site includes elements that may track your browsing. You have disabled protection.">
|
||||
|
|
|
@ -43,3 +43,4 @@
|
|||
<!ENTITY done.title "Import Complete">
|
||||
<!ENTITY done.label "The following items were successfully imported:">
|
||||
|
||||
<!ENTITY closeSourceBrowser.label "Please ensure the selected browser is closed before continuing.">
|
||||
|
|
|
@ -8,10 +8,10 @@
|
|||
<!ENTITY dntTrackingNotOkay4.accesskey "n">
|
||||
<!ENTITY doNotTrackInfo.label "Learn More">
|
||||
<!ENTITY trackingProtection5.label "Use Tracking Protection">
|
||||
<!ENTITY trackingProtection5.accesskey "m">
|
||||
<!ENTITY trackingProtection5.accesskey "i">
|
||||
<!ENTITY trackingProtectionLearnMore.label "Learn more">
|
||||
<!ENTITY trackingProtectionPBM5.label "Use Tracking Protection in Private Windows">
|
||||
<!ENTITY trackingProtectionPBM5.accesskey "y">
|
||||
<!ENTITY trackingProtectionPBM5.accesskey "v">
|
||||
<!ENTITY trackingProtectionPBMLearnMore.label "Learn more">
|
||||
|
||||
<!ENTITY history.label "History">
|
||||
|
|
|
@ -1745,7 +1745,6 @@ toolbarbutton.chevron > .toolbarbutton-icon {
|
|||
%include ../shared/devtools/responsivedesign.inc.css
|
||||
%include ../shared/devtools/commandline.inc.css
|
||||
%include ../shared/plugin-doorhanger.inc.css
|
||||
%include ../shared/badcontent-doorhanger.inc.css
|
||||
%include ../shared/login-doorhanger.inc.css
|
||||
|
||||
%include downloads/indicator.css
|
||||
|
|
После Ширина: | Высота: | Размер: 411 B |
После Ширина: | Высота: | Размер: 453 B |
|
@ -66,11 +66,6 @@ browser.jar:
|
|||
skin/classic/browser/menuPanel-help@2x.png
|
||||
skin/classic/browser/menuPanel-small.png
|
||||
skin/classic/browser/menuPanel-small@2x.png
|
||||
skin/classic/browser/bad-content-blocked-16.png (../shared/bad-content-blocked-16.png)
|
||||
skin/classic/browser/bad-content-blocked-16@2x.png (../shared/bad-content-blocked-16@2x.png)
|
||||
skin/classic/browser/bad-content-blocked-64.png (../shared/bad-content-blocked-64.png)
|
||||
skin/classic/browser/bad-content-unblocked-16.png (../shared/bad-content-unblocked-16.png)
|
||||
skin/classic/browser/bad-content-unblocked-64.png (../shared/bad-content-unblocked-64.png)
|
||||
skin/classic/browser/monitor.png
|
||||
skin/classic/browser/monitor_16-10.png
|
||||
skin/classic/browser/notification-16.png
|
||||
|
@ -164,6 +159,8 @@ browser.jar:
|
|||
* skin/classic/browser/customizableui/panelUIOverlay.css (customizableui/panelUIOverlay.css)
|
||||
skin/classic/browser/customizableui/subView-arrow-back-inverted.png (../shared/customizableui/subView-arrow-back-inverted.png)
|
||||
skin/classic/browser/customizableui/subView-arrow-back-inverted-rtl.png (../shared/customizableui/subView-arrow-back-inverted-rtl.png)
|
||||
skin/classic/browser/customizableui/thumburger.png (customizableui/thumburger.png)
|
||||
skin/classic/browser/customizableui/thumburger-inverted.png (customizableui/thumburger-inverted.png)
|
||||
skin/classic/browser/customizableui/whimsy.png (../shared/customizableui/whimsy.png)
|
||||
skin/classic/browser/customizableui/whimsy@2x.png (../shared/customizableui/whimsy@2x.png)
|
||||
skin/classic/browser/customizableui/whimsy-bw.png (../shared/customizableui/whimsy-bw.png)
|
||||
|
|
|
@ -1661,6 +1661,11 @@ toolbarbutton[constrain-size="true"][cui-areatype="toolbar"] > .toolbarbutton-ba
|
|||
|
||||
%include ../shared/identity-block/identity-block.inc.css
|
||||
|
||||
#identity-box {
|
||||
padding-top: 2px;
|
||||
padding-bottom: 2px;
|
||||
}
|
||||
|
||||
#urlbar:not([focused="true"]) > #identity-box {
|
||||
margin-top: -1px;
|
||||
margin-bottom: -1px;
|
||||
|
@ -3362,7 +3367,6 @@ notification[value="loop-sharing-notification"] .messageImage {
|
|||
%include ../shared/devtools/responsivedesign.inc.css
|
||||
%include ../shared/devtools/commandline.inc.css
|
||||
%include ../shared/plugin-doorhanger.inc.css
|
||||
%include ../shared/badcontent-doorhanger.inc.css
|
||||
%include ../shared/login-doorhanger.inc.css
|
||||
|
||||
%include downloads/indicator.css
|
||||
|
|
После Ширина: | Высота: | Размер: 427 B |
После Ширина: | Высота: | Размер: 809 B |
После Ширина: | Высота: | Размер: 263 B |
После Ширина: | Высота: | Размер: 477 B |
После Ширина: | Высота: | Размер: 388 B |
После Ширина: | Высота: | Размер: 891 B |
|
@ -97,6 +97,8 @@
|
|||
#identity-box {
|
||||
margin-top: -1px !important;
|
||||
margin-bottom: -1px !important;
|
||||
padding-top: 3px !important;
|
||||
padding-bottom: 3px !important;
|
||||
}
|
||||
|
||||
/* Tab styling - make sure to use an inverted icon for the selected tab
|
||||
|
|
|
@ -80,14 +80,6 @@ browser.jar:
|
|||
skin/classic/browser/menuPanel-help@2x.png
|
||||
skin/classic/browser/menuPanel-small.png
|
||||
skin/classic/browser/menuPanel-small@2x.png
|
||||
skin/classic/browser/bad-content-blocked-16.png (../shared/bad-content-blocked-16.png)
|
||||
skin/classic/browser/bad-content-blocked-16@2x.png (../shared/bad-content-blocked-16@2x.png)
|
||||
skin/classic/browser/bad-content-blocked-64.png (../shared/bad-content-blocked-64.png)
|
||||
skin/classic/browser/bad-content-blocked-64@2x.png (../shared/bad-content-blocked-64@2x.png)
|
||||
skin/classic/browser/bad-content-unblocked-16.png (../shared/bad-content-unblocked-16.png)
|
||||
skin/classic/browser/bad-content-unblocked-16@2x.png (../shared/bad-content-unblocked-16@2x.png)
|
||||
skin/classic/browser/bad-content-unblocked-64.png (../shared/bad-content-unblocked-64.png)
|
||||
skin/classic/browser/bad-content-unblocked-64@2x.png (../shared/bad-content-unblocked-64@2x.png)
|
||||
skin/classic/browser/panel-expander-closed.png
|
||||
skin/classic/browser/panel-expander-closed@2x.png
|
||||
skin/classic/browser/panel-expander-open.png
|
||||
|
@ -218,6 +210,10 @@ browser.jar:
|
|||
skin/classic/browser/customizableui/subView-arrow-back-inverted-rtl.png (../shared/customizableui/subView-arrow-back-inverted-rtl.png)
|
||||
skin/classic/browser/customizableui/subView-arrow-back-inverted-rtl@2x.png (../shared/customizableui/subView-arrow-back-inverted-rtl@2x.png)
|
||||
* skin/classic/browser/customizableui/panelUIOverlay.css (customizableui/panelUIOverlay.css)
|
||||
skin/classic/browser/customizableui/thumburger-inverted.png (customizableui/thumburger-inverted.png)
|
||||
skin/classic/browser/customizableui/thumburger-inverted@2x.png (customizableui/thumburger-inverted@2x.png)
|
||||
skin/classic/browser/customizableui/thumburger.png (customizableui/thumburger.png)
|
||||
skin/classic/browser/customizableui/thumburger@2x.png (customizableui/thumburger@2x.png)
|
||||
skin/classic/browser/customizableui/whimsy.png (../shared/customizableui/whimsy.png)
|
||||
skin/classic/browser/customizableui/whimsy@2x.png (../shared/customizableui/whimsy@2x.png)
|
||||
skin/classic/browser/customizableui/whimsy-bw.png (../shared/customizableui/whimsy-bw.png)
|
||||
|
@ -619,6 +615,8 @@ browser.jar:
|
|||
skin/classic/browser/yosemite/reload-stop-go@2x.png (reload-stop-go-yosemite@2x.png)
|
||||
skin/classic/browser/yosemite/sync-horizontalbar.png (sync-horizontalbar-yosemite.png)
|
||||
skin/classic/browser/yosemite/sync-horizontalbar@2x.png (sync-horizontalbar-yosemite@2x.png)
|
||||
skin/classic/browser/yosemite/thumburger.png (customizableui/thumburger-yosemite.png)
|
||||
skin/classic/browser/yosemite/thumburger@2x.png (customizableui/thumburger-yosemite@2x.png)
|
||||
skin/classic/browser/notification-pluginNormal.png (../shared/plugins/notification-pluginNormal.png)
|
||||
skin/classic/browser/notification-pluginAlert.png (../shared/plugins/notification-pluginAlert.png)
|
||||
skin/classic/browser/notification-pluginBlocked.png (../shared/plugins/notification-pluginBlocked.png)
|
||||
|
@ -649,6 +647,8 @@ browser.jar:
|
|||
% override chrome://browser/skin/places/toolbar.png chrome://browser/skin/lion/places/toolbar.png os=Darwin osversion>=10.7
|
||||
% override chrome://browser/skin/Toolbar.png chrome://browser/skin/yosemite/Toolbar.png os=Darwin osversion>=10.10
|
||||
% override chrome://browser/skin/Toolbar@2x.png chrome://browser/skin/yosemite/Toolbar@2x.png os=Darwin osversion>=10.10
|
||||
% override chrome://browser/skin/customizableui/thumburger.png chrome://browser/skin/yosemite/thumburger.png os=Darwin osversion>=10.10
|
||||
% override chrome://browser/skin/customizableui/thumburger@2x.png chrome://browser/skin/yosemite/thumburger@2x.png os=Darwin osversion>=10.10
|
||||
% override chrome://browser/skin/menuPanel.png chrome://browser/skin/yosemite/menuPanel.png os=Darwin osversion>=10.10
|
||||
% override chrome://browser/skin/menuPanel@2x.png chrome://browser/skin/yosemite/menuPanel@2x.png os=Darwin osversion>=10.10
|
||||
% override chrome://browser/skin/loop/menuPanel.png chrome://browser/skin/yosemite/loop/menuPanel.png os=Darwin osversion>=10.10
|
||||
|
|
Двоичные данные
browser/themes/shared/bad-content-blocked-16.png
До Ширина: | Высота: | Размер: 346 B |
Двоичные данные
browser/themes/shared/bad-content-blocked-16@2x.png
До Ширина: | Высота: | Размер: 691 B |
Двоичные данные
browser/themes/shared/bad-content-blocked-64.png
До Ширина: | Высота: | Размер: 2.0 KiB |
Двоичные данные
browser/themes/shared/bad-content-blocked-64@2x.png
До Ширина: | Высота: | Размер: 4.7 KiB |
Двоичные данные
browser/themes/shared/bad-content-unblocked-16.png
До Ширина: | Высота: | Размер: 462 B |
Двоичные данные
browser/themes/shared/bad-content-unblocked-16@2x.png
До Ширина: | Высота: | Размер: 831 B |
Двоичные данные
browser/themes/shared/bad-content-unblocked-64.png
До Ширина: | Высота: | Размер: 3.1 KiB |
Двоичные данные
browser/themes/shared/bad-content-unblocked-64@2x.png
До Ширина: | Высота: | Размер: 7.3 KiB |
|
@ -1,21 +0,0 @@
|
|||
.popup-notification-item-title[popupid="bad-content"] {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.popup-notification-item-message[popupid="bad-content"] {
|
||||
width: 17em;
|
||||
}
|
||||
|
||||
.popup-notification-item-message[popupid="bad-content"][mixedblockdisabled]:not(.popup-notification-item-message-critical),
|
||||
.popup-notification-item-message[popupid="bad-content"][trackingblockdisabled]:not(.popup-notification-item-message-critical) {
|
||||
color: GrayText;
|
||||
}
|
||||
|
||||
.popup-notification-item-message-critical[popupid="bad-content"] {
|
||||
color: #d74345;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.popup-notification-footer[popupid="bad-content"] {
|
||||
padding-top: 1em;
|
||||
}
|
|
@ -10,6 +10,7 @@
|
|||
--tab-toolbar-navbar-overlap: 0px;
|
||||
--space-above-tabbar: 0px;
|
||||
--toolbarbutton-text-shadow: none;
|
||||
--backbutton-urlbar-overlap: 0px;
|
||||
}
|
||||
|
||||
:root[devtoolstheme="dark"] {
|
||||
|
|
|
@ -221,10 +221,10 @@
|
|||
width: 4.5vw;
|
||||
}
|
||||
|
||||
.call-tree-header[type="allocations"],
|
||||
.call-tree-cell[type="allocations"],
|
||||
.call-tree-header[type="self-allocations"],
|
||||
.call-tree-cell[type="self-allocations"] {
|
||||
.call-tree-header[type="count"],
|
||||
.call-tree-cell[type="count"],
|
||||
.call-tree-header[type="self-count"],
|
||||
.call-tree-cell[type="self-count"] {
|
||||
width: 9vw;
|
||||
}
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
transparent 85%);
|
||||
border-image-slice: 1;
|
||||
font-size: .9em;
|
||||
padding: 2px 5px;
|
||||
padding: 3px 5px;
|
||||
margin-inline-end: 4px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
|
|
@ -70,15 +70,6 @@
|
|||
list-style-image: url(chrome://global/skin/icons/webapps-64.png);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="bad-content"] {
|
||||
list-style-image: url(chrome://browser/skin/bad-content-blocked-64.png);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="bad-content"][mixedblockdisabled],
|
||||
.popup-notification-icon[popupid="bad-content"][trackingblockdisabled] {
|
||||
list-style-image: url(chrome://browser/skin/bad-content-unblocked-64.png);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="webRTC-sharingDevices"],
|
||||
.popup-notification-icon[popupid="webRTC-shareDevices"] {
|
||||
list-style-image: url(chrome://browser/skin/webRTC-shareDevice-64.png);
|
||||
|
@ -221,16 +212,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
.bad-content-blocked-notification-icon,
|
||||
#bad-content-blocked-notification-icon {
|
||||
list-style-image: url(chrome://browser/skin/bad-content-blocked-16.png);
|
||||
}
|
||||
|
||||
.bad-content-unblocked-notification-icon,
|
||||
#bad-content-unblocked-notification-icon {
|
||||
list-style-image: url(chrome://browser/skin/bad-content-unblocked-16.png);
|
||||
}
|
||||
|
||||
.webRTC-shareDevices-notification-icon,
|
||||
#webRTC-shareDevices-notification-icon {
|
||||
list-style-image: url(chrome://browser/skin/webRTC-shareDevice-16.png);
|
||||
|
@ -421,14 +402,6 @@
|
|||
-moz-image-region: rect(0, 96px, 32px, 64px);
|
||||
}
|
||||
|
||||
#bad-content-blocked-notification-icon {
|
||||
list-style-image: url(chrome://browser/skin/bad-content-blocked-16@2x.png);
|
||||
}
|
||||
|
||||
#bad-content-unblocked-notification-icon {
|
||||
list-style-image: url(chrome://browser/skin/bad-content-unblocked-16@2x.png);
|
||||
}
|
||||
|
||||
.web-notifications-notification-icon,
|
||||
#web-notifications-notification-icon {
|
||||
list-style-image: url(chrome://browser/skin/notification-16@2x.png);
|
||||
|
@ -463,15 +436,6 @@
|
|||
list-style-image: url(chrome://browser/skin/notification-64@2x.png);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="bad-content"] {
|
||||
list-style-image: url(chrome://browser/skin/bad-content-blocked-64@2x.png);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="bad-content"][mixedblockdisabled],
|
||||
.popup-notification-icon[popupid="bad-content"][trackingblockdisabled] {
|
||||
list-style-image: url(chrome://browser/skin/bad-content-unblocked-64@2x.png);
|
||||
}
|
||||
|
||||
.popup-notification-icon[popupid="pointerLock"] {
|
||||
list-style-image: url(chrome://browser/skin/pointerLock-64@2x.png);
|
||||
}
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
--tab-separator-image: url(chrome://browser/skin/tabbrowser/tab-separator.png);
|
||||
--tab-separator-size: 3px 100%;
|
||||
--tab-separator-opacity: 1;
|
||||
--tab-stroke-background-size: auto 100%;
|
||||
}
|
||||
|
||||
%define tabCurveWidth 30px
|
||||
|
@ -376,7 +377,7 @@
|
|||
@fgTabTexture@,
|
||||
none;
|
||||
background-repeat: repeat-x;
|
||||
background-size: auto 100%;
|
||||
background-size: var(--tab-stroke-background-size), auto 100%;
|
||||
/* The padding-top combined with background-clip: content-box (the bottom-most) ensure the
|
||||
background-color doesn't extend above the top border. */
|
||||
padding-top: 2px;
|
||||
|
@ -390,7 +391,7 @@
|
|||
@fgTabTextureLWT@;/*,
|
||||
lwtHeader;*/
|
||||
/* Don't stretch the LWT header images */
|
||||
background-size: auto 100%, auto 100%, auto auto;
|
||||
background-size: var(--tab-stroke-background-size), auto 100%, auto auto;
|
||||
}
|
||||
|
||||
/* These LWT styles are normally overridden by browser-lightweightTheme.css */
|
||||
|
|
|
@ -124,6 +124,15 @@ toolbar[brighttext] #sync-button[status="active"] {
|
|||
-moz-image-region: rect(0, 486px, 18px, 468px);
|
||||
}
|
||||
|
||||
#PanelUI-menu-button.thumburger {
|
||||
list-style-image: url("chrome://browser/skin/customizableui/thumburger.png") !important;
|
||||
-moz-image-region: auto !important;
|
||||
}
|
||||
|
||||
toolbar[brighttext] #PanelUI-menu-button.thumburger {
|
||||
list-style-image: url("chrome://browser/skin/customizableui/thumburger-inverted.png") !important;
|
||||
}
|
||||
|
||||
#edit-controls:not(@inAnyPanel@) > #cut-button {
|
||||
-moz-image-region: rect(0, 504px, 18px, 486px);
|
||||
}
|
||||
|
@ -430,6 +439,14 @@ toolbar[brighttext] #loop-button {
|
|||
%endif
|
||||
}
|
||||
|
||||
#PanelUI-menu-button.thumburger {
|
||||
list-style-image: url("chrome://browser/skin/customizableui/thumburger@2x.png") !important;
|
||||
}
|
||||
|
||||
toolbar[brighttext] #PanelUI-menu-button.thumburger {
|
||||
list-style-image: url("chrome://browser/skin/customizableui/thumburger-inverted@2x.png") !important;
|
||||
}
|
||||
|
||||
#loop-button {
|
||||
list-style-image: url("chrome://browser/skin/loop/toolbar@2x.png");
|
||||
-moz-image-region: rect(0, 36px, 36px, 0);
|
||||
|
|
|
@ -317,7 +317,6 @@
|
|||
#nav-bar {
|
||||
background-clip: padding-box;
|
||||
background-image: linear-gradient(@toolbarHighlight@, transparent);
|
||||
box-shadow: 0 1px 0 @toolbarHighlight@ inset;
|
||||
}
|
||||
|
||||
@media (-moz-os-version: windows-xp),
|
||||
|
@ -326,6 +325,7 @@
|
|||
(-moz-os-version: windows-win8) {
|
||||
#nav-bar {
|
||||
border-top: 1px solid @toolbarShadowColor@ !important;
|
||||
box-shadow: 0 1px 0 @toolbarHighlight@ inset;
|
||||
}
|
||||
@media not all and (-moz-windows-compositor) {
|
||||
#TabsToolbar[collapsed="true"] + #nav-bar {
|
||||
|
@ -609,12 +609,20 @@ menuitem.bookmark-item {
|
|||
#loop-button {
|
||||
list-style-image: url(chrome://browser/skin/loop/toolbar-lunaSilver.png)
|
||||
}
|
||||
|
||||
#PanelUI-menu-button.thumburger {
|
||||
list-style-image: url("chrome://browser/skin/customizableui/thumburger-lunaSilver.png") !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media (-moz-windows-theme: luna-silver) and (min-resolution: 1.1dppx) {
|
||||
#loop-button {
|
||||
list-style-image: url(chrome://browser/skin/loop/toolbar-lunaSilver@2x.png)
|
||||
}
|
||||
|
||||
#PanelUI-menu-button.thumburger {
|
||||
list-style-image: url("chrome://browser/skin/customizableui/thumburger-lunaSilver@2x.png") !important;
|
||||
}
|
||||
}
|
||||
|
||||
#main-window:not([customizing]) .toolbarbutton-1[disabled=true] > .toolbarbutton-icon,
|
||||
|
@ -2050,10 +2058,8 @@ richlistitem[type~="action"][actiontype="switchtab"] > .ac-url-box > .ac-action-
|
|||
content: none;
|
||||
}
|
||||
|
||||
.tab-background-middle[visuallyselected=true] {
|
||||
/* Setting background-size to "0 0" for the first
|
||||
background-image to remove the stroke. */
|
||||
background-size: 0 0, auto 100%, auto 100%;
|
||||
#TabsToolbar {
|
||||
--tab-stroke-background-size: 0 0;
|
||||
}
|
||||
|
||||
:root {
|
||||
|
@ -2589,7 +2595,6 @@ notification[value="loop-sharing-notification"] .messageImage {
|
|||
%include ../shared/devtools/responsivedesign.inc.css
|
||||
%include ../shared/devtools/commandline.inc.css
|
||||
%include ../shared/plugin-doorhanger.inc.css
|
||||
%include ../shared/badcontent-doorhanger.inc.css
|
||||
%include ../shared/login-doorhanger.inc.css
|
||||
|
||||
%include downloads/indicator.css
|
||||
|
|
После Ширина: | Высота: | Размер: 610 B |
После Ширина: | Высота: | Размер: 1.4 KiB |
После Ширина: | Высота: | Размер: 565 B |
После Ширина: | Высота: | Размер: 1.2 KiB |
После Ширина: | Высота: | Размер: 411 B |
После Ширина: | Высота: | Размер: 754 B |
После Ширина: | Высота: | Размер: 619 B |
После Ширина: | Высота: | Размер: 1.3 KiB |
После Ширина: | Высота: | Размер: 220 B |
После Ширина: | Высота: | Размер: 379 B |
После Ширина: | Высота: | Размер: 201 B |
После Ширина: | Высота: | Размер: 343 B |
|
@ -55,6 +55,12 @@
|
|||
#forward-button {
|
||||
list-style-image: url("chrome://browser/skin/Toolbar.png");
|
||||
}
|
||||
|
||||
toolbar[brighttext] #back-button,
|
||||
toolbar[brighttext] #forward-button {
|
||||
list-style-image: url("chrome://browser/skin/Toolbar-inverted.png");
|
||||
}
|
||||
|
||||
/* The back button region is already set in devedition.inc.css */
|
||||
#forward-button {
|
||||
-moz-image-region: rect(0px, 72px, 18px, 54px);
|
||||
|
|
|
@ -81,11 +81,6 @@ browser.jar:
|
|||
skin/classic/browser/menuPanel-small@2x.png
|
||||
skin/classic/browser/menuPanel-small-aero.png
|
||||
skin/classic/browser/menuPanel-small-aero@2x.png
|
||||
skin/classic/browser/bad-content-blocked-16.png (../shared/bad-content-blocked-16.png)
|
||||
skin/classic/browser/bad-content-blocked-16@2x.png (../shared/bad-content-blocked-16@2x.png)
|
||||
skin/classic/browser/bad-content-blocked-64.png (../shared/bad-content-blocked-64.png)
|
||||
skin/classic/browser/bad-content-unblocked-16.png (../shared/bad-content-unblocked-16.png)
|
||||
skin/classic/browser/bad-content-unblocked-64.png (../shared/bad-content-unblocked-64.png)
|
||||
skin/classic/browser/monitor.png
|
||||
skin/classic/browser/monitor_16-10.png
|
||||
skin/classic/browser/notification-16.png
|
||||
|
@ -224,6 +219,18 @@ browser.jar:
|
|||
skin/classic/browser/customizableui/subView-arrow-back-inverted.png (../shared/customizableui/subView-arrow-back-inverted.png)
|
||||
skin/classic/browser/customizableui/subView-arrow-back-inverted@2x.png (../shared/customizableui/subView-arrow-back-inverted@2x.png)
|
||||
skin/classic/browser/customizableui/subView-arrow-back-inverted-rtl.png (../shared/customizableui/subView-arrow-back-inverted-rtl.png)
|
||||
skin/classic/browser/customizableui/thumburger-XP.png (customizableui/thumburger-XP.png)
|
||||
skin/classic/browser/customizableui/thumburger-XP@2x.png (customizableui/thumburger-XP@2x.png)
|
||||
skin/classic/browser/customizableui/thumburger-aero.png (customizableui/thumburger-aero.png)
|
||||
skin/classic/browser/customizableui/thumburger-aero@2x.png (customizableui/thumburger-aero@2x.png)
|
||||
skin/classic/browser/customizableui/thumburger-inverted.png (customizableui/thumburger-inverted.png)
|
||||
skin/classic/browser/customizableui/thumburger-inverted@2x.png (customizableui/thumburger-inverted@2x.png)
|
||||
skin/classic/browser/customizableui/thumburger-lunaSilver.png (customizableui/thumburger-lunaSilver.png)
|
||||
skin/classic/browser/customizableui/thumburger-lunaSilver@2x.png (customizableui/thumburger-lunaSilver@2x.png)
|
||||
skin/classic/browser/customizableui/thumburger-win8.png (customizableui/thumburger-win8.png)
|
||||
skin/classic/browser/customizableui/thumburger-win8@2x.png (customizableui/thumburger-win8@2x.png)
|
||||
skin/classic/browser/customizableui/thumburger.png (customizableui/thumburger.png)
|
||||
skin/classic/browser/customizableui/thumburger@2x.png (customizableui/thumburger@2x.png)
|
||||
skin/classic/browser/customizableui/whimsy.png (../shared/customizableui/whimsy.png)
|
||||
skin/classic/browser/customizableui/whimsy@2x.png (../shared/customizableui/whimsy@2x.png)
|
||||
skin/classic/browser/customizableui/whimsy-bw.png (../shared/customizableui/whimsy-bw.png)
|
||||
|
@ -702,6 +709,16 @@ browser.jar:
|
|||
% override chrome://browser/skin/Toolbar.png chrome://browser/skin/Toolbar-aero.png os=WINNT osversion=6.1
|
||||
% override chrome://browser/skin/Toolbar.png chrome://browser/skin/Toolbar-win8.png os=WINNT osversion=6.2
|
||||
% override chrome://browser/skin/Toolbar.png chrome://browser/skin/Toolbar-win8.png os=WINNT osversion=6.3
|
||||
% override chrome://browser/skin/customizableui/thumburger.png chrome://browser/skin/customizableui/thumburger-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/customizableui/thumburger.png chrome://browser/skin/customizableui/thumburger-aero.png os=WINNT osversion=6
|
||||
% override chrome://browser/skin/customizableui/thumburger.png chrome://browser/skin/customizableui/thumburger-aero.png os=WINNT osversion=6.1
|
||||
% override chrome://browser/skin/customizableui/thumburger.png chrome://browser/skin/customizableui/thumburger-win8.png os=WINNT osversion=6.2
|
||||
% override chrome://browser/skin/customizableui/thumburger.png chrome://browser/skin/customizableui/thumburger-win8.png os=WINNT osversion=6.3
|
||||
% override chrome://browser/skin/customizableui/thumburger@2x.png chrome://browser/skin/customizableui/thumburger-XP@2x.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/customizableui/thumburger@2x.png chrome://browser/skin/customizableui/thumburger-aero@2x.png os=WINNT osversion=6
|
||||
% override chrome://browser/skin/customizableui/thumburger@2x.png chrome://browser/skin/customizableui/thumburger-aero@2x.png os=WINNT osversion=6.1
|
||||
% override chrome://browser/skin/customizableui/thumburger@2x.png chrome://browser/skin/customizableui/thumburger-win8@2x.png os=WINNT osversion=6.2
|
||||
% override chrome://browser/skin/customizableui/thumburger@2x.png chrome://browser/skin/customizableui/thumburger-win8@2x.png os=WINNT osversion=6.3
|
||||
% override chrome://browser/skin/loop/toolbar.png chrome://browser/skin/loop/toolbar-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/loop/toolbar.png chrome://browser/skin/loop/toolbar-aero.png os=WINNT osversion=6
|
||||
% override chrome://browser/skin/loop/toolbar.png chrome://browser/skin/loop/toolbar-aero.png os=WINNT osversion=6.1
|
||||
|
|
|
@ -5,6 +5,7 @@ support-files =
|
|||
[browser_bug593387.js]
|
||||
skip-if = e10s # Bug ?????? - test directly touches content (contentWindow.iframe.addEventListener)
|
||||
[browser_bug902350.js]
|
||||
tags = mcb
|
||||
skip-if = e10s # Bug ?????? - test e10s utils don't support load events from iframe etc, which this test relies on.
|
||||
[browser_messagemanager_loadprocessscript.js]
|
||||
[browser_messagemanager_targetframeloader.js]
|
||||
|
|