Merge central to fx-team a=merge

This commit is contained in:
Wes Kocher 2015-04-13 17:30:09 -07:00
Родитель dfd03446c5 381ed5c1ba
Коммит 44390984f4
335 изменённых файлов: 6445 добавлений и 1445 удалений

Просмотреть файл

@ -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) {

Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше