mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Merge mozilla-central to mozilla-inbound
This commit is contained in:
commit
edb48de851
@ -78,12 +78,10 @@ browser/components/shell/**
|
||||
browser/components/tabview/**
|
||||
browser/components/translation/**
|
||||
browser/components/uitour/**
|
||||
browser/experiments/**
|
||||
browser/extensions/pdfjs/**
|
||||
browser/extensions/shumway/**
|
||||
browser/fuel/**
|
||||
browser/locales/**
|
||||
browser/modules/**
|
||||
|
||||
# Loop specific exclusions
|
||||
|
||||
|
@ -108,6 +108,10 @@ var developerHUD = {
|
||||
this._logging = enabled;
|
||||
});
|
||||
|
||||
SettingsListener.observe('hud.telemetry.logging', _telemetryDebug, enabled => {
|
||||
_telemetryDebug = enabled;
|
||||
});
|
||||
|
||||
SettingsListener.observe('metrics.selectedMetrics.level', "", level => {
|
||||
this._telemetry = (level === 'Enhanced');
|
||||
});
|
||||
|
@ -1391,6 +1391,8 @@ Services.obs.addObserver(function resetProfile(subject, topic, data) {
|
||||
appStartup.quit(Ci.nsIAppStartup.eForceQuit);
|
||||
}, 'b2g-reset-profile', false);
|
||||
|
||||
var showInstallScreen;
|
||||
|
||||
if (AppConstants.MOZ_GRAPHENE) {
|
||||
const restoreWindowGeometry = () => {
|
||||
let screenX = Services.prefs.getIntPref("b2g.nativeWindowGeometry.screenX");
|
||||
@ -1428,7 +1430,7 @@ if (AppConstants.MOZ_GRAPHENE) {
|
||||
const showNativeWindow = () => baseWindow.visibility = true;
|
||||
const hideNativeWindow = () => baseWindow.visibility = false;
|
||||
|
||||
const showInstallScreen = () => {
|
||||
showInstallScreen = () => {
|
||||
const grapheneStrings =
|
||||
Services.strings.createBundle('chrome://b2g-l10n/locale/graphene.properties');
|
||||
document.querySelector('#installing > .message').textContent =
|
||||
|
@ -21,7 +21,7 @@
|
||||
<!--
|
||||
B2G repositories for all targets
|
||||
-->
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="d069027f9af6f835ef869f1f01b52339e5a3f423"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="14aefb2519becfa32f31bcc3c9c995693421f19c"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4a962bdab532e18f53e9d2d114c349983262c6b7"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="ac7e9ae8a24ab4a3f3da801ca53f95f39a32b89f"/>
|
||||
<project name="platform_hardware_libhardware_moz" path="hardware/libhardware_moz" remote="b2g" revision="fdf3a143dc777e5f9d33a88373af7ea161d3b440"/>
|
||||
@ -35,7 +35,7 @@
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="84e644fc7bb99f865374b55e13b36c6760148e53"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="83032cb35d4a84ba28b3e829feae3f697d13f0b3"/>
|
||||
<!-- Stock Android things -->
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="95bb5b66b3ec5769c3de8d3f25d681787418e7d2"/>
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="ebdad82e61c16772f6cd47e9f11936bf6ebe9aa0"/>
|
||||
|
@ -21,7 +21,7 @@
|
||||
<!--
|
||||
B2G repositories for all targets
|
||||
-->
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="d069027f9af6f835ef869f1f01b52339e5a3f423"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="14aefb2519becfa32f31bcc3c9c995693421f19c"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4a962bdab532e18f53e9d2d114c349983262c6b7"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="ac7e9ae8a24ab4a3f3da801ca53f95f39a32b89f"/>
|
||||
<project name="platform_hardware_libhardware_moz" path="hardware/libhardware_moz" remote="b2g" revision="fdf3a143dc777e5f9d33a88373af7ea161d3b440"/>
|
||||
@ -35,7 +35,7 @@
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="84e644fc7bb99f865374b55e13b36c6760148e53"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="83032cb35d4a84ba28b3e829feae3f697d13f0b3"/>
|
||||
<!-- Stock Android things -->
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="95bb5b66b3ec5769c3de8d3f25d681787418e7d2"/>
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="ebdad82e61c16772f6cd47e9f11936bf6ebe9aa0"/>
|
||||
|
@ -21,7 +21,7 @@
|
||||
<!--
|
||||
B2G repositories for all targets
|
||||
-->
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="d069027f9af6f835ef869f1f01b52339e5a3f423"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="14aefb2519becfa32f31bcc3c9c995693421f19c"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4a962bdab532e18f53e9d2d114c349983262c6b7"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="ac7e9ae8a24ab4a3f3da801ca53f95f39a32b89f"/>
|
||||
<project name="platform_hardware_libhardware_moz" path="hardware/libhardware_moz" remote="b2g" revision="fdf3a143dc777e5f9d33a88373af7ea161d3b440"/>
|
||||
|
@ -21,7 +21,7 @@
|
||||
<!--
|
||||
B2G repositories for all targets
|
||||
-->
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="d069027f9af6f835ef869f1f01b52339e5a3f423"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="14aefb2519becfa32f31bcc3c9c995693421f19c"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4a962bdab532e18f53e9d2d114c349983262c6b7"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="ac7e9ae8a24ab4a3f3da801ca53f95f39a32b89f"/>
|
||||
<project name="platform_hardware_libhardware_moz" path="hardware/libhardware_moz" remote="b2g" revision="fdf3a143dc777e5f9d33a88373af7ea161d3b440"/>
|
||||
@ -31,7 +31,7 @@
|
||||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="84e644fc7bb99f865374b55e13b36c6760148e53"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="83032cb35d4a84ba28b3e829feae3f697d13f0b3"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
|
||||
<!-- Stock Android things -->
|
||||
@ -41,7 +41,7 @@
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="b89fda71fcd0fa0cf969310e75be3ea33e048b44"/>
|
||||
<project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="2e7d5348f35575870b3c7e567a9a9f6d66f8d6c5"/>
|
||||
<project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" revision="1342fd7b4b000ac3e76a5dfe111a0de9d710b4c8"/>
|
||||
<project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9" revision="babc41b5ee0e89a140a479b680887a9004a41996"/>
|
||||
<project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9" revision="78948bc4d41c9657d7e2a1a84a21fa2a0eee2504"/>
|
||||
<project groups="linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" path="prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" revision="1b26ad444462ccbd97f6319565b4735f7bd779e5"/>
|
||||
<project name="device/common" path="device/common" revision="4e1a38704dcfadef60ed2da3cfeba02a56b069d2"/>
|
||||
<project name="device/sample" path="device/sample" revision="b045905b46c8b4ee630d0c2aee7db63eaec722d9"/>
|
||||
|
@ -21,7 +21,7 @@
|
||||
<!--
|
||||
B2G repositories for all targets
|
||||
-->
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="d069027f9af6f835ef869f1f01b52339e5a3f423"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="14aefb2519becfa32f31bcc3c9c995693421f19c"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4a962bdab532e18f53e9d2d114c349983262c6b7"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="ac7e9ae8a24ab4a3f3da801ca53f95f39a32b89f"/>
|
||||
<project name="platform_hardware_libhardware_moz" path="hardware/libhardware_moz" remote="b2g" revision="fdf3a143dc777e5f9d33a88373af7ea161d3b440"/>
|
||||
@ -34,7 +34,7 @@
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="84e644fc7bb99f865374b55e13b36c6760148e53"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="83032cb35d4a84ba28b3e829feae3f697d13f0b3"/>
|
||||
<!-- Stock Android things -->
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="f92a936f2aa97526d4593386754bdbf02db07a12"/>
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="6e47ff2790f5656b5b074407829ceecf3e6188c4"/>
|
||||
|
@ -21,7 +21,7 @@
|
||||
<!--
|
||||
B2G repositories for all targets
|
||||
-->
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="d069027f9af6f835ef869f1f01b52339e5a3f423"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="14aefb2519becfa32f31bcc3c9c995693421f19c"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4a962bdab532e18f53e9d2d114c349983262c6b7"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="ac7e9ae8a24ab4a3f3da801ca53f95f39a32b89f"/>
|
||||
<project name="platform_hardware_libhardware_moz" path="hardware/libhardware_moz" remote="b2g" revision="fdf3a143dc777e5f9d33a88373af7ea161d3b440"/>
|
||||
@ -34,7 +34,7 @@
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="84e644fc7bb99f865374b55e13b36c6760148e53"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="83032cb35d4a84ba28b3e829feae3f697d13f0b3"/>
|
||||
<!-- Stock Android things -->
|
||||
<project groups="pdk,linux" name="platform/prebuilts/clang/linux-x86/host/3.5" path="prebuilts/clang/linux-x86/host/3.5" revision="ffc05a232799fe8fcb3e47b7440b52b1fb4244c0"/>
|
||||
<project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" path="prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" revision="337e0ef5e40f02a1ae59b90db0548976c70a7226"/>
|
||||
|
@ -21,7 +21,7 @@
|
||||
<!--
|
||||
B2G repositories for all targets
|
||||
-->
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="d069027f9af6f835ef869f1f01b52339e5a3f423"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="14aefb2519becfa32f31bcc3c9c995693421f19c"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4a962bdab532e18f53e9d2d114c349983262c6b7"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="ac7e9ae8a24ab4a3f3da801ca53f95f39a32b89f"/>
|
||||
<project name="platform_hardware_libhardware_moz" path="hardware/libhardware_moz" remote="b2g" revision="fdf3a143dc777e5f9d33a88373af7ea161d3b440"/>
|
||||
|
@ -21,7 +21,7 @@
|
||||
<!--
|
||||
B2G repositories for all targets
|
||||
-->
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="d069027f9af6f835ef869f1f01b52339e5a3f423"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="14aefb2519becfa32f31bcc3c9c995693421f19c"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4a962bdab532e18f53e9d2d114c349983262c6b7"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="ac7e9ae8a24ab4a3f3da801ca53f95f39a32b89f"/>
|
||||
<project name="platform_hardware_libhardware_moz" path="hardware/libhardware_moz" remote="b2g" revision="fdf3a143dc777e5f9d33a88373af7ea161d3b440"/>
|
||||
@ -35,7 +35,7 @@
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="84e644fc7bb99f865374b55e13b36c6760148e53"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="83032cb35d4a84ba28b3e829feae3f697d13f0b3"/>
|
||||
<!-- Stock Android things -->
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="95bb5b66b3ec5769c3de8d3f25d681787418e7d2"/>
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="ebdad82e61c16772f6cd47e9f11936bf6ebe9aa0"/>
|
||||
|
@ -1,9 +1,9 @@
|
||||
{
|
||||
"git": {
|
||||
"git_revision": "d069027f9af6f835ef869f1f01b52339e5a3f423",
|
||||
"git_revision": "14aefb2519becfa32f31bcc3c9c995693421f19c",
|
||||
"remote": "https://git.mozilla.org/releases/gaia.git",
|
||||
"branch": ""
|
||||
},
|
||||
"revision": "87642662c7721f18575be17ae42c81782e5f040a",
|
||||
"revision": "e384f9eb4a149302c38df25a4aa772ddd1415f7e",
|
||||
"repo_path": "integration/gaia-central"
|
||||
}
|
||||
|
@ -21,7 +21,7 @@
|
||||
<!--
|
||||
B2G repositories for all targets
|
||||
-->
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="d069027f9af6f835ef869f1f01b52339e5a3f423"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="14aefb2519becfa32f31bcc3c9c995693421f19c"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4a962bdab532e18f53e9d2d114c349983262c6b7"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="ac7e9ae8a24ab4a3f3da801ca53f95f39a32b89f"/>
|
||||
<project name="platform_hardware_libhardware_moz" path="hardware/libhardware_moz" remote="b2g" revision="fdf3a143dc777e5f9d33a88373af7ea161d3b440"/>
|
||||
@ -35,7 +35,7 @@
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="84e644fc7bb99f865374b55e13b36c6760148e53"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="83032cb35d4a84ba28b3e829feae3f697d13f0b3"/>
|
||||
<!-- Stock Android things -->
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="f92a936f2aa97526d4593386754bdbf02db07a12"/>
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="6e47ff2790f5656b5b074407829ceecf3e6188c4"/>
|
||||
|
@ -21,7 +21,7 @@
|
||||
<!--
|
||||
B2G repositories for all targets
|
||||
-->
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="d069027f9af6f835ef869f1f01b52339e5a3f423"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="14aefb2519becfa32f31bcc3c9c995693421f19c"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4a962bdab532e18f53e9d2d114c349983262c6b7"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="ac7e9ae8a24ab4a3f3da801ca53f95f39a32b89f"/>
|
||||
<project name="platform_hardware_libhardware_moz" path="hardware/libhardware_moz" remote="b2g" revision="fdf3a143dc777e5f9d33a88373af7ea161d3b440"/>
|
||||
@ -32,7 +32,7 @@
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="fake-qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="939b377d55a2f081d94029a30a75d05e5a20daf3"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="84e644fc7bb99f865374b55e13b36c6760148e53"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="83032cb35d4a84ba28b3e829feae3f697d13f0b3"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
|
||||
<!-- Stock Android things -->
|
||||
@ -42,7 +42,7 @@
|
||||
<project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="b89fda71fcd0fa0cf969310e75be3ea33e048b44"/>
|
||||
<project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.7" revision="2e7d5348f35575870b3c7e567a9a9f6d66f8d6c5"/>
|
||||
<project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7" revision="1342fd7b4b000ac3e76a5dfe111a0de9d710b4c8"/>
|
||||
<project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9" revision="babc41b5ee0e89a140a479b680887a9004a41996"/>
|
||||
<project groups="linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9" revision="78948bc4d41c9657d7e2a1a84a21fa2a0eee2504"/>
|
||||
<project groups="linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" path="prebuilts/gcc/linux-x86/x86/i686-linux-android-4.7" revision="1b26ad444462ccbd97f6319565b4735f7bd779e5"/>
|
||||
<project name="device/common" path="device/common" revision="4e1a38704dcfadef60ed2da3cfeba02a56b069d2"/>
|
||||
<project name="device/sample" path="device/sample" revision="b045905b46c8b4ee630d0c2aee7db63eaec722d9"/>
|
||||
|
@ -21,7 +21,7 @@
|
||||
<!--
|
||||
B2G repositories for all targets
|
||||
-->
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="d069027f9af6f835ef869f1f01b52339e5a3f423"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="14aefb2519becfa32f31bcc3c9c995693421f19c"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="4a962bdab532e18f53e9d2d114c349983262c6b7"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="ac7e9ae8a24ab4a3f3da801ca53f95f39a32b89f"/>
|
||||
<project name="platform_hardware_libhardware_moz" path="hardware/libhardware_moz" remote="b2g" revision="fdf3a143dc777e5f9d33a88373af7ea161d3b440"/>
|
||||
@ -35,7 +35,7 @@
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="5f931350fbc87c3df9db8b0ceb37734b8b471593"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="48d8c7c950745f1b166b42125e6f0d3293d71636"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="84e644fc7bb99f865374b55e13b36c6760148e53"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="83032cb35d4a84ba28b3e829feae3f697d13f0b3"/>
|
||||
<!-- Stock Android things -->
|
||||
<project groups="pdk,linux" name="platform/prebuilts/clang/linux-x86/host/3.5" path="prebuilts/clang/linux-x86/host/3.5" revision="ffc05a232799fe8fcb3e47b7440b52b1fb4244c0"/>
|
||||
<project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" path="prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" revision="337e0ef5e40f02a1ae59b90db0548976c70a7226"/>
|
||||
|
@ -14,4 +14,4 @@ DIRS += [
|
||||
]
|
||||
|
||||
# Add the defaults settings.
|
||||
FINAL_TARGET_FILES.defaults += [ 'b2g/graphene/settings.json' ]
|
||||
FINAL_TARGET_FILES.defaults += [ 'settings.json' ]
|
||||
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0"?>
|
||||
<blocklist xmlns="http://www.mozilla.org/2006/addons-blocklist" lastupdate="1449088954000">
|
||||
<blocklist xmlns="http://www.mozilla.org/2006/addons-blocklist" lastupdate="1450229633000">
|
||||
<emItems>
|
||||
<emItem blockID="i58" id="webmaster@buzzzzvideos.info">
|
||||
<versionRange minVersion="0" maxVersion="*">
|
||||
@ -455,7 +455,7 @@
|
||||
</prefs>
|
||||
</emItem>
|
||||
<emItem blockID="i1056" id="{82AF8DCA-6DE9-405D-BD5E-43525BDAD38A}">
|
||||
<versionRange minVersion="0" maxVersion="*" severity="1">
|
||||
<versionRange minVersion="0" maxVersion="7.5.0.9082" severity="1">
|
||||
<targetApplication id="{ec8030f7-c20a-464f-9b0e-13a3a9e97384}">
|
||||
<versionRange minVersion="43.0a1" maxVersion="*" />
|
||||
</targetApplication>
|
||||
|
@ -132,6 +132,9 @@ var gContentPane = {
|
||||
|
||||
gSubDialog.open("chrome://browser/content/preferences/permissions.xul",
|
||||
"resizable=yes", params);
|
||||
|
||||
Services.telemetry
|
||||
.getHistogramById("WEB_NOTIFICATION_EXCEPTIONS_OPENED").add();
|
||||
},
|
||||
|
||||
|
||||
@ -171,7 +174,7 @@ var gContentPane = {
|
||||
},
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
*/
|
||||
_selectDefaultLanguageGroup: function (aLanguageGroup, aIsSerif)
|
||||
{
|
||||
@ -243,7 +246,7 @@ var gContentPane = {
|
||||
/**
|
||||
* Displays the fonts dialog, where web page font names and sizes can be
|
||||
* configured.
|
||||
*/
|
||||
*/
|
||||
configureFonts: function ()
|
||||
{
|
||||
gSubDialog.open("chrome://browser/content/preferences/fonts.xul", "resizable=no");
|
||||
|
@ -16,6 +16,8 @@ const SCROLL2_X = Math.round(300 * (1 + Math.random()));
|
||||
const SCROLL2_Y = Math.round(400 * (1 + Math.random()));
|
||||
const SCROLL2_STR = SCROLL2_X + "," + SCROLL2_Y;
|
||||
|
||||
requestLongerTimeout(2);
|
||||
|
||||
/**
|
||||
* This test ensures that we properly serialize and restore scroll positions
|
||||
* for an average page without any frames.
|
||||
|
@ -175,7 +175,7 @@ function addonInstallForURL(url, hash) {
|
||||
function installedExperimentAddons() {
|
||||
let deferred = Promise.defer();
|
||||
AddonManager.getAddonsByTypes(["experiment"], (addons) => {
|
||||
deferred.resolve([a for (a of addons) if (!a.appDisabled)]);
|
||||
deferred.resolve(addons.filter(a => !a.appDisabled));
|
||||
});
|
||||
return deferred.promise;
|
||||
}
|
||||
@ -183,7 +183,7 @@ function installedExperimentAddons() {
|
||||
// Takes an Array<Addon> and returns a promise that is resolved when the
|
||||
// addons are uninstalled.
|
||||
function uninstallAddons(addons) {
|
||||
let ids = new Set([a.id for (a of addons)]);
|
||||
let ids = new Set(addons.map(addon => addon.id));
|
||||
let deferred = Promise.defer();
|
||||
|
||||
let listener = {};
|
||||
@ -463,11 +463,12 @@ Experiments.Experiments.prototype = {
|
||||
try {
|
||||
this._log.trace("uninit: waiting on _mainTask");
|
||||
yield this._mainTask;
|
||||
} catch (e if e instanceof AlreadyShutdownError) {
|
||||
// We error out of tasks after shutdown via that exception.
|
||||
} catch (e) {
|
||||
this._latestError = e;
|
||||
throw e;
|
||||
// We error out of tasks after shutdown via this exception.
|
||||
if (!(e instanceof AlreadyShutdownError)) {
|
||||
this._latestError = e;
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -760,19 +761,23 @@ Experiments.Experiments.prototype = {
|
||||
this._mainTask = Task.spawn(function*() {
|
||||
try {
|
||||
yield this._main();
|
||||
} catch (e if e instanceof CacheWriteError) {
|
||||
// In this case we want to reschedule
|
||||
} catch (e) {
|
||||
this._log.error("_main caught error: " + e);
|
||||
return;
|
||||
// In the CacheWriteError case we want to reschedule
|
||||
if (!(e instanceof CacheWriteError)) {
|
||||
this._log.error("_main caught error: " + e);
|
||||
return;
|
||||
}
|
||||
} finally {
|
||||
this._mainTask = null;
|
||||
}
|
||||
this._log.trace("_main finished, scheduling next run");
|
||||
try {
|
||||
yield this._scheduleNextRun();
|
||||
} catch (ex if ex instanceof AlreadyShutdownError) {
|
||||
// We error out of tasks after shutdown via that exception.
|
||||
} catch (ex) {
|
||||
// We error out of tasks after shutdown via this exception.
|
||||
if (!(ex instanceof AlreadyShutdownError)) {
|
||||
throw ex;
|
||||
}
|
||||
}
|
||||
}.bind(this));
|
||||
}
|
||||
@ -866,15 +871,18 @@ Experiments.Experiments.prototype = {
|
||||
this.disableExperiment(TELEMETRY_LOG.TERMINATION.ADDON_UNINSTALLED);
|
||||
},
|
||||
|
||||
/**
|
||||
* @returns {Boolean} returns false when we cancel the install.
|
||||
*/
|
||||
onInstallStarted: function (install) {
|
||||
if (install.addon.type != "experiment") {
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
this._log.trace("onInstallStarted() - " + install.addon.id);
|
||||
if (install.addon.appDisabled) {
|
||||
// This is a PreviousExperiment
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
// We want to be in control of all experiment add-ons: reject installs
|
||||
@ -894,13 +902,13 @@ Experiments.Experiments.prototype = {
|
||||
if (this._trackedAddonIds.has(install.addon.id)) {
|
||||
this._log.info("onInstallStarted allowing install because add-on ID " +
|
||||
"tracked by us.");
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (gActiveInstallURLs.has(install.sourceURI.spec)) {
|
||||
this._log.info("onInstallStarted allowing install because install " +
|
||||
"tracked by us.");
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
this._log.warn("onInstallStarted cancelling install of unknown " +
|
||||
@ -985,7 +993,7 @@ Experiments.Experiments.prototype = {
|
||||
try {
|
||||
let textData = JSON.stringify({
|
||||
version: CACHE_VERSION,
|
||||
data: [e[1].toJSON() for (e of this._experiments.entries())],
|
||||
data: [...this._experiments.values()].map(e => e.toJSON()),
|
||||
});
|
||||
|
||||
let encoder = new TextEncoder();
|
||||
@ -1011,9 +1019,13 @@ Experiments.Experiments.prototype = {
|
||||
try {
|
||||
let result = yield loadJSONAsync(path, { compression: "lz4" });
|
||||
this._populateFromCache(result);
|
||||
} catch (e if e instanceof OS.File.Error && e.becauseNoSuchFile) {
|
||||
// No cached manifest yet.
|
||||
this._experiments = new Map();
|
||||
} catch (e) {
|
||||
if (e instanceof OS.File.Error && e.becauseNoSuchFile) {
|
||||
// No cached manifest yet.
|
||||
this._experiments = new Map();
|
||||
} else {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}),
|
||||
|
||||
@ -1116,7 +1128,7 @@ Experiments.Experiments.prototype = {
|
||||
},
|
||||
|
||||
_getActiveExperiment: function () {
|
||||
let enabled = [experiment for ([,experiment] of this._experiments) if (experiment._enabled)];
|
||||
let enabled = [...this._experiments.values()].filter(experiment => experiment._enabled);
|
||||
|
||||
if (enabled.length == 1) {
|
||||
return enabled[0];
|
||||
@ -1153,7 +1165,7 @@ Experiments.Experiments.prototype = {
|
||||
return new Set();
|
||||
}
|
||||
|
||||
return new Set([e._addonId for ([,e] of this._experiments) if (e._addonId)]);
|
||||
return new Set([...this._experiments.values()].map(e => e._addonId));
|
||||
},
|
||||
|
||||
/*
|
||||
@ -1181,10 +1193,10 @@ Experiments.Experiments.prototype = {
|
||||
// knowledge for these unknown experiment add-ons.
|
||||
let installedExperiments = yield installedExperimentAddons();
|
||||
let expectedAddonIds = this._trackedAddonIds;
|
||||
let unknownAddons = [a for (a of installedExperiments) if (!expectedAddonIds.has(a.id))];
|
||||
let unknownAddons = installedExperiments.filter(a => !expectedAddonIds.has(a.id));
|
||||
if (unknownAddons.length) {
|
||||
this._log.warn("_evaluateExperiments() - unknown add-ons in AddonManager: " +
|
||||
[a.id for (a of unknownAddons)].join(", "));
|
||||
unknownAddons.map(a => a.id).join(", "));
|
||||
|
||||
yield uninstallAddons(unknownAddons);
|
||||
}
|
||||
@ -2263,18 +2275,18 @@ this.Experiments.PreviousExperimentProvider.prototype = Object.freeze({
|
||||
return;
|
||||
}
|
||||
|
||||
cb([new PreviousExperimentAddon(e) for (e of this._experimentList)]);
|
||||
cb(this._experimentList.map(e => new PreviousExperimentAddon(e)));
|
||||
},
|
||||
|
||||
_updateExperimentList: function () {
|
||||
return this._experiments.getExperiments().then((experiments) => {
|
||||
let list = [e for (e of experiments) if (!e.active)];
|
||||
let list = experiments.filter(e => !e.active);
|
||||
|
||||
let newMap = new Map([[e.id, e] for (e of list)]);
|
||||
let oldMap = new Map([[e.id, e] for (e of this._experimentList)]);
|
||||
let newMap = new Map(list.map(e => [e.id, e]));
|
||||
let oldMap = new Map(this._experimentList.map(e => [e.id, e]));
|
||||
|
||||
let added = [e.id for (e of list) if (!oldMap.has(e.id))];
|
||||
let removed = [e.id for (e of this._experimentList) if (!newMap.has(e.id))];
|
||||
let added = [...newMap.keys()].filter(id => !oldMap.has(id));
|
||||
let removed = [...oldMap.keys()].filter(id => !newMap.has(id));
|
||||
|
||||
for (let id of added) {
|
||||
this._log.trace("updateExperimentList() - adding " + id);
|
||||
|
@ -38,9 +38,11 @@ function sha1File(path) {
|
||||
is.close();
|
||||
let bytes = hasher.finish(false);
|
||||
|
||||
return [("0" + bytes.charCodeAt(byte).toString(16)).slice(-2)
|
||||
for (byte in bytes)]
|
||||
.join("");
|
||||
let rv = "";
|
||||
for (let i = 0; i < bytes.length; i++) {
|
||||
rv += ("0" + bytes.charCodeAt(i).toString(16)).substr(-2);
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
|
||||
const EXPERIMENT1_ID = "test-experiment-1@tests.mozilla.org";
|
||||
@ -153,7 +155,7 @@ function getExperimentAddons(previous=false) {
|
||||
if (previous) {
|
||||
deferred.resolve(addons);
|
||||
} else {
|
||||
deferred.resolve([a for (a of addons) if (!a.appDisabled)]);
|
||||
deferred.resolve(addons.filter(a => !a.appDisabled));
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -156,8 +156,11 @@ add_task(function* test_disableExperiments() {
|
||||
|
||||
try {
|
||||
yield experiments.updateManifest();
|
||||
} catch (e if e.message == "experiments are disabled") {
|
||||
// This exception is expected.
|
||||
} catch (e) {
|
||||
// This exception is expected, we rethrow everything else
|
||||
if (e.message != "experiments are disabled") {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
experiments.notify();
|
||||
|
@ -40,7 +40,7 @@ add_test(function setup() {
|
||||
run_next_test();
|
||||
});
|
||||
|
||||
add_task(function test_constructor() {
|
||||
add_task(function* test_constructor() {
|
||||
Experiments.instance();
|
||||
yield Experiments._mainTask;
|
||||
let provider = new ExperimentsProvider();
|
||||
|
@ -50,7 +50,7 @@ loop.panel = (function(_, mozL10n) {
|
||||
),
|
||||
React.createElement("div", {className: "fte-button-container"},
|
||||
React.createElement(Button, {additionalClass: "fte-get-started-button",
|
||||
caption: mozL10n.get("first_time_experience_button_label"),
|
||||
caption: mozL10n.get("first_time_experience_button_label2"),
|
||||
htmlId: "fte-button",
|
||||
onClick: this.handleButtonClick})
|
||||
)
|
||||
|
@ -50,7 +50,7 @@ loop.panel = (function(_, mozL10n) {
|
||||
</div>
|
||||
<div className="fte-button-container">
|
||||
<Button additionalClass="fte-get-started-button"
|
||||
caption={mozL10n.get("first_time_experience_button_label")}
|
||||
caption={mozL10n.get("first_time_experience_button_label2")}
|
||||
htmlId="fte-button"
|
||||
onClick={this.handleButtonClick} />
|
||||
</div>
|
||||
|
@ -1,3 +1,3 @@
|
||||
This is the pdf.js project output, https://github.com/mozilla/pdf.js
|
||||
|
||||
Current extension version is: 1.3.76
|
||||
Current extension version is: 1.3.110
|
||||
|
File diff suppressed because it is too large
Load Diff
51535
browser/extensions/pdfjs/content/build/pdf.worker.js
vendored
51535
browser/extensions/pdfjs/content/build/pdf.worker.js
vendored
File diff suppressed because it is too large
Load Diff
@ -77,6 +77,10 @@
|
||||
}
|
||||
|
||||
|
||||
.annotationLayer section {
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.annotationLayer .annotLink > a:hover {
|
||||
opacity: 0.2;
|
||||
background: #ff0;
|
||||
|
@ -12,7 +12,7 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
/* globals PDFJS, PDFBug, FirefoxCom, Stats, Cache, ProgressBar,
|
||||
/* globals PDFJS, PDFBug, FirefoxCom, Stats, ProgressBar,
|
||||
DownloadManager, getFileName, getPDFFileNameFromURL,
|
||||
PDFHistory, Preferences, SidebarView, ViewHistory, Stats,
|
||||
PDFThumbnailViewer, URL, noContextMenuHandler, SecondaryToolbar,
|
||||
@ -3686,7 +3686,7 @@ var PDFPageView = (function PDFPageViewClosure() {
|
||||
}
|
||||
|
||||
if (redrawAnnotations && this.annotationLayer) {
|
||||
this.annotationLayer.setupAnnotations(this.viewport, 'display');
|
||||
this.annotationLayer.render(this.viewport, 'display');
|
||||
}
|
||||
},
|
||||
|
||||
@ -3907,7 +3907,7 @@ var PDFPageView = (function PDFPageViewClosure() {
|
||||
this.annotationLayer = this.annotationsLayerFactory.
|
||||
createAnnotationsLayerBuilder(div, this.pdfPage);
|
||||
}
|
||||
this.annotationLayer.setupAnnotations(this.viewport, 'display');
|
||||
this.annotationLayer.render(this.viewport, 'display');
|
||||
}
|
||||
div.setAttribute('data-loaded', true);
|
||||
|
||||
@ -4306,8 +4306,6 @@ DefaultTextLayerFactory.prototype = {
|
||||
* @class
|
||||
*/
|
||||
var AnnotationsLayerBuilder = (function AnnotationsLayerBuilderClosure() {
|
||||
var CustomStyle = PDFJS.CustomStyle;
|
||||
|
||||
/**
|
||||
* @param {AnnotationsLayerBuilderOptions} options
|
||||
* @constructs AnnotationsLayerBuilder
|
||||
@ -4319,6 +4317,7 @@ var AnnotationsLayerBuilder = (function AnnotationsLayerBuilderClosure() {
|
||||
|
||||
this.div = null;
|
||||
}
|
||||
|
||||
AnnotationsLayerBuilder.prototype =
|
||||
/** @lends AnnotationsLayerBuilder.prototype */ {
|
||||
|
||||
@ -4326,118 +4325,47 @@ var AnnotationsLayerBuilder = (function AnnotationsLayerBuilderClosure() {
|
||||
* @param {PageViewport} viewport
|
||||
* @param {string} intent (default value is 'display')
|
||||
*/
|
||||
setupAnnotations:
|
||||
function AnnotationsLayerBuilder_setupAnnotations(viewport, intent) {
|
||||
function bindLink(link, dest) {
|
||||
link.href = linkService.getDestinationHash(dest);
|
||||
link.onclick = function annotationsLayerBuilderLinksOnclick() {
|
||||
if (dest) {
|
||||
linkService.navigateTo(dest);
|
||||
}
|
||||
return false;
|
||||
};
|
||||
if (dest) {
|
||||
link.className = 'internalLink';
|
||||
}
|
||||
}
|
||||
|
||||
function bindNamedAction(link, action) {
|
||||
link.href = linkService.getAnchorUrl('');
|
||||
link.onclick = function annotationsLayerBuilderNamedActionOnClick() {
|
||||
linkService.executeNamedAction(action);
|
||||
return false;
|
||||
};
|
||||
link.className = 'internalLink';
|
||||
}
|
||||
|
||||
var linkService = this.linkService;
|
||||
var pdfPage = this.pdfPage;
|
||||
render: function AnnotationsLayerBuilder_render(viewport, intent) {
|
||||
var self = this;
|
||||
var getAnnotationsParams = {
|
||||
var parameters = {
|
||||
intent: (intent === undefined ? 'display' : intent),
|
||||
};
|
||||
|
||||
pdfPage.getAnnotations(getAnnotationsParams).then(
|
||||
function (annotationsData) {
|
||||
this.pdfPage.getAnnotations(parameters).then(function (annotations) {
|
||||
viewport = viewport.clone({ dontFlip: true });
|
||||
var transform = viewport.transform;
|
||||
var transformStr = 'matrix(' + transform.join(',') + ')';
|
||||
var data, element, i, ii;
|
||||
|
||||
if (self.div) {
|
||||
// If an annotationLayer already exists, refresh its children's
|
||||
// transformation matrices
|
||||
for (i = 0, ii = annotationsData.length; i < ii; i++) {
|
||||
data = annotationsData[i];
|
||||
element = self.div.querySelector(
|
||||
'[data-annotation-id="' + data.id + '"]');
|
||||
if (element) {
|
||||
CustomStyle.setProp('transform', element, transformStr);
|
||||
}
|
||||
}
|
||||
// See PDFPageView.reset()
|
||||
self.div.removeAttribute('hidden');
|
||||
// transformation matrices.
|
||||
PDFJS.AnnotationLayer.update(viewport, self.div, annotations);
|
||||
} else {
|
||||
for (i = 0, ii = annotationsData.length; i < ii; i++) {
|
||||
data = annotationsData[i];
|
||||
if (!data || !data.hasHtml) {
|
||||
continue;
|
||||
}
|
||||
// Create an annotation layer div and render the annotations
|
||||
// if there is at least one annotation.
|
||||
if (annotations.length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
element = PDFJS.AnnotationUtils.getHtmlElement(data,
|
||||
pdfPage.commonObjs);
|
||||
element.setAttribute('data-annotation-id', data.id);
|
||||
if (typeof mozL10n !== 'undefined') {
|
||||
mozL10n.translate(element);
|
||||
}
|
||||
self.div = document.createElement('div');
|
||||
self.div.className = 'annotationLayer';
|
||||
self.pageDiv.appendChild(self.div);
|
||||
|
||||
var rect = data.rect;
|
||||
var view = pdfPage.view;
|
||||
rect = PDFJS.Util.normalizeRect([
|
||||
rect[0],
|
||||
view[3] - rect[1] + view[1],
|
||||
rect[2],
|
||||
view[3] - rect[3] + view[1]
|
||||
]);
|
||||
element.style.left = rect[0] + 'px';
|
||||
element.style.top = rect[1] + 'px';
|
||||
element.style.position = 'absolute';
|
||||
|
||||
CustomStyle.setProp('transform', element, transformStr);
|
||||
var transformOriginStr = -rect[0] + 'px ' + -rect[1] + 'px';
|
||||
CustomStyle.setProp('transformOrigin', element, transformOriginStr);
|
||||
|
||||
if (data.subtype === 'Link' && !data.url) {
|
||||
var link = element.getElementsByTagName('a')[0];
|
||||
if (link) {
|
||||
if (data.action) {
|
||||
bindNamedAction(link, data.action);
|
||||
} else {
|
||||
bindLink(link, ('dest' in data) ? data.dest : null);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!self.div) {
|
||||
var annotationLayerDiv = document.createElement('div');
|
||||
annotationLayerDiv.className = 'annotationLayer';
|
||||
self.pageDiv.appendChild(annotationLayerDiv);
|
||||
self.div = annotationLayerDiv;
|
||||
}
|
||||
|
||||
self.div.appendChild(element);
|
||||
PDFJS.AnnotationLayer.render(viewport, self.div, annotations,
|
||||
self.pdfPage, self.linkService);
|
||||
if (typeof mozL10n !== 'undefined') {
|
||||
mozL10n.translate(self.div);
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
hide: function () {
|
||||
hide: function AnnotationsLayerBuilder_hide() {
|
||||
if (!this.div) {
|
||||
return;
|
||||
}
|
||||
this.div.setAttribute('hidden', 'true');
|
||||
}
|
||||
};
|
||||
|
||||
return AnnotationsLayerBuilder;
|
||||
})();
|
||||
|
||||
|
@ -31,7 +31,6 @@ sign_in_again_use_as_guest_button2=Use {{clientSuperShortname}} as a Guest
|
||||
panel_browse_with_friend_button=Browse this page with a friend
|
||||
panel_stop_sharing_tabs_button=Stop sharing your tabs
|
||||
|
||||
first_time_experience_button_label=Get Started
|
||||
## LOCALIZATION_NOTE(first_time_experience_subheading2): Message inviting the
|
||||
## user to create his or her first conversation.
|
||||
first_time_experience_subheading2=Click the Hello button to browse Web pages with a friend.
|
||||
@ -39,7 +38,7 @@ first_time_experience_subheading2=Click the Hello button to browse Web pages wit
|
||||
## LOCALIZATION_NOTE(first_time_experience_content): Message describing
|
||||
## ways to use Hello project.
|
||||
first_time_experience_content=Use it to plan together, work together, laugh together.
|
||||
first_time_experience_button_label=See how it works
|
||||
first_time_experience_button_label2=See how it works
|
||||
|
||||
|
||||
|
||||
|
@ -534,8 +534,12 @@ this.BrowserUITelemetry = {
|
||||
// items are in there.
|
||||
let paletteItems =
|
||||
CustomizableUI.getUnusedWidgets(aWindow.gNavToolbox.palette);
|
||||
let defaultRemoved = [item.id for (item of paletteItems)
|
||||
if (DEFAULT_ITEMS.indexOf(item.id) != -1)];
|
||||
let defaultRemoved = [];
|
||||
for (item of paletteItems) {
|
||||
if (DEFAULT_ITEMS.indexOf(item.id) != -1) {
|
||||
defaultRemoved.push(item.id);
|
||||
}
|
||||
}
|
||||
|
||||
result.defaultKept = defaultKept;
|
||||
result.defaultMoved = defaultMoved;
|
||||
|
@ -70,7 +70,7 @@ var Chat = {
|
||||
|
||||
// Make a new array instead of the live NodeList so this iterator can be
|
||||
// used for closing/deleting.
|
||||
let chatboxes = [c for (c of chatbar.children)];
|
||||
let chatboxes = [...chatbar.children];
|
||||
for (let chatbox of chatboxes) {
|
||||
yield chatbox;
|
||||
}
|
||||
@ -244,7 +244,7 @@ var Chat = {
|
||||
|
||||
// When the buttonSet is coming from an XML attribute, it will be a string.
|
||||
if (typeof buttonSet == "string") {
|
||||
buttonSet = [for (button of buttonSet.split(",")) button.trim()];
|
||||
buttonSet = buttonSet.split(",").map(button => button.trim());
|
||||
}
|
||||
|
||||
// Make sure to keep the current set around.
|
||||
|
@ -64,7 +64,7 @@ var ContentClick = {
|
||||
// This part is based on handleLinkClick.
|
||||
var where = window.whereToOpenLink(json);
|
||||
if (where == "current")
|
||||
return false;
|
||||
return;
|
||||
|
||||
// Todo(903022): code for where == save
|
||||
|
||||
|
@ -35,8 +35,11 @@ function getMessageManagerForWindow(aContentWindow) {
|
||||
try {
|
||||
// If e10s is disabled, this throws NS_NOINTERFACE for closed tabs.
|
||||
return ir.getInterface(Ci.nsIContentFrameMessageManager);
|
||||
} catch(e if e.result == Cr.NS_NOINTERFACE) {
|
||||
return null;
|
||||
} catch(e) {
|
||||
if (e.result == Cr.NS_NOINTERFACE) {
|
||||
return null;
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -212,7 +212,7 @@ this.ContentSearch = {
|
||||
|
||||
let event = this._eventQueue.shift();
|
||||
|
||||
return this._currentEventPromise = Task.spawn(function* () {
|
||||
this._currentEventPromise = Task.spawn(function* () {
|
||||
try {
|
||||
yield this["_on" + event.type](event.data);
|
||||
} catch (err) {
|
||||
|
@ -337,8 +337,11 @@ function getMessageManagerForWindow(aContentWindow) {
|
||||
try {
|
||||
// If e10s is disabled, this throws NS_NOINTERFACE for closed tabs.
|
||||
return ir.getInterface(Ci.nsIContentFrameMessageManager);
|
||||
} catch(e if e.result == Cr.NS_NOINTERFACE) {
|
||||
return null;
|
||||
} catch(e) {
|
||||
if (e.result == Cr.NS_NOINTERFACE) {
|
||||
return null;
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -773,7 +773,7 @@ var DirectoryLinksProvider = {
|
||||
RemoteNewTabUtils.links.addObserver(this);
|
||||
}
|
||||
|
||||
return Task.spawn(function() {
|
||||
return Task.spawn(function*() {
|
||||
// get the last modified time of the links file if it exists
|
||||
let doesFileExists = yield OS.File.exists(this._directoryFilePath);
|
||||
if (doesFileExists) {
|
||||
@ -916,7 +916,7 @@ var DirectoryLinksProvider = {
|
||||
if (!sortedLinks) {
|
||||
// If NewTabUtils.links.resetCache() is called before getting here,
|
||||
// sortedLinks may be undefined.
|
||||
return;
|
||||
return undefined;
|
||||
}
|
||||
|
||||
// Delete the current suggested tile, if one exists.
|
||||
@ -939,7 +939,7 @@ var DirectoryLinksProvider = {
|
||||
// There are no potential suggested links we can show or not
|
||||
// enough history for a suggested tile, or suggested tile was
|
||||
// recently blocked and wait time interval has not decayed yet
|
||||
return;
|
||||
return undefined;
|
||||
}
|
||||
|
||||
// Create a flat list of all possible links we can show as suggested.
|
||||
@ -994,7 +994,7 @@ var DirectoryLinksProvider = {
|
||||
// We might have run out of possible links to show
|
||||
let numLinks = possibleLinks.size;
|
||||
if (numLinks == 0) {
|
||||
return;
|
||||
return undefined;
|
||||
}
|
||||
|
||||
let flattenedLinks = [...possibleLinks.values()];
|
||||
|
@ -11,6 +11,7 @@ var Cu = Components.utils;
|
||||
|
||||
this.EXPORTED_SYMBOLS = ["ProcessHangMonitor"];
|
||||
|
||||
Cu.import("resource://gre/modules/AppConstants.jsm");
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
|
||||
/**
|
||||
@ -176,7 +177,7 @@ var ProcessHangMonitor = {
|
||||
handleUserInput: function(win, func) {
|
||||
let report = this.findActiveReport(win.gBrowser.selectedBrowser);
|
||||
if (!report) {
|
||||
return;
|
||||
return null;
|
||||
}
|
||||
this.removeActiveReport(report);
|
||||
|
||||
@ -322,8 +323,7 @@ var ProcessHangMonitor = {
|
||||
}
|
||||
}];
|
||||
|
||||
#ifdef MOZ_DEV_EDITION
|
||||
if (report.hangType == report.SLOW_SCRIPT) {
|
||||
if (AppConstants.MOZ_DEV_EDITION && report.hangType == report.SLOW_SCRIPT) {
|
||||
buttons.push({
|
||||
label: bundle.getString("processHang.button_debug.label"),
|
||||
accessKey: bundle.getString("processHang.button_debug.accessKey"),
|
||||
@ -332,7 +332,6 @@ var ProcessHangMonitor = {
|
||||
}
|
||||
});
|
||||
}
|
||||
#endif
|
||||
|
||||
nb.appendNotification(bundle.getString("processHang.label"),
|
||||
"process-hang",
|
||||
|
@ -137,7 +137,9 @@ this.Social = {
|
||||
},
|
||||
|
||||
_updateWorkerState: function(enable) {
|
||||
[p.enabled = enable for (p of Social.providers) if (p.enabled != enable)];
|
||||
for (let p of Social.providers) {
|
||||
p.enabled = enable;
|
||||
}
|
||||
},
|
||||
|
||||
// Called to update our cache of providers and set the current provider
|
||||
|
@ -37,6 +37,10 @@ this.TabGroupsMigrator = {
|
||||
migrate(stateAsSupportsString) {
|
||||
stateAsSupportsString.QueryInterface(Ci.nsISupportsString);
|
||||
let stateStr = stateAsSupportsString.data;
|
||||
// If this is the very first startup of this profile, this is going to be empty:
|
||||
if (!stateStr) {
|
||||
return;
|
||||
}
|
||||
let state;
|
||||
try {
|
||||
state = JSON.parse(stateStr);
|
||||
|
@ -543,7 +543,12 @@ TabWindow.prototype = {
|
||||
|
||||
// Previews are internally stored using a map, so we need to iterate the
|
||||
// tabbrowser's array of tabs to retrieve previews in the same order.
|
||||
let inorder = [previews.get(t) for (t of tabs) if (previews.has(t))];
|
||||
let inorder = [];
|
||||
for (let t of tabs) {
|
||||
if (previews.has(t)) {
|
||||
inorder.push(previews.get(t));
|
||||
}
|
||||
}
|
||||
|
||||
// Since the internal taskbar array has not yet been updated we must force
|
||||
// on it the sorting order of our local array. To do so we must walk
|
||||
|
@ -33,6 +33,7 @@ EXTRA_JS_MODULES += [
|
||||
'offlineAppCache.jsm',
|
||||
'PanelFrame.jsm',
|
||||
'PluginContent.jsm',
|
||||
'ProcessHangMonitor.jsm',
|
||||
'ReaderParent.jsm',
|
||||
'RecentWindow.jsm',
|
||||
'RemotePrompt.jsm',
|
||||
@ -46,10 +47,6 @@ EXTRA_JS_MODULES += [
|
||||
'webrtcUI.jsm',
|
||||
]
|
||||
|
||||
EXTRA_PP_JS_MODULES += [
|
||||
'ProcessHangMonitor.jsm'
|
||||
]
|
||||
|
||||
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'windows':
|
||||
EXTRA_JS_MODULES += [
|
||||
'Windows8WindowFrameColor.jsm',
|
||||
|
@ -1,102 +1,97 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
/*
|
||||
WHERE'S MAH BUCKET?!
|
||||
\
|
||||
___
|
||||
.-9 9 `\
|
||||
=(:(::)= ;
|
||||
|||| \
|
||||
|||| `-.
|
||||
,\|\| `,
|
||||
/ \
|
||||
; `'---.,
|
||||
| `\
|
||||
; / |
|
||||
\ | /
|
||||
) \ __,.--\ /
|
||||
.-' \,..._\ \` .-' .-'
|
||||
`-=`` `: | /-/-/`
|
||||
`.__/
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
|
||||
function generatorTest() {
|
||||
let s = {};
|
||||
Components.utils.import("resource:///modules/BrowserUITelemetry.jsm", s);
|
||||
let BUIT = s.BrowserUITelemetry;
|
||||
|
||||
registerCleanupFunction(function() {
|
||||
BUIT.setBucket(null);
|
||||
});
|
||||
|
||||
|
||||
// setBucket
|
||||
is(BUIT.currentBucket, BUIT.BUCKET_DEFAULT, "Bucket should be default bucket");
|
||||
BUIT.setBucket("mah-bucket");
|
||||
is(BUIT.currentBucket, BUIT.BUCKET_PREFIX + "mah-bucket", "Bucket should have correct name");
|
||||
BUIT.setBucket(null);
|
||||
is(BUIT.currentBucket, BUIT.BUCKET_DEFAULT, "Bucket should be reset to default");
|
||||
|
||||
|
||||
// _toTimeStr
|
||||
is(BUIT._toTimeStr(10), "10ms", "Checking time string reprentation, 10ms");
|
||||
is(BUIT._toTimeStr(1000 + 10), "1s10ms", "Checking time string reprentation, 1s10ms");
|
||||
is(BUIT._toTimeStr((20 * 1000) + 10), "20s10ms", "Checking time string reprentation, 20s10ms");
|
||||
is(BUIT._toTimeStr(60 * 1000), "1m", "Checking time string reprentation, 1m");
|
||||
is(BUIT._toTimeStr(3 * 60 * 1000), "3m", "Checking time string reprentation, 3m");
|
||||
is(BUIT._toTimeStr((3 * 60 * 1000) + 1), "3m1ms", "Checking time string reprentation, 3m1ms");
|
||||
is(BUIT._toTimeStr((60 * 60 * 1000) + (10 * 60 * 1000)), "1h10m", "Checking time string reprentation, 1h10m");
|
||||
is(BUIT._toTimeStr(100 * 60 * 60 * 1000), "100h", "Checking time string reprentation, 100h");
|
||||
|
||||
|
||||
// setExpiringBucket
|
||||
BUIT.setExpiringBucket("walrus", [1001, 2001, 3001, 10001]);
|
||||
is(BUIT.currentBucket, BUIT.BUCKET_PREFIX + "walrus" + BUIT.BUCKET_SEPARATOR + "1s1ms",
|
||||
"Bucket should be expiring and have time step of 1s1ms");
|
||||
|
||||
waitForCondition(function() {
|
||||
return BUIT.currentBucket == (BUIT.BUCKET_PREFIX + "walrus" + BUIT.BUCKET_SEPARATOR + "2s1ms");
|
||||
}, nextStep, "Bucket should be expiring and have time step of 2s1ms");
|
||||
yield undefined;
|
||||
|
||||
waitForCondition(function() {
|
||||
return BUIT.currentBucket == (BUIT.BUCKET_PREFIX + "walrus" + BUIT.BUCKET_SEPARATOR + "3s1ms");
|
||||
}, nextStep, "Bucket should be expiring and have time step of 3s1ms");
|
||||
yield undefined;
|
||||
|
||||
|
||||
// Interupt previous expiring bucket
|
||||
BUIT.setExpiringBucket("walrus2", [1002, 2002]);
|
||||
is(BUIT.currentBucket, BUIT.BUCKET_PREFIX + "walrus2" + BUIT.BUCKET_SEPARATOR + "1s2ms",
|
||||
"Should be new expiring bucket, with time step of 1s2ms");
|
||||
|
||||
waitForCondition(function() {
|
||||
return BUIT.currentBucket == (BUIT.BUCKET_PREFIX + "walrus2" + BUIT.BUCKET_SEPARATOR + "2s2ms");
|
||||
}, nextStep, "Should be new expiring bucket, with time step of 2s2ms");
|
||||
yield undefined;
|
||||
|
||||
|
||||
// Let expiring bucket expire
|
||||
waitForCondition(function() {
|
||||
return BUIT.currentBucket == BUIT.BUCKET_DEFAULT;
|
||||
}, nextStep, "Bucket should have expired, default bucket should now be active");
|
||||
yield undefined;
|
||||
|
||||
|
||||
// Interupt expiring bucket with normal bucket
|
||||
BUIT.setExpiringBucket("walrus3", [1003, 2003]);
|
||||
is(BUIT.currentBucket, BUIT.BUCKET_PREFIX + "walrus3" + BUIT.BUCKET_SEPARATOR + "1s3ms",
|
||||
"Should be new expiring bucket, with time step of 1s3ms");
|
||||
|
||||
BUIT.setBucket("mah-bucket");
|
||||
is(BUIT.currentBucket, BUIT.BUCKET_PREFIX + "mah-bucket", "Bucket should have correct name");
|
||||
|
||||
waitForCondition(function() {
|
||||
return BUIT.currentBucket == (BUIT.BUCKET_PREFIX + "mah-bucket");
|
||||
}, nextStep, "Next step of old expiring bucket shouldn't have progressed");
|
||||
yield undefined;
|
||||
}
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
/*
|
||||
WHERE'S MAH BUCKET?!
|
||||
\
|
||||
___
|
||||
.-9 9 `\
|
||||
=(:(::)= ;
|
||||
|||| \
|
||||
|||| `-.
|
||||
,\|\| `,
|
||||
/ \
|
||||
; `'---.,
|
||||
| `\
|
||||
; / |
|
||||
\ | /
|
||||
) \ __,.--\ /
|
||||
.-' \,..._\ \` .-' .-'
|
||||
`-=`` `: | /-/-/`
|
||||
`.__/
|
||||
*/
|
||||
|
||||
"use strict";
|
||||
|
||||
|
||||
add_task(function* testBUIT() {
|
||||
let s = {};
|
||||
Components.utils.import("resource:///modules/BrowserUITelemetry.jsm", s);
|
||||
let BUIT = s.BrowserUITelemetry;
|
||||
|
||||
registerCleanupFunction(function() {
|
||||
BUIT.setBucket(null);
|
||||
});
|
||||
|
||||
|
||||
// setBucket
|
||||
is(BUIT.currentBucket, BUIT.BUCKET_DEFAULT, "Bucket should be default bucket");
|
||||
BUIT.setBucket("mah-bucket");
|
||||
is(BUIT.currentBucket, BUIT.BUCKET_PREFIX + "mah-bucket", "Bucket should have correct name");
|
||||
BUIT.setBucket(null);
|
||||
is(BUIT.currentBucket, BUIT.BUCKET_DEFAULT, "Bucket should be reset to default");
|
||||
|
||||
|
||||
// _toTimeStr
|
||||
is(BUIT._toTimeStr(10), "10ms", "Checking time string reprentation, 10ms");
|
||||
is(BUIT._toTimeStr(1000 + 10), "1s10ms", "Checking time string reprentation, 1s10ms");
|
||||
is(BUIT._toTimeStr((20 * 1000) + 10), "20s10ms", "Checking time string reprentation, 20s10ms");
|
||||
is(BUIT._toTimeStr(60 * 1000), "1m", "Checking time string reprentation, 1m");
|
||||
is(BUIT._toTimeStr(3 * 60 * 1000), "3m", "Checking time string reprentation, 3m");
|
||||
is(BUIT._toTimeStr((3 * 60 * 1000) + 1), "3m1ms", "Checking time string reprentation, 3m1ms");
|
||||
is(BUIT._toTimeStr((60 * 60 * 1000) + (10 * 60 * 1000)), "1h10m", "Checking time string reprentation, 1h10m");
|
||||
is(BUIT._toTimeStr(100 * 60 * 60 * 1000), "100h", "Checking time string reprentation, 100h");
|
||||
|
||||
|
||||
// setExpiringBucket
|
||||
BUIT.setExpiringBucket("walrus", [1001, 2001, 3001, 10001]);
|
||||
is(BUIT.currentBucket, BUIT.BUCKET_PREFIX + "walrus" + BUIT.BUCKET_SEPARATOR + "1s1ms",
|
||||
"Bucket should be expiring and have time step of 1s1ms");
|
||||
|
||||
yield waitForConditionPromise(function() {
|
||||
return BUIT.currentBucket == (BUIT.BUCKET_PREFIX + "walrus" + BUIT.BUCKET_SEPARATOR + "2s1ms");
|
||||
}, "Bucket should be expiring and have time step of 2s1ms");
|
||||
|
||||
yield waitForConditionPromise(function() {
|
||||
return BUIT.currentBucket == (BUIT.BUCKET_PREFIX + "walrus" + BUIT.BUCKET_SEPARATOR + "3s1ms");
|
||||
}, "Bucket should be expiring and have time step of 3s1ms");
|
||||
|
||||
|
||||
// Interupt previous expiring bucket
|
||||
BUIT.setExpiringBucket("walrus2", [1002, 2002]);
|
||||
is(BUIT.currentBucket, BUIT.BUCKET_PREFIX + "walrus2" + BUIT.BUCKET_SEPARATOR + "1s2ms",
|
||||
"Should be new expiring bucket, with time step of 1s2ms");
|
||||
|
||||
yield waitForConditionPromise(function() {
|
||||
return BUIT.currentBucket == (BUIT.BUCKET_PREFIX + "walrus2" + BUIT.BUCKET_SEPARATOR + "2s2ms");
|
||||
}, "Should be new expiring bucket, with time step of 2s2ms");
|
||||
|
||||
|
||||
// Let expiring bucket expire
|
||||
yield waitForConditionPromise(function() {
|
||||
return BUIT.currentBucket == BUIT.BUCKET_DEFAULT;
|
||||
}, "Bucket should have expired, default bucket should now be active");
|
||||
|
||||
|
||||
// Interupt expiring bucket with normal bucket
|
||||
BUIT.setExpiringBucket("walrus3", [1003, 2003]);
|
||||
is(BUIT.currentBucket, BUIT.BUCKET_PREFIX + "walrus3" + BUIT.BUCKET_SEPARATOR + "1s3ms",
|
||||
"Should be new expiring bucket, with time step of 1s3ms");
|
||||
|
||||
BUIT.setBucket("mah-bucket");
|
||||
is(BUIT.currentBucket, BUIT.BUCKET_PREFIX + "mah-bucket", "Bucket should have correct name");
|
||||
|
||||
yield waitForConditionPromise(function() {
|
||||
return BUIT.currentBucket == (BUIT.BUCKET_PREFIX + "mah-bucket");
|
||||
}, "Next step of old expiring bucket shouldn't have progressed");
|
||||
});
|
||||
|
@ -200,7 +200,7 @@ function promiseDirectoryDownloadOnPrefChange(pref, newValue) {
|
||||
}
|
||||
|
||||
function promiseSetupDirectoryLinksProvider(options = {}) {
|
||||
return Task.spawn(function() {
|
||||
return Task.spawn(function*() {
|
||||
let linksURL = options.linksURL || kTestURL;
|
||||
yield DirectoryLinksProvider.init();
|
||||
yield promiseDirectoryDownloadOnPrefChange(kLocalePref, options.locale || "en-US");
|
||||
@ -211,7 +211,7 @@ function promiseSetupDirectoryLinksProvider(options = {}) {
|
||||
}
|
||||
|
||||
function promiseCleanDirectoryLinksProvider() {
|
||||
return Task.spawn(function() {
|
||||
return Task.spawn(function*() {
|
||||
yield promiseDirectoryDownloadOnPrefChange(kLocalePref, "en-US");
|
||||
yield promiseDirectoryDownloadOnPrefChange(kSourceUrlPref, kTestURL);
|
||||
yield DirectoryLinksProvider._clearFrequencyCap();
|
||||
@ -292,7 +292,7 @@ add_task(function test_shouldUpdateSuggestedTile() {
|
||||
DirectoryLinksProvider._getCurrentTopSiteCount = origCurrentTopSiteCount;
|
||||
});
|
||||
|
||||
add_task(function test_updateSuggestedTile() {
|
||||
add_task(function* test_updateSuggestedTile() {
|
||||
let topSites = ["site0.com", "1040.com", "site2.com", "hrblock.com", "site4.com", "freetaxusa.com", "site6.com"];
|
||||
|
||||
// Initial setup
|
||||
@ -421,7 +421,7 @@ add_task(function test_updateSuggestedTile() {
|
||||
DirectoryLinksProvider._getCurrentTopSiteCount = origCurrentTopSiteCount;
|
||||
});
|
||||
|
||||
add_task(function test_suggestedLinksMap() {
|
||||
add_task(function* test_suggestedLinksMap() {
|
||||
let data = {"suggested": [suggestedTile1, suggestedTile2, suggestedTile3, suggestedTile4], "directory": [someOtherSite]};
|
||||
let dataURI = 'data:application/json,' + JSON.stringify(data);
|
||||
|
||||
@ -460,7 +460,7 @@ add_task(function test_suggestedLinksMap() {
|
||||
yield promiseCleanDirectoryLinksProvider();
|
||||
});
|
||||
|
||||
add_task(function test_topSitesWithSuggestedLinks() {
|
||||
add_task(function* test_topSitesWithSuggestedLinks() {
|
||||
let topSites = ["site0.com", "1040.com", "site2.com", "hrblock.com", "site4.com", "freetaxusa.com", "site6.com"];
|
||||
let origIsTopPlacesSite = NewTabUtils.isTopPlacesSite;
|
||||
NewTabUtils.isTopPlacesSite = function(site) {
|
||||
@ -512,7 +512,7 @@ add_task(function test_topSitesWithSuggestedLinks() {
|
||||
NewTabUtils.getProviderLinks = origGetProviderLinks;
|
||||
});
|
||||
|
||||
add_task(function test_suggestedAttributes() {
|
||||
add_task(function* test_suggestedAttributes() {
|
||||
let origIsTopPlacesSite = NewTabUtils.isTopPlacesSite;
|
||||
NewTabUtils.isTopPlacesSite = () => true;
|
||||
|
||||
@ -569,7 +569,7 @@ add_task(function test_suggestedAttributes() {
|
||||
DirectoryLinksProvider.removeObserver(gLinks);
|
||||
});
|
||||
|
||||
add_task(function test_frequencyCappedSites_views() {
|
||||
add_task(function* test_frequencyCappedSites_views() {
|
||||
Services.prefs.setCharPref(kPingUrlPref, "");
|
||||
let origIsTopPlacesSite = NewTabUtils.isTopPlacesSite;
|
||||
NewTabUtils.isTopPlacesSite = () => true;
|
||||
@ -646,7 +646,7 @@ add_task(function test_frequencyCappedSites_views() {
|
||||
Services.prefs.setCharPref(kPingUrlPref, kPingUrl);
|
||||
});
|
||||
|
||||
add_task(function test_frequencyCappedSites_click() {
|
||||
add_task(function* test_frequencyCappedSites_click() {
|
||||
Services.prefs.setCharPref(kPingUrlPref, "");
|
||||
let origIsTopPlacesSite = NewTabUtils.isTopPlacesSite;
|
||||
NewTabUtils.isTopPlacesSite = () => true;
|
||||
@ -716,7 +716,7 @@ add_task(function test_frequencyCappedSites_click() {
|
||||
Services.prefs.setCharPref(kPingUrlPref, kPingUrl);
|
||||
});
|
||||
|
||||
add_task(function test_reportSitesAction() {
|
||||
add_task(function* test_reportSitesAction() {
|
||||
yield DirectoryLinksProvider.init();
|
||||
let deferred, expectedPath, expectedPost;
|
||||
let done = false;
|
||||
@ -823,7 +823,7 @@ add_task(function test_reportSitesAction() {
|
||||
done = true;
|
||||
});
|
||||
|
||||
add_task(function test_fetchAndCacheLinks_local() {
|
||||
add_task(function* test_fetchAndCacheLinks_local() {
|
||||
yield DirectoryLinksProvider.init();
|
||||
yield cleanJsonFile();
|
||||
// Trigger cache of data or chrome uri files in profD
|
||||
@ -832,7 +832,7 @@ add_task(function test_fetchAndCacheLinks_local() {
|
||||
isIdentical(data, kURLData);
|
||||
});
|
||||
|
||||
add_task(function test_fetchAndCacheLinks_remote() {
|
||||
add_task(function* test_fetchAndCacheLinks_remote() {
|
||||
yield DirectoryLinksProvider.init();
|
||||
yield cleanJsonFile();
|
||||
// this must trigger directory links json download and save it to cache file
|
||||
@ -842,7 +842,7 @@ add_task(function test_fetchAndCacheLinks_remote() {
|
||||
isIdentical(data, kHttpHandlerData[kExamplePath]);
|
||||
});
|
||||
|
||||
add_task(function test_fetchAndCacheLinks_malformedURI() {
|
||||
add_task(function* test_fetchAndCacheLinks_malformedURI() {
|
||||
yield DirectoryLinksProvider.init();
|
||||
yield cleanJsonFile();
|
||||
let someJunk = "some junk";
|
||||
@ -858,7 +858,7 @@ add_task(function test_fetchAndCacheLinks_malformedURI() {
|
||||
isIdentical(data, "");
|
||||
});
|
||||
|
||||
add_task(function test_fetchAndCacheLinks_unknownHost() {
|
||||
add_task(function* test_fetchAndCacheLinks_unknownHost() {
|
||||
yield DirectoryLinksProvider.init();
|
||||
yield cleanJsonFile();
|
||||
let nonExistentServer = "http://localhost:56789/";
|
||||
@ -874,7 +874,7 @@ add_task(function test_fetchAndCacheLinks_unknownHost() {
|
||||
isIdentical(data, "");
|
||||
});
|
||||
|
||||
add_task(function test_fetchAndCacheLinks_non200Status() {
|
||||
add_task(function* test_fetchAndCacheLinks_non200Status() {
|
||||
yield DirectoryLinksProvider.init();
|
||||
yield cleanJsonFile();
|
||||
yield promiseDirectoryDownloadOnPrefChange(kSourceUrlPref, kFailURL);
|
||||
@ -884,7 +884,7 @@ add_task(function test_fetchAndCacheLinks_non200Status() {
|
||||
});
|
||||
|
||||
// To test onManyLinksChanged observer, trigger a fetch
|
||||
add_task(function test_DirectoryLinksProvider__linkObservers() {
|
||||
add_task(function* test_DirectoryLinksProvider__linkObservers() {
|
||||
yield DirectoryLinksProvider.init();
|
||||
|
||||
let testObserver = new LinksChangeObserver();
|
||||
@ -899,7 +899,7 @@ add_task(function test_DirectoryLinksProvider__linkObservers() {
|
||||
yield promiseCleanDirectoryLinksProvider();
|
||||
});
|
||||
|
||||
add_task(function test_DirectoryLinksProvider__prefObserver_url() {
|
||||
add_task(function* test_DirectoryLinksProvider__prefObserver_url() {
|
||||
yield promiseSetupDirectoryLinksProvider({linksURL: kTestURL});
|
||||
|
||||
let links = yield fetchData();
|
||||
@ -928,7 +928,7 @@ add_task(function test_DirectoryLinksProvider__prefObserver_url() {
|
||||
yield promiseCleanDirectoryLinksProvider();
|
||||
});
|
||||
|
||||
add_task(function test_DirectoryLinksProvider_getLinks_noDirectoryData() {
|
||||
add_task(function* test_DirectoryLinksProvider_getLinks_noDirectoryData() {
|
||||
let data = {
|
||||
"directory": [],
|
||||
};
|
||||
@ -940,7 +940,7 @@ add_task(function test_DirectoryLinksProvider_getLinks_noDirectoryData() {
|
||||
yield promiseCleanDirectoryLinksProvider();
|
||||
});
|
||||
|
||||
add_task(function test_DirectoryLinksProvider_getLinks_badData() {
|
||||
add_task(function* test_DirectoryLinksProvider_getLinks_badData() {
|
||||
let data = {
|
||||
"en-US": {
|
||||
"en-US": [{url: "http://example.com", title: "US"}],
|
||||
@ -966,7 +966,7 @@ add_task(function test_DirectoryLinksProvider_needsDownload() {
|
||||
DirectoryLinksProvider._lastDownloadMS = 0;
|
||||
});
|
||||
|
||||
add_task(function test_DirectoryLinksProvider_fetchAndCacheLinksIfNecessary() {
|
||||
add_task(function* test_DirectoryLinksProvider_fetchAndCacheLinksIfNecessary() {
|
||||
yield DirectoryLinksProvider.init();
|
||||
yield cleanJsonFile();
|
||||
// explicitly change source url to cause the download during setup
|
||||
@ -1008,7 +1008,7 @@ add_task(function test_DirectoryLinksProvider_fetchAndCacheLinksIfNecessary() {
|
||||
yield promiseCleanDirectoryLinksProvider();
|
||||
});
|
||||
|
||||
add_task(function test_DirectoryLinksProvider_fetchDirectoryOnPrefChange() {
|
||||
add_task(function* test_DirectoryLinksProvider_fetchDirectoryOnPrefChange() {
|
||||
yield DirectoryLinksProvider.init();
|
||||
|
||||
let testObserver = new LinksChangeObserver();
|
||||
@ -1029,7 +1029,7 @@ add_task(function test_DirectoryLinksProvider_fetchDirectoryOnPrefChange() {
|
||||
yield promiseCleanDirectoryLinksProvider();
|
||||
});
|
||||
|
||||
add_task(function test_DirectoryLinksProvider_fetchDirectoryOnShow() {
|
||||
add_task(function* test_DirectoryLinksProvider_fetchDirectoryOnShow() {
|
||||
yield promiseSetupDirectoryLinksProvider();
|
||||
|
||||
// set lastdownload to 0 to make DirectoryLinksProvider want to download
|
||||
@ -1043,7 +1043,7 @@ add_task(function test_DirectoryLinksProvider_fetchDirectoryOnShow() {
|
||||
yield promiseCleanDirectoryLinksProvider();
|
||||
});
|
||||
|
||||
add_task(function test_DirectoryLinksProvider_fetchDirectoryOnInit() {
|
||||
add_task(function* test_DirectoryLinksProvider_fetchDirectoryOnInit() {
|
||||
// ensure preferences are set to defaults
|
||||
yield promiseSetupDirectoryLinksProvider();
|
||||
// now clean to provider, so we can init it again
|
||||
@ -1057,7 +1057,7 @@ add_task(function test_DirectoryLinksProvider_fetchDirectoryOnInit() {
|
||||
yield promiseCleanDirectoryLinksProvider();
|
||||
});
|
||||
|
||||
add_task(function test_DirectoryLinksProvider_getLinksFromCorruptedFile() {
|
||||
add_task(function* test_DirectoryLinksProvider_getLinksFromCorruptedFile() {
|
||||
yield promiseSetupDirectoryLinksProvider();
|
||||
|
||||
// write bogus json to a file and attempt to fetch from it
|
||||
@ -1069,7 +1069,7 @@ add_task(function test_DirectoryLinksProvider_getLinksFromCorruptedFile() {
|
||||
yield promiseCleanDirectoryLinksProvider();
|
||||
});
|
||||
|
||||
add_task(function test_DirectoryLinksProvider_getAllowedLinks() {
|
||||
add_task(function* test_DirectoryLinksProvider_getAllowedLinks() {
|
||||
let data = {"directory": [
|
||||
{url: "ftp://example.com"},
|
||||
{url: "http://example.net"},
|
||||
@ -1090,7 +1090,7 @@ add_task(function test_DirectoryLinksProvider_getAllowedLinks() {
|
||||
do_check_eq(links[1].url, data["directory"][3].url);
|
||||
});
|
||||
|
||||
add_task(function test_DirectoryLinksProvider_getAllowedImages() {
|
||||
add_task(function* test_DirectoryLinksProvider_getAllowedImages() {
|
||||
let data = {"directory": [
|
||||
{url: "http://example.com", imageURI: "ftp://example.com"},
|
||||
{url: "http://example.com", imageURI: "http://example.net"},
|
||||
@ -1111,7 +1111,7 @@ add_task(function test_DirectoryLinksProvider_getAllowedImages() {
|
||||
do_check_eq(links[1].imageURI, data["directory"][5].imageURI);
|
||||
});
|
||||
|
||||
add_task(function test_DirectoryLinksProvider_getAllowedImages_base() {
|
||||
add_task(function* test_DirectoryLinksProvider_getAllowedImages_base() {
|
||||
let data = {"directory": [
|
||||
{url: "http://example1.com", imageURI: "https://example.com"},
|
||||
{url: "http://example2.com", imageURI: "https://tiles.cdn.mozilla.net"},
|
||||
@ -1135,7 +1135,7 @@ add_task(function test_DirectoryLinksProvider_getAllowedImages_base() {
|
||||
do_check_eq(links[3].url, data["directory"][4].url);
|
||||
});
|
||||
|
||||
add_task(function test_DirectoryLinksProvider_getAllowedEnhancedImages() {
|
||||
add_task(function* test_DirectoryLinksProvider_getAllowedEnhancedImages() {
|
||||
let data = {"directory": [
|
||||
{url: "http://example.com", enhancedImageURI: "ftp://example.com"},
|
||||
{url: "http://example.com", enhancedImageURI: "http://example.net"},
|
||||
@ -1156,7 +1156,7 @@ add_task(function test_DirectoryLinksProvider_getAllowedEnhancedImages() {
|
||||
do_check_eq(links[1].enhancedImageURI, data["directory"][5].enhancedImageURI);
|
||||
});
|
||||
|
||||
add_task(function test_DirectoryLinksProvider_getEnhancedLink() {
|
||||
add_task(function* test_DirectoryLinksProvider_getEnhancedLink() {
|
||||
let data = {"enhanced": [
|
||||
{url: "http://example.net", enhancedImageURI: "data:,net1"},
|
||||
{url: "http://example.com", enhancedImageURI: "data:,com1"},
|
||||
@ -1208,7 +1208,7 @@ add_task(function test_DirectoryLinksProvider_getEnhancedLink() {
|
||||
checkEnhanced("http://example.com", "data:,fresh");
|
||||
});
|
||||
|
||||
add_task(function test_DirectoryLinksProvider_enhancedURIs() {
|
||||
add_task(function* test_DirectoryLinksProvider_enhancedURIs() {
|
||||
let origIsTopPlacesSite = NewTabUtils.isTopPlacesSite;
|
||||
NewTabUtils.isTopPlacesSite = () => true;
|
||||
let origCurrentTopSiteCount = DirectoryLinksProvider._getCurrentTopSiteCount;
|
||||
@ -1279,7 +1279,7 @@ add_task(function test_DirectoryLinksProvider_setDefaultEnhanced() {
|
||||
Services.prefs.clearUserPref("privacy.donottrackheader.value");
|
||||
});
|
||||
|
||||
add_task(function test_timeSensetiveSuggestedTiles() {
|
||||
add_task(function* test_timeSensetiveSuggestedTiles() {
|
||||
// make tile json with start and end dates
|
||||
let testStartTime = Date.now();
|
||||
// start date is now + 1 seconds
|
||||
@ -1450,7 +1450,7 @@ add_task(function test_setupStartEndTime() {
|
||||
do_check_false(link.startTime);
|
||||
});
|
||||
|
||||
add_task(function test_DirectoryLinksProvider_frequencyCapSetup() {
|
||||
add_task(function* test_DirectoryLinksProvider_frequencyCapSetup() {
|
||||
yield promiseSetupDirectoryLinksProvider();
|
||||
yield DirectoryLinksProvider.init();
|
||||
|
||||
@ -1526,7 +1526,7 @@ add_task(function test_DirectoryLinksProvider_frequencyCapSetup() {
|
||||
yield promiseCleanDirectoryLinksProvider();
|
||||
});
|
||||
|
||||
add_task(function test_DirectoryLinksProvider_getFrequencyCapLogic() {
|
||||
add_task(function* test_DirectoryLinksProvider_getFrequencyCapLogic() {
|
||||
yield promiseSetupDirectoryLinksProvider();
|
||||
yield DirectoryLinksProvider.init();
|
||||
|
||||
@ -1577,7 +1577,7 @@ add_task(function test_DirectoryLinksProvider_getFrequencyCapLogic() {
|
||||
yield promiseCleanDirectoryLinksProvider();
|
||||
});
|
||||
|
||||
add_task(function test_DirectoryLinksProvider_getFrequencyCapReportSiteAction() {
|
||||
add_task(function* test_DirectoryLinksProvider_getFrequencyCapReportSiteAction() {
|
||||
yield promiseSetupDirectoryLinksProvider();
|
||||
yield DirectoryLinksProvider.init();
|
||||
|
||||
@ -1605,7 +1605,7 @@ add_task(function test_DirectoryLinksProvider_getFrequencyCapReportSiteAction()
|
||||
yield promiseCleanDirectoryLinksProvider();
|
||||
});
|
||||
|
||||
add_task(function test_DirectoryLinksProvider_ClickRemoval() {
|
||||
add_task(function* test_DirectoryLinksProvider_ClickRemoval() {
|
||||
yield promiseSetupDirectoryLinksProvider();
|
||||
yield DirectoryLinksProvider.init();
|
||||
let landingUrl = "http://foo.com";
|
||||
@ -1709,7 +1709,7 @@ add_task(function test_DirectoryLinksProvider_anonymous() {
|
||||
do_check_true(DirectoryLinksProvider._newXHR().mozAnon);
|
||||
});
|
||||
|
||||
add_task(function test_sanitizeExplanation() {
|
||||
add_task(function* test_sanitizeExplanation() {
|
||||
// Note: this is a basic test to ensure we applied sanitization to the link explanation.
|
||||
// Full testing for appropriate sanitization is done in parser/xml/test/unit/test_sanitizer.js.
|
||||
let data = {"suggested": [suggestedTile5]};
|
||||
@ -1727,7 +1727,7 @@ add_task(function test_sanitizeExplanation() {
|
||||
do_check_eq(suggestedLink.targetedName, "WE ARE EVIL ");
|
||||
});
|
||||
|
||||
add_task(function test_inadjecentSites() {
|
||||
add_task(function* test_inadjecentSites() {
|
||||
let suggestedTile = Object.assign({
|
||||
check_inadjacency: true
|
||||
}, suggestedTile1);
|
||||
@ -1901,7 +1901,7 @@ add_task(function test_inadjecentSites() {
|
||||
yield promiseCleanDirectoryLinksProvider();
|
||||
});
|
||||
|
||||
add_task(function test_reportPastImpressions() {
|
||||
add_task(function* test_reportPastImpressions() {
|
||||
let origIsTopPlacesSite = NewTabUtils.isTopPlacesSite;
|
||||
NewTabUtils.isTopPlacesSite = () => true;
|
||||
let origCurrentTopSiteCount = DirectoryLinksProvider._getCurrentTopSiteCount;
|
||||
@ -2005,7 +2005,7 @@ add_task(function test_reportPastImpressions() {
|
||||
DirectoryLinksProvider._getCurrentTopSiteCount = origCurrentTopSiteCount;
|
||||
});
|
||||
|
||||
add_task(function test_blockSuggestedTiles() {
|
||||
add_task(function* test_blockSuggestedTiles() {
|
||||
// Initial setup
|
||||
let suggestedTile = suggestedTile1;
|
||||
let topSites = ["site0.com", "1040.com", "site2.com", "hrblock.com", "site4.com", "freetaxusa.com", "site6.com"];
|
||||
|
@ -23,7 +23,7 @@
|
||||
<button id="rewind-timeline" standalone="true" class="devtools-button"></button>
|
||||
<button id="pause-resume-timeline" standalone="true" class="devtools-button pause-button paused"></button>
|
||||
<span id="timeline-rate" standalone="true" class="devtools-button"></span>
|
||||
<span id="timeline-current-time" class="label"></span>
|
||||
<span id="timeline-current-time" class="label devtools-toolbarbutton"></span>
|
||||
</div>
|
||||
<div id="players"></div>
|
||||
<div id="error-message">
|
||||
|
@ -215,3 +215,6 @@
|
||||
<!ENTITY simulator_device "Device">
|
||||
<!ENTITY simulator_screenSize "Screen">
|
||||
<!ENTITY simulator_pixelRatio "Pixel Ratio">
|
||||
<!ENTITY simulator_tv_data "TV Simulation">
|
||||
<!ENTITY simulator_tv_data_open "Config Data">
|
||||
<!ENTITY simulator_tv_data_open_button "Open Config Directory...">
|
||||
|
@ -110,7 +110,6 @@ body {
|
||||
#timeline-toolbar .label {
|
||||
padding: 0 5px;
|
||||
border-style: solid;
|
||||
border-color: rgba(170, 170, 170, .5);
|
||||
}
|
||||
|
||||
#timeline-toolbar .devtools-button,
|
||||
|
@ -187,13 +187,13 @@ body {
|
||||
* Best effort to match the existing theme, some of the colors
|
||||
* are duplicated here to prevent weirdness in the main theme. */
|
||||
|
||||
.CodeMirror { /* Inherit platform specific font sizing and styles */
|
||||
.CodeMirror.cm-s-mozilla { /* Inherit platform specific font sizing and styles */
|
||||
font-family: inherit;
|
||||
font-size: inherit;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.CodeMirror pre,
|
||||
.CodeMirror.cm-s-mozilla pre,
|
||||
.cm-s-mozilla .cm-variable-2,
|
||||
.cm-s-mozilla .cm-variable-3,
|
||||
.cm-s-mozilla .cm-operator,
|
||||
|
@ -186,13 +186,13 @@ body {
|
||||
* Best effort to match the existing theme, some of the colors
|
||||
* are duplicated here to prevent weirdness in the main theme. */
|
||||
|
||||
.CodeMirror { /* Inherit platform specific font sizing and styles */
|
||||
.CodeMirror.cm-s-mozilla { /* Inherit platform specific font sizing and styles */
|
||||
font-family: inherit;
|
||||
font-size: inherit;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.CodeMirror pre,
|
||||
.CodeMirror.cm-s-mozilla pre,
|
||||
.cm-s-mozilla .cm-variable-2,
|
||||
.cm-s-mozilla .cm-variable-3,
|
||||
.cm-s-mozilla .cm-operator,
|
||||
|
@ -3,6 +3,7 @@
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
var Cu = Components.utils;
|
||||
var Ci = Components.interfaces;
|
||||
|
||||
const { require } = Cu.import("resource://devtools/shared/Loader.jsm", {});
|
||||
const { GetDevices, GetDeviceString } = require("devtools/client/shared/devices");
|
||||
@ -117,9 +118,29 @@ var SimulatorEditor = {
|
||||
this.updateProfileSelector();
|
||||
this.updateDeviceSelector();
|
||||
this.updateDeviceFields();
|
||||
|
||||
// Change visibility of 'TV Simulator Menu'.
|
||||
let tvSimMenu = document.querySelector("#tv_simulator_menu");
|
||||
tvSimMenu.style.visibility = (this._simulator.type === "television")?
|
||||
"visible" : "hidden";
|
||||
});
|
||||
},
|
||||
|
||||
// Open the directory of TV Simulator config.
|
||||
showTVConfigDirectory() {
|
||||
let profD = Services.dirsvc.get("ProfD", Ci.nsIFile);
|
||||
profD.append("extensions");
|
||||
profD.append(this._simulator.addon.id);
|
||||
profD.append("profile");
|
||||
profD.append("dummy");
|
||||
let profileDir = profD.path;
|
||||
|
||||
// Show the profile directory.
|
||||
let nsLocalFile = Components.Constructor("@mozilla.org/file/local;1",
|
||||
"nsILocalFile", "initWithPath");
|
||||
new nsLocalFile(profileDir).reveal();
|
||||
},
|
||||
|
||||
// Close the configuration panel.
|
||||
close() {
|
||||
this._simulator = null;
|
||||
@ -317,4 +338,9 @@ window.addEventListener("load", function onLoad() {
|
||||
|
||||
// We just loaded, so we probably missed the first configure request.
|
||||
SimulatorEditor.edit(Simulators._lastConfiguredSimulator);
|
||||
|
||||
document.querySelector("#open-tv-dummy-directory").onclick = e => {
|
||||
SimulatorEditor.showTVConfigDirectory();
|
||||
e.preventDefault();
|
||||
};
|
||||
});
|
||||
|
@ -76,6 +76,23 @@
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<!-- This menu is shown when simulator type is television-->
|
||||
<p id="tv_simulator_menu" style="visibility:hidden;">
|
||||
<h2>&simulator_tv_data;</h2>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<label>
|
||||
<span class="label">&simulator_tv_data_open;</span>
|
||||
<button id="open-tv-dummy-directory">
|
||||
&simulator_tv_data_open_button;
|
||||
</button>
|
||||
</label>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</p>
|
||||
|
||||
</form>
|
||||
|
||||
</body>
|
||||
|
@ -296,6 +296,9 @@
|
||||
sid = params.args.indexOf("-screen");
|
||||
ok(params.args[sid + 1].includes(device.width + "x" + device.height), "Simulator screen resolution looks right");
|
||||
|
||||
// Test Simulator Menu.
|
||||
is(doc.querySelector("#tv_simulator_menu").style.visibility, "hidden", "OpenTVDummyDirectory Button is not hidden\n");
|
||||
|
||||
// Restore default simulator options.
|
||||
|
||||
doc.querySelector("#reset").click();
|
||||
@ -322,6 +325,9 @@
|
||||
is(form[param].value, String(defaults.television[param]), "Default TV value for device " + param);
|
||||
}
|
||||
|
||||
// Test Simulator Menu
|
||||
is(doc.querySelector("#tv_simulator_menu").style.visibility, "visible", "OpenTVDummyDirectory Button is not visible");
|
||||
|
||||
// Force reload the list of simulators.
|
||||
|
||||
Simulators._loadingPromise = null;
|
||||
|
98
devtools/docs/inspector-panel.md
Normal file
98
devtools/docs/inspector-panel.md
Normal file
@ -0,0 +1,98 @@
|
||||
# High-Level Inspector Architecture
|
||||
|
||||
## UI structure
|
||||
The Inspector panel is a tab in the toolbox. Like all tabs, it's in its own iframe.
|
||||
|
||||
The high-level hierarchy looks something like this:
|
||||
|
||||
Toolbox
|
||||
|
|
||||
InspectorPanel
|
||||
|
|
||||
+-------------+------------------+---------------+
|
||||
| | | |
|
||||
MarkupView SelectorSearch HTMLBreadcrumbs ToolSidebar widget (iframes)
|
||||
|
|
||||
+- RuleView
|
||||
|
|
||||
+- ComputedView
|
||||
|
|
||||
+- LayoutView
|
||||
|
|
||||
+- FontInspector
|
||||
|
|
||||
+- AnimationInspector
|
||||
|
||||
## Server dependencies
|
||||
- The inspector panel relies on a series of actors that live on the server.
|
||||
- Some of the most important actors are actually instantiated by the toolbox, because these actors are needed for other panels to preview and link to DOM nodes. For example, the webconsole needs to output DOM nodes, highlight them in the page on mouseover, and open them in the inspector on click. This is achieved using some of the same actors that the inspector panel uses.
|
||||
- See Toolbox.prototype.initInspector: This method instantiates the InspectorActor, WalkerActor and HighlighterActor lazily, whenever they're needed by a panel.
|
||||
|
||||
## Panel loading overview
|
||||
- As with other panels, this starts with Toolbox.prototype.loadTool(id)
|
||||
- For the inspector though, this calls Toolbox.prototype.initInspector
|
||||
- When the panel's open method is called:
|
||||
- It uses the WalkerActor for the first time to know the default selected node (which could be a node that was selected before on the same page).
|
||||
- It starts listening to the WalkerActor's "new-root" events to know when to display a new DOM tree (when there's a page navigation).
|
||||
- It creates the breadcrumbs widget, the sidebar widget, the search widget, the markup-view
|
||||
- Sidebar:
|
||||
- When this widget initializes, it loads its sub-iframes (rule-view, ...)
|
||||
- Each of these iframes contain panel that, in turn, listen to inspector events like "new-node-front" to know when to retrieve information about a node (i.e the rule-view will fetch the css rules for a node).
|
||||
- Markup-view:
|
||||
- This panel initializes in its iframe, and gets a reference to the WalkerActor. It uses it to know the DOM tree to display. It knows when nodes change (markup-mutations), and knows what root node to start from.
|
||||
- It only displays the nodes that are supposed to be visible at first (usually html, head, body and direct children of body).
|
||||
- Then, as you expand nodes, it uses the WalkerActor to get more nodes lazily. It only ever knows data about nodes that have already been expanded once in the UI.
|
||||
|
||||
## Server-side structure
|
||||
Simplified actor hierarchy
|
||||
|
||||
InspectorActor
|
||||
|
|
||||
+---------------+
|
||||
| |
|
||||
WalkerActor PageStyleActor (for rule-view/computed-view)
|
||||
| |
|
||||
NodeActor StyleRuleActor
|
||||
|
||||
__InspectorActor__
|
||||
|
||||
This tab-level actor is the one the inspector-panel connects to. It doesn't do much apart from creating and returning the WalkerActor and PageStyleActor.
|
||||
|
||||
__WalkerActor__
|
||||
|
||||
- Single most important part of the inspector panel.
|
||||
- Responsible for walking the DOM on the current page but:
|
||||
- also walks iframes
|
||||
- also finds pseudo-elements ::before and ::after
|
||||
- also finds anonymous content (e.g. in the BrowserToolbox)
|
||||
- The actor uses an instance of inIDeepTreeWalker to walk the DOM
|
||||
- Provides a tree of NodeActor objects that reflects the DOM.
|
||||
- But only has a partial knowledge of the DOM (what is currently displayed/expanded in the MarkupView). It doesn't need to walk the whole tree when you first instantiate it.
|
||||
- Reflects some of the usual DOM APIs like querySelector.
|
||||
- Note that methods like querySelector return arbitrarily nested NodeActors, in which case the WalkerActor also sends the list of parents to link the returned nodes to the closest known nodes, so the UI can display the tree correctly.
|
||||
- Emits events when there are DOM mutations. These events are sent to the front-end and used to, for example refresh the markup-view. This uses an instance of MutationObserver (https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver) configured with, in particular, nativeAnonymousChildList set to true, so that mutation events are also sent when pseudo elements are added/removed via css.
|
||||
|
||||
__NodeActor__
|
||||
|
||||
- Representation of a single DOM node (tagname, namespace, attributes, parent, sibblings, ...), which panels use to display previews of nodes.
|
||||
- Also provide useful methods to:
|
||||
- change attributes
|
||||
- scroll into view
|
||||
- get event listeners data
|
||||
- get image data
|
||||
- get unique css selector
|
||||
|
||||
## Highlighters
|
||||
|
||||
One of the important aspects of the inspector is the highlighters.
|
||||
Some documentation already at: https://wiki.mozilla.org/DevTools/Highlighter
|
||||
|
||||
We don't just have 1 highlighter, we have a framework for highlighters:
|
||||
- a (chrome-only) platform API to inject markup in a native-anonymous node in content (that works on all targets)
|
||||
- a number of specific highlighter implementations (css transform, rect, selector, geometry, rulers, ...)
|
||||
- a CustomHighlighterActor to get instances of specific highlighters
|
||||
|
||||
The entry point is toolbox-highlighter-utils.js:
|
||||
- get it with toolbox.highlighterUtils
|
||||
- use this to easily highlight any node in the page (with the usual box model highlighter),
|
||||
- also use this to instantiate an other specific highlighter
|
@ -385,10 +385,27 @@ BluetoothGattManager::Get()
|
||||
|
||||
// Create a new instance, register, and return
|
||||
BluetoothGattManager* manager = new BluetoothGattManager();
|
||||
NS_ENSURE_TRUE(manager->Init(), nullptr);
|
||||
sBluetoothGattManager = manager;
|
||||
return sBluetoothGattManager;
|
||||
}
|
||||
|
||||
bool
|
||||
BluetoothGattManager::Init()
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
||||
nsCOMPtr<nsIObserverService> obs = services::GetObserverService();
|
||||
NS_ENSURE_TRUE(obs, false);
|
||||
|
||||
if (NS_FAILED(obs->AddObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID, false))) {
|
||||
BT_WARNING("Failed to add observers!");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
class BluetoothGattManager::RegisterModuleResultHandler final
|
||||
: public BluetoothSetupResultHandler
|
||||
{
|
||||
|
@ -203,6 +203,7 @@ private:
|
||||
class ServerSendIndicationResultHandler;
|
||||
|
||||
BluetoothGattManager();
|
||||
bool Init();
|
||||
|
||||
void HandleShutdown();
|
||||
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include "mozilla/OwningNonNull.h"
|
||||
#include "mozilla/Preferences.h"
|
||||
#include "mozilla/Services.h"
|
||||
#include "mozilla/Telemetry.h"
|
||||
#include "mozilla/unused.h"
|
||||
|
||||
#include "mozilla/dom/AppNotificationServiceOptionsBinding.h"
|
||||
@ -21,8 +22,10 @@
|
||||
#include "mozilla/dom/PromiseWorkerProxy.h"
|
||||
#include "mozilla/dom/ServiceWorkerGlobalScopeBinding.h"
|
||||
|
||||
#include "nsAlertsUtils.h"
|
||||
#include "nsContentPermissionHelper.h"
|
||||
#include "nsContentUtils.h"
|
||||
#include "nsCRTGlue.h"
|
||||
#include "nsDOMJSUtils.h"
|
||||
#include "nsGlobalWindow.h"
|
||||
#include "nsIAlertsService.h"
|
||||
@ -32,8 +35,10 @@
|
||||
#include "nsILoadContext.h"
|
||||
#include "nsINotificationStorage.h"
|
||||
#include "nsIPermissionManager.h"
|
||||
#include "nsIPermission.h"
|
||||
#include "nsIScriptSecurityManager.h"
|
||||
#include "nsIServiceWorkerManager.h"
|
||||
#include "nsISimpleEnumerator.h"
|
||||
#include "nsIUUIDGenerator.h"
|
||||
#include "nsIXPConnect.h"
|
||||
#include "nsNetUtil.h"
|
||||
@ -659,6 +664,195 @@ NotificationPermissionRequest::GetTypes(nsIArray** aTypes)
|
||||
aTypes);
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS(NotificationTelemetryService, nsIObserver)
|
||||
|
||||
NotificationTelemetryService::NotificationTelemetryService()
|
||||
: mDNDRecorded(false)
|
||||
{}
|
||||
|
||||
NotificationTelemetryService::~NotificationTelemetryService()
|
||||
{
|
||||
Unused << NS_WARN_IF(NS_FAILED(RemovePermissionChangeObserver()));
|
||||
}
|
||||
|
||||
/* static */ already_AddRefed<NotificationTelemetryService>
|
||||
NotificationTelemetryService::GetInstance()
|
||||
{
|
||||
nsCOMPtr<nsISupports> telemetrySupports =
|
||||
do_GetService(NOTIFICATIONTELEMETRYSERVICE_CONTRACTID);
|
||||
if (!telemetrySupports) {
|
||||
return nullptr;
|
||||
}
|
||||
RefPtr<NotificationTelemetryService> telemetry =
|
||||
static_cast<NotificationTelemetryService*>(telemetrySupports.get());
|
||||
return telemetry.forget();
|
||||
}
|
||||
|
||||
nsresult
|
||||
NotificationTelemetryService::Init()
|
||||
{
|
||||
nsresult rv = AddPermissionChangeObserver();
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
RecordPermissions();
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
NotificationTelemetryService::RemovePermissionChangeObserver()
|
||||
{
|
||||
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
|
||||
if (!obs) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
return obs->RemoveObserver(this, "perm-changed");
|
||||
}
|
||||
|
||||
nsresult
|
||||
NotificationTelemetryService::AddPermissionChangeObserver()
|
||||
{
|
||||
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
|
||||
if (!obs) {
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
}
|
||||
return obs->AddObserver(this, "perm-changed", false);
|
||||
}
|
||||
|
||||
void
|
||||
NotificationTelemetryService::RecordPermissions()
|
||||
{
|
||||
if (!Telemetry::CanRecordBase() || !Telemetry::CanRecordExtended()) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIPermissionManager> permissionManager =
|
||||
services::GetPermissionManager();
|
||||
if (!permissionManager) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsISimpleEnumerator> enumerator;
|
||||
nsresult rv = permissionManager->GetEnumerator(getter_AddRefs(enumerator));
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (;;) {
|
||||
bool hasMoreElements;
|
||||
nsresult rv = enumerator->HasMoreElements(&hasMoreElements);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return;
|
||||
}
|
||||
if (!hasMoreElements) {
|
||||
break;
|
||||
}
|
||||
nsCOMPtr<nsISupports> supportsPermission;
|
||||
rv = enumerator->GetNext(getter_AddRefs(supportsPermission));
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return;
|
||||
}
|
||||
uint32_t capability;
|
||||
if (!GetNotificationPermission(supportsPermission, &capability)) {
|
||||
continue;
|
||||
}
|
||||
if (capability == nsIPermissionManager::DENY_ACTION) {
|
||||
Telemetry::Accumulate(Telemetry::WEB_NOTIFICATION_PERMISSIONS, 0);
|
||||
} else if (capability == nsIPermissionManager::ALLOW_ACTION) {
|
||||
Telemetry::Accumulate(Telemetry::WEB_NOTIFICATION_PERMISSIONS, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
NotificationTelemetryService::GetNotificationPermission(nsISupports* aSupports,
|
||||
uint32_t* aCapability)
|
||||
{
|
||||
nsCOMPtr<nsIPermission> permission = do_QueryInterface(aSupports);
|
||||
if (!permission) {
|
||||
return false;
|
||||
}
|
||||
nsAutoCString type;
|
||||
permission->GetType(type);
|
||||
if (!type.Equals("desktop-notification")) {
|
||||
return false;
|
||||
}
|
||||
permission->GetCapability(aCapability);
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
NotificationTelemetryService::RecordDNDSupported()
|
||||
{
|
||||
if (mDNDRecorded) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIAlertsService> alertService =
|
||||
do_GetService(NS_ALERTSERVICE_CONTRACTID);
|
||||
if (!alertService) {
|
||||
return;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIAlertsDoNotDisturb> alertServiceDND =
|
||||
do_QueryInterface(alertService);
|
||||
if (!alertServiceDND) {
|
||||
return;
|
||||
}
|
||||
|
||||
mDNDRecorded = true;
|
||||
bool isEnabled;
|
||||
nsresult rv = alertServiceDND->GetManualDoNotDisturb(&isEnabled);
|
||||
if (NS_FAILED(rv)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Telemetry::Accumulate(
|
||||
Telemetry::ALERTS_SERVICE_DND_SUPPORTED_FLAG, true);
|
||||
}
|
||||
|
||||
nsresult
|
||||
NotificationTelemetryService::RecordSender(nsIPrincipal* aPrincipal)
|
||||
{
|
||||
if (!Telemetry::CanRecordBase() || !Telemetry::CanRecordExtended() ||
|
||||
!nsAlertsUtils::IsActionablePrincipal(aPrincipal)) {
|
||||
return NS_OK;
|
||||
}
|
||||
nsAutoString origin;
|
||||
nsresult rv = Notification::GetOrigin(aPrincipal, origin);
|
||||
if (NS_FAILED(rv)) {
|
||||
return rv;
|
||||
}
|
||||
if (!mOrigins.Contains(origin)) {
|
||||
mOrigins.PutEntry(origin);
|
||||
Telemetry::Accumulate(Telemetry::WEB_NOTIFICATION_SENDERS, 1);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
NotificationTelemetryService::Observe(nsISupports* aSubject,
|
||||
const char* aTopic,
|
||||
const char16_t* aData)
|
||||
{
|
||||
uint32_t capability;
|
||||
if (strcmp("perm-changed", aTopic) ||
|
||||
!NS_strcmp(MOZ_UTF16("cleared"), aData) ||
|
||||
!GetNotificationPermission(aSubject, &capability)) {
|
||||
return NS_OK;
|
||||
}
|
||||
if (!NS_strcmp(MOZ_UTF16("deleted"), aData)) {
|
||||
if (capability == nsIPermissionManager::DENY_ACTION) {
|
||||
Telemetry::Accumulate(
|
||||
Telemetry::WEB_NOTIFICATION_PERMISSION_REMOVED, 0);
|
||||
} else if (capability == nsIPermissionManager::ALLOW_ACTION) {
|
||||
Telemetry::Accumulate(
|
||||
Telemetry::WEB_NOTIFICATION_PERMISSION_REMOVED, 1);
|
||||
}
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
// Observer that the alert service calls to do common tasks and/or dispatch to the
|
||||
// specific observer for the context e.g. main thread, worker, or service worker.
|
||||
class NotificationObserver final : public nsIObserver
|
||||
@ -666,11 +860,14 @@ class NotificationObserver final : public nsIObserver
|
||||
public:
|
||||
nsCOMPtr<nsIObserver> mObserver;
|
||||
nsCOMPtr<nsIPrincipal> mPrincipal;
|
||||
bool mInPrivateBrowsing;
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSIOBSERVER
|
||||
|
||||
NotificationObserver(nsIObserver* aObserver, nsIPrincipal* aPrincipal)
|
||||
: mObserver(aObserver), mPrincipal(aPrincipal)
|
||||
NotificationObserver(nsIObserver* aObserver, nsIPrincipal* aPrincipal,
|
||||
bool aInPrivateBrowsing)
|
||||
: mObserver(aObserver), mPrincipal(aPrincipal),
|
||||
mInPrivateBrowsing(aInPrivateBrowsing)
|
||||
{
|
||||
AssertIsOnMainThread();
|
||||
MOZ_ASSERT(mObserver);
|
||||
@ -1185,6 +1382,17 @@ NotificationObserver::Observe(nsISupports* aSubject, const char* aTopic,
|
||||
return NS_OK;
|
||||
} else if (!strcmp("alertshow", aTopic) ||
|
||||
!strcmp("alertfinished", aTopic)) {
|
||||
RefPtr<NotificationTelemetryService> telemetry =
|
||||
NotificationTelemetryService::GetInstance();
|
||||
if (telemetry) {
|
||||
// Record whether "do not disturb" is supported after the first
|
||||
// notification, to account for falling back to XUL alerts.
|
||||
telemetry->RecordDNDSupported();
|
||||
if (!mInPrivateBrowsing) {
|
||||
// Ignore senders in private windows.
|
||||
Unused << NS_WARN_IF(NS_FAILED(telemetry->RecordSender(mPrincipal)));
|
||||
}
|
||||
}
|
||||
Unused << NS_WARN_IF(NS_FAILED(AdjustPushQuota(aTopic)));
|
||||
|
||||
if (!strcmp("alertshow", aTopic)) {
|
||||
@ -1425,6 +1633,30 @@ ServiceWorkerNotificationObserver::Observe(nsISupports* aSubject,
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
bool
|
||||
Notification::IsInPrivateBrowsing()
|
||||
{
|
||||
nsIDocument* doc = mWorkerPrivate ? mWorkerPrivate->GetDocument()
|
||||
: GetOwner()->GetExtantDoc();
|
||||
if (doc) {
|
||||
nsCOMPtr<nsILoadContext> loadContext = doc->GetLoadContext();
|
||||
return loadContext && loadContext->UsePrivateBrowsing();
|
||||
}
|
||||
|
||||
if (mWorkerPrivate) {
|
||||
// Not all workers may have a document, but with Bug 1107516 fixed, they
|
||||
// should all have a loadcontext.
|
||||
nsCOMPtr<nsILoadGroup> loadGroup = mWorkerPrivate->GetLoadGroup();
|
||||
nsCOMPtr<nsILoadContext> loadContext;
|
||||
NS_QueryNotificationCallbacks(nullptr, loadGroup, NS_GET_IID(nsILoadContext),
|
||||
getter_AddRefs(loadContext));
|
||||
return loadContext && loadContext->UsePrivateBrowsing();
|
||||
}
|
||||
|
||||
//XXXnsm Should this default to true?
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
Notification::ShowInternal()
|
||||
{
|
||||
@ -1499,7 +1731,8 @@ Notification::ShowInternal()
|
||||
}
|
||||
MOZ_ASSERT(observer);
|
||||
nsCOMPtr<nsIObserver> alertObserver = new NotificationObserver(observer,
|
||||
GetPrincipal());
|
||||
GetPrincipal(),
|
||||
IsInPrivateBrowsing());
|
||||
|
||||
|
||||
#ifdef MOZ_B2G
|
||||
@ -1550,22 +1783,7 @@ Notification::ShowInternal()
|
||||
// nsIObserver. Thus the cookie must be unique to differentiate observers.
|
||||
nsString uniqueCookie = NS_LITERAL_STRING("notification:");
|
||||
uniqueCookie.AppendInt(sCount++);
|
||||
//XXXnsm Should this default to true?
|
||||
bool inPrivateBrowsing = false;
|
||||
nsIDocument* doc = mWorkerPrivate ? mWorkerPrivate->GetDocument()
|
||||
: GetOwner()->GetExtantDoc();
|
||||
if (doc) {
|
||||
nsCOMPtr<nsILoadContext> loadContext = doc->GetLoadContext();
|
||||
inPrivateBrowsing = loadContext && loadContext->UsePrivateBrowsing();
|
||||
} else if (mWorkerPrivate) {
|
||||
// Not all workers may have a document, but with Bug 1107516 fixed, they
|
||||
// should all have a loadcontext.
|
||||
nsCOMPtr<nsILoadGroup> loadGroup = mWorkerPrivate->GetLoadGroup();
|
||||
nsCOMPtr<nsILoadContext> loadContext;
|
||||
NS_QueryNotificationCallbacks(nullptr, loadGroup, NS_GET_IID(nsILoadContext),
|
||||
getter_AddRefs(loadContext));
|
||||
inPrivateBrowsing = loadContext && loadContext->UsePrivateBrowsing();
|
||||
}
|
||||
bool inPrivateBrowsing = IsInPrivateBrowsing();
|
||||
|
||||
nsAutoString alertName;
|
||||
GetAlertName(alertName);
|
||||
|
@ -15,6 +15,11 @@
|
||||
#include "nsIObserver.h"
|
||||
|
||||
#include "nsCycleCollectionParticipant.h"
|
||||
#include "nsHashKeys.h"
|
||||
#include "nsTHashtable.h"
|
||||
|
||||
#define NOTIFICATIONTELEMETRYSERVICE_CONTRACTID \
|
||||
"@mozilla.org/notificationTelemetryService;1"
|
||||
|
||||
class nsIPrincipal;
|
||||
class nsIVariant;
|
||||
@ -44,6 +49,35 @@ public:
|
||||
Notify(JSContext* aCx, workers::Status aStatus) override;
|
||||
};
|
||||
|
||||
// Records telemetry probes at application startup, when a notification is
|
||||
// shown, and when the notification permission is revoked for a site.
|
||||
class NotificationTelemetryService final : public nsIObserver
|
||||
{
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSIOBSERVER
|
||||
|
||||
NotificationTelemetryService();
|
||||
|
||||
static already_AddRefed<NotificationTelemetryService> GetInstance();
|
||||
|
||||
nsresult Init();
|
||||
void RecordDNDSupported();
|
||||
void RecordPermissions();
|
||||
nsresult RecordSender(nsIPrincipal* aPrincipal);
|
||||
|
||||
private:
|
||||
virtual ~NotificationTelemetryService();
|
||||
|
||||
nsresult AddPermissionChangeObserver();
|
||||
nsresult RemovePermissionChangeObserver();
|
||||
|
||||
bool GetNotificationPermission(nsISupports* aSupports,
|
||||
uint32_t* aCapability);
|
||||
|
||||
bool mDNDRecorded;
|
||||
nsTHashtable<nsStringHashKey> mOrigins;
|
||||
};
|
||||
|
||||
/*
|
||||
* Notifications on workers introduce some lifetime issues. The property we
|
||||
@ -107,6 +141,7 @@ class Notification : public DOMEventTargetHelper
|
||||
friend class ServiceWorkerNotificationObserver;
|
||||
friend class WorkerGetRunnable;
|
||||
friend class WorkerNotificationObserver;
|
||||
friend class NotificationTelemetryService;
|
||||
|
||||
public:
|
||||
IMPL_EVENT_HANDLER(click)
|
||||
@ -290,6 +325,7 @@ protected:
|
||||
const nsAString& aTitle,
|
||||
const NotificationOptions& aOptions);
|
||||
|
||||
bool IsInPrivateBrowsing();
|
||||
void ShowInternal();
|
||||
void CloseInternal();
|
||||
|
||||
|
@ -82,4 +82,7 @@
|
||||
#define SERVICEWORKERMANAGER_CID \
|
||||
{ 0xc74bde32, 0xbcc7, 0x4840, { 0x84, 0x30, 0xc7, 0x33, 0x35, 0x1b, 0x21, 0x2a } }
|
||||
|
||||
#define NOTIFICATIONTELEMETRYSERVICE_CID \
|
||||
{ 0x5995b782, 0x6a0e, 0x4066, { 0xaa, 0xc5, 0x27, 0x6f, 0x0a, 0x9a, 0xd8, 0xcf } }
|
||||
|
||||
#endif /* nsLayoutCID_h__ */
|
||||
|
@ -87,6 +87,7 @@
|
||||
#include "mozilla/dom/quota/QuotaManagerService.h"
|
||||
#include "mozilla/dom/workers/ServiceWorkerManager.h"
|
||||
#include "mozilla/dom/workers/WorkerDebuggerManager.h"
|
||||
#include "mozilla/dom/Notification.h"
|
||||
#include "mozilla/OSFileConstants.h"
|
||||
#include "mozilla/Services.h"
|
||||
|
||||
@ -273,6 +274,7 @@ using mozilla::dom::UDPSocketChild;
|
||||
using mozilla::dom::time::TimeService;
|
||||
using mozilla::net::StreamingProtocolControllerService;
|
||||
using mozilla::gmp::GeckoMediaPluginService;
|
||||
using mozilla::dom::NotificationTelemetryService;
|
||||
|
||||
// Transformiix
|
||||
/* 5d5d92cd-6bf8-11d9-bf4a-000a95dc234c */
|
||||
@ -400,6 +402,7 @@ NS_GENERIC_FACTORY_CONSTRUCTOR(InputPortData)
|
||||
NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIPresentationService,
|
||||
NS_CreatePresentationService)
|
||||
NS_GENERIC_FACTORY_CONSTRUCTOR(PresentationSessionTransport)
|
||||
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(NotificationTelemetryService, Init)
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
static bool gInitialized = false;
|
||||
@ -762,6 +765,7 @@ NS_DEFINE_NAMED_CID(NS_TEXTEDITOR_CID);
|
||||
NS_DEFINE_NAMED_CID(DOMREQUEST_SERVICE_CID);
|
||||
NS_DEFINE_NAMED_CID(QUOTAMANAGER_SERVICE_CID);
|
||||
NS_DEFINE_NAMED_CID(SERVICEWORKERMANAGER_CID);
|
||||
NS_DEFINE_NAMED_CID(NOTIFICATIONTELEMETRYSERVICE_CID);
|
||||
NS_DEFINE_NAMED_CID(WORKERDEBUGGERMANAGER_CID);
|
||||
#ifdef MOZ_WIDGET_GONK
|
||||
NS_DEFINE_NAMED_CID(SYSTEMWORKERMANAGER_CID);
|
||||
@ -1070,6 +1074,7 @@ static const mozilla::Module::CIDEntry kLayoutCIDs[] = {
|
||||
{ &kDOMREQUEST_SERVICE_CID, false, nullptr, DOMRequestServiceConstructor },
|
||||
{ &kQUOTAMANAGER_SERVICE_CID, false, nullptr, QuotaManagerServiceConstructor },
|
||||
{ &kSERVICEWORKERMANAGER_CID, false, nullptr, ServiceWorkerManagerConstructor },
|
||||
{ &kNOTIFICATIONTELEMETRYSERVICE_CID, false, nullptr, NotificationTelemetryServiceConstructor },
|
||||
{ &kWORKERDEBUGGERMANAGER_CID, true, nullptr, WorkerDebuggerManagerConstructor },
|
||||
#ifdef MOZ_WIDGET_GONK
|
||||
{ &kSYSTEMWORKERMANAGER_CID, true, nullptr, SystemWorkerManagerConstructor },
|
||||
@ -1238,6 +1243,7 @@ static const mozilla::Module::ContractIDEntry kLayoutContracts[] = {
|
||||
{ DOMREQUEST_SERVICE_CONTRACTID, &kDOMREQUEST_SERVICE_CID },
|
||||
{ QUOTAMANAGER_SERVICE_CONTRACTID, &kQUOTAMANAGER_SERVICE_CID },
|
||||
{ SERVICEWORKERMANAGER_CONTRACTID, &kSERVICEWORKERMANAGER_CID },
|
||||
{ NOTIFICATIONTELEMETRYSERVICE_CONTRACTID, &kNOTIFICATIONTELEMETRYSERVICE_CID },
|
||||
{ WORKERDEBUGGERMANAGER_CONTRACTID, &kWORKERDEBUGGERMANAGER_CID },
|
||||
#ifdef MOZ_WIDGET_GONK
|
||||
{ SYSTEMWORKERMANAGER_CONTRACTID, &kSYSTEMWORKERMANAGER_CID },
|
||||
@ -1352,6 +1358,7 @@ static const mozilla::Module::CategoryEntry kLayoutCategories[] = {
|
||||
#endif
|
||||
{ "profile-after-change", "PresentationDeviceManager", PRESENTATION_DEVICE_MANAGER_CONTRACTID },
|
||||
{ "profile-after-change", "PresentationService", PRESENTATION_SERVICE_CONTRACTID },
|
||||
{ "profile-after-change", "Notification Telemetry Service", NOTIFICATIONTELEMETRYSERVICE_CONTRACTID },
|
||||
{ nullptr }
|
||||
};
|
||||
|
||||
|
@ -4225,18 +4225,28 @@ void ScrollFrameHelper::CurPosAttributeChanged(nsIContent* aContent)
|
||||
|
||||
/* ============= Scroll events ========== */
|
||||
|
||||
NS_IMETHODIMP
|
||||
ScrollFrameHelper::ScrollEvent::Run()
|
||||
ScrollFrameHelper::ScrollEvent::ScrollEvent(ScrollFrameHelper* aHelper)
|
||||
: mHelper(aHelper)
|
||||
{
|
||||
if (mHelper)
|
||||
mHelper->FireScrollEvent();
|
||||
return NS_OK;
|
||||
mHelper->mOuter->PresContext()->RefreshDriver()->AddRefreshObserver(this, Flush_Style);
|
||||
}
|
||||
|
||||
ScrollFrameHelper::ScrollEvent::~ScrollEvent()
|
||||
{
|
||||
mHelper->mOuter->PresContext()->RefreshDriver()->RemoveRefreshObserver(this, Flush_Style);
|
||||
}
|
||||
|
||||
void
|
||||
ScrollFrameHelper::ScrollEvent::WillRefresh(mozilla::TimeStamp aTime)
|
||||
{
|
||||
mHelper->FireScrollEvent();
|
||||
}
|
||||
|
||||
void
|
||||
ScrollFrameHelper::FireScrollEvent()
|
||||
{
|
||||
mScrollEvent.Forget();
|
||||
MOZ_ASSERT(mScrollEvent);
|
||||
mScrollEvent = nullptr;
|
||||
|
||||
ActiveLayerTracker::SetCurrentScrollHandlerFrame(mOuter);
|
||||
WidgetGUIEvent event(true, eScroll, nullptr);
|
||||
@ -4263,14 +4273,11 @@ ScrollFrameHelper::FireScrollEvent()
|
||||
void
|
||||
ScrollFrameHelper::PostScrollEvent()
|
||||
{
|
||||
if (mScrollEvent.IsPending())
|
||||
if (mScrollEvent)
|
||||
return;
|
||||
|
||||
nsRootPresContext* rpc = mOuter->PresContext()->GetRootPresContext();
|
||||
if (!rpc)
|
||||
return;
|
||||
// The ScrollEvent constructor registers itself with the refresh driver.
|
||||
mScrollEvent = new ScrollEvent(this);
|
||||
rpc->AddWillPaintObserver(mScrollEvent.get());
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include "nsIReflowCallback.h"
|
||||
#include "nsBoxLayoutState.h"
|
||||
#include "nsQueryFrame.h"
|
||||
#include "nsRefreshDriver.h"
|
||||
#include "nsExpirationTracker.h"
|
||||
#include "TextOverflow.h"
|
||||
#include "ScrollVelocityQueue.h"
|
||||
@ -101,11 +102,13 @@ public:
|
||||
|
||||
bool IsSmoothScrollingEnabled();
|
||||
|
||||
class ScrollEvent : public nsRunnable {
|
||||
class ScrollEvent : public nsARefreshObserver {
|
||||
public:
|
||||
NS_DECL_NSIRUNNABLE
|
||||
explicit ScrollEvent(ScrollFrameHelper *helper) : mHelper(helper) {}
|
||||
void Revoke() { mHelper = nullptr; }
|
||||
NS_INLINE_DECL_REFCOUNTING(ScrollEvent, override)
|
||||
explicit ScrollEvent(ScrollFrameHelper *helper);
|
||||
void WillRefresh(mozilla::TimeStamp aTime) override;
|
||||
protected:
|
||||
virtual ~ScrollEvent();
|
||||
private:
|
||||
ScrollFrameHelper *mHelper;
|
||||
};
|
||||
@ -417,7 +420,7 @@ public:
|
||||
nsCOMPtr<nsIContent> mScrollCornerContent;
|
||||
nsCOMPtr<nsIContent> mResizerContent;
|
||||
|
||||
nsRevocableEventPtr<ScrollEvent> mScrollEvent;
|
||||
RefPtr<ScrollEvent> mScrollEvent;
|
||||
nsRevocableEventPtr<AsyncScrollPortEvent> mAsyncScrollPortEvent;
|
||||
nsRevocableEventPtr<ScrolledAreaEvent> mScrolledAreaEvent;
|
||||
nsIFrame* mHScrollbarBox;
|
||||
|
@ -657,11 +657,6 @@ pref("urlclassifier.gethash.timeout_ms", 5000);
|
||||
pref("urlclassifier.max-complete-age", 2700);
|
||||
#endif
|
||||
|
||||
// URL for posting tiles metrics.
|
||||
#ifdef RELEASE_BUILD
|
||||
pref("browser.tiles.reportURL", "https://tiles.services.mozilla.com/v2/links/click");
|
||||
#endif
|
||||
|
||||
// True if this is the first time we are showing about:firstrun
|
||||
pref("browser.firstrun.show.uidiscovery", true);
|
||||
pref("browser.firstrun.show.localepicker", false);
|
||||
|
@ -35,9 +35,6 @@
|
||||
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK"/>
|
||||
<uses-permission android:name="android.permission.VIBRATE"/>
|
||||
<uses-permission android:name="@ANDROID_PACKAGE_NAME@.permissions.PASSWORD_PROVIDER"/>
|
||||
<uses-permission android:name="@ANDROID_PACKAGE_NAME@.permissions.BROWSER_PROVIDER"/>
|
||||
<uses-permission android:name="@ANDROID_PACKAGE_NAME@.permissions.FORMHISTORY_PROVIDER"/>
|
||||
#ifdef MOZ_ANDROID_DOWNLOADS_INTEGRATION
|
||||
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" />
|
||||
#endif
|
||||
@ -371,10 +368,7 @@
|
||||
</receiver>
|
||||
|
||||
<receiver android:name="org.mozilla.gecko.GeckoMessageReceiver"
|
||||
android:permission="@ANDROID_PACKAGE_NAME@.permissions.PASSWORD_PROVIDER">
|
||||
<intent-filter>
|
||||
<action android:name="org.mozilla.gecko.INIT_PW"></action>
|
||||
</intent-filter>
|
||||
android:exported="false">
|
||||
</receiver>
|
||||
|
||||
<!-- Catch install referrer so we can do post-install work. -->
|
||||
@ -421,7 +415,7 @@
|
||||
|
||||
<provider android:name="org.mozilla.gecko.db.BrowserProvider"
|
||||
android:authorities="@ANDROID_PACKAGE_NAME@.db.browser"
|
||||
android:permission="@ANDROID_PACKAGE_NAME@.permissions.BROWSER_PROVIDER"/>
|
||||
android:exported="false"/>
|
||||
|
||||
<!-- Share overlay activity
|
||||
|
||||
@ -454,36 +448,35 @@
|
||||
<provider android:name="org.mozilla.gecko.db.PasswordsProvider"
|
||||
android:label="@string/sync_configure_engines_title_passwords"
|
||||
android:authorities="@ANDROID_PACKAGE_NAME@.db.passwords"
|
||||
android:permission="@ANDROID_PACKAGE_NAME@.permissions.PASSWORD_PROVIDER"
|
||||
android:exported="false"
|
||||
android:process="@MANGLED_ANDROID_PACKAGE_NAME@.PasswordsProvider"/>
|
||||
|
||||
<provider android:name="org.mozilla.gecko.db.FormHistoryProvider"
|
||||
android:label="@string/sync_configure_engines_title_history"
|
||||
android:authorities="@ANDROID_PACKAGE_NAME@.db.formhistory"
|
||||
android:permission="@ANDROID_PACKAGE_NAME@.permissions.FORMHISTORY_PROVIDER"
|
||||
android:protectionLevel="signature"/>
|
||||
android:exported="false"/>
|
||||
|
||||
<provider android:name="org.mozilla.gecko.GeckoProfilesProvider"
|
||||
android:authorities="@ANDROID_PACKAGE_NAME@.profiles"/>
|
||||
android:authorities="@ANDROID_PACKAGE_NAME@.profiles"
|
||||
android:exported="false"/>
|
||||
|
||||
<provider android:name="org.mozilla.gecko.db.TabsProvider"
|
||||
android:label="@string/sync_configure_engines_title_tabs"
|
||||
android:authorities="@ANDROID_PACKAGE_NAME@.db.tabs"
|
||||
android:permission="@ANDROID_PACKAGE_NAME@.permissions.BROWSER_PROVIDER"/>
|
||||
android:exported="false"/>
|
||||
|
||||
<provider android:name="org.mozilla.gecko.db.HomeProvider"
|
||||
android:authorities="@ANDROID_PACKAGE_NAME@.db.home"
|
||||
android:permission="@ANDROID_PACKAGE_NAME@.permissions.BROWSER_PROVIDER"/>
|
||||
android:exported="false"/>
|
||||
|
||||
<provider android:name="org.mozilla.gecko.db.ReadingListProvider"
|
||||
android:authorities="@ANDROID_PACKAGE_NAME@.db.readinglist"
|
||||
android:exported="false"
|
||||
android:label="@string/reading_list_title"
|
||||
android:permission="@ANDROID_PACKAGE_NAME@.permissions.BROWSER_PROVIDER"/>
|
||||
android:exported="false"/>
|
||||
|
||||
<provider android:name="org.mozilla.gecko.db.SearchHistoryProvider"
|
||||
android:authorities="@ANDROID_PACKAGE_NAME@.db.searchhistory"
|
||||
android:permission="@ANDROID_PACKAGE_NAME@.permissions.BROWSER_PROVIDER"/>
|
||||
android:exported="false"/>
|
||||
|
||||
<service
|
||||
android:exported="false"
|
||||
@ -519,14 +512,4 @@
|
||||
#endif
|
||||
|
||||
</application>
|
||||
|
||||
<permission android:name="@ANDROID_PACKAGE_NAME@.permissions.BROWSER_PROVIDER"
|
||||
android:protectionLevel="signature"/>
|
||||
|
||||
<permission android:name="@ANDROID_PACKAGE_NAME@.permissions.PASSWORD_PROVIDER"
|
||||
android:protectionLevel="signature"/>
|
||||
|
||||
<permission android:name="@ANDROID_PACKAGE_NAME@.permissions.FORMHISTORY_PROVIDER"
|
||||
android:protectionLevel="signature"/>
|
||||
|
||||
</manifest>
|
||||
|
@ -9,3 +9,4 @@ Firefox for Android
|
||||
uitelemetry
|
||||
adjust
|
||||
gradle
|
||||
defaultdomains
|
||||
|
@ -1684,11 +1684,6 @@ public class BrowserApp extends GeckoApp
|
||||
if (Versions.feature16Plus) {
|
||||
Telemetry.addToHistogram("BROWSER_IS_ASSIST_DEFAULT", (isDefaultBrowser(Intent.ACTION_ASSIST) ? 1 : 0));
|
||||
}
|
||||
|
||||
final SharedPreferences sharedPrefs = GeckoSharedPrefs.forApp(BrowserApp.this);
|
||||
if (sharedPrefs.getBoolean(GeckoPreferences.PREFS_OPEN_URLS_IN_PRIVATE, false)) {
|
||||
Telemetry.addToHistogram("FENNEC_OPEN_URLS_IN_PRIVATE", 1);
|
||||
}
|
||||
} else if ("Updater:Launch".equals(event)) {
|
||||
handleUpdaterLaunch();
|
||||
} else {
|
||||
|
@ -855,12 +855,6 @@ public class Tabs implements GeckoEventListener {
|
||||
boolean desktopMode = (flags & LOADURL_DESKTOP) != 0;
|
||||
boolean external = (flags & LOADURL_EXTERNAL) != 0;
|
||||
|
||||
final SharedPreferences sharedPrefs = GeckoSharedPrefs.forApp(mAppContext);
|
||||
final boolean isPrivatePref = sharedPrefs.getBoolean(GeckoPreferences.PREFS_OPEN_URLS_IN_PRIVATE, false);
|
||||
if (isPrivatePref && external) {
|
||||
isPrivate = true;
|
||||
}
|
||||
|
||||
args.put("url", url);
|
||||
args.put("engine", searchEngine);
|
||||
args.put("parentId", parentId);
|
||||
|
@ -177,5 +177,4 @@ public interface BrowserDB {
|
||||
public abstract boolean hasSuggestedImageUrl(String url);
|
||||
public abstract String getSuggestedImageUrlForUrl(String url);
|
||||
public abstract int getSuggestedBackgroundColorForUrl(String url);
|
||||
public abstract int getTrackingIdForUrl(String url);
|
||||
}
|
||||
|
@ -1655,11 +1655,6 @@ public class LocalBrowserDB implements BrowserDB {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTrackingIdForUrl(String url) {
|
||||
return mSuggestedSites.getTrackingIdForUrl(url);
|
||||
}
|
||||
|
||||
private static void appendUrlsFromCursor(List<String> urls, Cursor c) {
|
||||
if (!c.moveToFirst()) {
|
||||
return;
|
||||
|
@ -10,6 +10,7 @@ import org.mozilla.gecko.CrashHandler;
|
||||
import org.mozilla.gecko.GeckoApp;
|
||||
import org.mozilla.gecko.GeckoAppShell;
|
||||
import org.mozilla.gecko.GeckoEvent;
|
||||
import org.mozilla.gecko.GeckoMessageReceiver;
|
||||
import org.mozilla.gecko.NSSBridge;
|
||||
import org.mozilla.gecko.db.BrowserContract.DeletedPasswords;
|
||||
import org.mozilla.gecko.db.BrowserContract.Passwords;
|
||||
@ -216,8 +217,10 @@ public class PasswordsProvider extends SQLiteBridgeContentProvider {
|
||||
|
||||
@Override
|
||||
public void initGecko() {
|
||||
GeckoAppShell.sendEventToGecko(GeckoEvent.createBroadcastEvent("Passwords:Init", null));
|
||||
Intent initIntent = new Intent(GeckoApp.ACTION_INIT_PW);
|
||||
// We're not in the main process. The receiver of this Intent can
|
||||
// communicate with Gecko in the main process.
|
||||
Intent initIntent = new Intent(getContext(), GeckoMessageReceiver.class);
|
||||
initIntent.setAction(GeckoApp.ACTION_INIT_PW);
|
||||
mContext.sendBroadcast(initIntent);
|
||||
}
|
||||
|
||||
|
@ -379,10 +379,6 @@ public class StubBrowserDB implements BrowserDB {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public int getTrackingIdForUrl(String url) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
public Cursor getTopSites(ContentResolver cr, int minLimit, int maxLimit) {
|
||||
return null;
|
||||
}
|
||||
|
@ -83,9 +83,6 @@ public class SuggestedSites {
|
||||
BrowserContract.SuggestedSites.TITLE,
|
||||
};
|
||||
|
||||
public static final int TRACKING_ID_NONE = -1;
|
||||
|
||||
private static final String JSON_KEY_TRACKING_ID = "trackingid";
|
||||
private static final String JSON_KEY_URL = "url";
|
||||
private static final String JSON_KEY_TITLE = "title";
|
||||
private static final String JSON_KEY_IMAGE_URL = "imageurl";
|
||||
@ -97,11 +94,9 @@ public class SuggestedSites {
|
||||
public final String title;
|
||||
public final String imageUrl;
|
||||
public final String bgColor;
|
||||
public final int trackingId;
|
||||
public final boolean restricted;
|
||||
|
||||
public Site(JSONObject json) throws JSONException {
|
||||
this.trackingId = json.isNull(JSON_KEY_TRACKING_ID) ? TRACKING_ID_NONE : json.getInt(JSON_KEY_TRACKING_ID);
|
||||
this.restricted = !json.isNull(JSON_KEY_RESTRICTED);
|
||||
this.url = json.getString(JSON_KEY_URL);
|
||||
this.title = json.getString(JSON_KEY_TITLE);
|
||||
@ -111,8 +106,7 @@ public class SuggestedSites {
|
||||
validate();
|
||||
}
|
||||
|
||||
public Site(int trackingId, String url, String title, String imageUrl, String bgColor) {
|
||||
this.trackingId = trackingId;
|
||||
public Site(String url, String title, String imageUrl, String bgColor) {
|
||||
this.url = url;
|
||||
this.title = title;
|
||||
this.imageUrl = imageUrl;
|
||||
@ -135,8 +129,7 @@ public class SuggestedSites {
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "{ trackingId = " + trackingId + "\n" +
|
||||
"url = " + url + "\n" +
|
||||
return "{ url = " + url + "\n" +
|
||||
"restricted = " + restricted + "\n" +
|
||||
"title = " + title + "\n" +
|
||||
"imageUrl = " + imageUrl + "\n" +
|
||||
@ -146,10 +139,6 @@ public class SuggestedSites {
|
||||
public JSONObject toJSON() throws JSONException {
|
||||
final JSONObject json = new JSONObject();
|
||||
|
||||
if (trackingId >= 0) {
|
||||
json.put(JSON_KEY_TRACKING_ID, trackingId);
|
||||
}
|
||||
|
||||
if (restricted) {
|
||||
json.put(JSON_KEY_RESTRICTED, true);
|
||||
}
|
||||
@ -541,11 +530,6 @@ public class SuggestedSites {
|
||||
return (site != null ? site.bgColor : null);
|
||||
}
|
||||
|
||||
public int getTrackingIdForUrl(String url) {
|
||||
final Site site = getSiteForUrl(url);
|
||||
return (site != null ? site.trackingId : TRACKING_ID_NONE);
|
||||
}
|
||||
|
||||
private Set<String> loadBlacklist() {
|
||||
Log.d(LOGTAG, "Loading blacklisted suggested sites from SharedPreferences.");
|
||||
final Set<String> blacklist = new HashSet<String>();
|
||||
|
@ -22,10 +22,13 @@ public class FirstrunPagerConfig {
|
||||
|
||||
public static List<FirstrunPanelConfig> getDefault(Context context) {
|
||||
final List<FirstrunPanelConfig> panels = new LinkedList<>();
|
||||
if (isInExperimentLocal(context, ONBOARDING_A)) {
|
||||
|
||||
// The "Import" feature is disabled on devices running Android M+ (Bug 1183559).
|
||||
// Exclude these users from the experiment to add an "Import" panel.
|
||||
if (isInExperimentLocal(context, ONBOARDING_A) && AppConstants.Versions.preM) {
|
||||
panels.add(new FirstrunPanelConfig(WelcomePanel.class.getName(), WelcomePanel.TITLE_RES));
|
||||
Telemetry.startUISession(TelemetryContract.Session.EXPERIMENT, ONBOARDING_A);
|
||||
} else if (isInExperimentLocal(context, ONBOARDING_B)) {
|
||||
} else if (isInExperimentLocal(context, ONBOARDING_B) && AppConstants.Versions.preM) {
|
||||
// Strings used for first run, pulled from existing strings.
|
||||
panels.add(new FirstrunPanelConfig(ImportPanel.class.getName(), ImportPanel.TITLE_RES));
|
||||
panels.add(new FirstrunPanelConfig(SyncPanel.class.getName(), SyncPanel.TITLE_RES));
|
||||
|
@ -17,6 +17,7 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.Button;
|
||||
import android.widget.CheckedTextView;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.ListView;
|
||||
import org.mozilla.gecko.AppConstants;
|
||||
@ -26,9 +27,7 @@ import org.mozilla.gecko.TelemetryContract;
|
||||
import org.mozilla.gecko.preferences.AndroidImport;
|
||||
import org.mozilla.gecko.util.ThreadUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class ImportPanel extends FirstrunPanel {
|
||||
public static final String LOGTAG = "GeckoImportPanel";
|
||||
@ -51,21 +50,12 @@ public class ImportPanel extends FirstrunPanel {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
final List<Integer> checked = new ArrayList<>(Arrays.asList(0, 1));
|
||||
final boolean[] checked = {true, true};
|
||||
Telemetry.sendUIEvent(TelemetryContract.Event.ACTION, TelemetryContract.Method.BUTTON, "firstrun-import-action");
|
||||
|
||||
// We set ListView.OnItemClickListener later, which overrides OnMultiChoiceClickListener, so don't make one here.
|
||||
builder.setTitle(R.string.firstrun_import_action)
|
||||
.setMultiChoiceItems(R.array.pref_import_android_entries, makeBooleanArray(R.array.pref_import_android_defaults), new DialogInterface.OnMultiChoiceClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialogInterface, int index, boolean isChecked) {
|
||||
// Add telemetry for toggling checkboxes.
|
||||
Telemetry.sendUIEvent(TelemetryContract.Event.EDIT, TelemetryContract.Method.DIALOG, "firstrun-import-dialog-checkbox");
|
||||
if (isChecked && !checked.contains(index)) {
|
||||
checked.add(index);
|
||||
} else if (!isChecked && checked.contains(index)) {
|
||||
checked.remove(checked.indexOf(index));
|
||||
}
|
||||
}
|
||||
})
|
||||
.setMultiChoiceItems(R.array.pref_import_android_entries, makeBooleanArray(R.array.pref_import_android_defaults), null)
|
||||
.setNegativeButton(R.string.button_cancel, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int i) {
|
||||
@ -76,8 +66,8 @@ public class ImportPanel extends FirstrunPanel {
|
||||
.setPositiveButton(R.string.firstrun_import_dialog_button, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int i) {
|
||||
final boolean importBookmarks = checked.contains(BOOKMARKS_INDEX);
|
||||
final boolean importHistory = checked.contains(HISTORY_INDEX);
|
||||
final boolean importBookmarks = checked[BOOKMARKS_INDEX];
|
||||
final boolean importHistory = checked[HISTORY_INDEX];
|
||||
|
||||
runImport(importBookmarks, importHistory);
|
||||
|
||||
@ -93,9 +83,18 @@ public class ImportPanel extends FirstrunPanel {
|
||||
|
||||
final Button importButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
|
||||
final ListView listView = dialog.getListView();
|
||||
|
||||
// Setting this listView listener is equivalent to setting OnMultiChoiceClickListener.
|
||||
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
||||
@Override
|
||||
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
|
||||
Telemetry.sendUIEvent(TelemetryContract.Event.EDIT, TelemetryContract.Method.DIALOG, "firstrun-import-dialog-checkbox");
|
||||
|
||||
// Keep track of checked state.
|
||||
final boolean isChecked = ((CheckedTextView) view).isChecked();
|
||||
checked[i] = isChecked;
|
||||
|
||||
// Update importButton state.
|
||||
if (AppConstants.Versions.feature11Plus) {
|
||||
if (listView.getCheckedItemCount() == 0) {
|
||||
importButton.setEnabled(false);
|
||||
|
@ -12,11 +12,9 @@ import java.util.ArrayList;
|
||||
import java.util.EnumSet;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
import org.mozilla.gecko.GeckoProfile;
|
||||
import org.mozilla.gecko.Locales;
|
||||
import org.mozilla.gecko.R;
|
||||
import org.mozilla.gecko.Restrictions;
|
||||
import org.mozilla.gecko.Tab;
|
||||
@ -35,8 +33,6 @@ import org.mozilla.gecko.home.PinSiteDialog.OnSiteSelectedListener;
|
||||
import org.mozilla.gecko.home.TopSitesGridView.OnEditPinnedSiteListener;
|
||||
import org.mozilla.gecko.home.TopSitesGridView.TopSitesGridContextMenuInfo;
|
||||
import org.mozilla.gecko.restrictions.Restrictable;
|
||||
import org.mozilla.gecko.tiles.TilesRecorder;
|
||||
import org.mozilla.gecko.tiles.Tile;
|
||||
import org.mozilla.gecko.util.StringUtils;
|
||||
import org.mozilla.gecko.util.ThreadUtils;
|
||||
|
||||
@ -221,14 +217,6 @@ public class TopSitesPanel extends HomeFragment {
|
||||
}
|
||||
Telemetry.sendUIEvent(TelemetryContract.Event.LOAD_URL, method, Integer.toString(position));
|
||||
|
||||
// Record tile click events on non-private tabs.
|
||||
final Tab tab = Tabs.getInstance().getSelectedTab();
|
||||
if (!tab.isPrivate()) {
|
||||
final Locale locale = Locale.getDefault();
|
||||
final String localeTag = Locales.getLanguageTag(locale);
|
||||
TilesRecorder.recordAction(tab, TilesRecorder.ACTION_CLICK, position, getTilesSnapshot(), localeTag);
|
||||
}
|
||||
|
||||
mUrlOpenListener.onUrlOpen(url, EnumSet.noneOf(OnUrlOpenListener.Flags.class));
|
||||
}
|
||||
} else {
|
||||
@ -276,27 +264,6 @@ public class TopSitesPanel extends HomeFragment {
|
||||
registerForContextMenu(mGrid);
|
||||
}
|
||||
|
||||
private List<Tile> getTilesSnapshot() {
|
||||
final int count = mGrid.getCount();
|
||||
final ArrayList<Tile> snapshot = new ArrayList<>();
|
||||
final BrowserDB db = GeckoProfile.get(getActivity()).getDB();
|
||||
for (int i = 0; i < count; i++) {
|
||||
final Cursor cursor = (Cursor) mGrid.getItemAtPosition(i);
|
||||
final int type = cursor.getInt(cursor.getColumnIndexOrThrow(TopSites.TYPE));
|
||||
|
||||
if (type == TopSites.TYPE_BLANK) {
|
||||
snapshot.add(null);
|
||||
continue;
|
||||
}
|
||||
|
||||
final String url = cursor.getString(cursor.getColumnIndexOrThrow(TopSites.URL));
|
||||
final int id = db.getTrackingIdForUrl(url);
|
||||
final boolean pinned = (type == TopSites.TYPE_PINNED);
|
||||
snapshot.add(new Tile(id, pinned));
|
||||
}
|
||||
return snapshot;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroyView() {
|
||||
super.onDestroyView();
|
||||
|
@ -131,7 +131,6 @@ OnSharedPreferenceChangeListener
|
||||
private static final String PREFS_SYNC = NON_PREF_PREFIX + "sync";
|
||||
private static final String PREFS_TRACKING_PROTECTION = "privacy.trackingprotection.state";
|
||||
private static final String PREFS_TRACKING_PROTECTION_PB = "privacy.trackingprotection.pbmode.enabled";
|
||||
public static final String PREFS_OPEN_URLS_IN_PRIVATE = NON_PREF_PREFIX + "openExternalURLsPrivately";
|
||||
public static final String PREFS_VOICE_INPUT_ENABLED = NON_PREF_PREFIX + "voice_input_enabled";
|
||||
public static final String PREFS_QRCODE_ENABLED = NON_PREF_PREFIX + "qrcode_enabled";
|
||||
private static final String PREFS_ADVANCED = NON_PREF_PREFIX + "advanced.enabled";
|
||||
@ -701,13 +700,6 @@ OnSharedPreferenceChangeListener
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
} else if (PREFS_OPEN_URLS_IN_PRIVATE.equals(key)) {
|
||||
// Remove UI for opening external links in private browsing on non-Nightly builds.
|
||||
if (!AppConstants.NIGHTLY_BUILD || !Restrictions.isAllowed(this, Restrictable.PRIVATE_BROWSING)) {
|
||||
preferences.removePreference(pref);
|
||||
i--;
|
||||
continue;
|
||||
}
|
||||
} else if (PREFS_TRACKING_PROTECTION.equals(key)) {
|
||||
// Remove UI for global TP pref in non-Nightly builds.
|
||||
if (!AppConstants.NIGHTLY_BUILD) {
|
||||
|
@ -1,18 +0,0 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.mozilla.gecko.tiles;
|
||||
|
||||
/**
|
||||
* Metadata for a tile shown on the top sites grid.
|
||||
*/
|
||||
public class Tile {
|
||||
public final int id;
|
||||
public final boolean pinned;
|
||||
|
||||
public Tile(int id, boolean pinned) {
|
||||
this.id = id;
|
||||
this.pinned = pinned;
|
||||
}
|
||||
}
|
@ -1,108 +0,0 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.mozilla.gecko.tiles;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
import org.json.JSONException;
|
||||
|
||||
import org.mozilla.gecko.GeckoAppShell;
|
||||
import org.mozilla.gecko.GeckoEvent;
|
||||
import org.mozilla.gecko.Tab;
|
||||
|
||||
import android.util.Log;
|
||||
|
||||
public class TilesRecorder {
|
||||
public static final String ACTION_CLICK = "click";
|
||||
|
||||
private static final String LOG_TAG = "GeckoTilesRecorder";
|
||||
private static final String EVENT_TILES_CLICK = "Tiles:Click";
|
||||
|
||||
private TilesRecorder() {
|
||||
// Empty private constructor to prevent construction
|
||||
}
|
||||
|
||||
public static void recordAction(Tab tab, String action, int index, List<Tile> tiles, String locale) {
|
||||
final Tile clickedTile = tiles.get(index);
|
||||
|
||||
if (tab == null || clickedTile == null) {
|
||||
throw new IllegalArgumentException("Tab and tile cannot be null");
|
||||
}
|
||||
|
||||
if (clickedTile.id == -1) {
|
||||
// User clicked a non-distribution tile, so we don't need to report it.
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
final JSONArray tilesJSON = new JSONArray();
|
||||
int clickedTileIndex = -1;
|
||||
int currentTileIndex = 0;
|
||||
|
||||
for (int i = 0; i < tiles.size(); i++) {
|
||||
final Tile tile = tiles.get(i);
|
||||
if (tile == null) {
|
||||
// Tiles may be null if there are pinned tiles with blank tiles in between.
|
||||
continue;
|
||||
}
|
||||
|
||||
// jsonForTile will return {} if the tile isn't tracked or pinned. That's fine
|
||||
// as we still want to record that a tile exists (i.e., is not empty).
|
||||
tilesJSON.put(jsonForTile(tile, currentTileIndex, i));
|
||||
|
||||
// The click index is relative to the tiles array we're building. That index is
|
||||
// incremented whenever we hit a non-null tile. When we find the tile that was
|
||||
// clicked, the index will match its position in the new array.
|
||||
if (clickedTile == tile) {
|
||||
clickedTileIndex = currentTileIndex;
|
||||
}
|
||||
|
||||
currentTileIndex++;
|
||||
}
|
||||
|
||||
if (clickedTileIndex == -1) {
|
||||
throw new IllegalStateException("Clicked tile index not set");
|
||||
}
|
||||
|
||||
final JSONObject payload = new JSONObject();
|
||||
payload.put(action, clickedTileIndex);
|
||||
payload.put("tiles", tilesJSON);
|
||||
payload.put("locale", locale);
|
||||
|
||||
final JSONObject data = new JSONObject();
|
||||
data.put("tabId", tab.getId());
|
||||
data.put("payload", payload.toString());
|
||||
|
||||
GeckoAppShell.sendEventToGecko(GeckoEvent.createBroadcastEvent(EVENT_TILES_CLICK, data.toString()));
|
||||
} catch (JSONException e) {
|
||||
Log.e(LOG_TAG, "JSON error", e);
|
||||
}
|
||||
}
|
||||
|
||||
private static JSONObject jsonForTile(Tile tile, int tileIndex, int viewIndex) throws JSONException {
|
||||
final JSONObject tileJSON = new JSONObject();
|
||||
|
||||
// Set the ID only if it is a distribution tile with a tracking ID.
|
||||
if (tile.id != -1) {
|
||||
tileJSON.put("id", tile.id);
|
||||
}
|
||||
|
||||
// Set pinned to true only if the tile is pinned.
|
||||
if (tile.pinned) {
|
||||
tileJSON.put("pin", true);
|
||||
}
|
||||
|
||||
// If the tile's index in the new array does not match its index in the view grid, record
|
||||
// its position in the view grid. This can happen if there are pinned tiles with blank tiles
|
||||
// in between.
|
||||
if (tileIndex != viewIndex) {
|
||||
tileJSON.put("pos", viewIndex);
|
||||
}
|
||||
|
||||
return tileJSON;
|
||||
}
|
||||
}
|
@ -170,8 +170,6 @@
|
||||
<!ENTITY pref_developer_remotedebugging_wifi "Remote debugging via Wi-Fi">
|
||||
<!ENTITY pref_developer_remotedebugging_wifi_disabled_summary "Wi-Fi debugging requires your device to have a QR code reader app installed.">
|
||||
<!ENTITY pref_remember_signons2 "Remember logins">
|
||||
<!ENTITY pref_open_external_urls_privately_title "Open links in Private browsing">
|
||||
<!ENTITY pref_open_external_urls_privately_summary "For all external links opened in &brandShortName;">
|
||||
<!ENTITY pref_manage_logins "Manage logins">
|
||||
|
||||
<!ENTITY pref_category_home "Home">
|
||||
|
@ -538,8 +538,6 @@ gbjar.sources += ['java/org/mozilla/gecko/' + x for x in [
|
||||
'TextSelection.java',
|
||||
'TextSelectionHandle.java',
|
||||
'ThumbnailHelper.java',
|
||||
'tiles/Tile.java',
|
||||
'tiles/TilesRecorder.java',
|
||||
'toolbar/AutocompleteHandler.java',
|
||||
'toolbar/BackButton.java',
|
||||
'toolbar/BrowserToolbar.java',
|
||||
|
@ -33,10 +33,5 @@
|
||||
android:summary="@string/pref_tab_queue_summary"
|
||||
android:defaultValue="false" />
|
||||
|
||||
<CheckBoxPreference android:key="android.not_a_preference.openExternalURLsPrivately"
|
||||
android:title="@string/pref_open_external_urls_privately_title"
|
||||
android:summary="@string/pref_open_external_urls_privately_summary"
|
||||
android:defaultValue="false" />
|
||||
|
||||
</PreferenceScreen>
|
||||
|
||||
|
@ -35,10 +35,5 @@
|
||||
android:summary="@string/pref_tab_queue_summary"
|
||||
android:defaultValue="false" />
|
||||
|
||||
<CheckBoxPreference android:key="android.not_a_preference.openExternalURLsPrivately"
|
||||
android:title="@string/pref_open_external_urls_privately_title"
|
||||
android:summary="@string/pref_open_external_urls_privately_summary"
|
||||
android:defaultValue="false" />
|
||||
|
||||
</PreferenceScreen>
|
||||
|
||||
|
@ -39,10 +39,5 @@
|
||||
android:summary="@string/pref_tab_queue_summary"
|
||||
android:defaultValue="false" />
|
||||
|
||||
<CheckBoxPreference android:key="android.not_a_preference.openExternalURLsPrivately"
|
||||
android:title="@string/pref_open_external_urls_privately_title"
|
||||
android:summary="@string/pref_open_external_urls_privately_summary"
|
||||
android:defaultValue="false" />
|
||||
|
||||
</PreferenceScreen>
|
||||
|
||||
|
@ -199,9 +199,6 @@
|
||||
|
||||
<string name="pref_remember_signons">&pref_remember_signons2;</string>
|
||||
|
||||
<string name="pref_open_external_urls_privately_title">&pref_open_external_urls_privately_title;</string>
|
||||
<string name="pref_open_external_urls_privately_summary">&pref_open_external_urls_privately_summary;</string>
|
||||
|
||||
<string name="pref_manage_logins">&pref_manage_logins;</string>
|
||||
|
||||
<string name="pref_cookies_menu">&pref_cookies_menu;</string>
|
||||
|
@ -550,15 +550,6 @@ var BrowserApp = {
|
||||
defaults.setBoolPref("media.autoplay.enabled", false);
|
||||
}
|
||||
|
||||
try {
|
||||
// Set the tiles click observer only if tiles reporting is enabled (that
|
||||
// is, a report URL is set in prefs).
|
||||
gTilesReportURL = Services.prefs.getCharPref("browser.tiles.reportURL");
|
||||
Services.obs.addObserver(this, "Tiles:Click", false);
|
||||
} catch (e) {
|
||||
// Tiles reporting is disabled.
|
||||
}
|
||||
|
||||
InitLater(() => {
|
||||
// The order that context menu items are added is important
|
||||
// Make sure the "Open in App" context menu item appears at the bottom of the list
|
||||
@ -2105,13 +2096,6 @@ var BrowserApp = {
|
||||
this.computeAcceptLanguages(osLocale, aData);
|
||||
break;
|
||||
|
||||
case "Tiles:Click":
|
||||
// Set the click data for the given tab to be handled on the next page load.
|
||||
let data = JSON.parse(aData);
|
||||
let tab = this.getTabForId(data.tabId);
|
||||
tab.tilesData = data.payload;
|
||||
break;
|
||||
|
||||
case "Fonts:Reload":
|
||||
FontEnumerator.updateFontList();
|
||||
break;
|
||||
@ -3450,9 +3434,6 @@ nsBrowserAccess.prototype = {
|
||||
var gScreenWidth = 1;
|
||||
var gScreenHeight = 1;
|
||||
|
||||
// The URL where suggested tile clicks are posted.
|
||||
var gTilesReportURL = null;
|
||||
|
||||
function Tab(aURL, aParams) {
|
||||
this.filter = null;
|
||||
this.browser = null;
|
||||
@ -3469,7 +3450,6 @@ function Tab(aURL, aParams) {
|
||||
this.desktopMode = false;
|
||||
this.originalURI = null;
|
||||
this.hasTouchListener = false;
|
||||
this.tilesData = null;
|
||||
|
||||
this.create(aURL, aParams);
|
||||
}
|
||||
@ -4359,27 +4339,6 @@ Tab.prototype = {
|
||||
ExternalApps.clearPageAction();
|
||||
}
|
||||
}
|
||||
|
||||
// Upload any pending tile click events.
|
||||
// Tiles data will be non-null for this tab only if:
|
||||
// 1) the user just clicked a suggested site with a tracking ID, and
|
||||
// 2) tiles reporting is enabled (gTilesReportURL != null).
|
||||
if (this.tilesData) {
|
||||
let xhr = new XMLHttpRequest();
|
||||
xhr.open("POST", gTilesReportURL, true);
|
||||
xhr.setRequestHeader("Content-Type", "application/json");
|
||||
xhr.onload = function (e) {
|
||||
// Broadcast reply if X-Robocop header is set. Used for testing only.
|
||||
if (this.status == 200 && this.getResponseHeader("X-Robocop")) {
|
||||
Messaging.sendRequest({
|
||||
type: "Robocop:TilesResponse",
|
||||
response: this.response
|
||||
});
|
||||
}
|
||||
};
|
||||
xhr.send(this.tilesData);
|
||||
this.tilesData = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -4427,14 +4386,6 @@ Tab.prototype = {
|
||||
success = aRequest.status == 0;
|
||||
}
|
||||
|
||||
// At this point, either:
|
||||
// 1) the page loaded, the pageshow event fired, and the tilesData XHR has been posted, or
|
||||
// 2) the page did not load, and we're loading a new page.
|
||||
// Either way, we're done with the tiles data, so clear it out.
|
||||
if (this.tilesData && (aStateFlags & Ci.nsIWebProgressListener.STATE_STOP)) {
|
||||
this.tilesData = null;
|
||||
}
|
||||
|
||||
// Check to see if we restoring the content from a previous presentation (session)
|
||||
// since there should be no real network activity
|
||||
let restoring = (aStateFlags & Ci.nsIWebProgressListener.STATE_RESTORING) > 0;
|
||||
|
@ -23,6 +23,8 @@ Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
// HelperApp Launcher Dialog
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "Snackbars", "resource://gre/modules/Snackbars.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyGetter(this, "ContentAreaUtils", function() {
|
||||
let ContentAreaUtils = {};
|
||||
Services.scriptloader.loadSubScript("chrome://global/content/contentAreaUtils.js", ContentAreaUtils);
|
||||
@ -197,17 +199,11 @@ HelperAppLauncherDialog.prototype = {
|
||||
_refuseDownload: function(aLauncher) {
|
||||
aLauncher.cancel(Cr.NS_BINDING_ABORTED);
|
||||
|
||||
let win = this.getNativeWindow();
|
||||
if (!win) {
|
||||
// Oops.
|
||||
Services.console.logStringMessage("Refusing download, but can't show a toast.");
|
||||
return;
|
||||
}
|
||||
|
||||
Services.console.logStringMessage("Refusing download of non-downloadable file.");
|
||||
|
||||
let bundle = Services.strings.createBundle("chrome://browser/locale/handling.properties");
|
||||
let failedText = bundle.GetStringFromName("download.blocked");
|
||||
win.toast.show(failedText, "long");
|
||||
|
||||
Snackbars.show(bundle.GetStringFromName("download.blocked"), Snackbars.LENGTH_LONG);
|
||||
},
|
||||
|
||||
_getPrefName: function getPrefName(mimetype) {
|
||||
|
68
mobile/android/docs/defaultdomains.rst
Normal file
68
mobile/android/docs/defaultdomains.rst
Normal file
@ -0,0 +1,68 @@
|
||||
.. -*- Mode: rst; fill-column: 100; -*-
|
||||
|
||||
==========================
|
||||
Shipping Default Domains
|
||||
==========================
|
||||
|
||||
Firefox for Mobile (Android and iOS) ships sets of default content in order to improve the
|
||||
first-run experience. There are two primary places where default sets of domains are used: URLBar
|
||||
domain auto-completion, and Top Sites suggested thumbnails.
|
||||
|
||||
The source of these domains is typically the Alexa top sites lists, global and by-country. Before
|
||||
shipping the sets of domains, the lists are sanitized.
|
||||
|
||||
Domain Auto-completion
|
||||
======================
|
||||
|
||||
As you type in the URLBar, Firefox will scan your history and auto-complete previously visited
|
||||
domains that match what you have entered. This can make navigating to web sites faster because it
|
||||
can avoid significant amounts of typing. During your first few uses, Firefox does not have any
|
||||
history and you are forced to type full URLs. Shipping a set of top domains provides a fallback.
|
||||
|
||||
The top domains list can be localized, but Firefox will fallback to using en-US as the default for all
|
||||
locales that do not provide a specific set. The list can have several hundred domains, but due to
|
||||
size concerns, is usually capped to five hundred or less.
|
||||
|
||||
Sanitizing Methods
|
||||
------------------
|
||||
|
||||
After getting a source list, e.g. Alexa top global sites, we apply some simple guidelines to the
|
||||
list of domains:
|
||||
|
||||
* Remove any locale-specific domain duplicates. We assume primary URLs (.com) will redirect to the
|
||||
correct locale (.co.jp) at run-time.
|
||||
* Remove any explicit adult content domains.
|
||||
* Remove any sites that use explicit or adult advertising.
|
||||
* Remove any URL shorteners and redirecters.
|
||||
* Remove any content/CDN domains. Some sites use separate domains to store images and other
|
||||
static content.
|
||||
* Remove any sites primarily used for advertising or management of advertising.
|
||||
* Remove any sites that fail to load in mobile browsers.
|
||||
* Remove any time/date specific sites that may have appeared on the list due to seasonal spikes.
|
||||
|
||||
Suggested Sites
|
||||
===============
|
||||
|
||||
Suggested sites are default thumbnails, displayed on the Top Sites home panel. A suggested site
|
||||
consists of a title, thumbnail image, background color and URL. Multiple images are usually
|
||||
required to handle the variety of device DPIs.
|
||||
|
||||
Suggested sites can be localized, but Firefox will fallback to using en-US as the default for all
|
||||
locales that do not provide a specific set. The list is usually small, with perhaps fewer than ten
|
||||
sites.
|
||||
|
||||
Sanitizing Methods
|
||||
------------------
|
||||
|
||||
After getting a source list, e.g. Alexa top global sites, we apply some simple guidelines to the
|
||||
list of domains:
|
||||
|
||||
* Remove pure search engines. We handle search engines differently and don't consider them to be
|
||||
suggested sites.
|
||||
* Remove any locale-specific domain duplicates. We assume primary URLs (.com) will redirect to the
|
||||
correct locale (.co.jp) at run-time.
|
||||
* Remove any explicit adult content domains.
|
||||
* Remove any sites that use explicit or adult advertising.
|
||||
* Remove any URL shorteners and redirecters.
|
||||
* Remove any content/CDN domains. Some sites use separate domains to store images and other
|
||||
static content.
|
@ -14,6 +14,7 @@ Contents:
|
||||
localeswitching
|
||||
uitelemetry
|
||||
adjust
|
||||
defaultdomains
|
||||
|
||||
Indices and tables
|
||||
==================
|
||||
|
@ -1,6 +1,5 @@
|
||||
<provider android:name="org.mozilla.gecko.background.healthreport.HealthReportProvider"
|
||||
android:authorities="@ANDROID_PACKAGE_NAME@.health"
|
||||
android:permission="@ANDROID_PACKAGE_NAME@.permissions.HEALTH_PROVIDER"
|
||||
android:exported="false">
|
||||
</provider>
|
||||
|
||||
|
@ -9,10 +9,6 @@
|
||||
<uses-sdk android:minSdkVersion="8"
|
||||
android:targetSdkVersion="@ANDROID_TARGET_SDK@" />
|
||||
|
||||
<uses-permission android:name="@ANDROID_BACKGROUND_TARGET_PACKAGE_NAME@.permissions.BROWSER_PROVIDER"/>
|
||||
<uses-permission android:name="@ANDROID_BACKGROUND_TARGET_PACKAGE_NAME@.permissions.FORMHISTORY_PROVIDER"/>
|
||||
<uses-permission android:name="@ANDROID_BACKGROUND_TARGET_PACKAGE_NAME@.permissions.PASSWORD_PROVIDER"/>
|
||||
|
||||
<application
|
||||
android:debuggable="true"
|
||||
android:icon="@drawable/icon"
|
||||
|
@ -9,10 +9,6 @@
|
||||
<uses-sdk android:minSdkVersion="8"
|
||||
android:targetSdkVersion="@ANDROID_TARGET_SDK@" />
|
||||
|
||||
<uses-permission android:name="@ANDROID_BROWSER_TARGET_PACKAGE_NAME@.permissions.BROWSER_PROVIDER"/>
|
||||
<uses-permission android:name="@ANDROID_BROWSER_TARGET_PACKAGE_NAME@.permissions.FORMHISTORY_PROVIDER"/>
|
||||
<uses-permission android:name="@ANDROID_BROWSER_TARGET_PACKAGE_NAME@.permissions.PASSWORD_PROVIDER"/>
|
||||
|
||||
<application
|
||||
android:debuggable="true"
|
||||
android:icon="@drawable/icon"
|
||||
|
@ -150,18 +150,11 @@ public class TestSuggestedSites extends InstrumentationTestCase {
|
||||
}
|
||||
|
||||
private String generateSites(int n, String prefix) {
|
||||
return generateSites(n, false, prefix);
|
||||
}
|
||||
|
||||
private String generateSites(int n, boolean includeIds, String prefix) {
|
||||
JSONArray sites = new JSONArray();
|
||||
|
||||
try {
|
||||
for (int i = 0; i < n; i++) {
|
||||
JSONObject site = new JSONObject();
|
||||
if (includeIds) {
|
||||
site.put("trackingid", i);
|
||||
}
|
||||
site.put("url", prefix + "url" + i);
|
||||
site.put("title", prefix + "title" + i);
|
||||
site.put("imageurl", prefix + "imageUrl" + i);
|
||||
@ -383,38 +376,6 @@ public class TestSuggestedSites extends InstrumentationTestCase {
|
||||
assertNull(suggestedSites.getBackgroundColorForUrl("foo"));
|
||||
}
|
||||
|
||||
public void testTrackingIds() {
|
||||
final int count = 3;
|
||||
|
||||
// Test suggested sites with IDs.
|
||||
resources.setSuggestedSitesResource(generateSites(count, true, ""));
|
||||
SuggestedSites suggestedSites = new SuggestedSites(context);
|
||||
Cursor c = suggestedSites.get(DEFAULT_LIMIT);
|
||||
assertEquals(count, c.getCount());
|
||||
|
||||
for (int i = 0; i < count; i++) {
|
||||
c.moveToNext();
|
||||
String url = c.getString(c.getColumnIndexOrThrow(BrowserContract.SuggestedSites.URL));
|
||||
assertTrue(suggestedSites.contains(url));
|
||||
assertEquals(i, suggestedSites.getTrackingIdForUrl(url));
|
||||
}
|
||||
c.close();
|
||||
|
||||
// Test suggested sites where IDs are undefined.
|
||||
resources.setSuggestedSitesResource(generateSites(count, false, ""));
|
||||
suggestedSites = new SuggestedSites(context);
|
||||
c = suggestedSites.get(DEFAULT_LIMIT);
|
||||
assertEquals(count, c.getCount());
|
||||
|
||||
for (int i = 0; i < count; i++) {
|
||||
c.moveToNext();
|
||||
String url = c.getString(c.getColumnIndexOrThrow(BrowserContract.SuggestedSites.URL));
|
||||
assertTrue(suggestedSites.contains(url));
|
||||
assertEquals(SuggestedSites.TRACKING_ID_NONE, suggestedSites.getTrackingIdForUrl(url));
|
||||
}
|
||||
c.close();
|
||||
}
|
||||
|
||||
public void testLocaleChanges() {
|
||||
resources.setSuggestedSitesResource(generateSites(3));
|
||||
|
||||
|
@ -1,26 +0,0 @@
|
||||
/**
|
||||
* Used with testDistribution.
|
||||
* Responds by simply echoing back the request data.
|
||||
*/
|
||||
|
||||
const cc = Components.Constructor;
|
||||
const BinaryInputStream = cc("@mozilla.org/binaryinputstream;1",
|
||||
"nsIBinaryInputStream",
|
||||
"setInputStream");
|
||||
|
||||
function handleRequest(request, response) {
|
||||
let bodyStream = new BinaryInputStream(request.bodyInputStream);
|
||||
let avail;
|
||||
let bytes = [];
|
||||
while ((avail = bodyStream.available()) > 0) {
|
||||
Array.prototype.push.apply(bytes, bodyStream.readByteArray(avail));
|
||||
}
|
||||
let data = String.fromCharCode.apply(null, bytes);
|
||||
|
||||
// Including this header will cause Gecko to broadcast the Robocop:TilesResponse event.
|
||||
response.setHeader("X-Robocop", "true", false);
|
||||
|
||||
response.setHeader("Content-Type", "application/json", false);
|
||||
response.setHeader("Cache-Control", "no-cache", false);
|
||||
response.write(data);
|
||||
}
|
@ -24,7 +24,6 @@ import org.mozilla.gecko.BrowserLocaleManager;
|
||||
import org.mozilla.gecko.GeckoProfile;
|
||||
import org.mozilla.gecko.GeckoSharedPrefs;
|
||||
import org.mozilla.gecko.db.BrowserContract;
|
||||
import org.mozilla.gecko.db.SuggestedSites;
|
||||
import org.mozilla.gecko.distribution.Distribution;
|
||||
import org.mozilla.gecko.distribution.ReferrerDescriptor;
|
||||
import org.mozilla.gecko.distribution.ReferrerReceiver;
|
||||
@ -135,20 +134,6 @@ public class testDistribution extends ContentProviderTest {
|
||||
// finish. This reduces the chance of us racing with startup pref writes.
|
||||
waitForBackgroundHappiness();
|
||||
|
||||
// Pre-clear distribution pref, override suggested sites and run tiles tests.
|
||||
clearDistributionPref();
|
||||
Distribution dist = initDistribution(mockPackagePath);
|
||||
SuggestedSites suggestedSites = new SuggestedSites(mActivity, dist);
|
||||
GeckoProfile.get(mActivity).getDB().setSuggestedSites(suggestedSites);
|
||||
|
||||
// Test tiles uploading for an en-US OS locale with no app locale.
|
||||
setOSLocale(Locale.US);
|
||||
checkTilesReporting("en-US");
|
||||
|
||||
// Test tiles uploading for an es-MX OS locale with no app locale.
|
||||
setOSLocale(new Locale("es", "MX"));
|
||||
checkTilesReporting("es-MX");
|
||||
|
||||
// Pre-clear distribution pref, run basic preferences and en-US localized preferences Tests
|
||||
clearDistributionPref();
|
||||
setTestLocale("en-US");
|
||||
@ -511,45 +496,6 @@ public class testDistribution extends ContentProviderTest {
|
||||
TestableDistribution.clearReferrerDescriptorForTesting();
|
||||
}
|
||||
|
||||
public void checkTilesReporting(String localeCode) throws JSONException {
|
||||
// Slight hack: Force top sites grid to reload.
|
||||
inputAndLoadUrl(mStringHelper.ABOUT_BLANK_URL);
|
||||
inputAndLoadUrl(mStringHelper.ABOUT_HOME_URL);
|
||||
|
||||
// Click the first tracking tile and verify the posted data.
|
||||
JSONObject response = clickTrackingTile(mStringHelper.DISTRIBUTION1_LABEL);
|
||||
mAsserter.is(response.getInt("click"), 0, "JSON click index matched");
|
||||
mAsserter.is(response.getString("locale"), localeCode, "JSON locale code matched");
|
||||
mAsserter.is(response.getString("tiles"), "[{\"id\":123},{\"id\":456},{\"id\":632},{\"id\":630},{\"id\":631}]", "JSON tiles data matched");
|
||||
|
||||
inputAndLoadUrl(mStringHelper.ABOUT_HOME_URL);
|
||||
|
||||
// Pin the second tracking tile.
|
||||
pinTopSite(mStringHelper.DISTRIBUTION2_LABEL);
|
||||
|
||||
// Click the second tracking tile and verify the posted data.
|
||||
response = clickTrackingTile(mStringHelper.DISTRIBUTION2_LABEL);
|
||||
mAsserter.is(response.getInt("click"), 1, "JSON click index matched");
|
||||
mAsserter.is(response.getString("tiles"), "[{\"id\":123},{\"id\":456,\"pin\":true},{\"id\":632},{\"id\":630},{\"id\":631}]", "JSON tiles data matched");
|
||||
|
||||
inputAndLoadUrl(mStringHelper.ABOUT_HOME_URL);
|
||||
|
||||
// Unpin the second tracking tile.
|
||||
unpinTopSite(mStringHelper.DISTRIBUTION2_LABEL);
|
||||
}
|
||||
|
||||
private JSONObject clickTrackingTile(String text) throws JSONException {
|
||||
boolean tileFound = waitForText(text);
|
||||
mAsserter.ok(tileFound, "Found tile: " + text, null);
|
||||
|
||||
Actions.EventExpecter loadExpecter = mActions.expectGeckoEvent("Robocop:TilesResponse");
|
||||
mSolo.clickOnText(text);
|
||||
String data = loadExpecter.blockForEventData();
|
||||
JSONObject dataJSON = new JSONObject(data);
|
||||
String response = dataJSON.getString("response");
|
||||
return new JSONObject(response);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUp() throws Exception {
|
||||
// TODO: Set up the content provider after setting the distribution.
|
||||
|
@ -1225,4 +1225,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
|
||||
|
||||
static const int32_t kUnknownId = -1;
|
||||
|
||||
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1458388670842000);
|
||||
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1458993517672000);
|
||||
|
@ -11,10 +11,10 @@ ad-notam.fr: did not receive HSTS header
|
||||
ad-notam.it: did not receive HSTS header
|
||||
ad-notam.us: did not receive HSTS header
|
||||
ada.is: max-age too low: 7776000
|
||||
adamstas.com: could not connect to host
|
||||
adhs-chaoten.net: did not receive HSTS header
|
||||
admin.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
adsfund.org: could not connect to host
|
||||
aerolog.co: did not receive HSTS header
|
||||
aes256.ru: could not connect to host
|
||||
aevpn.net: did not receive HSTS header
|
||||
aeyoun.com: did not receive HSTS header
|
||||
@ -23,6 +23,7 @@ agrimap.com: did not receive HSTS header
|
||||
agrios.de: did not receive HSTS header
|
||||
airbnb.com: did not receive HSTS header
|
||||
aiticon.de: did not receive HSTS header
|
||||
akclinics.org: did not receive HSTS header
|
||||
akselimedia.fi: did not receive HSTS header
|
||||
al-shami.net: did not receive HSTS header
|
||||
alecvannoten.be: did not receive HSTS header
|
||||
@ -33,6 +34,7 @@ altmv.com: max-age too low: 7776000
|
||||
amigogeek.net: did not receive HSTS header
|
||||
andreasbreitenlohner.de: did not receive HSTS header
|
||||
andreasolsson.se: could not connect to host
|
||||
anime.my: could not connect to host
|
||||
ankakaak.com: could not connect to host
|
||||
anycoin.me: could not connect to host
|
||||
apachelounge.com: did not receive HSTS header
|
||||
@ -53,9 +55,8 @@ at.search.yahoo.com: max-age too low: 172800
|
||||
atavio.at: could not connect to host
|
||||
atavio.ch: could not connect to host
|
||||
atavio.de: did not receive HSTS header
|
||||
attotech.com: did not receive HSTS header
|
||||
au.search.yahoo.com: max-age too low: 172800
|
||||
aurainfosec.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134" data: no]
|
||||
aurainfosec.com: could not connect to host
|
||||
auraredeye.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134" data: no]
|
||||
auraredshield.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134" data: no]
|
||||
auszeit.bio: did not receive HSTS header
|
||||
@ -66,13 +67,11 @@ axado.com.br: max-age too low: 0
|
||||
az.search.yahoo.com: did not receive HSTS header
|
||||
azabani.com: did not receive HSTS header
|
||||
azprep.us: could not connect to host
|
||||
baff.lu: could not connect to host
|
||||
bagelsbakery.com: could not connect to host
|
||||
balcan-underground.net: could not connect to host
|
||||
baldwinkoo.com: could not connect to host
|
||||
bccx.com: could not connect to host
|
||||
bcm.com.au: max-age too low: 0
|
||||
bcvps.com: did not receive HSTS header
|
||||
be.search.yahoo.com: did not receive HSTS header
|
||||
beastowner.com: did not receive HSTS header
|
||||
beautykat.ru: did not receive HSTS header
|
||||
@ -83,7 +82,6 @@ bevapehappy.com: did not receive HSTS header
|
||||
bhatia.at: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134" data: no]
|
||||
bi.search.yahoo.com: did not receive HSTS header
|
||||
bidon.ca: did not receive HSTS header
|
||||
bigbrownpromotions.com.au: could not connect to host
|
||||
bigdinosaur.org: did not receive HSTS header
|
||||
bigshinylock.minazo.net: could not connect to host
|
||||
billninja.com: did not receive HSTS header
|
||||
@ -102,11 +100,12 @@ bonigo.de: did not receive HSTS header
|
||||
bonitabrazilian.co.nz: did not receive HSTS header
|
||||
bowlroll.net: max-age too low: 0
|
||||
br.search.yahoo.com: max-age too low: 172800
|
||||
brage.info: could not connect to host
|
||||
braintreepayments.com: did not receive HSTS header
|
||||
brainvation.de: did not receive HSTS header
|
||||
brakstad.org: did not receive HSTS header
|
||||
bran.cc: could not connect to host
|
||||
branchtrack.com: did not receive HSTS header
|
||||
breeswish.org: could not connect to host
|
||||
brks.xyz: could not connect to host
|
||||
browserid.org: did not receive HSTS header
|
||||
brrr.fr: could not connect to host
|
||||
@ -140,6 +139,7 @@ chatbot.me: could not connect to host
|
||||
checkout.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
cheesetart.my: could not connect to host
|
||||
chfr.search.yahoo.com: max-age too low: 172800
|
||||
chijiokeindustries.co.uk: did not receive HSTS header
|
||||
chit.search.yahoo.com: max-age too low: 172800
|
||||
chm.vn: did not receive HSTS header
|
||||
chontalpa.pw: did not receive HSTS header
|
||||
@ -147,9 +147,9 @@ chrisupjohn.com: could not connect to host
|
||||
chrome-devtools-frontend.appspot.com: did not receive HSTS header (error ignored - included regardless)
|
||||
chrome.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
chroniclesofgeorge.com: did not receive HSTS header
|
||||
citiagent.cz: did not receive HSTS header
|
||||
cl.search.yahoo.com: max-age too low: 172800
|
||||
climaprecio.es: did not receive HSTS header
|
||||
clintonbloodworth.com: did not receive HSTS header
|
||||
cloudcert.org: did not receive HSTS header
|
||||
cloudflare.com: did not receive HSTS header
|
||||
cloudstoragemaus.com: could not connect to host
|
||||
@ -158,13 +158,14 @@ clycat.ru: could not connect to host
|
||||
cn.search.yahoo.com: did not receive HSTS header
|
||||
co.search.yahoo.com: max-age too low: 172800
|
||||
code.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
codereview.chromium.org: did not receive HSTS header (error ignored - included regardless)
|
||||
codepref.com: could not connect to host
|
||||
coding.net: did not receive HSTS header
|
||||
coffeeetc.co.uk: could not connect to host
|
||||
coffeestrategies.com: did not receive HSTS header
|
||||
coindam.com: could not connect to host
|
||||
colognegaming.net: could not connect to host
|
||||
comdurav.com: did not receive HSTS header
|
||||
concord-group.co.jp: did not receive HSTS header
|
||||
conformal.com: could not connect to host
|
||||
console.python.org: did not receive HSTS header
|
||||
cordial-restaurant.com: did not receive HSTS header
|
||||
@ -176,10 +177,12 @@ crbug.com: did not receive HSTS header
|
||||
crowdcurity.com: did not receive HSTS header
|
||||
crowdjuris.com: could not connect to host
|
||||
crypto.is: max-age too low: 7776000
|
||||
cryptobells.com: could not connect to host
|
||||
crysadm.com: max-age too low: 1
|
||||
csawctf.poly.edu: could not connect to host
|
||||
ct.search.yahoo.com: did not receive HSTS header
|
||||
cujanovic.com: did not receive HSTS header
|
||||
culinae.nl: did not receive HSTS header
|
||||
cyanogenmod.xxx: could not connect to host
|
||||
cybershambles.com: could not connect to host
|
||||
cydia-search.io: could not connect to host
|
||||
@ -194,12 +197,14 @@ daylightcompany.com: did not receive HSTS header
|
||||
de.search.yahoo.com: max-age too low: 172800
|
||||
debtkit.co.uk: did not receive HSTS header
|
||||
decibelios.li: did not receive HSTS header
|
||||
deliciisanatoase.ro: did not receive HSTS header
|
||||
demo.swedbank.se: could not connect to host
|
||||
demuzere.com: could not connect to host
|
||||
demuzere.eu: could not connect to host
|
||||
demuzere.net: could not connect to host
|
||||
depixion.agency: did not receive HSTS header
|
||||
derevtsov.com: did not receive HSTS header
|
||||
dergeilstestammderwelt.de: did not receive HSTS header
|
||||
devh.de: did not receive HSTS header
|
||||
diablotine.rocks: could not connect to host
|
||||
diasp.cz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134" data: no]
|
||||
@ -243,8 +248,9 @@ email.lookout.com: could not connect to host
|
||||
en-maktoob.search.yahoo.com: did not receive HSTS header
|
||||
encrypted.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
enterdev.co: did not receive HSTS header
|
||||
entrepreneur.or.id: did not receive HSTS header
|
||||
eol34.com: did not receive HSTS header
|
||||
epoxate.com: did not receive HSTS header
|
||||
eromixx.com: did not receive HSTS header
|
||||
eroticen.com: did not receive HSTS header
|
||||
erotische-aanbiedingen.nl: did not receive HSTS header
|
||||
errors.zenpayroll.com: could not connect to host
|
||||
@ -254,9 +260,9 @@ espanol.search.yahoo.com: max-age too low: 172800
|
||||
espra.com: could not connect to host
|
||||
etsysecure.com: could not connect to host
|
||||
expoundite.net: did not receive HSTS header
|
||||
extreemhost.nl: did not receive HSTS header
|
||||
ezimoeko.net: could not connect to host
|
||||
eztv.ch: did not receive HSTS header
|
||||
f-droid.org: could not connect to host
|
||||
fabianfischer.de: did not receive HSTS header
|
||||
factorygw.com: did not receive HSTS header
|
||||
fant.dk: did not receive HSTS header
|
||||
@ -266,7 +272,10 @@ festember.com: did not receive HSTS header
|
||||
fi.search.yahoo.com: max-age too low: 172800
|
||||
fiftyshadesofluca.ml: could not connect to host
|
||||
fightr.co: could not connect to host
|
||||
findmybottleshop.com.au: did not receive HSTS header
|
||||
firebaseio-demo.com: could not connect to host
|
||||
firebaseio.com: could not connect to host
|
||||
firefall.rocks: did not receive HSTS header
|
||||
firemail.io: could not connect to host
|
||||
fischer-its.com: max-age too low: 2592000
|
||||
fixingdns.com: did not receive HSTS header
|
||||
@ -277,6 +286,7 @@ flowlo.me: could not connect to host
|
||||
fm83.nl: did not receive HSTS header
|
||||
fonetiq.io: could not connect to host
|
||||
food4health.guide: could not connect to host
|
||||
footballmapped.com: could not connect to host
|
||||
foreignexchangeresource.com: did not receive HSTS header
|
||||
fotiu.com: could not connect to host
|
||||
foxdev.io: did not receive HSTS header
|
||||
@ -334,8 +344,9 @@ gvt3.com: could not connect to host (error ignored - included regardless)
|
||||
gwijaya.com: did not receive HSTS header
|
||||
gyboche.com: could not connect to host
|
||||
gyboche.science: could not connect to host
|
||||
h2check.org: could not connect to host
|
||||
hack.li: could not connect to host
|
||||
hao2taiwan.com: max-age too low: 0
|
||||
hao2taiwan.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134" data: no]
|
||||
happyfabric.me: did not receive HSTS header
|
||||
hasilocke.de: did not receive HSTS header
|
||||
haste.ch: could not connect to host
|
||||
@ -343,16 +354,15 @@ hatoko.net: could not connect to host
|
||||
haveeruexaminer.com: could not connect to host
|
||||
heart.ge: max-age too low: 0
|
||||
heftkaufen.de: did not receive HSTS header
|
||||
heijblok.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134" data: no]
|
||||
helpadmin.net: could not connect to host
|
||||
helpium.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134" data: no]
|
||||
henriknoerr.com: could not connect to host
|
||||
herzbotschaft.de: max-age too low: 0
|
||||
hetmer.com: did not receive HSTS header
|
||||
hexony.com: did not receive HSTS header
|
||||
hicn.gq: could not connect to host
|
||||
hk.search.yahoo.com: max-age too low: 172800
|
||||
hledejlevne.cz: did not receive HSTS header
|
||||
hledejpravnika.cz: could not connect to host
|
||||
hn.search.yahoo.com: did not receive HSTS header
|
||||
hoerbuecher-und-hoerspiele.de: did not receive HSTS header
|
||||
homa.website: could not connect to host
|
||||
@ -361,18 +371,19 @@ hookandloom.com: did not receive HSTS header
|
||||
horosho.in: could not connect to host
|
||||
horseboners.xxx: did not receive HSTS header
|
||||
hostedtalkgadget.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
hostelinsplit.com: did not receive HSTS header
|
||||
hostingactive.it: did not receive HSTS header
|
||||
howrandom.org: could not connect to host
|
||||
hsts.date: could not connect to host
|
||||
hstspreload.appspot.com: did not receive HSTS header
|
||||
hu.search.yahoo.com: did not receive HSTS header
|
||||
iban.is: could not connect to host
|
||||
icq-project.net: could not connect to host
|
||||
id-co.in: could not connect to host
|
||||
id-conf.com: did not receive HSTS header
|
||||
id.search.yahoo.com: max-age too low: 172800
|
||||
idealsvdr.com: did not receive HSTS header
|
||||
identitylabs.uk: did not receive HSTS header
|
||||
ie.search.yahoo.com: did not receive HSTS header
|
||||
ijohan.nl: could not connect to host
|
||||
ilikerainbows.co.uk: could not connect to host
|
||||
illjinx.info: did not receive HSTS header
|
||||
ilmconpm.de: did not receive HSTS header
|
||||
@ -384,7 +395,6 @@ infogrfx.com: max-age too low: 0
|
||||
inksupply.com: did not receive HSTS header
|
||||
inleaked.com: could not connect to host
|
||||
inmyarea.com: did not receive HSTS header
|
||||
instacart.com: did not receive HSTS header
|
||||
intercom.io: did not receive HSTS header
|
||||
interserved.com: did not receive HSTS header
|
||||
ionas-law.ro: did not receive HSTS header
|
||||
@ -414,13 +424,13 @@ jonas-keidel.de: did not receive HSTS header
|
||||
jonathan.ir: could not connect to host
|
||||
jonathandowning.uk: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134" data: no]
|
||||
jottit.com: could not connect to host
|
||||
jrvar.com: could not connect to host
|
||||
julian-kipka.de: did not receive HSTS header
|
||||
juniwalk.cz: could not connect to host
|
||||
justlikethat.hosting: did not receive HSTS header
|
||||
jwilsson.me: could not connect to host
|
||||
k-dev.de: could not connect to host
|
||||
kamikano.com: did not receive HSTS header
|
||||
kamisama.xyz: could not connect to host
|
||||
kasko.io: did not receive HSTS header
|
||||
kdm-online.de: did not receive HSTS header
|
||||
keeley.gq: could not connect to host
|
||||
@ -433,7 +443,7 @@ kingmanhall.org: could not connect to host
|
||||
kinnon.enterprises: did not receive HSTS header
|
||||
kirkforcongress.com: could not connect to host
|
||||
kirkforsenate.com: did not receive HSTS header
|
||||
kirkpatrickdavis.com: max-age too low: 3153600
|
||||
kirkpatrickdavis.com: did not receive HSTS header
|
||||
kitsta.com: could not connect to host
|
||||
kiwiirc.com: max-age too low: 5256000
|
||||
klaxn.com: could not connect to host
|
||||
@ -443,10 +453,12 @@ komandakovalchuk.com: [Exception... "Component returned failure code: 0x80004005
|
||||
koop-bremen.de: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134" data: no]
|
||||
koordinate.net: did not receive HSTS header
|
||||
korni22.org: could not connect to host
|
||||
kotarac.net: did not receive HSTS header
|
||||
kpvpn.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134" data: no]
|
||||
kr.search.yahoo.com: did not receive HSTS header
|
||||
krouzkyliduska.cz: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134" data: no]
|
||||
kryptera.se: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134" data: no]
|
||||
kryx.de: did not receive HSTS header
|
||||
kweddingplanning.com: did not receive HSTS header
|
||||
kz.search.yahoo.com: did not receive HSTS header
|
||||
labaia.info: did not receive HSTS header
|
||||
@ -457,6 +469,7 @@ landscape.canonical.com: max-age too low: 2592000
|
||||
ldc.com.br: did not receive HSTS header
|
||||
ledgerscope.net: max-age too low: 86400
|
||||
leifdreizler.com: could not connect to host
|
||||
lelongbank.com: did not receive HSTS header
|
||||
lentri.com: did not receive HSTS header
|
||||
leon-jaekel.com: did not receive HSTS header
|
||||
letras.mus.br: did not receive HSTS header
|
||||
@ -465,6 +478,7 @@ library.linode.com: did not receive HSTS header
|
||||
libraryfreedomproject.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134" data: no]
|
||||
lifeguard.aecom.com: max-age too low: 86400
|
||||
linguaquote.com: did not receive HSTS header
|
||||
litespeed.io: could not connect to host
|
||||
login.corp.google.com: max-age too low: 7776000 (error ignored - included regardless)
|
||||
lognot.net: could not connect to host
|
||||
logotype.se: did not receive HSTS header
|
||||
@ -516,16 +530,15 @@ mobilethreat.net: could not connect to host
|
||||
mobilethreatnetwork.net: could not connect to host
|
||||
modemagazines.co.uk: did not receive HSTS header
|
||||
monitman.com: could not connect to host
|
||||
monitman.solutions: could not connect to host
|
||||
moparisthebest.biz: could not connect to host
|
||||
moparisthebest.info: could not connect to host
|
||||
moriz.net: did not receive HSTS header
|
||||
movlib.org: could not connect to host
|
||||
mp3juices.is: could not connect to host
|
||||
mqas.net: could not connect to host
|
||||
msc-seereisen.net: did not receive HSTS header
|
||||
mt.search.yahoo.com: did not receive HSTS header
|
||||
mu.search.yahoo.com: did not receive HSTS header
|
||||
musi.cx: did not receive HSTS header
|
||||
mustika.cf: max-age too low: 0
|
||||
mutamatic.com: could not connect to host
|
||||
mw.search.yahoo.com: did not receive HSTS header
|
||||
@ -552,12 +565,14 @@ nexth.us: could not connect to host
|
||||
ng-security.com: could not connect to host
|
||||
nginxnudes.com: could not connect to host
|
||||
ni.search.yahoo.com: did not receive HSTS header
|
||||
nicestresser.fr: could not connect to host
|
||||
nicolaelmer.ch: could not connect to host
|
||||
niho.jp: max-age too low: 0
|
||||
nl.search.yahoo.com: max-age too low: 172800
|
||||
nmctest.net: could not connect to host
|
||||
no.search.yahoo.com: max-age too low: 172800
|
||||
nodetemple.com: did not receive HSTS header
|
||||
nodebrewery.com: could not connect to host
|
||||
nodetemple.com: could not connect to host
|
||||
noexpect.org: could not connect to host
|
||||
nope.website: did not receive HSTS header
|
||||
noworrywp.com: did not receive HSTS header
|
||||
@ -581,7 +596,6 @@ ownmovies.fr: could not connect to host
|
||||
p.linode.com: could not connect to host
|
||||
p8r.de: could not connect to host
|
||||
pa.search.yahoo.com: did not receive HSTS header
|
||||
pantsu.cat: did not receive HSTS header
|
||||
partirkyoto.jp: max-age too low: 0
|
||||
partyvan.it: could not connect to host
|
||||
partyvan.nl: could not connect to host
|
||||
@ -610,17 +624,22 @@ piratenlogin.de: could not connect to host
|
||||
pirati.cz: max-age too low: 604800
|
||||
pisidia.de: did not receive HSTS header
|
||||
pixel.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
pixelcode.com.au: did not receive HSTS header
|
||||
pk.search.yahoo.com: did not receive HSTS header
|
||||
pl.search.yahoo.com: max-age too low: 172800
|
||||
platform.lookout.com: could not connect to host
|
||||
play.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
plothost.com: did not receive HSTS header
|
||||
pm13.cz: could not connect to host
|
||||
pm13.org: could not connect to host
|
||||
poiema.com.sg: did not receive HSTS header
|
||||
pointiswunderland.de: did not receive HSTS header
|
||||
pol.in.th: could not connect to host
|
||||
popcorntime.ws: did not receive HSTS header
|
||||
posterspy.com: did not receive HSTS header
|
||||
powercloud.technology: did not receive HSTS header
|
||||
pr.search.yahoo.com: did not receive HSTS header
|
||||
prefontaine.name: could not connect to host
|
||||
preissler.co.uk: could not connect to host
|
||||
pressfreedomfoundation.org: did not receive HSTS header
|
||||
prodpad.com: did not receive HSTS header
|
||||
@ -633,6 +652,7 @@ proxybay.info: did not receive HSTS header
|
||||
pult.co: could not connect to host
|
||||
punchr-kamikazee.rhcloud.com: did not receive HSTS header
|
||||
py.search.yahoo.com: did not receive HSTS header
|
||||
pypa.io: could not connect to host
|
||||
qc.search.yahoo.com: max-age too low: 172800
|
||||
qingxuan.info: did not receive HSTS header
|
||||
quotehex.com: did not receive HSTS header
|
||||
@ -650,6 +670,8 @@ regenerescence.com: did not receive HSTS header
|
||||
renem.net: max-age too low: 0
|
||||
reserve-online.net: did not receive HSTS header
|
||||
reviews.anime.my: max-age too low: 5184000
|
||||
rewardstock.com: max-age too low: 0
|
||||
rid-wan.com: did not receive HSTS header
|
||||
rika.me: could not connect to host
|
||||
rippleunion.com: did not receive HSTS header
|
||||
rme.li: did not receive HSTS header
|
||||
@ -657,10 +679,8 @@ ro.search.yahoo.com: max-age too low: 172800
|
||||
roan24.pl: did not receive HSTS header
|
||||
roddis.net: did not receive HSTS header
|
||||
romans-place.me.uk: did not receive HSTS header
|
||||
ronvandordt.info: could not connect to host
|
||||
roosterpgplus.nl: did not receive HSTS header
|
||||
ronvandordt.info: did not receive HSTS header
|
||||
rr.in.th: could not connect to host
|
||||
ru-sprachstudio.ch: could not connect to host
|
||||
ru.search.yahoo.com: max-age too low: 172800
|
||||
rudloff.pro: did not receive HSTS header
|
||||
rugirlfriend.com: did not receive HSTS header
|
||||
@ -696,8 +716,9 @@ seomobo.com: did not receive HSTS header
|
||||
seowarp.net: max-age too low: 1576800
|
||||
serverdensity.io: did not receive HSTS header
|
||||
servergno.me: did not receive HSTS header
|
||||
seyahatsagliksigortalari.com: could not connect to host
|
||||
sg.search.yahoo.com: max-age too low: 172800
|
||||
shamka.ru: max-age too low: 0
|
||||
shamka.ru: could not connect to host
|
||||
shanewadleigh.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134" data: no]
|
||||
shiinko.com: could not connect to host
|
||||
shoprose.ru: did not receive HSTS header
|
||||
@ -710,15 +731,18 @@ simon.butcher.name: max-age too low: 2629743
|
||||
simplelearner.com: could not connect to host
|
||||
simplyfixit.co.uk: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134" data: no]
|
||||
sites.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
slix.io: could not connect to host
|
||||
slovakiana.sk: did not receive HSTS header
|
||||
smartcoin.com.br: did not receive HSTS header
|
||||
smartlend.se: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134" data: no]
|
||||
smkn1lengkong.sch.id: did not receive HSTS header
|
||||
smksi2.com: did not receive HSTS header
|
||||
smksi2.com: could not connect to host
|
||||
snailing.org: could not connect to host
|
||||
soccergif.com: did not receive HSTS header
|
||||
soci.ml: could not connect to host
|
||||
sockeye.cc: could not connect to host
|
||||
sol.io: could not connect to host
|
||||
soondy.com: did not receive HSTS header
|
||||
souyar.de: could not connect to host
|
||||
souyar.net: could not connect to host
|
||||
souyar.us: could not connect to host
|
||||
@ -732,11 +756,9 @@ ssl.panoramio.com: did not receive HSTS header
|
||||
stassi.ch: did not receive HSTS header
|
||||
stillyarts.com: did not receive HSTS header
|
||||
stocktrade.de: could not connect to host
|
||||
stormhub.org: could not connect to host
|
||||
streamingmagazin.de: could not connect to host
|
||||
stricted.net: did not receive HSTS header
|
||||
strongest-privacy.com: could not connect to host
|
||||
studienportal.eu: could not connect to host
|
||||
studydrive.net: did not receive HSTS header
|
||||
subrosa.io: could not connect to host
|
||||
suite73.org: could not connect to host
|
||||
@ -747,6 +769,7 @@ suzukikenichi.com: did not receive HSTS header
|
||||
sv.search.yahoo.com: did not receive HSTS header
|
||||
svager.cz: could not connect to host
|
||||
syncer.jp: did not receive HSTS header
|
||||
synchtu.be: did not receive HSTS header
|
||||
t.facebook.com: did not receive HSTS header
|
||||
tablet.facebook.com: did not receive HSTS header
|
||||
tafoma.com: did not receive HSTS header
|
||||
@ -758,11 +781,10 @@ tallshoe.com: could not connect to host
|
||||
tandarts-haarlem.nl: did not receive HSTS header
|
||||
tanzhijun.com: did not receive HSTS header
|
||||
tapka.cz: did not receive HSTS header
|
||||
tazemama.biz: did not receive HSTS header
|
||||
tbarter.com: did not receive HSTS header
|
||||
tcao.info: could not connect to host
|
||||
teamnorthgermany.de: could not connect to host
|
||||
techhub.ml: could not connect to host
|
||||
techllage.com: could not connect to host
|
||||
techloaner.com: could not connect to host
|
||||
technotonic.com.au: did not receive HSTS header
|
||||
tegelsensanitaironline.nl: did not receive HSTS header
|
||||
@ -774,9 +796,12 @@ terrax.info: could not connect to host
|
||||
terrty.net: could not connect to host
|
||||
th.search.yahoo.com: max-age too low: 172800
|
||||
the-sky-of-valkyries.com: could not connect to host
|
||||
theater.cf: could not connect to host
|
||||
thecoffeehouse.xyz: could not connect to host
|
||||
thehistory.me: did not receive HSTS header
|
||||
thepartywarehouse.co.uk: did not receive HSTS header
|
||||
therapyportal.com: did not receive HSTS header
|
||||
theyosh.nl: did not receive HSTS header
|
||||
thorncreek.net: did not receive HSTS header
|
||||
thumbtack.com: did not receive HSTS header
|
||||
thundr.eu: could not connect to host
|
||||
@ -818,21 +843,22 @@ uk.search.yahoo.com: max-age too low: 172800
|
||||
ukas.com: did not receive HSTS header
|
||||
unapp.me: could not connect to host
|
||||
unbanthe.net: did not receive HSTS header
|
||||
unila.edu.br: could not connect to host
|
||||
univz.com: could not connect to host
|
||||
unun.fi: could not connect to host
|
||||
uonstaffhub.com: could not connect to host
|
||||
upay.ru: did not receive HSTS header
|
||||
uprotect.it: could not connect to host
|
||||
upstats.eu: could not connect to host
|
||||
urandom.eu.org: could not connect to host
|
||||
ustr.gov: max-age too low: 86400
|
||||
uy.search.yahoo.com: did not receive HSTS header
|
||||
uz.search.yahoo.com: did not receive HSTS header
|
||||
vaddder.com: could not connect to host
|
||||
vallis.net: could not connect to host
|
||||
vasanth.org: could not connect to host
|
||||
vbhelp.org: could not connect to host
|
||||
vbulletin-russia.com: could not connect to host
|
||||
vbulletinrussia.com: could not connect to host
|
||||
vcsjones.com: did not receive HSTS header
|
||||
ve.search.yahoo.com: max-age too low: 172800
|
||||
vermontcareergateway.org: did not receive HSTS header
|
||||
vhost.co.id: could not connect to host
|
||||
@ -852,7 +878,7 @@ webmail.mayfirst.org: did not receive HSTS header
|
||||
webmaniabr.com: did not receive HSTS header
|
||||
webswitch.io: could not connect to host
|
||||
werdeeintimo.de: did not receive HSTS header
|
||||
wesecom.com: could not connect to host
|
||||
wesecom.com: did not receive HSTS header
|
||||
wevahoo.com: could not connect to host
|
||||
when-release.com: did not receive HSTS header
|
||||
whitestagforge.com: did not receive HSTS header
|
||||
@ -860,7 +886,6 @@ wholebites.com: did not receive HSTS header
|
||||
whyworldhot.com: did not receive HSTS header
|
||||
wikidsystems.com: did not receive HSTS header
|
||||
wilf1rst.com: could not connect to host
|
||||
winsec.nl: could not connect to host
|
||||
withgoogle.com: did not receive HSTS header (error ignored - included regardless)
|
||||
withustrading.com: could not connect to host
|
||||
withyoutube.com: did not receive HSTS header (error ignored - included regardless)
|
||||
@ -895,15 +920,16 @@ xtream-hosting.com: could not connect to host
|
||||
xtream-hosting.de: could not connect to host
|
||||
xtream-hosting.eu: could not connect to host
|
||||
xtreamhosting.eu: could not connect to host
|
||||
xtremegaming.it: did not receive HSTS header
|
||||
y-o-w.com: did not receive HSTS header
|
||||
yaporn.tv: max-age too low: 0
|
||||
yenniferallulli.moda: could not connect to host
|
||||
yetii.net: did not receive HSTS header
|
||||
yingyj.com: did not receive HSTS header
|
||||
yobst.tk: could not connect to host
|
||||
yokeepo.com: max-age too low: 0
|
||||
yoloprod.fr: could not connect to host
|
||||
yoloseo.com: could not connect to host
|
||||
yu.gg: did not receive HSTS header
|
||||
za.search.yahoo.com: did not receive HSTS header
|
||||
zachborboa.com: did not receive HSTS header
|
||||
zarooba.com: did not receive HSTS header
|
||||
@ -911,6 +937,8 @@ zeitpunkt-kulturmagazin.de: did not receive HSTS header
|
||||
zenpayroll.com: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 134" data: no]
|
||||
zentraler-kreditausschuss.de: max-age too low: 0
|
||||
zh.search.yahoo.com: did not receive HSTS header
|
||||
zirtue.io: could not connect to host
|
||||
zixiao.wang: could not connect to host
|
||||
zoo24.de: did not receive HSTS header
|
||||
zx6rninja.de: did not receive HSTS header
|
||||
zzsec.org: did not receive HSTS header
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -526,8 +526,10 @@ function sendWheelAndPaint(aTarget, aOffsetX, aOffsetY, aEvent, aCallback, aWind
|
||||
setTimeout(function() {
|
||||
utils.advanceTimeAndRefresh(1000);
|
||||
|
||||
if (!aCallback)
|
||||
if (!aCallback) {
|
||||
utils.advanceTimeAndRefresh(0);
|
||||
return;
|
||||
}
|
||||
|
||||
var waitForPaints = function () {
|
||||
SpecialPowers.Services.obs.removeObserver(waitForPaints, "apz-repaints-flushed", false);
|
||||
|
@ -225,9 +225,6 @@ user_pref('browser.contentHandlers.types.3.uri', 'http://test1.example.org/rss?u
|
||||
user_pref('browser.contentHandlers.types.4.uri', 'http://test1.example.org/rss?url=%%s')
|
||||
user_pref('browser.contentHandlers.types.5.uri', 'http://test1.example.org/rss?url=%%s')
|
||||
|
||||
// Set dummy server for Android tiles testing.
|
||||
user_pref('browser.tiles.reportURL', 'http://%(server)s/tests/robocop/robocop_tiles.sjs')
|
||||
|
||||
// We want to collect telemetry, but we don't want to send in the results.
|
||||
user_pref('toolkit.telemetry.server', 'https://%(server)s/telemetry-dummy/');
|
||||
// Our current tests expect the unified Telemetry feature to be opt-out,
|
||||
|
@ -4,3 +4,21 @@
|
||||
|
||||
$inherits:
|
||||
from: tasks/branches/base_jobs.yml
|
||||
|
||||
tests:
|
||||
gaia-ui-test-functional:
|
||||
allowed_build_tasks:
|
||||
tasks/builds/b2g_flame_kk_eng.yml:
|
||||
task: tasks/tests/flame_kk_gaia_ui_test_functional.yml
|
||||
gaia-ui-test-functional-dsds:
|
||||
allowed_build_tasks:
|
||||
tasks/builds/b2g_flame_kk_eng.yml:
|
||||
task: tasks/tests/flame_kk_gaia_ui_test_functional_dsds.yml
|
||||
gaia-ui-test-sanity:
|
||||
allowed_build_tasks:
|
||||
tasks/builds/b2g_flame_kk_eng.yml:
|
||||
task: tasks/tests/flame_kk_gaia_ui_test_sanity.yml
|
||||
gaia-ui-test-unit:
|
||||
allowed_build_tasks:
|
||||
tasks/builds/b2g_flame_kk_eng.yml:
|
||||
task: tasks/tests/flame_kk_gaia_ui_test_unit.yml
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user