mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-02 10:00:54 +00:00
Merge m-c to inbound on a CLOSED TREE. a=me
This commit is contained in:
commit
56e2c15baf
@ -21,6 +21,5 @@
|
||||
}
|
||||
},
|
||||
"b2g_manifest": "emulator.xml",
|
||||
"b2g_manifest_branch": "master",
|
||||
"b2g_manifest_intree": true
|
||||
}
|
||||
|
@ -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="3f3963fe6e165c0a7afc6222e1137d0862c70b30"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="2e5636e852a9354a5f8072b179cf16f72647cfd6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="531cf670e485649c69746e46d567929fcd54cbc5"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="8e4420c0c5c8e8c8e58a000278a7129403769f96"/>
|
||||
<project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="a819a94a572c7b32556435491ed8eaab841a95ff"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="6a68dde81fcbe3c6bbd45bafdeb94c3f269bdc20"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="cabebb87fcd32f8596af08e6b5e80764ee0157dd"/>
|
||||
<!-- Stock Android things -->
|
||||
<project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
|
||||
<project name="platform/bionic" path="bionic" revision="c72b8f6359de7ed17c11ddc9dfdde3f615d188a9"/>
|
||||
|
@ -28,6 +28,5 @@
|
||||
}
|
||||
},
|
||||
"b2g_manifest": "emulator-jb.xml",
|
||||
"b2g_manifest_branch": "master",
|
||||
"b2g_manifest_intree": true
|
||||
}
|
||||
|
@ -17,10 +17,10 @@
|
||||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="3f3963fe6e165c0a7afc6222e1137d0862c70b30"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="2e5636e852a9354a5f8072b179cf16f72647cfd6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="531cf670e485649c69746e46d567929fcd54cbc5"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="6a68dde81fcbe3c6bbd45bafdeb94c3f269bdc20"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="cabebb87fcd32f8596af08e6b5e80764ee0157dd"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
<!-- Stock Android things -->
|
||||
|
@ -28,6 +28,5 @@
|
||||
}
|
||||
},
|
||||
"b2g_manifest": "emulator-kk.xml",
|
||||
"b2g_manifest_branch": "master",
|
||||
"b2g_manifest_intree": true
|
||||
}
|
||||
|
@ -15,7 +15,7 @@
|
||||
<project name="platform_build" path="build" remote="b2g" revision="276ce45e78b09c4a4ee643646f691d22804754c1">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="3f3963fe6e165c0a7afc6222e1137d0862c70b30"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="2e5636e852a9354a5f8072b179cf16f72647cfd6"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="531cf670e485649c69746e46d567929fcd54cbc5"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
|
||||
@ -23,7 +23,7 @@
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<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="6a68dde81fcbe3c6bbd45bafdeb94c3f269bdc20"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="cabebb87fcd32f8596af08e6b5e80764ee0157dd"/>
|
||||
<!-- 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"/>
|
||||
|
@ -27,6 +27,5 @@
|
||||
}
|
||||
},
|
||||
"b2g_manifest": "emulator.xml",
|
||||
"b2g_manifest_branch": "master",
|
||||
"b2g_manifest_intree": true
|
||||
}
|
||||
|
@ -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="3f3963fe6e165c0a7afc6222e1137d0862c70b30"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="2e5636e852a9354a5f8072b179cf16f72647cfd6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="531cf670e485649c69746e46d567929fcd54cbc5"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="8e4420c0c5c8e8c8e58a000278a7129403769f96"/>
|
||||
<project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="a819a94a572c7b32556435491ed8eaab841a95ff"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="6a68dde81fcbe3c6bbd45bafdeb94c3f269bdc20"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="cabebb87fcd32f8596af08e6b5e80764ee0157dd"/>
|
||||
<!-- Stock Android things -->
|
||||
<project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
|
||||
<project name="platform/bionic" path="bionic" revision="c72b8f6359de7ed17c11ddc9dfdde3f615d188a9"/>
|
||||
|
@ -31,7 +31,6 @@
|
||||
"B2G_UPDATE_CHANNEL": "nightly"
|
||||
},
|
||||
"b2g_manifest": "flame.xml",
|
||||
"b2g_manifest_branch": "master",
|
||||
"b2g_manifest_intree": true,
|
||||
"additional_source_tarballs": ["backup-flame.tar.xz"],
|
||||
"gecko_l10n_root": "https://hg.mozilla.org/l10n-central",
|
||||
|
@ -17,10 +17,10 @@
|
||||
</project>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="3f3963fe6e165c0a7afc6222e1137d0862c70b30"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="2e5636e852a9354a5f8072b179cf16f72647cfd6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="531cf670e485649c69746e46d567929fcd54cbc5"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="6a68dde81fcbe3c6bbd45bafdeb94c3f269bdc20"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="cabebb87fcd32f8596af08e6b5e80764ee0157dd"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
<!-- Stock Android things -->
|
||||
@ -118,7 +118,7 @@
|
||||
<!-- Flame specific things -->
|
||||
<project name="device/generic/armv7-a-neon" path="device/generic/armv7-a-neon" revision="e8a318f7690092e639ba88891606f4183e846d3f"/>
|
||||
<project name="device/qcom/common" path="device/qcom/common" revision="34ed8345250bb97262d70a052217a92e83444ede"/>
|
||||
<project name="device-flame" path="device/t2m/flame" remote="b2g" revision="95423152b66d4a41032414fc3fb8c3d9a0636c7d"/>
|
||||
<project name="device-flame" path="device/t2m/flame" remote="b2g" revision="ad1229307124c8c8b9a3579dd35dc24ff567c6d8"/>
|
||||
<project name="kernel/msm" path="kernel" revision="ccfff630163ca9a0530701fa93b501c34042d06c"/>
|
||||
<project name="platform/bootable/recovery" path="bootable/recovery" revision="f2914eacee9120680a41463708bb6ee8291749fc"/>
|
||||
<project name="platform/external/bluetooth/bluedroid" path="external/bluetooth/bluedroid" revision="81c4a859d75d413ad688067829d21b7ba9205f81"/>
|
||||
|
@ -4,6 +4,6 @@
|
||||
"remote": "",
|
||||
"branch": ""
|
||||
},
|
||||
"revision": "99abcedfe288d6d29352b2add96b5ace90543985",
|
||||
"revision": "0a26eafbba1c1cf459dae8b1c44b3c8b6d08f112",
|
||||
"repo_path": "/integration/gaia-central"
|
||||
}
|
||||
|
@ -22,7 +22,6 @@
|
||||
"MOZ_TELEMETRY_REPORTING": "1"
|
||||
},
|
||||
"b2g_manifest": "hamachi.xml",
|
||||
"b2g_manifest_branch": "master",
|
||||
"b2g_manifest_intree": true,
|
||||
"additional_source_tarballs": ["backup-hamachi.tar.xz"],
|
||||
"gecko_l10n_root": "https://hg.mozilla.org/l10n-central",
|
||||
|
@ -17,12 +17,12 @@
|
||||
<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="3f3963fe6e165c0a7afc6222e1137d0862c70b30"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="2e5636e852a9354a5f8072b179cf16f72647cfd6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="531cf670e485649c69746e46d567929fcd54cbc5"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="6a68dde81fcbe3c6bbd45bafdeb94c3f269bdc20"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="cabebb87fcd32f8596af08e6b5e80764ee0157dd"/>
|
||||
<!-- Stock Android things -->
|
||||
<project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
|
||||
<project name="platform/bionic" path="bionic" revision="d2eb6c7b6e1bc7643c17df2d9d9bcb1704d0b9ab"/>
|
||||
|
@ -30,7 +30,6 @@
|
||||
"ANDROIDFS_DIR": "{workdir}/helix-ics"
|
||||
},
|
||||
"b2g_manifest": "helix.xml",
|
||||
"b2g_manifest_branch": "master",
|
||||
"b2g_manifest_intree": true,
|
||||
"additional_source_tarballs": ["helix-ics.tar.xz"],
|
||||
"gecko_l10n_root": "https://hg.mozilla.org/l10n-central",
|
||||
|
@ -15,7 +15,7 @@
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="3f3963fe6e165c0a7afc6222e1137d0862c70b30"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="2e5636e852a9354a5f8072b179cf16f72647cfd6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="531cf670e485649c69746e46d567929fcd54cbc5"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
|
||||
|
@ -29,7 +29,6 @@
|
||||
"MOZ_TELEMETRY_REPORTING": "1"
|
||||
},
|
||||
"b2g_manifest": "inari.xml",
|
||||
"b2g_manifest_branch": "master",
|
||||
"b2g_manifest_intree": true,
|
||||
"additional_source_tarballs": ["backup-inari.tar.xz"],
|
||||
"gecko_l10n_root": "https://hg.mozilla.org/l10n-central",
|
||||
|
@ -30,7 +30,6 @@
|
||||
"MOZ_TELEMETRY_REPORTING": "1"
|
||||
},
|
||||
"b2g_manifest": "leo.xml",
|
||||
"b2g_manifest_branch": "master",
|
||||
"b2g_manifest_intree": true,
|
||||
"additional_source_tarballs": ["backup-leo.tar.xz"],
|
||||
"gecko_l10n_root": "https://hg.mozilla.org/l10n-central",
|
||||
|
@ -29,7 +29,6 @@
|
||||
"MOZ_TELEMETRY_REPORTING": "1"
|
||||
},
|
||||
"b2g_manifest": "nexus-4.xml",
|
||||
"b2g_manifest_branch": "master",
|
||||
"b2g_manifest_intree": true,
|
||||
"additional_source_tarballs": [],
|
||||
"gecko_l10n_root": "https://hg.mozilla.org/l10n-central",
|
||||
|
@ -30,7 +30,6 @@
|
||||
"MOZ_TELEMETRY_REPORTING": "1"
|
||||
},
|
||||
"b2g_manifest": "nexus-4.xml",
|
||||
"b2g_manifest_branch": "master",
|
||||
"b2g_manifest_intree": true,
|
||||
"additional_source_tarballs": [],
|
||||
"gecko_l10n_root": "https://hg.mozilla.org/l10n-central",
|
||||
|
@ -17,10 +17,10 @@
|
||||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="3f3963fe6e165c0a7afc6222e1137d0862c70b30"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="2e5636e852a9354a5f8072b179cf16f72647cfd6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="531cf670e485649c69746e46d567929fcd54cbc5"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="6a68dde81fcbe3c6bbd45bafdeb94c3f269bdc20"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="cabebb87fcd32f8596af08e6b5e80764ee0157dd"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
<!-- Stock Android things -->
|
||||
|
@ -24,7 +24,6 @@
|
||||
"MOZ_TELEMETRY_REPORTING": "1"
|
||||
},
|
||||
"b2g_manifest": "wasabi.xml",
|
||||
"b2g_manifest_branch": "master",
|
||||
"b2g_manifest_intree": true,
|
||||
"additional_source_tarballs": ["backup-wasabi.tar.gz"],
|
||||
"gecko_l10n_root": "https://hg.mozilla.org/l10n-central",
|
||||
|
@ -17,12 +17,12 @@
|
||||
<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="3f3963fe6e165c0a7afc6222e1137d0862c70b30"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="2e5636e852a9354a5f8072b179cf16f72647cfd6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="531cf670e485649c69746e46d567929fcd54cbc5"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="891e5069c0ad330d8191bf8c7b879c814258c89f"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="ce95d372e6d285725b96490afdaaf489ad8f9ca9"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="6a68dde81fcbe3c6bbd45bafdeb94c3f269bdc20"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="cabebb87fcd32f8596af08e6b5e80764ee0157dd"/>
|
||||
<project name="gonk-patches" path="patches" remote="b2g" revision="223a2421006e8f5da33f516f6891c87cae86b0f6"/>
|
||||
<!-- Stock Android things -->
|
||||
<project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0"?>
|
||||
<blocklist xmlns="http://www.mozilla.org/2006/addons-blocklist" lastupdate="1400782040000">
|
||||
<blocklist xmlns="http://www.mozilla.org/2006/addons-blocklist" lastupdate="1401837170000">
|
||||
<emItems>
|
||||
<emItem blockID="i454" id="sqlmoz@facebook.com">
|
||||
<versionRange minVersion="0" maxVersion="*" severity="3">
|
||||
@ -871,6 +871,12 @@
|
||||
<emItem blockID="i43" id="supportaccessplugin@gmail.com">
|
||||
<prefs>
|
||||
</prefs>
|
||||
</emItem>
|
||||
<emItem blockID="i588" id="quick_start@gmail.com">
|
||||
<versionRange minVersion="0" maxVersion="*" severity="3">
|
||||
</versionRange>
|
||||
<prefs>
|
||||
</prefs>
|
||||
</emItem>
|
||||
<emItem blockID="i340" id="chiang@programmer.net">
|
||||
<versionRange minVersion="0" maxVersion="*" severity="3">
|
||||
@ -1278,8 +1284,8 @@
|
||||
<prefs>
|
||||
</prefs>
|
||||
</emItem>
|
||||
<emItem blockID="i19" id="{46551EC9-40F0-4e47-8E18-8E5CF550CFB8}">
|
||||
<versionRange minVersion="1.1b1" maxVersion="1.1b1">
|
||||
<emItem blockID="i586" id="jid1-0xtMKhXFEs4jIg@jetpack">
|
||||
<versionRange minVersion="0" maxVersion="*" severity="3">
|
||||
</versionRange>
|
||||
<prefs>
|
||||
</prefs>
|
||||
@ -1289,6 +1295,12 @@
|
||||
</versionRange>
|
||||
<prefs>
|
||||
</prefs>
|
||||
</emItem>
|
||||
<emItem blockID="i19" id="{46551EC9-40F0-4e47-8E18-8E5CF550CFB8}">
|
||||
<versionRange minVersion="1.1b1" maxVersion="1.1b1">
|
||||
</versionRange>
|
||||
<prefs>
|
||||
</prefs>
|
||||
</emItem>
|
||||
<emItem blockID="i531" id="/^(4cb61367-efbf-4aa1-8e3a-7f776c9d5763@cdece6e9-b2ef-40a9-b178-291da9870c59\.com|0efc9c38-1ec7-49ed-8915-53a48b6b7600@e7f17679-2a42-4659-83c5-7ba961fdf75a\.com|6be3335b-ef79-4b0b-a0ba-b87afbc6f4ad@6bbb4d2e-e33e-4fa5-9b37-934f4fb50182\.com)$/">
|
||||
<versionRange minVersion="0" maxVersion="*" severity="1">
|
||||
@ -1409,6 +1421,12 @@
|
||||
</versionRange>
|
||||
<prefs>
|
||||
</prefs>
|
||||
</emItem>
|
||||
<emItem blockID="i590" id="{94cd2cc3-083f-49ba-a218-4cda4b4829fd}">
|
||||
<versionRange minVersion="0" maxVersion="*" severity="1">
|
||||
</versionRange>
|
||||
<prefs>
|
||||
</prefs>
|
||||
</emItem>
|
||||
<emItem blockID="i544" id="/^(93abedcf-8e3a-4d02-b761-d1441e437c09@243f129d-aee2-42c2-bcd1-48858e1c22fd\.com|9acfc440-ac2d-417a-a64c-f6f14653b712@09f9a966-9258-4b12-af32-da29bdcc28c5\.com|58ad0086-1cfb-48bb-8ad2-33a8905572bc@5715d2be-69b9-4930-8f7e-64bdeb961cfd\.com)$/">
|
||||
<versionRange minVersion="0" maxVersion="*" severity="1">
|
||||
|
@ -510,6 +510,8 @@
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0, 1px, 2px;
|
||||
}
|
||||
|
||||
#toolbox-buttons:empty + #toolbox-controls-separator,
|
||||
#toolbox-controls-separator[invisible] {
|
||||
visibility: hidden;
|
||||
}
|
||||
|
@ -1336,12 +1336,12 @@ this.DOMApplicationRegistry = {
|
||||
let app = this.webapps[id];
|
||||
if (!app) {
|
||||
debug("startDownload: No app found for " + aManifestURL);
|
||||
return;
|
||||
throw new Error("NO_SUCH_APP");
|
||||
}
|
||||
|
||||
if (app.downloading) {
|
||||
debug("app is already downloading. Ignoring.");
|
||||
return;
|
||||
throw new Error("APP_IS_DOWNLOADING");
|
||||
}
|
||||
|
||||
// If the caller is trying to start a download but we have nothing to
|
||||
@ -1355,7 +1355,7 @@ this.DOMApplicationRegistry = {
|
||||
eventType: "downloaderror",
|
||||
manifestURL: app.manifestURL
|
||||
});
|
||||
return;
|
||||
throw new Error("NO_DOWNLOAD_AVAILABLE");
|
||||
}
|
||||
|
||||
// First of all, we check if the download is supposed to update an
|
||||
@ -1412,7 +1412,7 @@ this.DOMApplicationRegistry = {
|
||||
if (!json) {
|
||||
debug("startDownload: No update manifest found at " + file.path + " " +
|
||||
aManifestURL);
|
||||
return;
|
||||
throw new Error("MISSING_UPDATE_MANIFEST");
|
||||
}
|
||||
|
||||
let manifest = new ManifestHelper(json, app.manifestURL);
|
||||
@ -1453,104 +1453,103 @@ this.DOMApplicationRegistry = {
|
||||
}
|
||||
}),
|
||||
|
||||
applyDownload: function applyDownload(aManifestURL) {
|
||||
applyDownload: Task.async(function*(aManifestURL) {
|
||||
debug("applyDownload for " + aManifestURL);
|
||||
let id = this._appIdForManifestURL(aManifestURL);
|
||||
let app = this.webapps[id];
|
||||
if (!app || (app && !app.readyToApplyDownload)) {
|
||||
return;
|
||||
if (!app) {
|
||||
throw new Error("NO_SUCH_APP");
|
||||
}
|
||||
if (!app.readyToApplyDownload) {
|
||||
throw new Error("NOT_READY_TO_APPLY_DOWNLOAD");
|
||||
}
|
||||
|
||||
// We need to get the old manifest to unregister web activities.
|
||||
this.getManifestFor(aManifestURL).then((aOldManifest) => {
|
||||
// Move the application.zip and manifest.webapp files out of TmpD
|
||||
let tmpDir = FileUtils.getDir("TmpD", ["webapps", id], true, true);
|
||||
let manFile = tmpDir.clone();
|
||||
manFile.append("manifest.webapp");
|
||||
let appFile = tmpDir.clone();
|
||||
appFile.append("application.zip");
|
||||
let oldManifest = yield this.getManifestFor(aManifestURL);
|
||||
// Move the application.zip and manifest.webapp files out of TmpD
|
||||
let tmpDir = FileUtils.getDir("TmpD", ["webapps", id], true, true);
|
||||
let manFile = tmpDir.clone();
|
||||
manFile.append("manifest.webapp");
|
||||
let appFile = tmpDir.clone();
|
||||
appFile.append("application.zip");
|
||||
|
||||
let dir = FileUtils.getDir(DIRECTORY_NAME, ["webapps", id], true, true);
|
||||
appFile.moveTo(dir, "application.zip");
|
||||
manFile.moveTo(dir, "manifest.webapp");
|
||||
let dir = FileUtils.getDir(DIRECTORY_NAME, ["webapps", id], true, true);
|
||||
appFile.moveTo(dir, "application.zip");
|
||||
manFile.moveTo(dir, "manifest.webapp");
|
||||
|
||||
// Move the staged update manifest to a non staged one.
|
||||
let staged = dir.clone();
|
||||
staged.append("staged-update.webapp");
|
||||
// Move the staged update manifest to a non staged one.
|
||||
let staged = dir.clone();
|
||||
staged.append("staged-update.webapp");
|
||||
|
||||
// If we are applying after a restarted download, we have no
|
||||
// staged update manifest.
|
||||
if (staged.exists()) {
|
||||
staged.moveTo(dir, "update.webapp");
|
||||
// If we are applying after a restarted download, we have no
|
||||
// staged update manifest.
|
||||
if (staged.exists()) {
|
||||
staged.moveTo(dir, "update.webapp");
|
||||
}
|
||||
|
||||
try {
|
||||
tmpDir.remove(true);
|
||||
} catch(e) { }
|
||||
|
||||
// Clean up the deprecated manifest cache if needed.
|
||||
if (id in this._manifestCache) {
|
||||
delete this._manifestCache[id];
|
||||
}
|
||||
|
||||
// Flush the zip reader cache to make sure we use the new application.zip
|
||||
// when re-launching the application.
|
||||
let zipFile = dir.clone();
|
||||
zipFile.append("application.zip");
|
||||
Services.obs.notifyObservers(zipFile, "flush-cache-entry", null);
|
||||
|
||||
// Get the manifest, and set properties.
|
||||
let newManifest = yield this.getManifestFor(aManifestURL);
|
||||
app.downloading = false;
|
||||
app.downloadAvailable = false;
|
||||
app.downloadSize = 0;
|
||||
app.installState = "installed";
|
||||
app.readyToApplyDownload = false;
|
||||
|
||||
// Update the staged properties.
|
||||
if (app.staged) {
|
||||
for (let prop in app.staged) {
|
||||
app[prop] = app.staged[prop];
|
||||
}
|
||||
delete app.staged;
|
||||
}
|
||||
|
||||
try {
|
||||
tmpDir.remove(true);
|
||||
} catch(e) { }
|
||||
delete app.retryingDownload;
|
||||
|
||||
// Clean up the deprecated manifest cache if needed.
|
||||
if (id in this._manifestCache) {
|
||||
delete this._manifestCache[id];
|
||||
}
|
||||
// Update the asm.js scripts we need to compile.
|
||||
yield ScriptPreloader.preload(app, newManifest);
|
||||
yield this._saveApps();
|
||||
// Update the handlers and permissions for this app.
|
||||
this.updateAppHandlers(oldManifest, newManifest, app);
|
||||
|
||||
// Flush the zip reader cache to make sure we use the new application.zip
|
||||
// when re-launching the application.
|
||||
let zipFile = dir.clone();
|
||||
zipFile.append("application.zip");
|
||||
Services.obs.notifyObservers(zipFile, "flush-cache-entry", null);
|
||||
let updateManifest = yield AppsUtils.loadJSONAsync(staged.path);
|
||||
let appObject = AppsUtils.cloneAppObject(app);
|
||||
appObject.updateManifest = updateManifest;
|
||||
this.notifyUpdateHandlers(appObject, newManifest, appFile.path);
|
||||
|
||||
// Get the manifest, and set properties.
|
||||
this.getManifestFor(aManifestURL).then((aData) => {
|
||||
app.downloading = false;
|
||||
app.downloadAvailable = false;
|
||||
app.downloadSize = 0;
|
||||
app.installState = "installed";
|
||||
app.readyToApplyDownload = false;
|
||||
|
||||
// Update the staged properties.
|
||||
if (app.staged) {
|
||||
for (let prop in app.staged) {
|
||||
app[prop] = app.staged[prop];
|
||||
}
|
||||
delete app.staged;
|
||||
}
|
||||
|
||||
delete app.retryingDownload;
|
||||
|
||||
// Update the asm.js scripts we need to compile.
|
||||
ScriptPreloader.preload(app, aData)
|
||||
.then(() => this._saveApps()).then(() => {
|
||||
// Update the handlers and permissions for this app.
|
||||
this.updateAppHandlers(aOldManifest, aData, app);
|
||||
|
||||
AppsUtils.loadJSONAsync(staged.path).then((aUpdateManifest) => {
|
||||
let appObject = AppsUtils.cloneAppObject(app);
|
||||
appObject.updateManifest = aUpdateManifest;
|
||||
this.notifyUpdateHandlers(appObject, aData, appFile.path);
|
||||
});
|
||||
|
||||
if (supportUseCurrentProfile()) {
|
||||
PermissionsInstaller.installPermissions(
|
||||
{ manifest: aData,
|
||||
origin: app.origin,
|
||||
manifestURL: app.manifestURL },
|
||||
true);
|
||||
}
|
||||
this.updateDataStore(this.webapps[id].localId, app.origin,
|
||||
app.manifestURL, aData, app.appStatus);
|
||||
this.broadcastMessage("Webapps:UpdateState", {
|
||||
app: app,
|
||||
manifest: aData,
|
||||
manifestURL: app.manifestURL
|
||||
});
|
||||
this.broadcastMessage("Webapps:FireEvent", {
|
||||
eventType: "downloadapplied",
|
||||
manifestURL: app.manifestURL
|
||||
});
|
||||
});
|
||||
});
|
||||
if (supportUseCurrentProfile()) {
|
||||
PermissionsInstaller.installPermissions(
|
||||
{ manifest: newManifest,
|
||||
origin: app.origin,
|
||||
manifestURL: app.manifestURL },
|
||||
true);
|
||||
}
|
||||
this.updateDataStore(this.webapps[id].localId, app.origin,
|
||||
app.manifestURL, newManifest, app.appStatus);
|
||||
this.broadcastMessage("Webapps:UpdateState", {
|
||||
app: app,
|
||||
manifest: newManifest,
|
||||
manifestURL: app.manifestURL
|
||||
});
|
||||
},
|
||||
this.broadcastMessage("Webapps:FireEvent", {
|
||||
eventType: "downloadapplied",
|
||||
manifestURL: app.manifestURL
|
||||
});
|
||||
}),
|
||||
|
||||
startOfflineCacheDownload: function(aManifest, aApp, aProfileDir, aIsUpdate) {
|
||||
if (!aManifest.appcache_path) {
|
||||
@ -2776,9 +2775,11 @@ this.DOMApplicationRegistry = {
|
||||
if (oldPackage) {
|
||||
debug("package's etag or hash unchanged; sending 'applied' event");
|
||||
// The package's Etag or hash has not changed.
|
||||
// We send a "applied" event right away.
|
||||
// We send an "applied" event right away so code awaiting that event
|
||||
// can proceed to access the app. We also throw an error to alert
|
||||
// the caller that the package wasn't downloaded.
|
||||
this._sendAppliedEvent(aNewApp, oldApp, id);
|
||||
return;
|
||||
throw new Error("PACKAGE_UNCHANGED");
|
||||
}
|
||||
|
||||
let newManifest = yield this._openAndReadPackage(zipFile, oldApp, aNewApp,
|
||||
@ -3491,6 +3492,8 @@ this.DOMApplicationRegistry = {
|
||||
});
|
||||
});
|
||||
AppDownloadManager.remove(aNewApp.manifestURL);
|
||||
|
||||
throw aError;
|
||||
},
|
||||
|
||||
doUninstall: function(aData, aMm) {
|
||||
|
@ -19,7 +19,9 @@ import org.mozilla.gecko.GeckoAppShell;
|
||||
import org.mozilla.gecko.GeckoEvent;
|
||||
import org.mozilla.gecko.GeckoProfile;
|
||||
import org.mozilla.gecko.gfx.BitmapUtils;
|
||||
import org.mozilla.gecko.util.GeckoEventListener;
|
||||
import org.mozilla.gecko.util.EventCallback;
|
||||
import org.mozilla.gecko.util.NativeEventListener;
|
||||
import org.mozilla.gecko.util.NativeJSObject;
|
||||
import org.mozilla.gecko.util.ThreadUtils;
|
||||
|
||||
import android.content.Context;
|
||||
@ -27,7 +29,7 @@ import android.graphics.Bitmap;
|
||||
import android.net.Uri;
|
||||
import android.util.Log;
|
||||
|
||||
public class InstallHelper implements GeckoEventListener {
|
||||
public class InstallHelper implements NativeEventListener {
|
||||
private static final String LOGTAG = "GeckoWebappInstallHelper";
|
||||
private static final String[] INSTALL_EVENT_NAMES = new String[] {"Webapps:Postinstall"};
|
||||
private final Context mContext;
|
||||
@ -36,7 +38,7 @@ public class InstallHelper implements GeckoEventListener {
|
||||
|
||||
public static interface InstallCallback {
|
||||
// on the GeckoThread
|
||||
void installCompleted(InstallHelper installHelper, String event, JSONObject message);
|
||||
void installCompleted(InstallHelper installHelper, String event, NativeJSObject message);
|
||||
|
||||
// on the GeckoBackgroundThread
|
||||
void installErrored(InstallHelper installHelper, Exception exception);
|
||||
@ -162,7 +164,7 @@ public class InstallHelper implements GeckoEventListener {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleMessage(String event, JSONObject message) {
|
||||
public void handleMessage(String event, NativeJSObject message, EventCallback callback) {
|
||||
EventDispatcher.getInstance().unregisterGeckoThreadListener(this, INSTALL_EVENT_NAMES);
|
||||
|
||||
if (mCallback != null) {
|
||||
|
@ -18,6 +18,7 @@ import org.mozilla.gecko.GeckoThread;
|
||||
import org.mozilla.gecko.R;
|
||||
import org.mozilla.gecko.Tab;
|
||||
import org.mozilla.gecko.Tabs;
|
||||
import org.mozilla.gecko.util.NativeJSObject;
|
||||
import org.mozilla.gecko.webapp.InstallHelper.InstallCallback;
|
||||
|
||||
import android.content.Intent;
|
||||
@ -325,13 +326,13 @@ public class WebappImpl extends GeckoApp implements InstallCallback {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void installCompleted(InstallHelper installHelper, String event, JSONObject message) {
|
||||
public void installCompleted(InstallHelper installHelper, String event, NativeJSObject message) {
|
||||
if (event == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.equals("Webapps:Postinstall")) {
|
||||
String origin = message.optString("origin");
|
||||
String origin = message.optString("origin", null);
|
||||
launchWebapp(origin);
|
||||
}
|
||||
}
|
||||
|
@ -158,37 +158,46 @@ this.WebappManager = {
|
||||
return deferred.promise;
|
||||
},
|
||||
|
||||
askInstall: function(aData) {
|
||||
let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
|
||||
file.initWithPath(aData.profilePath);
|
||||
|
||||
_deleteAppcachePath: function(aManifest) {
|
||||
// We don't yet support pre-installing an appcache because it isn't clear
|
||||
// how to do it without degrading the user experience (since users expect
|
||||
// apps to be available after the system tells them they've been installed,
|
||||
// which has already happened) and because nsCacheService shuts down
|
||||
// when we trigger the native install dialog and doesn't re-init itself
|
||||
// afterward (TODO: file bug about this behavior).
|
||||
if ("appcache_path" in aData.app.manifest) {
|
||||
debug("deleting appcache_path from manifest: " + aData.app.manifest.appcache_path);
|
||||
delete aData.app.manifest.appcache_path;
|
||||
if ("appcache_path" in aManifest) {
|
||||
debug("deleting appcache_path from manifest: " + aManifest.appcache_path);
|
||||
delete aManifest.appcache_path;
|
||||
}
|
||||
},
|
||||
|
||||
askInstall: function(aData) {
|
||||
let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
|
||||
file.initWithPath(aData.profilePath);
|
||||
|
||||
this._deleteAppcachePath(aData.app.manifest);
|
||||
|
||||
DOMApplicationRegistry.registryReady.then(() => {
|
||||
DOMApplicationRegistry.confirmInstall(aData, file, (function(aManifest) {
|
||||
let localeManifest = new ManifestHelper(aManifest, aData.app.origin);
|
||||
|
||||
// aData.app.origin may now point to the app: url that hosts this app.
|
||||
sendMessageToJava({
|
||||
type: "Webapps:Postinstall",
|
||||
apkPackageName: aData.app.apkPackageName,
|
||||
origin: aData.app.origin,
|
||||
});
|
||||
|
||||
this.writeDefaultPrefs(file, localeManifest);
|
||||
this._postInstall(aData.profilePath, aManifest, aData.app.origin, aData.app.apkPackageName);
|
||||
}).bind(this));
|
||||
});
|
||||
},
|
||||
|
||||
_postInstall: function(aProfilePath, aNewManifest, aOrigin, aApkPackageName) {
|
||||
// aOrigin may now point to the app: url that hosts this app.
|
||||
sendMessageToJava({
|
||||
type: "Webapps:Postinstall",
|
||||
apkPackageName: aApkPackageName,
|
||||
origin: aOrigin,
|
||||
});
|
||||
|
||||
let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
|
||||
file.initWithPath(aProfilePath);
|
||||
let localeManifest = new ManifestHelper(aNewManifest, aOrigin);
|
||||
this.writeDefaultPrefs(file, localeManifest);
|
||||
},
|
||||
|
||||
launch: function({ manifestURL, origin }) {
|
||||
debug("launchWebapp: " + manifestURL);
|
||||
|
||||
@ -211,11 +220,16 @@ this.WebappManager = {
|
||||
},
|
||||
|
||||
autoInstall: function(aData) {
|
||||
let oldApp = DOMApplicationRegistry.getAppByManifestURL(aData.manifestURL);
|
||||
if (oldApp) {
|
||||
// If the app is already installed, update the existing installation.
|
||||
this._autoUpdate(aData, oldApp);
|
||||
return;
|
||||
debug("autoInstall " + aData.manifestURL);
|
||||
|
||||
// If the app is already installed, update the existing installation.
|
||||
// We should be able to use DOMApplicationRegistry.getAppByManifestURL,
|
||||
// but it returns a mozIApplication, while _autoUpdate needs the original
|
||||
// object from DOMApplicationRegistry.webapps in order to modify it.
|
||||
for (let [ , app] in Iterator(DOMApplicationRegistry.webapps)) {
|
||||
if (app.manifestURL == aData.manifestURL) {
|
||||
return this._autoUpdate(aData, app);
|
||||
}
|
||||
}
|
||||
|
||||
let mm = {
|
||||
@ -276,13 +290,39 @@ this.WebappManager = {
|
||||
}
|
||||
|
||||
if (aData.type == "hosted") {
|
||||
this._deleteAppcachePath(aData.manifest);
|
||||
let oldManifest = yield DOMApplicationRegistry.getManifestFor(aData.manifestURL);
|
||||
DOMApplicationRegistry.updateHostedApp(aData, aOldApp.id, aOldApp, oldManifest, aData.manifest);
|
||||
yield DOMApplicationRegistry.updateHostedApp(aData, aOldApp.id, aOldApp, oldManifest, aData.manifest);
|
||||
} else {
|
||||
DOMApplicationRegistry.updatePackagedApp(aData, aOldApp.id, aOldApp, aData.manifest);
|
||||
yield this._autoUpdatePackagedApp(aData, aOldApp);
|
||||
}
|
||||
|
||||
this._postInstall(aData.profilePath, aData.manifest, aOldApp.origin, aOldApp.apkPackageName);
|
||||
}).bind(this)); },
|
||||
|
||||
_autoUpdatePackagedApp: Task.async(function*(aData, aOldApp) {
|
||||
debug("_autoUpdatePackagedApp: " + aData.manifestURL);
|
||||
|
||||
if (aData.updateManifest && aData.zipFilePath) {
|
||||
aData.updateManifest.package_path = aData.zipFilePath;
|
||||
}
|
||||
|
||||
// updatePackagedApp just prepares the update, after which we must
|
||||
// download the package via the misnamed startDownload and then apply it
|
||||
// via applyDownload.
|
||||
yield DOMApplicationRegistry.updatePackagedApp(aData, aOldApp.id, aOldApp, aData.updateManifest);
|
||||
|
||||
try {
|
||||
yield DOMApplicationRegistry.startDownload(aData.manifestURL);
|
||||
} catch (ex if ex.message == "PACKAGE_UNCHANGED") {
|
||||
debug("package unchanged");
|
||||
// If the package is unchanged, then there's nothing more to do.
|
||||
return;
|
||||
}
|
||||
|
||||
yield DOMApplicationRegistry.applyDownload(aData.manifestURL);
|
||||
}),
|
||||
|
||||
_checkingForUpdates: false,
|
||||
|
||||
checkForUpdates: function(userInitiated) { return Task.spawn((function*() {
|
||||
|
@ -145,7 +145,7 @@ void ARTPConnection::MakePortPair(
|
||||
unsigned start = (unsigned)((rand() * 1000ll) / RAND_MAX) + 15550;
|
||||
start &= ~1;
|
||||
|
||||
for (uint16_t port = start; port < 65536; port += 2) {
|
||||
for (uint32_t port = start; port < 65536; port += 2) {
|
||||
PRNetAddr addr;
|
||||
addr.inet.family = PR_AF_INET;
|
||||
addr.inet.ip = PR_htonl(PR_INADDR_ANY);
|
||||
@ -278,7 +278,7 @@ void ARTPConnection::onPollStreams() {
|
||||
moz_xcalloc(pollCount, sizeof(PRPollDesc));
|
||||
|
||||
// |pollIndex| is used to map different RTP & RTCP socket pairs.
|
||||
int numSocketsToPoll = 0, pollIndex = 0;
|
||||
uint32_t numSocketsToPoll = 0, pollIndex = 0;
|
||||
for (List<StreamInfo>::iterator it = mStreams.begin();
|
||||
it != mStreams.end(); ++it, pollIndex += 2) {
|
||||
if (pollIndex >= pollCount) {
|
||||
|
@ -56,10 +56,10 @@ ARTSPConnection::ARTSPConnection(bool uidValid, uid_t uid)
|
||||
mUID(uid),
|
||||
mState(DISCONNECTED),
|
||||
mAuthType(NONE),
|
||||
mSocket(nullptr),
|
||||
mConnectionID(0),
|
||||
mNextCSeq(0),
|
||||
mReceiveResponseEventPending(false),
|
||||
mSocket(nullptr),
|
||||
mNumSocketPollTimeoutRetries(0) {
|
||||
MakeUserAgent(&mUserAgent);
|
||||
}
|
||||
|
@ -41,10 +41,6 @@
|
||||
#include "prnetdb.h"
|
||||
|
||||
extern PRLogModuleInfo* gRtspLog;
|
||||
#define LOGI(msg, ...) PR_LOG(gRtspLog, PR_LOG_ALWAYS, ("RTSP" msg, ##__VA_ARGS__))
|
||||
#define LOGV(msg, ...) PR_LOG(gRtspLog, PR_LOG_DEBUG, (msg, ##__VA_ARGS__))
|
||||
#define LOGE(msg, ...) PR_LOG(gRtspLog, PR_LOG_ERROR, (msg, ##__VA_ARGS__))
|
||||
#define LOGW(msg, ...) PR_LOG(gRtspLog, PR_LOG_WARNING, (msg, ##__VA_ARGS__))
|
||||
|
||||
// If no access units are received within 2 secs, assume that the rtp
|
||||
// stream has ended and signal end of stream.
|
||||
|
@ -1,12 +1,11 @@
|
||||
admin.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
adsfund.org: could not connect to host
|
||||
airbnb.com: did not receive HSTS header
|
||||
alpha.irccloud.com: could not connect to host
|
||||
alpha.irccloud.com: did not receive HSTS header
|
||||
anycoin.me: did not receive HSTS header
|
||||
api.lookout.com: could not connect to host
|
||||
api.mega.co.nz: could not connect to host
|
||||
api.recurly.com: did not receive HSTS header
|
||||
api.simple.com: did not receive HSTS header
|
||||
apis.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
app.lookout.com: could not connect to host
|
||||
appengine.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
@ -42,10 +41,10 @@ edmodo.com: did not receive HSTS header
|
||||
email.lookout.com: could not connect to host
|
||||
emailprivacytester.com: did not receive HSTS header
|
||||
encrypted.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
epoxate.com: did not receive HSTS header
|
||||
errors.zenpayroll.com: could not connect to host
|
||||
espra.com: could not connect to host
|
||||
fatzebra.com.au: did not receive HSTS header
|
||||
fj.simple.com: did not receive HSTS header
|
||||
get.zenpayroll.com: did not receive HSTS header
|
||||
glass.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
gmail.com: did not receive HSTS header (error ignored - included regardless)
|
||||
@ -92,6 +91,7 @@ play.google.com: did not receive HSTS header (error ignored - included regardles
|
||||
prodpad.com: did not receive HSTS header
|
||||
profiles.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
rapidresearch.me: did not receive HSTS header
|
||||
riseup.net: could not connect to host
|
||||
sah3.net: could not connect to host
|
||||
saturngames.co.uk: did not receive HSTS header
|
||||
script.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
@ -120,8 +120,8 @@ talkgadget.google.com: did not receive HSTS header (error ignored - included reg
|
||||
translate.googleapis.com: did not receive HSTS header (error ignored - included regardless)
|
||||
uprotect.it: could not connect to host
|
||||
wallet.google.com: did not receive HSTS header (error ignored - included regardless)
|
||||
waveapps.com: max-age too low: 0
|
||||
webmail.mayfirst.org: did not receive HSTS header
|
||||
wepay.com: max-age too low: 2592000
|
||||
whonix.org: did not receive HSTS header
|
||||
www.calyxinstitute.org: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-hsts-000000000000000/getHSTSPreloadList.js :: processStsHeader :: line 125" data: no]
|
||||
www.cueup.com: did not receive HSTS header
|
||||
@ -143,5 +143,4 @@ www.paypal.com: [Exception... "Component returned failure code: 0x80004005 (NS_E
|
||||
www.roddis.net: did not receive HSTS header
|
||||
www.sandbox.mydigipass.com: could not connect to host
|
||||
www.surfeasy.com: did not receive HSTS header
|
||||
www.wepay.com: max-age too low: 2592000
|
||||
zoo24.de: max-age too low: 2592000
|
||||
|
@ -8,7 +8,7 @@
|
||||
/*****************************************************************************/
|
||||
|
||||
#include <stdint.h>
|
||||
const PRTime gPreloadListExpirationTime = INT64_C(1412417246070000);
|
||||
const PRTime gPreloadListExpirationTime = INT64_C(1413022251299000);
|
||||
|
||||
class nsSTSPreload
|
||||
{
|
||||
@ -24,8 +24,8 @@ static const nsSTSPreload kSTSPreloadList[] = {
|
||||
{ "admin.google.com", true },
|
||||
{ "adsfund.org", true },
|
||||
{ "aladdinschools.appspot.com", false },
|
||||
{ "alpha.irccloud.com", false },
|
||||
{ "api.intercom.io", false },
|
||||
{ "api.simple.com", false },
|
||||
{ "api.xero.com", false },
|
||||
{ "apis.google.com", true },
|
||||
{ "app.manilla.com", true },
|
||||
@ -86,7 +86,6 @@ static const nsSTSPreload kSTSPreloadList[] = {
|
||||
{ "encircleapp.com", true },
|
||||
{ "encrypted.google.com", true },
|
||||
{ "entropia.de", false },
|
||||
{ "epoxate.com", false },
|
||||
{ "errors.zenpayroll.com", false },
|
||||
{ "espra.com", true },
|
||||
{ "f-droid.org", true },
|
||||
@ -95,6 +94,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
|
||||
{ "faq.lookout.com", false },
|
||||
{ "feedbin.com", false },
|
||||
{ "fiken.no", true },
|
||||
{ "fj.simple.com", false },
|
||||
{ "forum.linode.com", false },
|
||||
{ "forum.quantifiedself.com", true },
|
||||
{ "gernert-server.de", true },
|
||||
@ -229,13 +229,13 @@ static const nsSTSPreload kSTSPreloadList[] = {
|
||||
{ "vmoagents.com", false },
|
||||
{ "w-spotlight.appspot.com", true },
|
||||
{ "wallet.google.com", true },
|
||||
{ "waveapps.com", true },
|
||||
{ "webfilings-eu-mirror.appspot.com", true },
|
||||
{ "webfilings-eu.appspot.com", true },
|
||||
{ "webfilings-mirror-hrd.appspot.com", true },
|
||||
{ "webfilings.appspot.com", true },
|
||||
{ "webmail.gigahost.dk", false },
|
||||
{ "webmail.onlime.ch", false },
|
||||
{ "wepay.com", false },
|
||||
{ "wf-bigsky-master.appspot.com", true },
|
||||
{ "wf-demo-eu.appspot.com", true },
|
||||
{ "wf-demo-hrd.appspot.com", true },
|
||||
@ -280,6 +280,7 @@ static const nsSTSPreload kSTSPreloadList[] = {
|
||||
{ "www.torproject.org", false },
|
||||
{ "www.twitter.com", false },
|
||||
{ "www.usaa.com", false },
|
||||
{ "www.wepay.com", false },
|
||||
{ "www.zenpayroll.com", false },
|
||||
{ "xbrlsuccess.appspot.com", true },
|
||||
{ "zenpayroll.com", false },
|
||||
|
@ -240,8 +240,11 @@ this.FxAccountsClient.prototype = {
|
||||
* @param lifetime
|
||||
* The lifetime of the certificate
|
||||
* @return Promise
|
||||
* Returns a promise that resolves to the signed certificate. The certificate
|
||||
* can be used to generate a Persona assertion.
|
||||
* Returns a promise that resolves to the signed certificate.
|
||||
* The certificate can be used to generate a Persona assertion.
|
||||
* @throws a new Error
|
||||
* wrapping any of these HTTP code/errno pairs:
|
||||
* https://github.com/mozilla/fxa-auth-server/blob/master/docs/api.md#response-12
|
||||
*/
|
||||
signCertificate: function (sessionTokenHex, serializedPublicKey, lifetime) {
|
||||
let creds = this._deriveHawkCredentials(sessionTokenHex, "sessionToken");
|
||||
|
@ -152,8 +152,82 @@ this.FxAccountsManager = {
|
||||
);
|
||||
},
|
||||
|
||||
/**
|
||||
* Determine whether the incoming error means that the current account
|
||||
* has new server-side state via deletion or password change, and if so,
|
||||
* spawn the appropriate UI (sign in or refresh); otherwise re-reject.
|
||||
*
|
||||
* As of May 2014, the only HTTP call triggered by this._getAssertion()
|
||||
* is to /certificate/sign via:
|
||||
* FxAccounts.getAssertion()
|
||||
* FxAccountsInternal.getCertificateSigned()
|
||||
* FxAccountsClient.signCertificate()
|
||||
* See the latter method for possible (error code, errno) pairs.
|
||||
*/
|
||||
_handleGetAssertionError: function(reason, aAudience) {
|
||||
let errno = (reason ? reason.errno : NaN) || NaN;
|
||||
// If the previously valid email/password pair is no longer valid ...
|
||||
if (errno == ERRNO_INVALID_AUTH_TOKEN) {
|
||||
return this._fxAccounts.accountStatus().then(
|
||||
(exists) => {
|
||||
// ... if the email still maps to an account, the password
|
||||
// must have changed, so ask the user to enter the new one ...
|
||||
if (exists) {
|
||||
return this.getAccount().then(
|
||||
(user) => {
|
||||
return this._refreshAuthentication(aAudience, user.email);
|
||||
}
|
||||
);
|
||||
// ... otherwise, the account was deleted, so ask for Sign In/Up
|
||||
} else {
|
||||
return this._localSignOut().then(
|
||||
() => {
|
||||
return this._uiRequest(UI_REQUEST_SIGN_IN_FLOW, aAudience);
|
||||
},
|
||||
(reason) => { // reject primary problem, not signout failure
|
||||
log.error("Signing out in response to server error threw: " + reason);
|
||||
return this._error(reason);
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
return rejection;
|
||||
},
|
||||
|
||||
_getAssertion: function(aAudience) {
|
||||
return this._fxAccounts.getAssertion(aAudience);
|
||||
return this._fxAccounts.getAssertion(aAudience).then(
|
||||
(result) => {
|
||||
return result;
|
||||
},
|
||||
(reason) => {
|
||||
return this._handleGetAssertionError(reason, aAudience);
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
_refreshAuthentication: function(aAudience, aEmail) {
|
||||
this._refreshing = true;
|
||||
return this._uiRequest(UI_REQUEST_REFRESH_AUTH,
|
||||
aAudience, aEmail).then(
|
||||
(assertion) => {
|
||||
this._refreshing = false;
|
||||
return assertion;
|
||||
},
|
||||
(reason) => {
|
||||
this._refreshing = false;
|
||||
return this._signOut().then(
|
||||
() => {
|
||||
return this._error(reason);
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
},
|
||||
|
||||
_localSignOut: function() {
|
||||
return this._fxAccounts.signOut(true);
|
||||
},
|
||||
|
||||
_signOut: function() {
|
||||
@ -167,7 +241,7 @@ this.FxAccountsManager = {
|
||||
// in case that we have network connection.
|
||||
let sessionToken = this._activeSession.sessionToken;
|
||||
|
||||
return this._fxAccounts.signOut(true).then(
|
||||
return this._localSignOut().then(
|
||||
() => {
|
||||
// At this point the local session should already be removed.
|
||||
|
||||
@ -362,36 +436,41 @@ this.FxAccountsManager = {
|
||||
},
|
||||
|
||||
/*
|
||||
* Try to get an assertion for the given audience.
|
||||
* Try to get an assertion for the given audience. Here we implement
|
||||
* the heart of the response to navigator.mozId.request() on device.
|
||||
* (We can also be called via the IAC API, but it's request() that
|
||||
* makes this method complex.) The state machine looks like this,
|
||||
* ignoring simple errors:
|
||||
* If no one is signed in, and we aren't suppressing the UI:
|
||||
* trigger the sign in flow.
|
||||
* else if we were asked to refresh and the grace period is up:
|
||||
* trigger the refresh flow.
|
||||
* else ask the core code for an assertion, which might itself
|
||||
* trigger either the sign in or refresh flows (if our account
|
||||
* changed on the server).
|
||||
*
|
||||
* aOptions can include:
|
||||
*
|
||||
* refreshAuthentication - (bool) Force re-auth.
|
||||
*
|
||||
* silent - (bool) Prevent any UI interaction.
|
||||
* I.e., try to get an automatic assertion.
|
||||
*
|
||||
*/
|
||||
getAssertion: function(aAudience, aOptions) {
|
||||
if (!aAudience) {
|
||||
return this._error(ERROR_INVALID_AUDIENCE);
|
||||
}
|
||||
|
||||
if (Services.io.offline) {
|
||||
return this._error(ERROR_OFFLINE);
|
||||
}
|
||||
|
||||
return this.getAccount().then(
|
||||
user => {
|
||||
if (user) {
|
||||
// We cannot get assertions for unverified accounts.
|
||||
// Three have-user cases to consider. First: are we unverified?
|
||||
if (!user.verified) {
|
||||
return this._error(ERROR_UNVERIFIED_ACCOUNT, {
|
||||
user: user
|
||||
});
|
||||
}
|
||||
|
||||
// RPs might require an authentication refresh.
|
||||
// Second case: do we need to refresh?
|
||||
if (aOptions &&
|
||||
(typeof(aOptions.refreshAuthentication) != "undefined")) {
|
||||
let gracePeriod = aOptions.refreshAuthentication;
|
||||
@ -399,44 +478,24 @@ this.FxAccountsManager = {
|
||||
return this._error(ERROR_INVALID_REFRESH_AUTH_VALUE);
|
||||
}
|
||||
// Forcing refreshAuth to silent is a contradiction in terms,
|
||||
// though it will sometimes succeed silently.
|
||||
// though it might succeed silently if we didn't reject here.
|
||||
if (aOptions.silent) {
|
||||
return this._error(ERROR_NO_SILENT_REFRESH_AUTH);
|
||||
}
|
||||
if ((Date.now() / 1000) - this._activeSession.authAt > gracePeriod) {
|
||||
// Grace period expired, so we sign out and request the user to
|
||||
// authenticate herself again. If the authentication succeeds, we
|
||||
// will return the assertion. Otherwise, we will return an error.
|
||||
this._refreshing = true;
|
||||
return this._uiRequest(UI_REQUEST_REFRESH_AUTH,
|
||||
aAudience, user.email).then(
|
||||
(assertion) => {
|
||||
this._refreshing = false;
|
||||
return assertion;
|
||||
},
|
||||
(reason) => {
|
||||
this._refreshing = false;
|
||||
return this._signOut().then(
|
||||
() => {
|
||||
return this._error(reason);
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
let secondsSinceAuth = (Date.now() / 1000) - this._activeSession.authAt;
|
||||
if (secondsSinceAuth > gracePeriod) {
|
||||
return this._refreshAuthentication(aAudience, user.email);
|
||||
}
|
||||
}
|
||||
|
||||
// Third case: we are all set *locally*. Probably we just return
|
||||
// the assertion, but the attempt might lead to the server saying
|
||||
// we are deleted or have a new password, which will trigger a flow.
|
||||
return this._getAssertion(aAudience);
|
||||
}
|
||||
|
||||
log.debug("No signed in user");
|
||||
|
||||
if (aOptions && aOptions.silent) {
|
||||
return Promise.resolve(null);
|
||||
}
|
||||
|
||||
// If there is no currently signed in user, we trigger the signIn UI
|
||||
// flow.
|
||||
return this._uiRequest(UI_REQUEST_SIGN_IN_FLOW, aAudience);
|
||||
}
|
||||
);
|
||||
|
@ -12,6 +12,10 @@ Cu.import("resource://gre/modules/Promise.jsm");
|
||||
|
||||
// === Mocks ===
|
||||
|
||||
// Globals representing server state
|
||||
let passwordResetOnServer = false;
|
||||
let deletedOnServer = false;
|
||||
|
||||
// Override FxAccountsUIGlue.
|
||||
const kFxAccountsUIGlueUUID = "{8f6d5d87-41ed-4bb5-aa28-625de57564c5}";
|
||||
const kFxAccountsUIGlueContractID =
|
||||
@ -54,6 +58,7 @@ let FxAccountsUIGlue = {
|
||||
if (this._reject) {
|
||||
deferred.reject(this._error);
|
||||
} else {
|
||||
passwordResetOnServer = false;
|
||||
FxAccountsManager._activeSession = this._activeSession || {
|
||||
email: "user@domain.org",
|
||||
verified: false,
|
||||
@ -68,6 +73,7 @@ let FxAccountsUIGlue = {
|
||||
},
|
||||
|
||||
signInFlow: function() {
|
||||
deletedOnServer = false;
|
||||
this._signInFlowCalled = true;
|
||||
return this._promise();
|
||||
},
|
||||
@ -104,13 +110,23 @@ FxAccountsManager._fxAccounts = {
|
||||
this._reject = false;
|
||||
},
|
||||
|
||||
accountStatus: function() {
|
||||
let deferred = Promise.defer();
|
||||
deferred.resolve(!deletedOnServer);
|
||||
return deferred.promise;
|
||||
},
|
||||
|
||||
getAssertion: function() {
|
||||
if (!this._signedInUser) {
|
||||
return null;
|
||||
}
|
||||
|
||||
let deferred = Promise.defer();
|
||||
deferred.resolve(this._assertion);
|
||||
if (passwordResetOnServer || deletedOnServer) {
|
||||
deferred.reject({errno: ERRNO_INVALID_AUTH_TOKEN});
|
||||
} else {
|
||||
deferred.resolve(this._assertion);
|
||||
}
|
||||
return deferred.promise;
|
||||
},
|
||||
|
||||
@ -376,6 +392,38 @@ add_test(function(test_getAssertion_refreshAuth) {
|
||||
);
|
||||
});
|
||||
|
||||
add_test(function(test_getAssertion_server_state_change) {
|
||||
FxAccountsManager._fxAccounts._signedInUser.verified = true;
|
||||
FxAccountsManager._activeSession.verified = true;
|
||||
passwordResetOnServer = true;
|
||||
FxAccountsManager.getAssertion("audience").then(
|
||||
(result) => {
|
||||
// For password reset, the UIGlue mock simulates sucessful
|
||||
// refreshAuth which supplies new password, not signin/signup.
|
||||
do_check_true(FxAccountsUIGlue._refreshAuthCalled);
|
||||
do_check_false(FxAccountsUIGlue._signInFlowCalled)
|
||||
do_check_eq(result, "assertion");
|
||||
FxAccountsUIGlue._refreshAuthCalled = false;
|
||||
}
|
||||
).then(
|
||||
() => {
|
||||
deletedOnServer = true;
|
||||
FxAccountsManager.getAssertion("audience").then(
|
||||
(result) => {
|
||||
// For account deletion, the UIGlue's signin/signup is called.
|
||||
do_check_true(FxAccountsUIGlue._signInFlowCalled)
|
||||
do_check_false(FxAccountsUIGlue._refreshAuthCalled);
|
||||
do_check_eq(result, "assertion");
|
||||
deletedOnServer = false;
|
||||
passwordResetOnServer = false;
|
||||
FxAccountsUIGlue._reset()
|
||||
run_next_test();
|
||||
}
|
||||
);
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
add_test(function(test_getAssertion_refreshAuth_NaN) {
|
||||
do_print("= getAssertion refreshAuth NaN=");
|
||||
let gracePeriod = "NaN";
|
||||
|
Loading…
Reference in New Issue
Block a user