Merge m-c to m-i

This commit is contained in:
Phil Ringnalda 2015-03-15 19:42:35 -07:00
commit 3855b0ec44
122 changed files with 2313 additions and 599 deletions

View File

@ -15,7 +15,7 @@
<project name="platform_build" path="build" remote="b2g" revision="ef937d1aca7c4cf89ecb5cc43ae8c21c2000a9db">
<copyfile dest="Makefile" src="core/root.mk"/>
</project>
<project name="gaia" path="gaia" remote="mozillaorg" revision="d4177902b04b8fedcb7df9a30ae6e9677e03d2d4"/>
<project name="gaia" path="gaia" remote="mozillaorg" revision="4868c56c0a3b7a1e51d55b24457e44a7709ea1ae"/>
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2e9f0341416e97926d4cfdb1ff961ec4d4069b0a"/>
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
@ -23,7 +23,7 @@
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="cc41a48baff8d13bcd10cd96879ffdcf29beb1f2"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="33d5be1dca607d3a5cca5d87f53951cd991e1cdb"/>
<!-- 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"/>

View File

@ -19,13 +19,13 @@
<copyfile dest="Makefile" src="core/root.mk"/>
</project>
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="d4177902b04b8fedcb7df9a30ae6e9677e03d2d4"/>
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="4868c56c0a3b7a1e51d55b24457e44a7709ea1ae"/>
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2e9f0341416e97926d4cfdb1ff961ec4d4069b0a"/>
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="93f9ba577f68d772093987c2f1c0a4ae293e1802"/>
<project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="97c3d9b8b87774ca7a08c89145e95b55652459ef"/>
<project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="cc41a48baff8d13bcd10cd96879ffdcf29beb1f2"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="33d5be1dca607d3a5cca5d87f53951cd991e1cdb"/>
<!-- Stock Android things -->
<project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
<project name="platform_bionic" path="bionic" remote="b2g" revision="e2b3733ba3fa5e3f404e983d2e4142b1f6b1b846"/>

View File

@ -17,10 +17,10 @@
</project>
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
<project name="gaia" path="gaia" remote="mozillaorg" revision="d4177902b04b8fedcb7df9a30ae6e9677e03d2d4"/>
<project name="gaia" path="gaia" remote="mozillaorg" revision="4868c56c0a3b7a1e51d55b24457e44a7709ea1ae"/>
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2e9f0341416e97926d4cfdb1ff961ec4d4069b0a"/>
<project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="cc41a48baff8d13bcd10cd96879ffdcf29beb1f2"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="33d5be1dca607d3a5cca5d87f53951cd991e1cdb"/>
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
<!-- Stock Android things -->

View File

@ -15,7 +15,7 @@
<project name="platform_build" path="build" remote="b2g" revision="ef937d1aca7c4cf89ecb5cc43ae8c21c2000a9db">
<copyfile dest="Makefile" src="core/root.mk"/>
</project>
<project name="gaia" path="gaia" remote="mozillaorg" revision="d4177902b04b8fedcb7df9a30ae6e9677e03d2d4"/>
<project name="gaia" path="gaia" remote="mozillaorg" revision="4868c56c0a3b7a1e51d55b24457e44a7709ea1ae"/>
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2e9f0341416e97926d4cfdb1ff961ec4d4069b0a"/>
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
@ -23,7 +23,7 @@
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="cc41a48baff8d13bcd10cd96879ffdcf29beb1f2"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="33d5be1dca607d3a5cca5d87f53951cd991e1cdb"/>
<!-- 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"/>

View File

@ -15,7 +15,7 @@
<project name="platform_build" path="build" remote="b2g" revision="52775e03a2d8532429dff579cb2cd56718e488c3">
<copyfile dest="Makefile" src="core/root.mk"/>
</project>
<project name="gaia" path="gaia" remote="mozillaorg" revision="d4177902b04b8fedcb7df9a30ae6e9677e03d2d4"/>
<project name="gaia" path="gaia" remote="mozillaorg" revision="4868c56c0a3b7a1e51d55b24457e44a7709ea1ae"/>
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2e9f0341416e97926d4cfdb1ff961ec4d4069b0a"/>
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
@ -23,7 +23,7 @@
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="cc41a48baff8d13bcd10cd96879ffdcf29beb1f2"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="33d5be1dca607d3a5cca5d87f53951cd991e1cdb"/>
<!-- 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="50d1ca4ab8add54523b7bc692860d57e8ee4c0d1"/>
<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="fb3845864573857677f9b500040a8f011eaf5078"/>

View File

@ -19,13 +19,13 @@
<copyfile dest="Makefile" src="core/root.mk"/>
</project>
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="d4177902b04b8fedcb7df9a30ae6e9677e03d2d4"/>
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="4868c56c0a3b7a1e51d55b24457e44a7709ea1ae"/>
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2e9f0341416e97926d4cfdb1ff961ec4d4069b0a"/>
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="93f9ba577f68d772093987c2f1c0a4ae293e1802"/>
<project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="97c3d9b8b87774ca7a08c89145e95b55652459ef"/>
<project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="cc41a48baff8d13bcd10cd96879ffdcf29beb1f2"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="33d5be1dca607d3a5cca5d87f53951cd991e1cdb"/>
<!-- Stock Android things -->
<project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
<project name="platform_bionic" path="bionic" remote="b2g" revision="e2b3733ba3fa5e3f404e983d2e4142b1f6b1b846"/>

View File

@ -15,7 +15,7 @@
<project name="platform_build" path="build" remote="b2g" revision="ef937d1aca7c4cf89ecb5cc43ae8c21c2000a9db">
<copyfile dest="Makefile" src="core/root.mk"/>
</project>
<project name="gaia" path="gaia" remote="mozillaorg" revision="d4177902b04b8fedcb7df9a30ae6e9677e03d2d4"/>
<project name="gaia" path="gaia" remote="mozillaorg" revision="4868c56c0a3b7a1e51d55b24457e44a7709ea1ae"/>
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2e9f0341416e97926d4cfdb1ff961ec4d4069b0a"/>
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
@ -23,7 +23,7 @@
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="cc41a48baff8d13bcd10cd96879ffdcf29beb1f2"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="33d5be1dca607d3a5cca5d87f53951cd991e1cdb"/>
<!-- 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"/>

View File

@ -17,10 +17,10 @@
</project>
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
<project name="gaia" path="gaia" remote="mozillaorg" revision="d4177902b04b8fedcb7df9a30ae6e9677e03d2d4"/>
<project name="gaia" path="gaia" remote="mozillaorg" revision="4868c56c0a3b7a1e51d55b24457e44a7709ea1ae"/>
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2e9f0341416e97926d4cfdb1ff961ec4d4069b0a"/>
<project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="cc41a48baff8d13bcd10cd96879ffdcf29beb1f2"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="33d5be1dca607d3a5cca5d87f53951cd991e1cdb"/>
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
<!-- Stock Android things -->

View File

@ -1,9 +1,9 @@
{
"git": {
"git_revision": "d4177902b04b8fedcb7df9a30ae6e9677e03d2d4",
"git_revision": "4868c56c0a3b7a1e51d55b24457e44a7709ea1ae",
"remote": "https://git.mozilla.org/releases/gaia.git",
"branch": ""
},
"revision": "23ffbbdd387271d8b8b94f4ce60ccb17ad6c5b10",
"revision": "dbbbfe84294377ef3a7efaebcf57696a30b58cdb",
"repo_path": "integration/gaia-central"
}

View File

@ -17,10 +17,10 @@
</project>
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
<project name="gaia" path="gaia" remote="mozillaorg" revision="d4177902b04b8fedcb7df9a30ae6e9677e03d2d4"/>
<project name="gaia" path="gaia" remote="mozillaorg" revision="4868c56c0a3b7a1e51d55b24457e44a7709ea1ae"/>
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2e9f0341416e97926d4cfdb1ff961ec4d4069b0a"/>
<project name="moztt" path="external/moztt" remote="b2g" revision="ed2cf97a6c37a4bbd0bbbbffe06ec7136d8c79ff"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="cc41a48baff8d13bcd10cd96879ffdcf29beb1f2"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="33d5be1dca607d3a5cca5d87f53951cd991e1cdb"/>
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
<!-- Stock Android things -->

View File

@ -15,7 +15,7 @@
<project name="platform_build" path="build" remote="b2g" revision="52775e03a2d8532429dff579cb2cd56718e488c3">
<copyfile dest="Makefile" src="core/root.mk"/>
</project>
<project name="gaia" path="gaia" remote="mozillaorg" revision="d4177902b04b8fedcb7df9a30ae6e9677e03d2d4"/>
<project name="gaia" path="gaia" remote="mozillaorg" revision="4868c56c0a3b7a1e51d55b24457e44a7709ea1ae"/>
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="2e9f0341416e97926d4cfdb1ff961ec4d4069b0a"/>
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
@ -23,7 +23,7 @@
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="cc41a48baff8d13bcd10cd96879ffdcf29beb1f2"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="33d5be1dca607d3a5cca5d87f53951cd991e1cdb"/>
<!-- 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="50d1ca4ab8add54523b7bc692860d57e8ee4c0d1"/>
<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="fb3845864573857677f9b500040a8f011eaf5078"/>

View File

@ -1433,33 +1433,8 @@ pref("devtools.debugger.ui.variables-sorting-enabled", true);
pref("devtools.debugger.ui.variables-only-enum-visible", false);
pref("devtools.debugger.ui.variables-searchbox-visible", false);
// Enable the Profiler
pref("devtools.profiler.enabled", true);
// Timeline panel settings
#ifdef NIGHTLY_BUILD
pref("devtools.timeline.enabled", true);
#else
pref("devtools.timeline.enabled", false);
#endif
// TODO remove `devtools.timeline.hiddenMarkers.` branches when performance
// tool lands (bug 1075567)
pref("devtools.timeline.hiddenMarkers", "[]");
// Enable perftools via build command
#ifdef MOZ_DEVTOOLS_PERFTOOLS
pref("devtools.performance_dev.enabled", true);
#else
pref("devtools.performance_dev.enabled", false);
#endif
// The default Profiler UI settings
// TODO remove `devtools.profiler.ui.` branches when performance
// tool lands (bug 1075567)
pref("devtools.profiler.ui.flatten-tree-recursion", true);
pref("devtools.profiler.ui.show-platform-data", false);
pref("devtools.profiler.ui.show-idle-blocks", true);
// Enable the Performance tools
pref("devtools.performance.enabled", true);
// The default Performance UI settings
pref("devtools.performance.memory.sample-probability", "0.05");

View File

@ -2475,12 +2475,6 @@
// Make sure to unregister any open URIs.
this._swapRegisteredOpenURIs(ourBrowser, aOtherBrowser);
// Give others a chance to swap state.
let event = new CustomEvent("SwapDocShells", {"detail": aOtherBrowser});
ourBrowser.dispatchEvent(event);
event = new CustomEvent("SwapDocShells", {"detail": ourBrowser});
aOtherBrowser.dispatchEvent(event);
// Swap the docshells
ourBrowser.swapDocShells(aOtherBrowser);

View File

@ -21,7 +21,7 @@ add_task(function*() {
is(SessionStore.getClosedWindowCount(), 1, "Should have restore data for the closed window");
win = SessionStore.undoCloseWindow(0);
yield BrowserTestUtils.waitForEvent(win, "load");
yield BrowserTestUtils.waitForEvent(win, "load", 10000);
yield BrowserTestUtils.waitForEvent(win.gBrowser.tabs[0], "SSTabRestored");
is(win.gBrowser.tabs.length, 1, "Should have restored one tab");

View File

@ -9,6 +9,7 @@
*/
function runTests() {
requestLongerTimeout(2);
yield addNewTabPageTab();
// test a simple drag-and-drop scenario
yield setLinks("0,1,2,3,4,5,6,7,8");

View File

@ -13,6 +13,7 @@ const PREF_NEWTAB_COLUMNS = "browser.newtabpage.columns";
*/
function runTests() {
registerCleanupFunction(_ => Services.prefs.clearUserPref(PREF_NEWTAB_COLUMNS));
yield addNewTabPageTab();
// drag a new site onto the very first cell
yield setLinks("0,1,2,3,4,5,6,7,8");

View File

@ -6,6 +6,8 @@
* dragging them around.
*/
function runTests() {
yield addNewTabPageTab();
// the first three sites are pinned - make sure they're re-arranged correctly
yield setLinks("0,1,2,3,4,5,6,7,8");
setPinnedLinks("0,1,2,,,5");

View File

@ -10,7 +10,7 @@ let gAddon, gClient, gThreadClient, gDebugger, gSources;
let PREFS = [
"devtools.canvasdebugger.enabled",
"devtools.shadereditor.enabled",
"devtools.profiler.enabled",
"devtools.performance.enabled",
"devtools.netmonitor.enabled"
];
function test() {

View File

@ -1217,8 +1217,8 @@ let gDevToolsBrowser = {
* necessary because of the WebConsole's `profile` and `profileEnd` methods.
*/
_connectToProfiler: function DT_connectToProfiler(event, toolbox) {
let SharedProfilerUtils = devtools.require("devtools/profiler/shared");
let connection = SharedProfilerUtils.getProfilerConnection(toolbox);
let SharedPerformanceUtils = devtools.require("devtools/performance/front");
let connection = SharedPerformanceUtils.getPerformanceActorsConnection(toolbox.target);
connection.open();
},

View File

@ -87,7 +87,7 @@
<vbox id="profiler-options" class="options-groupbox">
<checkbox label="&options.showPlatformData.label;"
tooltiptext="&options.showPlatformData.tooltip;"
data-pref="devtools.profiler.ui.show-platform-data"/>
data-pref="devtools.performance.ui.show-platform-data"/>
</vbox>
</vbox>

View File

@ -51,7 +51,7 @@ let connect = Task.async(function*() {
// Certain options should be toggled since we can assume chrome debugging here
function setPrefDefaults() {
Services.prefs.setBoolPref("devtools.inspector.showUserAgentStyles", true);
Services.prefs.setBoolPref("devtools.profiler.ui.show-platform-data", true);
Services.prefs.setBoolPref("devtools.performance.ui.show-platform-data", true);
Services.prefs.setBoolPref("browser.devedition.theme.showCustomizeButton", false);
Services.prefs.setBoolPref("devtools.inspector.showAllAnonymousContent", true);
Services.prefs.setBoolPref("browser.dom.window.dump.enabled", true);

View File

@ -89,11 +89,6 @@ browser.jar:
content/browser/devtools/webaudioeditor/views/inspector.js (webaudioeditor/views/inspector.js)
content/browser/devtools/webaudioeditor/views/properties.js (webaudioeditor/views/properties.js)
content/browser/devtools/webaudioeditor/views/automation.js (webaudioeditor/views/automation.js)
content/browser/devtools/profiler.xul (profiler/profiler.xul)
content/browser/devtools/profiler.js (profiler/profiler.js)
content/browser/devtools/ui-recordings.js (profiler/ui-recordings.js)
content/browser/devtools/ui-profile.js (profiler/ui-profile.js)
#ifdef MOZ_DEVTOOLS_PERFTOOLS
content/browser/devtools/performance.xul (performance/performance.xul)
content/browser/devtools/performance/performance-controller.js (performance/performance-controller.js)
content/browser/devtools/performance/performance-view.js (performance/performance-view.js)
@ -107,7 +102,6 @@ browser.jar:
content/browser/devtools/performance/views/details-memory-call-tree.js (performance/views/details-memory-call-tree.js)
content/browser/devtools/performance/views/details-memory-flamegraph.js (performance/views/details-memory-flamegraph.js)
content/browser/devtools/performance/views/recordings.js (performance/views/recordings.js)
#endif
content/browser/devtools/responsivedesign/resize-commands.js (responsivedesign/resize-commands.js)
content/browser/devtools/commandline.css (commandline/commandline.css)
content/browser/devtools/commandlineoutput.xhtml (commandline/commandlineoutput.xhtml)
@ -148,5 +142,3 @@ browser.jar:
content/browser/devtools/eyedropper.xul (eyedropper/eyedropper.xul)
content/browser/devtools/eyedropper/crosshairs.css (eyedropper/crosshairs.css)
content/browser/devtools/eyedropper/nocursor.css (eyedropper/nocursor.css)
content/browser/devtools/timeline/timeline.xul (timeline/timeline.xul)
content/browser/devtools/timeline/timeline.js (timeline/timeline.js)

View File

@ -30,9 +30,7 @@ loader.lazyGetter(this, "StyleEditorPanel", () => require("devtools/styleeditor/
loader.lazyGetter(this, "ShaderEditorPanel", () => require("devtools/shadereditor/panel").ShaderEditorPanel);
loader.lazyGetter(this, "CanvasDebuggerPanel", () => require("devtools/canvasdebugger/panel").CanvasDebuggerPanel);
loader.lazyGetter(this, "WebAudioEditorPanel", () => require("devtools/webaudioeditor/panel").WebAudioEditorPanel);
loader.lazyGetter(this, "ProfilerPanel", () => require("devtools/profiler/panel").ProfilerPanel);
loader.lazyGetter(this, "PerformancePanel", () => require("devtools/performance/panel").PerformancePanel);
loader.lazyGetter(this, "TimelinePanel", () => require("devtools/timeline/panel").TimelinePanel);
loader.lazyGetter(this, "NetMonitorPanel", () => require("devtools/netmonitor/panel").NetMonitorPanel);
loader.lazyGetter(this, "StoragePanel", () => require("devtools/storage/panel").StoragePanel);
loader.lazyGetter(this, "ScratchpadPanel", () => require("devtools/scratchpad/scratchpad-panel").ScratchpadPanel);
@ -47,7 +45,6 @@ const shaderEditorProps = "chrome://browser/locale/devtools/shadereditor.propert
const canvasDebuggerProps = "chrome://browser/locale/devtools/canvasdebugger.properties";
const webAudioEditorProps = "chrome://browser/locale/devtools/webaudioeditor.properties";
const profilerProps = "chrome://browser/locale/devtools/profiler.properties";
const timelineProps = "chrome://browser/locale/devtools/timeline.properties";
const netMonitorProps = "chrome://browser/locale/devtools/netmonitor.properties";
const storageProps = "chrome://browser/locale/devtools/storage.properties";
const scratchpadProps = "chrome://browser/locale/devtools/scratchpad.properties";
@ -61,7 +58,6 @@ loader.lazyGetter(this, "shaderEditorStrings", () => Services.strings.createBund
loader.lazyGetter(this, "canvasDebuggerStrings", () => Services.strings.createBundle(canvasDebuggerProps));
loader.lazyGetter(this, "webAudioEditorStrings", () => Services.strings.createBundle(webAudioEditorProps));
loader.lazyGetter(this, "inspectorStrings", () => Services.strings.createBundle(inspectorProps));
loader.lazyGetter(this, "timelineStrings", () => Services.strings.createBundle(timelineProps));
loader.lazyGetter(this, "netMonitorStrings", () => Services.strings.createBundle(netMonitorProps));
loader.lazyGetter(this, "storageStrings", () => Services.strings.createBundle(storageProps));
loader.lazyGetter(this, "scratchpadStrings", () => Services.strings.createBundle(scratchpadProps));
@ -249,41 +245,15 @@ Tools.canvasDebugger = {
}
};
Tools.jsprofiler = {
id: "jsprofiler",
accesskey: l10n("profiler.accesskey", profilerStrings),
key: l10n("profiler.commandkey2", profilerStrings),
ordinal: 7,
modifiers: "shift",
visibilityswitch: "devtools.profiler.enabled",
icon: "chrome://browser/skin/devtools/tool-profiler.svg",
invertIconForLightTheme: true,
url: "chrome://browser/content/devtools/profiler.xul",
label: l10n("profiler.label2", profilerStrings),
panelLabel: l10n("profiler.panelLabel2", profilerStrings),
tooltip: l10n("profiler.tooltip2", profilerStrings),
inMenu: true,
isTargetSupported: function (target) {
// Hide the profiler when debugging devices pre bug 1046394,
// that don't expose profiler actor in content processes.
return target.hasActor("profiler");
},
build: function (frame, target) {
return new ProfilerPanel(frame, target);
}
};
Tools.performance = {
id: "performance",
ordinal: 19,
ordinal: 7,
icon: "chrome://browser/skin/devtools/tool-profiler.svg",
invertIconForLightTheme: true,
url: "chrome://browser/content/devtools/performance.xul",
// TODO bug 1082695 audit the Performance tools labels
label: "Performance++", //l10n("profiler.label2", profilerStrings),
panelLabel: "Performance++", //l10n("profiler.panelLabel2", profilerStrings),
visibilityswitch: "devtools.performance.enabled",
label: l10n("profiler.label2", profilerStrings),
panelLabel: l10n("profiler.panelLabel2", profilerStrings),
tooltip: l10n("profiler.tooltip2", profilerStrings),
accesskey: l10n("profiler.accesskey", profilerStrings),
key: l10n("profiler.commandkey2", profilerStrings),
@ -299,27 +269,6 @@ Tools.performance = {
}
};
Tools.timeline = {
id: "timeline",
ordinal: 8,
visibilityswitch: "devtools.timeline.enabled",
icon: "chrome://browser/skin/devtools/tool-network.svg",
invertIconForLightTheme: true,
url: "chrome://browser/content/devtools/timeline/timeline.xul",
label: l10n("timeline.label", timelineStrings),
panelLabel: l10n("timeline.panelLabel", timelineStrings),
tooltip: l10n("timeline.tooltip", timelineStrings),
isTargetSupported: function(target) {
return target.hasActor("timeline");
},
build: function (iframeWindow, toolbox) {
let panel = new TimelinePanel(iframeWindow, toolbox);
return panel.open();
}
};
Tools.netMonitor = {
id: "netmonitor",
accesskey: l10n("netmonitor.accesskey", netMonitorStrings),
@ -422,23 +371,12 @@ let defaultTools = [
Tools.shaderEditor,
Tools.canvasDebugger,
Tools.webAudioEditor,
Tools.jsprofiler,
Tools.timeline,
Tools.performance,
Tools.netMonitor,
Tools.storage,
Tools.scratchpad
];
// Only enable in-development performance tools if `--enable-devtools-perf`
// used in build, turning on `devtools.performance_dev.enabled`.
// Add to normal `defaultTools` when ready for normal release,
// pull out MOZ_DEVTOOLS_PERFTOOLS setting in `./configure.in`, and
// leave config on in `./browser/app/profile/firefox.js`, and always
// build in `./browser/devtools/moz.build`.
if (Services.prefs.getBoolPref("devtools.performance_dev.enabled")) {
defaultTools.push(Tools.performance);
}
exports.defaultTools = defaultTools;
for (let definition of defaultTools) {

View File

@ -17,7 +17,7 @@ DIRS += [
'layoutview',
'markupview',
'netmonitor',
'profiler',
'performance',
'projecteditor',
'responsivedesign',
'scratchpad',
@ -28,15 +28,11 @@ DIRS += [
'styleeditor',
'styleinspector',
'tilt',
'timeline',
'webaudioeditor',
'webconsole',
'webide',
]
if CONFIG['MOZ_DEVTOOLS_PERFTOOLS']:
DIRS += ['performance']
EXTRA_COMPONENTS += [
'devtools-clhandler.js',
'devtools-clhandler.manifest',

View File

@ -322,29 +322,51 @@ PerformanceFront.prototype = {
}),
/**
* Starts recording allocations in the memory actor, if necessary.
* Starts polling for allocations from the memory actor, if necessary.
*/
_startMemory: Task.async(function *(options) {
if (!options.withAllocations) {
return 0;
}
yield this._request("memory", "attach");
let memoryStartTime = yield this._request("memory", "startRecordingAllocations", {
probability: options.allocationsSampleProbability,
maxLogLength: options.allocationsMaxLogLength
});
let memoryStartTime = yield this._startRecordingAllocations(options);
yield this._pullAllocationSites();
return memoryStartTime;
}),
/**
* Stops recording allocations in the memory actor, if necessary.
* Stops polling for allocations from the memory actor, if necessary.
*/
_stopMemory: Task.async(function *(options) {
if (!options.withAllocations) {
return 0;
}
// Since `_pullAllocationSites` is usually running inside a timeout, and
// it's performing asynchronous requests to the server, a recording may
// be stopped before that method finishes executing. Therefore, we need to
// wait for the last request to `getAllocations` to finish before actually
// stopping recording allocations.
yield this._lastPullAllocationSitesFinished;
clearTimeout(this._sitesPullTimeout);
return yield this._stopRecordingAllocations();
}),
/**
* Starts recording allocations in the memory actor.
*/
_startRecordingAllocations: Task.async(function*(options) {
yield this._request("memory", "attach");
let memoryStartTime = yield this._request("memory", "startRecordingAllocations", {
probability: options.allocationsSampleProbability,
maxLogLength: options.allocationsMaxLogLength
});
return memoryStartTime;
}),
/**
* Stops recording allocations in the memory actor.
*/
_stopRecordingAllocations: Task.async(function*() {
let memoryEndTime = yield this._request("memory", "stopRecordingAllocations");
yield this._request("memory", "detach");
return memoryEndTime;
@ -355,13 +377,16 @@ PerformanceFront.prototype = {
* them to consumers.
*/
_pullAllocationSites: Task.async(function *() {
let deferred = promise.defer();
this._lastPullAllocationSitesFinished = deferred.promise;
let isDetached = (yield this._request("memory", "getState")) !== "attached";
if (isDetached) {
deferred.resolve();
return;
}
let memoryData = yield this._request("memory", "getAllocations");
this.emit("allocations", {
sites: memoryData.allocations,
timestamps: memoryData.allocationsTimestamps,
@ -371,6 +396,8 @@ PerformanceFront.prototype = {
let delay = DEFAULT_ALLOCATION_SITES_PULL_TIMEOUT;
this._sitesPullTimeout = setTimeout(this._pullAllocationSites, delay);
deferred.resolve();
}),
/**

View File

@ -48,17 +48,13 @@ let DEFAULT_PREFS = [
"devtools.performance.ui.show-idle-blocks",
"devtools.performance.ui.enable-memory",
"devtools.performance.ui.enable-framerate",
// remove after bug 1075567 is resolved.
"devtools.performance_dev.enabled"
].reduce((prefs, pref) => {
prefs[pref] = Services.prefs.getBoolPref(pref);
return prefs;
}, {});
// Enable the new performance panel for all tests. Remove this after
// bug 1075567 is resolved.
Services.prefs.setBoolPref("devtools.performance_dev.enabled", true);
// Enable the new performance panel for all tests.
Services.prefs.setBoolPref("devtools.performance.enabled", true);
// Enable logging for all the tests. Both the debugger server and frontend will
// be affected by this pref.
Services.prefs.setBoolPref("devtools.debugger.log", false);

View File

@ -7,5 +7,3 @@ EXTRA_JS_MODULES.devtools.profiler += [
'panel.js',
'utils/shared.js'
]
BROWSER_CHROME_MANIFESTS += ['test/browser.ini']

View File

@ -140,7 +140,7 @@ Telemetry.prototype = {
userHistogram: "DEVTOOLS_CANVASDEBUGGER_OPENED_PER_USER_FLAG",
timerHistogram: "DEVTOOLS_CANVASDEBUGGER_TIME_ACTIVE_SECONDS"
},
jsprofiler: {
performance: {
histogram: "DEVTOOLS_JSPROFILER_OPENED_BOOLEAN",
userHistogram: "DEVTOOLS_JSPROFILER_OPENED_PER_USER_FLAG",
timerHistogram: "DEVTOOLS_JSPROFILER_TIME_ACTIVE_SECONDS"

View File

@ -11,7 +11,7 @@ add_task(function*() {
yield promiseTab(TEST_URI);
let Telemetry = loadTelemetryAndRecordLogs();
yield openAndCloseToolbox(2, TOOL_DELAY, "jsprofiler");
yield openAndCloseToolbox(2, TOOL_DELAY, "performance");
checkTelemetryResults(Telemetry);
stopRecordingTelemetryLogs(Telemetry);

View File

@ -6,5 +6,3 @@
EXTRA_JS_MODULES.devtools.timeline += [
'panel.js',
]
BROWSER_CHROME_MANIFESTS += ['test/browser.ini']

View File

@ -53,7 +53,7 @@ function test()
yield openAndCheckPanel("jsdebugger");
yield openAndCheckPanel("inspector");
yield openAndCheckPanel("styleeditor");
yield openAndCheckPanel("jsprofiler");
yield openAndCheckPanel("performance");
yield openAndCheckPanel("netmonitor");
yield checkWebconsolePanelOpened();

View File

@ -15,6 +15,7 @@ const XMLHttpRequest =
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/Task.jsm");
Cu.import("resource://gre/modules/Timer.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "NetUtil",
"resource://gre/modules/NetUtil.jsm");
@ -56,6 +57,9 @@ const ALLOWED_IMAGE_SCHEMES = new Set(["https", "data"]);
// The frecency of a directory link
const DIRECTORY_FRECENCY = 1000;
// The frecency of a related link
const RELATED_FRECENCY = Infinity;
// Divide frecency by this amount for pings
const PING_SCORE_DIVISOR = 10000;
@ -89,6 +93,11 @@ let DirectoryLinksProvider = {
*/
_relatedLinks: new Map(),
/**
* A set of top sites that we can provide related links for
*/
_topSitesWithRelatedLinks: new Set(),
get _observedPrefs() Object.freeze({
enhanced: PREF_NEWTAB_ENHANCED,
linksURL: PREF_DIRECTORY_SOURCE,
@ -432,7 +441,10 @@ let DirectoryLinksProvider = {
}).catch(ex => {
Cu.reportError(ex);
return [];
}).then(aCallback);
}).then(links => {
aCallback(links);
this._populatePlacesLinks();
});
},
init: function DirectoryLinksProvider_init() {
@ -441,6 +453,9 @@ let DirectoryLinksProvider = {
// setup directory file path and last download timestamp
this._directoryFilePath = OS.Path.join(OS.Constants.Path.localProfileDir, DIRECTORY_LINKS_FILE);
this._lastDownloadMS = 0;
NewTabUtils.placesProvider.addObserver(this);
return Task.spawn(function() {
// get the last modified time of the links file if it exists
let doesFileExists = yield OS.File.exists(this._directoryFilePath);
@ -453,6 +468,123 @@ let DirectoryLinksProvider = {
}.bind(this));
},
_handleManyLinksChanged: function() {
this._topSitesWithRelatedLinks.clear();
this._relatedLinks.forEach((relatedLinks, site) => {
if (NewTabUtils.isTopPlacesSite(site)) {
this._topSitesWithRelatedLinks.add(site);
}
});
this._updateRelatedTile();
},
/**
* Updates _topSitesWithRelatedLinks based on the link that was changed.
*
* @return true if _topSitesWithRelatedLinks was modified, false otherwise.
*/
_handleLinkChanged: function(aLink) {
let changedLinkSite = NewTabUtils.extractSite(aLink.url);
let linkStored = this._topSitesWithRelatedLinks.has(changedLinkSite);
if (!NewTabUtils.isTopPlacesSite(changedLinkSite) && linkStored) {
this._topSitesWithRelatedLinks.delete(changedLinkSite);
return true;
}
if (this._relatedLinks.has(changedLinkSite) &&
NewTabUtils.isTopPlacesSite(changedLinkSite) && !linkStored) {
this._topSitesWithRelatedLinks.add(changedLinkSite);
return true;
}
return false;
},
_populatePlacesLinks: function () {
NewTabUtils.links.populateProviderCache(NewTabUtils.placesProvider, () => {
this._handleManyLinksChanged();
});
},
onLinkChanged: function (aProvider, aLink) {
// Make sure NewTabUtils.links handles the notification first.
setTimeout(() => {
if (this._handleLinkChanged(aLink)) {
this._updateRelatedTile();
}
}, 0);
},
onManyLinksChanged: function () {
// Make sure NewTabUtils.links handles the notification first.
setTimeout(() => {
this._handleManyLinksChanged();
}, 0);
},
/**
* Chooses and returns a related tile based on a user's top sites
* that we have an available related tile for.
*
* @return the chosen related tile, or undefined if there isn't one
*/
_updateRelatedTile: function() {
let sortedLinks = NewTabUtils.getProviderLinks(this);
if (!sortedLinks) {
// If NewTabUtils.links.resetCache() is called before getting here,
// sortedLinks may be undefined.
return;
}
// Delete the current related tile, if one exists.
let initialLength = sortedLinks.length;
this.maxNumLinks = initialLength;
if (initialLength) {
let mostFrecentLink = sortedLinks[0];
if ("related" == mostFrecentLink.type) {
this._callObservers("onLinkChanged", {
url: mostFrecentLink.url,
frecency: 0,
lastVisitDate: mostFrecentLink.lastVisitDate,
type: "related",
}, 0, true);
}
}
if (this._topSitesWithRelatedLinks.size == 0) {
// There are no potential related links we can show.
return;
}
// Create a flat list of all possible links we can show as related.
// Note that many top sites may map to the same related links, but we only
// want to count each related link once (based on url), thus possibleLinks is a map
// from url to relatedLink. Thus, each link has an equal chance of being chosen at
// random from flattenedLinks if it appears only once.
let possibleLinks = new Map();
this._topSitesWithRelatedLinks.forEach(topSiteWithRelatedLink => {
let relatedLinksMap = this._relatedLinks.get(topSiteWithRelatedLink);
relatedLinksMap.forEach((relatedLink, url) => {
possibleLinks.set(url, relatedLink);
})
});
let flattenedLinks = [...possibleLinks.values()];
// Choose our related link at random
let relatedIndex = Math.floor(Math.random() * flattenedLinks.length);
let chosenRelatedLink = flattenedLinks[relatedIndex];
// Show the new directory tile.
this._callObservers("onLinkChanged", {
url: chosenRelatedLink.url,
frecency: RELATED_FRECENCY,
lastVisitDate: chosenRelatedLink.lastVisitDate,
type: "related",
});
return chosenRelatedLink;
},
/**
* Return the object to its pre-init state
*/

View File

@ -19,6 +19,8 @@ Cu.import("resource://gre/modules/XPCOMUtils.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "NetUtil",
"resource://gre/modules/NetUtil.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "NewTabUtils",
"resource://gre/modules/NewTabUtils.jsm");
do_get_profile();
@ -58,6 +60,42 @@ const BinaryInputStream = CC("@mozilla.org/binaryinputstream;1",
"setInputStream");
let gLastRequestPath;
let relatedTile1 = {
url: "http://turbotax.com",
type: "related",
lastVisitDate: 4,
related: [
"taxact.com",
"hrblock.com",
"1040.com",
"taxslayer.com"
]
};
let relatedTile2 = {
url: "http://irs.gov",
type: "related",
lastVisitDate: 3,
related: [
"taxact.com",
"hrblock.com",
"freetaxusa.com",
"taxslayer.com"
]
};
let relatedTile3 = {
url: "http://hrblock.com",
type: "related",
lastVisitDate: 2,
related: [
"taxact.com",
"freetaxusa.com",
"1040.com",
"taxslayer.com"
]
};
let someOtherSite = {url: "http://someothersite.com", title: "Not_A_Related_Site"};
function getHttpHandler(path) {
let code = 200;
let body = JSON.stringify(kHttpHandlerData[path]);
@ -161,6 +199,7 @@ function run_test() {
server.registerPrefixHandler(kExamplePath, getHttpHandler(kExamplePath));
server.registerPrefixHandler(kFailPath, getHttpHandler(kFailPath));
server.start(kDefaultServerPort);
NewTabUtils.init();
run_next_test();
@ -175,41 +214,132 @@ function run_test() {
});
}
add_task(function test_updateRelatedTile() {
let topSites = ["site0.com", "1040.com", "site2.com", "hrblock.com", "site4.com", "freetaxusa.com", "site6.com"];
// Initial setup
let data = {"en-US": [relatedTile1, relatedTile2, relatedTile3, someOtherSite]};
let dataURI = 'data:application/json,' + JSON.stringify(data);
let testObserver = new TestFirstRun();
DirectoryLinksProvider.addObserver(testObserver);
yield promiseSetupDirectoryLinksProvider({linksURL: dataURI});
let links = yield fetchData();
let origIsTopPlacesSite = NewTabUtils.isTopPlacesSite;
NewTabUtils.isTopPlacesSite = function(site) {
return topSites.indexOf(site) >= 0;
}
let origGetProviderLinks = NewTabUtils.getProviderLinks;
NewTabUtils.getProviderLinks = function(provider) {
return links;
}
do_check_eq(DirectoryLinksProvider._updateRelatedTile(), undefined);
function TestFirstRun() {
this.promise = new Promise(resolve => {
this.onLinkChanged = (directoryLinksProvider, link) => {
links.unshift(link);
let possibleLinks = [relatedTile1.url, relatedTile2.url, relatedTile3.url];
isIdentical([...DirectoryLinksProvider._topSitesWithRelatedLinks], ["hrblock.com", "1040.com", "freetaxusa.com"]);
do_check_true(possibleLinks.indexOf(link.url) > -1);
do_check_eq(link.frecency, Infinity);
do_check_eq(link.type, "related");
resolve();
};
});
}
function TestChangingRelatedTile() {
this.count = 0;
this.promise = new Promise(resolve => {
this.onLinkChanged = (directoryLinksProvider, link) => {
this.count++;
let possibleLinks = [relatedTile1.url, relatedTile2.url, relatedTile3.url];
do_check_true(possibleLinks.indexOf(link.url) > -1);
do_check_eq(link.type, "related");
do_check_true(this.count <= 2);
if (this.count == 1) {
// The removed related link is the one we added initially.
do_check_eq(link.url, links.shift().url);
do_check_eq(link.frecency, 0);
} else {
links.unshift(link);
do_check_eq(link.frecency, Infinity);
}
isIdentical([...DirectoryLinksProvider._topSitesWithRelatedLinks], ["hrblock.com", "freetaxusa.com"]);
resolve();
}
});
}
function TestRemovingRelatedTile() {
this.count = 0;
this.promise = new Promise(resolve => {
this.onLinkChanged = (directoryLinksProvider, link) => {
this.count++;
do_check_eq(link.type, "related");
do_check_eq(this.count, 1);
do_check_eq(link.frecency, 0);
do_check_eq(link.url, links.shift().url);
isIdentical([...DirectoryLinksProvider._topSitesWithRelatedLinks], []);
resolve();
}
});
}
// Test first call to '_updateRelatedTile()', called when fetching directory links.
yield testObserver.promise;
DirectoryLinksProvider.removeObserver(testObserver);
// Removing a top site that doesn't have a related link should
// not change the current related tile.
let removedTopsite = topSites.shift();
do_check_eq(removedTopsite, "site0.com");
do_check_false(NewTabUtils.isTopPlacesSite(removedTopsite));
let updateRelatedTile = DirectoryLinksProvider._handleLinkChanged({
url: "http://" + removedTopsite,
type: "history",
});
do_check_false(updateRelatedTile);
// Removing a top site that has a related link should
// remove any current related tile and add a new one.
testObserver = new TestChangingRelatedTile();
DirectoryLinksProvider.addObserver(testObserver);
removedTopsite = topSites.shift();
do_check_eq(removedTopsite, "1040.com");
do_check_false(NewTabUtils.isTopPlacesSite(removedTopsite));
DirectoryLinksProvider.onLinkChanged(DirectoryLinksProvider, {
url: "http://" + removedTopsite,
type: "history",
});
yield testObserver.promise;
do_check_eq(testObserver.count, 2);
DirectoryLinksProvider.removeObserver(testObserver);
// Removing all top sites with related links should remove
// the current related link and not replace it.
topSites = [];
testObserver = new TestRemovingRelatedTile();
DirectoryLinksProvider.addObserver(testObserver);
DirectoryLinksProvider.onManyLinksChanged();
yield testObserver.promise;
// Cleanup
yield promiseCleanDirectoryLinksProvider();
NewTabUtils.isTopPlacesSite = origIsTopPlacesSite;
NewTabUtils.getProviderLinks = origGetProviderLinks;
});
add_task(function test_relatedLinksMap() {
let relatedTile1 = {
url: "http://turbotax.com",
type: "related",
lastVisitDate: 4,
related: [
"taxact.com",
"hrblock.com",
"1040.com",
"taxslayer.com"
]
};
let relatedTile2 = {
url: "http://irs.gov",
type: "related",
lastVisitDate: 3,
related: [
"taxact.com",
"hrblock.com",
"freetaxusa.com",
"taxslayer.com"
]
};
let relatedTile3 = {
url: "http://hrblock.com",
type: "related",
lastVisitDate: 2,
related: [
"taxact.com",
"freetaxusa.com",
"1040.com",
"taxslayer.com"
]
};
let someOtherSite = {url: "http://someothersite.com", title: "Not_A_Related_Site"};
let data = {"en-US": [relatedTile1, relatedTile2, relatedTile3, someOtherSite]};
let dataURI = 'data:application/json,' + JSON.stringify(data);
@ -240,6 +370,58 @@ add_task(function test_relatedLinksMap() {
yield promiseCleanDirectoryLinksProvider();
});
add_task(function test_topSitesWithRelatedLinks() {
let topSites = ["site0.com", "1040.com", "site2.com", "hrblock.com", "site4.com", "freetaxusa.com", "site6.com"];
let origIsTopPlacesSite = NewTabUtils.isTopPlacesSite;
NewTabUtils.isTopPlacesSite = function(site) {
return topSites.indexOf(site) >= 0;
}
// Mock out getProviderLinks() so we don't have to populate cache in NewTabUtils
let origGetProviderLinks = NewTabUtils.getProviderLinks;
NewTabUtils.getProviderLinks = function(provider) {
return [];
}
// We start off with no top sites with related links.
do_check_eq(DirectoryLinksProvider._topSitesWithRelatedLinks.size, 0);
let data = {"en-US": [relatedTile1, relatedTile2, relatedTile3, someOtherSite]};
let dataURI = 'data:application/json,' + JSON.stringify(data);
yield promiseSetupDirectoryLinksProvider({linksURL: dataURI});
let links = yield fetchData();
// Check we've populated related links as expected.
do_check_eq(DirectoryLinksProvider._relatedLinks.size, 5);
// When many sites change, we update _topSitesWithRelatedLinks as expected.
let expectedTopSitesWithRelatedLinks = ["hrblock.com", "1040.com", "freetaxusa.com"];
DirectoryLinksProvider._handleManyLinksChanged();
isIdentical([...DirectoryLinksProvider._topSitesWithRelatedLinks], expectedTopSitesWithRelatedLinks);
// Removing site6.com as a topsite has no impact on _topSitesWithRelatedLinks.
let popped = topSites.pop();
DirectoryLinksProvider._handleLinkChanged({url: "http://" + popped});
isIdentical([...DirectoryLinksProvider._topSitesWithRelatedLinks], expectedTopSitesWithRelatedLinks);
// Removing freetaxusa.com as a topsite will remove it from _topSitesWithRelatedLinks.
popped = topSites.pop();
expectedTopSitesWithRelatedLinks.pop();
DirectoryLinksProvider._handleLinkChanged({url: "http://" + popped});
isIdentical([...DirectoryLinksProvider._topSitesWithRelatedLinks], expectedTopSitesWithRelatedLinks);
// Re-adding freetaxusa.com as a topsite will add it to _topSitesWithRelatedLinks.
topSites.push(popped);
expectedTopSitesWithRelatedLinks.push(popped);
DirectoryLinksProvider._handleLinkChanged({url: "http://" + popped});
isIdentical([...DirectoryLinksProvider._topSitesWithRelatedLinks], expectedTopSitesWithRelatedLinks);
// Cleanup.
NewTabUtils.isTopPlacesSite = origIsTopPlacesSite;
NewTabUtils.getProviderLinks = origGetProviderLinks;
});
add_task(function test_reportSitesAction() {
yield DirectoryLinksProvider.init();
let deferred, expectedPath, expectedPost;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 B

After

Width:  |  Height:  |  Size: 92 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 816 B

After

Width:  |  Height:  |  Size: 802 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 B

After

Width:  |  Height:  |  Size: 122 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 827 B

After

Width:  |  Height:  |  Size: 814 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 665 B

After

Width:  |  Height:  |  Size: 652 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 669 B

After

Width:  |  Height:  |  Size: 658 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 99 B

After

Width:  |  Height:  |  Size: 92 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 B

After

Width:  |  Height:  |  Size: 120 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 816 B

After

Width:  |  Height:  |  Size: 802 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 B

After

Width:  |  Height:  |  Size: 122 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 931 B

After

Width:  |  Height:  |  Size: 782 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 827 B

After

Width:  |  Height:  |  Size: 814 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 665 B

After

Width:  |  Height:  |  Size: 652 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 669 B

After

Width:  |  Height:  |  Size: 658 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -17,3 +17,6 @@ ac_add_options --enable-crashreporter
ac_add_options --enable-release
. "$topsrcdir/build/mozconfig.automation"
# Temporarily enable building the new Performance++ tool.
ac_add_options --enable-devtools-perf

View File

@ -7665,19 +7665,6 @@ if test "$MOZ_CHROME_FILE_FORMAT" != "jar" &&
AC_MSG_ERROR([--enable-chrome-format must be set to either jar, flat, or omni])
fi
dnl =========================================================
dnl Enable support for revamped devtools Performance Tools
dnl =========================================================
MOZ_ARG_ENABLE_BOOL(devtools-perf,
[ --enable-devtools-perf Set compile flags necessary for compiling devtools perftools],
MOZ_DEVTOOLS_PERFTOOLS=1,
MOZ_DEVTOOLS_PERFTOOLS= )
if test -n "$MOZ_DEVTOOLS_PERFTOOLS"; then
AC_DEFINE(MOZ_DEVTOOLS_PERFTOOLS)
fi
AC_SUBST(MOZ_DEVTOOLS_PERFTOOLS)
dnl =========================================================
dnl Omnijar packaging (bug 552121)
dnl =========================================================

View File

@ -43,7 +43,10 @@ static RedirEntry kRedirMap[] = {
"mozilla", "chrome://global/content/mozilla.xhtml",
nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT
},
{ "plugins", "chrome://global/content/plugins.html", 0 },
{
"plugins", "chrome://global/content/plugins.html",
nsIAboutModule::URI_MUST_LOAD_IN_CHILD
},
{ "config", "chrome://global/content/config.xul", 0 },
#ifdef MOZ_CRASHREPORTER
{ "crashes", "chrome://global/content/crashes.xhtml", 0 },

View File

@ -1455,7 +1455,6 @@ InsertVsyncProfilerMarker(TimeStamp aVsyncTimestamp)
{
#ifdef MOZ_ENABLE_PROFILER_SPS
MOZ_ASSERT(CompositorParent::IsInCompositorThread());
MOZ_ASSERT(profiler_is_active());
VsyncPayload* payload = new VsyncPayload(aVsyncTimestamp);
PROFILER_MARKER_PAYLOAD("VsyncTimestamp", payload);
#endif
@ -1464,6 +1463,7 @@ InsertVsyncProfilerMarker(TimeStamp aVsyncTimestamp)
/*static */ void
CompositorParent::PostInsertVsyncProfilerMarker(TimeStamp aVsyncTimestamp)
{
// Called in the vsync thread
if (profiler_is_active() && sCompositorThreadHolder) {
CompositorLoop()->PostTask(FROM_HERE,
NewRunnableFunction(InsertVsyncProfilerMarker, aVsyncTimestamp));

View File

@ -378,11 +378,15 @@
</provider>
#ifdef MOZ_ANDROID_SHARE_OVERLAY
<!-- Share overlay activity -->
<!-- Share overlay activity
Setting launchMode="singleTop" ensures onNewIntent is called when the Activity is
reused. Ideally we create a new instance but Android L breaks this (bug 1137928). -->
<activity android:name="org.mozilla.gecko.overlays.ui.ShareDialog"
android:label="@string/overlay_share_label"
android:theme="@style/ShareOverlayActivity"
android:configChanges="keyboard|keyboardHidden|mcc|mnc|locale|layoutDirection"
android:launchMode="singleTop"
android:windowSoftInputMode="stateAlwaysHidden|adjustResize">
<intent-filter>

View File

@ -58,6 +58,7 @@ import org.mozilla.gecko.mozglue.ContextUtils;
import org.mozilla.gecko.mozglue.ContextUtils.SafeIntent;
import org.mozilla.gecko.mozglue.RobocopTarget;
import org.mozilla.gecko.firstrun.FirstrunPane;
import org.mozilla.gecko.overlays.ui.ShareDialog;
import org.mozilla.gecko.preferences.ClearOnShutdownPref;
import org.mozilla.gecko.preferences.GeckoPreferences;
import org.mozilla.gecko.prompts.Prompt;
@ -3048,6 +3049,7 @@ public class BrowserApp extends GeckoApp
shareIntent.putExtra(Intent.EXTRA_TEXT, url);
shareIntent.putExtra(Intent.EXTRA_SUBJECT, tab.getDisplayTitle());
shareIntent.putExtra(Intent.EXTRA_TITLE, tab.getDisplayTitle());
shareIntent.putExtra(ShareDialog.INTENT_EXTRA_DEVICES_ONLY, true);
// Clear the existing thumbnail extras so we don't share an old thumbnail.
shareIntent.removeExtra("share_screenshot_uri");

View File

@ -115,6 +115,10 @@
<!ENTITY overlay_share_no_url "No link found in this share">
<!ENTITY overlay_share_retry "Try again">
<!ENTITY overlay_share_select_device "Select device">
<!-- Localization note (overlay_no_synced_devices) : Used when the menu option
to send a tab to a synced device is pressed and no other synced devices
are found. -->
<!ENTITY overlay_no_synced_devices "No Firefox Account connected devices found">
<!ENTITY pref_category_search3 "Search">
<!ENTITY pref_category_search_summary "Customize your search providers">

View File

@ -114,15 +114,6 @@ public class SendTabList extends ListView {
final ParcelableClientRecord[] clients = c == null ? new ParcelableClientRecord[0] : c;
clientListAdapter.setClientRecordList(Arrays.asList(clients));
if (clients.length <= MAXIMUM_INLINE_ELEMENTS) {
// Show the list of devices in-line.
switchState(LIST);
return;
}
// Just show a button to launch the list of devices to choose from.
switchState(SHOW_DEVICES);
}
/**
@ -163,16 +154,4 @@ public class SendTabList extends ListView {
return builder.create();
}
/**
* Prevent scrolling of this ListView.
*/
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_MOVE) {
return true;
}
return super.dispatchTouchEvent(ev);
}
}

View File

@ -50,8 +50,27 @@ import android.widget.Toast;
* A transparent activity that displays the share overlay.
*/
public class ShareDialog extends Locales.LocaleAwareActivity implements SendTabTargetSelectedListener {
private enum State {
DEFAULT,
DEVICES_ONLY // Only display the device list.
}
private static final String LOGTAG = "GeckoShareDialog";
/** Flag to indicate that we should always show the device list; specific to this release channel. **/
public static final String INTENT_EXTRA_DEVICES_ONLY =
AppConstants.ANDROID_PACKAGE_NAME + ".intent.extra.DEVICES_ONLY";
/** The maximum number of devices we'll show in the dialog when in State.DEFAULT. **/
private static final int MAXIMUM_INLINE_DEVICES = 2;
private State state;
private SendTabList sendTabList;
private OverlayDialogButton readingListButton;
private OverlayDialogButton bookmarkButton;
private String url;
private String title;
@ -82,10 +101,31 @@ public class ShareDialog extends Locales.LocaleAwareActivity implements SendTabT
protected void handleSendTabUIEvent(Intent intent) {
sendTabOverrideIntent = intent.getParcelableExtra(SendTab.OVERRIDE_INTENT);
SendTabList sendTabList = (SendTabList) findViewById(R.id.overlay_send_tab_btn);
ParcelableClientRecord[] clientrecords = (ParcelableClientRecord[]) intent.getParcelableArrayExtra(SendTab.EXTRA_CLIENT_RECORDS);
// Escape hatch: we don't show the option to open this dialog in this state so this should
// never be run. However, due to potential inconsistencies in synced client state
// (e.g. bug 1122302 comment 47), we might fail.
if (state == State.DEVICES_ONLY && clientrecords.length == 0) {
Log.e(LOGTAG, "In state: " + State.DEVICES_ONLY + " and received 0 synced clients. Finishing...");
Toast.makeText(this, getResources().getText(R.string.overlay_no_synced_devices), Toast.LENGTH_SHORT)
.show();
finish();
return;
}
sendTabList.setSyncClients(clientrecords);
if (state == State.DEVICES_ONLY ||
clientrecords == null ||
clientrecords.length <= MAXIMUM_INLINE_DEVICES) {
// Show the list of devices in-line.
sendTabList.switchState(SendTabList.State.LIST);
return;
}
// Just show a button to launch the list of devices to choose from.
sendTabList.switchState(SendTabList.State.SHOW_DEVICES);
}
@Override
@ -117,9 +157,66 @@ public class ShareDialog extends Locales.LocaleAwareActivity implements SendTabT
super.onCreate(savedInstanceState);
getWindow().setWindowAnimations(0);
setContentView(R.layout.overlay_share_dialog);
LocalBroadcastManager.getInstance(this).registerReceiver(uiEventListener,
new IntentFilter(OverlayConstants.SHARE_METHOD_UI_EVENT));
// Send tab.
sendTabList = (SendTabList) findViewById(R.id.overlay_send_tab_btn);
// Register ourselves as both the listener and the context for the Adapter.
final SendTabDeviceListArrayAdapter adapter = new SendTabDeviceListArrayAdapter(this, this);
sendTabList.setAdapter(adapter);
sendTabList.setSendTabTargetSelectedListener(this);
bookmarkButton = (OverlayDialogButton) findViewById(R.id.overlay_share_bookmark_btn);
readingListButton = (OverlayDialogButton) findViewById(R.id.overlay_share_reading_list_btn);
Intent intent = getIntent();
final Resources resources = getResources();
final String bookmarkEnabledLabel = resources.getString(R.string.overlay_share_bookmark_btn_label);
final Drawable bookmarkEnabledIcon = resources.getDrawable(R.drawable.overlay_bookmark_icon);
bookmarkButton.setEnabledLabelAndIcon(bookmarkEnabledLabel, bookmarkEnabledIcon);
final String bookmarkDisabledLabel = resources.getString(R.string.overlay_share_bookmark_btn_label_already);
final Drawable bookmarkDisabledIcon = resources.getDrawable(R.drawable.overlay_bookmarked_already_icon);
bookmarkButton.setDisabledLabelAndIcon(bookmarkDisabledLabel, bookmarkDisabledIcon);
bookmarkButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addBookmark();
}
});
final String readingListEnabledLabel = resources.getString(R.string.overlay_share_reading_list_btn_label);
final Drawable readingListEnabledIcon = resources.getDrawable(R.drawable.overlay_readinglist_icon);
readingListButton.setEnabledLabelAndIcon(readingListEnabledLabel, readingListEnabledIcon);
final String readingListDisabledLabel = resources.getString(R.string.overlay_share_reading_list_btn_label_already);
final Drawable readingListDisabledIcon = resources.getDrawable(R.drawable.overlay_readinglist_already_icon);
readingListButton.setDisabledLabelAndIcon(readingListDisabledLabel, readingListDisabledIcon);
readingListButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addToReadingList();
}
});
}
@Override
protected void onResume() {
super.onResume();
final Intent intent = getIntent();
state = intent.getBooleanExtra(INTENT_EXTRA_DEVICES_ONLY, false) ?
State.DEVICES_ONLY : State.DEFAULT;
// If the Activity is being reused, we need to reset the state. Ideally, we create a
// new instance for each call, but Android L breaks this (bug 1137928).
sendTabList.switchState(SendTabList.State.LOADING);
// The URL is usually hiding somewhere in the extra text. Extract it.
final String extraText = ContextUtils.getStringExtra(intent, Intent.EXTRA_TEXT);
@ -134,12 +231,6 @@ public class ShareDialog extends Locales.LocaleAwareActivity implements SendTabT
return;
}
setContentView(R.layout.overlay_share_dialog);
LocalBroadcastManager.getInstance(this).registerReceiver(uiEventListener,
new IntentFilter(OverlayConstants.SHARE_METHOD_UI_EVENT));
// Have the service start any initialisation work that's necessary for us to show the correct
// UI. The results of such work will come in via the BroadcastListener.
Intent serviceStartupIntent = new Intent(this, OverlayActionService.class);
@ -150,9 +241,9 @@ public class ShareDialog extends Locales.LocaleAwareActivity implements SendTabT
// If not, we wing it with the URL.
// TODO: Consider polling Fennec databases to find better information to display.
String subjectText = intent.getStringExtra(Intent.EXTRA_SUBJECT);
final String subjectText = intent.getStringExtra(Intent.EXTRA_SUBJECT);
String telemetryExtras = "title=" + (subjectText != null);
final String telemetryExtras = "title=" + (subjectText != null);
if (subjectText != null) {
((TextView) findViewById(R.id.title)).setText(subjectText);
}
@ -164,21 +255,30 @@ public class ShareDialog extends Locales.LocaleAwareActivity implements SendTabT
// Set the subtitle text on the view and cause it to marquee if it's too long (which it will
// be, since it's a URL).
TextView subtitleView = (TextView) findViewById(R.id.subtitle);
final TextView subtitleView = (TextView) findViewById(R.id.subtitle);
subtitleView.setText(pageUrl);
subtitleView.setEllipsize(TextUtils.TruncateAt.MARQUEE);
subtitleView.setSingleLine(true);
subtitleView.setMarqueeRepeatLimit(5);
subtitleView.setSelected(true);
// Start the slide-up animation.
Animation anim = AnimationUtils.loadAnimation(this, R.anim.overlay_slide_up);
findViewById(R.id.sharedialog).startAnimation(anim);
// Configure buttons.
final ImageView foxIcon = (ImageView) findViewById(R.id.share_overlay_icon);
final LinearLayout topBar = (LinearLayout) findViewById(R.id.share_overlay_top_bar);
View.OnClickListener launchBrowser = new View.OnClickListener() {
if (state == State.DEVICES_ONLY) {
bookmarkButton.setVisibility(View.GONE);
readingListButton.setVisibility(View.GONE);
foxIcon.setOnClickListener(null);
topBar.setOnClickListener(null);
return;
}
bookmarkButton.setVisibility(View.VISIBLE);
readingListButton.setVisibility(View.VISIBLE);
// Configure buttons.
final View.OnClickListener launchBrowser = new View.OnClickListener() {
@Override
public void onClick(View view) {
ShareDialog.this.launchBrowser();
@ -188,62 +288,27 @@ public class ShareDialog extends Locales.LocaleAwareActivity implements SendTabT
foxIcon.setOnClickListener(launchBrowser);
topBar.setOnClickListener(launchBrowser);
final OverlayDialogButton bookmarkBtn = (OverlayDialogButton) findViewById(R.id.overlay_share_bookmark_btn);
final LocalBrowserDB browserDB = new LocalBrowserDB(getCurrentProfile());
setButtonState(url, browserDB);
final String bookmarkEnabledLabel = resources.getString(R.string.overlay_share_bookmark_btn_label);
final Drawable bookmarkEnabledIcon = resources.getDrawable(R.drawable.overlay_bookmark_icon);
bookmarkBtn.setEnabledLabelAndIcon(bookmarkEnabledLabel, bookmarkEnabledIcon);
final String bookmarkDisabledLabel = resources.getString(R.string.overlay_share_bookmark_btn_label_already);
final Drawable bookmarkDisabledIcon = resources.getDrawable(R.drawable.overlay_bookmarked_already_icon);
bookmarkBtn.setDisabledLabelAndIcon(bookmarkDisabledLabel, bookmarkDisabledIcon);
bookmarkBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addBookmark();
}
});
// Send tab.
SendTabList sendTabList = (SendTabList) findViewById(R.id.overlay_send_tab_btn);
// Register ourselves as both the listener and the context for the Adapter.
SendTabDeviceListArrayAdapter adapter = new SendTabDeviceListArrayAdapter(this, this);
sendTabList.setAdapter(adapter);
sendTabList.setSendTabTargetSelectedListener(this);
final OverlayDialogButton readinglistBtn = (OverlayDialogButton) findViewById(R.id.overlay_share_reading_list_btn);
final String readingListEnabledLabel = resources.getString(R.string.overlay_share_reading_list_btn_label);
final Drawable readingListEnabledIcon = resources.getDrawable(R.drawable.overlay_readinglist_icon);
readinglistBtn.setEnabledLabelAndIcon(readingListEnabledLabel, readingListEnabledIcon);
final String readingListDisabledLabel = resources.getString(R.string.overlay_share_reading_list_btn_label_already);
final Drawable readingListDisabledIcon = resources.getDrawable(R.drawable.overlay_readinglist_already_icon);
readinglistBtn.setDisabledLabelAndIcon(readingListDisabledLabel, readingListDisabledIcon);
readinglistBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
addToReadingList();
}
});
// Start the slide-up animation.
final Animation anim = AnimationUtils.loadAnimation(this, R.anim.overlay_slide_up);
findViewById(R.id.sharedialog).startAnimation(anim);
}
@Override
protected void onResume() {
super.onResume();
protected void onNewIntent(final Intent intent) {
super.onNewIntent(intent);
LocalBrowserDB browserDB = new LocalBrowserDB(getCurrentProfile());
disableButtonsIfAlreadyAdded(url, browserDB);
// The intent returned by getIntent is not updated automatically.
setIntent(intent);
}
/**
* Disables the bookmark/reading list buttons if the given URL is already in the corresponding
* list.
* Sets the state of the bookmark/reading list buttons: they are disabled if the given URL is
* already in the corresponding list.
*/
private void disableButtonsIfAlreadyAdded(final String pageURL, final LocalBrowserDB browserDB) {
private void setButtonState(final String pageURL, final LocalBrowserDB browserDB) {
new UIAsyncTask.WithoutParams<Void>(ThreadUtils.getBackgroundHandler()) {
// Flags to hold the result
boolean isBookmark;

Binary file not shown.

After

Width:  |  Height:  |  Size: 791 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 584 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -93,7 +93,7 @@
<style name="Widget.MenuItemSecondaryActionBar">
<item name="android:padding">8dip</item>
<item name="android:background">@drawable/action_bar_button</item>
<item name="android:scaleType">centerInside</item>
<item name="android:scaleType">fitCenter</item>
</style>
<style name="Widget.MenuItemActionView">

View File

@ -118,6 +118,7 @@
<string name="overlay_share_no_url">&overlay_share_no_url;</string>
<string name="overlay_share_retry">&overlay_share_retry;</string>
<string name="overlay_share_select_device">&overlay_share_select_device;</string>
<string name="overlay_no_synced_devices">&overlay_no_synced_devices;</string>
<string name="settings">&settings;</string>
<string name="settings_title">&settings_title;</string>

View File

@ -21,8 +21,14 @@
package org.mozilla.gecko.widget;
// Mozilla: New import
import android.accounts.Account;
import android.content.pm.PackageManager;
import org.mozilla.gecko.distribution.Distribution;
import org.mozilla.gecko.GeckoProfile;
import org.mozilla.gecko.fxa.FirefoxAccounts;
import org.mozilla.gecko.overlays.ui.ShareDialog;
import org.mozilla.gecko.sync.repositories.android.ClientsDatabaseAccessor;
import org.mozilla.gecko.R;
import java.io.File;
import android.content.BroadcastReceiver;
@ -323,6 +329,11 @@ public class ActivityChooserModel extends DataSetObservable {
*/
private OnChooseActivityListener mActivityChooserModelPolicy;
/**
* Mozilla: Share overlay variables.
*/
private final SyncStatusListener mSyncStatusListener = new SyncStatusListener();
/**
* Gets the data model backed by the contents of the provided file with historical data.
* Note that only one data model is backed by a given file, thus multiple calls with
@ -371,6 +382,12 @@ public class ActivityChooserModel extends DataSetObservable {
* Mozilla: Uses modified receiver
*/
mPackageMonitor.register(mContext);
/**
* Mozilla: Add Sync Status Listener.
*/
// TODO: We only need to add a sync status listener if the ShareDialog passes the intent filter.
FirefoxAccounts.addSyncStatusListener(mSyncStatusListener);
}
/**
@ -688,6 +705,7 @@ public class ActivityChooserModel extends DataSetObservable {
* Mozilla: Not needed for the application.
*/
mPackageMonitor.unregister();
FirefoxAccounts.removeSyncStatusListener(mSyncStatusListener);
}
/**
@ -736,8 +754,37 @@ public class ActivityChooserModel extends DataSetObservable {
List<ResolveInfo> resolveInfos = mContext.getPackageManager()
.queryIntentActivities(mIntent, 0);
final int resolveInfoCount = resolveInfos.size();
/**
* Mozilla: Temporary variables to prevent performance degradation in the loop.
*/
final PackageManager packageManager = mContext.getPackageManager();
final String channelToRemoveLabel = mContext.getResources().getString(R.string.overlay_share_label);
final String shareDialogClassName = ShareDialog.class.getCanonicalName();
for (int i = 0; i < resolveInfoCount; i++) {
ResolveInfo resolveInfo = resolveInfos.get(i);
/**
* Mozilla: We want "Add to Firefox" to appear differently inside of Firefox than
* from external applications - override the name and icon here.
*
* Do not display the menu item if there are no devices to share to.
*
* Note: we check both the class name and the label to ensure we only change the
* label of the current channel.
*/
if (shareDialogClassName.equals(resolveInfo.activityInfo.name) &&
channelToRemoveLabel.equals(resolveInfo.loadLabel(packageManager))) {
// Don't add the menu item if there are no devices to share to.
if (!hasOtherSyncClients()) {
continue;
}
resolveInfo.labelRes = R.string.overlay_share_send_other;
resolveInfo.icon = R.drawable.share_plane;
}
mActivities.add(new ActivityResolveInfo(resolveInfo));
}
return true;
@ -1251,5 +1298,41 @@ public class ActivityChooserModel extends DataSetObservable {
mReloadActivities = true;
}
}
/**
* Mozilla: Return whether or not there are other synced clients.
*/
private boolean hasOtherSyncClients() {
final ClientsDatabaseAccessor db = new ClientsDatabaseAccessor(mContext);
return db.clientsCount() > 0;
}
/**
* Mozilla: Reload activities on sync.
*/
private class SyncStatusListener implements FirefoxAccounts.SyncStatusListener {
@Override
public Context getContext() {
return mContext;
}
@Override
public Account getAccount() {
return FirefoxAccounts.getFirefoxAccount(getContext());
}
@Override
public void onSyncStarted() {
}
@Override
public void onSyncFinished() {
// TODO: We only need to reload activities when the number of devices changes.
// This may not be worth it if we have to touch the DB to get the client count.
synchronized (mInstanceLock) {
mReloadActivities = true;
}
}
}
}

View File

@ -5,11 +5,14 @@
package org.mozilla.gecko.widget;
import android.view.Menu;
import org.mozilla.gecko.GeckoAppShell;
import org.mozilla.gecko.R;
import org.mozilla.gecko.Telemetry;
import org.mozilla.gecko.TelemetryContract;
import org.mozilla.gecko.menu.MenuItemActionView;
import org.mozilla.gecko.menu.QuickShareBarActionView;
import org.mozilla.gecko.overlays.ui.ShareDialog;
import org.mozilla.gecko.util.ThreadUtils;
import android.content.Context;
@ -136,10 +139,24 @@ public class GeckoActionProvider {
PackageManager packageManager = mContext.getPackageManager();
// Populate the sub-menu with a sub set of the activities.
final String shareDialogClassName = ShareDialog.class.getCanonicalName();
final String sendTabLabel = mContext.getResources().getString(R.string.overlay_share_send_other);
final int count = dataModel.getActivityCount();
for (int i = 0; i < count; i++) {
ResolveInfo activity = dataModel.getActivity(i);
subMenu.add(0, i, i, activity.loadLabel(packageManager))
final CharSequence activityLabel = activity.loadLabel(packageManager);
// Pin internal actions to the top. Note:
// the order here does not affect quick share.
final int order;
if (shareDialogClassName.equals(activity.activityInfo.name) &&
sendTabLabel.equals(activityLabel)) {
order = i;
} else {
order = i | Menu.CATEGORY_SECONDARY;
}
subMenu.add(0, i, order, activityLabel)
.setIcon(activity.loadIcon(packageManager))
.setOnMenuItemClickListener(mCallbacks);
}

View File

@ -34,6 +34,7 @@ REPOSITORY_PATHS = [
'mozboot/__init__.py',
'mozboot/android-ndk.rb',
'mozboot/android.py',
'mozboot/archlinux.py',
'mozboot/base.py',
'mozboot/bootstrap.py',
'mozboot/centos.py',

View File

@ -9,6 +9,8 @@ import platform
import sys
import os.path
# Don't forgot to add new mozboot modules to the bootstrap download
# list in bin/bootstrap.py!
from mozboot.centos import CentOSBootstrapper
from mozboot.debian import DebianBootstrapper
from mozboot.fedora import FedoraBootstrapper

View File

@ -1081,4 +1081,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = {
static const int32_t kUnknownId = -1;
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1434194312527000);
static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1434795456425000);

View File

@ -1,3 +1,4 @@
56ct.com: could not connect to host
9point6.com: could not connect to host
admin.google.com: did not receive HSTS header (error ignored - included regardless)
adsfund.org: could not connect to host
@ -49,6 +50,7 @@ cert.se: max-age too low: 2628001
cg.search.yahoo.com: did not receive HSTS header
ch.search.yahoo.com: did not receive HSTS header
chainmonitor.com: could not connect to host
changelab.cc: max-age too low: 0
chatbot.me: could not connect to host
checkout.google.com: did not receive HSTS header (error ignored - included regardless)
chfr.search.yahoo.com: did not receive HSTS header
@ -57,7 +59,7 @@ chrome-devtools-frontend.appspot.com: did not receive HSTS header (error ignored
chrome.google.com: did not receive HSTS header (error ignored - included regardless)
cimballa.com: did not receive HSTS header
cl.search.yahoo.com: did not receive HSTS header
cloud.google.com: did not receive HSTS header (error ignored - included regardless)
classdojo.com: did not receive HSTS header
cn.search.yahoo.com: did not receive HSTS header
co.search.yahoo.com: did not receive HSTS header
code.google.com: did not receive HSTS header (error ignored - included regardless)
@ -71,7 +73,6 @@ crowdcurity.com: did not receive HSTS header
crowdjuris.com: could not connect to host
crypto.is: max-age too low: 7776000
csawctf.poly.edu: could not connect to host
cspbuilder.info: could not connect to host
ct.search.yahoo.com: did not receive HSTS header
cujanovic.com: did not receive HSTS header
cyanogenmod.xxx: could not connect to host
@ -105,6 +106,7 @@ es.search.yahoo.com: did not receive HSTS header
esec.rs: did not receive HSTS header
espanol.search.yahoo.com: did not receive HSTS header
espra.com: could not connect to host
ethitter.com: did not receive HSTS header
etsysecure.com: could not connect to host
fabianfischer.de: did not receive HSTS header
fatzebra.com.au: did not receive HSTS header
@ -131,7 +133,7 @@ googleplex.com: could not connect to host (error ignored - included regardless)
goto.google.com: did not receive HSTS header (error ignored - included regardless)
gparent.org: did not receive HSTS header
gr.search.yahoo.com: did not receive HSTS header
grandmascookieblog.com: could not connect to host
grandmascookieblog.com: did not receive HSTS header
greplin.com: could not connect to host
groups.google.com: did not receive HSTS header (error ignored - included regardless)
gunnarhafdal.com: could not connect to host
@ -155,18 +157,20 @@ ie.search.yahoo.com: did not receive HSTS header
ilmconpm.de: did not receive HSTS header
in.search.yahoo.com: did not receive HSTS header
inertianetworks.com: did not receive HSTS header
iniiter.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]
intercom.io: did not receive HSTS header
interserved.com: did not receive HSTS header
iop.intuit.com: max-age too low: 86400
irccloud.com: did not receive HSTS header
it.search.yahoo.com: did not receive HSTS header
janoberst.com: did not receive HSTS header
jonathan.ir: could not connect to host
jottit.com: could not connect to host
k-dev.de: could not connect to host
keepclean.me: could not connect to host
keymaster.lookout.com: did not receive HSTS header
kirkforcongress.com: could not connect to host
kirkforsenate.com: could not connect to host
kirkforsenate.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
@ -204,6 +208,7 @@ megaxchange.com: did not receive HSTS header
meinebo.it: could not connect to host
minikneet.nl: did not receive HSTS header
mirindadomo.ru: could not connect to host
mnemotiv.com: did not receive HSTS header
mobilethreat.net: could not connect to host
mobilethreatnetwork.net: could not connect to host
mocloud.eu: [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]
@ -211,6 +216,7 @@ movelaria.com.br: did not receive HSTS header
mqas.net: could not connect to host
mt.search.yahoo.com: did not receive HSTS header
mu.search.yahoo.com: did not receive HSTS header
mujadin.se: max-age too low: 86400
mw.search.yahoo.com: did not receive HSTS header
mx.search.yahoo.com: did not receive HSTS header
my.alfresco.com: did not receive HSTS header
@ -221,17 +227,18 @@ myni.io: could not connect to host
neftaly.com: did not receive HSTS header
neonisi.com: could not connect to host
netzpolitik.org: did not receive HSTS header
netztest.at: did not receive HSTS header
nexth.de: could not connect to host
nexth.net: could not connect to host
nexth.us: could not connect to host
ni.search.yahoo.com: did not receive HSTS header
nl.search.yahoo.com: did not receive HSTS header
no.search.yahoo.com: did not receive HSTS header
nodari.com.ar: [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]
noexpect.org: could not connect to host
np.search.yahoo.com: did not receive HSTS header
npw.net: [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]
null-sec.ru: could not connect to host
nutsandboltsmedia.com: did not receive HSTS header
nz.search.yahoo.com: did not receive HSTS header
openshift.redhat.com: did not receive HSTS header
otakurepublic.com: did not receive HSTS header
@ -247,12 +254,11 @@ pk.search.yahoo.com: did not receive HSTS header
pl.search.yahoo.com: did not receive HSTS header
platform.lookout.com: could not connect to host
play.google.com: did not receive HSTS header (error ignored - included regardless)
pmg-offshore-company.com: did not receive HSTS header
polymathematician.com: could not connect to host
popcorntime.ws: max-age too low: 2592000
pr.search.yahoo.com: did not receive HSTS header
pressfreedomfoundation.org: did not receive HSTS header
prodpad.com: did not receive HSTS header
profiles.google.com: did not receive HSTS header (error ignored - included regardless)
promecon-gmbh.de: did not receive HSTS header
proximato.com: could not connect to host
py.search.yahoo.com: did not receive HSTS header
@ -282,11 +288,11 @@ serverdensity.io: did not receive HSTS header
sg.search.yahoo.com: did not receive HSTS header
shops.neonisi.com: could not connect to host
siammedia.co: did not receive HSTS header
sikayetvar.com: did not receive HSTS header
silentcircle.org: could not connect to host
simon.butcher.name: max-age too low: 2629743
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)
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]
sol.io: could not connect to host
souyar.de: could not connect to host
souyar.net: could not connect to host
@ -306,9 +312,11 @@ sv.search.yahoo.com: did not receive HSTS header
sylaps.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]
t.facebook.com: did not receive HSTS header
tablet.facebook.com: did not receive HSTS header
tageau.com: could not connect to host
talk.google.com: could not connect to host
talk.google.com: could not connect to host (error ignored - included regardless)
talkgadget.google.com: did not receive HSTS header (error ignored - included regardless)
tandarts-haarlem.nl: did not receive HSTS header
taxsquirrel.com: did not receive HSTS header
tc-bonito.de: did not receive HSTS header
tektoria.de: did not receive HSTS header
@ -316,8 +324,8 @@ temehu.com: did not receive HSTS header
terrax.berlin: could not connect to host
th.search.yahoo.com: did not receive HSTS header
the-sky-of-valkyries.com: could not connect to host
thetomharling.com: did not receive HSTS header
thomasgriffin.io: did not receive HSTS header
toptexture.com: did not receive HSTS header
tr.search.yahoo.com: did not receive HSTS header
translate.googleapis.com: did not receive HSTS header (error ignored - included regardless)
translatoruk.co.uk: did not receive HSTS header
@ -333,7 +341,7 @@ uz.search.yahoo.com: did not receive HSTS header
ve.search.yahoo.com: did not receive HSTS header
viennan.net: did not receive HSTS header
vn.search.yahoo.com: did not receive HSTS header
vyncke.org: max-age too low: 2678400
vyncke.org: did not receive HSTS header
wallet.google.com: did not receive HSTS header (error ignored - included regardless)
webmail.mayfirst.org: did not receive HSTS header
wikidsystems.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]

View File

@ -8,7 +8,7 @@
/*****************************************************************************/
#include <stdint.h>
const PRTime gPreloadListExpirationTime = INT64_C(1436613506897000);
const PRTime gPreloadListExpirationTime = INT64_C(1437214651606000);
class nsSTSPreload
{
@ -27,14 +27,17 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "1a-werkstattgeraete.de", true },
{ "2048game.co.uk", true },
{ "302.nyc", true },
{ "5apps.com", false },
{ "7183.org", true },
{ "8ack.de", true },
{ "abmahnhelfer.de", true },
{ "accounts.firefox.com", true },
{ "accounts.google.com", true },
{ "aclu.org", false },
{ "activiti.alfresco.com", false },
{ "acus.gov", true },
{ "adamkostecki.de", true },
{ "adamstas.com", true },
{ "addvocate.com", true },
{ "adlershop.ch", true },
{ "admin.fedoraproject.org", true },
@ -51,8 +54,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "airlea.com", true },
{ "aiticon.com", true },
{ "ajouin.com", true },
{ "akselinurmio.fi", true },
{ "al-shami.net", true },
{ "aladdinschools.appspot.com", false },
{ "alainwolf.net", true },
{ "alanrickmanflipstable.com", true },
{ "alecvannoten.be", true },
{ "alexsexton.com", true },
{ "alexyang.me", true },
@ -65,11 +71,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "angularjs.org", true },
{ "anime.my", false },
{ "animurecs.com", true },
{ "ankakaak.com", true },
{ "ankarakart.com.tr", true },
{ "annahmeschluss.de", true },
{ "annevankesteren.com", true },
{ "annevankesteren.nl", true },
{ "annevankesteren.org", true },
{ "anonym-surfen.de", true },
{ "ansdell.net", true },
{ "antipolygraph.org", true },
{ "anycoin.me", true },
@ -86,6 +94,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "app.simpletax.ca", false },
{ "app.yinxiang.com", false },
{ "appengine.google.com", true },
{ "apps-for-fishing.com", true },
{ "apps.facebook.com", false },
{ "apps.fedoraproject.org", true },
{ "apps.stg.fedoraproject.org", true },
@ -97,6 +106,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "arivo.com.br", true },
{ "arlen.io", true },
{ "aroonchande.com", true },
{ "arteseideias.com.pt", true },
{ "arty.name", true },
{ "ask.fedoraproject.org", true },
{ "ask.stg.fedoraproject.org", true },
@ -104,12 +114,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "atavio.ch", true },
{ "atavio.de", true },
{ "atc.io", true },
{ "athenelive.com", true },
{ "atishchenko.com", true },
{ "atlantischild.hu", true },
{ "atlassian.net", true },
{ "atte.fi", true },
{ "auf-feindgebiet.de", true },
{ "aurainfosec.com", true },
{ "aurainfosec.com.au", true },
{ "auraredeye.com", true },
{ "auraredshield.com", true },
{ "authentication.io", true },
{ "autoledky.sk", true },
{ "azabani.com", true },
{ "badges.fedoraproject.org", true },
{ "badges.stg.fedoraproject.org", true },
@ -146,6 +162,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "billigssl.dk", true },
{ "bit.voyage", true },
{ "bitbucket.org", false },
{ "bitchan.it", true },
{ "bitcoinx.ro", true },
{ "bitfactory.ws", true },
{ "bitmex.com", true },
{ "bitmon.net", true },
@ -156,10 +174,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bl4ckb0x.info", true },
{ "bl4ckb0x.net", true },
{ "bl4ckb0x.org", true },
{ "blackberrycentral.com", true },
{ "blacklane.com", true },
{ "blessnet.jp", true },
{ "blockchain.info", true },
{ "blocksatz-medien.de", true },
{ "bloemendal.me", true },
{ "blog.cyveillance.com", true },
{ "blog.gparent.org", true },
{ "blog.linode.com", false },
@ -171,8 +191,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bonitabrazilian.co.nz", true },
{ "bookingapp.nl", true },
{ "boxcryptor.com", true },
{ "boypoint.de", true },
{ "brage.info", true },
{ "brakemanpro.com", true },
{ "bran.cc", true },
{ "brandbuilderwebsites.com", true },
{ "breeswish.org", true },
{ "broeselei.at", true },
@ -183,6 +205,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "bugzilla.mozilla.org", true },
{ "bulktrade.de", true },
{ "bundaberg.com", true },
{ "burtrum.org", true },
{ "business.facebook.com", false },
{ "business.lookout.com", false },
{ "bustimes.org", true },
@ -202,6 +225,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "carezone.com", false },
{ "cartouche24.eu", true },
{ "cartucce24.it", true },
{ "casa-su.casa", true },
{ "cbhq.net", true },
{ "cdnb.co", true },
{ "celltek-server.de", false },
{ "certible.com", true },
@ -209,7 +234,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cfo.gov", true },
{ "chahub.com", true },
{ "chainmonitor.com", true },
{ "changelab.cc", true },
{ "chartstoffarm.de", false },
{ "chatbot.me", true },
{ "check.torproject.org", false },
@ -227,7 +251,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cktennis.com", true },
{ "clan-ww.com", true },
{ "clapping-rhymes.com", true },
{ "classdojo.com", true },
{ "clerkendweller.uk", true },
{ "clintwilson.technology", true },
{ "cloud.google.com", true },
@ -246,7 +269,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "codereview.chromium.org", true },
{ "coffeeetc.co.uk", true },
{ "coinapult.com", true },
{ "coinbase.com", true },
{ "comdurav.com", true },
{ "commencepayments.com", true },
{ "comssa.org.au", true },
{ "config.schokokeks.org", false },
{ "conformal.com", true },
@ -256,11 +281,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cor-ser.es", true },
{ "cordial-restaurant.com", true },
{ "cotonea.de", true },
{ "courtlistener.com", true },
{ "crm.onlime.ch", false },
{ "crowdjuris.com", true },
{ "crypto.cat", false },
{ "cryptobin.org", true },
{ "cryptopartyatx.org", true },
{ "cryptopush.com", true },
{ "cs50.harvard.edu", true },
{ "cs50.net", true },
{ "cspbuilder.info", true },
@ -270,6 +297,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cupcake.is", true },
{ "curiosity-driven.org", true },
{ "curlybracket.co.uk", true },
{ "curtacircuitos.com.br", false },
{ "cyanogenmod.xxx", true },
{ "cybershambles.com", true },
{ "cybozu.com", true },
@ -278,6 +306,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "cyphertite.com", true },
{ "cyprus-company-service.com", true },
{ "czbix.com", true },
{ "danskoferie.dk", true },
{ "daphne.informatik.uni-freiburg.de", true },
{ "darchoods.net", false },
{ "darkpony.ru", true },
@ -292,12 +321,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "daveoc64.co.uk", true },
{ "davidlyness.com", true },
{ "davidnoren.com", true },
{ "daylightpirates.org", true },
{ "dccode.gov", true },
{ "deadbeef.ninja", true },
{ "dealcruiser.nl", true },
{ "debtkit.co.uk", true },
{ "dedimax.de", true },
{ "dee.pe", true },
{ "deliverance.co.uk", true },
{ "denh.am", true },
{ "depechemode-live.com", true },
{ "derevtsov.com", false },
@ -305,10 +336,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "detectify.com", false },
{ "developer.mydigipass.com", false },
{ "developers.facebook.com", false },
{ "devinfo.net", true },
{ "diamante.ro", true },
{ "die-besten-weisheiten.de", true },
{ "dillonkorman.com", true },
{ "dinamoelektrik.com", true },
{ "disking.co.uk", true },
{ "dist.torproject.org", false },
{ "dixmag.com", true },
{ "dl.google.com", true },
@ -327,6 +360,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "dreamsforabetterworld.com.au", true },
{ "drive.google.com", true },
{ "dropbox.com", true },
{ "dubrovskiy.net", true },
{ "dyeager.org", true },
{ "dylanscott.com.au", true },
{ "dynaloop.net", true },
{ "dzlibs.io", true },
@ -342,6 +377,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "ectora.com", true },
{ "ed.gs", true },
{ "edit.yahoo.com", false },
{ "edix.ru", true },
{ "eduroam.no", true },
{ "edyou.eu", true },
{ "ef.gy", true },
@ -358,11 +394,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "energy-drink-magazin.de", true },
{ "enorekcah.com", true },
{ "entropia.de", false },
{ "erotische-aanbiedingen.nl", true },
{ "errors.zenpayroll.com", false },
{ "esoa.net", true },
{ "espra.com", true },
{ "ethack.org", true },
{ "ethitter.com", true },
{ "eurotramp.com", true },
{ "eva.cz", true },
{ "evalesc.com", true },
{ "everhome.de", true },
{ "evstatus.com", true },
{ "exiahost.com", true },
@ -380,6 +419,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "faq.lookout.com", false },
{ "fassadenverkleidung24.de", true },
{ "fastcomcorp.net", true },
{ "faucetbox.com", true },
{ "federalregister.gov", true },
{ "fedorahosted.org", true },
{ "fedorapeople.org", true },
@ -417,15 +457,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "freesounding.com", true },
{ "freesounding.ru", true },
{ "freethought.org.au", true },
{ "froggstack.de", true },
{ "fronteers.nl", true },
{ "ftccomplaintassistant.gov", true },
{ "fundingempire.com", true },
{ "futos.de", true },
{ "fx5.de", true },
{ "gallery44.org", true },
{ "gambitnash.co.uk", true },
{ "gamercredo.com", true },
{ "garron.net", true },
{ "gavick.com", true },
{ "gaytorrent.ru", true },
{ "gc.net", true },
{ "gemeinfreie-lieder.de", true },
{ "geoip.fedoraproject.org", true },
{ "geoip.stg.fedoraproject.org", true },
@ -447,19 +491,23 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "gmail.com", false },
{ "gmantra.org", true },
{ "gmcd.co", true },
{ "gnetwork.eu", true },
{ "go.xero.com", false },
{ "gocardless.com", true },
{ "googlemail.com", false },
{ "googleplex.com", true },
{ "goto.google.com", true },
{ "gotowned.org", true },
{ "gplintegratedit.com", true },
{ "gpsfix.cz", true },
{ "grc.com", true },
{ "grc.com", false },
{ "greensolid.biz", true },
{ "grepular.com", true },
{ "groetzner.net", true },
{ "groups.google.com", true },
{ "gtraxapp.com", true },
{ "gudini.net", true },
{ "gugga.dk", true },
{ "guidetoiceland.is", true },
{ "gunnarhafdal.com", true },
{ "guphi.net", true },
@ -487,6 +535,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "hemlockhillscabinrentals.com", true },
{ "henriknoerr.com", true },
{ "heppler.net", true },
{ "herbert.io", true },
{ "herocentral.de", true },
{ "heute-kaufen.de", true },
{ "hex2013.com", true },
@ -521,9 +570,11 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "id.mayfirst.org", false },
{ "ideaweb.de", true },
{ "ihrlotto.de", true },
{ "ijohan.nl", true },
{ "ikkatsu-satei.jp", true },
{ "ilikerainbows.co.uk", true },
{ "ilikerainbows.co.uk", false },
{ "imaginary.ca", true },
{ "imgg.es", true },
{ "imouto.my", false },
{ "in.xero.com", false },
{ "inb4.us", true },
@ -533,31 +584,39 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "inleaked.com", true },
{ "innophate-security.com", true },
{ "innophate-security.nl", true },
{ "insighti.org", true },
{ "insouciant.org", true },
{ "instasex.ch", true },
{ "interasistmen.se", true },
{ "ionas-law.ro", true },
{ "ipmimagazine.com", true },
{ "iranianlawschool.com", true },
{ "iridiumbrowser.de", true },
{ "irische-segenswuensche.info", true },
{ "ironfistdesign.com", true },
{ "isitchristmas.com", true },
{ "isogram.nl", true },
{ "it-schwerin.de", true },
{ "itdashboard.gov", true },
{ "itriskltd.com", true },
{ "itsamurai.ru", true },
{ "itshost.ru", true },
{ "izdiwho.com", true },
{ "j0s.at", true },
{ "jackyyf.com", false },
{ "jakub-boucek.cz", true },
{ "janus-engineering.de", true },
{ "jbn.mx", true },
{ "jelmer.co.uk", true },
{ "jelmer.uk", true },
{ "jeremyness.com", true },
{ "jettshome.org", true },
{ "jfreitag.de", true },
{ "jimshaver.net", true },
{ "jira.com", true },
{ "jitsi.org", false },
{ "jkb.pics", true },
{ "jkbuster.com", true },
{ "jmdekker.it", true },
{ "jmedved.com", true },
{ "johannes.io", true },
@ -566,15 +625,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "jonaswitmer.ch", true },
{ "jonathan.ir", true },
{ "jonnybarnes.uk", true },
{ "jrc9.ca", true },
{ "julian-kipka.de", true },
{ "jwilsson.com", true },
{ "jwilsson.me", true },
{ "k-dev.de", true },
{ "kaheim.de", true },
{ "kalmar.com", true },
{ "kamikano.com", true },
{ "kanzashi.com", true },
{ "kardize24.pl", true },
{ "karmaspa.se", true },
{ "kartonmodellbau.org", true },
{ "kaufberatung.community", true },
{ "kdex.de", true },
{ "kdyby.org", true },
{ "keeleysam.com", true },
@ -595,7 +658,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "kinsights.com", false },
{ "kintone.com", true },
{ "kirei.se", true },
{ "kirkforsenate.com", true },
{ "kissflow.com", true },
{ "kitsta.com", true },
{ "klarmobil-empfehlen.de", true },
{ "klatschreime.de", true },
@ -609,6 +672,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "koenrouwhorst.nl", true },
{ "koenvdheuvel.me", true },
{ "kojipkgs.fedoraproject.org", true },
{ "kollawat.me", true },
{ "komandakovalchuk.com", true },
{ "konklone.com", true },
{ "koop-bremen.de", true },
@ -626,15 +690,18 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "lastpass.com", false },
{ "launchkey.com", true },
{ "lavalite.de", true },
{ "lavval.com", true },
{ "lb-toner.de", true },
{ "leadbook.ru", true },
{ "ledgerscope.net", false },
{ "ledhouse.sk", true },
{ "leibniz-remscheid.de", true },
{ "leifdreizler.com", true },
{ "leonardcamacho.me", true },
{ "leonklingele.de", true },
{ "les-corsaires.net", true },
{ "libraryfreedomproject.org", true },
{ "lichtspot.de", true },
{ "liebel.org", true },
{ "light.mail.ru", true },
{ "lighting-centres.co.uk", true },
@ -687,26 +754,35 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mailmag.net", true },
{ "makeitdynamic.com", true },
{ "makeyourlaws.org", true },
{ "mall.cz", true },
{ "mall.hu", true },
{ "mall.pl", true },
{ "mall.sk", true },
{ "malnex.de", true },
{ "malwre.io", true },
{ "man3s.jp", true },
{ "manage.zenpayroll.com", false },
{ "manageprojects.com", true },
{ "manager.linode.com", false },
{ "mandala-ausmalbilder.de", true },
{ "manicode.com", true },
{ "markayapilandirma.com", true },
{ "market.android.com", true },
{ "markhaehnel.de", true },
{ "markusueberallassetmanagement.de", true },
{ "marshut.net", true },
{ "massivum.de", true },
{ "matatall.com", true },
{ "mathiasbynens.be", true },
{ "matteomarescotti.it", true },
{ "mattfin.ch", true },
{ "mattmccutchen.net", true },
{ "mattsvensson.com", true },
{ "max.gov", true },
{ "mbasic.facebook.com", false },
{ "mbp.banking.co.at", false },
{ "md5file.com", true },
{ "mdfnet.se", true },
{ "mdfnet.se", false },
{ "meamod.com", true },
{ "mediacru.sh", true },
{ "medium.com", true },
@ -714,10 +790,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mega.co.nz", false },
{ "megaplan.cz", true },
{ "megaplan.ru", true },
{ "mehmetince.net", true },
{ "meinebo.it", true },
{ "members.mayfirst.org", false },
{ "members.nearlyfreespeech.net", false },
{ "mevs.cz", true },
{ "mh-bloemen.co.jp", true },
{ "miasarafina.de", true },
{ "michalspacek.cz", true },
{ "miconcinemas.com", true },
@ -727,6 +805,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mikewest.org", true },
{ "miku.hatsune.my", false },
{ "mimeit.de", true },
{ "mimovrste.com", true },
{ "mindoktor.se", true },
{ "minecraftvoter.com", true },
{ "mineover.es", true },
@ -736,6 +815,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mirrorx.com", true },
{ "miskatonic.org", true },
{ "mister.hosting", true },
{ "mitell.jp", false },
{ "mittenhacks.com", true },
{ "mkcert.org", true },
{ "mkw.st", true },
{ "mnsure.org", true },
@ -758,14 +839,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "mths.be", true },
{ "mtouch.facebook.com", false },
{ "mudcrab.us", true },
{ "mujadin.se", true },
{ "munich-rage.de", true },
{ "munuc.org", true },
{ "musicgamegalaxy.de", true },
{ "mustika.cf", true },
{ "mutamatic.com", true },
{ "mutantmonkey.in", true },
{ "mutantmonkey.info", true },
{ "mutantmonkey.sexy", true },
{ "mvno.io", true },
{ "mvsecurity.nl", true },
{ "mwe.st", true },
{ "my.onlime.ch", false },
{ "my.usa.gov", true },
@ -777,32 +860,40 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "myplaceonline.com", true },
{ "myprintcard.de", true },
{ "myvirtualserver.com", true },
{ "nachsendeauftrag.net", true },
{ "nachsenden.info", true },
{ "nameid.org", true },
{ "namepros.com", true },
{ "nan.zone", true },
{ "narodniki.com", true },
{ "nationalpriorities.org", true },
{ "nbl.org.tw", true },
{ "nctx.co.uk", true },
{ "nectarleaf.com", true },
{ "neg9.org", false },
{ "neilwynne.com", false },
{ "neko.li", true },
{ "nemovement.org", true },
{ "net-safe.info", true },
{ "netera.se", true },
{ "netrider.net.au", true },
{ "netzbit.de", true },
{ "netztest.at", true },
{ "newkaliningrad.ru", true },
{ "newstarnootropics.com", true },
{ "ng-security.com", true },
{ "nginxnudes.com", true },
{ "nieselregen.com", true },
{ "niloxy.com", true },
{ "nmctest.net", true },
{ "nodari.com.ar", true },
{ "noemax.com", true },
{ "noobs-r-us.co.uk", true },
{ "nos-oignons.net", true },
{ "notalone.gov", true },
{ "nouvelle-vague-saint-cast.fr", true },
{ "nowhere.dk", true },
{ "npw.net", true },
{ "nsboutique.com", true },
{ "nu3.at", true },
{ "nu3.ch", true },
{ "nu3.co.uk", true },
@ -814,13 +905,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "nu3.no", true },
{ "nu3.se", true },
{ "null-sec.ru", true },
{ "nutsandboltsmedia.com", false },
{ "nuvini.com", true },
{ "nwa.xyz", true },
{ "nwgh.org", true },
{ "nymphetomania.net", true },
{ "oakslighting.co.uk", true },
{ "offshore-firma.org", true },
{ "ohling.org", true },
{ "okmx.de", true },
{ "omitech.co.uk", true },
{ "onedot.nl", true },
@ -834,6 +925,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "opsmate.com", false },
{ "optimus.io", true },
{ "orbograph-hrcm.com", true },
{ "orcahq.com", true },
{ "oscarvk.ch", true },
{ "osterkraenzchen.de", true },
{ "otakuworld.de", true },
@ -858,6 +950,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "passwd.io", true },
{ "password.codes", true },
{ "passwords.google.com", true },
{ "pasta-factory.co.il", true },
{ "paste.linode.com", false },
{ "pastebin.linode.com", false },
{ "patt.us", true },
@ -869,6 +962,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "paymill.de", true },
{ "paypal.com", false },
{ "payroll.xero.com", false },
{ "pclob.gov", true },
{ "pdf.yt", true },
{ "peercraft.com", true },
{ "pentesterlab.com", true },
@ -891,10 +985,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "plothost.com", true },
{ "plus.google.com", false },
{ "plus.sandbox.google.com", false },
{ "plzenskybarcamp.cz", true },
{ "pmg-offshore-company.com", true },
{ "pmg-purchase.com", true },
{ "pmg-purchase.net", true },
{ "polymathematician.com", true },
{ "polypho.nyc", true },
{ "ponythread.com", true },
{ "portal.tirol.gv.at", true },
{ "posteo.de", false },
{ "powerplannerapp.com", true },
@ -909,6 +1006,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "propagandism.org", true },
{ "prowhisky.de", true },
{ "proximato.com", true },
{ "ptn.moscow", true },
{ "puac.de", true },
{ "pubkey.is", true },
{ "publications.qld.gov.au", false },
@ -924,6 +1022,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "quuz.org", true },
{ "r3s1stanc3.me", true },
{ "rad-route.de", true },
{ "radiormi.com", true },
{ "rafaelcz.de", true },
{ "ragingserenity.com", true },
{ "raiseyourflag.com", true },
@ -942,11 +1041,14 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "reishunger.de", true },
{ "release-monitoring.org", true },
{ "reliable-mail.de", true },
{ "renem.net", true },
{ "research.facebook.com", false },
{ "reserve-online.net", true },
{ "residentsinsurance.co.uk", true },
{ "reviews.anime.my", true },
{ "riccy.org", true },
{ "richiemail.net", true },
{ "ricochet.im", true },
{ "riesenmagnete.de", true },
{ "rika.me", true },
{ "rippleunion.com", true },
@ -956,28 +1058,38 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "rodosto.com", true },
{ "roland.io", true },
{ "romab.com", true },
{ "roman-pavlik.cz", true },
{ "romans-place.me.uk", true },
{ "romulusapp.com", false },
{ "room-checkin24.de", true },
{ "roots.io", true },
{ "rosenkeller.org", true },
{ "roundcube.mayfirst.org", false },
{ "royalacademy.org.uk", true },
{ "rpavlik.cz", true },
{ "rssr.se", true },
{ "ru-sprachstudio.ch", true },
{ "rubecodeberg.com", true },
{ "rubendv.be", true },
{ "rudloff.pro", true },
{ "ruudkoot.nl", true },
{ "rws-vertriebsportal.de", true },
{ "s-c.se", true },
{ "sabahattin-gucukoglu.com", true },
{ "sagerus.com", true },
{ "sageth.com", true },
{ "saintsrobotics.com", true },
{ "sakaki.anime.my", true },
{ "salaervergleich.com", true },
{ "sale4ru.ru", true },
{ "salserocafe.com", true },
{ "samba.org", true },
{ "samfunnet.no", true },
{ "samizdat.cz", true },
{ "samuelkeeley.com", true },
{ "sanatfilan.com", false },
{ "sandbox.mydigipass.com", false },
{ "saulchristie.com", true },
{ "save.gov", true },
{ "saveaward.gov", true },
{ "savvytime.com", true },
@ -993,7 +1105,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "scribe.systems", true },
{ "script.google.com", true },
{ "sdsl-speedtest.de", true },
{ "secretserveronline.com", true },
{ "secure.facebook.com", false },
{ "securedrop.org", true },
{ "securesuisse.ch", true },
{ "securify.nl", true },
{ "security-carpet.com", true },
@ -1016,6 +1130,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "shodan.io", true },
{ "shopontarget.com", true },
{ "shortdiary.me", true },
{ "sigterm.sh", true },
{ "sikayetvar.com", true },
{ "silentcircle.com", false },
{ "simbolo.co.uk", false },
{ "simple.com", false },
@ -1033,6 +1149,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "skydrive.live.com", false },
{ "slack.com", true },
{ "slattery.co", true },
{ "sleio.com", true },
{ "slevomat.cz", true },
{ "slidebatch.com", true },
{ "smartcleaningcenter.nl", true },
@ -1040,13 +1157,16 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "smartlend.se", true },
{ "smartship.co.jp", true },
{ "snakehosting.dk", true },
{ "snowflake.ch", false },
{ "sockeye.cc", true },
{ "sorz.org", true },
{ "souki.cz", true },
{ "soulogic.com", true },
{ "sour.is", true },
{ "southside-crew.com", true },
{ "souvik.me", true },
{ "spawn.cz", true },
{ "speedcounter.net", true },
{ "spencerbaer.com", true },
{ "spideroak.com", true },
{ "spongepowered.org", true },
@ -1066,7 +1186,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "static.wepay.com", false },
{ "staticanime.net", false },
{ "stationary-traveller.eu", true },
{ "stesti.cz", true },
{ "stevegrav.es", true },
{ "steventress.com", true },
{ "stillyarts.com", true },
{ "stocktrade.de", false },
{ "strasweb.fr", false },
{ "stretchmyan.us", true },
@ -1083,6 +1206,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "support.mayfirst.org", false },
{ "surkatty.org", true },
{ "survivalmonkey.com", true },
{ "svager.cz", true },
{ "swehack.org", false },
{ "sychov.pro", true },
{ "sylaps.com", true },
@ -1091,6 +1215,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "syss.de", true },
{ "tadigitalstore.com", true },
{ "tageau.com", true },
{ "taglondon.org", true },
{ "talk.google.com", true },
{ "talkgadget.google.com", true },
{ "tallshoe.com", true },
@ -1101,8 +1226,12 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tatort-fanpage.de", true },
{ "tauchkater.de", true },
{ "tbspace.de", true },
{ "tdrs.info", true },
{ "teachforcanada.ca", true },
{ "teamnorthgermany.de", true },
{ "techhipster.net", true },
{ "techllage.com", true },
{ "techloaner.com", true },
{ "tegelsensanitaironline.nl", true },
{ "tekshrek.com", true },
{ "tent.io", true },
@ -1112,10 +1241,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "texte-zur-taufe.de", true },
{ "thebimhub.com", true },
{ "thecustomizewindows.com", true },
{ "theescapistswiki.com", true },
{ "themoep.at", true },
{ "thepaymentscompany.com", true },
{ "therapynotes.com", true },
{ "therapyportal.com", true },
{ "theshadestore.com", true },
{ "thetomharling.com", true },
{ "thomastimepieces.com.au", true },
{ "thorncreek.net", false },
{ "thusoy.com", true },
@ -1127,7 +1259,9 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "tinte24.de", true },
{ "tintenfix.net", true },
{ "tipps-fuer-den-haushalt.de", true },
{ "tirex.media", true },
{ "tittelbach.at", true },
{ "titties.ml", true },
{ "tls.li", true },
{ "tmtopup.com", true },
{ "tno.io", true },
@ -1135,6 +1269,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "todesschaf.org", true },
{ "tollmanz.com", true },
{ "tomfisher.eu", true },
{ "tomharling.co.uk", true },
{ "tomharling.uk", true },
{ "tomvote.com", true },
{ "toner24.at", true },
{ "toner24.co.uk", true },
@ -1160,15 +1296,19 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "toshnix.com", true },
{ "touch.facebook.com", false },
{ "touch.mail.ru", true },
{ "tox.im", true },
{ "traas.org", true },
{ "tracktivity.com.au", true },
{ "translate.fedoraproject.org", true },
{ "translate.googleapis.com", true },
{ "translate.stg.fedoraproject.org", true },
{ "trashnothing.com", true },
{ "trauertexte.info", true },
{ "tresorit.com", true },
{ "tribut.de", true },
{ "tucuxi.org", true },
{ "tunebitfm.de", true },
{ "tuturulianda.com", true },
{ "twentymilliseconds.com", true },
{ "twisto.cz", true },
{ "twitter.com", false },
@ -1177,16 +1317,21 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "uae-company-service.com", true },
{ "ub3rk1tten.com", true },
{ "ubertt.org", true },
{ "ucfirst.nl", true },
{ "ukdefencejournal.org.uk", true },
{ "ukhas.net", true },
{ "ukrainians.ch", true },
{ "unison.com", true },
{ "unitedadmins.com", true },
{ "unknownphenomena.net", true },
{ "unterfrankenclan.de", true },
{ "uonstaffhub.com", true },
{ "upload.facebook.com", false },
{ "uptrends.com", true },
{ "uptrends.de", true },
{ "usaa.com", false },
{ "uspsoig.gov", true },
{ "utilityapi.com", true },
{ "utleieplassen.no", true },
{ "vaddder.com", true },
{ "vhost.co.id", true },
@ -1204,6 +1349,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "warrencreative.com", false },
{ "watsonhall.uk", true },
{ "wbg-vs.de", true },
{ "wearvr.com", true },
{ "webandmore.de", false },
{ "webandwords.com.au", true },
{ "webassadors.com", false },
@ -1223,8 +1369,10 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "webtrh.cz", true },
{ "weggeweest.nl", true },
{ "welches-kinderfahrrad.de", true },
{ "welpy.com", true },
{ "wepay.com", false },
{ "wepay.in.th", true },
{ "wesleyharris.ca", true },
{ "wevahoo.com", true },
{ "wf-bigsky-master.appspot.com", true },
{ "wf-demo-eu.appspot.com", true },
@ -1275,7 +1423,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
{ "www.gmail.com", false },
{ "www.googlemail.com", false },
{ "www.gov.uk", false },
{ "www.grc.com", true },
{ "www.grc.com", false },
{ "www.heliosnet.com", true },
{ "www.honeybadger.io", false },
{ "www.intercom.io", false },

View File

@ -1,9 +1,122 @@
FROM quay.io/mozilla/ubuntu:12.04
MAINTAINER Jonas Finnemann Jensen <jopsen@gmail.com>
# Run system setup script
ADD system-setup.sh /tmp/system-setup.sh
RUN ["/tmp/system-setup.sh"]
COPY sources.list /etc/apt/sources.list
RUN useradd -d /home/worker -s /bin/bash -m worker
RUN apt-get update && apt-get install -y --force-yes \
alsa-base \
alsa-utils \
autoconf2.13 \
bluez-alsa \
bluez-alsa:i386 \
bluez-cups \
bluez-gstreamer \
build-essential \
ca-certificates \
ccache \
curl \
fonts-kacst \
fonts-kacst-one \
fonts-liberation \
fonts-stix \
fonts-unfonts-core \
fonts-unfonts-extra \
fonts-vlgothic \
g++-multilib \
gcc-multilib \
gir1.2-gnomebluetooth-1.0 \
git \
gstreamer0.10-alsa \
gstreamer0.10-ffmpeg \
gstreamer0.10-plugins-bad \
gstreamer0.10-plugins-base \
gstreamer0.10-plugins-good \
gstreamer0.10-plugins-ugly \
gstreamer0.10-tools \
libasound2-dev \
libasound2-plugins:i386 \
libcanberra-pulse \
libcurl4-openssl-dev \
libdbus-1-dev \
libdbus-glib-1-dev \
libdrm-intel1:i386 \
libdrm-nouveau1a:i386 \
libdrm-radeon1:i386 \
libdrm2:i386 \
libexpat1:i386 \
libgconf2-dev \
libgl1-mesa-dri \
libgl1-mesa-dri:i386 \
libgl1-mesa-glx \
libgl1-mesa-glx:i386 \
libglapi-mesa \
libglapi-mesa:i386 \
libglu1-mesa \
libglu1-mesa:i386 \
libgnome-bluetooth8 \
libgstreamer-plugins-base0.10-dev \
libgstreamer0.10-dev \
libgtk2.0-dev \
libiw-dev \
libllvm2.9 \
libllvm3.0:i386 \
libncurses5:i386 \
libnotify-dev \
libpulse-dev \
libpulse-mainloop-glib0:i386 \
libpulsedsp:i386 \
libsdl1.2debian:i386 \
libsox-fmt-alsa \
libx11-xcb1:i386 \
libxcb-glx0 \
libxcb-glx0:i386 \
libxdamage1:i386 \
libxfixes3:i386 \
libxt-dev \
libxxf86vm1 \
libxxf86vm1:i386 \
llvm \
llvm-2.9 \
llvm-2.9-dev \
llvm-2.9-runtime \
llvm-dev \
llvm-runtime \
mercurial \
mesa-common-dev \
nano \
pulseaudio \
pulseaudio-module-X11 \
pulseaudio-module-bluetooth \
pulseaudio-module-gconf \
python-dev \
python-pip \
rlwrap \
screen \
software-properties-common \
sudo \
tar \
ttf-arphic-uming \
ttf-dejavu \
ttf-indic-fonts-core \
ttf-kannada-fonts \
ttf-oriya-fonts \
ttf-paktype \
ttf-punjabi-fonts \
ttf-sazanami-mincho \
unzip \
uuid \
vim \
wget \
xvfb \
yasm \
zip
ENV NODE_VERSION v0.10.36
RUN cd /usr/local/ && \
curl https://nodejs.org/dist/$NODE_VERSION/node-$NODE_VERSION-linux-x64.tar.gz | tar -xz --strip-components 1 && \
node -v
# Set variable normally configured at login, by the shells parent process, these
# are taken from GNU su manual
@ -14,6 +127,6 @@ ENV LOGNAME worker
# Declare default working folder
WORKDIR /home/worker
# Set a default command useful for debugging
CMD ["/bin/bash", "--login"]

View File

@ -1 +1 @@
0.0.1
0.0.5

View File

@ -1,149 +0,0 @@
#!/bin/bash -ve
################################### setup.sh ###################################
### Check that we are running as root
test `whoami` == 'root';
### Add worker user
# Minimize the number of things which the build script can do, security-wise
# it's not a problem to let the build script install things with apt-get. But it
# really shouldn't do this, so let's forbid root access.
useradd -d /home/worker -s /bin/bash -m worker;
### Install Useful Packages
# First we update and upgrade to latest versions.
apt-get update;
apt-get upgrade -y;
# Let's install some goodies, ca-certificates is needed for https with hg.
# sudo will be required anyway, but let's make it explicit. It nice to have
# sudo around. We'll also install nano, this is pure bloat I know, but it's
# useful a text editor.
apt-get install -y \
ca-certificates \
sudo \
nano \
tar \
;
# Then let's install all firefox build dependencies, this are extracted from
# mozboot. See python/mozboot/bin/bootstrap.py in mozilla-central.
apt-get install -y \
autoconf2.13 \
build-essential \
ccache \
libasound2-dev \
libcurl4-openssl-dev \
libdbus-1-dev \
libdbus-glib-1-dev \
libgconf2-dev \
libgstreamer0.10-dev \
libgstreamer-plugins-base0.10-dev \
libgtk2.0-dev \
libiw-dev \
libnotify-dev \
libpulse-dev \
libxt-dev \
mercurial \
git \
mesa-common-dev \
python-dev \
unzip \
uuid \
yasm \
xvfb \
zip \
software-properties-common \
;
### Firefox Test Setup
apt-get install -y \
alsa-base \
alsa-utils \
bluez-alsa \
bluez-alsa:i386 \
bluez-cups \
bluez-gstreamer \
g++-multilib \
gcc-multilib \
gir1.2-gnomebluetooth-1.0 \
gstreamer0.10-alsa \
libasound2-plugins:i386 \
libcanberra-pulse \
libdrm-intel1:i386 \
libdrm-nouveau1a:i386 \
libdrm-radeon1:i386 \
libdrm2:i386 \
libexpat1:i386 \
libgnome-bluetooth8 \
libllvm2.9 \
libllvm3.0:i386 \
libncurses5:i386 \
libpulse-mainloop-glib0:i386 \
libpulsedsp:i386 \
libsdl1.2debian:i386 \
libsox-fmt-alsa \
libx11-xcb1:i386 \
libxcb-glx0:i386 \
libxcb-glx0 \
libxdamage1:i386 \
libxfixes3:i386 \
libxxf86vm1:i386 \
libxxf86vm1 \
llvm \
llvm-2.9 \
llvm-2.9-dev \
llvm-2.9-runtime \
llvm-dev \
llvm-runtime \
pulseaudio-module-bluetooth \
pulseaudio-module-gconf \
pulseaudio-module-X11 \
pulseaudio \
python-pip
# Install some utilities
curl -sL https://deb.nodesource.com/setup | sudo bash -
apt-get install -y \
screen \
vim \
wget \
curl \
rlwrap \
nodejs \
;
# Mozilla-patched mesa libs required for many reftests -- see bug 975034
wget http://puppetagain.pub.build.mozilla.org/data/repos/apt/releng/pool/main/m/mesa/libgl1-mesa-dri_8.0.4-0ubuntu0.6mozilla1_i386.deb
wget http://puppetagain.pub.build.mozilla.org/data/repos/apt/releng/pool/main/m/mesa/libgl1-mesa-dri_8.0.4-0ubuntu0.6mozilla1_amd64.deb
wget http://puppetagain.pub.build.mozilla.org/data/repos/apt/releng/pool/main/m/mesa/libgl1-mesa-glx_8.0.4-0ubuntu0.6mozilla1_i386.deb
wget http://puppetagain.pub.build.mozilla.org/data/repos/apt/releng/pool/main/m/mesa/libgl1-mesa-glx_8.0.4-0ubuntu0.6mozilla1_amd64.deb
wget http://puppetagain.pub.build.mozilla.org/data/repos/apt/releng/pool/main/m/mesa/libglapi-mesa_8.0.4-0ubuntu0.6mozilla1_i386.deb
wget http://puppetagain.pub.build.mozilla.org/data/repos/apt/releng/pool/main/m/mesa/libglapi-mesa_8.0.4-0ubuntu0.6mozilla1_amd64.deb
wget http://puppetagain.pub.build.mozilla.org/data/repos/apt/releng/pool/main/m/mesa/libglu1-mesa_8.0.4-0ubuntu0.6mozilla1_i386.deb
wget http://puppetagain.pub.build.mozilla.org/data/repos/apt/releng/pool/main/m/mesa/libglu1-mesa_8.0.4-0ubuntu0.6mozilla1_amd64.deb
dpkg -i libgl1-mesa-dri_8.0.4-0ubuntu0.6mozilla1_amd64.deb
dpkg -i libgl1-mesa-dri_8.0.4-0ubuntu0.6mozilla1_i386.deb
dpkg -i libglapi-mesa_8.0.4-0ubuntu0.6mozilla1_amd64.deb
dpkg -i libglapi-mesa_8.0.4-0ubuntu0.6mozilla1_i386.deb
dpkg -i libgl1-mesa-glx_8.0.4-0ubuntu0.6mozilla1_i386.deb
dpkg -i libgl1-mesa-glx_8.0.4-0ubuntu0.6mozilla1_amd64.deb
dpkg -i libglu1-mesa_8.0.4-0ubuntu0.6mozilla1_i386.deb
dpkg -i libglu1-mesa_8.0.4-0ubuntu0.6mozilla1_amd64.deb
# Install releng package of nodejs that includes npm
#wget http://puppetagain.pub.build.mozilla.org/data/repos/apt/releng/precise/pool/main/n/nodejs/nodejs_0.10.21-1chl1~precise1_amd64.deb
#dpkg -i nodejs_0.10.21-1chl1~precise1_amd64.deb
### Clean up from setup
# Remove cached .deb packages. Cached package takes up a lot of space and
# distributing them to workers is wasteful.
apt-get clean
rm *.deb
# Remove the setup.sh setup, we don't really need this script anymore, deleting
# it keeps the image as clean as possible.
rm $0; echo "Deleted $0";
################################### setup.sh ###################################

View File

@ -1,4 +1,4 @@
FROM quay.io/mozilla/base-test:0.0.1
FROM quay.io/mozilla/base-test:0.0.5
MAINTAINER Jonas Finnemann Jensen <jopsen@gmail.com>
# Add utilities and configuration
@ -13,7 +13,7 @@ ADD https://raw.githubusercontent.com/taskcluster/buildbot-step/maste
# Run test setup script
RUN chmod u+x /home/worker/bin/buildbot_step
RUN pip install virtualenv;
RUN apt-get install -y python-pip && pip install virtualenv;
RUN mkdir Documents; mkdir Pictures; mkdir Music; mkdir Videos; mkdir artifacts
RUN chown -R worker:worker /home/worker/* /home/worker/.*
RUN npm install -g taskcluster-vcs@2.3.1

View File

@ -1 +1 @@
0.0.15
0.2.5

View File

@ -10,6 +10,7 @@ test $MOZHARNESS_REV # mozharness revision
# XXX: Note that all tests could be faster at smaller bit depth
Xvfb :0 -nolisten tcp -screen 0 1600x1200x24 2>/dev/null &
export DISPLAY=:0
# First check if the mozharness directory is available. This is intended to be

View File

@ -336,15 +336,20 @@ class Graph(object):
test_parameters = copy.copy(build_parameters)
test_parameters['build_url'] = build_url
test_parameters['tests_url'] = tests_url
test_parameters['total_chunks'] = 1
test_definition = templates.load(test['task'], {})['task']
chunk_config = test_definition['extra']['chunks']
# Allow branch configs to override task level chunking...
if 'chunks' in test:
test_parameters['total_chunks'] = test['chunks']
chunk_config['total'] = test['chunks']
for chunk in range(1, test_parameters['total_chunks'] + 1):
test_parameters['total_chunks'] = chunk_config['total']
for chunk in range(1, chunk_config['total'] + 1):
if 'only_chunks' in test and \
chunk not in test['only_chunks']:
continue;
continue
test_parameters['chunk'] = chunk
test_task = templates.load(test['task'], test_parameters)

View File

@ -6,6 +6,7 @@ flags:
- emulator
- emulator-jb
- emulator-kk
- emulator-l
- linux32_gecko # b2g desktop linux 32 bit
- linux64_gecko # b2g desktop linux 64 bit
- linux64-mulet # Firefox desktop - b2g gecko linux 64 bit

View File

@ -56,7 +56,6 @@ tests:
allowed_build_tasks:
tasks/builds/b2g_emulator_ics_opt.yml:
task: tasks/tests/b2g_emulator_crashtest.yml
chunks: 3
gaia-build:
allowed_build_tasks:
tasks/builds/b2g_desktop_opt.yml:
@ -69,7 +68,6 @@ tests:
allowed_build_tasks:
tasks/builds/b2g_desktop_opt.yml:
task: tasks/tests/b2g_gaia_js_integration_tests.yml
chunks: 4
gaia-linter:
allowed_build_tasks:
tasks/builds/b2g_desktop_opt.yml:
@ -84,10 +82,8 @@ tests:
allowed_build_tasks:
tasks/builds/b2g_desktop_opt.yml:
task: tasks/tests/b2g_gaia_ui_test_functional.yml
chunks: 3
tasks/builds/b2g_desktop_debug.yml:
task: tasks/tests/b2g_gaia_ui_test_functional.yml
chunks: 3
gaia-ui-test-unit:
allowed_build_tasks:
tasks/builds/b2g_desktop_opt.yml:
@ -110,32 +106,25 @@ tests:
allowed_build_tasks:
tasks/builds/b2g_emulator_ics_opt.yml:
task: tasks/tests/b2g_emulator_mochitest.yml
chunks: 9
tasks/builds/b2g_emulator_ics_debug.yml:
task: tasks/tests/b2g_emulator_mochitest.yml
chunks: 20
tasks/builds/mulet_linux.yml:
task: tasks/tests/mulet_mochitests.yml
chunks: 5
mochitest-oop:
allowed_build_tasks:
tasks/builds/b2g_desktop_opt.yml:
task: tasks/tests/b2g_mochitest_oop.yml
chunks: 1
reftest:
allowed_build_tasks:
tasks/builds/b2g_emulator_ics_opt.yml:
task: tasks/tests/b2g_emulator_reftest.yml
chunks: 20
reftest-sanity-oop:
allowed_build_tasks:
tasks/builds/b2g_desktop_opt.yml:
task: tasks/tests/b2g_reftests_sanity_oop.yml
chunks: 1
xpcshell:
allowed_build_tasks:
tasks/builds/b2g_emulator_ics_opt.yml:
task: tasks/tests/b2g_emulator_xpcshell.yml
task: tasks/tests/b2g_emulator_xpcshell_chunked.yml
tasks/builds/b2g_emulator_ics_debug.yml:
task: tasks/tests/b2g_emulator_xpcshell_chunked.yml
chunks: 2

View File

@ -20,6 +20,14 @@ builds:
types:
opt:
task: tasks/builds/mulet_linux.yml
emulator-l:
platfoms:
- b2g
types:
opt:
task: tasks/builds/b2g_emulator_l_opt.yml
debug:
task: tasks/builds/b2g_emulator_l_debug.yml
emulator-kk:
platfoms:
- b2g
@ -68,7 +76,6 @@ tests:
allowed_build_tasks:
tasks/builds/b2g_emulator_ics_opt.yml:
task: tasks/tests/b2g_emulator_crashtest.yml
chunks: 3
gaia-build:
allowed_build_tasks:
tasks/builds/b2g_desktop_opt.yml:
@ -81,10 +88,8 @@ tests:
allowed_build_tasks:
tasks/builds/b2g_desktop_opt.yml:
task: tasks/tests/b2g_gaia_js_integration_tests.yml
chunks: 10
tasks/builds/mulet_linux.yml:
task: tasks/tests/mulet_gaia_js_integration_tests.yml
chunks: 10
gaia-linter:
allowed_build_tasks:
tasks/builds/b2g_desktop_opt.yml:
@ -99,10 +104,8 @@ tests:
allowed_build_tasks:
tasks/builds/b2g_desktop_opt.yml:
task: tasks/tests/b2g_gaia_ui_test_functional.yml
chunks: 3
tasks/builds/b2g_desktop_debug.yml:
task: tasks/tests/b2g_gaia_ui_test_functional.yml
chunks: 3
gaia-ui-test-unit:
allowed_build_tasks:
tasks/builds/b2g_desktop_opt.yml:
@ -129,46 +132,35 @@ tests:
allowed_build_tasks:
tasks/builds/b2g_emulator_kk_debug.yml:
task: tasks/tests/b2g_emulator_mochitest.yml
chunks: 20
tasks/builds/b2g_emulator_kk_opt.yml:
task: tasks/tests/b2g_emulator_mochitest.yml
chunks: 20
tasks/builds/b2g_emulator_ics_opt.yml:
task: tasks/tests/b2g_emulator_mochitest.yml
chunks: 9
tasks/builds/b2g_emulator_ics_debug.yml:
task: tasks/tests/b2g_emulator_mochitest.yml
chunks: 20
tasks/builds/mulet_linux.yml:
task: tasks/tests/mulet_mochitests.yml
chunks: 5
mochitest-oop:
allowed_build_tasks:
tasks/builds/b2g_desktop_opt.yml:
task: tasks/tests/b2g_mochitest_oop.yml
chunks: 1
reftest:
allowed_build_tasks:
tasks/builds/mulet_linux.yml:
task: tasks/tests/mulet_reftests.yml
chunks: 6
tasks/builds/b2g_emulator_kk_opt.yml:
task: tasks/tests/b2g_emulator_reftest.yml
chunks: 20
tasks/builds/b2g_emulator_ics_opt.yml:
task: tasks/tests/b2g_emulator_reftest.yml
chunks: 20
reftest-sanity-oop:
allowed_build_tasks:
tasks/builds/b2g_desktop_opt.yml:
task: tasks/tests/b2g_reftests_sanity_oop.yml
chunks: 1
xpcshell:
allowed_build_tasks:
tasks/builds/b2g_emulator_kk_opt.yml:
task: tasks/tests/b2g_emulator_xpcshell.yml
task: tasks/tests/b2g_emulator_xpcshell_chunked.yml
tasks/builds/b2g_emulator_ics_opt.yml:
task: tasks/tests/b2g_emulator_xpcshell.yml
task: tasks/tests/b2g_emulator_xpcshell_chunked.yml
tasks/builds/b2g_emulator_ics_debug.yml:
task: tasks/tests/b2g_emulator_xpcshell_chunked.yml
chunks: 2

View File

@ -5,10 +5,12 @@ task:
scopes:
- 'docker-worker:cache:workspace-emulator-jb-debug'
metadata:
name: '[TC] B2G Emulator JB Debug'
name: '[TC] B2G Emulator JB: (Debug)'
extra:
# Disable "TC" prefix...
treeherder:
groupSymbol: "?"
collection:
debug: true
machine:

View File

@ -5,10 +5,15 @@ task:
scopes:
- 'docker-worker:cache:workspace-emulator-jb-opt'
metadata:
name: '[TC] B2G JB Emulator Opt'
name: '[TC] B2G JB Emulator: (Opt)'
extra:
treeherderEnv:
- production
- staging
# Disable "TC" prefix...
treeherder:
groupSymbol: "?"
machine:
platform: b2g-emu-jb

View File

@ -5,10 +5,15 @@ task:
scopes:
- 'docker-worker:cache:workspace-emulator-kk-debug'
metadata:
name: '[TC] B2G Emulator KK Debug'
name: '[TC] B2G Emulator KK (Debug)'
extra:
treeherderEnv:
- production
- staging
treeherder:
# Disable "TC" prefix...
groupSymbol: "?"
collection:
debug: true
machine:

View File

@ -5,10 +5,15 @@ task:
scopes:
- 'docker-worker:cache:workspace-emulator-kk-opt'
metadata:
name: '[TC] B2G KK Emulator Opt'
name: '[TC] B2G KK Emulator (Opt)'
extra:
treeherderEnv:
- production
- staging
treeherder:
# Disable "TC" prefix...
groupSymbol: "?"
machine:
platform: b2g-emu-kk

View File

@ -0,0 +1,23 @@
$inherits:
from: 'tasks/builds/b2g_emulator_base.yml'
task:
workerType: emulator-l-debug
scopes:
- 'docker-worker:cache:workspace-emulator-l-debug'
metadata:
name: '[TC] B2G Emulator L Debug'
extra:
treeherder:
collection:
debug: true
machine:
platform: b2g-emu-l
payload:
cache:
workspace-emulator-l-debug: /home/worker/workspace
env:
TARGET: 'emulator-l'
B2G_DEBUG: 1

View File

@ -0,0 +1,21 @@
$inherits:
from: 'tasks/builds/b2g_emulator_base.yml'
task:
workerType: emulator-l
scopes:
- 'docker-worker:cache:workspace-emulator-l-opt'
metadata:
name: '[TC] B2G L Emulator Opt'
extra:
treeherder:
machine:
platform: b2g-emu-l
payload:
cache:
workspace-emulator-l-opt: /home/worker/workspace
env:
TARGET: 'emulator-l'

View File

@ -16,6 +16,8 @@ tasks:
- taskId: '{{#as_slugid}}decision task{{/as_slugid}}'
reruns: 3
task:
routes:
- tc-treeherder-stage.{{project}}.{{revision_hash}}
created: '{{now}}'
deadline: '{{#from_now}}1 day{{/from_now}}'
metadata:

View File

@ -42,6 +42,9 @@ task:
expires: '{{#from_now}}1 year{{/from_now}}'
extra:
chunks:
total: 1
current: {{chunk}}
treeherder:
groupSymbol: tc
groupName: Submitted by taskcluster

View File

@ -6,6 +6,7 @@ task:
name: '[TC] CPP Unit Tests'
description: CPP Unit Tests test run
workerType: b2gtest-emulator
payload:
command:
- entrypoint

View File

@ -6,6 +6,7 @@ task:
name: '[TC] Crashtest'
description: Crashtest test run {{chunk}}
workerType: b2gtest-emulator
payload:
maxRunTime: 3600
command:
@ -28,6 +29,9 @@ task:
expires: '{{#from_now}}1 year{{/from_now}}'
extra:
chunks:
total: 5
treeherder:
groupName: Reftest
groupSymbol: tc-R

View File

@ -6,6 +6,7 @@ task:
name: '[TC] JSReftest'
description: JSReftest test run {{chunk}}
workerType: b2gtest-emulator
payload:
command:
- entrypoint

View File

@ -6,6 +6,7 @@ task:
name: '[TC] Marionette Framework Unit Tests'
description: Marionette Framework Unit Tests test run
workerType: b2gtest-emulator
payload:
command:
- entrypoint

View File

@ -6,6 +6,7 @@ task:
name: '[TC] Marionette WebAPI Tests'
description: Marionette WebAPI test run
workerType: b2gtest-emulator
payload:
command:
- entrypoint

View File

@ -6,6 +6,7 @@ task:
name: '[TC] Mochitest'
description: Mochitest test run {{chunk}}
workerType: b2gtest-emulator
payload:
maxRunTime: 7200
command:
@ -29,6 +30,8 @@ task:
expires: '{{#from_now}}1 year{{/from_now}}'
extra:
chunks:
total: 50
treeherder:
groupName: Mochitest
groupSymbol: tc-M

View File

@ -6,6 +6,7 @@ task:
name: '[TC] Mochitest'
description: Mochitest Media test run
workerType: b2gtest-emulator
payload:
command:
- entrypoint

View File

@ -6,6 +6,7 @@ task:
name: '[TC] Reftest'
description: Reftest test run {{chunk}}
workerType: b2gtest-emulator
payload:
command:
- entrypoint
@ -27,6 +28,8 @@ task:
expires: '{{#from_now}}1 year{{/from_now}}'
extra:
chunks:
total: 40
treeherder:
groupName: Reftest
groupSymbol: tc-R

View File

@ -6,6 +6,7 @@ task:
name: '[TC] XPCShell'
description: XPCShell test run
workerType: b2gtest-emulator
payload:
maxRunTime: 6000
command:

Some files were not shown because too many files have changed in this diff Show More