зеркало из https://github.com/mozilla/gecko-dev.git
Merge central to fx-team a=merge
This commit is contained in:
Коммит
44390984f4
|
@ -15,9 +15,9 @@
|
|||
<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="660a4701a86e748d13adeb4cb71ac8a8e8dd1ef6"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="c8cb0c0ebb8dd1f5c0c9037e38f8e4b237beb77b"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="509be3fac311d084ff31b83bbeb5108f69864a90"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="42b56ff9f40a572e61b63a660daddc72a7a7ffcb"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="adb24954bf8068f21705b570450475d183336b2d"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
|
|
|
@ -19,8 +19,8 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="660a4701a86e748d13adeb4cb71ac8a8e8dd1ef6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="509be3fac311d084ff31b83bbeb5108f69864a90"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="c8cb0c0ebb8dd1f5c0c9037e38f8e4b237beb77b"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="42b56ff9f40a572e61b63a660daddc72a7a7ffcb"/>
|
||||
<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="46e1877c0d88b085f7ebc5f432d5bb8f1e2d1f3b"/>
|
||||
|
|
|
@ -17,8 +17,8 @@
|
|||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="660a4701a86e748d13adeb4cb71ac8a8e8dd1ef6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="509be3fac311d084ff31b83bbeb5108f69864a90"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="c8cb0c0ebb8dd1f5c0c9037e38f8e4b237beb77b"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="42b56ff9f40a572e61b63a660daddc72a7a7ffcb"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="adb24954bf8068f21705b570450475d183336b2d"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="8a1ba73572c713e298ae53821d000fc3a5087b5f"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
|
|
|
@ -15,9 +15,9 @@
|
|||
<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="660a4701a86e748d13adeb4cb71ac8a8e8dd1ef6"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="c8cb0c0ebb8dd1f5c0c9037e38f8e4b237beb77b"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="509be3fac311d084ff31b83bbeb5108f69864a90"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="42b56ff9f40a572e61b63a660daddc72a7a7ffcb"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="adb24954bf8068f21705b570450475d183336b2d"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
|
|
|
@ -12,12 +12,12 @@
|
|||
<!--original fetch url was https://git.mozilla.org/releases-->
|
||||
<remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
|
||||
<!-- B2G specific things. -->
|
||||
<project name="platform_build" path="build" remote="b2g" revision="52775e03a2d8532429dff579cb2cd56718e488c3">
|
||||
<project name="platform_build" path="build" remote="b2g" revision="6b0721ca0e92788df30daf8f7a5fb2863544f9c8">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="660a4701a86e748d13adeb4cb71ac8a8e8dd1ef6"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="c8cb0c0ebb8dd1f5c0c9037e38f8e4b237beb77b"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="509be3fac311d084ff31b83bbeb5108f69864a90"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="42b56ff9f40a572e61b63a660daddc72a7a7ffcb"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="adb24954bf8068f21705b570450475d183336b2d"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
|
@ -25,128 +25,128 @@
|
|||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="8a1ba73572c713e298ae53821d000fc3a5087b5f"/>
|
||||
<!-- 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"/>
|
||||
<project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" revision="354496e8eddd28c743d8e02c02eeab02958367e6"/>
|
||||
<project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" revision="b37c91354272b7413a0dc058b7445e677921d39e"/>
|
||||
<project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" revision="a227c92e0170bcf2296a63386956946b0dd78ca7"/>
|
||||
<project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" revision="884626610186b6dbea52cec5194b1c4bcfe1cb98"/>
|
||||
<project groups="pdk,linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8" path="prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8" revision="29f9b82faa1af9730f52e933dca848546cbea84c"/>
|
||||
<project groups="linux" name="platform/prebuilts/python/linux-x86/2.7.5" path="prebuilts/python/linux-x86/2.7.5" revision="0c2ee5a39ca67d5fceeeee4b55baa3e9c01f0dca"/>
|
||||
<project name="device/common" path="device/common" revision="20de8dac0204c1a15ba305d0913749d8736455e6"/>
|
||||
<project name="device/sample" path="device/sample" revision="e6dc0e5648eeab3c1f7b7bccf2d277ba89cc5dd4"/>
|
||||
<project name="platform/abi/cpp" path="abi/cpp" revision="811d1ba9b99353d3d88378fd6d944d33f935a735"/>
|
||||
<project name="platform/bionic" path="bionic" revision="68e8555eea90ce70eabdaa8c9b2f00ddda103c4e"/>
|
||||
<project name="platform/bootable/recovery" path="bootable/recovery" revision="7ae254886b35f13b338b3c48bdc484e76329ba17"/>
|
||||
<project name="platform/external/aac" path="external/aac" revision="c5c637158b23360310d330905e354a1dcd1220a7"/>
|
||||
<project name="platform/external/bison" path="external/bison" revision="27b034c868a896f78154132910ebf279c14a7aea"/>
|
||||
<project name="platform/external/bluetooth/bluedroid" path="external/bluetooth/bluedroid" revision="3c0b9cd51d643e0bf6f01c6d8b07fce25e3b2778"/>
|
||||
<project name="platform/external/bsdiff" path="external/bsdiff" revision="7f634b9ed876d9d9b9a7e58c3e671b7a01ec411d"/>
|
||||
<project name="platform/external/bzip2" path="external/bzip2" revision="997e320d341281512b1b1c3a1087f87328c74453"/>
|
||||
<project name="platform/external/checkpolicy" path="external/checkpolicy" revision="f819e420440e14418927366148373537796173b7"/>
|
||||
<project name="platform/external/clang" path="external/clang" revision="5692adcdd1dec21baf7aef57249cc9a32de05314"/>
|
||||
<project name="platform/external/compiler-rt" path="external/compiler-rt" revision="e2565ddc676409d3cbf6b6a46c9fca6dfe953d5d"/>
|
||||
<project name="platform/external/dhcpcd" path="external/dhcpcd" revision="84e2cbce82c0e7374f75771c708336fcdf1ecefa"/>
|
||||
<project name="platform/external/dnsmasq" path="external/dnsmasq" revision="38895f25447b72f2749564fa4444616347d335e3"/>
|
||||
<project name="platform/external/e2fsprogs" path="external/e2fsprogs" revision="6bf16cd4eefe67583db6efd8ecf72571f5d8d249"/>
|
||||
<project name="platform/external/elfutils" path="external/elfutils" revision="17541cad868bfd18e6148d4fa3dc3a7d20a25732"/>
|
||||
<project name="platform/external/expat" path="external/expat" revision="f49624e0fef9915a3a8326b46e91cb4c464555e4"/>
|
||||
<project groups="pdk,linux" name="platform/prebuilts/clang/linux-x86/host/3.5" path="prebuilts/clang/linux-x86/host/3.5" revision="ffc05a232799fe8fcb3e47b7440b52b1fb4244c0"/>
|
||||
<project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" path="prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" revision="337e0ef5e40f02a1ae59b90db0548976c70a7226"/>
|
||||
<project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" revision="8af5ff6f5dced9eb5a8127459df6c75d24342204"/>
|
||||
<project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" revision="30915518fa7ea07166efedc191a4f40aef516fe7"/>
|
||||
<project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" revision="96eee58e3389fb05a835310d6a06a6ba4486097a"/>
|
||||
<project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" revision="7c8a46698171aa2e0be09edb43d15a6acf832770"/>
|
||||
<project groups="pdk,linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8" path="prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8" revision="24b2038be8a636fd4a5d21f0abae1e466b07bcf7"/>
|
||||
<project groups="linux" name="platform/prebuilts/python/linux-x86/2.7.5" path="prebuilts/python/linux-x86/2.7.5" revision="ab14644af0429dfb6744e9709f9ef46fb7bf73e4"/>
|
||||
<project name="device/common" path="device/common" revision="05f67c8cf7b9669da6f37f74b3388b594e319b84"/>
|
||||
<project name="device/sample" path="device/sample" revision="298675b60a633253434c4829339534c08292dc92"/>
|
||||
<project name="platform/abi/cpp" path="abi/cpp" revision="39fd88f57cec1dd6e9c70f85ab0c76587f7ba766"/>
|
||||
<project name="platform/bionic" path="bionic" revision="7741d30da4f0f0c15e6622ca75ad396e78eab7dd"/>
|
||||
<project name="platform/bootable/recovery" path="bootable/recovery" revision="c9ef7996198ad29e706b352cbb773a7dad5bdc5c"/>
|
||||
<project name="platform/external/aac" path="external/aac" revision="78fdf0627dd31f77fe71fde289512f749032a787"/>
|
||||
<project name="platform/external/bison" path="external/bison" revision="4efa7909d921823fbfcf85f5c64ad3578803e2ee"/>
|
||||
<project name="platform/external/bluetooth/bluedroid" path="external/bluetooth/bluedroid" revision="cdae70948d67a920e8847ad0323ff11f51dbcaf9"/>
|
||||
<project name="platform/external/bsdiff" path="external/bsdiff" revision="d7a2c5578467c3b8375943bee09c20a692d8d2a0"/>
|
||||
<project name="platform/external/bzip2" path="external/bzip2" revision="c41fb467156106c6274c12e1279fbd5340757667"/>
|
||||
<project name="platform/external/checkpolicy" path="external/checkpolicy" revision="a1d60ce948816137de49ea0737d9a9d6b54adab7"/>
|
||||
<project name="platform/external/clang" path="external/clang" revision="6c6bfc254506351c5753de7e2fe3eab6bca40d2b"/>
|
||||
<project name="platform/external/compiler-rt" path="external/compiler-rt" revision="3b8d597882284a3694b9bca7500ee9d9a4f02683"/>
|
||||
<project name="platform/external/dhcpcd" path="external/dhcpcd" revision="72519f06fc08fe450607e040544267cd0befdee3"/>
|
||||
<project name="platform/external/dnsmasq" path="external/dnsmasq" revision="6e8e5151469e8da0eadb894813201f5e87e7ad66"/>
|
||||
<project name="platform/external/e2fsprogs" path="external/e2fsprogs" revision="566faf84e682b1e8233ed9853c9a0a4dd8c3bc37"/>
|
||||
<project name="platform/external/elfutils" path="external/elfutils" revision="5084a43adc8ae0de74888842a47d33d66f3fd2ca"/>
|
||||
<project name="platform/external/expat" path="external/expat" revision="47e857874d4a893bc90288f98f392448151cf741"/>
|
||||
<project name="platform/external/f2fs-tools" path="external/f2fs-tools" revision="fc24ac8347630a14d62ffafa93a27ec3b81cc44b"/>
|
||||
<project name="platform/external/fdlibm" path="external/fdlibm" revision="de3b2c981c66345b51fbf0822e4058c36eecb9ac"/>
|
||||
<project name="platform/external/flac" path="external/flac" revision="4477379717f7b0fa20a8f0614f970c70d373cb7b"/>
|
||||
<project name="platform/external/freetype" path="external/freetype" revision="33a0a0c5b597e7b5ab2cada25ae411d9bb42ff26"/>
|
||||
<project name="platform/external/gcc-demangle" path="external/gcc-demangle" revision="2be5e099459d0deaee9f2f779870fdf003a105dc"/>
|
||||
<project name="platform/external/genext2fs" path="external/genext2fs" revision="30158c8359ddab07867c01a472b2a0afec3bd87b"/>
|
||||
<project name="platform/external/giflib" path="external/giflib" revision="81d8b32f20d35036f0ffd3f8388122a449252d28"/>
|
||||
<project name="platform/external/gtest" path="external/gtest" revision="f86535d49037cb8ba5fc65202a9d3ad7614e4647"/>
|
||||
<project name="platform/external/harfbuzz_ng" path="external/harfbuzz_ng" revision="37dfd64c0134cb4473b2750d1a54e29abeab0290"/>
|
||||
<project name="platform/external/icu" path="external/icu" revision="7a2a040f28d700f0f1538b442bef816b665214c9"/>
|
||||
<project name="platform/external/iproute2" path="external/iproute2" revision="3c143dd332acaaea50af2e9a3a0ea47cd235a807"/>
|
||||
<project name="platform/external/ipsec-tools" path="external/ipsec-tools" revision="003a6d9b6f990bfbf0e4f04dfdb2084eb52f2f05"/>
|
||||
<project name="platform/external/iptables" path="external/iptables" revision="33890e955960f8ac8f88c28beb779346b57e0c15"/>
|
||||
<project name="platform/external/jack" path="external/jack" revision="f416b56a51c2b47bdaa72b542973846b7b3d5cea"/>
|
||||
<project name="platform/external/jemalloc" path="external/jemalloc" revision="2dc8e0401cea426ec2524da2dacf6070b98d9bf7"/>
|
||||
<project name="platform/external/jhead" path="external/jhead" revision="cab94ace65c4ebb0ba466e2f884078454f5e14d8"/>
|
||||
<project name="platform/external/jpeg" path="external/jpeg" revision="c78f0d394e6a65cdf679a5c437a4092482a42972"/>
|
||||
<project name="platform/external/jsmn" path="external/jsmn" revision="b38b4fe9a246bf36b821c542d0712d8c38699ac0"/>
|
||||
<project name="platform/external/jsoncpp" path="external/jsoncpp" revision="d2c5c6cdb5e8315b8ad02f0f3259e67c89f82a21"/>
|
||||
<project name="platform/external/junit" path="external/junit" revision="ea4284c223ecedb4094af8fb1e44b8d7a453ad95"/>
|
||||
<project name="platform/external/libcxxabi" path="external/libcxxabi" revision="bb937c1004a8705f22422f8b96176e135471215c"/>
|
||||
<project name="platform/external/libcxx" path="external/libcxx" revision="4242ca3e7c035aebc9895d18c22fa3394577cbdf"/>
|
||||
<project name="platform/external/libgsm" path="external/libgsm" revision="e9d878fc0e5485544e54919a32d621d4281f8cc0"/>
|
||||
<project name="platform/external/liblzf" path="external/liblzf" revision="b61d5b6275ddb9688777dda6b3196fa6b671811e"/>
|
||||
<project name="platform/external/libnfc-nxp" path="external/libnfc-nxp" revision="84022905ba12dc0a71a38f652d4325447559ac0d"/>
|
||||
<project name="platform/external/libnl" path="external/libnl" revision="77a22ce82e6aca58206321558e5ef283c673e8c3"/>
|
||||
<project name="platform/external/libogg" path="external/libogg" revision="ce31af3deb35cfa7801907ab47dd567f7342f728"/>
|
||||
<project name="platform/external/libopus" path="external/libopus" revision="48641b8569f2e4706d0745b5392a1ea51959a7d2"/>
|
||||
<project name="platform/external/libpcap" path="external/libpcap" revision="2e6cfa7b97a305d36c9d7305e17bff1e89430c00"/>
|
||||
<project name="platform/external/libpng" path="external/libpng" revision="1ee9d65ed400cdd1865140e34ceac503c47f5697"/>
|
||||
<project name="platform/external/libselinux" path="external/libselinux" revision="5c3fe1dec7cd818dcd7af8742b7d9349359109dc"/>
|
||||
<project name="platform/external/libsepol" path="external/libsepol" revision="ebb551cc7b2db5af523758a5bae6b4336885f274"/>
|
||||
<project name="platform/external/libunwind" path="external/libunwind" revision="9a5b400cc8b62a8df95a22307b4ad9470e5699d2"/>
|
||||
<project name="platform/external/libvpx" path="external/libvpx" revision="ae97799c21f85b0b16e4c9720a45d5d10fccb552"/>
|
||||
<project name="platform/external/llvm" path="external/llvm" revision="4c69c3c662cf672e89f827aaab6bbb2eee4d3cea"/>
|
||||
<project name="platform/external/mdnsresponder" path="external/mdnsresponder" revision="c2361f084d4d2ef3ff5f89cd2b73122f6a729612"/>
|
||||
<project name="platform/external/mksh" path="external/mksh" revision="8b9324223df9b4e4754f9b13c1229f7e8c92fd5a"/>
|
||||
<project name="platform/external/netcat" path="external/netcat" revision="e81a29a522fe7df9c1803478de07d050dd82a71e"/>
|
||||
<project name="platform/external/openssl" path="external/openssl" revision="49e31f1f0e48744f3113bc36dee5182186251238"/>
|
||||
<project name="platform/external/pcre" path="external/pcre" revision="24cc1690dbc0525d42184db5781954414802413d"/>
|
||||
<project name="platform/external/protobuf" path="external/protobuf" revision="766926b875dac06bde2b96b0c3f8d28c8647a4c4"/>
|
||||
<project name="platform/external/safe-iop" path="external/safe-iop" revision="990aa0668849d1d88c4a12f9e0039a7981cf4c7a"/>
|
||||
<project name="platform/external/scrypt" path="external/scrypt" revision="4593ce16971f9704e7810052567aecf803f812b0"/>
|
||||
<project name="platform/external/sepolicy" path="external/sepolicy" revision="c105aabfdd2f3efe02ed8c5b51025b55e54b632d"/>
|
||||
<project name="platform/external/sfntly" path="external/sfntly" revision="3ab9ff62deba8ec0b6de91c675cac39e0b17fbd3"/>
|
||||
<project name="platform/external/skia" path="external/skia" revision="72b56c79228338ddd5ec5b70bf5d42154f592705"/>
|
||||
<project name="platform/external/sonivox" path="external/sonivox" revision="425b4dd3a2994e262f7c1f0e1ed5ebe3ece41eea"/>
|
||||
<project name="platform/external/speex" path="external/speex" revision="fc41a0b3eda8aba60d213288ac845ad7610144c9"/>
|
||||
<project name="platform/external/sqlite" path="external/sqlite" revision="933fe9d087995054be1a90c969bb2ae538f52a0f"/>
|
||||
<project name="platform/external/stlport" path="external/stlport" revision="d2c2e9e77ff8af17dbd8bafb10b6882d16f877fb"/>
|
||||
<project name="platform/external/strace" path="external/strace" revision="13aaaead6e65b6dcb55c4d6b16588577804f0d1a"/>
|
||||
<project name="platform/external/svox" path="external/svox" revision="04dc7d54a9f6c4a9c943cf6440ad45823fbc4e3f"/>
|
||||
<project name="platform/external/tagsoup" path="external/tagsoup" revision="ae474049a3f8129316266bc6aac3337c9a135a29"/>
|
||||
<project name="platform/external/tcpdump" path="external/tcpdump" revision="9f6a22df2778388d8992b6c3bbaef412b35d583b"/>
|
||||
<project name="platform/external/tinyalsa" path="external/tinyalsa" revision="c9c11a4e003f1ded33fbfde0a4bae032b0538235"/>
|
||||
<project name="platform/external/tinycompress" path="external/tinycompress" revision="cfc3e36e320bcb46da2dda9f94b2852cb76c61c5"/>
|
||||
<project name="platform/external/tinyxml2" path="external/tinyxml2" revision="cb31036a6e8213d59646dcee369e63dd4023b732"/>
|
||||
<project name="platform/external/tinyxml" path="external/tinyxml" revision="c758d7fa7252c2690838b18eb92c796dd1698a8e"/>
|
||||
<project name="platform/external/tremolo" path="external/tremolo" revision="2e50b37fd997644ebb1b769f6963977a129a0578"/>
|
||||
<project name="platform/external/webp" path="external/webp" revision="f6fc76c4baeeacfc933e75ad14e721b742c0c99b"/>
|
||||
<project name="platform/external/webrtc" path="external/webrtc" revision="701d8ae1fe80514e8be0bb8e481e309bed8baf92"/>
|
||||
<project name="platform/external/yaffs2" path="external/yaffs2" revision="2da1900eb304796e96c1b7575163b0489fc2eb80"/>
|
||||
<project name="platform/external/zlib" path="external/zlib" revision="78dd4cb86e1c4e6a644c2222abe0f53e739bf868"/>
|
||||
<project name="platform/external/zopfli" path="external/zopfli" revision="139e51d6095b5f89dfdd9bc5d33b35500cd7869a"/>
|
||||
<project name="platform/frameworks/native" path="frameworks/native" revision="a0c1c949e35a44aa9018d1b4803cb2d833c16d59"/>
|
||||
<project name="platform/frameworks/opt/emoji" path="frameworks/opt/emoji" revision="4af3e0b694fa015b2fed61f4508cf01fab2f58b9"/>
|
||||
<project name="platform/hardware/libhardware" path="hardware/libhardware" revision="7ed97eeed061e95b466f24693c2f0120f40e2bf5"/>
|
||||
<project name="platform/hardware/libhardware_legacy" path="hardware/libhardware_legacy" revision="a9a2f3f3f17b4e1ab0d3b00a67b4c5250e26194f"/>
|
||||
<project name="platform/libcore" path="libcore" revision="1a07f00d8163f497a785a3285ec55fe551ba95c1"/>
|
||||
<project name="platform/libnativehelper" path="libnativehelper" revision="4834b58ed7af3ee69523177e00e55603ac90ed50"/>
|
||||
<project name="platform/ndk" path="ndk" revision="869c05cab7b4315c2bc607493db3f5b18ead2580"/>
|
||||
<project name="platform_prebuilts_misc" path="prebuilts/misc" remote="b2g" revision="da8b660db117e2a69a7624bfdca2f02cad397f2e"/>
|
||||
<project name="platform/prebuilts/ndk" path="prebuilts/ndk" revision="5fd638a4a0ff3677fc3c970fab038d6db1bb7665"/>
|
||||
<project name="platform/external/fdlibm" path="external/fdlibm" revision="f24510089e8b5cb533c0406fd2e9c5a8eb1b201b"/>
|
||||
<project name="platform/external/flac" path="external/flac" revision="ae2004f637dd0eb68d763f441d3ff1cf285d42b4"/>
|
||||
<project name="platform/external/freetype" path="external/freetype" revision="a177e10e69985dc9640b89f615e1c0b61fb4f0f4"/>
|
||||
<project name="platform/external/gcc-demangle" path="external/gcc-demangle" revision="9d1a7f107acea987ed2440c0a310a6c42f667bd7"/>
|
||||
<project name="platform/external/genext2fs" path="external/genext2fs" revision="c7e3aae061a272caa34e5a465edd9927cde42ac8"/>
|
||||
<project name="platform/external/giflib" path="external/giflib" revision="f0f278e928db903456cbbc2dfff2a678c31a9d27"/>
|
||||
<project name="platform/external/gtest" path="external/gtest" revision="5d13a30f9978eb09254ebc83ae51d6a730eec215"/>
|
||||
<project name="platform/external/harfbuzz_ng" path="external/harfbuzz_ng" revision="647fa898029679d4fac6958332c88c5f3f169439"/>
|
||||
<project name="platform/external/icu" path="external/icu" revision="a41b209dc1f9836733c59a30e862784e8895ac7c"/>
|
||||
<project name="platform/external/iproute2" path="external/iproute2" revision="acf444b6a524b4bce5b7cfe81b29e2839ff6e508"/>
|
||||
<project name="platform/external/ipsec-tools" path="external/ipsec-tools" revision="bf460d6fcb58d7f8e95f5d3ab9ffa2e7e16c2957"/>
|
||||
<project name="platform/external/iptables" path="external/iptables" revision="11beff4f1ad782fd1d8e5c1857f2c2088abb42f6"/>
|
||||
<project name="platform/external/jack" path="external/jack" revision="cd80e83b301ac9c5a845d8d01dc73084891cd19d"/>
|
||||
<project name="platform/external/jemalloc" path="external/jemalloc" revision="a6a05e48b628346ec4342f8b6d1c3d0a5987236e"/>
|
||||
<project name="platform/external/jhead" path="external/jhead" revision="3b6bb83af87698537d150ee004ba27720af50f54"/>
|
||||
<project name="platform/external/jpeg" path="external/jpeg" revision="b5c22f7648e1b03241abb05733aec47e2bf66462"/>
|
||||
<project name="platform/external/jsmn" path="external/jsmn" revision="646c4a36fd8cdb1ecd2080963bd26d9e245473c5"/>
|
||||
<project name="platform/external/jsoncpp" path="external/jsoncpp" revision="d9d8c51470b0cd2b95219c6b596ef90ae7915b8e"/>
|
||||
<project name="platform/external/junit" path="external/junit" revision="a9d933b7f8f42007de21bc674a61d491e14b48df"/>
|
||||
<project name="platform/external/libcxxabi" path="external/libcxxabi" revision="31349d4fd0a2ee4744d1cade9fa774dd2213be80"/>
|
||||
<project name="platform/external/libcxx" path="external/libcxx" revision="7cff60f9e680dc58c9a913eddc049946e3616265"/>
|
||||
<project name="platform/external/libgsm" path="external/libgsm" revision="7f76ac798f682fed4662c789010050789eabee89"/>
|
||||
<project name="platform/external/liblzf" path="external/liblzf" revision="0e6384fa203d8c7499fe64c9e93930df8e50cc99"/>
|
||||
<project name="platform/external/libnfc-nxp" path="external/libnfc-nxp" revision="13c47f6dfcd78c59243e997b5df30c5155949d59"/>
|
||||
<project name="platform/external/libnl" path="external/libnl" revision="b1e000e9a7b0048a5e8335a32125b405bd77c53b"/>
|
||||
<project name="platform/external/libogg" path="external/libogg" revision="9a2354608fdae6e105b28d4456a94146e41616c7"/>
|
||||
<project name="platform/external/libopus" path="external/libopus" revision="46be742257e102568f59c3ce18e322cf0b258799"/>
|
||||
<project name="platform/external/libpcap" path="external/libpcap" revision="03c8b18ba58ac3347c18875779e162c75c652715"/>
|
||||
<project name="platform/external/libpng" path="external/libpng" revision="8eac982ec2415fbc83e5a61899e0ca7eba4fe96d"/>
|
||||
<project name="platform/external/libselinux" path="external/libselinux" revision="317bc4b75ea40dfb5988c12f607505a86c6c2823"/>
|
||||
<project name="platform/external/libsepol" path="external/libsepol" revision="24b924ffd20dbf7359a9e15a10a8d1cfd6309597"/>
|
||||
<project name="platform/external/libunwind" path="external/libunwind" revision="e3fa64fe20e4eaf13c2231727158bd5fac4e53ec"/>
|
||||
<project name="platform/external/libvpx" path="external/libvpx" revision="652843c7218cdfcd42c98a839b72941d0e4696ba"/>
|
||||
<project name="platform/external/llvm" path="external/llvm" revision="63e3c6329893697af239dae0ddab843a3e1623a3"/>
|
||||
<project name="platform/external/mdnsresponder" path="external/mdnsresponder" revision="32a5f67c10e0b87cf95bbbaad489b8e3f098eb01"/>
|
||||
<project name="platform/external/mksh" path="external/mksh" revision="c452c566cd6face953c9e33d01c4df652d39fdf6"/>
|
||||
<project name="platform/external/netcat" path="external/netcat" revision="00d9d6b1aa7772c96878db17d556f29150705be8"/>
|
||||
<project name="platform/external/openssl" path="external/openssl" revision="bf4112b16f0ede8128ba7ff3c17a0056834b7c75"/>
|
||||
<project name="platform/external/pcre" path="external/pcre" revision="89b3b9780dbdd7c682b9bf2efd0f476a1ebc5d33"/>
|
||||
<project name="platform/external/protobuf" path="external/protobuf" revision="cdb14929d7c934944079ce070f5eb2f9459f824c"/>
|
||||
<project name="platform/external/safe-iop" path="external/safe-iop" revision="33d0429591d345687755c25f23ea2e46df5cd293"/>
|
||||
<project name="platform/external/scrypt" path="external/scrypt" revision="d809e38af0d89747cde00970271fb64d42333302"/>
|
||||
<project name="platform/external/sepolicy" path="external/sepolicy" revision="bb16e19f8bb7a2fe6bbd4b6e0bebf465fdd0fc30"/>
|
||||
<project name="platform/external/sfntly" path="external/sfntly" revision="d2bab207acad60e098d0652b5ed7348c96a249f3"/>
|
||||
<project name="platform/external/skia" path="external/skia" revision="b0fe7c355d4d95ff89b8e9e459285fe2b98e366d"/>
|
||||
<project name="platform/external/sonivox" path="external/sonivox" revision="3d04f03d824d5ea8835e577785b51022820ae763"/>
|
||||
<project name="platform/external/speex" path="external/speex" revision="9d73341cd881c415e6fce726ea4918654cd03145"/>
|
||||
<project name="platform/external/sqlite" path="external/sqlite" revision="2394fd03445b9496025558d4e48a54c09180e132"/>
|
||||
<project name="platform/external/stlport" path="external/stlport" revision="49f98215d1dea7f96f7560528bc8528570e2e05b"/>
|
||||
<project name="platform/external/strace" path="external/strace" revision="a093fa84778892c96159ccee02dc8d6c4378a124"/>
|
||||
<project name="platform/external/svox" path="external/svox" revision="7543f63ace85c9812dfc5263d63ed190eebb7f1c"/>
|
||||
<project name="platform/external/tagsoup" path="external/tagsoup" revision="5ad81cc518df943dbff3a566f3db5a3aae4b3098"/>
|
||||
<project name="platform/external/tcpdump" path="external/tcpdump" revision="f28770c517d9ca78bf25779d833da2d8a3aa1c61"/>
|
||||
<project name="platform/external/tinyalsa" path="external/tinyalsa" revision="73444308ffa76f7df107c9b5c8eb657d2a212017"/>
|
||||
<project name="platform/external/tinycompress" path="external/tinycompress" revision="d65aa7ba2e7548452906d3d61ee03c94cc64f25d"/>
|
||||
<project name="platform/external/tinyxml2" path="external/tinyxml2" revision="ea87469657dd498dd76ea01b35daab9d48503a3c"/>
|
||||
<project name="platform/external/tinyxml" path="external/tinyxml" revision="d09b587fe9bd7f1524d434c15941a5483c2d7046"/>
|
||||
<project name="platform/external/tremolo" path="external/tremolo" revision="7954026e4cbeeaa4bb7d7e2c82a6556ea34c58ab"/>
|
||||
<project name="platform/external/webp" path="external/webp" revision="5df3d5cb644f301e4a0c78b939e411b061a36558"/>
|
||||
<project name="platform/external/webrtc" path="external/webrtc" revision="de40077759a01a02a3e21b30ea0755f2d6fc4e09"/>
|
||||
<project name="platform/external/yaffs2" path="external/yaffs2" revision="b2aadfdf9482777530efac1fb13a25ff401e78ee"/>
|
||||
<project name="platform/external/zlib" path="external/zlib" revision="a9dc8ffc4b43f0ff455d52fc5a889e92794962a4"/>
|
||||
<project name="platform/external/zopfli" path="external/zopfli" revision="8b994159cf3fc74a58e42fca72bc6849e6027912"/>
|
||||
<project name="platform/frameworks/native" path="frameworks/native" revision="c39bd4ee1f4b3ef92bf7a45824b77703f40a5fd4"/>
|
||||
<project name="platform/frameworks/opt/emoji" path="frameworks/opt/emoji" revision="2293192ed15b88ebe962fb5377dd197200e6472b"/>
|
||||
<project name="platform/hardware/libhardware" path="hardware/libhardware" revision="f5feb2aa2047fbaf13be448fe8d06bff3ccf7b84"/>
|
||||
<project name="platform/hardware/libhardware_legacy" path="hardware/libhardware_legacy" revision="8d075b4d5e9e032b18fbc8b5def63827d1b4a30d"/>
|
||||
<project name="platform/libcore" path="libcore" revision="bdec7d684c083760bef7bc4ba2429cceccaaf7d0"/>
|
||||
<project name="platform/libnativehelper" path="libnativehelper" revision="27bcc086236cedd31c056303e255c6d0ea3d4a50"/>
|
||||
<project name="platform/ndk" path="ndk" revision="42e85f81cc6c74af145056ee80b06e520cccb9a7"/>
|
||||
<project name="platform_prebuilts_misc" path="prebuilts/misc" remote="b2g" revision="f105a2d852c988fb1aa16a1e758ca7f93dd54fe9"/>
|
||||
<project name="platform/prebuilts/ndk" path="prebuilts/ndk" revision="1d080491f26dfdfd76d5bbc3e6b40c660e8565af"/>
|
||||
<project name="platform_prebuilts_qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="2c0d193349c55337e37196a7f2d5cef37753ed3e"/>
|
||||
<project name="platform/prebuilts/sdk" path="prebuilts/sdk" revision="a982f43b7f2d5916dc3a859667a8ba78e50b6202"/>
|
||||
<project name="platform/prebuilts/tools" path="prebuilts/tools" revision="6e18b61ee446bdd9880c07ae84197a087490c2e5"/>
|
||||
<project name="platform/prebuilts/sdk" path="prebuilts/sdk" revision="61a10cbd19d6b7fc052a8cb92dfa1b37b93754f3"/>
|
||||
<project name="platform/prebuilts/tools" path="prebuilts/tools" revision="9e892a67a01671f312c76b0880dedaa6ba478148"/>
|
||||
<project name="platform_system_bluetoothd" path="system/bluetoothd" remote="b2g" revision="48d2332e6d8400cdc0de273ceff2abe8aaababf8"/>
|
||||
<project name="platform/system/extras" path="system/extras" revision="18f7c51415917eb0e21b30f220db7bd0be4130a7"/>
|
||||
<project name="platform/system/extras" path="system/extras" revision="47fa016e2248b80aebd5928402c7409f8e0ca64e"/>
|
||||
<project name="platform_system_libfdio" path="system/libfdio" remote="b2g" revision="3c5405863d2002f665ef2b901abb3853c420129b"/>
|
||||
<project name="platform/system/media" path="system/media" revision="adf8fbacf7395858884690df5e3ce46bc75fa683"/>
|
||||
<project name="platform/system/netd" path="system/netd" revision="655392625db084a7122d65a15acf74db7f1da7f7"/>
|
||||
<project name="platform/system/security" path="system/security" revision="e6b3fdd892ad994ec3fd0b8959d630e31881801b"/>
|
||||
<project name="platform/system/vold" path="system/vold" revision="eb59d2afd5f6e1cbab2ef985a8dd1c7105b499e8"/>
|
||||
<project name="platform_frameworks_av" path="frameworks/av" remote="b2g" revision="ea531874885eed7f68802048218ed86dde927f58"/>
|
||||
<project name="platform_frameworks_base" path="frameworks/base" remote="b2g" revision="df7e0cfbbc7e954ed26c73ac17832a5ff035f046"/>
|
||||
<project name="platform_frameworks_wilhelm" path="frameworks/wilhelm" remote="b2g" revision="73f7e7f12c8c5459f7a39e2fa343f083c942864d"/>
|
||||
<project name="platform_system_core" path="system/core" remote="b2g" revision="4df51d9abf6cc9a6ec49b965e621699e0e6dc4fb"/>
|
||||
<default remote="caf" revision="refs/tags/android-5.0.0_r6" sync-j="4"/>
|
||||
<project name="platform/system/media" path="system/media" revision="70bfebc66d9c6a4c614a8c7efde90e8e7e1d8641"/>
|
||||
<project name="platform/system/netd" path="system/netd" revision="d113f0ceefa9ce29eb3c86e2d23c7417a70b4048"/>
|
||||
<project name="platform/system/security" path="system/security" revision="94e1617f6f2bc2286d005e79cffa6bf0721b06b3"/>
|
||||
<project name="platform/system/vold" path="system/vold" revision="c065e301e38ea0c241164e2a373e1ecefbeaf2ec"/>
|
||||
<project name="platform_frameworks_av" path="frameworks/av" remote="b2g" revision="e372b6a77f71c8f9fbbf6f8adbfa7bf8ef45dc60"/>
|
||||
<project name="platform_frameworks_base" path="frameworks/base" remote="b2g" revision="04e26ebdc36ca83f4ee3e9e2082b3fcf04c5b971"/>
|
||||
<project name="platform_frameworks_wilhelm" path="frameworks/wilhelm" remote="b2g" revision="0dbf5baafadf6d233c0a29e392fa3293f0121673"/>
|
||||
<project name="platform_system_core" path="system/core" remote="b2g" revision="f594bc64eacac490857748b1139ffcb34c856bbd"/>
|
||||
<default remote="caf" revision="refs/tags/android-5.1.0_r1" sync-j="4"/>
|
||||
<!-- Emulator specific things -->
|
||||
<project name="device/generic/armv7-a-neon" path="device/generic/armv7-a-neon" revision="ba62cc8b78c30d36181b8060a2016cc8da166236"/>
|
||||
<project name="device_generic_goldfish" path="device/generic/goldfish" remote="b2g" revision="1b9f134d62536c5727575d1f0a5bd4eeb4747d66"/>
|
||||
<project name="device/generic/armv7-a-neon" path="device/generic/armv7-a-neon" revision="fe7df1bc8dd0fd71571505d7be1c31a4ad1e40fb"/>
|
||||
<project name="device_generic_goldfish" path="device/generic/goldfish" remote="b2g" revision="48132ec0b0dfe9fc29c7c3f0e799066be8999198"/>
|
||||
<!-- external/qemu for emulator-l need to be updated in bug-1121378 -->
|
||||
<project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="7639c5c496ffd207bb627f2a59b2c5203ae6fefc"/>
|
||||
<project name="platform/external/wpa_supplicant_8" path="external/wpa_supplicant_8" revision="16abda2258c9aa1ed78f00bb0a9b2b43b4cb919e"/>
|
||||
<project name="platform/development" path="development" revision="7ec1ce5e75f943a4a673aa12d8177d5cf2c0a4cf"/>
|
||||
<project name="android-sdk" path="sdk" remote="b2g" revision="94704df982a90d2ab74bd620d54155d148c415b2"/>
|
||||
<project name="platform/external/wpa_supplicant_8" path="external/wpa_supplicant_8" revision="c15b6e266136cd0cdd9b94d0bbed1962d9dd6672"/>
|
||||
<project name="platform/development" path="development" revision="0c51f6e0aa2ee57fcb75ec3b2ff6bf754cece63e"/>
|
||||
<project name="android-sdk" path="sdk" remote="b2g" revision="ff4190dc603f62a7caa48342aa268acf99863c5c"/>
|
||||
<!-- hardware-ril for emulator-l need to be updated in bug-1113054 -->
|
||||
<project name="platform/hardware/ril" path="hardware/ril" revision="71dfa8228ad0d6cdf6bac0426ac59404ab74b7f3"/>
|
||||
<project name="platform/hardware/ril" path="hardware/ril" revision="e00d716e7e3d31729f75399855b6921e90cb0b66"/>
|
||||
</manifest>
|
||||
|
|
|
@ -19,8 +19,8 @@
|
|||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="fake-dalvik" path="dalvik" remote="b2g" revision="ca1f327d5acc198bb4be62fa51db2c039032c9ce"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="660a4701a86e748d13adeb4cb71ac8a8e8dd1ef6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="509be3fac311d084ff31b83bbeb5108f69864a90"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="c8cb0c0ebb8dd1f5c0c9037e38f8e4b237beb77b"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="42b56ff9f40a572e61b63a660daddc72a7a7ffcb"/>
|
||||
<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="46e1877c0d88b085f7ebc5f432d5bb8f1e2d1f3b"/>
|
||||
|
|
|
@ -15,9 +15,9 @@
|
|||
<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="660a4701a86e748d13adeb4cb71ac8a8e8dd1ef6"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="c8cb0c0ebb8dd1f5c0c9037e38f8e4b237beb77b"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="509be3fac311d084ff31b83bbeb5108f69864a90"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="42b56ff9f40a572e61b63a660daddc72a7a7ffcb"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="adb24954bf8068f21705b570450475d183336b2d"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
|
|
|
@ -17,8 +17,8 @@
|
|||
</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="660a4701a86e748d13adeb4cb71ac8a8e8dd1ef6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="509be3fac311d084ff31b83bbeb5108f69864a90"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="c8cb0c0ebb8dd1f5c0c9037e38f8e4b237beb77b"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="42b56ff9f40a572e61b63a660daddc72a7a7ffcb"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="adb24954bf8068f21705b570450475d183336b2d"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="8a1ba73572c713e298ae53821d000fc3a5087b5f"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
{
|
||||
"git": {
|
||||
"git_revision": "660a4701a86e748d13adeb4cb71ac8a8e8dd1ef6",
|
||||
"git_revision": "c8cb0c0ebb8dd1f5c0c9037e38f8e4b237beb77b",
|
||||
"remote": "https://git.mozilla.org/releases/gaia.git",
|
||||
"branch": ""
|
||||
},
|
||||
"revision": "d75fe24ddd89df106b72377f2c632dc66e3dc40e",
|
||||
"revision": "f9a4193e82db33f7717a939b769b0b90975231fe",
|
||||
"repo_path": "integration/gaia-central"
|
||||
}
|
||||
|
|
|
@ -17,8 +17,8 @@
|
|||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="660a4701a86e748d13adeb4cb71ac8a8e8dd1ef6"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="509be3fac311d084ff31b83bbeb5108f69864a90"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="c8cb0c0ebb8dd1f5c0c9037e38f8e4b237beb77b"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="42b56ff9f40a572e61b63a660daddc72a7a7ffcb"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="adb24954bf8068f21705b570450475d183336b2d"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="8a1ba73572c713e298ae53821d000fc3a5087b5f"/>
|
||||
<project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/>
|
||||
|
|
|
@ -12,12 +12,12 @@
|
|||
<!--original fetch url was https://git.mozilla.org/releases-->
|
||||
<remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
|
||||
<!-- B2G specific things. -->
|
||||
<project name="platform_build" path="build" remote="b2g" revision="52775e03a2d8532429dff579cb2cd56718e488c3">
|
||||
<project name="platform_build" path="build" remote="b2g" revision="6b0721ca0e92788df30daf8f7a5fb2863544f9c8">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="660a4701a86e748d13adeb4cb71ac8a8e8dd1ef6"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="c8cb0c0ebb8dd1f5c0c9037e38f8e4b237beb77b"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="509be3fac311d084ff31b83bbeb5108f69864a90"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="42b56ff9f40a572e61b63a660daddc72a7a7ffcb"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="adb24954bf8068f21705b570450475d183336b2d"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
|
@ -25,136 +25,136 @@
|
|||
<project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="8a1ba73572c713e298ae53821d000fc3a5087b5f"/>
|
||||
<!-- 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"/>
|
||||
<project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" revision="354496e8eddd28c743d8e02c02eeab02958367e6"/>
|
||||
<project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" revision="b37c91354272b7413a0dc058b7445e677921d39e"/>
|
||||
<project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" revision="a227c92e0170bcf2296a63386956946b0dd78ca7"/>
|
||||
<project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" revision="884626610186b6dbea52cec5194b1c4bcfe1cb98"/>
|
||||
<project groups="pdk,linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8" path="prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8" revision="29f9b82faa1af9730f52e933dca848546cbea84c"/>
|
||||
<project groups="linux" name="platform/prebuilts/python/linux-x86/2.7.5" path="prebuilts/python/linux-x86/2.7.5" revision="0c2ee5a39ca67d5fceeeee4b55baa3e9c01f0dca"/>
|
||||
<project name="device/common" path="device/common" revision="20de8dac0204c1a15ba305d0913749d8736455e6"/>
|
||||
<project name="device/sample" path="device/sample" revision="e6dc0e5648eeab3c1f7b7bccf2d277ba89cc5dd4"/>
|
||||
<project name="platform/abi/cpp" path="abi/cpp" revision="811d1ba9b99353d3d88378fd6d944d33f935a735"/>
|
||||
<project name="platform/bionic" path="bionic" revision="68e8555eea90ce70eabdaa8c9b2f00ddda103c4e"/>
|
||||
<project name="platform/bootable/recovery" path="bootable/recovery" revision="7ae254886b35f13b338b3c48bdc484e76329ba17"/>
|
||||
<project name="platform/external/aac" path="external/aac" revision="c5c637158b23360310d330905e354a1dcd1220a7"/>
|
||||
<project name="platform/external/bison" path="external/bison" revision="27b034c868a896f78154132910ebf279c14a7aea"/>
|
||||
<project name="platform/external/bluetooth/bluedroid" path="external/bluetooth/bluedroid" revision="3c0b9cd51d643e0bf6f01c6d8b07fce25e3b2778"/>
|
||||
<project name="platform/external/bsdiff" path="external/bsdiff" revision="7f634b9ed876d9d9b9a7e58c3e671b7a01ec411d"/>
|
||||
<project name="platform/external/bzip2" path="external/bzip2" revision="997e320d341281512b1b1c3a1087f87328c74453"/>
|
||||
<project name="platform/external/checkpolicy" path="external/checkpolicy" revision="f819e420440e14418927366148373537796173b7"/>
|
||||
<project name="platform/external/clang" path="external/clang" revision="5692adcdd1dec21baf7aef57249cc9a32de05314"/>
|
||||
<project name="platform/external/compiler-rt" path="external/compiler-rt" revision="e2565ddc676409d3cbf6b6a46c9fca6dfe953d5d"/>
|
||||
<project name="platform/external/dhcpcd" path="external/dhcpcd" revision="84e2cbce82c0e7374f75771c708336fcdf1ecefa"/>
|
||||
<project name="platform/external/dnsmasq" path="external/dnsmasq" revision="38895f25447b72f2749564fa4444616347d335e3"/>
|
||||
<project name="platform/external/e2fsprogs" path="external/e2fsprogs" revision="6bf16cd4eefe67583db6efd8ecf72571f5d8d249"/>
|
||||
<project name="platform/external/elfutils" path="external/elfutils" revision="17541cad868bfd18e6148d4fa3dc3a7d20a25732"/>
|
||||
<project name="platform/external/expat" path="external/expat" revision="f49624e0fef9915a3a8326b46e91cb4c464555e4"/>
|
||||
<project groups="pdk,linux" name="platform/prebuilts/clang/linux-x86/host/3.5" path="prebuilts/clang/linux-x86/host/3.5" revision="ffc05a232799fe8fcb3e47b7440b52b1fb4244c0"/>
|
||||
<project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" path="prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.8" revision="337e0ef5e40f02a1ae59b90db0548976c70a7226"/>
|
||||
<project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-eabi-4.8" revision="8af5ff6f5dced9eb5a8127459df6c75d24342204"/>
|
||||
<project groups="pdk,linux,arm" name="platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" path="prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.8" revision="30915518fa7ea07166efedc191a4f40aef516fe7"/>
|
||||
<project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6" revision="96eee58e3389fb05a835310d6a06a6ba4486097a"/>
|
||||
<project groups="pdk,linux" name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8" revision="7c8a46698171aa2e0be09edb43d15a6acf832770"/>
|
||||
<project groups="pdk,linux,x86" name="platform/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8" path="prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.8" revision="24b2038be8a636fd4a5d21f0abae1e466b07bcf7"/>
|
||||
<project groups="linux" name="platform/prebuilts/python/linux-x86/2.7.5" path="prebuilts/python/linux-x86/2.7.5" revision="ab14644af0429dfb6744e9709f9ef46fb7bf73e4"/>
|
||||
<project name="device/common" path="device/common" revision="05f67c8cf7b9669da6f37f74b3388b594e319b84"/>
|
||||
<project name="device/sample" path="device/sample" revision="298675b60a633253434c4829339534c08292dc92"/>
|
||||
<project name="platform/abi/cpp" path="abi/cpp" revision="39fd88f57cec1dd6e9c70f85ab0c76587f7ba766"/>
|
||||
<project name="platform/bionic" path="bionic" revision="7741d30da4f0f0c15e6622ca75ad396e78eab7dd"/>
|
||||
<project name="platform/bootable/recovery" path="bootable/recovery" revision="c9ef7996198ad29e706b352cbb773a7dad5bdc5c"/>
|
||||
<project name="platform/external/aac" path="external/aac" revision="78fdf0627dd31f77fe71fde289512f749032a787"/>
|
||||
<project name="platform/external/bison" path="external/bison" revision="4efa7909d921823fbfcf85f5c64ad3578803e2ee"/>
|
||||
<project name="platform/external/bluetooth/bluedroid" path="external/bluetooth/bluedroid" revision="cdae70948d67a920e8847ad0323ff11f51dbcaf9"/>
|
||||
<project name="platform/external/bsdiff" path="external/bsdiff" revision="d7a2c5578467c3b8375943bee09c20a692d8d2a0"/>
|
||||
<project name="platform/external/bzip2" path="external/bzip2" revision="c41fb467156106c6274c12e1279fbd5340757667"/>
|
||||
<project name="platform/external/checkpolicy" path="external/checkpolicy" revision="a1d60ce948816137de49ea0737d9a9d6b54adab7"/>
|
||||
<project name="platform/external/clang" path="external/clang" revision="6c6bfc254506351c5753de7e2fe3eab6bca40d2b"/>
|
||||
<project name="platform/external/compiler-rt" path="external/compiler-rt" revision="3b8d597882284a3694b9bca7500ee9d9a4f02683"/>
|
||||
<project name="platform/external/dhcpcd" path="external/dhcpcd" revision="72519f06fc08fe450607e040544267cd0befdee3"/>
|
||||
<project name="platform/external/dnsmasq" path="external/dnsmasq" revision="6e8e5151469e8da0eadb894813201f5e87e7ad66"/>
|
||||
<project name="platform/external/e2fsprogs" path="external/e2fsprogs" revision="566faf84e682b1e8233ed9853c9a0a4dd8c3bc37"/>
|
||||
<project name="platform/external/elfutils" path="external/elfutils" revision="5084a43adc8ae0de74888842a47d33d66f3fd2ca"/>
|
||||
<project name="platform/external/expat" path="external/expat" revision="47e857874d4a893bc90288f98f392448151cf741"/>
|
||||
<project name="platform/external/f2fs-tools" path="external/f2fs-tools" revision="fc24ac8347630a14d62ffafa93a27ec3b81cc44b"/>
|
||||
<project name="platform/external/fdlibm" path="external/fdlibm" revision="de3b2c981c66345b51fbf0822e4058c36eecb9ac"/>
|
||||
<project name="platform/external/flac" path="external/flac" revision="4477379717f7b0fa20a8f0614f970c70d373cb7b"/>
|
||||
<project name="platform/external/freetype" path="external/freetype" revision="33a0a0c5b597e7b5ab2cada25ae411d9bb42ff26"/>
|
||||
<project name="platform/external/gcc-demangle" path="external/gcc-demangle" revision="2be5e099459d0deaee9f2f779870fdf003a105dc"/>
|
||||
<project name="platform/external/genext2fs" path="external/genext2fs" revision="30158c8359ddab07867c01a472b2a0afec3bd87b"/>
|
||||
<project name="platform/external/giflib" path="external/giflib" revision="81d8b32f20d35036f0ffd3f8388122a449252d28"/>
|
||||
<project name="platform/external/gtest" path="external/gtest" revision="f86535d49037cb8ba5fc65202a9d3ad7614e4647"/>
|
||||
<project name="platform/external/harfbuzz_ng" path="external/harfbuzz_ng" revision="37dfd64c0134cb4473b2750d1a54e29abeab0290"/>
|
||||
<project name="platform/external/icu" path="external/icu" revision="7a2a040f28d700f0f1538b442bef816b665214c9"/>
|
||||
<project name="platform/external/iproute2" path="external/iproute2" revision="3c143dd332acaaea50af2e9a3a0ea47cd235a807"/>
|
||||
<project name="platform/external/ipsec-tools" path="external/ipsec-tools" revision="003a6d9b6f990bfbf0e4f04dfdb2084eb52f2f05"/>
|
||||
<project name="platform/external/iptables" path="external/iptables" revision="33890e955960f8ac8f88c28beb779346b57e0c15"/>
|
||||
<project name="platform/external/jack" path="external/jack" revision="f416b56a51c2b47bdaa72b542973846b7b3d5cea"/>
|
||||
<project name="platform/external/jemalloc" path="external/jemalloc" revision="2dc8e0401cea426ec2524da2dacf6070b98d9bf7"/>
|
||||
<project name="platform/external/jhead" path="external/jhead" revision="cab94ace65c4ebb0ba466e2f884078454f5e14d8"/>
|
||||
<project name="platform/external/jpeg" path="external/jpeg" revision="c78f0d394e6a65cdf679a5c437a4092482a42972"/>
|
||||
<project name="platform/external/jsmn" path="external/jsmn" revision="b38b4fe9a246bf36b821c542d0712d8c38699ac0"/>
|
||||
<project name="platform/external/jsoncpp" path="external/jsoncpp" revision="d2c5c6cdb5e8315b8ad02f0f3259e67c89f82a21"/>
|
||||
<project name="platform/external/junit" path="external/junit" revision="ea4284c223ecedb4094af8fb1e44b8d7a453ad95"/>
|
||||
<project name="platform/external/libcxxabi" path="external/libcxxabi" revision="bb937c1004a8705f22422f8b96176e135471215c"/>
|
||||
<project name="platform/external/libcxx" path="external/libcxx" revision="4242ca3e7c035aebc9895d18c22fa3394577cbdf"/>
|
||||
<project name="platform/external/libgsm" path="external/libgsm" revision="e9d878fc0e5485544e54919a32d621d4281f8cc0"/>
|
||||
<project name="platform/external/liblzf" path="external/liblzf" revision="b61d5b6275ddb9688777dda6b3196fa6b671811e"/>
|
||||
<project name="platform/external/libnfc-nxp" path="external/libnfc-nxp" revision="84022905ba12dc0a71a38f652d4325447559ac0d"/>
|
||||
<project name="platform/external/libnl" path="external/libnl" revision="77a22ce82e6aca58206321558e5ef283c673e8c3"/>
|
||||
<project name="platform/external/libogg" path="external/libogg" revision="ce31af3deb35cfa7801907ab47dd567f7342f728"/>
|
||||
<project name="platform/external/libopus" path="external/libopus" revision="48641b8569f2e4706d0745b5392a1ea51959a7d2"/>
|
||||
<project name="platform/external/libpcap" path="external/libpcap" revision="2e6cfa7b97a305d36c9d7305e17bff1e89430c00"/>
|
||||
<project name="platform/external/libpng" path="external/libpng" revision="1ee9d65ed400cdd1865140e34ceac503c47f5697"/>
|
||||
<project name="platform/external/libselinux" path="external/libselinux" revision="5c3fe1dec7cd818dcd7af8742b7d9349359109dc"/>
|
||||
<project name="platform/external/libsepol" path="external/libsepol" revision="ebb551cc7b2db5af523758a5bae6b4336885f274"/>
|
||||
<project name="platform/external/libunwind" path="external/libunwind" revision="9a5b400cc8b62a8df95a22307b4ad9470e5699d2"/>
|
||||
<project name="platform/external/libvpx" path="external/libvpx" revision="ae97799c21f85b0b16e4c9720a45d5d10fccb552"/>
|
||||
<project name="platform/external/llvm" path="external/llvm" revision="4c69c3c662cf672e89f827aaab6bbb2eee4d3cea"/>
|
||||
<project name="platform/external/mdnsresponder" path="external/mdnsresponder" revision="c2361f084d4d2ef3ff5f89cd2b73122f6a729612"/>
|
||||
<project name="platform/external/mksh" path="external/mksh" revision="8b9324223df9b4e4754f9b13c1229f7e8c92fd5a"/>
|
||||
<project name="platform/external/netcat" path="external/netcat" revision="e81a29a522fe7df9c1803478de07d050dd82a71e"/>
|
||||
<project name="platform/external/openssl" path="external/openssl" revision="49e31f1f0e48744f3113bc36dee5182186251238"/>
|
||||
<project name="platform/external/pcre" path="external/pcre" revision="24cc1690dbc0525d42184db5781954414802413d"/>
|
||||
<project name="platform/external/protobuf" path="external/protobuf" revision="766926b875dac06bde2b96b0c3f8d28c8647a4c4"/>
|
||||
<project name="platform/external/safe-iop" path="external/safe-iop" revision="990aa0668849d1d88c4a12f9e0039a7981cf4c7a"/>
|
||||
<project name="platform/external/scrypt" path="external/scrypt" revision="4593ce16971f9704e7810052567aecf803f812b0"/>
|
||||
<project name="platform/external/sepolicy" path="external/sepolicy" revision="c105aabfdd2f3efe02ed8c5b51025b55e54b632d"/>
|
||||
<project name="platform/external/sfntly" path="external/sfntly" revision="3ab9ff62deba8ec0b6de91c675cac39e0b17fbd3"/>
|
||||
<project name="platform/external/skia" path="external/skia" revision="72b56c79228338ddd5ec5b70bf5d42154f592705"/>
|
||||
<project name="platform/external/sonivox" path="external/sonivox" revision="425b4dd3a2994e262f7c1f0e1ed5ebe3ece41eea"/>
|
||||
<project name="platform/external/speex" path="external/speex" revision="fc41a0b3eda8aba60d213288ac845ad7610144c9"/>
|
||||
<project name="platform/external/sqlite" path="external/sqlite" revision="933fe9d087995054be1a90c969bb2ae538f52a0f"/>
|
||||
<project name="platform/external/stlport" path="external/stlport" revision="d2c2e9e77ff8af17dbd8bafb10b6882d16f877fb"/>
|
||||
<project name="platform/external/strace" path="external/strace" revision="13aaaead6e65b6dcb55c4d6b16588577804f0d1a"/>
|
||||
<project name="platform/external/svox" path="external/svox" revision="04dc7d54a9f6c4a9c943cf6440ad45823fbc4e3f"/>
|
||||
<project name="platform/external/tagsoup" path="external/tagsoup" revision="ae474049a3f8129316266bc6aac3337c9a135a29"/>
|
||||
<project name="platform/external/tcpdump" path="external/tcpdump" revision="9f6a22df2778388d8992b6c3bbaef412b35d583b"/>
|
||||
<project name="platform/external/tinyalsa" path="external/tinyalsa" revision="c9c11a4e003f1ded33fbfde0a4bae032b0538235"/>
|
||||
<project name="platform/external/tinycompress" path="external/tinycompress" revision="cfc3e36e320bcb46da2dda9f94b2852cb76c61c5"/>
|
||||
<project name="platform/external/tinyxml2" path="external/tinyxml2" revision="cb31036a6e8213d59646dcee369e63dd4023b732"/>
|
||||
<project name="platform/external/tinyxml" path="external/tinyxml" revision="c758d7fa7252c2690838b18eb92c796dd1698a8e"/>
|
||||
<project name="platform/external/tremolo" path="external/tremolo" revision="2e50b37fd997644ebb1b769f6963977a129a0578"/>
|
||||
<project name="platform/external/webp" path="external/webp" revision="f6fc76c4baeeacfc933e75ad14e721b742c0c99b"/>
|
||||
<project name="platform/external/webrtc" path="external/webrtc" revision="701d8ae1fe80514e8be0bb8e481e309bed8baf92"/>
|
||||
<project name="platform/external/yaffs2" path="external/yaffs2" revision="2da1900eb304796e96c1b7575163b0489fc2eb80"/>
|
||||
<project name="platform/external/zlib" path="external/zlib" revision="78dd4cb86e1c4e6a644c2222abe0f53e739bf868"/>
|
||||
<project name="platform/external/zopfli" path="external/zopfli" revision="139e51d6095b5f89dfdd9bc5d33b35500cd7869a"/>
|
||||
<project name="platform/frameworks/native" path="frameworks/native" revision="a0c1c949e35a44aa9018d1b4803cb2d833c16d59"/>
|
||||
<project name="platform/frameworks/opt/emoji" path="frameworks/opt/emoji" revision="4af3e0b694fa015b2fed61f4508cf01fab2f58b9"/>
|
||||
<project name="platform/hardware/libhardware" path="hardware/libhardware" revision="7ed97eeed061e95b466f24693c2f0120f40e2bf5"/>
|
||||
<project name="platform/hardware/libhardware_legacy" path="hardware/libhardware_legacy" revision="a9a2f3f3f17b4e1ab0d3b00a67b4c5250e26194f"/>
|
||||
<project name="platform/libcore" path="libcore" revision="1a07f00d8163f497a785a3285ec55fe551ba95c1"/>
|
||||
<project name="platform/libnativehelper" path="libnativehelper" revision="4834b58ed7af3ee69523177e00e55603ac90ed50"/>
|
||||
<project name="platform/ndk" path="ndk" revision="869c05cab7b4315c2bc607493db3f5b18ead2580"/>
|
||||
<project name="platform_prebuilts_misc" path="prebuilts/misc" remote="b2g" revision="da8b660db117e2a69a7624bfdca2f02cad397f2e"/>
|
||||
<project name="platform/prebuilts/ndk" path="prebuilts/ndk" revision="5fd638a4a0ff3677fc3c970fab038d6db1bb7665"/>
|
||||
<project name="platform/external/fdlibm" path="external/fdlibm" revision="f24510089e8b5cb533c0406fd2e9c5a8eb1b201b"/>
|
||||
<project name="platform/external/flac" path="external/flac" revision="ae2004f637dd0eb68d763f441d3ff1cf285d42b4"/>
|
||||
<project name="platform/external/freetype" path="external/freetype" revision="a177e10e69985dc9640b89f615e1c0b61fb4f0f4"/>
|
||||
<project name="platform/external/gcc-demangle" path="external/gcc-demangle" revision="9d1a7f107acea987ed2440c0a310a6c42f667bd7"/>
|
||||
<project name="platform/external/genext2fs" path="external/genext2fs" revision="c7e3aae061a272caa34e5a465edd9927cde42ac8"/>
|
||||
<project name="platform/external/giflib" path="external/giflib" revision="f0f278e928db903456cbbc2dfff2a678c31a9d27"/>
|
||||
<project name="platform/external/gtest" path="external/gtest" revision="5d13a30f9978eb09254ebc83ae51d6a730eec215"/>
|
||||
<project name="platform/external/harfbuzz_ng" path="external/harfbuzz_ng" revision="647fa898029679d4fac6958332c88c5f3f169439"/>
|
||||
<project name="platform/external/icu" path="external/icu" revision="a41b209dc1f9836733c59a30e862784e8895ac7c"/>
|
||||
<project name="platform/external/iproute2" path="external/iproute2" revision="acf444b6a524b4bce5b7cfe81b29e2839ff6e508"/>
|
||||
<project name="platform/external/ipsec-tools" path="external/ipsec-tools" revision="bf460d6fcb58d7f8e95f5d3ab9ffa2e7e16c2957"/>
|
||||
<project name="platform/external/iptables" path="external/iptables" revision="11beff4f1ad782fd1d8e5c1857f2c2088abb42f6"/>
|
||||
<project name="platform/external/jack" path="external/jack" revision="cd80e83b301ac9c5a845d8d01dc73084891cd19d"/>
|
||||
<project name="platform/external/jemalloc" path="external/jemalloc" revision="a6a05e48b628346ec4342f8b6d1c3d0a5987236e"/>
|
||||
<project name="platform/external/jhead" path="external/jhead" revision="3b6bb83af87698537d150ee004ba27720af50f54"/>
|
||||
<project name="platform/external/jpeg" path="external/jpeg" revision="b5c22f7648e1b03241abb05733aec47e2bf66462"/>
|
||||
<project name="platform/external/jsmn" path="external/jsmn" revision="646c4a36fd8cdb1ecd2080963bd26d9e245473c5"/>
|
||||
<project name="platform/external/jsoncpp" path="external/jsoncpp" revision="d9d8c51470b0cd2b95219c6b596ef90ae7915b8e"/>
|
||||
<project name="platform/external/junit" path="external/junit" revision="a9d933b7f8f42007de21bc674a61d491e14b48df"/>
|
||||
<project name="platform/external/libcxxabi" path="external/libcxxabi" revision="31349d4fd0a2ee4744d1cade9fa774dd2213be80"/>
|
||||
<project name="platform/external/libcxx" path="external/libcxx" revision="7cff60f9e680dc58c9a913eddc049946e3616265"/>
|
||||
<project name="platform/external/libgsm" path="external/libgsm" revision="7f76ac798f682fed4662c789010050789eabee89"/>
|
||||
<project name="platform/external/liblzf" path="external/liblzf" revision="0e6384fa203d8c7499fe64c9e93930df8e50cc99"/>
|
||||
<project name="platform/external/libnfc-nxp" path="external/libnfc-nxp" revision="13c47f6dfcd78c59243e997b5df30c5155949d59"/>
|
||||
<project name="platform/external/libnl" path="external/libnl" revision="b1e000e9a7b0048a5e8335a32125b405bd77c53b"/>
|
||||
<project name="platform/external/libogg" path="external/libogg" revision="9a2354608fdae6e105b28d4456a94146e41616c7"/>
|
||||
<project name="platform/external/libopus" path="external/libopus" revision="46be742257e102568f59c3ce18e322cf0b258799"/>
|
||||
<project name="platform/external/libpcap" path="external/libpcap" revision="03c8b18ba58ac3347c18875779e162c75c652715"/>
|
||||
<project name="platform/external/libpng" path="external/libpng" revision="8eac982ec2415fbc83e5a61899e0ca7eba4fe96d"/>
|
||||
<project name="platform/external/libselinux" path="external/libselinux" revision="317bc4b75ea40dfb5988c12f607505a86c6c2823"/>
|
||||
<project name="platform/external/libsepol" path="external/libsepol" revision="24b924ffd20dbf7359a9e15a10a8d1cfd6309597"/>
|
||||
<project name="platform/external/libunwind" path="external/libunwind" revision="e3fa64fe20e4eaf13c2231727158bd5fac4e53ec"/>
|
||||
<project name="platform/external/libvpx" path="external/libvpx" revision="652843c7218cdfcd42c98a839b72941d0e4696ba"/>
|
||||
<project name="platform/external/llvm" path="external/llvm" revision="63e3c6329893697af239dae0ddab843a3e1623a3"/>
|
||||
<project name="platform/external/mdnsresponder" path="external/mdnsresponder" revision="32a5f67c10e0b87cf95bbbaad489b8e3f098eb01"/>
|
||||
<project name="platform/external/mksh" path="external/mksh" revision="c452c566cd6face953c9e33d01c4df652d39fdf6"/>
|
||||
<project name="platform/external/netcat" path="external/netcat" revision="00d9d6b1aa7772c96878db17d556f29150705be8"/>
|
||||
<project name="platform/external/openssl" path="external/openssl" revision="bf4112b16f0ede8128ba7ff3c17a0056834b7c75"/>
|
||||
<project name="platform/external/pcre" path="external/pcre" revision="89b3b9780dbdd7c682b9bf2efd0f476a1ebc5d33"/>
|
||||
<project name="platform/external/protobuf" path="external/protobuf" revision="cdb14929d7c934944079ce070f5eb2f9459f824c"/>
|
||||
<project name="platform/external/safe-iop" path="external/safe-iop" revision="33d0429591d345687755c25f23ea2e46df5cd293"/>
|
||||
<project name="platform/external/scrypt" path="external/scrypt" revision="d809e38af0d89747cde00970271fb64d42333302"/>
|
||||
<project name="platform/external/sepolicy" path="external/sepolicy" revision="bb16e19f8bb7a2fe6bbd4b6e0bebf465fdd0fc30"/>
|
||||
<project name="platform/external/sfntly" path="external/sfntly" revision="d2bab207acad60e098d0652b5ed7348c96a249f3"/>
|
||||
<project name="platform/external/skia" path="external/skia" revision="b0fe7c355d4d95ff89b8e9e459285fe2b98e366d"/>
|
||||
<project name="platform/external/sonivox" path="external/sonivox" revision="3d04f03d824d5ea8835e577785b51022820ae763"/>
|
||||
<project name="platform/external/speex" path="external/speex" revision="9d73341cd881c415e6fce726ea4918654cd03145"/>
|
||||
<project name="platform/external/sqlite" path="external/sqlite" revision="2394fd03445b9496025558d4e48a54c09180e132"/>
|
||||
<project name="platform/external/stlport" path="external/stlport" revision="49f98215d1dea7f96f7560528bc8528570e2e05b"/>
|
||||
<project name="platform/external/strace" path="external/strace" revision="a093fa84778892c96159ccee02dc8d6c4378a124"/>
|
||||
<project name="platform/external/svox" path="external/svox" revision="7543f63ace85c9812dfc5263d63ed190eebb7f1c"/>
|
||||
<project name="platform/external/tagsoup" path="external/tagsoup" revision="5ad81cc518df943dbff3a566f3db5a3aae4b3098"/>
|
||||
<project name="platform/external/tcpdump" path="external/tcpdump" revision="f28770c517d9ca78bf25779d833da2d8a3aa1c61"/>
|
||||
<project name="platform/external/tinyalsa" path="external/tinyalsa" revision="73444308ffa76f7df107c9b5c8eb657d2a212017"/>
|
||||
<project name="platform/external/tinycompress" path="external/tinycompress" revision="d65aa7ba2e7548452906d3d61ee03c94cc64f25d"/>
|
||||
<project name="platform/external/tinyxml2" path="external/tinyxml2" revision="ea87469657dd498dd76ea01b35daab9d48503a3c"/>
|
||||
<project name="platform/external/tinyxml" path="external/tinyxml" revision="d09b587fe9bd7f1524d434c15941a5483c2d7046"/>
|
||||
<project name="platform/external/tremolo" path="external/tremolo" revision="7954026e4cbeeaa4bb7d7e2c82a6556ea34c58ab"/>
|
||||
<project name="platform/external/webp" path="external/webp" revision="5df3d5cb644f301e4a0c78b939e411b061a36558"/>
|
||||
<project name="platform/external/webrtc" path="external/webrtc" revision="de40077759a01a02a3e21b30ea0755f2d6fc4e09"/>
|
||||
<project name="platform/external/yaffs2" path="external/yaffs2" revision="b2aadfdf9482777530efac1fb13a25ff401e78ee"/>
|
||||
<project name="platform/external/zlib" path="external/zlib" revision="a9dc8ffc4b43f0ff455d52fc5a889e92794962a4"/>
|
||||
<project name="platform/external/zopfli" path="external/zopfli" revision="8b994159cf3fc74a58e42fca72bc6849e6027912"/>
|
||||
<project name="platform/frameworks/native" path="frameworks/native" revision="c39bd4ee1f4b3ef92bf7a45824b77703f40a5fd4"/>
|
||||
<project name="platform/frameworks/opt/emoji" path="frameworks/opt/emoji" revision="2293192ed15b88ebe962fb5377dd197200e6472b"/>
|
||||
<project name="platform/hardware/libhardware" path="hardware/libhardware" revision="f5feb2aa2047fbaf13be448fe8d06bff3ccf7b84"/>
|
||||
<project name="platform/hardware/libhardware_legacy" path="hardware/libhardware_legacy" revision="8d075b4d5e9e032b18fbc8b5def63827d1b4a30d"/>
|
||||
<project name="platform/libcore" path="libcore" revision="bdec7d684c083760bef7bc4ba2429cceccaaf7d0"/>
|
||||
<project name="platform/libnativehelper" path="libnativehelper" revision="27bcc086236cedd31c056303e255c6d0ea3d4a50"/>
|
||||
<project name="platform/ndk" path="ndk" revision="42e85f81cc6c74af145056ee80b06e520cccb9a7"/>
|
||||
<project name="platform_prebuilts_misc" path="prebuilts/misc" remote="b2g" revision="f105a2d852c988fb1aa16a1e758ca7f93dd54fe9"/>
|
||||
<project name="platform/prebuilts/ndk" path="prebuilts/ndk" revision="1d080491f26dfdfd76d5bbc3e6b40c660e8565af"/>
|
||||
<project name="platform_prebuilts_qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="2c0d193349c55337e37196a7f2d5cef37753ed3e"/>
|
||||
<project name="platform/prebuilts/sdk" path="prebuilts/sdk" revision="a982f43b7f2d5916dc3a859667a8ba78e50b6202"/>
|
||||
<project name="platform/prebuilts/tools" path="prebuilts/tools" revision="6e18b61ee446bdd9880c07ae84197a087490c2e5"/>
|
||||
<project name="platform/prebuilts/sdk" path="prebuilts/sdk" revision="61a10cbd19d6b7fc052a8cb92dfa1b37b93754f3"/>
|
||||
<project name="platform/prebuilts/tools" path="prebuilts/tools" revision="9e892a67a01671f312c76b0880dedaa6ba478148"/>
|
||||
<project name="platform_system_bluetoothd" path="system/bluetoothd" remote="b2g" revision="48d2332e6d8400cdc0de273ceff2abe8aaababf8"/>
|
||||
<project name="platform/system/extras" path="system/extras" revision="18f7c51415917eb0e21b30f220db7bd0be4130a7"/>
|
||||
<project name="platform/system/extras" path="system/extras" revision="47fa016e2248b80aebd5928402c7409f8e0ca64e"/>
|
||||
<project name="platform_system_libfdio" path="system/libfdio" remote="b2g" revision="3c5405863d2002f665ef2b901abb3853c420129b"/>
|
||||
<project name="platform/system/media" path="system/media" revision="adf8fbacf7395858884690df5e3ce46bc75fa683"/>
|
||||
<project name="platform/system/netd" path="system/netd" revision="655392625db084a7122d65a15acf74db7f1da7f7"/>
|
||||
<project name="platform/system/security" path="system/security" revision="e6b3fdd892ad994ec3fd0b8959d630e31881801b"/>
|
||||
<project name="platform/system/vold" path="system/vold" revision="eb59d2afd5f6e1cbab2ef985a8dd1c7105b499e8"/>
|
||||
<project name="platform_frameworks_av" path="frameworks/av" remote="b2g" revision="ea531874885eed7f68802048218ed86dde927f58"/>
|
||||
<project name="platform_frameworks_base" path="frameworks/base" remote="b2g" revision="df7e0cfbbc7e954ed26c73ac17832a5ff035f046"/>
|
||||
<project name="platform_frameworks_wilhelm" path="frameworks/wilhelm" remote="b2g" revision="73f7e7f12c8c5459f7a39e2fa343f083c942864d"/>
|
||||
<project name="platform_system_core" path="system/core" remote="b2g" revision="4df51d9abf6cc9a6ec49b965e621699e0e6dc4fb"/>
|
||||
<default remote="caf" revision="refs/tags/android-5.0.0_r6" sync-j="4"/>
|
||||
<project name="platform/system/media" path="system/media" revision="70bfebc66d9c6a4c614a8c7efde90e8e7e1d8641"/>
|
||||
<project name="platform/system/netd" path="system/netd" revision="d113f0ceefa9ce29eb3c86e2d23c7417a70b4048"/>
|
||||
<project name="platform/system/security" path="system/security" revision="94e1617f6f2bc2286d005e79cffa6bf0721b06b3"/>
|
||||
<project name="platform/system/vold" path="system/vold" revision="c065e301e38ea0c241164e2a373e1ecefbeaf2ec"/>
|
||||
<project name="platform_frameworks_av" path="frameworks/av" remote="b2g" revision="e372b6a77f71c8f9fbbf6f8adbfa7bf8ef45dc60"/>
|
||||
<project name="platform_frameworks_base" path="frameworks/base" remote="b2g" revision="04e26ebdc36ca83f4ee3e9e2082b3fcf04c5b971"/>
|
||||
<project name="platform_frameworks_wilhelm" path="frameworks/wilhelm" remote="b2g" revision="0dbf5baafadf6d233c0a29e392fa3293f0121673"/>
|
||||
<project name="platform_system_core" path="system/core" remote="b2g" revision="f594bc64eacac490857748b1139ffcb34c856bbd"/>
|
||||
<default remote="caf" revision="refs/tags/android-5.1.0_r1" sync-j="4"/>
|
||||
<!-- Nexus 5 specific things -->
|
||||
<project name="device/generic/armv7-a-neon" path="device/generic/armv7-a-neon" revision="ba62cc8b78c30d36181b8060a2016cc8da166236"/>
|
||||
<project name="device-hammerhead" path="device/lge/hammerhead" remote="b2g" revision="c37663f828891cf7a49451a04f3f1ce7f7e5c054"/>
|
||||
<project name="device_lge_hammerhead-kernel" path="device/lge/hammerhead-kernel" remote="b2g" revision="1268f640184df5ef759ada669f101a613451673a"/>
|
||||
<project name="platform/external/libnfc-nci" path="external/libnfc-nci" revision="0cb8574d338bf9f15b45ace7c08ad6deae9673ee"/>
|
||||
<project name="platform/external/wpa_supplicant_8" path="external/wpa_supplicant_8" revision="16abda2258c9aa1ed78f00bb0a9b2b43b4cb919e"/>
|
||||
<project name="platform/hardware/broadcom/libbt" path="hardware/broadcom/libbt" revision="3e856528121ae0af0ca26c97cb563160c7e16d85"/>
|
||||
<project name="platform/hardware/broadcom/wlan" path="hardware/broadcom/wlan" revision="d9e716e14e685f4fc124ae591a1cd0899bc4d7b5"/>
|
||||
<project name="platform/hardware/qcom/audio" path="hardware/qcom/audio" revision="505aa92674337b76ce7d038800f2a6d7dc340ac9"/>
|
||||
<project name="hardware_qcom_display" path="hardware/qcom/display" remote="b2g" revision="c43952000d57f08b93a0e4fb77052871ce587976"/>
|
||||
<project name="platform/hardware/qcom/keymaster" path="hardware/qcom/keymaster" revision="028649652cd8f8f18cfb47d34bd78c435eb030ca"/>
|
||||
<project name="platform/hardware/qcom/media" path="hardware/qcom/media" revision="758a80fbb178b5663d4edbb46944b2dc553cb1ca"/>
|
||||
<project name="platform/hardware/qcom/msm8x74" path="hardware/qcom/msm8x74" revision="aa0124820e22302149b1f2db603a9a72f1972527"/>
|
||||
<project name="platform/hardware/qcom/power" path="hardware/qcom/power" revision="37499eb89f31233135ca73b830b067ab24dc1be2"/>
|
||||
<project name="platform/hardware/qcom/sensors" path="hardware/qcom/sensors" revision="3724fd91ef5183684d97e2bf1d7ff948faabe090"/>
|
||||
<project name="platform/hardware/qcom/wlan" path="hardware/qcom/wlan" revision="2e54754cc0529d26ccac37ed291600048adbf6c0"/>
|
||||
<project name="platform/hardware/ril" path="hardware/ril" revision="71dfa8228ad0d6cdf6bac0426ac59404ab74b7f3"/>
|
||||
<project name="device/generic/armv7-a-neon" path="device/generic/armv7-a-neon" revision="fe7df1bc8dd0fd71571505d7be1c31a4ad1e40fb"/>
|
||||
<project name="device-hammerhead" path="device/lge/hammerhead" remote="b2g" revision="01a78e0cd81f7a48ac12f854e094dead0deb094d"/>
|
||||
<project name="device_lge_hammerhead-kernel" path="device/lge/hammerhead-kernel" remote="b2g" revision="1d42cfba2e91a07b1bea1d1591b8aed4db9cb9a5"/>
|
||||
<project name="platform/external/libnfc-nci" path="external/libnfc-nci" revision="5d0ae53d9588c3d70c005aec9be94af9a534de16"/>
|
||||
<project name="platform/external/wpa_supplicant_8" path="external/wpa_supplicant_8" revision="c15b6e266136cd0cdd9b94d0bbed1962d9dd6672"/>
|
||||
<project name="platform/hardware/broadcom/libbt" path="hardware/broadcom/libbt" revision="399fe3d3c8f38c599a56becddc456133e62a5d70"/>
|
||||
<project name="platform/hardware/broadcom/wlan" path="hardware/broadcom/wlan" revision="3f3134d5cb19d5ace48d36d0100467a545d430eb"/>
|
||||
<project name="platform/hardware/qcom/audio" path="hardware/qcom/audio" revision="810c3dd29d009822a71eba9910e429a9ad114533"/>
|
||||
<project name="hardware_qcom_display" path="hardware/qcom/display" remote="b2g" revision="d8a56d7215bd26a61e43dcde20e64826a5fec265"/>
|
||||
<project name="platform/hardware/qcom/keymaster" path="hardware/qcom/keymaster" revision="eaede9f8bc206736a889bc57817047c31e205589"/>
|
||||
<project name="platform/hardware/qcom/media" path="hardware/qcom/media" revision="12364db20d6710f0003a4f00962c9790ad3c13e3"/>
|
||||
<project name="platform/hardware/qcom/msm8x74" path="hardware/qcom/msm8x74" revision="f09920b2b488cf68bcbe9f7bbbde84a509a1d7a5"/>
|
||||
<project name="platform/hardware/qcom/power" path="hardware/qcom/power" revision="29e9aeaf278b16fea4cb1ab4d05b8b8c9083c15b"/>
|
||||
<project name="platform/hardware/qcom/sensors" path="hardware/qcom/sensors" revision="fde83fdf67e9b919f8a49008725bd595221bf33f"/>
|
||||
<project name="platform/hardware/qcom/wlan" path="hardware/qcom/wlan" revision="6417804bea95f6e46094a01a06025a86e28c5b0d"/>
|
||||
<project name="platform/hardware/ril" path="hardware/ril" revision="e00d716e7e3d31729f75399855b6921e90cb0b66"/>
|
||||
<project name="platform_system_nfcd" path="system/nfcd" remote="b2g" revision="eb8b8828c412bf8d164ad42a39766becd39f9fb5"/>
|
||||
</manifest>
|
||||
|
|
|
@ -6162,20 +6162,13 @@ var IndexedDBPromptHelper = {
|
|||
|
||||
var requestor = subject.QueryInterface(Ci.nsIInterfaceRequestor);
|
||||
|
||||
var contentWindow = requestor.getInterface(Ci.nsIDOMWindow);
|
||||
var contentDocument = contentWindow.document;
|
||||
var browserWindow =
|
||||
OfflineApps._getBrowserWindowForContentWindow(contentWindow);
|
||||
|
||||
if (browserWindow != window) {
|
||||
// Must belong to some other window.
|
||||
var browser = requestor.getInterface(Ci.nsIDOMNode);
|
||||
if (browser.ownerDocument.defaultView != window) {
|
||||
// Only listen for notifications for browsers in our chrome window.
|
||||
return;
|
||||
}
|
||||
|
||||
var browser =
|
||||
OfflineApps._getBrowserForContentWindow(browserWindow, contentWindow);
|
||||
|
||||
var host = contentDocument.documentURIObject.asciiHost;
|
||||
var host = browser.currentURI.asciiHost;
|
||||
|
||||
var message;
|
||||
var responseTopic;
|
||||
|
@ -7303,6 +7296,14 @@ let gRemoteTabsUI = {
|
|||
return;
|
||||
}
|
||||
|
||||
#ifdef XP_MACOSX
|
||||
if (Services.prefs.getBoolPref("layers.acceleration.disabled")) {
|
||||
// On OS X, "Disable Hardware Acceleration" also disables OMTC and forces
|
||||
// a fallback to Basic Layers. This is incompatible with e10s.
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
let newRemoteWindow = document.getElementById("menu_newRemoteWindow");
|
||||
let newNonRemoteWindow = document.getElementById("menu_newNonRemoteWindow");
|
||||
let autostart = Services.appinfo.browserTabsRemoteAutostart;
|
||||
|
|
|
@ -1103,11 +1103,18 @@ let openRemote = !Services.appinfo.browserTabsRemoteAutostart;
|
|||
let buttonLabel = openRemote ? "New e10s Window"
|
||||
: "New Non-e10s Window";
|
||||
|
||||
let e10sDisabled = Services.appinfo.inSafeMode;
|
||||
#ifdef XP_MACOSX
|
||||
// On OS X, "Disable Hardware Acceleration" also disables OMTC and forces
|
||||
// a fallback to Basic Layers. This is incompatible with e10s.
|
||||
e10sDisabled |= Services.prefs.getBoolPref("layers.acceleration.disabled");
|
||||
#endif
|
||||
|
||||
CustomizableWidgets.push({
|
||||
id: "e10s-button",
|
||||
label: buttonLabel,
|
||||
tooltiptext: buttonLabel,
|
||||
disabled: Services.appinfo.inSafeMode,
|
||||
disabled: e10sDisabled,
|
||||
defaultArea: CustomizableUI.AREA_PANEL,
|
||||
onCommand: getCommandFunction(openRemote),
|
||||
});
|
||||
|
|
|
@ -5316,6 +5316,10 @@ MOZ_ARG_DISABLE_BOOL(fmp4,
|
|||
MOZ_FMP4=,
|
||||
MOZ_FMP4=1)
|
||||
|
||||
if test -n "$MOZ_FFMPEG" -a -z "$MOZ_FMP4"; then
|
||||
AC_MSG_ERROR([Fragmented MP4 support must be enabled if using FFMPEG])
|
||||
fi
|
||||
|
||||
if test -n "$MOZ_FMP4"; then
|
||||
AC_DEFINE(MOZ_FMP4)
|
||||
MOZ_EME=1
|
||||
|
|
|
@ -200,6 +200,8 @@
|
|||
#include "nsIBrowserSearchService.h"
|
||||
#endif
|
||||
|
||||
static NS_DEFINE_CID(kAppShellCID, NS_APPSHELL_CID);
|
||||
|
||||
#if defined(DEBUG_bryner) || defined(DEBUG_chb)
|
||||
//#define DEBUG_DOCSHELL_FOCUS
|
||||
#define DEBUG_PAGE_CACHE
|
||||
|
@ -220,6 +222,9 @@ static bool gAddedPreferencesVarCache = false;
|
|||
|
||||
bool nsDocShell::sUseErrorPages = false;
|
||||
|
||||
// Number of documents currently loading
|
||||
static int32_t gNumberOfDocumentsLoading = 0;
|
||||
|
||||
// Global count of existing docshells.
|
||||
static int32_t gDocShellCount = 0;
|
||||
|
||||
|
@ -250,6 +255,18 @@ static PRLogModuleInfo* gDocShellLeakLog;
|
|||
const char kBrandBundleURL[] = "chrome://branding/locale/brand.properties";
|
||||
const char kAppstringsBundleURL[] = "chrome://global/locale/appstrings.properties";
|
||||
|
||||
static void
|
||||
FavorPerformanceHint(bool aPerfOverStarvation)
|
||||
{
|
||||
nsCOMPtr<nsIAppShell> appShell = do_GetService(kAppShellCID);
|
||||
if (appShell) {
|
||||
appShell->FavorPerformanceHint(
|
||||
aPerfOverStarvation,
|
||||
Preferences::GetUint("docshell.event_starvation_delay_hint",
|
||||
NS_EVENT_STARVATION_DELAY_HINT));
|
||||
}
|
||||
}
|
||||
|
||||
//*****************************************************************************
|
||||
// <a ping> support
|
||||
//*****************************************************************************
|
||||
|
@ -7524,6 +7541,14 @@ nsDocShell::EndPageLoad(nsIWebProgress* aProgress,
|
|||
mIsExecutingOnLoadHandler = false;
|
||||
|
||||
mEODForCurrentDocument = true;
|
||||
|
||||
// If all documents have completed their loading
|
||||
// favor native event dispatch priorities
|
||||
// over performance
|
||||
if (--gNumberOfDocumentsLoading == 0) {
|
||||
// Hint to use normal native event dispatch priorities
|
||||
FavorPerformanceHint(false);
|
||||
}
|
||||
}
|
||||
/* Check if the httpChannel has any cache-control related response headers,
|
||||
* like no-store, no-cache. If so, update SHEntry so that
|
||||
|
@ -8653,6 +8678,12 @@ nsDocShell::RestoreFromHistory()
|
|||
mSavingOldViewer = false;
|
||||
mEODForCurrentDocument = false;
|
||||
|
||||
// Tell the event loop to favor plevents over user events, see comments
|
||||
// in CreateContentViewer.
|
||||
if (++gNumberOfDocumentsLoading == 1) {
|
||||
FavorPerformanceHint(true);
|
||||
}
|
||||
|
||||
if (oldCv && newCv) {
|
||||
newCv->SetMinFontSize(minFontSize);
|
||||
newCv->SetTextZoom(textZoom);
|
||||
|
@ -9065,6 +9096,16 @@ nsDocShell::CreateContentViewer(const nsACString& aContentType,
|
|||
}
|
||||
}
|
||||
|
||||
// Give hint to native plevent dispatch mechanism. If a document
|
||||
// is loading the native plevent dispatch mechanism should favor
|
||||
// performance over normal native event dispatch priorities.
|
||||
if (++gNumberOfDocumentsLoading == 1) {
|
||||
// Hint to favor performance for the plevent notification mechanism.
|
||||
// We want the pages to load as fast as possible even if its means
|
||||
// native messages might be starved.
|
||||
FavorPerformanceHint(true);
|
||||
}
|
||||
|
||||
if (onLocationChangeNeeded) {
|
||||
FireOnLocationChange(this, aRequest, mCurrentURI, 0);
|
||||
}
|
||||
|
|
|
@ -180,7 +180,7 @@ AnimationPlayer::PlayState() const
|
|||
}
|
||||
|
||||
static inline already_AddRefed<Promise>
|
||||
CreatePromise(AnimationTimeline* aTimeline, ErrorResult& aRv)
|
||||
CreatePromise(DocumentTimeline* aTimeline, ErrorResult& aRv)
|
||||
{
|
||||
nsIGlobalObject* global = aTimeline->GetParentObject();
|
||||
if (global) {
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#include "mozilla/TimeStamp.h" // for TimeStamp, TimeDuration
|
||||
#include "mozilla/dom/Animation.h" // for Animation
|
||||
#include "mozilla/dom/AnimationPlayerBinding.h" // for AnimationPlayState
|
||||
#include "mozilla/dom/AnimationTimeline.h" // for AnimationTimeline
|
||||
#include "mozilla/dom/DocumentTimeline.h" // for DocumentTimeline
|
||||
#include "mozilla/dom/Promise.h" // for Promise
|
||||
#include "nsCSSProperty.h" // for nsCSSProperty
|
||||
|
||||
|
@ -51,7 +51,7 @@ protected:
|
|||
virtual ~AnimationPlayer() {}
|
||||
|
||||
public:
|
||||
explicit AnimationPlayer(AnimationTimeline* aTimeline)
|
||||
explicit AnimationPlayer(DocumentTimeline* aTimeline)
|
||||
: mTimeline(aTimeline)
|
||||
, mPlaybackRate(1.0)
|
||||
, mPendingState(PendingState::NotPending)
|
||||
|
@ -65,8 +65,9 @@ public:
|
|||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(AnimationPlayer)
|
||||
|
||||
AnimationTimeline* GetParentObject() const { return mTimeline; }
|
||||
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
|
||||
DocumentTimeline* GetParentObject() const { return mTimeline; }
|
||||
virtual JSObject* WrapObject(JSContext* aCx,
|
||||
JS::Handle<JSObject*> aGivenProto) override;
|
||||
|
||||
virtual CSSAnimationPlayer* AsCSSAnimationPlayer() { return nullptr; }
|
||||
virtual CSSTransitionPlayer* AsCSSTransitionPlayer() { return nullptr; }
|
||||
|
@ -80,7 +81,7 @@ public:
|
|||
|
||||
// AnimationPlayer methods
|
||||
Animation* GetSource() const { return mSource; }
|
||||
AnimationTimeline* Timeline() const { return mTimeline; }
|
||||
DocumentTimeline* Timeline() const { return mTimeline; }
|
||||
Nullable<TimeDuration> GetStartTime() const { return mStartTime; }
|
||||
void SetStartTime(const Nullable<TimeDuration>& aNewStartTime);
|
||||
Nullable<TimeDuration> GetCurrentTime() const;
|
||||
|
@ -301,7 +302,7 @@ protected:
|
|||
virtual css::CommonAnimationManager* GetAnimationManager() const = 0;
|
||||
AnimationPlayerCollection* GetCollection() const;
|
||||
|
||||
nsRefPtr<AnimationTimeline> mTimeline;
|
||||
nsRefPtr<DocumentTimeline> mTimeline;
|
||||
nsRefPtr<Animation> mSource;
|
||||
// The beginning of the delay period.
|
||||
Nullable<TimeDuration> mStartTime; // Timeline timescale
|
||||
|
|
|
@ -4,118 +4,19 @@
|
|||
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "AnimationTimeline.h"
|
||||
#include "mozilla/dom/AnimationTimelineBinding.h"
|
||||
#include "AnimationUtils.h"
|
||||
#include "nsContentUtils.h"
|
||||
#include "nsIPresShell.h"
|
||||
#include "nsPresContext.h"
|
||||
#include "nsRefreshDriver.h"
|
||||
#include "nsDOMNavigationTiming.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(AnimationTimeline, mDocument, mWindow)
|
||||
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(AnimationTimeline, mWindow)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(AnimationTimeline, AddRef)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(AnimationTimeline, Release)
|
||||
NS_IMPL_CYCLE_COLLECTING_ADDREF(AnimationTimeline)
|
||||
NS_IMPL_CYCLE_COLLECTING_RELEASE(AnimationTimeline)
|
||||
|
||||
JSObject*
|
||||
AnimationTimeline::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
|
||||
{
|
||||
return AnimationTimelineBinding::Wrap(aCx, this, aGivenProto);
|
||||
}
|
||||
|
||||
Nullable<TimeDuration>
|
||||
AnimationTimeline::GetCurrentTime() const
|
||||
{
|
||||
return ToTimelineTime(GetCurrentTimeStamp());
|
||||
}
|
||||
|
||||
Nullable<double>
|
||||
AnimationTimeline::GetCurrentTimeAsDouble() const
|
||||
{
|
||||
return AnimationUtils::TimeDurationToDouble(GetCurrentTime());
|
||||
}
|
||||
|
||||
TimeStamp
|
||||
AnimationTimeline::GetCurrentTimeStamp() const
|
||||
{
|
||||
nsRefreshDriver* refreshDriver = GetRefreshDriver();
|
||||
TimeStamp refreshTime = refreshDriver
|
||||
? refreshDriver->MostRecentRefresh()
|
||||
: TimeStamp();
|
||||
|
||||
// Always return the same object to benefit from return-value optimization.
|
||||
TimeStamp result = !refreshTime.IsNull()
|
||||
? refreshTime
|
||||
: mLastRefreshDriverTime;
|
||||
|
||||
// If we don't have a refresh driver and we've never had one use the
|
||||
// timeline's zero time.
|
||||
if (result.IsNull()) {
|
||||
nsRefPtr<nsDOMNavigationTiming> timing = mDocument->GetNavigationTiming();
|
||||
if (timing) {
|
||||
result = timing->GetNavigationStartTimeStamp();
|
||||
// Also, let this time represent the current refresh time. This way
|
||||
// we'll save it as the last refresh time and skip looking up
|
||||
// navigation timing each time.
|
||||
refreshTime = result;
|
||||
}
|
||||
}
|
||||
|
||||
if (!refreshTime.IsNull()) {
|
||||
mLastRefreshDriverTime = refreshTime;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
Nullable<TimeDuration>
|
||||
AnimationTimeline::ToTimelineTime(const TimeStamp& aTimeStamp) const
|
||||
{
|
||||
Nullable<TimeDuration> result; // Initializes to null
|
||||
if (aTimeStamp.IsNull()) {
|
||||
return result;
|
||||
}
|
||||
|
||||
nsRefPtr<nsDOMNavigationTiming> timing = mDocument->GetNavigationTiming();
|
||||
if (MOZ_UNLIKELY(!timing)) {
|
||||
return result;
|
||||
}
|
||||
|
||||
result.SetValue(aTimeStamp - timing->GetNavigationStartTimeStamp());
|
||||
return result;
|
||||
}
|
||||
|
||||
TimeStamp
|
||||
AnimationTimeline::ToTimeStamp(const TimeDuration& aTimeDuration) const
|
||||
{
|
||||
TimeStamp result;
|
||||
nsRefPtr<nsDOMNavigationTiming> timing = mDocument->GetNavigationTiming();
|
||||
if (MOZ_UNLIKELY(!timing)) {
|
||||
return result;
|
||||
}
|
||||
|
||||
result = timing->GetNavigationStartTimeStamp() + aTimeDuration;
|
||||
return result;
|
||||
}
|
||||
|
||||
nsRefreshDriver*
|
||||
AnimationTimeline::GetRefreshDriver() const
|
||||
{
|
||||
nsIPresShell* presShell = mDocument->GetShell();
|
||||
if (MOZ_UNLIKELY(!presShell)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
nsPresContext* presContext = presShell->GetPresContext();
|
||||
if (MOZ_UNLIKELY(!presContext)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return presContext->RefreshDriver();
|
||||
}
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(AnimationTimeline)
|
||||
NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
|
||||
NS_INTERFACE_MAP_ENTRY(nsISupports)
|
||||
NS_INTERFACE_MAP_END
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
|
|
|
@ -6,26 +6,24 @@
|
|||
#ifndef mozilla_dom_AnimationTimeline_h
|
||||
#define mozilla_dom_AnimationTimeline_h
|
||||
|
||||
#include "nsISupports.h"
|
||||
#include "nsWrapperCache.h"
|
||||
#include "nsCycleCollectionParticipant.h"
|
||||
#include "mozilla/AnimationUtils.h"
|
||||
#include "mozilla/Attributes.h"
|
||||
#include "mozilla/TimeStamp.h"
|
||||
#include "nsIGlobalObject.h"
|
||||
#include "js/TypeDecls.h"
|
||||
#include "nsIDocument.h"
|
||||
#include "nsRefreshDriver.h"
|
||||
|
||||
struct JSContext;
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
class AnimationTimeline final : public nsWrapperCache
|
||||
class AnimationTimeline
|
||||
: public nsISupports
|
||||
, public nsWrapperCache
|
||||
{
|
||||
public:
|
||||
explicit AnimationTimeline(nsIDocument* aDocument)
|
||||
: mDocument(aDocument)
|
||||
, mWindow(aDocument->GetParentObject())
|
||||
explicit AnimationTimeline(nsIGlobalObject* aWindow)
|
||||
: mWindow(aWindow)
|
||||
{
|
||||
MOZ_ASSERT(mWindow);
|
||||
}
|
||||
|
@ -34,56 +32,22 @@ protected:
|
|||
virtual ~AnimationTimeline() { }
|
||||
|
||||
public:
|
||||
NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(AnimationTimeline)
|
||||
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(AnimationTimeline)
|
||||
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
|
||||
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(AnimationTimeline)
|
||||
|
||||
nsIGlobalObject* GetParentObject() const
|
||||
{
|
||||
return mWindow;
|
||||
}
|
||||
virtual JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) override;
|
||||
nsIGlobalObject* GetParentObject() const { return mWindow; }
|
||||
|
||||
// AnimationTimeline methods
|
||||
Nullable<TimeDuration> GetCurrentTime() const;
|
||||
virtual Nullable<TimeDuration> GetCurrentTime() const = 0;
|
||||
|
||||
// Wrapper functions for AnimationTimeline DOM methods when called from
|
||||
// script.
|
||||
Nullable<double> GetCurrentTimeAsDouble() const;
|
||||
|
||||
// Converts a TimeStamp to the equivalent value in timeline time.
|
||||
// Note that when IsUnderTestControl() is true, there is no correspondence
|
||||
// between timeline time and wallclock time. In such a case, passing a
|
||||
// timestamp from TimeStamp::Now() to this method will not return a
|
||||
// meaningful result.
|
||||
Nullable<TimeDuration> ToTimelineTime(const TimeStamp& aTimeStamp) const;
|
||||
TimeStamp ToTimeStamp(const TimeDuration& aTimelineTime) const;
|
||||
|
||||
nsRefreshDriver* GetRefreshDriver() const;
|
||||
// Returns true if this timeline is driven by a refresh driver that is
|
||||
// under test control. In such a case, there is no correspondence between
|
||||
// TimeStamp values returned by the refresh driver and wallclock time.
|
||||
// As a result, passing a value from TimeStamp::Now() to ToTimelineTime()
|
||||
// would not return a meaningful result.
|
||||
bool IsUnderTestControl() const
|
||||
{
|
||||
nsRefreshDriver* refreshDriver = GetRefreshDriver();
|
||||
return refreshDriver && refreshDriver->IsTestControllingRefreshesEnabled();
|
||||
Nullable<double> GetCurrentTimeAsDouble() const {
|
||||
return AnimationUtils::TimeDurationToDouble(GetCurrentTime());
|
||||
}
|
||||
|
||||
protected:
|
||||
TimeStamp GetCurrentTimeStamp() const;
|
||||
|
||||
// Sometimes documents can be given a new window, or windows can be given a
|
||||
// new document (e.g. document.open()). Since GetParentObject is required to
|
||||
// _always_ return the same object it can't get the window from our
|
||||
// mDocument, which is why we have pointers to both our document and window.
|
||||
nsCOMPtr<nsIDocument> mDocument;
|
||||
nsCOMPtr<nsIGlobalObject> mWindow;
|
||||
|
||||
// The most recently used refresh driver time. This is used in cases where
|
||||
// we don't have a refresh driver (e.g. because we are in a display:none
|
||||
// iframe).
|
||||
mutable TimeStamp mLastRefreshDriverTime;
|
||||
};
|
||||
|
||||
} // namespace dom
|
||||
|
|
|
@ -0,0 +1,123 @@
|
|||
/* vim: set shiftwidth=2 tabstop=8 autoindent cindent expandtab: */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "DocumentTimeline.h"
|
||||
#include "mozilla/dom/DocumentTimelineBinding.h"
|
||||
#include "AnimationUtils.h"
|
||||
#include "nsContentUtils.h"
|
||||
#include "nsIPresShell.h"
|
||||
#include "nsPresContext.h"
|
||||
#include "nsRefreshDriver.h"
|
||||
#include "nsDOMNavigationTiming.h"
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_INHERITED(DocumentTimeline, AnimationTimeline,
|
||||
mDocument)
|
||||
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(DocumentTimeline,
|
||||
AnimationTimeline)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRACE_END
|
||||
|
||||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(DocumentTimeline)
|
||||
NS_INTERFACE_MAP_END_INHERITING(AnimationTimeline)
|
||||
|
||||
NS_IMPL_ADDREF_INHERITED(DocumentTimeline, AnimationTimeline)
|
||||
NS_IMPL_RELEASE_INHERITED(DocumentTimeline, AnimationTimeline)
|
||||
|
||||
JSObject*
|
||||
DocumentTimeline::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
|
||||
{
|
||||
return DocumentTimelineBinding::Wrap(aCx, this, aGivenProto);
|
||||
}
|
||||
|
||||
Nullable<TimeDuration>
|
||||
DocumentTimeline::GetCurrentTime() const
|
||||
{
|
||||
return ToTimelineTime(GetCurrentTimeStamp());
|
||||
}
|
||||
|
||||
TimeStamp
|
||||
DocumentTimeline::GetCurrentTimeStamp() const
|
||||
{
|
||||
nsRefreshDriver* refreshDriver = GetRefreshDriver();
|
||||
TimeStamp refreshTime = refreshDriver
|
||||
? refreshDriver->MostRecentRefresh()
|
||||
: TimeStamp();
|
||||
|
||||
// Always return the same object to benefit from return-value optimization.
|
||||
TimeStamp result = !refreshTime.IsNull()
|
||||
? refreshTime
|
||||
: mLastRefreshDriverTime;
|
||||
|
||||
// If we don't have a refresh driver and we've never had one use the
|
||||
// timeline's zero time.
|
||||
if (result.IsNull()) {
|
||||
nsRefPtr<nsDOMNavigationTiming> timing = mDocument->GetNavigationTiming();
|
||||
if (timing) {
|
||||
result = timing->GetNavigationStartTimeStamp();
|
||||
// Also, let this time represent the current refresh time. This way
|
||||
// we'll save it as the last refresh time and skip looking up
|
||||
// navigation timing each time.
|
||||
refreshTime = result;
|
||||
}
|
||||
}
|
||||
|
||||
if (!refreshTime.IsNull()) {
|
||||
mLastRefreshDriverTime = refreshTime;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
Nullable<TimeDuration>
|
||||
DocumentTimeline::ToTimelineTime(const TimeStamp& aTimeStamp) const
|
||||
{
|
||||
Nullable<TimeDuration> result; // Initializes to null
|
||||
if (aTimeStamp.IsNull()) {
|
||||
return result;
|
||||
}
|
||||
|
||||
nsRefPtr<nsDOMNavigationTiming> timing = mDocument->GetNavigationTiming();
|
||||
if (MOZ_UNLIKELY(!timing)) {
|
||||
return result;
|
||||
}
|
||||
|
||||
result.SetValue(aTimeStamp - timing->GetNavigationStartTimeStamp());
|
||||
return result;
|
||||
}
|
||||
|
||||
TimeStamp
|
||||
DocumentTimeline::ToTimeStamp(const TimeDuration& aTimeDuration) const
|
||||
{
|
||||
TimeStamp result;
|
||||
nsRefPtr<nsDOMNavigationTiming> timing = mDocument->GetNavigationTiming();
|
||||
if (MOZ_UNLIKELY(!timing)) {
|
||||
return result;
|
||||
}
|
||||
|
||||
result = timing->GetNavigationStartTimeStamp() + aTimeDuration;
|
||||
return result;
|
||||
}
|
||||
|
||||
nsRefreshDriver*
|
||||
DocumentTimeline::GetRefreshDriver() const
|
||||
{
|
||||
nsIPresShell* presShell = mDocument->GetShell();
|
||||
if (MOZ_UNLIKELY(!presShell)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
nsPresContext* presContext = presShell->GetPresContext();
|
||||
if (MOZ_UNLIKELY(!presContext)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return presContext->RefreshDriver();
|
||||
}
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
|
@ -0,0 +1,76 @@
|
|||
/* vim: set shiftwidth=2 tabstop=8 autoindent cindent expandtab: */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#ifndef mozilla_dom_DocumentTimeline_h
|
||||
#define mozilla_dom_DocumentTimeline_h
|
||||
|
||||
#include "mozilla/TimeStamp.h"
|
||||
#include "AnimationTimeline.h"
|
||||
#include "nsIDocument.h"
|
||||
#include "nsRefreshDriver.h"
|
||||
|
||||
struct JSContext;
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
class DocumentTimeline final : public AnimationTimeline
|
||||
{
|
||||
public:
|
||||
explicit DocumentTimeline(nsIDocument* aDocument)
|
||||
: AnimationTimeline(aDocument->GetParentObject())
|
||||
, mDocument(aDocument)
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
virtual ~DocumentTimeline() { }
|
||||
|
||||
public:
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(DocumentTimeline,
|
||||
AnimationTimeline)
|
||||
|
||||
virtual JSObject* WrapObject(JSContext* aCx,
|
||||
JS::Handle<JSObject*> aGivenProto) override;
|
||||
|
||||
// DocumentTimeline methods
|
||||
virtual Nullable<TimeDuration> GetCurrentTime() const override;
|
||||
|
||||
// Converts a TimeStamp to the equivalent value in timeline time.
|
||||
// Note that when IsUnderTestControl() is true, there is no correspondence
|
||||
// between timeline time and wallclock time. In such a case, passing a
|
||||
// timestamp from TimeStamp::Now() to this method will not return a
|
||||
// meaningful result.
|
||||
Nullable<TimeDuration> ToTimelineTime(const TimeStamp& aTimeStamp) const;
|
||||
TimeStamp ToTimeStamp(const TimeDuration& aTimelineTime) const;
|
||||
|
||||
nsRefreshDriver* GetRefreshDriver() const;
|
||||
// Returns true if this timeline is driven by a refresh driver that is
|
||||
// under test control. In such a case, there is no correspondence between
|
||||
// TimeStamp values returned by the refresh driver and wallclock time.
|
||||
// As a result, passing a value from TimeStamp::Now() to ToTimelineTime()
|
||||
// would not return a meaningful result.
|
||||
bool IsUnderTestControl() const
|
||||
{
|
||||
nsRefreshDriver* refreshDriver = GetRefreshDriver();
|
||||
return refreshDriver && refreshDriver->IsTestControllingRefreshesEnabled();
|
||||
}
|
||||
|
||||
protected:
|
||||
TimeStamp GetCurrentTimeStamp() const;
|
||||
|
||||
nsCOMPtr<nsIDocument> mDocument;
|
||||
|
||||
// The most recently used refresh driver time. This is used in cases where
|
||||
// we don't have a refresh driver (e.g. because we are in a display:none
|
||||
// iframe).
|
||||
mutable TimeStamp mLastRefreshDriverTime;
|
||||
};
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
|
||||
#endif // mozilla_dom_DocumentTimeline_h
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
#include "PendingPlayerTracker.h"
|
||||
|
||||
#include "mozilla/dom/AnimationTimeline.h"
|
||||
#include "mozilla/dom/DocumentTimeline.h"
|
||||
#include "nsIFrame.h"
|
||||
#include "nsIPresShell.h"
|
||||
|
||||
|
@ -52,7 +52,7 @@ TriggerPlayerAtTime(nsRefPtrHashKey<dom::AnimationPlayer>* aKey,
|
|||
void* aReadyTime)
|
||||
{
|
||||
dom::AnimationPlayer* player = aKey->GetKey();
|
||||
dom::AnimationTimeline* timeline = player->Timeline();
|
||||
dom::DocumentTimeline* timeline = player->Timeline();
|
||||
|
||||
// When the timeline's refresh driver is under test control, its values
|
||||
// have no correspondance to wallclock times so we shouldn't try to convert
|
||||
|
|
|
@ -12,9 +12,11 @@ EXPORTS.mozilla.dom += [
|
|||
'AnimationEffect.h',
|
||||
'AnimationPlayer.h',
|
||||
'AnimationTimeline.h',
|
||||
'DocumentTimeline.h',
|
||||
]
|
||||
|
||||
EXPORTS.mozilla += [
|
||||
'AnimationUtils.h',
|
||||
'PendingPlayerTracker.h',
|
||||
]
|
||||
|
||||
|
@ -23,6 +25,7 @@ UNIFIED_SOURCES += [
|
|||
'AnimationEffect.cpp',
|
||||
'AnimationPlayer.cpp',
|
||||
'AnimationTimeline.cpp',
|
||||
'DocumentTimeline.cpp',
|
||||
'PendingPlayerTracker.cpp',
|
||||
]
|
||||
|
||||
|
|
|
@ -1,30 +1,14 @@
|
|||
<!doctype html>
|
||||
<meta charset=utf-8>
|
||||
<title>Web Animations API: AnimationTimeline tests</title>
|
||||
<title>Web Animations API: DocumentTimeline tests</title>
|
||||
<script src="/resources/testharness.js"></script>
|
||||
<script src="/resources/testharnessreport.js"></script>
|
||||
<script src="/resources/WebIDLParser.js"></script>
|
||||
<script src="/resources/idlharness.js"></script>
|
||||
<div id="log"></div>
|
||||
<iframe src="data:text/html;charset=utf-8," width="10" height="10" id="iframe"></iframe>
|
||||
<iframe src="data:text/html;charset=utf-8,%3Chtml%20style%3D%22display%3Anone%22%3E%3C%2Fhtml%3E" width="10" height="10" id="hidden-iframe"></iframe>
|
||||
<script type="text/plain" id="AnimationTimeline-IDL">
|
||||
interface AnimationTimeline {
|
||||
readonly attribute double? currentTime;
|
||||
};
|
||||
</script>
|
||||
<script>
|
||||
'use strict';
|
||||
|
||||
var idlArray;
|
||||
test(function() {
|
||||
idlArray = new IdlArray();
|
||||
idlArray.add_idls(
|
||||
document.getElementById('AnimationTimeline-IDL').textContent);
|
||||
idlArray.add_objects( { AnimationTimeline: ['document.timeline'] } );
|
||||
});
|
||||
idlArray.test();
|
||||
|
||||
test(function() {
|
||||
assert_equals(document.timeline, document.timeline,
|
||||
'document.timeline returns the same object every time');
|
|
@ -2,9 +2,6 @@
|
|||
support-files =
|
||||
testcommon.js
|
||||
|
||||
[animation-timeline/test_animation-timeline.html]
|
||||
[animation-timeline/test_request_animation_frame.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[css-animations/test_animations-dynamic-changes.html]
|
||||
[css-animations/test_animation-effect-name.html]
|
||||
[css-animations/test_animation-pausing.html]
|
||||
|
@ -24,4 +21,7 @@ skip-if = buildapp == 'mulet'
|
|||
[css-transitions/test_animation-player-starttime.html]
|
||||
[css-transitions/test_element-get-animation-players.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[document-timeline/test_document-timeline.html]
|
||||
[document-timeline/test_request_animation_frame.html]
|
||||
skip-if = buildapp == 'mulet'
|
||||
[mozilla/test_deferred_start.html]
|
||||
|
|
|
@ -507,6 +507,13 @@ this.AppsUtils = {
|
|||
* @param aStatus : the APP_STATUS_* for this app.
|
||||
*/
|
||||
checkAppRole: function(aRole, aStatus) {
|
||||
try {
|
||||
// Anything is possible in developer mode.
|
||||
if (Services.prefs.getBoolPref("dom.apps.developer_mode")) {
|
||||
return true;
|
||||
}
|
||||
} catch(e) {}
|
||||
|
||||
if (aRole == "theme" && aStatus !== Ci.nsIPrincipal.APP_STATUS_CERTIFIED) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -102,7 +102,12 @@ this.ImportExport = {
|
|||
|
||||
// Exporting certified apps is forbidden, as it is to import them.
|
||||
// We *have* to do this check in the parent process.
|
||||
if (aApp.appStatus == Ci.nsIPrincipal.APP_STATUS_CERTIFIED) {
|
||||
let devMode = false;
|
||||
try {
|
||||
devMode = Services.prefs.getBoolPref("dom.apps.developer_mode");
|
||||
} catch(e) {};
|
||||
|
||||
if (aApp.appStatus == Ci.nsIPrincipal.APP_STATUS_CERTIFIED && !devMode) {
|
||||
throw "CertifiedAppExportForbidden";
|
||||
}
|
||||
|
||||
|
@ -391,6 +396,12 @@ this.ImportExport = {
|
|||
yield DOMApplicationRegistry._openPackage(appFile, meta, false);
|
||||
let maxStatus = isSigned ? Ci.nsIPrincipal.APP_STATUS_PRIVILEGED
|
||||
: Ci.nsIPrincipal.APP_STATUS_INSTALLED;
|
||||
try {
|
||||
// Anything is possible in developer mode.
|
||||
if (Services.prefs.getBoolPref("dom.apps.developer_mode")) {
|
||||
maxStatus = Ci.nsIPrincipal.APP_STATUS_CERTIFIED;
|
||||
}
|
||||
} catch(e) {};
|
||||
meta.appStatus = AppsUtils.getAppManifestStatus(manifest);
|
||||
debug("Signed app? " + isSigned);
|
||||
if (meta.appStatus > maxStatus) {
|
||||
|
|
|
@ -178,7 +178,8 @@ this.PermissionsInstaller = {
|
|||
}
|
||||
}
|
||||
catch (ex) {
|
||||
dump("Caught webapps install permissions error for " + aApp.origin);
|
||||
dump("Caught webapps install permissions error for " + aApp.origin +
|
||||
" : " + ex + "\n");
|
||||
Cu.reportError(ex);
|
||||
if (aOnError) {
|
||||
aOnError();
|
||||
|
|
|
@ -2559,6 +2559,13 @@ this.DOMApplicationRegistry = {
|
|||
// Hosted apps can't be trusted or certified, so just check that the
|
||||
// manifest doesn't ask for those.
|
||||
function checkAppStatus(aManifest) {
|
||||
try {
|
||||
// Everything is authorized in developer mode.
|
||||
if (Services.prefs.getBoolPref("dom.apps.developer_mode")) {
|
||||
return true;
|
||||
}
|
||||
} catch(e) {}
|
||||
|
||||
let manifestStatus = aManifest.type || "web";
|
||||
return manifestStatus === "web" ||
|
||||
manifestStatus === "trusted";
|
||||
|
@ -3904,10 +3911,18 @@ this.DOMApplicationRegistry = {
|
|||
? Ci.nsIPrincipal.APP_STATUS_PRIVILEGED
|
||||
: Ci.nsIPrincipal.APP_STATUS_INSTALLED;
|
||||
|
||||
try {
|
||||
// Anything is possible in developer mode.
|
||||
if (Services.prefs.getBoolPref("dom.apps.developer_mode")) {
|
||||
maxStatus = Ci.nsIPrincipal.APP_STATUS_CERTIFIED;
|
||||
}
|
||||
} catch(e) {};
|
||||
|
||||
let allowUnsignedLangpack = false;
|
||||
try {
|
||||
allowUnsignedLangpack =
|
||||
Services.prefs.getBoolPref("dom.apps.allow_unsigned_langpacks");
|
||||
Services.prefs.getBoolPref("dom.apps.allow_unsigned_langpacks") ||
|
||||
Services.prefs.getBoolPref("dom.apps.developer_mode");
|
||||
} catch(e) {}
|
||||
let isLangPack = newManifest.role === "langpack" &&
|
||||
(aIsSigned || allowUnsignedLangpack);
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"name": "Certified hosted app",
|
||||
"description": "An app that can't only be installed in dev mode.",
|
||||
"launch_path": "/tests/dom/apps/tests/file_app.sjs?apptype=hosted",
|
||||
"type": "certified"
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
Content-Type: application/manifest+json
|
|
@ -12,6 +12,8 @@ support-files =
|
|||
file_cached_app.template.appcache
|
||||
file_cached_app.template.webapp
|
||||
file_hosted_app.template.webapp
|
||||
file_hosted_certified.webapp
|
||||
file_hosted_certified.webapp^headers^
|
||||
file_manifest.json
|
||||
file_manifest.json^headers^
|
||||
file_trusted_app.template.webapp
|
||||
|
@ -40,6 +42,7 @@ skip-if = os == "android" || toolkit == "gonk" # embed-apps doesn't work in moch
|
|||
skip-if = os == "android" || toolkit == "gonk" # embed-apps doesn't work in mochitest app
|
||||
[test_bug_795164.html]
|
||||
[test_import_export.html]
|
||||
[test_install_dev_mode.html]
|
||||
[test_install_multiple_apps_origin.html]
|
||||
[test_install_receipts.html]
|
||||
[test_langpacks.html]
|
||||
|
|
|
@ -0,0 +1,122 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id={1111961}
|
||||
-->
|
||||
<head>
|
||||
<title>Test for Bug {1111961}</title>
|
||||
<script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id={1111961}">Mozilla Bug {1111961}</a>
|
||||
<p id="display"></p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
<script class="testbody" type="application/javascript;version=1.7">
|
||||
|
||||
var gManifestURL = "http://test/tests/dom/apps/tests/file_hosted_certified.webapp";
|
||||
var gGenerator = runTest();
|
||||
|
||||
function go() {
|
||||
SpecialPowers.pushPermissions(
|
||||
[{ "type": "webapps-manage", "allow": 1, "context": document }],
|
||||
function() { gGenerator.next() });
|
||||
}
|
||||
|
||||
function continueTest() {
|
||||
try {
|
||||
gGenerator.next();
|
||||
} catch (e if e instanceof StopIteration) {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
||||
function finish() {
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
function cbError(aEvent) {
|
||||
ok(false, "Error callback invoked " +
|
||||
aEvent.target.error.name + " " + aEvent.target.error.message);
|
||||
finish();
|
||||
}
|
||||
|
||||
function cbSuccess(aMsg) {
|
||||
return function(aEvent) {
|
||||
ok(true, aMsg);
|
||||
continueTest();
|
||||
}
|
||||
}
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
/**
|
||||
* Install 2 apps from the same origin and uninstall them.
|
||||
*/
|
||||
function runTest() {
|
||||
SpecialPowers.setAllAppsLaunchable(true);
|
||||
|
||||
SpecialPowers.autoConfirmAppInstall(continueTest);
|
||||
yield undefined;
|
||||
|
||||
SpecialPowers.autoConfirmAppUninstall(continueTest);
|
||||
yield undefined;
|
||||
|
||||
request = navigator.mozApps.mgmt.getAll();
|
||||
request.onerror = cbError;
|
||||
request.onsuccess = continueTest;
|
||||
yield undefined;
|
||||
var initialAppsCount = request.result.length;
|
||||
info("Starting with " + initialAppsCount + " apps installed.");
|
||||
|
||||
// We are not in dev mode, so this install will fail.
|
||||
var request = navigator.mozApps.install(gManifestURL, { });
|
||||
request.onerror = cbSuccess("Can't install certified app without dev mode");
|
||||
request.onsuccess = cbError;
|
||||
yield undefined;
|
||||
|
||||
// Turn on dev mode.
|
||||
SpecialPowers.pushPrefEnv({"set": [["dom.apps.developer_mode", true]]},
|
||||
continueTest);
|
||||
yield undefined;
|
||||
|
||||
// Installation should succeed now.
|
||||
request = navigator.mozApps.install(gManifestURL, { });
|
||||
request.onerror = cbError;
|
||||
request.onsuccess = cbSuccess("Install certified app in dev mode");;
|
||||
yield undefined;
|
||||
|
||||
// Uninstall and check we cleaned up.
|
||||
var app = request.result;
|
||||
|
||||
navigator.mozApps.mgmt.onuninstall = function(event) {
|
||||
var app = event.application;
|
||||
is(app.manifestURL, gManifestURL, "App uninstall event ok.");
|
||||
continueTest();
|
||||
}
|
||||
request = navigator.mozApps.mgmt.uninstall(app);
|
||||
request.onerror = cbError;
|
||||
request.onsuccess = continueTest;
|
||||
yield undefined;
|
||||
yield undefined;
|
||||
is(request.result, gManifestURL, "App uninstalled.");
|
||||
navigator.mozApps.mgmt.onuninstall = null;
|
||||
|
||||
request = navigator.mozApps.mgmt.getAll();
|
||||
request.onerror = cbError;
|
||||
request.onsuccess = continueTest;
|
||||
yield undefined;
|
||||
is(request.result.length, initialAppsCount, "All apps are uninstalled.");
|
||||
}
|
||||
|
||||
addLoadEvent(go);
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
|
@ -201,6 +201,7 @@ nsContentSink::Init(nsIDocument* aDoc,
|
|||
|
||||
if (sEnablePerfMode != 0) {
|
||||
mDynamicLowerValue = sEnablePerfMode == 1;
|
||||
FavorPerformanceHint(!mDynamicLowerValue, 0);
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
|
@ -1407,6 +1408,15 @@ nsContentSink::DidProcessATokenImpl()
|
|||
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
void
|
||||
nsContentSink::FavorPerformanceHint(bool perfOverStarvation, uint32_t starvationDelay)
|
||||
{
|
||||
static NS_DEFINE_CID(kAppShellCID, NS_APPSHELL_CID);
|
||||
nsCOMPtr<nsIAppShell> appShell = do_GetService(kAppShellCID);
|
||||
if (appShell)
|
||||
appShell->FavorPerformanceHint(perfOverStarvation, starvationDelay);
|
||||
}
|
||||
|
||||
void
|
||||
nsContentSink::BeginUpdate(nsIDocument *aDocument, nsUpdateType aUpdateType)
|
||||
{
|
||||
|
@ -1484,6 +1494,12 @@ nsContentSink::DropParserAndPerfHint(void)
|
|||
// reference.
|
||||
nsRefPtr<nsParserBase> kungFuDeathGrip(mParser.forget());
|
||||
|
||||
if (mDynamicLowerValue) {
|
||||
// Reset the performance hint which was set to FALSE
|
||||
// when mDynamicLowerValue was set.
|
||||
FavorPerformanceHint(true, 0);
|
||||
}
|
||||
|
||||
if (!mRunsToCompletion) {
|
||||
mDocument->UnblockOnload(true);
|
||||
}
|
||||
|
@ -1521,6 +1537,7 @@ nsContentSink::WillParseImpl(void)
|
|||
(currentTime - lastEventTime) < uint32_t(sInteractiveTime));
|
||||
|
||||
if (mDynamicLowerValue != newDynLower) {
|
||||
FavorPerformanceHint(!newDynLower, 0);
|
||||
mDynamicLowerValue = newDynLower;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -239,6 +239,8 @@ public:
|
|||
static void NotifyDocElementCreated(nsIDocument* aDoc);
|
||||
|
||||
protected:
|
||||
void
|
||||
FavorPerformanceHint(bool perfOverStarvation, uint32_t starvationDelay);
|
||||
|
||||
inline int32_t GetNotificationInterval()
|
||||
{
|
||||
|
|
|
@ -1033,6 +1033,12 @@ nsDOMWindowUtils::SendWheelEvent(float aX,
|
|||
|
||||
widget->DispatchAPZAwareEvent(&wheelEvent);
|
||||
|
||||
if (gfxPrefs::AsyncPanZoomEnabled()) {
|
||||
// Computing overflow deltas is not compatible with APZ, so if APZ is
|
||||
// enabled, we skip testing it.
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
bool failedX = false;
|
||||
if ((aOptions & WHEEL_EVENT_EXPECTED_OVERFLOW_DELTA_X_ZERO) &&
|
||||
wheelEvent.overflowDeltaX != 0) {
|
||||
|
|
|
@ -186,9 +186,9 @@
|
|||
#include "nsSandboxFlags.h"
|
||||
#include "nsIAppsService.h"
|
||||
#include "mozilla/dom/AnonymousContent.h"
|
||||
#include "mozilla/dom/AnimationTimeline.h"
|
||||
#include "mozilla/dom/BindingUtils.h"
|
||||
#include "mozilla/dom/DocumentFragment.h"
|
||||
#include "mozilla/dom/DocumentTimeline.h"
|
||||
#include "mozilla/dom/Event.h"
|
||||
#include "mozilla/dom/HTMLBodyElement.h"
|
||||
#include "mozilla/dom/HTMLInputElement.h"
|
||||
|
@ -2017,7 +2017,7 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INTERNAL(nsDocument)
|
|||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mCachedEncoder)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mStateObjectCached)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mUndoManager)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mAnimationTimeline)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mDocumentTimeline)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mPendingPlayerTracker)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mTemplateContentsOwner)
|
||||
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mChildrenCollection)
|
||||
|
@ -2101,7 +2101,7 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsDocument)
|
|||
NS_IMPL_CYCLE_COLLECTION_UNLINK(mOriginalDocument)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(mCachedEncoder)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(mUndoManager)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(mAnimationTimeline)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(mDocumentTimeline)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(mPendingPlayerTracker)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(mTemplateContentsOwner)
|
||||
NS_IMPL_CYCLE_COLLECTION_UNLINK(mChildrenCollection)
|
||||
|
@ -2303,7 +2303,7 @@ nsDocument::Reset(nsIChannel* aChannel, nsILoadGroup* aLoadGroup)
|
|||
// Note that, since mTiming does not change during a reset, the
|
||||
// navigationStart time remains unchanged and therefore any future new
|
||||
// timeline will have the same global clock time as the old one.
|
||||
mAnimationTimeline = nullptr;
|
||||
mDocumentTimeline = nullptr;
|
||||
|
||||
nsCOMPtr<nsIPropertyBag2> bag = do_QueryInterface(aChannel);
|
||||
if (bag) {
|
||||
|
@ -3322,14 +3322,14 @@ nsDocument::IsWebAnimationsEnabled(JSContext* /*unused*/, JSObject* /*unused*/)
|
|||
Preferences::GetBool("dom.animations-api.core.enabled");
|
||||
}
|
||||
|
||||
AnimationTimeline*
|
||||
DocumentTimeline*
|
||||
nsDocument::Timeline()
|
||||
{
|
||||
if (!mAnimationTimeline) {
|
||||
mAnimationTimeline = new AnimationTimeline(this);
|
||||
if (!mDocumentTimeline) {
|
||||
mDocumentTimeline = new DocumentTimeline(this);
|
||||
}
|
||||
|
||||
return mAnimationTimeline;
|
||||
return mDocumentTimeline;
|
||||
}
|
||||
|
||||
/* Return true if the document is in the focused top-level window, and is an
|
||||
|
|
|
@ -785,7 +785,7 @@ public:
|
|||
virtual already_AddRefed<mozilla::dom::UndoManager> GetUndoManager() override;
|
||||
|
||||
static bool IsWebAnimationsEnabled(JSContext* aCx, JSObject* aObject);
|
||||
virtual mozilla::dom::AnimationTimeline* Timeline() override;
|
||||
virtual mozilla::dom::DocumentTimeline* Timeline() override;
|
||||
|
||||
virtual nsresult SetSubDocumentFor(Element* aContent,
|
||||
nsIDocument* aSubDoc) override;
|
||||
|
@ -1805,7 +1805,7 @@ private:
|
|||
|
||||
nsRefPtr<mozilla::dom::UndoManager> mUndoManager;
|
||||
|
||||
nsRefPtr<mozilla::dom::AnimationTimeline> mAnimationTimeline;
|
||||
nsRefPtr<mozilla::dom::DocumentTimeline> mDocumentTimeline;
|
||||
|
||||
enum ViewportType {
|
||||
DisplayWidthHeight,
|
||||
|
|
|
@ -101,7 +101,6 @@ class VRHMDInfo;
|
|||
} // namespace gfx
|
||||
|
||||
namespace dom {
|
||||
class AnimationTimeline;
|
||||
class AnonymousContent;
|
||||
class Attr;
|
||||
class BoxObject;
|
||||
|
@ -109,6 +108,7 @@ class CDATASection;
|
|||
class Comment;
|
||||
struct CustomElementDefinition;
|
||||
class DocumentFragment;
|
||||
class DocumentTimeline;
|
||||
class DocumentType;
|
||||
class DOMImplementation;
|
||||
class DOMStringList;
|
||||
|
@ -2087,7 +2087,7 @@ public:
|
|||
|
||||
virtual already_AddRefed<mozilla::dom::UndoManager> GetUndoManager() = 0;
|
||||
|
||||
virtual mozilla::dom::AnimationTimeline* Timeline() = 0;
|
||||
virtual mozilla::dom::DocumentTimeline* Timeline() = 0;
|
||||
|
||||
typedef mozilla::dom::CallbackObjectHolder<
|
||||
mozilla::dom::FrameRequestCallback,
|
||||
|
|
|
@ -218,7 +218,13 @@ static nsIScriptSecurityManager *sSecurityManager;
|
|||
// the appropriate pref is set.
|
||||
|
||||
static bool sGCOnMemoryPressure;
|
||||
|
||||
// nsJSEnvironmentObserver observes the user-interaction-inactive notifications
|
||||
// and triggers a shrinking a garbage collection if the user is still inactive
|
||||
// after NS_SHRINKING_GC_DELAY ms later, if the appropriate pref is set.
|
||||
|
||||
static bool sCompactOnUserInactive;
|
||||
static bool sIsCompactingOnUserInactive = false;
|
||||
|
||||
// In testing, we call RunNextCollectorTimer() to ensure that the collectors are run more
|
||||
// aggressively than they would be in regular browsing. sExpensiveCollectorPokes keeps
|
||||
|
@ -298,6 +304,10 @@ nsJSEnvironmentObserver::Observe(nsISupports* aSubject, const char* aTopic,
|
|||
}
|
||||
} else if (!nsCRT::strcmp(aTopic, "user-interaction-active")) {
|
||||
nsJSContext::KillShrinkingGCTimer();
|
||||
if (sIsCompactingOnUserInactive) {
|
||||
JS::AbortIncrementalGC(sRuntime);
|
||||
}
|
||||
MOZ_ASSERT(!sIsCompactingOnUserInactive);
|
||||
} else if (!nsCRT::strcmp(aTopic, "quit-application") ||
|
||||
!nsCRT::strcmp(aTopic, NS_XPCOM_SHUTDOWN_OBSERVER_ID)) {
|
||||
sShuttingDown = true;
|
||||
|
@ -1818,6 +1828,7 @@ void
|
|||
ShrinkingGCTimerFired(nsITimer* aTimer, void* aClosure)
|
||||
{
|
||||
nsJSContext::KillShrinkingGCTimer();
|
||||
sIsCompactingOnUserInactive = true;
|
||||
nsJSContext::GarbageCollectNow(JS::gcreason::USER_INACTIVE,
|
||||
nsJSContext::IncrementalGC,
|
||||
nsJSContext::ShrinkingGC);
|
||||
|
@ -2235,6 +2246,7 @@ DOMGCSliceCallback(JSRuntime *aRt, JS::GCProgress aProgress, const JS::GCDescrip
|
|||
}
|
||||
|
||||
sCCLockedOut = false;
|
||||
sIsCompactingOnUserInactive = false;
|
||||
|
||||
// May need to kill the inter-slice GC timer
|
||||
nsJSContext::KillInterSliceGCTimer();
|
||||
|
|
|
@ -88,6 +88,10 @@ DOMInterfaces = {
|
|||
'concrete': False
|
||||
},
|
||||
|
||||
'AnimationTimeline': {
|
||||
'concrete': False
|
||||
},
|
||||
|
||||
'AnonymousContent': {
|
||||
'wrapperCache': False
|
||||
},
|
||||
|
|
|
@ -53,7 +53,8 @@ const browserElementTestHelpers = {
|
|||
['dom.ipc.processPriorityManager.BACKGROUND.LRUPoolLevels', 2],
|
||||
['dom.ipc.processPriorityManager.FOREGROUND.LRUPoolLevels', 2],
|
||||
['dom.ipc.processPriorityManager.testMode', true],
|
||||
['dom.ipc.processPriorityManager.enabled', true]
|
||||
['dom.ipc.processPriorityManager.enabled', true],
|
||||
['dom.ipc.processCount', 3]
|
||||
);
|
||||
},
|
||||
|
||||
|
@ -228,6 +229,43 @@ function expectPriorityWithLRUSet(childID, expectedPriority, expectedLRU) {
|
|||
});
|
||||
}
|
||||
|
||||
// Returns a promise which is resolved or rejected the next time the process
|
||||
// childID delays its priority change. We resolve if the priority matches
|
||||
// expectedPriority, and we reject otherwise.
|
||||
|
||||
function expectPriorityDelay(childID, expectedPriority) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
var observed = false;
|
||||
browserElementTestHelpers.addProcessPriorityObserver(
|
||||
'process-priority-delayed',
|
||||
function(subject, topic, data) {
|
||||
if (observed) {
|
||||
return;
|
||||
}
|
||||
|
||||
var [id, priority] = data.split(":");
|
||||
if (id != childID) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Make sure we run the is() calls in this observer only once, otherwise
|
||||
// we'll expect /every/ priority change to match expectedPriority.
|
||||
observed = true;
|
||||
|
||||
is(priority, expectedPriority,
|
||||
'Expected delayed priority change of childID ' + childID +
|
||||
' to ' + expectedPriority);
|
||||
|
||||
if (priority == expectedPriority) {
|
||||
resolve();
|
||||
} else {
|
||||
reject();
|
||||
}
|
||||
}
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
// Returns a promise which is resolved the first time the given iframe fires
|
||||
// the mozbrowser##eventName event.
|
||||
function expectMozbrowserEvent(iframe, eventName) {
|
||||
|
|
|
@ -27,3 +27,4 @@ support-files = file_NestedFramesOuter.html
|
|||
[test_WebGLContextLost.html]
|
||||
disabled = bug 865844
|
||||
support-files = file_WebGLContextLost.html
|
||||
[test_DelayedBackgroundTransition.html]
|
||||
|
|
|
@ -18,6 +18,17 @@ browserElementTestHelpers.setEnabledPref(true);
|
|||
browserElementTestHelpers.addPermission();
|
||||
browserElementTestHelpers.enableProcessPriorityManager();
|
||||
|
||||
// ProcessPriorityManager requires at least one process in foreground
|
||||
// so that other processes can transit freely between foreground and
|
||||
// background.
|
||||
function setupTest() {
|
||||
var foreground = document.createElement('iframe');
|
||||
foreground.setAttribute('mozbrowser', true);
|
||||
foreground.src = browserElementTestHelpers.emptyPage;
|
||||
expectMozbrowserEvent(foreground, 'loadend').then(runTest);
|
||||
document.body.appendChild(foreground);
|
||||
}
|
||||
|
||||
function runTest() {
|
||||
var iframe = document.createElement('iframe');
|
||||
iframe.setAttribute('mozbrowser', true);
|
||||
|
@ -51,7 +62,7 @@ function runTest() {
|
|||
// service. This is controled by the media.useAudioChannelService pref.
|
||||
addEventListener('testready', function() {
|
||||
SpecialPowers.pushPrefEnv({set: [['media.useAudioChannelService', true]]},
|
||||
runTest);
|
||||
setupTest);
|
||||
});
|
||||
|
||||
</script>
|
||||
|
|
|
@ -19,6 +19,17 @@ browserElementTestHelpers.setEnabledPref(true);
|
|||
browserElementTestHelpers.addPermission();
|
||||
browserElementTestHelpers.enableProcessPriorityManager();
|
||||
|
||||
// ProcessPriorityManager requires at least one process in foreground
|
||||
// so that other processes can transit freely between foreground and
|
||||
// background.
|
||||
function setupTest() {
|
||||
var foreground = document.createElement('iframe');
|
||||
foreground.setAttribute('mozbrowser', true);
|
||||
foreground.src = browserElementTestHelpers.emptyPage;
|
||||
expectMozbrowserEvent(foreground, 'loadend').then(runTest);
|
||||
document.body.appendChild(foreground);
|
||||
}
|
||||
|
||||
function runTest() {
|
||||
var iframe = document.createElement('iframe');
|
||||
iframe.setAttribute('mozbrowser', true);
|
||||
|
@ -47,7 +58,7 @@ function runTest() {
|
|||
document.body.appendChild(iframe);
|
||||
}
|
||||
|
||||
addEventListener('testready', runTest);
|
||||
addEventListener('testready', setupTest);
|
||||
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -20,6 +20,17 @@ browserElementTestHelpers.addPermission();
|
|||
browserElementTestHelpers.enableProcessPriorityManager();
|
||||
SpecialPowers.addPermission("embed-apps", true, document);
|
||||
|
||||
// ProcessPriorityManager requires at least one process in foreground
|
||||
// so that other processes can transit freely between foreground and
|
||||
// background.
|
||||
function setupTest() {
|
||||
var foreground = document.createElement('iframe');
|
||||
foreground.setAttribute('mozbrowser', true);
|
||||
foreground.src = browserElementTestHelpers.emptyPage;
|
||||
expectMozbrowserEvent(foreground, 'loadend').then(runTest);
|
||||
document.body.appendChild(foreground);
|
||||
}
|
||||
|
||||
function runTest() {
|
||||
var iframe1 = document.createElement('iframe');
|
||||
iframe1.setAttribute('mozbrowser', true);
|
||||
|
@ -68,7 +79,7 @@ function runTest() {
|
|||
document.body.appendChild(iframe1);
|
||||
}
|
||||
|
||||
addEventListener('testready', runTest);
|
||||
addEventListener('testready', setupTest);
|
||||
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
Test that a process won't transit to BACKGROUND priority unless
|
||||
there is at least one FOREGROUND process.
|
||||
-->
|
||||
<head>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="application/javascript" src="../browserElementTestHelpers.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
</head>
|
||||
<body>
|
||||
<script type="application/javascript;version=1.7">
|
||||
"use strict";
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
browserElementTestHelpers.setEnabledPref(true);
|
||||
browserElementTestHelpers.addPermission();
|
||||
browserElementTestHelpers.enableProcessPriorityManager();
|
||||
|
||||
function insertForegroundFrame() {
|
||||
var foreground = document.createElement('iframe');
|
||||
foreground.setAttribute('mozbrowser', true);
|
||||
foreground.setAttribute('id', 'foreground');
|
||||
foreground.src = browserElementTestHelpers.emptyPage;
|
||||
expectMozbrowserEvent(foreground, 'loadend');
|
||||
document.body.appendChild(foreground);
|
||||
}
|
||||
|
||||
function runTest() {
|
||||
var iframe = document.createElement('iframe');
|
||||
iframe.setAttribute('mozbrowser', true);
|
||||
iframe.src = browserElementTestHelpers.emptyPage;
|
||||
|
||||
var childID = null;
|
||||
Promise.all([
|
||||
expectProcessCreated('FOREGROUND').then(function(chid) {
|
||||
childID = chid;
|
||||
}),
|
||||
expectMozbrowserEvent(iframe, 'loadend')
|
||||
]).then(function() {
|
||||
var p = expectPriorityDelay(childID, 'BACKGROUND');
|
||||
iframe.setVisible(false);
|
||||
return p;
|
||||
}).then(function() {
|
||||
var p = expectPriorityChange(childID, 'BACKGROUND');
|
||||
insertForegroundFrame();
|
||||
return p;
|
||||
}).then(function() {
|
||||
var p = expectPriorityChange(childID, 'FOREGROUND');
|
||||
iframe.setVisible(true);
|
||||
return p;
|
||||
}).then(SimpleTest.finish);
|
||||
|
||||
document.body.appendChild(iframe);
|
||||
}
|
||||
|
||||
addEventListener('testready', runTest);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -33,6 +33,17 @@ addEventListener('unload', function() {
|
|||
isInBrowserElement: true });
|
||||
});
|
||||
|
||||
// ProcessPriorityManager requires at least one process in foreground
|
||||
// so that other processes can transit freely between foreground and
|
||||
// background.
|
||||
function setupTest() {
|
||||
var foreground = document.createElement('iframe');
|
||||
foreground.setAttribute('mozbrowser', true);
|
||||
foreground.src = browserElementTestHelpers.emptyPage;
|
||||
expectMozbrowserEvent(foreground, 'loadend').then(runTest);
|
||||
document.body.appendChild(foreground);
|
||||
}
|
||||
|
||||
function runTest() {
|
||||
var iframe = document.createElement('iframe');
|
||||
iframe.setAttribute('mozbrowser', true);
|
||||
|
@ -62,7 +73,7 @@ addEventListener('testready', function() {
|
|||
// set the timeout to a large value.
|
||||
SpecialPowers.pushPrefEnv(
|
||||
{set: [["dom.ipc.systemMessageCPULockTimeoutSec", 99999]]},
|
||||
runTest);
|
||||
setupTest);
|
||||
});
|
||||
|
||||
</script>
|
||||
|
|
|
@ -19,6 +19,17 @@ browserElementTestHelpers.setEnabledPref(true);
|
|||
browserElementTestHelpers.addPermission();
|
||||
browserElementTestHelpers.enableProcessPriorityManager();
|
||||
|
||||
// ProcessPriorityManager requires at least one process in foreground
|
||||
// so that other processes can transit freely between foreground and
|
||||
// background.
|
||||
function setupTest() {
|
||||
var foreground = document.createElement('iframe');
|
||||
foreground.setAttribute('mozbrowser', true);
|
||||
foreground.src = browserElementTestHelpers.emptyPage;
|
||||
expectMozbrowserEvent(foreground, 'loadend').then(runTest);
|
||||
document.body.appendChild(foreground);
|
||||
}
|
||||
|
||||
function runTest() {
|
||||
var iframe = document.createElement('iframe');
|
||||
iframe.setAttribute('mozbrowser', true);
|
||||
|
@ -48,7 +59,7 @@ function runTest() {
|
|||
document.body.appendChild(iframe);
|
||||
}
|
||||
|
||||
addEventListener('testready', runTest);
|
||||
addEventListener('testready', setupTest);
|
||||
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -19,6 +19,17 @@ browserElementTestHelpers.setEnabledPref(true);
|
|||
browserElementTestHelpers.addPermission();
|
||||
browserElementTestHelpers.enableProcessPriorityManager();
|
||||
|
||||
// ProcessPriorityManager requires at least one process in foreground
|
||||
// so that other processes can transit freely between foreground and
|
||||
// background.
|
||||
function setupTest() {
|
||||
var foreground = document.createElement('iframe');
|
||||
foreground.setAttribute('mozbrowser', true);
|
||||
foreground.src = browserElementTestHelpers.emptyPage;
|
||||
expectMozbrowserEvent(foreground, 'loadend').then(runTest);
|
||||
document.body.appendChild(foreground);
|
||||
}
|
||||
|
||||
function runTest() {
|
||||
var iframe = document.createElement('iframe');
|
||||
iframe.setAttribute('mozbrowser', true);
|
||||
|
@ -53,7 +64,7 @@ function runTest() {
|
|||
document.body.appendChild(iframe);
|
||||
}
|
||||
|
||||
addEventListener('testready', runTest);
|
||||
addEventListener('testready', setupTest);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -32,6 +32,17 @@ addEventListener('unload', function() {
|
|||
isInBrowserElement: true });
|
||||
});
|
||||
|
||||
// ProcessPriorityManager requires at least one process in foreground
|
||||
// so that other processes can transit freely between foreground and
|
||||
// background.
|
||||
function setupTest() {
|
||||
var foreground = document.createElement('iframe');
|
||||
foreground.setAttribute('mozbrowser', true);
|
||||
foreground.src = browserElementTestHelpers.emptyPage;
|
||||
expectMozbrowserEvent(foreground, 'loadend').then(runTest);
|
||||
document.body.appendChild(foreground);
|
||||
}
|
||||
|
||||
function runTest() {
|
||||
// Set up the following hierarchy of frames:
|
||||
//
|
||||
|
@ -69,7 +80,7 @@ function runTest() {
|
|||
document.body.appendChild(iframe);
|
||||
}
|
||||
|
||||
addEventListener('testready', runTest);
|
||||
addEventListener('testready', setupTest);
|
||||
|
||||
</script>
|
||||
</body>
|
||||
|
|
|
@ -18,6 +18,17 @@ browserElementTestHelpers.setEnabledPref(true);
|
|||
browserElementTestHelpers.addPermission();
|
||||
browserElementTestHelpers.enableProcessPriorityManager();
|
||||
|
||||
// ProcessPriorityManager requires at least one process in foreground
|
||||
// so that other processes can transit freely between foreground and
|
||||
// background.
|
||||
function setupTest() {
|
||||
var foreground = document.createElement('iframe');
|
||||
foreground.setAttribute('mozbrowser', true);
|
||||
foreground.src = browserElementTestHelpers.emptyPage;
|
||||
expectMozbrowserEvent(foreground, 'loadend').then(runTest);
|
||||
document.body.appendChild(foreground);
|
||||
}
|
||||
|
||||
function runTest() {
|
||||
var iframe = document.createElement('iframe');
|
||||
iframe.setAttribute('mozbrowser', true);
|
||||
|
@ -46,7 +57,7 @@ function runTest() {
|
|||
document.body.appendChild(iframe);
|
||||
}
|
||||
|
||||
addEventListener('testready', runTest);
|
||||
addEventListener('testready', setupTest);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -19,6 +19,17 @@ browserElementTestHelpers.setEnabledPref(true);
|
|||
browserElementTestHelpers.addPermission();
|
||||
browserElementTestHelpers.enableProcessPriorityManager();
|
||||
|
||||
// ProcessPriorityManager requires at least one process in foreground
|
||||
// so that other processes can transit freely between foreground and
|
||||
// background.
|
||||
function setupTest() {
|
||||
var foreground = document.createElement('iframe');
|
||||
foreground.setAttribute('mozbrowser', true);
|
||||
foreground.src = browserElementTestHelpers.emptyPage;
|
||||
expectMozbrowserEvent(foreground, 'loadend').then(runTest);
|
||||
document.body.appendChild(foreground);
|
||||
}
|
||||
|
||||
function runTest() {
|
||||
var iframe = document.createElement('iframe');
|
||||
iframe.setAttribute('mozbrowser', true);
|
||||
|
@ -91,7 +102,7 @@ addEventListener('testready', function() {
|
|||
// shouldn't hurt things, and anyway this setting mirrors what we do on B2G,
|
||||
// which is what we're trying to test!
|
||||
SpecialPowers.pushPrefEnv({set: [["webgl.force-enabled", true]]},
|
||||
runTest);
|
||||
setupTest);
|
||||
});
|
||||
|
||||
</script>
|
||||
|
|
|
@ -255,9 +255,9 @@ KeyboardEvent::InitWithKeyboardEventInit(EventTarget* aOwner,
|
|||
{
|
||||
bool trusted = Init(aOwner);
|
||||
aRv = InitKeyEvent(aType, aParam.mBubbles, aParam.mCancelable,
|
||||
aParam.mView, aParam.mCtrlKey, aParam.mAltKey,
|
||||
aParam.mShiftKey, aParam.mMetaKey,
|
||||
aParam.mView, false, false, false, false,
|
||||
aParam.mKeyCode, aParam.mCharCode);
|
||||
InitModifiers(aParam);
|
||||
SetTrusted(trusted);
|
||||
mDetail = aParam.mDetail;
|
||||
mInitializedByCtor = true;
|
||||
|
|
|
@ -152,20 +152,11 @@ MouseEvent::Constructor(const GlobalObject& aGlobal,
|
|||
aParam.mCtrlKey, aParam.mAltKey, aParam.mShiftKey,
|
||||
aParam.mMetaKey, aParam.mButton, aParam.mRelatedTarget,
|
||||
aRv);
|
||||
e->InitModifiers(aParam);
|
||||
e->SetTrusted(trusted);
|
||||
|
||||
switch (e->mEvent->mClass) {
|
||||
case eMouseEventClass:
|
||||
case eMouseScrollEventClass:
|
||||
case eWheelEventClass:
|
||||
case eDragEventClass:
|
||||
case ePointerEventClass:
|
||||
case eSimpleGestureEventClass:
|
||||
e->mEvent->AsMouseEventBase()->buttons = aParam.mButtons;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
MOZ_RELEASE_ASSERT(e->mEvent->AsMouseEventBase(),
|
||||
"mEvent of MouseEvent must inherit WidgetMouseEventBase");
|
||||
e->mEvent->AsMouseEventBase()->buttons = aParam.mButtons;
|
||||
|
||||
return e.forget();
|
||||
}
|
||||
|
|
|
@ -79,9 +79,9 @@ PointerEvent::Constructor(EventTarget* aOwner,
|
|||
e->InitMouseEvent(aType, aParam.mBubbles, aParam.mCancelable,
|
||||
aParam.mView, aParam.mDetail, aParam.mScreenX,
|
||||
aParam.mScreenY, aParam.mClientX, aParam.mClientY,
|
||||
aParam.mCtrlKey, aParam.mAltKey, aParam.mShiftKey,
|
||||
aParam.mMetaKey, aParam.mButton,
|
||||
false, false, false, false, aParam.mButton,
|
||||
aParam.mRelatedTarget);
|
||||
e->InitModifiers(aParam);
|
||||
|
||||
WidgetPointerEvent* widgetEvent = e->mEvent->AsPointerEvent();
|
||||
widgetEvent->pointerId = aParam.mPointerId;
|
||||
|
|
|
@ -455,6 +455,43 @@ UIEvent::GetModifierStateInternal(const nsAString& aKey)
|
|||
return ((inputEvent->modifiers & WidgetInputEvent::GetModifier(aKey)) != 0);
|
||||
}
|
||||
|
||||
void
|
||||
UIEvent::InitModifiers(const EventModifierInit& aParam)
|
||||
{
|
||||
if (NS_WARN_IF(!mEvent)) {
|
||||
return;
|
||||
}
|
||||
WidgetInputEvent* inputEvent = mEvent->AsInputEvent();
|
||||
MOZ_ASSERT(inputEvent,
|
||||
"This method shouldn't be called if it doesn't have modifiers");
|
||||
if (NS_WARN_IF(!inputEvent)) {
|
||||
return;
|
||||
}
|
||||
|
||||
inputEvent->modifiers = MODIFIER_NONE;
|
||||
|
||||
#define SET_MODIFIER(aName, aValue) \
|
||||
if (aParam.m##aName) { \
|
||||
inputEvent->modifiers |= aValue; \
|
||||
} \
|
||||
|
||||
SET_MODIFIER(CtrlKey, MODIFIER_CONTROL)
|
||||
SET_MODIFIER(ShiftKey, MODIFIER_SHIFT)
|
||||
SET_MODIFIER(AltKey, MODIFIER_ALT)
|
||||
SET_MODIFIER(MetaKey, MODIFIER_META)
|
||||
SET_MODIFIER(ModifierAltGraph, MODIFIER_ALTGRAPH)
|
||||
SET_MODIFIER(ModifierCapsLock, MODIFIER_CAPSLOCK)
|
||||
SET_MODIFIER(ModifierFn, MODIFIER_FN)
|
||||
SET_MODIFIER(ModifierFnLock, MODIFIER_FNLOCK)
|
||||
SET_MODIFIER(ModifierNumLock, MODIFIER_NUMLOCK)
|
||||
SET_MODIFIER(ModifierOS, MODIFIER_OS)
|
||||
SET_MODIFIER(ModifierScrollLock, MODIFIER_SCROLLLOCK)
|
||||
SET_MODIFIER(ModifierSymbol, MODIFIER_SYMBOL)
|
||||
SET_MODIFIER(ModifierSymbolLock, MODIFIER_SYMBOLLOCK)
|
||||
|
||||
#undef SET_MODIFIER
|
||||
}
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
|
||||
|
|
|
@ -168,6 +168,7 @@ protected:
|
|||
|
||||
static Modifiers ComputeModifierState(const nsAString& aModifiersList);
|
||||
bool GetModifierStateInternal(const nsAString& aKey);
|
||||
void InitModifiers(const EventModifierInit& aParam);
|
||||
};
|
||||
|
||||
} // namespace dom
|
||||
|
|
|
@ -148,33 +148,6 @@ WheelEvent::GetDeltaMode(uint32_t* aDeltaMode)
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
static void
|
||||
GetModifierList(bool aCtrl, bool aShift, bool aAlt, bool aMeta,
|
||||
nsAString& aModifierList)
|
||||
{
|
||||
if (aCtrl) {
|
||||
aModifierList.AppendLiteral(NS_DOM_KEYNAME_CONTROL);
|
||||
}
|
||||
if (aShift) {
|
||||
if (!aModifierList.IsEmpty()) {
|
||||
aModifierList.Append(' ');
|
||||
}
|
||||
aModifierList.AppendLiteral(NS_DOM_KEYNAME_SHIFT);
|
||||
}
|
||||
if (aAlt) {
|
||||
if (!aModifierList.IsEmpty()) {
|
||||
aModifierList.Append(' ');
|
||||
}
|
||||
aModifierList.AppendLiteral(NS_DOM_KEYNAME_ALT);
|
||||
}
|
||||
if (aMeta) {
|
||||
if (!aModifierList.IsEmpty()) {
|
||||
aModifierList.Append(' ');
|
||||
}
|
||||
aModifierList.AppendLiteral(NS_DOM_KEYNAME_META);
|
||||
}
|
||||
}
|
||||
|
||||
already_AddRefed<WheelEvent>
|
||||
WheelEvent::Constructor(const GlobalObject& aGlobal,
|
||||
const nsAString& aType,
|
||||
|
@ -184,17 +157,14 @@ WheelEvent::Constructor(const GlobalObject& aGlobal,
|
|||
nsCOMPtr<EventTarget> t = do_QueryInterface(aGlobal.GetAsSupports());
|
||||
nsRefPtr<WheelEvent> e = new WheelEvent(t, nullptr, nullptr);
|
||||
bool trusted = e->Init(t);
|
||||
nsAutoString modifierList;
|
||||
GetModifierList(aParam.mCtrlKey, aParam.mShiftKey,
|
||||
aParam.mAltKey, aParam.mMetaKey,
|
||||
modifierList);
|
||||
aRv = e->InitWheelEvent(aType, aParam.mBubbles, aParam.mCancelable,
|
||||
aParam.mView, aParam.mDetail,
|
||||
aParam.mScreenX, aParam.mScreenY,
|
||||
aParam.mClientX, aParam.mClientY,
|
||||
aParam.mButton, aParam.mRelatedTarget,
|
||||
modifierList, aParam.mDeltaX,
|
||||
EmptyString(), aParam.mDeltaX,
|
||||
aParam.mDeltaY, aParam.mDeltaZ, aParam.mDeltaMode);
|
||||
e->InitModifiers(aParam);
|
||||
e->mEvent->AsWheelEvent()->buttons = aParam.mButtons;
|
||||
e->SetTrusted(trusted);
|
||||
return e.forget();
|
||||
|
|
|
@ -20,7 +20,37 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=574663
|
|||
|
||||
/** Test for Bug 574663 **/
|
||||
|
||||
function sendTouchpadScrollMotion(scrollbox, direction, ctrl, momentum) {
|
||||
// SimpleTest's paint_listener does not work on other windows, so we inline
|
||||
// a smaller version here.
|
||||
function waitForPaint(win, utils, callback) {
|
||||
win.document.documentElement.getBoundingClientRect();
|
||||
if (!utils.isMozAfterPaintPending) {
|
||||
callback();
|
||||
return;
|
||||
}
|
||||
|
||||
var onpaint = function() {
|
||||
if (!utils.isMozAfterPaintPending) {
|
||||
win.removeEventListener("MozAfterPaint", onpaint);
|
||||
callback();
|
||||
return;
|
||||
}
|
||||
}
|
||||
win.addEventListener("MozAfterPaint", onpaint);
|
||||
if (utils.isTestControllingRefreshes) {
|
||||
utils.advanceTimeAndRefresh(0);
|
||||
}
|
||||
}
|
||||
|
||||
function forceScrollAndWait(scrollbox, callback) {
|
||||
let win = scrollbox.ownerDocument.defaultView;
|
||||
let utils = SpecialPowers.getDOMWindowUtils(win);
|
||||
|
||||
utils.advanceTimeAndRefresh(1000);
|
||||
waitForPaint(win, utils, callback);
|
||||
}
|
||||
|
||||
function sendTouchpadScrollMotion(scrollbox, direction, ctrl, momentum, callback) {
|
||||
var win = scrollbox.ownerDocument.defaultView;
|
||||
let event = {
|
||||
deltaMode: WheelEvent.DOM_DELTA_PIXEL,
|
||||
|
@ -29,10 +59,26 @@ function sendTouchpadScrollMotion(scrollbox, direction, ctrl, momentum) {
|
|||
ctrlKey: ctrl,
|
||||
isMomentum: momentum
|
||||
};
|
||||
|
||||
let kExtraEvents = 5;
|
||||
|
||||
var received = 0;
|
||||
var onwheel = function() {
|
||||
if (++received == 1 + kExtraEvents) {
|
||||
// We have captured all the outstanding wheel events. Wait for the
|
||||
// animation to add itself to the refresh driver.
|
||||
scrollbox.removeEventListener("wheel", onwheel);
|
||||
setTimeout(function() {
|
||||
forceScrollAndWait(scrollbox, callback);
|
||||
}, 0);
|
||||
}
|
||||
};
|
||||
scrollbox.addEventListener("wheel", onwheel);
|
||||
|
||||
synthesizeWheel(scrollbox, 10, 10, event, win);
|
||||
// then 5 additional pixel scrolls
|
||||
event.lineOrPageDeltaY = 0;
|
||||
for (let i = 0; i < 5; ++i) {
|
||||
for (let i = 1; i <= kExtraEvents; ++i) {
|
||||
synthesizeWheel(scrollbox, 10, 10, event, win);
|
||||
}
|
||||
}
|
||||
|
@ -57,21 +103,11 @@ function runTest() {
|
|||
winUtils.advanceTimeAndRefresh(1000);
|
||||
|
||||
function nextTest() {
|
||||
if (!outstandingTests.length) {
|
||||
winUtils.restoreNormalRefresh();
|
||||
win.close();
|
||||
SimpleTest.finish();
|
||||
return;
|
||||
}
|
||||
|
||||
let [ctrlKey, isMomentum] = outstandingTests.shift();
|
||||
let scrollTopBefore = scrollbox.scrollTop;
|
||||
let zoomFactorBefore = winUtils.fullZoom;
|
||||
|
||||
sendTouchpadScrollMotion(scrollbox, 1, ctrlKey, isMomentum);
|
||||
winUtils.advanceTimeAndRefresh(1000); // force scrolling to happen
|
||||
|
||||
setTimeout(function () {
|
||||
let check = function() {
|
||||
if (!ctrlKey) {
|
||||
let postfix = isMomentum ? ", even after releasing the touchpad" : "";
|
||||
// Normal scroll: scroll
|
||||
|
@ -86,12 +122,21 @@ function runTest() {
|
|||
isnot(scrollbox.scrollTop, scrollTopBefore, "Momentum scrolling should scroll, even when pressing Ctrl");
|
||||
}
|
||||
}
|
||||
// Revert the effect.
|
||||
sendTouchpadScrollMotion(scrollbox, -1, ctrlKey, isMomentum);
|
||||
winUtils.advanceTimeAndRefresh(1000); // force scrolling to happen
|
||||
|
||||
setTimeout(nextTest, 20);
|
||||
}, 20);
|
||||
if (!outstandingTests.length) {
|
||||
winUtils.restoreNormalRefresh();
|
||||
win.close();
|
||||
SimpleTest.finish();
|
||||
return;
|
||||
}
|
||||
|
||||
// Revert the effect for the next test.
|
||||
sendTouchpadScrollMotion(scrollbox, -1, ctrlKey, isMomentum, function() {
|
||||
setTimeout(nextTest, 0);
|
||||
});
|
||||
}
|
||||
|
||||
sendTouchpadScrollMotion(scrollbox, 1, ctrlKey, isMomentum, check);
|
||||
}
|
||||
nextTest();
|
||||
}, win);
|
||||
|
@ -106,7 +151,6 @@ window.onload = function() {
|
|||
}
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
SimpleTest.requestFlakyTimeout("untriaged");
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
|
|
|
@ -22,6 +22,19 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=675884
|
|||
var receivedEvent;
|
||||
document.addEventListener("hello", function(e) { receivedEvent = e; }, true);
|
||||
|
||||
function isMethodResultInitializer(aPropName)
|
||||
{
|
||||
return aPropName.startsWith("modifier");
|
||||
}
|
||||
|
||||
function getPropValue(aEvent, aPropName)
|
||||
{
|
||||
if (aPropName.startsWith("modifier")) {
|
||||
return aEvent.getModifierState(aPropName.substr("modifier".length));
|
||||
}
|
||||
return aEvent[aPropName];
|
||||
}
|
||||
|
||||
// Event
|
||||
var e;
|
||||
var ex = false;
|
||||
|
@ -371,6 +384,15 @@ var keyboardEventProps =
|
|||
{ shiftKey: false },
|
||||
{ altKey: false },
|
||||
{ metaKey: false },
|
||||
{ modifierAltGraph: false },
|
||||
{ modifierCapsLock: false },
|
||||
{ modifierFn: false },
|
||||
{ modifierFnLock: false },
|
||||
{ modifierNumLock: false },
|
||||
{ modifierOS: false },
|
||||
{ modifierScrollLock: false },
|
||||
{ modifierSymbol: false },
|
||||
{ modifierSymbolLock: false },
|
||||
{ repeat: false },
|
||||
{ isComposing: false },
|
||||
{ charCode: 0 },
|
||||
|
@ -391,6 +413,15 @@ var testKeyboardProps =
|
|||
{ shiftKey: true },
|
||||
{ altKey: true },
|
||||
{ metaKey: true },
|
||||
{ modifierAltGraph: true },
|
||||
{ modifierCapsLock: true },
|
||||
{ modifierFn: true },
|
||||
{ modifierFnLock: true },
|
||||
{ modifierNumLock: true },
|
||||
{ modifierOS: true },
|
||||
{ modifierScrollLock: true },
|
||||
{ modifierSymbol: true },
|
||||
{ modifierSymbolLock: true },
|
||||
{ repeat: true },
|
||||
{ isComposing: true },
|
||||
{ charCode: 2 },
|
||||
|
@ -409,7 +440,9 @@ for (var i = 0; i < keyboardEventProps.length; ++i) {
|
|||
if (!codeEnabled && prop == "code") {
|
||||
continue;
|
||||
}
|
||||
ok(prop in e, "keyboardEvent: KeyboardEvent doesn't have property " + prop + "!");
|
||||
if (!isMethodResultInitializer(prop)) {
|
||||
ok(prop in e, "keyboardEvent: KeyboardEvent doesn't have property " + prop + "!");
|
||||
}
|
||||
defaultKeyboardEventValues[prop] = keyboardEventProps[i][prop];
|
||||
}
|
||||
}
|
||||
|
@ -422,10 +455,10 @@ while (testKeyboardProps.length) {
|
|||
continue;
|
||||
}
|
||||
if (!(def in p)) {
|
||||
is(e[def], defaultKeyboardEventValues[def],
|
||||
is(getPropValue(e, def), defaultKeyboardEventValues[def],
|
||||
"KeyboardEvent: Wrong default value for " + def + "!");
|
||||
} else {
|
||||
is(e[def], p[def],
|
||||
is(getPropValue(e, def), p[def],
|
||||
"KeyboardEvent: Wrong event init value for " + def + "!");
|
||||
}
|
||||
}
|
||||
|
@ -680,6 +713,15 @@ var mouseEventProps =
|
|||
{ shiftKey: false },
|
||||
{ altKey: false },
|
||||
{ metaKey: false },
|
||||
{ modifierAltGraph: false },
|
||||
{ modifierCapsLock: false },
|
||||
{ modifierFn: false },
|
||||
{ modifierFnLock: false },
|
||||
{ modifierNumLock: false },
|
||||
{ modifierOS: false },
|
||||
{ modifierScrollLock: false },
|
||||
{ modifierSymbol: false },
|
||||
{ modifierSymbolLock: false },
|
||||
{ button: 0 },
|
||||
{ buttons: 0 },
|
||||
{ relatedTarget: null }
|
||||
|
@ -695,6 +737,15 @@ var testProps =
|
|||
{ shiftKey: true },
|
||||
{ altKey: true },
|
||||
{ metaKey: true },
|
||||
{ modifierAltGraph: true },
|
||||
{ modifierCapsLock: true },
|
||||
{ modifierFn: true },
|
||||
{ modifierFnLock: true },
|
||||
{ modifierNumLock: true },
|
||||
{ modifierOS: true },
|
||||
{ modifierScrollLock: true },
|
||||
{ modifierSymbol: true },
|
||||
{ modifierSymbolLock: true },
|
||||
{ button: 5 },
|
||||
{ buttons: 6 },
|
||||
{ relatedTarget: window }
|
||||
|
@ -703,7 +754,9 @@ var testProps =
|
|||
var defaultMouseEventValues = {};
|
||||
for (var i = 0; i < mouseEventProps.length; ++i) {
|
||||
for (prop in mouseEventProps[i]) {
|
||||
ok(prop in e, "MouseEvent: MouseEvent doesn't have property " + prop + "!");
|
||||
if (!isMethodResultInitializer(prop)) {
|
||||
ok(prop in e, "MouseEvent: MouseEvent doesn't have property " + prop + "!");
|
||||
}
|
||||
defaultMouseEventValues[prop] = mouseEventProps[i][prop];
|
||||
}
|
||||
}
|
||||
|
@ -713,10 +766,10 @@ while (testProps.length) {
|
|||
e = new MouseEvent("foo", p);
|
||||
for (var def in defaultMouseEventValues) {
|
||||
if (!(def in p)) {
|
||||
is(e[def], defaultMouseEventValues[def],
|
||||
is(getPropValue(e, def), defaultMouseEventValues[def],
|
||||
"MouseEvent: Wrong default value for " + def + "!");
|
||||
} else {
|
||||
is(e[def], p[def], "MouseEvent: Wrong event init value for " + def + "!");
|
||||
is(getPropValue(e, def), p[def], "MouseEvent: Wrong event init value for " + def + "!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -775,6 +828,15 @@ var wheelEventProps =
|
|||
{ shiftKey: false },
|
||||
{ altKey: false },
|
||||
{ metaKey: false },
|
||||
{ modifierAltGraph: false },
|
||||
{ modifierCapsLock: false },
|
||||
{ modifierFn: false },
|
||||
{ modifierFnLock: false },
|
||||
{ modifierNumLock: false },
|
||||
{ modifierOS: false },
|
||||
{ modifierScrollLock: false },
|
||||
{ modifierSymbol: false },
|
||||
{ modifierSymbolLock: false },
|
||||
{ button: 0 },
|
||||
{ buttons: 0 },
|
||||
{ relatedTarget: null },
|
||||
|
@ -794,6 +856,15 @@ var testWheelProps =
|
|||
{ shiftKey: true },
|
||||
{ altKey: true },
|
||||
{ metaKey: true },
|
||||
{ modifierAltGraph: true },
|
||||
{ modifierCapsLock: true },
|
||||
{ modifierFn: true },
|
||||
{ modifierFnLock: true },
|
||||
{ modifierNumLock: true },
|
||||
{ modifierOS: true },
|
||||
{ modifierScrollLock: true },
|
||||
{ modifierSymbol: true },
|
||||
{ modifierSymbolLock: true },
|
||||
{ button: 5 },
|
||||
{ buttons: 6 },
|
||||
{ relatedTarget: window },
|
||||
|
@ -806,7 +877,9 @@ var testWheelProps =
|
|||
var defaultWheelEventValues = {};
|
||||
for (var i = 0; i < wheelEventProps.length; ++i) {
|
||||
for (prop in wheelEventProps[i]) {
|
||||
ok(prop in e, "WheelEvent: WheelEvent doesn't have property " + prop + "!");
|
||||
if (!isMethodResultInitializer(prop)) {
|
||||
ok(prop in e, "WheelEvent: WheelEvent doesn't have property " + prop + "!");
|
||||
}
|
||||
defaultWheelEventValues[prop] = wheelEventProps[i][prop];
|
||||
}
|
||||
}
|
||||
|
@ -816,10 +889,10 @@ while (testWheelProps.length) {
|
|||
e = new WheelEvent("foo", p);
|
||||
for (var def in defaultWheelEventValues) {
|
||||
if (!(def in p)) {
|
||||
is(e[def], defaultWheelEventValues[def],
|
||||
is(getPropValue(e, def), defaultWheelEventValues[def],
|
||||
"WheelEvent: Wrong default value for " + def + "!");
|
||||
} else {
|
||||
is(e[def], p[def], "WheelEvent: Wrong event init value for " + def + "!");
|
||||
is(getPropValue(e, def), p[def], "WheelEvent: Wrong event init value for " + def + "!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
<title>Test for default action of WheelEvent</title>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/paint_listener.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
</head>
|
||||
<body>
|
||||
|
@ -68,6 +69,11 @@ function ok()
|
|||
window.opener.ok.apply(window.opener, arguments);
|
||||
}
|
||||
|
||||
function sendWheelAndWait(aX, aY, aEvent, aCallback)
|
||||
{
|
||||
sendWheelAndPaint(gScrollableElement, aX, aY, aEvent, aCallback);
|
||||
}
|
||||
|
||||
function hitEventLoop(aFunc, aTimes)
|
||||
{
|
||||
winUtils.advanceTimeAndRefresh(100);
|
||||
|
@ -864,9 +870,7 @@ function doTestScroll(aSettings, aCallback)
|
|||
currentTest.prepare();
|
||||
}
|
||||
|
||||
synthesizeWheel(gScrollableElement, 10, 10, currentTest.event);
|
||||
|
||||
hitEventLoop(function () {
|
||||
sendWheelAndWait(10, 10, currentTest.event, function () {
|
||||
if (currentTest.expected == kNoScroll) {
|
||||
is(gScrollableElement.scrollTop, 1000, description + "scrolled vertical");
|
||||
is(gScrollableElement.scrollLeft, 1000, description + "scrolled horizontal");
|
||||
|
@ -1111,7 +1115,6 @@ function doTestZoom(aSettings, aCallback)
|
|||
|
||||
var event = currentTest.event;
|
||||
event.ctrlKey = true;
|
||||
synthesizeWheel(gScrollableElement, 10, 10, event);
|
||||
|
||||
// NOTE: Zooming might change scrollTop and scrollLeft by rounding fraction.
|
||||
// This test assume that zoom happens synchronously and scrolling
|
||||
|
@ -1119,7 +1122,7 @@ function doTestZoom(aSettings, aCallback)
|
|||
var scrollTop = gScrollableElement.scrollTop;
|
||||
var scrollLeft = gScrollableElement.scrollLeft;
|
||||
|
||||
hitEventLoop(function () {
|
||||
sendWheelAndWait(10, 10, event, function () {
|
||||
is(gScrollableElement.scrollTop, scrollTop, description + "scrolled vertical");
|
||||
is(gScrollableElement.scrollLeft, scrollLeft, description + "scrolled horizontal");
|
||||
if (!(currentTest.expected & (kNegative | kPositive))) {
|
||||
|
@ -1190,11 +1193,15 @@ function doTestZoomedScroll(aCallback)
|
|||
}
|
||||
window.addEventListener("MozMousePixelScroll", mousePixelScrollHandler, true);
|
||||
window.addEventListener("wheel", wheelHandler, true);
|
||||
synthesizeWheel(gScrollableElement, 10, 10,
|
||||
{ deltaMode: WheelEvent.DOM_DELTA_PIXEL,
|
||||
deltaX: 16.0, deltaY: 16.0, lineOrPageDeltaX: 0, lineOrPageDeltaY: 0 });
|
||||
var event = {
|
||||
deltaMode: WheelEvent.DOM_DELTA_PIXEL,
|
||||
deltaX: 16.0,
|
||||
deltaY: 16.0,
|
||||
lineOrPageDeltaX: 0,
|
||||
lineOrPageDeltaY: 0
|
||||
};
|
||||
// wait scrolled actually.
|
||||
hitEventLoop(function () {
|
||||
sendWheelAndWait(10, 10, event, function () {
|
||||
var scrolledX = gScrollableElement.scrollLeft;
|
||||
var scrolledY = gScrollableElement.scrollTop;
|
||||
ok(scrolledX > 1000,
|
||||
|
@ -1208,11 +1215,15 @@ function doTestZoomedScroll(aCallback)
|
|||
hitEventLoop(function () {
|
||||
gScrollableElement.scrollTop = 1000;
|
||||
gScrollableElement.scrollLeft = 1000;
|
||||
synthesizeWheel(gScrollableElement, 10, 10,
|
||||
{ deltaMode: WheelEvent.DOM_DELTA_PIXEL,
|
||||
deltaX: 16.0, deltaY: 16.0, lineOrPageDeltaX: 0, lineOrPageDeltaY: 0 });
|
||||
var event = {
|
||||
deltaMode: WheelEvent.DOM_DELTA_PIXEL,
|
||||
deltaX: 16.0,
|
||||
deltaY: 16.0,
|
||||
lineOrPageDeltaX: 0,
|
||||
lineOrPageDeltaY: 0
|
||||
};
|
||||
// wait scrolled actually.
|
||||
hitEventLoop(function () {
|
||||
sendWheelAndWait(10, 10, event, function () {
|
||||
ok(Math.abs(gScrollableElement.scrollLeft - (1000 + (scrolledX - 1000) / 2)) <= 1,
|
||||
"doTestZoomedScroll: zoomed horizontal scroll amount by pixel wheel event is different from normal, scrollLeft=" +
|
||||
gScrollableElement.scrollLeft + ", scrolledX=" + scrolledX);
|
||||
|
@ -1267,11 +1278,15 @@ function doTestZoomedScroll(aCallback)
|
|||
}
|
||||
}
|
||||
window.addEventListener("MozMousePixelScroll", handler, true);
|
||||
synthesizeWheel(gScrollableElement, 10, 10,
|
||||
{ deltaMode: WheelEvent.DOM_DELTA_LINE,
|
||||
deltaX: 1.0, deltaY: 1.0, lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 });
|
||||
var event = {
|
||||
deltaMode: WheelEvent.DOM_DELTA_LINE,
|
||||
deltaX: 1.0,
|
||||
deltaY: 1.0,
|
||||
lineOrPageDeltaX: 1,
|
||||
lineOrPageDeltaY: 1
|
||||
};
|
||||
// wait scrolled actually.
|
||||
hitEventLoop(function () {
|
||||
sendWheelAndWait(10, 10, event, function () {
|
||||
var scrolledX = gScrollableElement.scrollLeft;
|
||||
var scrolledY = gScrollableElement.scrollTop;
|
||||
ok(scrolledX > 1000,
|
||||
|
@ -1285,11 +1300,15 @@ function doTestZoomedScroll(aCallback)
|
|||
hitEventLoop(function () {
|
||||
gScrollableElement.scrollTop = 1000;
|
||||
gScrollableElement.scrollLeft = 1000;
|
||||
synthesizeWheel(gScrollableElement, 10, 10,
|
||||
{ deltaMode: WheelEvent.DOM_DELTA_LINE,
|
||||
deltaX: 1.0, deltaY: 1.0, lineOrPageDeltaX: 1, lineOrPageDeltaY: 1 });
|
||||
var event = {
|
||||
deltaMode: WheelEvent.DOM_DELTA_LINE,
|
||||
deltaX: 1.0,
|
||||
deltaY: 1.0,
|
||||
lineOrPageDeltaX: 1,
|
||||
lineOrPageDeltaY: 1
|
||||
};
|
||||
// wait scrolled actually.
|
||||
hitEventLoop(function () {
|
||||
sendWheelAndWait(10, 10, event, function () {
|
||||
ok(Math.abs(gScrollableElement.scrollLeft - scrolledX) <= 1,
|
||||
"doTestZoomedScroll: zoomed horizontal scroll amount by line wheel event is different from normal, scrollLeft=" +
|
||||
gScrollableElement.scrollLeft + ", scrolledX=" + scrolledX);
|
||||
|
@ -1549,8 +1568,7 @@ function doTestWholeScroll(aCallback)
|
|||
if (kTest.prepare) {
|
||||
kTest.prepare();
|
||||
}
|
||||
synthesizeWheel(gScrollableElement, 10, 10, kTest.event);
|
||||
hitEventLoop(function () {
|
||||
sendWheelAndWait(10, 10, kTest.event, function () {
|
||||
is(gScrollableElement.scrollTop, kTest.expectedScrollTop,
|
||||
"doTestWholeScroll, " + kTest.description + ": unexpected scrollTop");
|
||||
is(gScrollableElement.scrollLeft, kTest.expectedScrollLeft,
|
||||
|
@ -1700,8 +1718,7 @@ function doTestActionOverride(aCallback)
|
|||
SpecialPowers.setIntPref("mousewheel.default.action.override_x", kTest.override_x);
|
||||
gScrollableElement.scrollTop = 1000;
|
||||
gScrollableElement.scrollLeft = 1000;
|
||||
synthesizeWheel(gScrollableElement, 10, 10, kTest.event);
|
||||
hitEventLoop(function () {
|
||||
sendWheelAndWait(10, 10, kTest.event, function () {
|
||||
if (kTest.expected & kScrollUp) {
|
||||
ok(gScrollableElement.scrollTop < 1000, description + "not scrolled up, got " + gScrollableElement.scrollTop);
|
||||
} else if (kTest.expected & kScrollDown) {
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include "mozilla/BasicEvents.h"
|
||||
#include "mozilla/Maybe.h"
|
||||
#include "mozilla/TypeTraits.h"
|
||||
#include "mozilla/dom/Element.h"
|
||||
#include "mozilla/dom/PermissionMessageUtils.h"
|
||||
#include "mozilla/dom/TabChild.h"
|
||||
#include "mozilla/dom/indexedDB/PBackgroundIDBDatabaseFileChild.h"
|
||||
|
@ -528,9 +529,9 @@ class PermissionRequestMainProcessHelper final
|
|||
public:
|
||||
PermissionRequestMainProcessHelper(BackgroundFactoryRequestChild* aActor,
|
||||
IDBFactory* aFactory,
|
||||
nsPIDOMWindow* aWindow,
|
||||
Element* aOwnerElement,
|
||||
nsIPrincipal* aPrincipal)
|
||||
: PermissionRequestBase(aWindow, aPrincipal)
|
||||
: PermissionRequestBase(aOwnerElement, aPrincipal)
|
||||
, mActor(aActor)
|
||||
, mFactory(aFactory)
|
||||
{
|
||||
|
@ -1129,8 +1130,14 @@ BackgroundFactoryRequestChild::RecvPermissionChallenge(
|
|||
nsCOMPtr<nsPIDOMWindow> window = mFactory->GetParentObject();
|
||||
MOZ_ASSERT(window);
|
||||
|
||||
nsCOMPtr<Element> ownerElement =
|
||||
do_QueryInterface(window->GetChromeEventHandler());
|
||||
if (NS_WARN_IF(!ownerElement)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
nsRefPtr<PermissionRequestMainProcessHelper> helper =
|
||||
new PermissionRequestMainProcessHelper(this, mFactory, window, principal);
|
||||
new PermissionRequestMainProcessHelper(this, mFactory, ownerElement, principal);
|
||||
|
||||
PermissionRequestBase::PermissionValue permission;
|
||||
if (NS_WARN_IF(NS_FAILED(helper->PromptIfNeeded(&permission)))) {
|
||||
|
|
|
@ -7489,9 +7489,9 @@ class PermissionRequestHelper final
|
|||
bool mActorDestroyed;
|
||||
|
||||
public:
|
||||
PermissionRequestHelper(nsPIDOMWindow* aWindow,
|
||||
PermissionRequestHelper(Element* aOwnerElement,
|
||||
nsIPrincipal* aPrincipal)
|
||||
: PermissionRequestBase(aWindow, aPrincipal)
|
||||
: PermissionRequestBase(aOwnerElement, aPrincipal)
|
||||
, mActorDestroyed(false)
|
||||
{ }
|
||||
|
||||
|
@ -8161,13 +8161,13 @@ DeallocPBackgroundIDBFactoryParent(PBackgroundIDBFactoryParent* aActor)
|
|||
}
|
||||
|
||||
PIndexedDBPermissionRequestParent*
|
||||
AllocPIndexedDBPermissionRequestParent(nsPIDOMWindow* aWindow,
|
||||
AllocPIndexedDBPermissionRequestParent(Element* aOwnerElement,
|
||||
nsIPrincipal* aPrincipal)
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
||||
nsRefPtr<PermissionRequestHelper> actor =
|
||||
new PermissionRequestHelper(aWindow, aPrincipal);
|
||||
new PermissionRequestHelper(aOwnerElement, aPrincipal);
|
||||
return actor.forget().take();
|
||||
}
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@ class nsPIDOMWindow;
|
|||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
class Element;
|
||||
class TabParent;
|
||||
|
||||
namespace quota {
|
||||
|
@ -39,7 +40,7 @@ bool
|
|||
DeallocPBackgroundIDBFactoryParent(PBackgroundIDBFactoryParent* aActor);
|
||||
|
||||
PIndexedDBPermissionRequestParent*
|
||||
AllocPIndexedDBPermissionRequestParent(nsPIDOMWindow* aWindow,
|
||||
AllocPIndexedDBPermissionRequestParent(Element* aOwnerElement,
|
||||
nsIPrincipal* aPrincipal);
|
||||
|
||||
bool
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include "MainThreadUtils.h"
|
||||
#include "mozilla/Assertions.h"
|
||||
#include "mozilla/Services.h"
|
||||
#include "mozilla/dom/Element.h"
|
||||
#include "nsIDOMWindow.h"
|
||||
#include "nsIObserverService.h"
|
||||
#include "nsIPrincipal.h"
|
||||
|
@ -46,13 +47,13 @@ AssertSanity()
|
|||
|
||||
} // anonymous namespace
|
||||
|
||||
PermissionRequestBase::PermissionRequestBase(nsPIDOMWindow* aWindow,
|
||||
PermissionRequestBase::PermissionRequestBase(Element* aOwnerElement,
|
||||
nsIPrincipal* aPrincipal)
|
||||
: mWindow(aWindow)
|
||||
: mOwnerElement(aOwnerElement)
|
||||
, mPrincipal(aPrincipal)
|
||||
{
|
||||
AssertSanity();
|
||||
MOZ_ASSERT(aWindow);
|
||||
MOZ_ASSERT(aOwnerElement);
|
||||
MOZ_ASSERT(aPrincipal);
|
||||
}
|
||||
|
||||
|
@ -125,8 +126,8 @@ PermissionRequestBase::PromptIfNeeded(PermissionValue* aCurrentValue)
|
|||
|
||||
// Tricky, we want to release the window and principal in all cases except
|
||||
// when we successfully prompt.
|
||||
nsCOMPtr<nsPIDOMWindow> window;
|
||||
mWindow.swap(window);
|
||||
nsCOMPtr<Element> element;
|
||||
mOwnerElement.swap(element);
|
||||
|
||||
nsCOMPtr<nsIPrincipal> principal;
|
||||
mPrincipal.swap(principal);
|
||||
|
@ -146,7 +147,7 @@ PermissionRequestBase::PromptIfNeeded(PermissionValue* aCurrentValue)
|
|||
}
|
||||
|
||||
// We're about to prompt so swap the members back.
|
||||
window.swap(mWindow);
|
||||
element.swap(mOwnerElement);
|
||||
principal.swap(mPrincipal);
|
||||
|
||||
rv = obsSvc->NotifyObservers(static_cast<nsIObserver*>(this),
|
||||
|
@ -154,7 +155,7 @@ PermissionRequestBase::PromptIfNeeded(PermissionValue* aCurrentValue)
|
|||
nullptr);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
// Finally release if we failed the prompt.
|
||||
mWindow = nullptr;
|
||||
mOwnerElement = nullptr;
|
||||
mPrincipal = nullptr;
|
||||
return rv;
|
||||
}
|
||||
|
@ -200,8 +201,8 @@ PermissionRequestBase::GetInterface(const nsIID& aIID,
|
|||
return QueryInterface(aIID, aResult);
|
||||
}
|
||||
|
||||
if (aIID.Equals(NS_GET_IID(nsIDOMWindow)) && mWindow) {
|
||||
return mWindow->QueryInterface(aIID, aResult);
|
||||
if (aIID.Equals(NS_GET_IID(nsIDOMNode)) && mOwnerElement) {
|
||||
return mOwnerElement->QueryInterface(aIID, aResult);
|
||||
}
|
||||
|
||||
*aResult = nullptr;
|
||||
|
@ -215,11 +216,11 @@ PermissionRequestBase::Observe(nsISupports* aSubject,
|
|||
{
|
||||
AssertSanity();
|
||||
MOZ_ASSERT(!strcmp(aTopic, kPermissionResponseTopic));
|
||||
MOZ_ASSERT(mWindow);
|
||||
MOZ_ASSERT(mOwnerElement);
|
||||
MOZ_ASSERT(mPrincipal);
|
||||
|
||||
nsCOMPtr<nsPIDOMWindow> window;
|
||||
mWindow.swap(window);
|
||||
nsCOMPtr<Element> element;
|
||||
element.swap(mOwnerElement);
|
||||
|
||||
nsCOMPtr<nsIPrincipal> principal;
|
||||
mPrincipal.swap(principal);
|
||||
|
|
|
@ -18,13 +18,16 @@ class nsPIDOMWindow;
|
|||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
class Element;
|
||||
|
||||
namespace indexedDB {
|
||||
|
||||
class PermissionRequestBase
|
||||
: public nsIObserver
|
||||
, public nsIInterfaceRequestor
|
||||
{
|
||||
nsCOMPtr<nsPIDOMWindow> mWindow;
|
||||
nsCOMPtr<Element> mOwnerElement;
|
||||
nsCOMPtr<nsIPrincipal> mPrincipal;
|
||||
|
||||
public:
|
||||
|
@ -51,7 +54,7 @@ public:
|
|||
PromptIfNeeded(PermissionValue* aCurrentValue);
|
||||
|
||||
protected:
|
||||
PermissionRequestBase(nsPIDOMWindow* aWindow,
|
||||
PermissionRequestBase(Element* aOwnerElement,
|
||||
nsIPrincipal* aPrincipal);
|
||||
|
||||
// Reference counted.
|
||||
|
|
|
@ -589,6 +589,10 @@ static nsTArray<PrefSetting>* sNuwaPrefUpdates;
|
|||
// case between StartUp() and ShutDown() or JoinAllSubprocesses().
|
||||
static bool sCanLaunchSubprocesses;
|
||||
|
||||
// Set to true if the DISABLE_UNSAFE_CPOW_WARNINGS environment variable is
|
||||
// set.
|
||||
static bool sDisableUnsafeCPOWWarnings = false;
|
||||
|
||||
// The first content child has ID 1, so the chrome process can have ID 0.
|
||||
static uint64_t gContentChildID = 1;
|
||||
|
||||
|
@ -747,6 +751,8 @@ ContentParent::StartUp()
|
|||
// Test the PBackground infrastructure on ENABLE_TESTS builds when a special
|
||||
// testing preference is set.
|
||||
MaybeTestPBackground();
|
||||
|
||||
sDisableUnsafeCPOWWarnings = PR_GetEnv("DISABLE_UNSAFE_CPOW_WARNINGS");
|
||||
}
|
||||
|
||||
/*static*/ void
|
||||
|
@ -1747,16 +1753,18 @@ ContentParent::OnBeginSyncTransaction() {
|
|||
if (XRE_GetProcessType() == GeckoProcessType_Default) {
|
||||
nsCOMPtr<nsIConsoleService> console(do_GetService(NS_CONSOLESERVICE_CONTRACTID));
|
||||
JSContext *cx = nsContentUtils::GetCurrentJSContext();
|
||||
if (console && cx) {
|
||||
nsAutoString filename;
|
||||
uint32_t lineno = 0;
|
||||
nsJSUtils::GetCallingLocation(cx, filename, &lineno);
|
||||
nsCOMPtr<nsIScriptError> error(do_CreateInstance(NS_SCRIPTERROR_CONTRACTID));
|
||||
error->Init(NS_LITERAL_STRING("unsafe CPOW usage"), filename, EmptyString(),
|
||||
lineno, 0, nsIScriptError::warningFlag, "chrome javascript");
|
||||
console->LogMessage(error);
|
||||
} else {
|
||||
NS_WARNING("Unsafe synchronous IPC message");
|
||||
if (!sDisableUnsafeCPOWWarnings) {
|
||||
if (console && cx) {
|
||||
nsAutoString filename;
|
||||
uint32_t lineno = 0;
|
||||
nsJSUtils::GetCallingLocation(cx, filename, &lineno);
|
||||
nsCOMPtr<nsIScriptError> error(do_CreateInstance(NS_SCRIPTERROR_CONTRACTID));
|
||||
error->Init(NS_LITERAL_STRING("unsafe CPOW usage"), filename, EmptyString(),
|
||||
lineno, 0, nsIScriptError::warningFlag, "chrome javascript");
|
||||
console->LogMessage(error);
|
||||
} else {
|
||||
NS_WARNING("Unsafe synchronous IPC message");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,6 +38,8 @@
|
|||
#undef LOG
|
||||
#endif
|
||||
|
||||
#include <utility>
|
||||
|
||||
// Use LOGP inside a ParticularProcessPriorityManager method; use LOG
|
||||
// everywhere else. LOGP prints out information about the particular process
|
||||
// priority manager.
|
||||
|
@ -206,6 +208,26 @@ public:
|
|||
*/
|
||||
void Unfreeze();
|
||||
|
||||
/**
|
||||
* Return the number of processes that have
|
||||
* PROCESS_PRIORITY_FOREGROUND priority.
|
||||
*/
|
||||
uint32_t NumberOfForegroundProcesses();
|
||||
|
||||
/**
|
||||
* Register a priority change to be performed at later time.
|
||||
*/
|
||||
void ScheduleDelayedSetPriority(
|
||||
ParticularProcessPriorityManager* aParticularManager,
|
||||
hal::ProcessPriority aPriority);
|
||||
|
||||
/**
|
||||
* Perform the registered priority change unless
|
||||
* aLastParticularManager is the same as the registered one.
|
||||
*/
|
||||
void PerformDelayedSetPriority(
|
||||
ParticularProcessPriorityManager* aLastParticularManager);
|
||||
|
||||
private:
|
||||
static bool sPrefListenersRegistered;
|
||||
static bool sInitialized;
|
||||
|
@ -240,6 +262,10 @@ private:
|
|||
|
||||
/** Contains a pseudo-LRU list of foreground processes */
|
||||
ProcessLRUPool mForegroundLRUPool;
|
||||
|
||||
/** Contains the delayed priority change request */
|
||||
std::pair<nsRefPtr<ParticularProcessPriorityManager>, hal::ProcessPriority>
|
||||
mDelayedSetPriority;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -429,6 +455,7 @@ ProcessPriorityManagerImpl::ProcessPriorityManagerImpl()
|
|||
{
|
||||
MOZ_ASSERT(XRE_GetProcessType() == GeckoProcessType_Default);
|
||||
RegisterWakeLockObserver(this);
|
||||
mDelayedSetPriority = std::make_pair(nullptr, PROCESS_PRIORITY_UNKNOWN);
|
||||
}
|
||||
|
||||
ProcessPriorityManagerImpl::~ProcessPriorityManagerImpl()
|
||||
|
@ -545,6 +572,10 @@ ProcessPriorityManagerImpl::ObserveContentParentDestroyed(nsISupports* aSubject)
|
|||
if (mHighPriorityChildIDs.Contains(childID)) {
|
||||
mHighPriorityChildIDs.RemoveEntry(childID);
|
||||
}
|
||||
|
||||
if (mDelayedSetPriority.first == pppm) {
|
||||
mDelayedSetPriority = std::make_pair(nullptr, PROCESS_PRIORITY_UNKNOWN);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -643,6 +674,55 @@ ProcessPriorityManagerImpl::Unfreeze()
|
|||
nullptr);
|
||||
}
|
||||
|
||||
static PLDHashOperator
|
||||
CountNumberOfForegroundProcesses(
|
||||
const uint64_t& aKey,
|
||||
nsRefPtr<ParticularProcessPriorityManager> aValue,
|
||||
void* aUserData)
|
||||
{
|
||||
uint32_t* accumulator = static_cast<uint32_t*>(aUserData);
|
||||
if (aValue->CurrentPriority() == PROCESS_PRIORITY_FOREGROUND ||
|
||||
aValue->CurrentPriority() == PROCESS_PRIORITY_FOREGROUND_HIGH) {
|
||||
(*accumulator)++;
|
||||
}
|
||||
return PL_DHASH_NEXT;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
ProcessPriorityManagerImpl::NumberOfForegroundProcesses()
|
||||
{
|
||||
uint32_t accumulator = 0;
|
||||
mParticularManagers.EnumerateRead(&CountNumberOfForegroundProcesses,
|
||||
&accumulator);
|
||||
return accumulator;
|
||||
}
|
||||
|
||||
void
|
||||
ProcessPriorityManagerImpl::ScheduleDelayedSetPriority(
|
||||
ParticularProcessPriorityManager* aParticularManager,
|
||||
ProcessPriority aPriority)
|
||||
{
|
||||
mDelayedSetPriority = std::make_pair(aParticularManager, aPriority);
|
||||
}
|
||||
|
||||
void
|
||||
ProcessPriorityManagerImpl::PerformDelayedSetPriority(
|
||||
ParticularProcessPriorityManager* aLastParticularManager)
|
||||
{
|
||||
nsRefPtr<ParticularProcessPriorityManager> pppm = mDelayedSetPriority.first;
|
||||
ProcessPriority priority = mDelayedSetPriority.second;
|
||||
|
||||
mDelayedSetPriority = std::make_pair(nullptr, PROCESS_PRIORITY_UNKNOWN);
|
||||
|
||||
if (pppm == aLastParticularManager) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (pppm && priority != PROCESS_PRIORITY_UNKNOWN) {
|
||||
pppm->SetPriorityNow(priority);
|
||||
}
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS(ParticularProcessPriorityManager,
|
||||
nsIObserver,
|
||||
nsITimerCallback,
|
||||
|
@ -1049,6 +1129,20 @@ ParticularProcessPriorityManager::SetPriorityNow(ProcessPriority aPriority,
|
|||
|
||||
ProcessPriority oldPriority = mPriority;
|
||||
|
||||
if (oldPriority == PROCESS_PRIORITY_FOREGROUND &&
|
||||
aPriority < PROCESS_PRIORITY_FOREGROUND &&
|
||||
ProcessPriorityManagerImpl::GetSingleton()->
|
||||
NumberOfForegroundProcesses() == 1) {
|
||||
LOGP("Attempting to demote the last foreground process is delayed.");
|
||||
|
||||
ProcessPriorityManagerImpl::GetSingleton()->
|
||||
ScheduleDelayedSetPriority(this, aPriority);
|
||||
|
||||
FireTestOnlyObserverNotification("process-priority-delayed",
|
||||
ProcessPriorityToString(aPriority));
|
||||
return;
|
||||
}
|
||||
|
||||
mPriority = aPriority;
|
||||
hal::SetProcessPriority(Pid(), mPriority);
|
||||
|
||||
|
@ -1065,6 +1159,12 @@ ParticularProcessPriorityManager::SetPriorityNow(ProcessPriority aPriority,
|
|||
|
||||
FireTestOnlyObserverNotification("process-priority-set",
|
||||
ProcessPriorityToString(mPriority));
|
||||
|
||||
if (aPriority >= PROCESS_PRIORITY_FOREGROUND) {
|
||||
LOGP("More than one foreground processes. Run delayed priority change");
|
||||
ProcessPriorityManagerImpl::GetSingleton()->
|
||||
PerformDelayedSetPriority(this);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -1121,19 +1121,12 @@ TabParent::AllocPIndexedDBPermissionRequestParent(const Principal& aPrincipal)
|
|||
MOZ_CRASH("Figure out security checks for bridged content!");
|
||||
}
|
||||
|
||||
nsCOMPtr<nsPIDOMWindow> window;
|
||||
nsCOMPtr<nsIContent> frame = do_QueryInterface(mFrameElement);
|
||||
if (frame) {
|
||||
MOZ_ASSERT(frame->OwnerDoc());
|
||||
window = do_QueryInterface(frame->OwnerDoc()->GetWindow());
|
||||
}
|
||||
|
||||
if (!window) {
|
||||
if (NS_WARN_IF(!mFrameElement)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return
|
||||
mozilla::dom::indexedDB::AllocPIndexedDBPermissionRequestParent(window,
|
||||
mozilla::dom::indexedDB::AllocPIndexedDBPermissionRequestParent(mFrameElement,
|
||||
principal);
|
||||
}
|
||||
|
||||
|
|
|
@ -350,10 +350,16 @@ static bool
|
|||
IsMP4SupportedType(const nsACString& aType,
|
||||
const nsAString& aCodecs = EmptyString())
|
||||
{
|
||||
// MP4Decoder/Reader is currently used for MSE and mp4 files local playback.
|
||||
// Currently on B2G, FMP4 is only working for MSE playback.
|
||||
// For other normal MP4, it still uses current omx decoder.
|
||||
// Bug 1061034 is a follow-up bug to enable all MP4s with MOZ_FMP4
|
||||
#ifdef MOZ_OMX_DECODER
|
||||
return false;
|
||||
#else
|
||||
bool haveAAC, haveMP3, haveH264;
|
||||
return Preferences::GetBool("media.fragmented-mp4.exposed", false) &&
|
||||
MP4Decoder::CanHandleMediaType(aType, aCodecs, haveAAC, haveH264, haveMP3);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -51,10 +51,38 @@ CDMCaps::AutoLock::~AutoLock()
|
|||
mData.Unlock();
|
||||
}
|
||||
|
||||
#ifdef PR_LOGGING
|
||||
static void
|
||||
TestCap(uint64_t aFlag,
|
||||
uint64_t aCaps,
|
||||
const nsACString& aCapName,
|
||||
nsACString& aCapStr)
|
||||
{
|
||||
if (!(aFlag & aCaps)) {
|
||||
return;
|
||||
}
|
||||
if (!aCapStr.IsEmpty()) {
|
||||
aCapStr.AppendLiteral(",");
|
||||
}
|
||||
aCapStr.Append(aCapName);
|
||||
}
|
||||
|
||||
nsCString
|
||||
CapsToString(uint64_t aCaps)
|
||||
{
|
||||
nsCString capsStr;
|
||||
TestCap(GMP_EME_CAP_DECRYPT_AUDIO, aCaps, NS_LITERAL_CSTRING("DecryptAudio"), capsStr);
|
||||
TestCap(GMP_EME_CAP_DECRYPT_VIDEO, aCaps, NS_LITERAL_CSTRING("DecryptVideo"), capsStr);
|
||||
TestCap(GMP_EME_CAP_DECRYPT_AND_DECODE_AUDIO, aCaps, NS_LITERAL_CSTRING("DecryptAndDecodeAudio"), capsStr);
|
||||
TestCap(GMP_EME_CAP_DECRYPT_AND_DECODE_VIDEO, aCaps, NS_LITERAL_CSTRING("DecryptAndDecodeVideo"), capsStr);
|
||||
return capsStr;
|
||||
}
|
||||
#endif // PR_LOGGING
|
||||
|
||||
void
|
||||
CDMCaps::AutoLock::SetCaps(uint64_t aCaps)
|
||||
{
|
||||
EME_LOG("SetCaps()");
|
||||
EME_LOG("SetCaps() %s", CapsToString(aCaps).get());
|
||||
mData.mMonitor.AssertCurrentThreadOwns();
|
||||
mData.mCaps = aCaps;
|
||||
for (size_t i = 0; i < mData.mWaitForCaps.Length(); i++) {
|
||||
|
|
|
@ -51,6 +51,7 @@ CDMProxy::Init(PromiseId aPromiseId,
|
|||
NS_ConvertUTF16toUTF8(aTopLevelOrigin).get(),
|
||||
(aInPrivateBrowsing ? "PrivateBrowsing" : "NonPrivateBrowsing"));
|
||||
|
||||
nsCString pluginVersion;
|
||||
if (!mGMPThread) {
|
||||
nsCOMPtr<mozIGeckoMediaPluginService> mps =
|
||||
do_GetService("@mozilla.org/gecko-media-plugin-service;1");
|
||||
|
@ -63,11 +64,19 @@ CDMProxy::Init(PromiseId aPromiseId,
|
|||
RejectPromise(aPromiseId, NS_ERROR_DOM_INVALID_STATE_ERR);
|
||||
return;
|
||||
}
|
||||
bool hasPlugin;
|
||||
nsTArray<nsCString> tags;
|
||||
tags.AppendElement(NS_ConvertUTF16toUTF8(mKeySystem));
|
||||
nsresult rv = mps->GetPluginVersionForAPI(NS_LITERAL_CSTRING(GMP_API_DECRYPTOR),
|
||||
&tags, &hasPlugin, pluginVersion);
|
||||
NS_ENSURE_SUCCESS_VOID(rv);
|
||||
}
|
||||
|
||||
nsAutoPtr<InitData> data(new InitData());
|
||||
data->mPromiseId = aPromiseId;
|
||||
data->mOrigin = aOrigin;
|
||||
data->mTopLevelOrigin = aTopLevelOrigin;
|
||||
data->mPluginVersion = pluginVersion;
|
||||
data->mInPrivateBrowsing = aInPrivateBrowsing;
|
||||
nsCOMPtr<nsIRunnable> task(
|
||||
NS_NewRunnableMethodWithArg<nsAutoPtr<InitData>>(this,
|
||||
|
@ -166,6 +175,7 @@ CDMProxy::gmp_Init(nsAutoPtr<InitData>&& aData)
|
|||
nsresult rv = mps->GetNodeId(data.mOrigin,
|
||||
data.mTopLevelOrigin,
|
||||
data.mInPrivateBrowsing,
|
||||
data.mPluginVersion,
|
||||
Move(callback));
|
||||
if (NS_FAILED(rv)) {
|
||||
RejectPromise(data.mPromiseId, NS_ERROR_DOM_INVALID_STATE_ERR);
|
||||
|
|
|
@ -179,6 +179,7 @@ private:
|
|||
uint32_t mPromiseId;
|
||||
nsAutoString mOrigin;
|
||||
nsAutoString mTopLevelOrigin;
|
||||
nsAutoCString mPluginVersion;
|
||||
bool mInPrivateBrowsing;
|
||||
};
|
||||
|
||||
|
|
|
@ -209,11 +209,7 @@ IsAndroidAvailable()
|
|||
static bool
|
||||
IsGonkMP4DecoderAvailable()
|
||||
{
|
||||
#ifndef MOZ_GONK_MEDIACODEC
|
||||
return false;
|
||||
#else
|
||||
return Preferences::GetBool("media.fragmented-mp4.gonk.enabled", false);
|
||||
#endif
|
||||
}
|
||||
|
||||
static bool
|
||||
|
|
|
@ -54,6 +54,7 @@ GMPParent::GMPParent()
|
|||
, mProcess(nullptr)
|
||||
, mDeleteProcessOnlyOnUnload(false)
|
||||
, mAbnormalShutdownInProgress(false)
|
||||
, mIsBlockingDeletion(false)
|
||||
, mGMPContentChildCount(0)
|
||||
, mAsyncShutdownRequired(false)
|
||||
, mAsyncShutdownInProgress(false)
|
||||
|
@ -305,6 +306,19 @@ GMPParent::CloseActive(bool aDieWhenUnloaded)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
GMPParent::MarkForDeletion()
|
||||
{
|
||||
mDeleteProcessOnlyOnUnload = true;
|
||||
mIsBlockingDeletion = true;
|
||||
}
|
||||
|
||||
bool
|
||||
GMPParent::IsMarkedForDeletion()
|
||||
{
|
||||
return mIsBlockingDeletion;
|
||||
}
|
||||
|
||||
void
|
||||
GMPParent::Shutdown()
|
||||
{
|
||||
|
@ -322,12 +336,13 @@ GMPParent::Shutdown()
|
|||
return;
|
||||
}
|
||||
|
||||
nsRefPtr<GMPParent> self(this);
|
||||
DeleteProcess();
|
||||
|
||||
// XXX Get rid of mDeleteProcessOnlyOnUnload and this code when
|
||||
// Bug 1043671 is fixed
|
||||
if (!mDeleteProcessOnlyOnUnload) {
|
||||
// Destroy ourselves and rise from the fire to save memory
|
||||
nsRefPtr<GMPParent> self(this);
|
||||
mService->ReAddOnGMPThread(self);
|
||||
} // else we've been asked to die and stay dead
|
||||
MOZ_ASSERT(mState == GMPStateNotLoaded);
|
||||
|
@ -351,6 +366,17 @@ public:
|
|||
nsString mNodeId;
|
||||
};
|
||||
|
||||
void
|
||||
GMPParent::ChildTerminated()
|
||||
{
|
||||
nsRefPtr<GMPParent> self(this);
|
||||
GMPThread()->Dispatch(NS_NewRunnableMethodWithArg<nsRefPtr<GMPParent>>(
|
||||
mService,
|
||||
&GeckoMediaPluginServiceParent::PluginTerminated,
|
||||
self),
|
||||
NS_DISPATCH_NORMAL);
|
||||
}
|
||||
|
||||
void
|
||||
GMPParent::DeleteProcess()
|
||||
{
|
||||
|
@ -362,7 +388,7 @@ GMPParent::DeleteProcess()
|
|||
mState = GMPStateClosing;
|
||||
Close();
|
||||
}
|
||||
mProcess->Delete();
|
||||
mProcess->Delete(NS_NewRunnableMethod(this, &GMPParent::ChildTerminated));
|
||||
LOGD("%s: Shut down process", __FUNCTION__);
|
||||
mProcess = nullptr;
|
||||
mState = GMPStateNotLoaded;
|
||||
|
|
|
@ -91,6 +91,10 @@ public:
|
|||
// normal shutdown or unexpected shutdown/crash.
|
||||
void CloseActive(bool aDieWhenUnloaded);
|
||||
|
||||
// Tell the plugin to die after shutdown.
|
||||
void MarkForDeletion();
|
||||
bool IsMarkedForDeletion();
|
||||
|
||||
// Called by the GMPService to forcibly close active de/encoders at shutdown
|
||||
void Shutdown();
|
||||
|
||||
|
@ -136,6 +140,9 @@ public:
|
|||
|
||||
void AbortAsyncShutdown();
|
||||
|
||||
// Called when the child process has died.
|
||||
void ChildTerminated();
|
||||
|
||||
bool GetGMPContentParent(UniquePtr<GetGMPContentParentCallback>&& aCallback);
|
||||
already_AddRefed<GMPContentParent> ForgetGMPContentParent();
|
||||
|
||||
|
@ -191,6 +198,7 @@ private:
|
|||
GMPProcessParent* mProcess;
|
||||
bool mDeleteProcessOnlyOnUnload;
|
||||
bool mAbnormalShutdownInProgress;
|
||||
bool mIsBlockingDeletion;
|
||||
|
||||
nsTArray<nsRefPtr<GMPTimerParent>> mTimers;
|
||||
nsTArray<nsRefPtr<GMPStorageParent>> mStorage;
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
* vim: sw=4 ts=4 et :
|
||||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
||||
* vim: sw=2 ts=2 et :
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
@ -68,18 +68,23 @@ GMPProcessParent::Launch(int32_t aTimeoutMs)
|
|||
}
|
||||
|
||||
void
|
||||
GMPProcessParent::Delete()
|
||||
GMPProcessParent::Delete(nsCOMPtr<nsIRunnable> aCallback)
|
||||
{
|
||||
MessageLoop* currentLoop = MessageLoop::current();
|
||||
MessageLoop* ioLoop = XRE_GetIOMessageLoop();
|
||||
mDeletedCallback = aCallback;
|
||||
XRE_GetIOMessageLoop()->PostTask(FROM_HERE, NewRunnableMethod(this, &GMPProcessParent::DoDelete));
|
||||
}
|
||||
|
||||
if (currentLoop == ioLoop) {
|
||||
Join();
|
||||
delete this;
|
||||
return;
|
||||
void
|
||||
GMPProcessParent::DoDelete()
|
||||
{
|
||||
MOZ_ASSERT(MessageLoop::current() == XRE_GetIOMessageLoop());
|
||||
Join();
|
||||
|
||||
if (mDeletedCallback) {
|
||||
mDeletedCallback->Run();
|
||||
}
|
||||
|
||||
ioLoop->PostTask(FROM_HERE, NewRunnableMethod(this, &GMPProcessParent::Delete));
|
||||
delete this;
|
||||
}
|
||||
|
||||
} // namespace gmp
|
||||
|
|
|
@ -15,6 +15,8 @@
|
|||
#include "chrome/common/child_process_host.h"
|
||||
#include "mozilla/ipc/GeckoChildProcessHost.h"
|
||||
|
||||
class nsIRunnable;
|
||||
|
||||
namespace mozilla {
|
||||
namespace gmp {
|
||||
|
||||
|
@ -28,7 +30,7 @@ public:
|
|||
// after timeoutMs, this method will return false.
|
||||
bool Launch(int32_t aTimeoutMs);
|
||||
|
||||
void Delete();
|
||||
void Delete(nsCOMPtr<nsIRunnable> aCallback = nullptr);
|
||||
|
||||
virtual bool CanShutdown() override { return true; }
|
||||
const std::string& GetPluginFilePath() { return mGMPPath; }
|
||||
|
@ -38,7 +40,10 @@ public:
|
|||
using mozilla::ipc::GeckoChildProcessHost::GetChildProcessHandle;
|
||||
|
||||
private:
|
||||
void DoDelete();
|
||||
|
||||
std::string mGMPPath;
|
||||
nsCOMPtr<nsIRunnable> mDeletedCallback;
|
||||
|
||||
DISALLOW_COPY_AND_ASSIGN(GMPProcessParent);
|
||||
};
|
||||
|
|
|
@ -148,11 +148,12 @@ class GetNodeIdDone : public GetServiceChildCallback
|
|||
{
|
||||
public:
|
||||
GetNodeIdDone(const nsAString& aOrigin, const nsAString& aTopLevelOrigin,
|
||||
bool aInPrivateBrowsing,
|
||||
bool aInPrivateBrowsing, const nsACString& aVersion,
|
||||
UniquePtr<GetNodeIdCallback>&& aCallback)
|
||||
: mOrigin(aOrigin),
|
||||
mTopLevelOrigin(aTopLevelOrigin),
|
||||
mInPrivateBrowsing(aInPrivateBrowsing),
|
||||
mVersion(aVersion),
|
||||
mCallback(Move(aCallback))
|
||||
{
|
||||
}
|
||||
|
@ -166,7 +167,8 @@ public:
|
|||
|
||||
nsCString outId;
|
||||
if (!aGMPServiceChild->SendGetGMPNodeId(mOrigin, mTopLevelOrigin,
|
||||
mInPrivateBrowsing, &outId)) {
|
||||
mInPrivateBrowsing, mVersion,
|
||||
&outId)) {
|
||||
mCallback->Done(NS_ERROR_FAILURE, EmptyCString());
|
||||
return;
|
||||
}
|
||||
|
@ -178,6 +180,7 @@ private:
|
|||
nsString mOrigin;
|
||||
nsString mTopLevelOrigin;
|
||||
bool mInPrivateBrowsing;
|
||||
nsCString mVersion;
|
||||
UniquePtr<GetNodeIdCallback> mCallback;
|
||||
};
|
||||
|
||||
|
@ -185,10 +188,11 @@ NS_IMETHODIMP
|
|||
GeckoMediaPluginServiceChild::GetNodeId(const nsAString& aOrigin,
|
||||
const nsAString& aTopLevelOrigin,
|
||||
bool aInPrivateBrowsing,
|
||||
const nsACString& aVersion,
|
||||
UniquePtr<GetNodeIdCallback>&& aCallback)
|
||||
{
|
||||
UniquePtr<GetServiceChildCallback> callback(
|
||||
new GetNodeIdDone(aOrigin, aTopLevelOrigin, aInPrivateBrowsing,
|
||||
new GetNodeIdDone(aOrigin, aTopLevelOrigin, aInPrivateBrowsing, aVersion,
|
||||
Move(aCallback)));
|
||||
GetServiceChild(Move(callback));
|
||||
return NS_OK;
|
||||
|
|
|
@ -34,6 +34,7 @@ public:
|
|||
NS_IMETHOD GetNodeId(const nsAString& aOrigin,
|
||||
const nsAString& aTopLevelOrigin,
|
||||
bool aInPrivateBrowsingMode,
|
||||
const nsACString& aVersion,
|
||||
UniquePtr<GetNodeIdCallback>&& aCallback) override;
|
||||
|
||||
NS_DECL_NSIOBSERVER
|
||||
|
|
|
@ -436,7 +436,8 @@ GeckoMediaPluginServiceParent::PathRunnable::Run()
|
|||
mService->AddOnGMPThread(mPath);
|
||||
} else {
|
||||
mService->RemoveOnGMPThread(mPath,
|
||||
mOperation == REMOVE_AND_DELETE_FROM_DISK);
|
||||
mOperation == REMOVE_AND_DELETE_FROM_DISK,
|
||||
mDefer);
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -459,12 +460,13 @@ GeckoMediaPluginServiceParent::RemovePluginDirectory(const nsAString& aDirectory
|
|||
|
||||
NS_IMETHODIMP
|
||||
GeckoMediaPluginServiceParent::RemoveAndDeletePluginDirectory(
|
||||
const nsAString& aDirectory)
|
||||
const nsAString& aDirectory, const bool aDefer)
|
||||
{
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
return GMPDispatch(
|
||||
new PathRunnable(this, aDirectory,
|
||||
PathRunnable::EOperation::REMOVE_AND_DELETE_FROM_DISK));
|
||||
PathRunnable::EOperation::REMOVE_AND_DELETE_FROM_DISK,
|
||||
aDefer));
|
||||
}
|
||||
|
||||
class DummyRunnable : public nsRunnable {
|
||||
|
@ -480,6 +482,7 @@ GeckoMediaPluginServiceParent::GetPluginVersionForAPI(const nsACString& aAPI,
|
|||
{
|
||||
NS_ENSURE_ARG(aTags && aTags->Length() > 0);
|
||||
NS_ENSURE_ARG(aHasPlugin);
|
||||
NS_ENSURE_ARG(aOutVersion.IsEmpty());
|
||||
|
||||
nsresult rv = EnsurePluginsOnDiskScanned();
|
||||
if (NS_FAILED(rv)) {
|
||||
|
@ -490,12 +493,20 @@ GeckoMediaPluginServiceParent::GetPluginVersionForAPI(const nsACString& aAPI,
|
|||
{
|
||||
MutexAutoLock lock(mMutex);
|
||||
nsCString api(aAPI);
|
||||
GMPParent* gmp = FindPluginForAPIFrom(0, api, *aTags, nullptr);
|
||||
if (gmp) {
|
||||
size_t index = 0;
|
||||
|
||||
// We must parse the version number into a float for comparison. Yuck.
|
||||
double maxParsedVersion = -1.;
|
||||
|
||||
*aHasPlugin = false;
|
||||
while (GMPParent* gmp = FindPluginForAPIFrom(index, api, *aTags, &index)) {
|
||||
*aHasPlugin = true;
|
||||
aOutVersion = gmp->GetVersion();
|
||||
} else {
|
||||
*aHasPlugin = false;
|
||||
double parsedVersion = atof(gmp->GetVersion().get());
|
||||
if (maxParsedVersion < 0 || parsedVersion > maxParsedVersion) {
|
||||
maxParsedVersion = parsedVersion;
|
||||
aOutVersion = gmp->GetVersion();
|
||||
}
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -706,7 +717,8 @@ GeckoMediaPluginServiceParent::AddOnGMPThread(const nsAString& aDirectory)
|
|||
|
||||
void
|
||||
GeckoMediaPluginServiceParent::RemoveOnGMPThread(const nsAString& aDirectory,
|
||||
const bool aDeleteFromDisk)
|
||||
const bool aDeleteFromDisk,
|
||||
const bool aCanDefer)
|
||||
{
|
||||
MOZ_ASSERT(NS_GetCurrentThread() == mGMPThread);
|
||||
LOGD(("%s::%s: %s", __CLASS__, __FUNCTION__, NS_LossyConvertUTF16toASCII(aDirectory).get()));
|
||||
|
@ -718,22 +730,37 @@ GeckoMediaPluginServiceParent::RemoveOnGMPThread(const nsAString& aDirectory,
|
|||
}
|
||||
|
||||
MutexAutoLock lock(mMutex);
|
||||
for (size_t i = 0; i < mPlugins.Length(); ++i) {
|
||||
for (size_t i = mPlugins.Length() - 1; i < mPlugins.Length(); i--) {
|
||||
nsCOMPtr<nsIFile> pluginpath = mPlugins[i]->GetDirectory();
|
||||
bool equals;
|
||||
if (NS_SUCCEEDED(directory->Equals(pluginpath, &equals)) && equals) {
|
||||
mPlugins[i]->AbortAsyncShutdown();
|
||||
mPlugins[i]->CloseActive(true);
|
||||
if (aDeleteFromDisk) {
|
||||
pluginpath->Remove(true);
|
||||
if (NS_FAILED(directory->Equals(pluginpath, &equals)) || !equals) {
|
||||
continue;
|
||||
}
|
||||
|
||||
nsRefPtr<GMPParent> gmp = mPlugins[i];
|
||||
if (aDeleteFromDisk && gmp->State() != GMPStateNotLoaded) {
|
||||
// We have to wait for the child process to release its lib handle
|
||||
// before we can delete the GMP.
|
||||
gmp->MarkForDeletion();
|
||||
|
||||
if (!mPluginsWaitingForDeletion.Contains(aDirectory)) {
|
||||
mPluginsWaitingForDeletion.AppendElement(aDirectory);
|
||||
}
|
||||
}
|
||||
|
||||
if (gmp->State() == GMPStateNotLoaded || !aCanDefer) {
|
||||
// GMP not in use or shutdown is being forced; can shut it down now.
|
||||
gmp->AbortAsyncShutdown();
|
||||
gmp->CloseActive(true);
|
||||
mPlugins.RemoveElementAt(i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
NS_WARNING("Removing GMP which was never added.");
|
||||
nsCOMPtr<nsIConsoleService> cs = do_GetService(NS_CONSOLESERVICE_CONTRACTID);
|
||||
cs->LogStringMessage(MOZ_UTF16("Removing GMP which was never added."));
|
||||
|
||||
if (aDeleteFromDisk) {
|
||||
if (NS_SUCCEEDED(directory->Remove(true))) {
|
||||
mPluginsWaitingForDeletion.RemoveElement(aDirectory);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// May remove when Bug 1043671 is fixed
|
||||
|
@ -744,7 +771,25 @@ static void Dummy(nsRefPtr<GMPParent>& aOnDeathsDoor)
|
|||
}
|
||||
|
||||
void
|
||||
GeckoMediaPluginServiceParent::ReAddOnGMPThread(nsRefPtr<GMPParent>& aOld)
|
||||
GeckoMediaPluginServiceParent::PluginTerminated(const nsRefPtr<GMPParent>& aPlugin)
|
||||
{
|
||||
MOZ_ASSERT(NS_GetCurrentThread() == mGMPThread);
|
||||
|
||||
if (aPlugin->IsMarkedForDeletion()) {
|
||||
nsCString path8;
|
||||
nsRefPtr<nsIFile> dir = aPlugin->GetDirectory();
|
||||
nsresult rv = dir->GetNativePath(path8);
|
||||
NS_ENSURE_SUCCESS_VOID(rv);
|
||||
|
||||
nsString path = NS_ConvertUTF8toUTF16(path8);
|
||||
if (mPluginsWaitingForDeletion.Contains(path)) {
|
||||
RemoveOnGMPThread(path, true /* delete */, true /* can defer */);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
GeckoMediaPluginServiceParent::ReAddOnGMPThread(const nsRefPtr<GMPParent>& aOld)
|
||||
{
|
||||
MOZ_ASSERT(NS_GetCurrentThread() == mGMPThread);
|
||||
LOGD(("%s::%s: %p", __CLASS__, __FUNCTION__, (void*) aOld));
|
||||
|
@ -867,6 +912,7 @@ nsresult
|
|||
GeckoMediaPluginServiceParent::GetNodeId(const nsAString& aOrigin,
|
||||
const nsAString& aTopLevelOrigin,
|
||||
bool aInPrivateBrowsing,
|
||||
const nsACString& aVersion,
|
||||
nsACString& aOutId)
|
||||
{
|
||||
MOZ_ASSERT(NS_GetCurrentThread() == mGMPThread);
|
||||
|
@ -895,7 +941,8 @@ GeckoMediaPluginServiceParent::GetNodeId(const nsAString& aOrigin,
|
|||
}
|
||||
|
||||
const uint32_t hash = AddToHash(HashString(aOrigin),
|
||||
HashString(aTopLevelOrigin));
|
||||
HashString(aTopLevelOrigin),
|
||||
HashString(aVersion));
|
||||
|
||||
if (aInPrivateBrowsing) {
|
||||
// For PB mode, we store the node id, indexed by the origin pair,
|
||||
|
@ -1015,10 +1062,11 @@ NS_IMETHODIMP
|
|||
GeckoMediaPluginServiceParent::GetNodeId(const nsAString& aOrigin,
|
||||
const nsAString& aTopLevelOrigin,
|
||||
bool aInPrivateBrowsing,
|
||||
const nsACString& aVersion,
|
||||
UniquePtr<GetNodeIdCallback>&& aCallback)
|
||||
{
|
||||
nsCString nodeId;
|
||||
nsresult rv = GetNodeId(aOrigin, aTopLevelOrigin, aInPrivateBrowsing, nodeId);
|
||||
nsresult rv = GetNodeId(aOrigin, aTopLevelOrigin, aInPrivateBrowsing, aVersion, nodeId);
|
||||
aCallback->Done(rv, nodeId);
|
||||
return rv;
|
||||
}
|
||||
|
@ -1387,10 +1435,11 @@ bool
|
|||
GMPServiceParent::RecvGetGMPNodeId(const nsString& aOrigin,
|
||||
const nsString& aTopLevelOrigin,
|
||||
const bool& aInPrivateBrowsing,
|
||||
const nsCString& aVersion,
|
||||
nsCString* aID)
|
||||
{
|
||||
nsresult rv = mService->GetNodeId(aOrigin, aTopLevelOrigin,
|
||||
aInPrivateBrowsing, *aID);
|
||||
aInPrivateBrowsing, aVersion, *aID);
|
||||
return NS_SUCCEEDED(rv);
|
||||
}
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@ public:
|
|||
NS_IMETHOD GetNodeId(const nsAString& aOrigin,
|
||||
const nsAString& aTopLevelOrigin,
|
||||
bool aInPrivateBrowsingMode,
|
||||
const nsACString& aVersion,
|
||||
UniquePtr<GetNodeIdCallback>&& aCallback) override;
|
||||
|
||||
NS_DECL_MOZIGECKOMEDIAPLUGINCHROMESERVICE
|
||||
|
@ -69,7 +70,8 @@ private:
|
|||
size_t* aOutPluginIndex);
|
||||
|
||||
nsresult GetNodeId(const nsAString& aOrigin, const nsAString& aTopLevelOrigin,
|
||||
bool aInPrivateBrowsing, nsACString& aOutId);
|
||||
bool aInPrivateBrowsing, const nsACString& aVersion,
|
||||
nsACString& aOutId);
|
||||
|
||||
void UnloadPlugins();
|
||||
void CrashPlugins();
|
||||
|
@ -80,7 +82,8 @@ private:
|
|||
|
||||
void AddOnGMPThread(const nsAString& aDirectory);
|
||||
void RemoveOnGMPThread(const nsAString& aDirectory,
|
||||
const bool aDeleteFromDisk);
|
||||
const bool aDeleteFromDisk,
|
||||
const bool aCanDefer);
|
||||
|
||||
nsresult SetAsyncShutdownTimeout();
|
||||
|
||||
|
@ -95,7 +98,8 @@ private:
|
|||
|
||||
protected:
|
||||
friend class GMPParent;
|
||||
void ReAddOnGMPThread(nsRefPtr<GMPParent>& aOld);
|
||||
void ReAddOnGMPThread(const nsRefPtr<GMPParent>& aOld);
|
||||
void PluginTerminated(const nsRefPtr<GMPParent>& aOld);
|
||||
virtual void InitializePlugins() override;
|
||||
virtual bool GetContentParentFrom(const nsACString& aNodeId,
|
||||
const nsCString& aAPI,
|
||||
|
@ -117,10 +121,11 @@ private:
|
|||
};
|
||||
|
||||
PathRunnable(GeckoMediaPluginServiceParent* aService, const nsAString& aPath,
|
||||
EOperation aOperation)
|
||||
EOperation aOperation, bool aDefer = false)
|
||||
: mService(aService)
|
||||
, mPath(aPath)
|
||||
, mOperation(aOperation)
|
||||
, mDefer(aDefer)
|
||||
{ }
|
||||
|
||||
NS_DECL_NSIRUNNABLE
|
||||
|
@ -129,6 +134,7 @@ private:
|
|||
nsRefPtr<GeckoMediaPluginServiceParent> mService;
|
||||
nsString mPath;
|
||||
EOperation mOperation;
|
||||
bool mDefer;
|
||||
};
|
||||
|
||||
// Protected by mMutex from the base class.
|
||||
|
@ -158,6 +164,8 @@ private:
|
|||
|
||||
nsTArray<nsRefPtr<GMPParent>> mAsyncShutdownPlugins; // GMP Thread only.
|
||||
|
||||
nsTArray<nsString> mPluginsWaitingForDeletion;
|
||||
|
||||
nsCOMPtr<nsIFile> mStorageBaseDir;
|
||||
|
||||
// Hashes of (origin,topLevelOrigin) to the node id for
|
||||
|
@ -191,6 +199,7 @@ public:
|
|||
virtual bool RecvGetGMPNodeId(const nsString& aOrigin,
|
||||
const nsString& aTopLevelOrigin,
|
||||
const bool& aInPrivateBrowsing,
|
||||
const nsCString& aVersion,
|
||||
nsCString* aID) override;
|
||||
static bool RecvGetGMPPluginVersionForAPI(const nsCString& aAPI,
|
||||
nsTArray<nsCString>&& aTags,
|
||||
|
|
|
@ -19,7 +19,7 @@ parent:
|
|||
ProcessId[] alreadyBridgedTo)
|
||||
returns (ProcessId id, nsCString displayName, nsCString pluginId);
|
||||
sync GetGMPNodeId(nsString origin, nsString topLevelOrigin,
|
||||
bool inPrivateBrowsing)
|
||||
bool inPrivateBrowsing, nsCString version)
|
||||
returns (nsCString id);
|
||||
};
|
||||
|
||||
|
|
|
@ -113,7 +113,7 @@ typedef int64_t GMPTimestamp;
|
|||
//
|
||||
// Note: Gecko does not currently support the caps changing at runtime.
|
||||
// Set them once per plugin initialization, during the startup of
|
||||
// the GMPdecryptor.
|
||||
// the GMPDecryptor.
|
||||
|
||||
// Capability; CDM can decrypt encrypted buffers and return still
|
||||
// compressed buffers back to Gecko for decompression there.
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
#include "nsISupports.idl"
|
||||
#include "nsIFile.idl"
|
||||
|
||||
[scriptable, uuid(4d50f2df-736d-41b8-9292-9067f6bcd892)]
|
||||
[scriptable, uuid(32d35d21-181f-4630-8caa-a431e2ebad72)]
|
||||
interface mozIGeckoMediaPluginChromeService : nsISupports
|
||||
{
|
||||
/**
|
||||
|
@ -23,9 +23,11 @@ interface mozIGeckoMediaPluginChromeService : nsISupports
|
|||
|
||||
/**
|
||||
* Remove a directory for gecko media plugins and delete it from disk.
|
||||
* If |defer| is true, wait until the plugin is unused before removing.
|
||||
* @note Main-thread API.
|
||||
*/
|
||||
void removeAndDeletePluginDirectory(in AString directory);
|
||||
void removeAndDeletePluginDirectory(in AString directory,
|
||||
[optional] in bool defer);
|
||||
|
||||
/**
|
||||
* Clears storage data associated with the site.
|
||||
|
|
|
@ -52,7 +52,7 @@ native GetGMPVideoDecoderCallback(mozilla::UniquePtr<GetGMPVideoDecoderCallback>
|
|||
native GetGMPVideoEncoderCallback(mozilla::UniquePtr<GetGMPVideoEncoderCallback>&&);
|
||||
native GetNodeIdCallback(mozilla::UniquePtr<GetNodeIdCallback>&&);
|
||||
|
||||
[scriptable, uuid(2b0c90e1-df89-4583-a123-8bdb2f5f7e39)]
|
||||
[scriptable, uuid(6e3023f4-d9a2-46b4-8f50-70d4c918471d)]
|
||||
interface mozIGeckoMediaPluginService : nsISupports
|
||||
{
|
||||
|
||||
|
@ -146,5 +146,6 @@ interface mozIGeckoMediaPluginService : nsISupports
|
|||
void getNodeId(in AString origin,
|
||||
in AString topLevelOrigin,
|
||||
in bool inPrivateBrowsingMode,
|
||||
in ACString version,
|
||||
in GetNodeIdCallback callback);
|
||||
};
|
||||
|
|
|
@ -497,6 +497,7 @@ GetNodeId(const nsAString& aOrigin,
|
|||
nsresult rv = service->GetNodeId(aOrigin,
|
||||
aTopLevelOrigin,
|
||||
aInPBMode,
|
||||
NS_LITERAL_CSTRING(""),
|
||||
Move(callback));
|
||||
EXPECT_TRUE(NS_SUCCEEDED(rv) && NS_SUCCEEDED(result));
|
||||
return nodeId;
|
||||
|
|
|
@ -371,22 +371,22 @@ skip-if = buildapp == 'b2g' && toolkit != 'gonk' # bug 1082984
|
|||
[test_dormant_playback.html]
|
||||
skip-if = (os == 'win' && os_version == '5.1') || (os != 'win' && toolkit != 'gonk')
|
||||
[test_eme_canvas_blocked.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' || (os == 'win' && !debug) # bug 1043403, bug 1140675
|
||||
skip-if = toolkit == 'android' || (os == 'win' && !debug) # bug 1043403, bug 1140675
|
||||
[test_eme_non_mse_fails.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' # bug 1043403
|
||||
skip-if = toolkit == 'android' # bug 1043403
|
||||
#[test_eme_obs_notification.html]
|
||||
#skip-if = buildapp == 'b2g' || toolkit == 'android' # bug 1043403
|
||||
# Disabled (bug 1140778) since this test fails and we don't want to remove the
|
||||
# functionality being tested by this test. We should still test other observers
|
||||
# in future however, so I'm not removing the test, just disabling it.
|
||||
[test_eme_persistent_sessions.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' # bug 1043403
|
||||
skip-if = toolkit == 'android' # bug 1043403
|
||||
[test_eme_playback.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' # bug 1043403
|
||||
skip-if = toolkit == 'android' # bug 1043403
|
||||
[test_eme_requestKeySystemAccess.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' # bug 1043403
|
||||
skip-if = toolkit == 'android' # bug 1043403
|
||||
[test_eme_stream_capture_blocked.html]
|
||||
skip-if = buildapp == 'b2g' || toolkit == 'android' || (os == 'win' && !debug) # bug 1043403, bug 1140675
|
||||
skip-if = toolkit == 'android' || (os == 'win' && !debug) # bug 1043403, bug 1140675
|
||||
[test_empty_resource.html]
|
||||
[test_error_in_video_document.html]
|
||||
skip-if = toolkit == 'android' || (os == 'win' && !debug) || (os == 'mac' && !debug) # bug 608634
|
||||
|
|
|
@ -52,6 +52,7 @@ var prefs = [
|
|||
];
|
||||
|
||||
if (/Linux/.test(navigator.userAgent) ||
|
||||
SpecialPowers.Services.appinfo.name == "B2G" ||
|
||||
!document.createElement('video').canPlayType("video/mp4")) {
|
||||
// XXX remove once we have mp4 PlatformDecoderModules on all platforms.
|
||||
prefs.push([ "media.fragmented-mp4.exposed", true ]);
|
||||
|
|
|
@ -96,6 +96,7 @@ var prefs = [
|
|||
];
|
||||
|
||||
if (/Linux/.test(navigator.userAgent) ||
|
||||
SpecialPowers.Services.appinfo.name == "B2G" ||
|
||||
!document.createElement('video').canPlayType("video/mp4")) {
|
||||
// XXX remove once we have mp4 PlatformDecoderModules on all platforms.
|
||||
prefs.push([ "media.fragmented-mp4.exposed", true ]);
|
||||
|
|
|
@ -160,6 +160,7 @@ var prefs = [
|
|||
];
|
||||
|
||||
if (/Linux/.test(navigator.userAgent) ||
|
||||
SpecialPowers.Services.appinfo.name == "B2G" ||
|
||||
!document.createElement('video').canPlayType("video/mp4")) {
|
||||
// XXX remove once we have mp4 PlatformDecoderModules on all platforms.
|
||||
prefs.push([ "media.fragmented-mp4.exposed", true ]);
|
||||
|
|
|
@ -110,6 +110,7 @@ var prefs = [
|
|||
];
|
||||
|
||||
if (/Linux/.test(navigator.userAgent) ||
|
||||
SpecialPowers.Services.appinfo.name == "B2G" ||
|
||||
!document.createElement('video').canPlayType("video/mp4")) {
|
||||
// XXX remove once we have mp4 PlatformDecoderModules on all platforms.
|
||||
prefs.push([ "media.fragmented-mp4.exposed", true ]);
|
||||
|
|
|
@ -83,6 +83,7 @@ var prefs = [
|
|||
];
|
||||
|
||||
if (/Linux/.test(navigator.userAgent) ||
|
||||
SpecialPowers.Services.appinfo.name == "B2G" ||
|
||||
!document.createElement('video').canPlayType("video/mp4")) {
|
||||
// XXX remove once we have mp4 PlatformDecoderModules on all platforms.
|
||||
prefs.push([ "media.fragmented-mp4.exposed", true ]);
|
||||
|
|
|
@ -723,6 +723,7 @@ XPCOMUtils.defineLazyGetter(this, "gMmsTransactionHelper", function() {
|
|||
(aError) => {
|
||||
debug("Failed to ensureRouting: " + aError);
|
||||
|
||||
mmsConnection.release();
|
||||
cancellable.done(_HTTP_STATUS_FAILED_TO_ROUTE, null);
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,44 +0,0 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#ifndef NfcGonkMessage_h
|
||||
#define NfcGonkMessage_h
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
#define NFCD_MAJOR_VERSION 1
|
||||
#define NFCD_MINOR_VERSION 22
|
||||
|
||||
enum NfcTechlogy {
|
||||
NDEF = 0,
|
||||
NDEFWritable,
|
||||
NDEFFormattable,
|
||||
P2P,
|
||||
};
|
||||
|
||||
enum NfcErrorCode {
|
||||
Success = 0,
|
||||
IOErr = 1,
|
||||
Timeout = 2,
|
||||
BusyErr = 3,
|
||||
ConnectErr = 4,
|
||||
DisconnectErr = 5,
|
||||
ReadErr = 6,
|
||||
WriteErr = 7,
|
||||
InvalidParam = 8,
|
||||
InsufficientResources = 9,
|
||||
SocketCreation = 10,
|
||||
FailEnableDiscovery = 11,
|
||||
FailDisableDiscovery = 12,
|
||||
NotInitialized = 13,
|
||||
InitializeFail = 14,
|
||||
DeinitializeFail = 15,
|
||||
NotSupported = 16,
|
||||
FailEnableLowPowerMode = 17,
|
||||
FailDisableLowPowerMode = 18,
|
||||
};
|
||||
|
||||
} // namespace mozilla
|
||||
|
||||
#endif // NfcGonkMessage_h
|
|
@ -6,13 +6,15 @@
|
|||
#include <binder/Parcel.h>
|
||||
#include "mozilla/dom/MozNDEFRecordBinding.h"
|
||||
#include "nsDebug.h"
|
||||
#include "NfcGonkMessage.h"
|
||||
#include "NfcOptions.h"
|
||||
#include "mozilla/unused.h"
|
||||
|
||||
#include <android/log.h>
|
||||
#define NMH_LOG(args...) __android_log_print(ANDROID_LOG_INFO, "NfcMessageHandler", args)
|
||||
|
||||
#define NFCD_MAJOR_VERSION 1
|
||||
#define NFCD_MINOR_VERSION 22
|
||||
|
||||
using namespace android;
|
||||
using namespace mozilla;
|
||||
using namespace mozilla::dom;
|
||||
|
@ -168,7 +170,7 @@ NfcMessageHandler::ReadNDEFResponse(const Parcel& aParcel, EventOptions& aOption
|
|||
aOptions.mRequestId = mRequestIdQueue[0];
|
||||
mRequestIdQueue.RemoveElementAt(0);
|
||||
|
||||
if (aOptions.mErrorCode == NfcErrorCode::Success) {
|
||||
if (aOptions.mErrorCode == 0) {
|
||||
ReadNDEFMessage(aParcel, aOptions);
|
||||
}
|
||||
|
||||
|
@ -202,7 +204,7 @@ NfcMessageHandler::TransceiveResponse(const Parcel& aParcel, EventOptions& aOpti
|
|||
aOptions.mRequestId = mRequestIdQueue[0];
|
||||
mRequestIdQueue.RemoveElementAt(0);
|
||||
|
||||
if (aOptions.mErrorCode == NfcErrorCode::Success) {
|
||||
if (aOptions.mErrorCode == 0) {
|
||||
ReadTransceiveResponse(aParcel, aOptions);
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
#include "nsAutoPtr.h"
|
||||
#include "nsString.h"
|
||||
#include "nsXULAppAPI.h"
|
||||
#include "NfcGonkMessage.h"
|
||||
#include "NfcOptions.h"
|
||||
|
||||
#define NS_NFCSERVICE_CID \
|
||||
|
|
|
@ -2923,12 +2923,16 @@ DataCall.prototype = {
|
|||
return isIdentical;
|
||||
},
|
||||
|
||||
reset: function() {
|
||||
resetLinkInfo: function() {
|
||||
this.linkInfo.cid = null;
|
||||
this.linkInfo.ifname = null;
|
||||
this.linkInfo.addresses = [];
|
||||
this.linkInfo.dnses = [];
|
||||
this.linkInfo.gateways = [];
|
||||
},
|
||||
|
||||
reset: function() {
|
||||
this.resetLinkInfo();
|
||||
|
||||
this.state = RIL.GECKO_NETWORK_STATE_UNKNOWN;
|
||||
|
||||
|
@ -3099,7 +3103,7 @@ DataCall.prototype = {
|
|||
deactivate: function() {
|
||||
let reason = RIL.DATACALL_DEACTIVATE_NO_REASON;
|
||||
if (DEBUG) {
|
||||
this.debug("Going to disconnet data connection cid " + this.linkInfo.cid);
|
||||
this.debug("Going to disconnect data connection cid " + this.linkInfo.cid);
|
||||
}
|
||||
let radioInterface = this.gRIL.getRadioInterface(this.clientId);
|
||||
radioInterface.sendWorkerMessage("deactivateDataCall", {
|
||||
|
@ -3108,6 +3112,7 @@ DataCall.prototype = {
|
|||
}, this.onDeactivateDataCallResult.bind(this));
|
||||
|
||||
this.state = RIL.GECKO_NETWORK_STATE_DISCONNECTING;
|
||||
this.resetLinkInfo();
|
||||
},
|
||||
|
||||
// Entry method for timer events. Used to reconnect to a failed APN
|
||||
|
@ -3184,13 +3189,13 @@ RILNetworkInterface.prototype = {
|
|||
for (let i = 0; i < addresses.length; i++) {
|
||||
let [ip, prefixLength] = addresses[i].split("/");
|
||||
ips.push(ip);
|
||||
prefixLengths.push();
|
||||
prefixLengths.push(prefixLength);
|
||||
}
|
||||
|
||||
aIps.value = ips.slice();
|
||||
aPrefixLengths.value = prefixLengths.slice();
|
||||
|
||||
return aIps.length;
|
||||
return ips.length;
|
||||
},
|
||||
|
||||
getGateways: function(aCount) {
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче