author | Wes Kocher <wkocher@mozilla.com> |
Tue, 11 Aug 2015 15:46:08 -0700 (2015-08-11) | |
changeset 257322 | d4f3a8a75577e4af2914a4e899ca2e724f9715c4 |
parent 257304 | c16d26bc7b8ae572406b77d31c6b10fdd5fb4052 (current diff) |
parent 257321 | 3785d3e97c8a3521d6ba093813f868ceceb9154b (diff) |
child 257323 | efcf69afe618a795177d6eb7864b5236ea1d8683 |
child 257329 | ff964955edb14bf32a934a7217bd1700b11434a4 |
child 257348 | b948eb69b69dd1c7e0bd0b47d7d44796511bac10 |
child 257389 | 762524f4d9ff68d8a5e19f2a1281b584c0ba7f62 |
push id | 29212 |
push user | kwierso@gmail.com |
push date | Tue, 11 Aug 2015 22:46:08 +0000 (2015-08-11) |
treeherder | mozilla-central@d4f3a8a75577 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | merge |
milestone | 43.0a1 |
first release with | nightly linux32
d4f3a8a75577
/
43.0a1
/
20150812030206
/
files
nightly linux64
d4f3a8a75577
/
43.0a1
/
20150812030206
/
files
nightly mac
d4f3a8a75577
/
43.0a1
/
20150812030206
/
files
nightly win32
d4f3a8a75577
/
43.0a1
/
20150812030206
/
files
nightly win64
d4f3a8a75577
/
43.0a1
/
20150812030206
/
files
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
releases | nightly linux32
43.0a1
/
20150812030206
/
pushlog to previous
nightly linux64
43.0a1
/
20150812030206
/
pushlog to previous
nightly mac
43.0a1
/
20150812030206
/
pushlog to previous
nightly win32
43.0a1
/
20150812030206
/
pushlog to previous
nightly win64
43.0a1
/
20150812030206
/
pushlog to previous
|
--- a/b2g/config/aries/sources.xml +++ b/b2g/config/aries/sources.xml @@ -10,17 +10,17 @@ <!--original fetch url was git://codeaurora.org/--> <remote fetch="https://git.mozilla.org/external/caf" name="caf"/> <!--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="e862ab9177af664f00b4522e2350f4cb13866d73"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="2d7f369fd923b6df3b00d76844c413c1202c04ba"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="c7875bbc8b32e7b95cc55c9690b03b140905d84d"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/> <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/> <project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/> <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/> <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="36b945cb98a4e9009d57b8c20a720fc1a5905452"/>
--- a/b2g/config/dolphin/sources.xml +++ b/b2g/config/dolphin/sources.xml @@ -10,17 +10,17 @@ <!--original fetch url was git://codeaurora.org/--> <remote fetch="https://git.mozilla.org/external/caf" name="caf"/> <!--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="e862ab9177af664f00b4522e2350f4cb13866d73"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="2d7f369fd923b6df3b00d76844c413c1202c04ba"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="c7875bbc8b32e7b95cc55c9690b03b140905d84d"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/> <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/> <project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/> <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/> <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="36b945cb98a4e9009d57b8c20a720fc1a5905452"/>
--- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -14,17 +14,17 @@ <!--original fetch url was git://github.com/apitrace/--> <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/> <default remote="caf" revision="refs/tags/android-4.0.4_r2.1" sync-j="4"/> <!-- Gonk specific things and forks --> <project name="platform_build" path="build" remote="b2g" revision="1b0db93fb6b870b03467aff50d6419771ba0d88c"> <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="2d7f369fd923b6df3b00d76844c413c1202c04ba"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="c7875bbc8b32e7b95cc55c9690b03b140905d84d"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/> <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="2d58f4b9206b50b8fda0d5036da6f0c62608db7c"/> <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="d70e4bfdcb65e7514de0f9315b74aea1c811678d"/> <project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="34ea6163f9f0e0122fb0bb03607eccdca31ced7a"/> <!-- Stock Android things --> <project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
--- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -12,17 +12,17 @@ <!--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="660169a3d7e034a892359e39135e8c2785a6ad6f"> <copyfile dest="Makefile" src="core/root.mk"/> </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="2d7f369fd923b6df3b00d76844c413c1202c04ba"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="c7875bbc8b32e7b95cc55c9690b03b140905d84d"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/> <project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="36b945cb98a4e9009d57b8c20a720fc1a5905452"/> <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/> <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/> <!-- Stock Android things --> <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.1" path="prebuilts/clang/linux-x86/3.1" revision="5c45f43419d5582949284eee9cef0c43d866e03b"/> <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.2" path="prebuilts/clang/linux-x86/3.2" revision="3748b4168e7bd8d46457d4b6786003bc6a5223ce"/>
--- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -10,17 +10,17 @@ <!--original fetch url was git://codeaurora.org/--> <remote fetch="https://git.mozilla.org/external/caf" name="caf"/> <!--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="e862ab9177af664f00b4522e2350f4cb13866d73"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="2d7f369fd923b6df3b00d76844c413c1202c04ba"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="c7875bbc8b32e7b95cc55c9690b03b140905d84d"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/> <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/> <project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/> <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/> <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="36b945cb98a4e9009d57b8c20a720fc1a5905452"/> @@ -119,21 +119,21 @@ <project name="platform/system/extras" path="system/extras" revision="5356165f67f4a81c2ef28671c13697f1657590df"/> <project name="platform/system/media" path="system/media" revision="be0e2fe59a8043fa5200f75697df9220a99abe9d"/> <project name="platform_system_libfdio" path="system/libfdio" remote="b2g" revision="3c5405863d2002f665ef2b901abb3853c420129b"/> <project name="platform/system/netd" path="system/netd" revision="36704b0da24debcab8090156568ac236315036bb"/> <project name="platform/system/security" path="system/security" revision="583374f69f531ba68fc3dcbff1f74893d2a96406"/> <project name="platform/system/vold" path="system/vold" revision="d4455b8cf361f8353e8aebac15ffd64b4aedd2b9"/> <project name="platform/external/icu4c" path="external/icu4c" remote="aosp" revision="b4c6379528887dc25ca9991a535a8d92a61ad6b6"/> <project name="platform_frameworks_av" path="frameworks/av" remote="b2g" revision="f313503b5c91aaa6fcf962d4ec9bf260e0c00bf1"/> - <project name="platform_system_core" path="system/core" remote="b2g" revision="9395eb5aa885cf6d305a202de6e9694a58a89717"/> + <project name="platform_system_core" path="system/core" remote="b2g" revision="8586f55fe4b015911b48e731b69c592ad82a0807"/> <default remote="caf" revision="refs/tags/android-4.4.2_r1" sync-j="4"/> <!-- Emulator specific things --> <project name="device/generic/armv7-a-neon" path="device/generic/armv7-a-neon" revision="72ffdf71c68a96309212eb13d63560d66db14c9e"/> - <project name="device_generic_goldfish" path="device/generic/goldfish" remote="b2g" revision="f390788a00706c06e5248edfd8d27b365387e84a"/> + <project name="device_generic_goldfish" path="device/generic/goldfish" remote="b2g" revision="85f6a2e1e638dbc8b119896e61383e973e764ffd"/> <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="4bebbe8d92368befc31e8b4a99da2d29cc26bfbc"/> <project name="platform/external/libnfc-nci" path="external/libnfc-nci" revision="f37bd545063039e30a92f2550ae78c0e6e4e2d08"/> <project name="platform_external_wpa_supplicant_8" path="external/wpa_supplicant_8" remote="b2g" revision="0c6a6547cd1fd302fa2b0f6e375654df36bf0ec4"/> <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="cd4fc430da93fad3123f0775791a919568aa0ca2"/> <project name="platform_system_nfcd" path="system/nfcd" remote="b2g" revision="5f4b68c799927b6e078f987b12722c3a6ccd4a45"/> <project name="platform/development" path="development" revision="5968ff4e13e0d696ad8d972281fc27ae5a12829b"/> <project name="android-sdk" path="sdk" remote="b2g" revision="0951179277915335251c5e11d242e4e1a8c2236f"/> <project name="darwinstreamingserver" path="system/darwinstreamingserver" remote="b2g" revision="cf85968c7f85e0ec36e72c87ceb4837a943b8af6"/>
--- a/b2g/config/emulator-l/sources.xml +++ b/b2g/config/emulator-l/sources.xml @@ -10,17 +10,17 @@ <!--original fetch url was git://codeaurora.org/--> <remote fetch="https://git.mozilla.org/external/caf" name="caf"/> <!--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="05a36844c1046a1eb07d5b1325f85ed741f961ea"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="2d7f369fd923b6df3b00d76844c413c1202c04ba"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="c7875bbc8b32e7b95cc55c9690b03b140905d84d"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/> <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/> <project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/> <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/> <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="36b945cb98a4e9009d57b8c20a720fc1a5905452"/>
--- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -14,17 +14,17 @@ <!--original fetch url was git://github.com/apitrace/--> <remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/> <default remote="caf" revision="refs/tags/android-4.0.4_r2.1" sync-j="4"/> <!-- Gonk specific things and forks --> <project name="platform_build" path="build" remote="b2g" revision="1b0db93fb6b870b03467aff50d6419771ba0d88c"> <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="2d7f369fd923b6df3b00d76844c413c1202c04ba"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="c7875bbc8b32e7b95cc55c9690b03b140905d84d"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/> <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="2d58f4b9206b50b8fda0d5036da6f0c62608db7c"/> <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="d70e4bfdcb65e7514de0f9315b74aea1c811678d"/> <project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="34ea6163f9f0e0122fb0bb03607eccdca31ced7a"/> <!-- Stock Android things --> <project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
--- a/b2g/config/flame-kk/sources.xml +++ b/b2g/config/flame-kk/sources.xml @@ -10,17 +10,17 @@ <!--original fetch url was git://codeaurora.org/--> <remote fetch="https://git.mozilla.org/external/caf" name="caf"/> <!--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="e862ab9177af664f00b4522e2350f4cb13866d73"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="2d7f369fd923b6df3b00d76844c413c1202c04ba"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="c7875bbc8b32e7b95cc55c9690b03b140905d84d"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/> <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/> <project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/> <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/> <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="36b945cb98a4e9009d57b8c20a720fc1a5905452"/>
--- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -1,9 +1,9 @@ { "git": { - "git_revision": "2d7f369fd923b6df3b00d76844c413c1202c04ba", + "git_revision": "c7875bbc8b32e7b95cc55c9690b03b140905d84d", "remote": "https://git.mozilla.org/releases/gaia.git", "branch": "" }, - "revision": "5c86f4cf87b91d2bfe9a3e49aa8706b452e4f97e", + "revision": "9db39036600a1c999f93038fa0dd09a48321518e", "repo_path": "integration/gaia-central" }
--- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -12,17 +12,17 @@ <!--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="660169a3d7e034a892359e39135e8c2785a6ad6f"> <copyfile dest="Makefile" src="core/root.mk"/> </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="2d7f369fd923b6df3b00d76844c413c1202c04ba"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="c7875bbc8b32e7b95cc55c9690b03b140905d84d"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/> <project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="36b945cb98a4e9009d57b8c20a720fc1a5905452"/> <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/> <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/> <!-- Stock Android things --> <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.1" path="prebuilts/clang/linux-x86/3.1" revision="5c45f43419d5582949284eee9cef0c43d866e03b"/> <project groups="linux" name="platform/prebuilts/clang/linux-x86/3.2" path="prebuilts/clang/linux-x86/3.2" revision="3748b4168e7bd8d46457d4b6786003bc6a5223ce"/>
--- a/b2g/config/nexus-5-l/sources.xml +++ b/b2g/config/nexus-5-l/sources.xml @@ -10,17 +10,17 @@ <!--original fetch url was git://codeaurora.org/--> <remote fetch="https://git.mozilla.org/external/caf" name="caf"/> <!--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="05a36844c1046a1eb07d5b1325f85ed741f961ea"> <copyfile dest="Makefile" src="core/root.mk"/> </project> - <project name="gaia" path="gaia" remote="mozillaorg" revision="2d7f369fd923b6df3b00d76844c413c1202c04ba"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="c7875bbc8b32e7b95cc55c9690b03b140905d84d"/> <project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/> <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="62cfa11ae7d77f6330de019a5aa79607e35be7d1"/> <project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/> <project name="moztt" path="external/moztt" remote="b2g" revision="657894b4a1dc0a926117f4812e0940229f9f676f"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/> <project name="valgrind" path="external/valgrind" remote="b2g" revision="daa61633c32b9606f58799a3186395fd2bbb8d8c"/> <project name="vex" path="external/VEX" remote="b2g" revision="47f031c320888fe9f3e656602588565b52d43010"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="36b945cb98a4e9009d57b8c20a720fc1a5905452"/>
--- a/dom/bluetooth/BluetoothCommon.h +++ b/dom/bluetooth/BluetoothCommon.h @@ -163,16 +163,17 @@ extern bool gBluetoothDebugFlag; #define KEY_PAIRING_LISTENER "/B2G/bluetooth/pairing_listener" /** * When the connection status of a Bluetooth profile is changed, we'll notify * observers which register the following topics. */ #define BLUETOOTH_A2DP_STATUS_CHANGED_ID "bluetooth-a2dp-status-changed" #define BLUETOOTH_HFP_STATUS_CHANGED_ID "bluetooth-hfp-status-changed" +#define BLUETOOTH_HFP_NREC_STATUS_CHANGED_ID "bluetooth-hfp-nrec-status-changed" #define BLUETOOTH_HID_STATUS_CHANGED_ID "bluetooth-hid-status-changed" #define BLUETOOTH_SCO_STATUS_CHANGED_ID "bluetooth-sco-status-changed" /** * When the connection status of a Bluetooth profile is changed, we'll * dispatch one of the following events. */ #define A2DP_STATUS_CHANGED_ID "a2dpstatuschanged"
--- a/dom/bluetooth/BluetoothHfpManagerBase.h +++ b/dom/bluetooth/BluetoothHfpManagerBase.h @@ -13,16 +13,18 @@ BEGIN_BLUETOOTH_NAMESPACE class BluetoothHfpManagerBase : public BluetoothProfileManagerBase { public: /** * Returns true if Sco is connected. */ virtual bool IsScoConnected() = 0; + + virtual bool IsNrecEnabled() = 0; }; #define BT_DECL_HFP_MGR_BASE \ BT_DECL_PROFILE_MGR_BASE \ virtual bool IsScoConnected() override; END_BLUETOOTH_NAMESPACE
--- a/dom/bluetooth/bluedroid/b2g_bdroid_buildcfg.h +++ b/dom/bluetooth/bluedroid/b2g_bdroid_buildcfg.h @@ -27,16 +27,17 @@ /****************************************************************************** ** ** HSP, HFP ** ******************************************************************************/ /* AG feature masks */ #define BTIF_HF_FEATURES ( BTA_AG_FEAT_3WAY | \ + BTA_AG_FEAT_ECNR | \ BTA_AG_FEAT_REJECT | \ BTA_AG_FEAT_ECS | \ BTA_AG_FEAT_EXTERR) /* CHLD values */ #define BTA_AG_CHLD_VAL "(0,1,2,3)" /* SDP AVRCP 1.5 feature */ #define SDP_AVRCP_1_5 FALSE
--- a/dom/bluetooth/bluedroid/hfp/BluetoothHfpManager.cpp +++ b/dom/bluetooth/bluedroid/hfp/BluetoothHfpManager.cpp @@ -215,16 +215,17 @@ BluetoothHfpManager::Cleanup() mDialingRequestProcessed = true; mConnectionState = HFP_CONNECTION_STATE_DISCONNECTED; mPrevConnectionState = HFP_CONNECTION_STATE_DISCONNECTED; mBattChg = 5; mService = HFP_NETWORK_STATE_NOT_AVAILABLE; mRoam = HFP_SERVICE_TYPE_HOME; mSignal = 0; + mNrecEnabled = HFP_NREC_STARTED; mController = nullptr; } void BluetoothHfpManager::Reset() { // Phone & Device CIND @@ -1200,16 +1201,22 @@ BluetoothHfpManager::IsScoConnected() } bool BluetoothHfpManager::IsConnected() { return (mConnectionState == HFP_CONNECTION_STATE_SLC_CONNECTED); } +bool +BluetoothHfpManager::IsNrecEnabled() +{ + return mNrecEnabled; +} + void BluetoothHfpManager::OnConnectError() { MOZ_ASSERT(NS_IsMainThread()); mController->NotifyCompletion(NS_LITERAL_STRING(ERR_CONNECTION_FAILED)); mController = nullptr; @@ -1384,16 +1391,22 @@ BluetoothHfpManager::ConnectionStateNoti mDeviceAddress = aBdAddress; NotifyConnectionStateChanged( NS_LITERAL_STRING(BLUETOOTH_HFP_STATUS_CHANGED_ID)); } else if (aState == HFP_CONNECTION_STATE_DISCONNECTED) { DisconnectSco(); NotifyConnectionStateChanged( NS_LITERAL_STRING(BLUETOOTH_HFP_STATUS_CHANGED_ID)); + + } else if (aState == HFP_CONNECTION_STATE_CONNECTED) { + // Once RFCOMM is connected, enable NREC before each new SLC connection + mNrecEnabled = HFP_NREC_STARTED; + NotifyConnectionStateChanged( + NS_LITERAL_STRING(BLUETOOTH_HFP_NREC_STATUS_CHANGED_ID)); } } void BluetoothHfpManager::AudioStateNotification( BluetoothHandsfreeAudioState aState, const nsAString& aBdAddress) { MOZ_ASSERT(NS_IsMainThread()); @@ -1461,16 +1474,38 @@ BluetoothHfpManager::DtmfNotification(ch NS_ENSURE_TRUE_VOID(IsValidDtmf(aDtmf)); nsAutoCString message("VTS="); message += aDtmf; NotifyDialer(NS_ConvertUTF8toUTF16(message)); } void +BluetoothHfpManager::NRECNotification(BluetoothHandsfreeNRECState aNrec, + const nsAString& aBdAddr) +{ + MOZ_ASSERT(NS_IsMainThread()); + + // Notify Gecko observers + nsCOMPtr<nsIObserverService> obs = services::GetObserverService(); + NS_ENSURE_TRUE_VOID(obs); + + // Set NREC status once getting AT command + mNrecEnabled = static_cast<bool>(aNrec); + + // Notify audio manager + if (NS_FAILED(obs->NotifyObservers(this, + BLUETOOTH_HFP_NREC_STATUS_CHANGED_ID, + mDeviceAddress.get()))) { + BT_WARNING("Failed to notify bluetooth-hfp-nrec-status-changed observsers!"); + } + +} + +void BluetoothHfpManager::CallHoldNotification(BluetoothHandsfreeCallHoldType aChld, const nsAString& aBdAddress) { MOZ_ASSERT(NS_IsMainThread()); if (!IsSupportedChld((int)aChld)) { // We currently don't support Enhanced Call Control. // AT+CHLD=1x and AT+CHLD=2x will be ignored
--- a/dom/bluetooth/bluedroid/hfp/BluetoothHfpManager.h +++ b/dom/bluetooth/bluedroid/hfp/BluetoothHfpManager.h @@ -87,16 +87,17 @@ public: } static BluetoothHfpManager* Get(); static void InitHfpInterface(BluetoothProfileResultHandler* aRes); static void DeinitHfpInterface(BluetoothProfileResultHandler* aRes); bool ConnectSco(); bool DisconnectSco(); + bool IsNrecEnabled(); /** * @param aSend A boolean indicates whether we need to notify headset or not */ void HandleCallStateChanged(uint32_t aCallIndex, uint16_t aCallState, const nsAString& aError, const nsAString& aNumber, const bool aIsOutgoing, const bool aIsConference, bool aSend); @@ -122,16 +123,18 @@ public: const nsAString& aBdAddress) override; void AnswerCallNotification(const nsAString& aBdAddress) override; void HangupCallNotification(const nsAString& aBdAddress) override; void VolumeNotification(BluetoothHandsfreeVolumeType aType, int aVolume, const nsAString& aBdAddress) override; void DtmfNotification(char aDtmf, const nsAString& aBdAddress) override; + void NRECNotification(BluetoothHandsfreeNRECState aNrec, + const nsAString& aBdAddr) override; void CallHoldNotification(BluetoothHandsfreeCallHoldType aChld, const nsAString& aBdAddress) override; void DialCallNotification(const nsAString& aNumber, const nsAString& aBdAddress) override; void CnumNotification(const nsAString& aBdAddress) override; void CindNotification(const nsAString& aBdAddress) override; void CopsNotification(const nsAString& aBdAddress) override; void ClccNotification(const nsAString& aBdAddress) override; @@ -208,16 +211,17 @@ private: BluetoothHandsfreeServiceType mRoam; int mSignal; int mCurrentVgs; int mCurrentVgm; bool mReceiveVgsFlag; // This flag is for HFP only, not for HSP. bool mDialingRequestProcessed; + bool mNrecEnabled; PhoneType mPhoneType; nsString mDeviceAddress; nsString mMsisdn; nsString mOperatorName; nsTArray<Call> mCurrentCallArray; nsAutoPtr<BluetoothRilListener> mListener; nsRefPtr<BluetoothProfileController> mController;
--- a/dom/bluetooth/bluez/BluetoothHfpManager.cpp +++ b/dom/bluetooth/bluez/BluetoothHfpManager.cpp @@ -2100,10 +2100,19 @@ BluetoothHfpManager::OnDisconnect(const * connections. On the other hand, we do nothing for inbound connections. */ NS_ENSURE_TRUE_VOID(mController); nsRefPtr<BluetoothProfileController> controller = mController.forget(); controller->NotifyCompletion(aErrorStr); } +bool +BluetoothHfpManager::IsNrecEnabled() +{ + // Add this function and return default value to avoid build break + // since NREC function isn't developed in bluez yet. + // Please see Bug 825149 for more information. + return HFP_NREC_STARTED; +} + NS_IMPL_ISUPPORTS(BluetoothHfpManager, nsIObserver)
--- a/dom/bluetooth/bluez/BluetoothHfpManager.h +++ b/dom/bluetooth/bluez/BluetoothHfpManager.h @@ -98,16 +98,17 @@ public: * connecting HSP socket rather than HFP socket. * * @param aRunnable Indicate a BluetoothReplyRunnable to execute this * function. The default value is nullpter * @return <code>true</code> if SCO established successfully */ bool ConnectSco(BluetoothReplyRunnable* aRunnable = nullptr); bool DisconnectSco(); + bool IsNrecEnabled(); bool ListenSco(); #ifdef MOZ_B2G_RIL /** * @param aSend A boolean indicates whether we need to notify headset or not */ void HandleCallStateChanged(uint32_t aCallIndex, uint16_t aCallState, const nsAString& aError, const nsAString& aNumber,
--- a/dom/system/gonk/AudioManager.cpp +++ b/dom/system/gonk/AudioManager.cpp @@ -367,16 +367,27 @@ AudioManager::HandleBluetoothStatusChang #endif } sBluetoothA2dpEnabled = audioState == AUDIO_POLICY_DEVICE_STATE_AVAILABLE; } else if (!strcmp(aTopic, BLUETOOTH_HFP_STATUS_CHANGED_ID)) { AudioSystem::setDeviceConnectionState(AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET, audioState, aAddress.get()); AudioSystem::setDeviceConnectionState(AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET, audioState, aAddress.get()); + } else if (!strcmp(aTopic, BLUETOOTH_HFP_NREC_STATUS_CHANGED_ID)) { + String8 cmd; + BluetoothHfpManagerBase* hfp = + static_cast<BluetoothHfpManagerBase*>(aSubject); + if (hfp->IsNrecEnabled()) { + cmd.setTo("bt_headset_name=<unknown>;bt_headset_nrec=on"); + AudioSystem::setParameters(0, cmd); + } else { + cmd.setTo("bt_headset_name=<unknown>;bt_headset_nrec=off"); + AudioSystem::setParameters(0, cmd); + } } #endif } void AudioManager::HandleAudioChannelProcessChanged() { // Note: If the user answers a VoIP call (e.g. WebRTC calls) during the @@ -404,16 +415,17 @@ AudioManager::HandleAudioChannelProcessC nsresult AudioManager::Observe(nsISupports* aSubject, const char* aTopic, const char16_t* aData) { if ((strcmp(aTopic, BLUETOOTH_SCO_STATUS_CHANGED_ID) == 0) || (strcmp(aTopic, BLUETOOTH_HFP_STATUS_CHANGED_ID) == 0) || + (strcmp(aTopic, BLUETOOTH_HFP_NREC_STATUS_CHANGED_ID) == 0) || (strcmp(aTopic, BLUETOOTH_A2DP_STATUS_CHANGED_ID) == 0)) { nsCString address = NS_ConvertUTF16toUTF8(nsDependentString(aData)); if (address.IsEmpty()) { NS_WARNING(nsPrintfCString("Invalid address of %s", aTopic).get()); return NS_ERROR_FAILURE; } HandleBluetoothStatusChanged(aSubject, aTopic, address); @@ -548,16 +560,19 @@ AudioManager::AudioManager() NS_WARNING("Failed to add bluetooth sco status changed observer!"); } if (NS_FAILED(obs->AddObserver(this, BLUETOOTH_A2DP_STATUS_CHANGED_ID, false))) { NS_WARNING("Failed to add bluetooth a2dp status changed observer!"); } if (NS_FAILED(obs->AddObserver(this, BLUETOOTH_HFP_STATUS_CHANGED_ID, false))) { NS_WARNING("Failed to add bluetooth hfp status changed observer!"); } + if (NS_FAILED(obs->AddObserver(this, BLUETOOTH_HFP_NREC_STATUS_CHANGED_ID, false))) { + NS_WARNING("Failed to add bluetooth hfp NREC status changed observer!"); + } if (NS_FAILED(obs->AddObserver(this, MOZ_SETTINGS_CHANGE_ID, false))) { NS_WARNING("Failed to add mozsettings-changed observer!"); } if (NS_FAILED(obs->AddObserver(this, AUDIO_CHANNEL_PROCESS_CHANGED, false))) { NS_WARNING("Failed to add audio-channel-process-changed observer!"); } #ifdef MOZ_B2G_RIL @@ -578,16 +593,19 @@ AudioManager::~AudioManager() { NS_WARNING("Failed to remove bluetooth sco status changed observer!"); } if (NS_FAILED(obs->RemoveObserver(this, BLUETOOTH_A2DP_STATUS_CHANGED_ID))) { NS_WARNING("Failed to remove bluetooth a2dp status changed observer!"); } if (NS_FAILED(obs->RemoveObserver(this, BLUETOOTH_HFP_STATUS_CHANGED_ID))) { NS_WARNING("Failed to remove bluetooth hfp status changed observer!"); } + if (NS_FAILED(obs->RemoveObserver(this, BLUETOOTH_HFP_NREC_STATUS_CHANGED_ID))) { + NS_WARNING("Failed to remove bluetooth hfp NREC status changed observer!"); + } if (NS_FAILED(obs->RemoveObserver(this, MOZ_SETTINGS_CHANGE_ID))) { NS_WARNING("Failed to remove mozsettings-changed observer!"); } if (NS_FAILED(obs->RemoveObserver(this, AUDIO_CHANNEL_PROCESS_CHANGED))) { NS_WARNING("Failed to remove audio-channel-process-changed!"); } }
--- a/dom/telephony/Telephony.cpp +++ b/dom/telephony/Telephony.cpp @@ -2,29 +2,31 @@ /* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* 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 "Telephony.h" #include "mozilla/Preferences.h" +#include "mozilla/dom/AudioChannelBinding.h" #include "mozilla/dom/CallEvent.h" #include "mozilla/dom/MozMobileConnectionBinding.h" #include "mozilla/dom/Promise.h" #include "mozilla/dom/TelephonyBinding.h" #include "nsCharSeparatedTokenizer.h" #include "nsContentUtils.h" #include "nsIPermissionManager.h" #include "nsIURI.h" #include "nsPIDOMWindow.h" #include "nsServiceManagerUtils.h" #include "nsThreadUtils.h" +#include "AudioChannelService.h" #include "CallsList.h" #include "TelephonyCall.h" #include "TelephonyCallGroup.h" #include "TelephonyCallId.h" #include "TelephonyDialCallback.h" // Service instantiation #include "ipc/TelephonyIPCService.h" @@ -57,26 +59,31 @@ public: Disconnect() { MOZ_ASSERT(mTelephony); mTelephony = nullptr; } }; Telephony::Telephony(nsPIDOMWindow* aOwner) - : DOMEventTargetHelper(aOwner) + : DOMEventTargetHelper(aOwner), + mIsAudioStartPlaying(false), + mAudioAgentNotify(nsIAudioChannelAgent::AUDIO_AGENT_NOTIFY), + mHaveDispatchedInterruptBeginEvent(false) { + MOZ_ASSERT(aOwner); nsCOMPtr<nsIGlobalObject> global = do_QueryInterface(aOwner); MOZ_ASSERT(global); ErrorResult rv; nsRefPtr<Promise> promise = Promise::Create(global, rv); MOZ_ASSERT(!rv.Failed()); mReadyPromise = promise; + mMuted = AudioChannelService::IsAudioChannelMutedByDefault(); } Telephony::~Telephony() { Shutdown(); } void @@ -513,16 +520,71 @@ Telephony::StopTone(const Optional<uint3 if (!IsValidServiceId(serviceId)) { aRv.Throw(NS_ERROR_INVALID_ARG); return; } aRv = mService->StopTone(serviceId); } +void +Telephony::OwnAudioChannel(ErrorResult& aRv) +{ + if (mAudioAgent) { + return; + } + + mAudioAgent = do_CreateInstance("@mozilla.org/audiochannelagent;1"); + MOZ_ASSERT(mAudioAgent); + aRv = mAudioAgent->Init(GetParentObject(), + (int32_t)AudioChannel::Telephony, this); + if (NS_WARN_IF(aRv.Failed())) { + return; + } + aRv = HandleAudioAgentState(); + if (NS_WARN_IF(aRv.Failed())) { + return; + } +} + +nsresult +Telephony::HandleAudioAgentState() +{ + if (!mAudioAgent) { + return NS_OK; + } + + Nullable<OwningTelephonyCallOrTelephonyCallGroup> activeCall; + GetActive(activeCall); + nsresult rv; + // Only stop agent when the call is disconnected. + if ((!mCalls.Length() && !mGroup->CallsArray().Length()) && + mIsAudioStartPlaying) { + mIsAudioStartPlaying = false; + rv = mAudioAgent->NotifyStoppedPlaying(mAudioAgentNotify); + mAudioAgent = nullptr; + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + } else if (!activeCall.IsNull() && !mIsAudioStartPlaying) { + mIsAudioStartPlaying = true; + float volume = 1.0; + bool muted = false; + rv = mAudioAgent->NotifyStartedPlaying(mAudioAgentNotify, &volume, &muted); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + rv = WindowVolumeChanged(volume, muted); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + } + return NS_OK; +} + bool Telephony::GetMuted(ErrorResult& aRv) const { bool muted = false; aRv = mService->GetMicrophoneMuted(&muted); return muted; } @@ -586,31 +648,97 @@ Telephony::GetReady(ErrorResult& aRv) co aRv.Throw(NS_ERROR_UNEXPECTED); return nullptr; } nsRefPtr<Promise> promise = mReadyPromise; return promise.forget(); } +// nsIAudioChannelAgentCallback + +NS_IMETHODIMP +Telephony::WindowVolumeChanged(float aVolume, bool aMuted) +{ + // Check the limitation of the network connection + if (mCalls.Length() > 1 || + (mCalls.Length() == 1 && mGroup->CallsArray().Length())) { + return NS_ERROR_FAILURE; + } + + ErrorResult rv; + nsCOMPtr<nsIGlobalObject> global = do_QueryInterface(GetOwner()); + nsRefPtr<Promise> promise = Promise::Create(global, rv); + if (NS_WARN_IF(rv.Failed())) { + return rv.StealNSResult(); + } + + // Check the single call or conference call + bool isSingleCall = mCalls.Length(); + nsCOMPtr<nsITelephonyCallback> callback = new TelephonyCallback(promise); + if (isSingleCall) { + rv = aMuted ? mCalls[0]->Hold(callback) : mCalls[0]->Resume(callback); + } else { + rv = aMuted ? mGroup->Hold(callback) : mGroup->Resume(callback); + } + if (NS_WARN_IF(rv.Failed())) { + return rv.StealNSResult(); + } + + // These events will be triggered when the telephony is interrupted by other + // audio channel. + if (mMuted != aMuted) { + mMuted = aMuted; + // We should not dispatch "mozinterruptend" when the system app initializes + // the telephony audio from muted to unmuted at the first time. The event + // "mozinterruptend" must be dispatched after the "mozinterruptbegin". + if (!mHaveDispatchedInterruptBeginEvent && mMuted) { + DispatchTrustedEvent(NS_LITERAL_STRING("mozinterruptbegin")); + mHaveDispatchedInterruptBeginEvent = mMuted; + } else if (mHaveDispatchedInterruptBeginEvent && !mMuted) { + DispatchTrustedEvent(NS_LITERAL_STRING("mozinterruptend")); + mHaveDispatchedInterruptBeginEvent = mMuted; + } + } + + return NS_OK; +} + +NS_IMETHODIMP +Telephony::WindowAudioCaptureChanged() +{ + // Do nothing + return NS_OK; +} + // nsITelephonyListener NS_IMETHODIMP Telephony::CallStateChanged(uint32_t aLength, nsITelephonyCallInfo** aAllInfo) { + nsresult rv; for (uint32_t i = 0; i < aLength; ++i) { - HandleCallInfo(aAllInfo[i]); + rv = HandleCallInfo(aAllInfo[i]); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + } + + rv = HandleAudioAgentState(); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; } return NS_OK; } NS_IMETHODIMP Telephony::EnumerateCallState(nsITelephonyCallInfo* aInfo) { - return HandleCallInfo(aInfo); + uint32_t currentCallNum = 1; + return CallStateChanged(currentCallNum, &aInfo); } NS_IMETHODIMP Telephony::ConferenceCallStateChanged(uint16_t aCallState) { mGroup->ChangeState(aCallState); return NS_OK; }
--- a/dom/telephony/Telephony.h +++ b/dom/telephony/Telephony.h @@ -6,16 +6,17 @@ #ifndef mozilla_dom_telephony_telephony_h__ #define mozilla_dom_telephony_telephony_h__ #include "mozilla/dom/BindingDeclarations.h" #include "mozilla/dom/Promise.h" #include "mozilla/dom/telephony/TelephonyCommon.h" +#include "nsIAudioChannelAgent.h" #include "nsITelephonyCallInfo.h" #include "nsITelephonyService.h" // Need to include TelephonyCall.h because we have inline methods that // assume they see the definition of TelephonyCall. #include "TelephonyCall.h" class nsPIDOMWindow; @@ -26,41 +27,51 @@ namespace telephony { class TelephonyDialCallback; } // namespace telephony class OwningTelephonyCallOrTelephonyCallGroup; class Telephony final : public DOMEventTargetHelper, + public nsIAudioChannelAgentCallback, private nsITelephonyListener { /** * Class Telephony doesn't actually expose nsITelephonyListener. * Instead, it owns an nsITelephonyListener derived instance mListener * and passes it to nsITelephonyService. The onreceived events are first * delivered to mListener and then forwarded to its owner, Telephony. See * also bug 775997 comment #51. */ class Listener; friend class telephony::TelephonyDialCallback; + // The audio agent is needed to communicate with the audio channel service. + nsCOMPtr<nsIAudioChannelAgent> mAudioAgent; nsCOMPtr<nsITelephonyService> mService; nsRefPtr<Listener> mListener; nsTArray<nsRefPtr<TelephonyCall> > mCalls; nsRefPtr<CallsList> mCallsList; nsRefPtr<TelephonyCallGroup> mGroup; nsRefPtr<Promise> mReadyPromise; + bool mIsAudioStartPlaying; + + uint32_t mAudioAgentNotify; + bool mHaveDispatchedInterruptBeginEvent; + bool mMuted; + public: NS_DECL_ISUPPORTS_INHERITED + NS_DECL_NSIAUDIOCHANNELAGENTCALLBACK NS_DECL_NSITELEPHONYLISTENER NS_REALLY_FORWARD_NSIDOMEVENTTARGET(DOMEventTargetHelper) NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(Telephony, DOMEventTargetHelper) nsPIDOMWindow* GetParentObject() const { @@ -89,16 +100,25 @@ public: void StartTone(const nsAString& aDTMFChar, const Optional<uint32_t>& aServiceId, ErrorResult& aRv); void StopTone(const Optional<uint32_t>& aServiceId, ErrorResult& aRv); + // In the audio channel architecture, the system app needs to know the state + // of every audio channel, including the telephony. Therefore, when a + // telephony call is activated , the audio channel service would notify the + // system app about that. And we need a agent to communicate with the audio + // channel service. We would follow the call states to make a correct + // notification. + void + OwnAudioChannel(ErrorResult& aRv); + bool GetMuted(ErrorResult& aRv) const; void SetMuted(bool aMuted, ErrorResult& aRv); bool GetSpeakerEnabled(ErrorResult& aRv) const; @@ -208,14 +228,18 @@ private: already_AddRefed<TelephonyCall> GetCall(uint32_t aServiceId, uint32_t aCallIndex); already_AddRefed<TelephonyCall> GetCallFromEverywhere(uint32_t aServiceId, uint32_t aCallIndex); nsresult HandleCallInfo(nsITelephonyCallInfo* aInfo); + + // Check the call states to decide whether need to send the notificaiton. + nsresult + HandleAudioAgentState(); }; } // namespace dom } // namespace mozilla #endif // mozilla_dom_telephony_telephony_h__
--- a/dom/telephony/TelephonyCall.cpp +++ b/dom/telephony/TelephonyCall.cpp @@ -319,74 +319,99 @@ TelephonyCall::HangUp(ErrorResult& aRv) already_AddRefed<Promise> TelephonyCall::Hold(ErrorResult& aRv) { nsRefPtr<Promise> promise = CreatePromise(aRv); if (!promise) { return nullptr; } - if (mCallState != nsITelephonyService::CALL_STATE_CONNECTED) { - NS_WARNING(nsPrintfCString("Hold non-connected call is rejected!" - " (State: %u)", mCallState).get()); - promise->MaybeReject(NS_ERROR_DOM_INVALID_STATE_ERR); - return promise.forget(); - } - - if (mGroup) { - NS_WARNING("Hold a call in conference is rejected!"); - promise->MaybeReject(NS_ERROR_DOM_INVALID_STATE_ERR); - return promise.forget(); - } - - if (!mSwitchable) { - NS_WARNING("Hold a non-switchable call is rejected!"); - promise->MaybeReject(NS_ERROR_DOM_INVALID_STATE_ERR); - return promise.forget(); - } - nsCOMPtr<nsITelephonyCallback> callback = new TelephonyCallback(promise); - aRv = mTelephony->Service()->HoldCall(mServiceId, mCallIndex, callback); - NS_ENSURE_TRUE(!aRv.Failed(), nullptr); - - if (mSecondId) { - // No state transition when we switch two numbers within one TelephonyCall - // object. Otherwise, the state here will be inconsistent with the backend - // RIL and will never be right. - return promise.forget(); + aRv = Hold(callback); + if (NS_WARN_IF(aRv.Failed())) { + return nullptr; } return promise.forget(); } already_AddRefed<Promise> TelephonyCall::Resume(ErrorResult& aRv) { nsRefPtr<Promise> promise = CreatePromise(aRv); if (!promise) { return nullptr; } - if (mCallState != nsITelephonyService::CALL_STATE_HELD) { - NS_WARNING(nsPrintfCString("Resume non-held call is rejected!" + nsCOMPtr<nsITelephonyCallback> callback = new TelephonyCallback(promise); + aRv = Resume(callback); + if (NS_WARN_IF(aRv.Failed())) { + return nullptr; + } + + return promise.forget(); +} + +nsresult +TelephonyCall::Hold(nsITelephonyCallback* aCallback) +{ + if (mCallState != nsITelephonyService::CALL_STATE_CONNECTED) { + NS_WARNING(nsPrintfCString("Hold non-connected call is rejected!" " (State: %u)", mCallState).get()); - promise->MaybeReject(NS_ERROR_DOM_INVALID_STATE_ERR); - return promise.forget(); + aCallback->NotifyError(NS_LITERAL_STRING("InvalidStateError")); + return NS_ERROR_DOM_INVALID_STATE_ERR; + } + + if (mGroup) { + NS_WARNING("Hold a call in conference is rejected!"); + aCallback->NotifyError(NS_LITERAL_STRING("InvalidStateError")); + return NS_ERROR_DOM_INVALID_STATE_ERR; + } + + if (!mSwitchable) { + NS_WARNING("Hold a non-switchable call is rejected!"); + aCallback->NotifyError(NS_LITERAL_STRING("InvalidStateError")); + return NS_ERROR_DOM_INVALID_STATE_ERR; + } + + nsresult rv = mTelephony->Service()->HoldCall(mServiceId, mCallIndex, aCallback); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + + if (mSecondId) { + // No state transition when we switch two numbers within one TelephonyCall + // object. Otherwise, the state here will be inconsistent with the backend + // RIL and will never be right. + return NS_OK; + } + + return NS_OK; +} + +nsresult +TelephonyCall::Resume(nsITelephonyCallback* aCallback) +{ + if (mCallState != nsITelephonyService::CALL_STATE_HELD) { + NS_WARNING("Resume non-held call is rejected!"); + aCallback->NotifyError(NS_LITERAL_STRING("InvalidStateError")); + return NS_ERROR_DOM_INVALID_STATE_ERR; } if (mGroup) { NS_WARNING("Resume a call in conference is rejected!"); - promise->MaybeReject(NS_ERROR_DOM_INVALID_STATE_ERR); - return promise.forget(); + aCallback->NotifyError(NS_LITERAL_STRING("InvalidStateError")); + return NS_ERROR_DOM_INVALID_STATE_ERR; } if (!mSwitchable) { NS_WARNING("Resume a non-switchable call is rejected!"); - promise->MaybeReject(NS_ERROR_DOM_INVALID_STATE_ERR); - return promise.forget(); + aCallback->NotifyError(NS_LITERAL_STRING("InvalidStateError")); + return NS_ERROR_DOM_INVALID_STATE_ERR; } - nsCOMPtr<nsITelephonyCallback> callback = new TelephonyCallback(promise); - aRv = mTelephony->Service()->ResumeCall(mServiceId, mCallIndex, callback); - NS_ENSURE_TRUE(!aRv.Failed(), nullptr); + nsresult rv = mTelephony->Service()->ResumeCall(mServiceId, mCallIndex, aCallback); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } - return promise.forget(); -} + return NS_OK; +} \ No newline at end of file
--- a/dom/telephony/TelephonyCall.h +++ b/dom/telephony/TelephonyCall.h @@ -7,16 +7,17 @@ #ifndef mozilla_dom_telephony_telephonycall_h__ #define mozilla_dom_telephony_telephonycall_h__ #include "mozilla/dom/DOMError.h" #include "mozilla/dom/Promise.h" #include "mozilla/dom/TelephonyCallBinding.h" #include "mozilla/dom/TelephonyCallId.h" #include "mozilla/dom/telephony/TelephonyCommon.h" +#include "nsITelephonyService.h" class nsPIDOMWindow; namespace mozilla { namespace dom { class TelephonyCall final : public DOMEventTargetHelper { @@ -180,16 +181,22 @@ public: void ChangeGroup(TelephonyCallGroup* aGroup); private: explicit TelephonyCall(nsPIDOMWindow* aOwner); ~TelephonyCall(); + nsresult + Hold(nsITelephonyCallback* aCallback); + + nsresult + Resume(nsITelephonyCallback* aCallback); + void ChangeStateInternal(uint16_t aCallState, bool aFireEvents); nsresult DispatchCallEvent(const nsAString& aType, TelephonyCall* aCall); already_AddRefed<Promise>
--- a/dom/telephony/TelephonyCallGroup.cpp +++ b/dom/telephony/TelephonyCallGroup.cpp @@ -342,43 +342,71 @@ TelephonyCallGroup::Hold(ErrorResult& aR { MOZ_ASSERT(!mCalls.IsEmpty()); nsRefPtr<Promise> promise = CreatePromise(aRv); if (!promise) { return nullptr; } - if (mCallState != nsITelephonyService::CALL_STATE_CONNECTED) { - NS_WARNING("Holding a non-connected call is rejected!"); - promise->MaybeReject(NS_ERROR_DOM_INVALID_STATE_ERR); - return promise.forget(); + nsCOMPtr<nsITelephonyCallback> callback = new TelephonyCallback(promise); + aRv = Hold(callback); + if (NS_WARN_IF(aRv.Failed())) { + return nullptr; } - nsCOMPtr<nsITelephonyCallback> callback = new TelephonyCallback(promise); - aRv = mTelephony->Service()->HoldConference(mCalls[0]->ServiceId(), - callback); - NS_ENSURE_TRUE(!aRv.Failed(), nullptr); return promise.forget(); } already_AddRefed<Promise> TelephonyCallGroup::Resume(ErrorResult& aRv) { MOZ_ASSERT(!mCalls.IsEmpty()); nsRefPtr<Promise> promise = CreatePromise(aRv); if (!promise) { return nullptr; } - if (mCallState != nsITelephonyService::CALL_STATE_HELD) { - NS_WARNING("Resuming a non-held call is rejected!"); - promise->MaybeReject(NS_ERROR_DOM_INVALID_STATE_ERR); - return promise.forget(); + nsCOMPtr<nsITelephonyCallback> callback = new TelephonyCallback(promise); + aRv = Resume(callback); + if (NS_WARN_IF(aRv.Failed())) { + return nullptr; + } + + return promise.forget(); +} + +nsresult +TelephonyCallGroup::Hold(nsITelephonyCallback* aCallback) +{ + if (mCallState != nsITelephonyService::CALL_STATE_CONNECTED) { + NS_WARNING("Holding a non-connected call is rejected!"); + aCallback->NotifyError(NS_LITERAL_STRING("InvalidStateError")); + return NS_ERROR_DOM_INVALID_STATE_ERR; } - nsCOMPtr<nsITelephonyCallback> callback = new TelephonyCallback(promise); - aRv = mTelephony->Service()->ResumeConference(mCalls[0]->ServiceId(), - callback); - NS_ENSURE_TRUE(!aRv.Failed(), nullptr); - return promise.forget(); + nsresult rv = mTelephony->Service()->HoldConference(mCalls[0]->ServiceId(), + aCallback); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + + return NS_OK; } + +nsresult +TelephonyCallGroup::Resume(nsITelephonyCallback* aCallback) +{ + if (mCallState != nsITelephonyService::CALL_STATE_HELD) { + NS_WARNING("Resuming a non-held call is rejected!"); + aCallback->NotifyError(NS_LITERAL_STRING("InvalidStateError")); + return NS_ERROR_DOM_INVALID_STATE_ERR; + } + + nsresult rv = mTelephony->Service()->ResumeConference(mCalls[0]->ServiceId(), + aCallback); + if (NS_WARN_IF(NS_FAILED(rv))) { + return rv; + } + + return NS_OK; +}
--- a/dom/telephony/TelephonyCallGroup.h +++ b/dom/telephony/TelephonyCallGroup.h @@ -25,16 +25,18 @@ class TelephonyCallGroup final : public uint16_t mCallState; public: NS_DECL_ISUPPORTS_INHERITED NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(TelephonyCallGroup, DOMEventTargetHelper) + friend class Telephony; + nsPIDOMWindow* GetParentObject() const { return GetOwner(); } // WrapperCache virtual JSObject* @@ -104,16 +106,22 @@ public: nsresult NotifyError(const nsAString& aName, const nsAString& aMessage); private: explicit TelephonyCallGroup(nsPIDOMWindow* aOwner); ~TelephonyCallGroup(); nsresult + Hold(nsITelephonyCallback* aCallback); + + nsresult + Resume(nsITelephonyCallback* aCallback); + + nsresult NotifyCallsChanged(TelephonyCall* aCall); nsresult DispatchCallEvent(const nsAString& aType, TelephonyCall* aCall); already_AddRefed<Promise> CreatePromise(ErrorResult& aRv);
--- a/dom/webidl/Telephony.webidl +++ b/dom/webidl/Telephony.webidl @@ -44,16 +44,22 @@ interface Telephony : EventTarget { Promise<void> sendTones(DOMString tones, optional unsigned long pauseDuration = 3000, optional unsigned long toneDuration = 70, optional unsigned long serviceId); [Throws] void startTone(DOMString tone, optional unsigned long serviceId); [Throws] void stopTone(optional unsigned long serviceId); + // Calling this method, the app will be treated as owner of the telephony + // calls from the AudioChannel policy. + [Throws, + CheckAllPermissions="audio-channel-telephony"] + void ownAudioChannel(); + [Throws] attribute boolean muted; [Throws] attribute boolean speakerEnabled; readonly attribute (TelephonyCall or TelephonyCallGroup)? active;
--- a/testing/taskcluster/tasks/builds/b2g_desktop_debug.yml +++ b/testing/taskcluster/tasks/builds/b2g_desktop_debug.yml @@ -1,20 +1,20 @@ $inherits: from: 'tasks/builds/b2g_desktop_base.yml' variables: build_name: 'b2g-desktop' build_type: 'debug' task: scopes: - - 'docker-worker:cache:workspace-b2g-desktop-objects-debug' + - 'docker-worker:cache:workspace-{{project}}-b2g-desktop-objects-debug' workerType: b2g-desktop-debug extra: treeherder: collection: debug: true payload: cache: - workspace-b2g-desktop-objects-debug: '/home/worker/workspace' + workspace-{{project}}-b2g-desktop-objects-debug: '/home/worker/workspace' env: MOZCONFIG: 'b2g/config/mozconfigs/linux64_gecko/debug'
--- a/testing/taskcluster/tasks/builds/b2g_desktop_opt.yml +++ b/testing/taskcluster/tasks/builds/b2g_desktop_opt.yml @@ -1,19 +1,19 @@ $inherits: from: 'tasks/builds/b2g_desktop_base.yml' variables: build_name: 'b2g-desktop' build_type: 'opt' task: scopes: - - 'docker-worker:cache:workspace-b2g-desktop-objects-opt' + - 'docker-worker:cache:workspace-{{project}}-b2g-desktop-objects-opt' routes: - 'index.buildbot.branches.{{project}}.linux64_gecko' - 'index.buildbot.revisions.{{head_rev}}.{{project}}.linux64_gecko' workerType: b2g-desktop-opt payload: cache: - workspace-b2g-desktop-objects-opt: '/home/worker/workspace' + workspace-{{project}}-b2g-desktop-objects-opt: '/home/worker/workspace' env: MOZCONFIG: 'b2g/config/mozconfigs/linux64_gecko/nightly'
--- a/testing/taskcluster/tasks/builds/b2g_emulator_x86_base.yml +++ b/testing/taskcluster/tasks/builds/b2g_emulator_x86_base.yml @@ -16,18 +16,16 @@ task: - /bin/bash - -c - > checkout-gecko workspace && cd ./workspace/gecko/testing/taskcluster/scripts/builder && buildbot_step 'Build' ./build-emulator-x86.sh $HOME/workspace extra: - treeherder: - groupSymbol: x86 # Rather then enforcing particular conventions we require that all build # tasks provide the "build" extra field to specify where the build and tests # files are located. locations: build: 'public/build/emulator.tar.gz' tests: 'public/build/b2g-tests.zip' symbols: 'public/build/b2g-crashreporter-symbols.zip' sources: 'public/build/sources.xml'
--- a/testing/taskcluster/tasks/builds/b2g_emulator_x86_kk_opt.yml +++ b/testing/taskcluster/tasks/builds/b2g_emulator_x86_kk_opt.yml @@ -1,25 +1,26 @@ $inherits: from: 'tasks/builds/b2g_emulator_x86_base.yml' variables: build_name: 'emulator-x86-kk' build_type: 'opt' task: - workerType: emualtor-x86-kk + workerType: emulator-x86-kk scopes: - 'docker-worker:cache:workspace-emulator-kk-x86-opt' metadata: name: '[TC] B2G KK X86 Emulator (Opt)' extra: treeherderEnv: - staging treeherder: # Disable "TC" prefix... + groupSymbol: "?" machine: - platform: b2g-emu-kk + platform: b2g-emu-x86-kk payload: cache: workspace-emulator-kk-x86-opt: /home/worker/workspace env: TARGET: 'emulator-x86-kk'
--- a/testing/taskcluster/tasks/builds/mulet_linux.yml +++ b/testing/taskcluster/tasks/builds/mulet_linux.yml @@ -10,23 +10,23 @@ task: workerType: mulet-opt routes: - 'index.buildbot.branches.{{project}}.linux64-mulet' - 'index.buildbot.revisions.{{head_rev}}.{{project}}.linux64-mulet' scopes: - - 'docker-worker:cache:build-mulet-linux-workspace' + - 'docker-worker:cache:build-mulet-linux-{{project}}-workspace' - 'docker-worker:cache:tooltool-cache' - 'docker-worker:relengapi-proxy:tooltool.download.public' payload: cache: - build-mulet-linux-workspace: '/home/worker/workspace' + build-mulet-linux-{{project}}-workspace: '/home/worker/workspace' tooltool-cache: '/home/worker/tools/tooltool-cache' features: relengAPIProxy: true env: MOZCONFIG: 'b2g/dev/config/mozconfigs/linux64/mulet' TOOLTOOL_MANIFEST: 'b2g/dev/config/tooltool-manifests/linux64/releng.manifest'