Merge m-c to fx-team.
Merge m-c to fx-team.
--- a/b2g/app/b2g.js
+++ b/b2g/app/b2g.js
@@ -571,17 +571,17 @@ pref("device.storage.enabled", true);
// Enable pre-installed applications
pref("dom.webapps.useCurrentProfile", true);
// Enable system message
pref("dom.sysmsg.enabled", true);
pref("media.plugins.enabled", false);
pref("media.omx.enabled", true);
pref("media.rtsp.enabled", true);
-pref("media.rtsp.video.enabled", true);
+pref("media.rtsp.video.enabled", false);
// Disable printing (particularly, window.print())
pref("dom.disable_window_print", true);
// Disable window.showModalDialog
pref("dom.disable_window_showModalDialog", true);
// Enable new experimental html forms
--- 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="1ad48c4be51b279f7f63c1a13025b52fe087d231">
<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="d68074a17d9510623ae4dd3b9f50902af2b36dab"/>
+ <project name="gaia.git" path="gaia" remote="mozillaorg" revision="98cf46d6623b164845fe1fdc99a2a7bf64aa667d"/>
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="d11f524d00cacf5ba0dfbf25e4aa2158b1c3a036"/>
<project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="456499c44d1ef39b602ea02e9ed460b6aab85b44"/>
<project name="moztt" path="external/moztt" remote="b2g" revision="3d5c964015967ca8c86abe6dbbebee3cb82b1609"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="b2f773d8320d30648b89767dfe5b25ef94bc7e62"/>
<!-- Stock Android things -->
<project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
@@ -97,12 +97,12 @@
<project name="platform/system/netd" path="system/netd" revision="3d298fde142bee3fc4f07f63f16f2d8ce42339c0"/>
<project name="platform/system/vold" path="system/vold" revision="919829940468066a32f403980b43f6ebfee5d314"/>
<!-- Emulator specific things -->
<project name="android-development" path="development" remote="b2g" revision="9abf0ab68376afae3e1c7beefa3e9cbee2fde202"/>
<project name="device_generic_goldfish" path="device/generic/goldfish" remote="b2g" revision="e7e8734fdd8bf41e48a56c1c85e0f7dac60aaa9f"/>
<project name="platform/external/iproute2" path="external/iproute2" revision="c66c5716d5335e450f7a7b71ccc6a604fb2f41d2"/>
<project name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="d2685281e2e54ca14d1df304867aa82c37b27162"/>
<project name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="627f9b20fc518937b93747a7ff1ed4f5ed46e06f"/>
- <project name="platform/prebuilts/tools" path="prebuilts/tools" revision="c16df012d9649be75d6590f93aeacbdc24b29d53"/>
+ <project name="platform/prebuilts/tools" path="prebuilts/tools" revision="97e75ff503cd285872d2ea3468edf2894e008244"/>
<project name="platform_prebuilts_qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="431afac2ebfdd9c1c8402b413ff5914ed448e961"/>
<project name="android-sdk" path="sdk" remote="b2g" revision="4f46930827957afbce500a4a920755a218bf3155"/>
</manifest>
--- 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="97a5b461686757dbb8ecab2aac5903e41d2e1afe">
<copyfile dest="Makefile" src="core/root.mk"/>
</project>
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
- <project name="gaia" path="gaia" remote="mozillaorg" revision="d68074a17d9510623ae4dd3b9f50902af2b36dab"/>
+ <project name="gaia" path="gaia" remote="mozillaorg" revision="98cf46d6623b164845fe1fdc99a2a7bf64aa667d"/>
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
<project name="moztt" path="external/moztt" remote="b2g" revision="3d5c964015967ca8c86abe6dbbebee3cb82b1609"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="b2f773d8320d30648b89767dfe5b25ef94bc7e62"/>
<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/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="1ad48c4be51b279f7f63c1a13025b52fe087d231">
<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="d68074a17d9510623ae4dd3b9f50902af2b36dab"/>
+ <project name="gaia.git" path="gaia" remote="mozillaorg" revision="98cf46d6623b164845fe1fdc99a2a7bf64aa667d"/>
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="d11f524d00cacf5ba0dfbf25e4aa2158b1c3a036"/>
<project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="456499c44d1ef39b602ea02e9ed460b6aab85b44"/>
<project name="moztt" path="external/moztt" remote="b2g" revision="3d5c964015967ca8c86abe6dbbebee3cb82b1609"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="b2f773d8320d30648b89767dfe5b25ef94bc7e62"/>
<!-- Stock Android things -->
<project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/>
@@ -97,12 +97,12 @@
<project name="platform/system/netd" path="system/netd" revision="3d298fde142bee3fc4f07f63f16f2d8ce42339c0"/>
<project name="platform/system/vold" path="system/vold" revision="919829940468066a32f403980b43f6ebfee5d314"/>
<!-- Emulator specific things -->
<project name="android-development" path="development" remote="b2g" revision="9abf0ab68376afae3e1c7beefa3e9cbee2fde202"/>
<project name="device_generic_goldfish" path="device/generic/goldfish" remote="b2g" revision="e7e8734fdd8bf41e48a56c1c85e0f7dac60aaa9f"/>
<project name="platform/external/iproute2" path="external/iproute2" revision="c66c5716d5335e450f7a7b71ccc6a604fb2f41d2"/>
<project name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="d2685281e2e54ca14d1df304867aa82c37b27162"/>
<project name="platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.7-4.6" revision="627f9b20fc518937b93747a7ff1ed4f5ed46e06f"/>
- <project name="platform/prebuilts/tools" path="prebuilts/tools" revision="c16df012d9649be75d6590f93aeacbdc24b29d53"/>
+ <project name="platform/prebuilts/tools" path="prebuilts/tools" revision="97e75ff503cd285872d2ea3468edf2894e008244"/>
<project name="platform_prebuilts_qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="431afac2ebfdd9c1c8402b413ff5914ed448e961"/>
<project name="android-sdk" path="sdk" remote="b2g" revision="4f46930827957afbce500a4a920755a218bf3155"/>
</manifest>
--- a/b2g/config/gaia.json
+++ b/b2g/config/gaia.json
@@ -1,9 +1,9 @@
{
"git": {
"remote": "",
"branch": "",
"revision": ""
},
- "revision": "67e75b4310bc04e26b0e065aa16b71a21b456705",
+ "revision": "f8c197a1270817c6482fe6859fbf0e9dc7510861",
"repo_path": "/integration/gaia-central"
}
--- a/b2g/config/hamachi/sources.xml
+++ b/b2g/config/hamachi/sources.xml
@@ -12,17 +12,17 @@
<!--original fetch url was git://github.com/apitrace/-->
<remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
<default remote="caf" revision="b2g/ics_strawberry" sync-j="4"/>
<!-- Gonk specific things and forks -->
<project name="platform_build" path="build" remote="b2g" revision="1ad48c4be51b279f7f63c1a13025b52fe087d231">
<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="d68074a17d9510623ae4dd3b9f50902af2b36dab"/>
+ <project name="gaia.git" path="gaia" remote="mozillaorg" revision="98cf46d6623b164845fe1fdc99a2a7bf64aa667d"/>
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
<project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
<project name="moztt" path="external/moztt" remote="b2g" revision="3d5c964015967ca8c86abe6dbbebee3cb82b1609"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="b2f773d8320d30648b89767dfe5b25ef94bc7e62"/>
<!-- Stock Android things -->
<project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
<project name="platform/bionic" path="bionic" revision="d2eb6c7b6e1bc7643c17df2d9d9bcb1704d0b9ab"/>
--- a/b2g/config/helix/sources.xml
+++ b/b2g/config/helix/sources.xml
@@ -10,17 +10,17 @@
<!--original fetch url was https://git.mozilla.org/releases-->
<remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/>
<default remote="caf" revision="b2g/ics_strawberry" sync-j="4"/>
<!-- Gonk specific things and forks -->
<project name="platform_build" path="build" remote="b2g" revision="1ad48c4be51b279f7f63c1a13025b52fe087d231">
<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="d68074a17d9510623ae4dd3b9f50902af2b36dab"/>
+ <project name="gaia.git" path="gaia" remote="mozillaorg" revision="98cf46d6623b164845fe1fdc99a2a7bf64aa667d"/>
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
<project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
<project name="moztt" path="external/moztt" remote="b2g" revision="3d5c964015967ca8c86abe6dbbebee3cb82b1609"/>
<project name="gonk-patches" path="patches" remote="b2g" revision="223a2421006e8f5da33f516f6891c87cae86b0f6"/>
<!-- Stock Android things -->
<project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
<project name="platform/bionic" path="bionic" revision="d2eb6c7b6e1bc7643c17df2d9d9bcb1704d0b9ab"/>
--- a/b2g/config/inari/sources.xml
+++ b/b2g/config/inari/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="ics_chocolate_rb4.2" sync-j="4"/>
<!-- Gonk specific things and forks -->
<project name="platform_build" path="build" remote="b2g" revision="1ad48c4be51b279f7f63c1a13025b52fe087d231">
<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="d68074a17d9510623ae4dd3b9f50902af2b36dab"/>
+ <project name="gaia.git" path="gaia" remote="mozillaorg" revision="98cf46d6623b164845fe1fdc99a2a7bf64aa667d"/>
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
<project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
<project name="moztt" path="external/moztt" remote="b2g" revision="3d5c964015967ca8c86abe6dbbebee3cb82b1609"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="b2f773d8320d30648b89767dfe5b25ef94bc7e62"/>
<!-- Stock Android things -->
<project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
<project name="platform/bionic" path="bionic" revision="cd5dfce80bc3f0139a56b58aca633202ccaee7f8"/>
--- a/b2g/config/leo/sources.xml
+++ b/b2g/config/leo/sources.xml
@@ -12,17 +12,17 @@
<!--original fetch url was git://github.com/apitrace/-->
<remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
<default remote="caf" revision="b2g/ics_strawberry" sync-j="4"/>
<!-- Gonk specific things and forks -->
<project name="platform_build" path="build" remote="b2g" revision="1ad48c4be51b279f7f63c1a13025b52fe087d231">
<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="d68074a17d9510623ae4dd3b9f50902af2b36dab"/>
+ <project name="gaia.git" path="gaia" remote="mozillaorg" revision="98cf46d6623b164845fe1fdc99a2a7bf64aa667d"/>
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
<project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
<project name="moztt" path="external/moztt" remote="b2g" revision="3d5c964015967ca8c86abe6dbbebee3cb82b1609"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="b2f773d8320d30648b89767dfe5b25ef94bc7e62"/>
<project name="gonk-patches" path="patches" remote="b2g" revision="223a2421006e8f5da33f516f6891c87cae86b0f6"/>
<!-- Stock Android things -->
<project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
--- a/b2g/config/mako/sources.xml
+++ b/b2g/config/mako/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="97a5b461686757dbb8ecab2aac5903e41d2e1afe">
<copyfile dest="Makefile" src="core/root.mk"/>
</project>
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
- <project name="gaia" path="gaia" remote="mozillaorg" revision="d68074a17d9510623ae4dd3b9f50902af2b36dab"/>
+ <project name="gaia" path="gaia" remote="mozillaorg" revision="98cf46d6623b164845fe1fdc99a2a7bf64aa667d"/>
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
<project name="moztt" path="external/moztt" remote="b2g" revision="3d5c964015967ca8c86abe6dbbebee3cb82b1609"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="b2f773d8320d30648b89767dfe5b25ef94bc7e62"/>
<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/wasabi/sources.xml
+++ b/b2g/config/wasabi/sources.xml
@@ -12,17 +12,17 @@
<!--original fetch url was git://github.com/apitrace/-->
<remote fetch="https://git.mozilla.org/external/apitrace" name="apitrace"/>
<default remote="caf" revision="ics_chocolate_rb4.2" sync-j="4"/>
<!-- Gonk specific things and forks -->
<project name="platform_build" path="build" remote="b2g" revision="1ad48c4be51b279f7f63c1a13025b52fe087d231">
<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="d68074a17d9510623ae4dd3b9f50902af2b36dab"/>
+ <project name="gaia.git" path="gaia" remote="mozillaorg" revision="98cf46d6623b164845fe1fdc99a2a7bf64aa667d"/>
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="15e8982284c4560f9c74c2b9fe8bb361ebfe0cb6"/>
<project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/>
<project name="librecovery" path="librecovery" remote="b2g" revision="1f6a1fe07f81c5bc5e1d079c9b60f7f78ca2bf4f"/>
<project name="moztt" path="external/moztt" remote="b2g" revision="3d5c964015967ca8c86abe6dbbebee3cb82b1609"/>
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="b2f773d8320d30648b89767dfe5b25ef94bc7e62"/>
<project name="gonk-patches" path="patches" remote="b2g" revision="223a2421006e8f5da33f516f6891c87cae86b0f6"/>
<!-- Stock Android things -->
<project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/>
--- a/dom/bluetooth/BluetoothHidManager.cpp
+++ b/dom/bluetooth/BluetoothHidManager.cpp
@@ -114,95 +114,95 @@ BluetoothHidManager::Connect(const nsASt
BluetoothProfileController* aController)
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(!aDeviceAddress.IsEmpty());
MOZ_ASSERT(aController && !mController);
BluetoothService* bs = BluetoothService::Get();
if (!bs || sInShutdown) {
- aController->OnConnect(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
return;
}
if (mConnected) {
- aController->OnConnect(NS_LITERAL_STRING(ERR_ALREADY_CONNECTED));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_ALREADY_CONNECTED));
return;
}
mDeviceAddress = aDeviceAddress;
mController = aController;
if (NS_FAILED(bs->SendInputMessage(aDeviceAddress,
NS_LITERAL_STRING("Connect")))) {
- aController->OnConnect(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
return;
}
}
void
BluetoothHidManager::Disconnect(BluetoothProfileController* aController)
{
MOZ_ASSERT(NS_IsMainThread());
BluetoothService* bs = BluetoothService::Get();
if (!bs) {
if (aController) {
- aController->OnDisconnect(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
}
return;
}
if (!mConnected) {
if (aController) {
- aController->OnDisconnect(NS_LITERAL_STRING(ERR_ALREADY_DISCONNECTED));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_ALREADY_DISCONNECTED));
}
return;
}
MOZ_ASSERT(!mDeviceAddress.IsEmpty());
MOZ_ASSERT(!mController);
mController = aController;
if (NS_FAILED(bs->SendInputMessage(mDeviceAddress,
NS_LITERAL_STRING("Disconnect")))) {
- aController->OnDisconnect(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
return;
}
}
void
BluetoothHidManager::OnConnect(const nsAString& aErrorStr)
{
MOZ_ASSERT(NS_IsMainThread());
/**
* On the one hand, notify the controller that we've done for outbound
* connections. On the other hand, we do nothing for inbound connections.
*/
NS_ENSURE_TRUE_VOID(mController);
nsRefPtr<BluetoothProfileController> controller = mController.forget();
- controller->OnConnect(aErrorStr);
+ controller->NotifyCompletion(aErrorStr);
}
void
BluetoothHidManager::OnDisconnect(const nsAString& aErrorStr)
{
MOZ_ASSERT(NS_IsMainThread());
/**
* On the one hand, notify the controller that we've done for outbound
* connections. On the other hand, we do nothing for inbound connections.
*/
NS_ENSURE_TRUE_VOID(mController);
nsRefPtr<BluetoothProfileController> controller = mController.forget();
- controller->OnDisconnect(aErrorStr);
+ controller->NotifyCompletion(aErrorStr);
}
bool
BluetoothHidManager::IsConnected()
{
return mConnected;
}
--- a/dom/bluetooth/BluetoothProfileController.cpp
+++ b/dom/bluetooth/BluetoothProfileController.cpp
@@ -206,126 +206,109 @@ CheckProfileStatusCallback::Notify(nsITi
// Continue on the next profile since we haven't got the callback after
// timeout.
mController->GiveupAndContinue();
return NS_OK;
}
void
-BluetoothProfileController::Start()
+BluetoothProfileController::StartSession()
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(!mDeviceAddress.IsEmpty());
MOZ_ASSERT(mProfilesIndex == -1);
MOZ_ASSERT(mTimer);
- NS_ENSURE_TRUE_VOID(mProfiles.Length() > 0);
- ++mProfilesIndex;
- BT_LOGR_PROFILE(mProfiles[mProfilesIndex], "");
+ if (mProfiles.Length() < 1) {
+ BT_LOGR("No queued profile.");
+ EndSession();
+ return;
+ }
if (mTimer) {
mTimer->InitWithCallback(mCheckProfileStatusCallback, CONNECTION_TIMEOUT_MS,
nsITimer::TYPE_ONE_SHOT);
}
- if (mConnect) {
- mProfiles[mProfilesIndex]->Connect(mDeviceAddress, this);
+ BT_LOGR("%s", mConnect ? "connecting" : "disconnecting");
+
+ Next();
+}
+
+void
+BluetoothProfileController::EndSession()
+{
+ MOZ_ASSERT(mRunnable && mCallback);
+
+ BT_LOGR("mSuccess %d", mSuccess);
+
+ // The action has completed, so the DOM request should be replied then invoke
+ // the callback.
+ if (mSuccess) {
+ DispatchBluetoothReply(mRunnable, BluetoothValue(true), EmptyString());
+ } else if (mConnect) {
+ DispatchBluetoothReply(mRunnable, BluetoothValue(true),
+ NS_LITERAL_STRING(ERR_CONNECTION_FAILED));
} else {
- mProfiles[mProfilesIndex]->Disconnect(this);
+ DispatchBluetoothReply(mRunnable, BluetoothValue(true),
+ NS_LITERAL_STRING(ERR_DISCONNECTION_FAILED));
}
+
+ mCallback();
}
void
BluetoothProfileController::Next()
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(!mDeviceAddress.IsEmpty());
MOZ_ASSERT(mProfilesIndex < (int)mProfiles.Length());
MOZ_ASSERT(mTimer);
mCurrentProfileFinished = false;
- if (++mProfilesIndex < (int)mProfiles.Length()) {
- BT_LOGR_PROFILE(mProfiles[mProfilesIndex], "");
- if (mTimer) {
- mTimer->InitWithCallback(mCheckProfileStatusCallback,
- CONNECTION_TIMEOUT_MS,
- nsITimer::TYPE_ONE_SHOT);
- }
-
- if (mConnect) {
- mProfiles[mProfilesIndex]->Connect(mDeviceAddress, this);
- } else {
- mProfiles[mProfilesIndex]->Disconnect(this);
- }
+ if (++mProfilesIndex >= (int)mProfiles.Length()) {
+ EndSession();
return;
}
- MOZ_ASSERT(mRunnable && mCallback);
+ BT_LOGR_PROFILE(mProfiles[mProfilesIndex], "");
- // The action has been completed, so the dom request is replied and then
- // the callback is invoked
- if (mSuccess) {
- DispatchBluetoothReply(mRunnable, BluetoothValue(true), EmptyString());
+ if (mConnect) {
+ mProfiles[mProfilesIndex]->Connect(mDeviceAddress, this);
} else {
- DispatchBluetoothReply(mRunnable, BluetoothValue(),
- NS_LITERAL_STRING(ERR_CONNECTION_FAILED));
+ mProfiles[mProfilesIndex]->Disconnect(this);
}
- mCallback();
}
void
-BluetoothProfileController::OnConnect(const nsAString& aErrorStr)
+BluetoothProfileController::NotifyCompletion(const nsAString& aErrorStr)
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(mTimer);
+ MOZ_ASSERT(mProfiles.Length() > 0);
BT_LOGR_PROFILE(mProfiles[mProfilesIndex], "<%s>",
- NS_ConvertUTF16toUTF8(aErrorStr).get());
+ NS_ConvertUTF16toUTF8(aErrorStr).get());
mCurrentProfileFinished = true;
+
if (mTimer) {
mTimer->Cancel();
}
- if (!aErrorStr.IsEmpty()) {
- BT_WARNING(NS_ConvertUTF16toUTF8(aErrorStr).get());
- } else {
- mSuccess = true;
- }
-
- Next();
-}
-
-void
-BluetoothProfileController::OnDisconnect(const nsAString& aErrorStr)
-{
- MOZ_ASSERT(NS_IsMainThread());
- MOZ_ASSERT(mTimer);
-
- BT_LOGR_PROFILE(mProfiles[mProfilesIndex], "<%s>",
- NS_ConvertUTF16toUTF8(aErrorStr).get());
-
- mCurrentProfileFinished = true;
- if (mTimer) {
- mTimer->Cancel();
- }
-
- if (!aErrorStr.IsEmpty()) {
- BT_WARNING(NS_ConvertUTF16toUTF8(aErrorStr).get());
- } else {
- mSuccess = true;
- }
+ mSuccess |= aErrorStr.IsEmpty();
Next();
}
void
BluetoothProfileController::GiveupAndContinue()
{
MOZ_ASSERT(!mCurrentProfileFinished);
MOZ_ASSERT(mProfilesIndex < (int)mProfiles.Length());
BT_LOGR_PROFILE(mProfiles[mProfilesIndex], ERR_OPERATION_TIMEOUT);
mProfiles[mProfilesIndex]->Reset();
Next();
}
+
--- a/dom/bluetooth/BluetoothProfileController.h
+++ b/dom/bluetooth/BluetoothProfileController.h
@@ -84,29 +84,28 @@ public:
uint16_t aServiceUuid,
uint32_t aCod = 0);
~BluetoothProfileController();
/**
* The controller starts connecting/disconnecting profiles one by one
* according to the order in array mProfiles.
*/
- void Start();
+ void StartSession();
/**
- * It is invoked after a profile has tried to establish the connection.
- * An error string is returned when it fails.
+ * The original DOM request would be fired in this function.
*/
- void OnConnect(const nsAString& aErrorStr);
+ void EndSession();
/**
- * It is invoked after a profile has tried to drop the connection.
- * An error string is returned when it fails.
+ * It would be invoked after connect/disconnect operation is completed.
+ * An error string would be returned when it fails.
*/
- void OnDisconnect(const nsAString& aErrorStr);
+ void NotifyCompletion(const nsAString& aErrorStr);
/**
* It is invoked after a profile has reached timeout, reset mProfiles.
*/
void GiveupAndContinue();
private:
// Setup data member mProfiles
--- a/dom/bluetooth/bluedroid/BluetoothA2dpManager.cpp
+++ b/dom/bluetooth/bluedroid/BluetoothA2dpManager.cpp
@@ -571,96 +571,116 @@ BluetoothA2dpManager::Connect(const nsAS
BluetoothProfileController* aController)
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(!aDeviceAddress.IsEmpty());
MOZ_ASSERT(aController && !mController);
BluetoothService* bs = BluetoothService::Get();
if (!bs || sInShutdown) {
- aController->OnConnect(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
return;
}
if (mA2dpConnected) {
- aController->OnConnect(NS_LITERAL_STRING(ERR_ALREADY_CONNECTED));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_ALREADY_CONNECTED));
return;
}
mDeviceAddress = aDeviceAddress;
mController = aController;
+ if (!sBtA2dpInterface) {
+ BT_LOGR("sBluetoothA2dpInterface is null");
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
+ return;
+ }
+
bt_bdaddr_t remoteAddress;
StringToBdAddressType(aDeviceAddress, &remoteAddress);
- NS_ENSURE_TRUE_VOID(sBtA2dpInterface);
- NS_ENSURE_TRUE_VOID(BT_STATUS_SUCCESS ==
- sBtA2dpInterface->connect(&remoteAddress));
+
+ bt_status_t result = sBtA2dpInterface->connect(&remoteAddress);
+ if (BT_STATUS_SUCCESS != result) {
+ BT_LOGR("Failed to connect: %x", result);
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_CONNECTION_FAILED));
+ return;
+ }
}
void
BluetoothA2dpManager::Disconnect(BluetoothProfileController* aController)
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(!mController);
BluetoothService* bs = BluetoothService::Get();
if (!bs) {
if (aController) {
- aController->OnDisconnect(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
}
return;
}
if (!mA2dpConnected) {
if (aController) {
- aController->OnDisconnect(NS_LITERAL_STRING(ERR_ALREADY_DISCONNECTED));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_ALREADY_DISCONNECTED));
}
return;
}
MOZ_ASSERT(!mDeviceAddress.IsEmpty());
mController = aController;
+ if (!sBtA2dpInterface) {
+ BT_LOGR("sBluetoothA2dpInterface is null");
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
+ return;
+ }
+
bt_bdaddr_t remoteAddress;
StringToBdAddressType(mDeviceAddress, &remoteAddress);
- if (sBtA2dpInterface) {
- NS_ENSURE_TRUE_VOID(BT_STATUS_SUCCESS ==
- sBtA2dpInterface->disconnect(&remoteAddress));
+
+ bt_status_t result = sBtA2dpInterface->disconnect(&remoteAddress);
+ if (BT_STATUS_SUCCESS != result) {
+ BT_LOGR("Failed to disconnect: %x", result);
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_DISCONNECTION_FAILED));
+ return;
}
}
void
BluetoothA2dpManager::OnConnect(const nsAString& aErrorStr)
{
MOZ_ASSERT(NS_IsMainThread());
/**
* On the one hand, notify the controller that we've done for outbound
* connections. On the other hand, we do nothing for inbound connections.
*/
NS_ENSURE_TRUE_VOID(mController);
nsRefPtr<BluetoothProfileController> controller = mController.forget();
- controller->OnConnect(aErrorStr);
+ controller->NotifyCompletion(aErrorStr);
}
void
BluetoothA2dpManager::OnDisconnect(const nsAString& aErrorStr)
{
MOZ_ASSERT(NS_IsMainThread());
/**
* On the one hand, notify the controller that we've done for outbound
* connections. On the other hand, we do nothing for inbound connections.
*/
NS_ENSURE_TRUE_VOID(mController);
nsRefPtr<BluetoothProfileController> controller = mController.forget();
- controller->OnDisconnect(aErrorStr);
+ controller->NotifyCompletion(aErrorStr);
+
Reset();
}
/* HandleSinkPropertyChanged update sink state in A2dp
*
* Possible values: "disconnected", "connecting", "connected", "playing"
*
* 1. "disconnected" -> "connecting"
--- a/dom/bluetooth/bluedroid/BluetoothServiceBluedroid.cpp
+++ b/dom/bluetooth/bluedroid/BluetoothServiceBluedroid.cpp
@@ -50,17 +50,16 @@ static InfallibleTArray<nsString> sAdapt
static InfallibleTArray<BluetoothNamedValue> sRemoteDevicesPack;
static nsTArray<nsRefPtr<BluetoothProfileController> > sControllerArray;
static nsTArray<nsRefPtr<BluetoothReplyRunnable> > sBondingRunnableArray;
static nsTArray<nsRefPtr<BluetoothReplyRunnable> > sChangeDiscoveryRunnableArray;
static nsTArray<nsRefPtr<BluetoothReplyRunnable> > sGetDeviceRunnableArray;
static nsTArray<nsRefPtr<BluetoothReplyRunnable> > sSetPropertyRunnableArray;
static nsTArray<nsRefPtr<BluetoothReplyRunnable> > sUnbondingRunnableArray;
static nsTArray<int> sRequestedDeviceCountArray;
-static StaticAutoPtr<Monitor> sToggleBtMonitor;
/**
* Classes only used in this file
*/
class DistributeBluetoothSignalTask : public nsRunnable {
public:
DistributeBluetoothSignalTask(const BluetoothSignal& aSignal) :
mSignal(aSignal)
@@ -241,19 +240,21 @@ static void
AdapterStateChangeCallback(bt_state_t aStatus)
{
MOZ_ASSERT(!NS_IsMainThread());
BT_LOGR("BT_STATE %d", aStatus);
sIsBtEnabled = (aStatus == BT_STATE_ON);
- {
- MonitorAutoLock lock(*sToggleBtMonitor);
- lock.Notify();
+ nsRefPtr<nsRunnable> runnable =
+ new BluetoothService::ToggleBtAck(sIsBtEnabled);
+ if (NS_FAILED(NS_DispatchToMainThread(runnable))) {
+ BT_WARNING("Failed to dispatch to main thread!");
+ return;
}
if (sIsBtEnabled &&
NS_FAILED(NS_DispatchToMainThread(new SetupAfterEnabledTask()))) {
BT_WARNING("Failed to dispatch to main thread!");
}
}
@@ -665,25 +666,27 @@ EnsureBluetoothHalLoad()
static nsresult
StartStopGonkBluetooth(bool aShouldEnable)
{
MOZ_ASSERT(!NS_IsMainThread());
NS_ENSURE_TRUE(sBtInterface, NS_ERROR_FAILURE);
if (sIsBtEnabled == aShouldEnable) {
// Keep current enable status
+ nsRefPtr<nsRunnable> runnable =
+ new BluetoothService::ToggleBtAck(sIsBtEnabled);
+ if (NS_FAILED(NS_DispatchToMainThread(runnable))) {
+ BT_WARNING("Failed to dispatch to main thread!");
+ }
return NS_OK;
}
int ret = aShouldEnable ? sBtInterface->enable() : sBtInterface->disable();
NS_ENSURE_TRUE(ret == BT_STATUS_SUCCESS, NS_ERROR_FAILURE);
- MonitorAutoLock lock(*sToggleBtMonitor);
- lock.Wait();
-
return NS_OK;
}
static void
ReplyStatusError(BluetoothReplyRunnable* aBluetoothReplyRunnable,
int aStatusCode, const nsAString& aCustomMsg)
{
MOZ_ASSERT(aBluetoothReplyRunnable, "Reply runnable is nullptr");
@@ -711,75 +714,64 @@ ReplyStatusError(BluetoothReplyRunnable*
replyError);
}
/**
* Member functions
*/
BluetoothServiceBluedroid::BluetoothServiceBluedroid()
{
- sToggleBtMonitor = new Monitor("BluetoothService.sToggleBtMonitor");
-
if (!EnsureBluetoothHalLoad()) {
BT_LOGR("Error! Failed to load bluedroid library.");
return;
}
// Register all the bluedroid callbacks before enable() get called
// It is required to register a2dp callbacks before a2dp media task starts up.
BluetoothHfpManager::Get();
BluetoothA2dpManager::Get();
}
BluetoothServiceBluedroid::~BluetoothServiceBluedroid()
{
- sToggleBtMonitor = nullptr;
}
nsresult
BluetoothServiceBluedroid::StartInternal()
{
MOZ_ASSERT(!NS_IsMainThread());
nsresult ret = StartStopGonkBluetooth(true);
if (NS_FAILED(ret)) {
- nsCOMPtr<nsIRunnable> ackTask = new BluetoothService::ToggleBtAck(false);
- if (NS_FAILED(NS_DispatchToMainThread(ackTask))) {
+ nsRefPtr<nsRunnable> runnable =
+ new BluetoothService::ToggleBtAck(false);
+ if (NS_FAILED(NS_DispatchToMainThread(runnable))) {
BT_WARNING("Failed to dispatch to main thread!");
}
BT_LOGR("Error");
}
- nsCOMPtr<nsIRunnable> ackTask = new BluetoothService::ToggleBtAck(true);
- if (NS_FAILED(NS_DispatchToMainThread(ackTask))) {
- BT_WARNING("Failed to dispatch to main thread!");
- }
-
return ret;
}
nsresult
BluetoothServiceBluedroid::StopInternal()
{
MOZ_ASSERT(!NS_IsMainThread());
nsresult ret = StartStopGonkBluetooth(false);
if (NS_FAILED(ret)) {
- nsCOMPtr<nsIRunnable> ackTask = new BluetoothService::ToggleBtAck(true);
- if (NS_FAILED(NS_DispatchToMainThread(ackTask))) {
+ nsRefPtr<nsRunnable> runnable =
+ new BluetoothService::ToggleBtAck(true);
+ if (NS_FAILED(NS_DispatchToMainThread(runnable))) {
BT_WARNING("Failed to dispatch to main thread!");
}
BT_LOGR("Error");
}
- nsCOMPtr<nsIRunnable> ackTask = new BluetoothService::ToggleBtAck(false);
- if (NS_FAILED(NS_DispatchToMainThread(ackTask))) {
- BT_WARNING("Failed to dispatch to main thread!");
- }
-
return ret;
}
bool
BluetoothServiceBluedroid::IsEnabledInternal()
{
MOZ_ASSERT(!NS_IsMainThread());
@@ -1173,17 +1165,17 @@ NextBluetoothProfileController()
{
MOZ_ASSERT(NS_IsMainThread());
// First, remove the task at the front which has been already done.
NS_ENSURE_FALSE_VOID(sControllerArray.IsEmpty());
sControllerArray.RemoveElementAt(0);
// Re-check if the task array is empty, if it's not, the next task will begin.
NS_ENSURE_FALSE_VOID(sControllerArray.IsEmpty());
- sControllerArray[0]->Start();
+ sControllerArray[0]->StartSession();
}
static void
ConnectDisconnect(bool aConnect, const nsAString& aDeviceAddress,
BluetoothReplyRunnable* aRunnable,
uint16_t aServiceUuid, uint32_t aCod = 0)
{
MOZ_ASSERT(NS_IsMainThread());
@@ -1196,17 +1188,17 @@ ConnectDisconnect(bool aConnect, const n
sControllerArray.AppendElement(controller);
/**
* If the request is the first element of the quene, start from here. Note
* that other request is pushed into the quene and is popped out after the
* first one is completed. See NextBluetoothProfileController() for details.
*/
if (sControllerArray.Length() == 1) {
- sControllerArray[0]->Start();
+ sControllerArray[0]->StartSession();
}
}
const bt_interface_t*
BluetoothServiceBluedroid::GetBluetoothInterface()
{
return sBtInterface;
}
--- a/dom/bluetooth/bluedroid/hfp-fallback/BluetoothHfpManager.cpp
+++ b/dom/bluetooth/bluedroid/hfp-fallback/BluetoothHfpManager.cpp
@@ -42,25 +42,25 @@ BluetoothHfpManager::Observe(nsISupports
* BluetoothProfileManagerBase functions
*/
void
BluetoothHfpManager::Connect(const nsAString& aDeviceAddress,
BluetoothProfileController* aController)
{
MOZ_ASSERT(aController);
- aController->OnConnect(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
}
void
BluetoothHfpManager::Disconnect(BluetoothProfileController* aController)
{
MOZ_ASSERT(aController);
- aController->OnDisconnect(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
}
bool
BluetoothHfpManager::IsConnected()
{
return false;
}
--- a/dom/bluetooth/bluedroid/hfp/BluetoothHfpManager.cpp
+++ b/dom/bluetooth/bluedroid/hfp/BluetoothHfpManager.cpp
@@ -1222,74 +1222,92 @@ BluetoothHfpManager::IsConnected()
void
BluetoothHfpManager::Connect(const nsAString& aDeviceAddress,
BluetoothProfileController* aController)
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(aController && !mController);
if (sInShutdown) {
- aController->OnConnect(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
+ return;
+ }
+
+ if (!sBluetoothHfpInterface) {
+ BT_LOGR("sBluetoothHfpInterface is null");
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
return;
}
- NS_ENSURE_TRUE_VOID(sBluetoothHfpInterface);
-
bt_bdaddr_t deviceBdAddress;
StringToBdAddressType(aDeviceAddress, &deviceBdAddress);
- NS_ENSURE_TRUE_VOID(BT_STATUS_SUCCESS ==
- sBluetoothHfpInterface->connect(&deviceBdAddress));
+
+ bt_status_t result = sBluetoothHfpInterface->connect(&deviceBdAddress);
+ if (BT_STATUS_SUCCESS != result) {
+ BT_LOGR("Failed to connect: %x", result);
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_CONNECTION_FAILED));
+ return;
+ }
mDeviceAddress = aDeviceAddress;
mController = aController;
}
void
BluetoothHfpManager::Disconnect(BluetoothProfileController* aController)
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(!mController);
- NS_ENSURE_TRUE_VOID(sBluetoothHfpInterface);
+ if (!sBluetoothHfpInterface) {
+ BT_LOGR("sBluetoothHfpInterface is null");
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
+ return;
+ }
bt_bdaddr_t deviceBdAddress;
StringToBdAddressType(mDeviceAddress, &deviceBdAddress);
- NS_ENSURE_TRUE_VOID(BT_STATUS_SUCCESS ==
- sBluetoothHfpInterface->disconnect(&deviceBdAddress));
+
+ bt_status_t result = sBluetoothHfpInterface->disconnect(&deviceBdAddress);
+ if (BT_STATUS_SUCCESS != result) {
+ BT_LOGR("Failed to disconnect: %x", result);
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_DISCONNECTION_FAILED));
+ return;
+ }
mController = aController;
}
void
BluetoothHfpManager::OnConnect(const nsAString& aErrorStr)
{
MOZ_ASSERT(NS_IsMainThread());
/**
* On the one hand, notify the controller that we've done for outbound
* connections. On the other hand, we do nothing for inbound connections.
*/
NS_ENSURE_TRUE_VOID(mController);
- mController->OnConnect(aErrorStr);
+ mController->NotifyCompletion(aErrorStr);
mController = nullptr;
}
void
BluetoothHfpManager::OnDisconnect(const nsAString& aErrorStr)
{
MOZ_ASSERT(NS_IsMainThread());
/**
* On the one hand, notify the controller that we've done for outbound
* connections. On the other hand, we do nothing for inbound connections.
*/
NS_ENSURE_TRUE_VOID(mController);
- mController->OnDisconnect(aErrorStr);
+ mController->NotifyCompletion(aErrorStr);
mController = nullptr;
}
void
BluetoothHfpManager::OnUpdateSdpRecords(const nsAString& aDeviceAddress)
{
// Bluedroid handles this part
MOZ_ASSERT(false);
--- a/dom/bluetooth/bluez/BluetoothA2dpManager.cpp
+++ b/dom/bluetooth/bluez/BluetoothA2dpManager.cpp
@@ -154,93 +154,94 @@ BluetoothA2dpManager::Connect(const nsAS
BluetoothProfileController* aController)
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(!aDeviceAddress.IsEmpty());
MOZ_ASSERT(aController && !mController);
BluetoothService* bs = BluetoothService::Get();
if (!bs || sInShutdown) {
- aController->OnConnect(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
return;
}
if (mA2dpConnected) {
- aController->OnConnect(NS_LITERAL_STRING(ERR_ALREADY_CONNECTED));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_ALREADY_CONNECTED));
return;
}
mDeviceAddress = aDeviceAddress;
mController = aController;
if (NS_FAILED(bs->SendSinkMessage(aDeviceAddress,
NS_LITERAL_STRING("Connect")))) {
- aController->OnConnect(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
return;
}
}
void
BluetoothA2dpManager::Disconnect(BluetoothProfileController* aController)
{
BluetoothService* bs = BluetoothService::Get();
if (!bs) {
if (aController) {
- aController->OnDisconnect(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
}
return;
}
if (!mA2dpConnected) {
if (aController) {
- aController->OnDisconnect(NS_LITERAL_STRING(ERR_ALREADY_DISCONNECTED));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_ALREADY_DISCONNECTED));
}
return;
}
MOZ_ASSERT(!mDeviceAddress.IsEmpty());
MOZ_ASSERT(!mController);
mController = aController;
if (NS_FAILED(bs->SendSinkMessage(mDeviceAddress,
NS_LITERAL_STRING("Disconnect")))) {
- aController->OnDisconnect(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
return;
}
}
void
BluetoothA2dpManager::OnConnect(const nsAString& aErrorStr)
{
MOZ_ASSERT(NS_IsMainThread());
/**
* On the one hand, notify the controller that we've done for outbound
* connections. On the other hand, we do nothing for inbound connections.
*/
NS_ENSURE_TRUE_VOID(mController);
nsRefPtr<BluetoothProfileController> controller = mController.forget();
- controller->OnConnect(aErrorStr);
+ controller->NotifyCompletion(aErrorStr);
}
void
BluetoothA2dpManager::OnDisconnect(const nsAString& aErrorStr)
{
MOZ_ASSERT(NS_IsMainThread());
/**
* On the one hand, notify the controller that we've done for outbound
* connections. On the other hand, we do nothing for inbound connections.
*/
NS_ENSURE_TRUE_VOID(mController);
nsRefPtr<BluetoothProfileController> controller = mController.forget();
- controller->OnDisconnect(aErrorStr);
+ controller->NotifyCompletion(aErrorStr);
+
Reset();
}
/* HandleSinkPropertyChanged update sink state in A2dp
*
* Possible values: "disconnected", "connecting", "connected", "playing"
*
* 1. "disconnected" -> "connecting"
@@ -306,17 +307,17 @@ BluetoothA2dpManager::HandleSinkProperty
// case 4: Audio stream active
MOZ_ASSERT(prevState == SinkState::SINK_CONNECTED);
break;
case SinkState::SINK_CONNECTED:
// case 5: Audio stream suspended
if (prevState == SinkState::SINK_PLAYING) {
break;
}
-
+
// case 3: Successfully connected
MOZ_ASSERT(prevState == SinkState::SINK_CONNECTING);
mA2dpConnected = true;
mDeviceAddress = address;
NotifyConnectionStatusChanged();
OnConnect(EmptyString());
--- a/dom/bluetooth/bluez/BluetoothDBusService.cpp
+++ b/dom/bluetooth/bluez/BluetoothDBusService.cpp
@@ -1855,20 +1855,30 @@ public:
: mConnection(aConnection)
, mQueryDefaultAdapter(aQueryDefaultAdapter)
{
MOZ_ASSERT(mConnection);
}
void Run()
{
+ MOZ_ASSERT(!sDBusConnection);
+
+ sDBusConnection = mConnection;
+
mConnection->Watch();
- /**
- * Normally we'll receive the signal 'AdapterAdded' with the adapter object
+ nsRefPtr<nsRunnable> runnable =
+ new BluetoothService::ToggleBtAck(true);
+ if (NS_FAILED(NS_DispatchToMainThread(runnable))) {
+ BT_WARNING("Failed to dispatch to main thread!");
+ return;
+ }
+
+ /* Normally we'll receive the signal 'AdapterAdded' with the adapter object
* path from the DBus daemon during start up. So, there's no need to query
* the object path of default adapter here. However, if we restart from a
* crash, the default adapter might already be available, so we ask the daemon
* explicitly here.
*/
if (mQueryDefaultAdapter) {
bool success = mConnection->SendWithReply(OnDefaultAdapterReply, nullptr,
1000, "/",
@@ -1887,26 +1897,16 @@ private:
};
nsresult
BluetoothDBusService::StartInternal()
{
// This could block. It should never be run on the main thread.
MOZ_ASSERT(!NS_IsMainThread()); // BT thread
- if (sDBusConnection) {
- // This should actually not happen.
- BT_WARNING("Bluetooth is already running");
- nsCOMPtr<nsIRunnable> ackTask = new BluetoothService::ToggleBtAck(true);
- if (NS_FAILED(NS_DispatchToMainThread(ackTask))) {
- BT_WARNING("Failed to dispatch to main thread!");
- }
- return NS_OK;
- }
-
#ifdef MOZ_WIDGET_GONK
if (!sBluedroid.Enable()) {
BT_WARNING("Bluetooth not available.");
nsCOMPtr<nsIRunnable> ackTask = new BluetoothService::ToggleBtAck(false);
if (NS_FAILED(NS_DispatchToMainThread(ackTask))) {
BT_WARNING("Failed to dispatch to main thread!");
}
return NS_ERROR_FAILURE;
@@ -1950,26 +1950,19 @@ BluetoothDBusService::StartInternal()
}
return NS_ERROR_FAILURE;
}
if (!sPairingReqTable) {
sPairingReqTable = new nsDataHashtable<nsStringHashKey, DBusMessage* >;
}
- sDBusConnection = connection;
-
Task* task = new StartDBusConnectionTask(connection, sAdapterPath.IsEmpty());
DispatchToDBusThread(task);
- nsCOMPtr<nsIRunnable> ackTask = new BluetoothService::ToggleBtAck(true);
- if (NS_FAILED(NS_DispatchToMainThread(ackTask))) {
- BT_WARNING("Failed to dispatch to main thread!");
- }
-
return NS_OK;
}
PLDHashOperator
UnrefDBusMessages(const nsAString& key, DBusMessage* value, void* arg)
{
dbus_message_unref(value);
@@ -3239,17 +3232,17 @@ NextBluetoothProfileController()
MOZ_ASSERT(NS_IsMainThread());
// First, remove the task at the front which has been already done.
NS_ENSURE_FALSE_VOID(sControllerArray.IsEmpty());
sControllerArray.RemoveElementAt(0);
// Re-check if the task array is empty, if it's not, the next task will begin.
NS_ENSURE_FALSE_VOID(sControllerArray.IsEmpty());
- sControllerArray[0]->Start();
+ sControllerArray[0]->StartSession();
}
static void
ConnectDisconnect(bool aConnect, const nsAString& aDeviceAddress,
BluetoothReplyRunnable* aRunnable,
uint16_t aServiceUuid, uint32_t aCod = 0)
{
MOZ_ASSERT(NS_IsMainThread());
@@ -3262,17 +3255,17 @@ ConnectDisconnect(bool aConnect, const n
sControllerArray.AppendElement(controller);
/**
* If the request is the first element of the quene, start from here. Note
* that other request is pushed into the quene and is popped out after the
* first one is completed. See NextBluetoothProfileController() for details.
*/
if (sControllerArray.Length() == 1) {
- sControllerArray[0]->Start();
+ sControllerArray[0]->StartSession();
}
}
void
BluetoothDBusService::Connect(const nsAString& aDeviceAddress,
uint32_t aCod,
uint16_t aServiceUuid,
BluetoothReplyRunnable* aRunnable)
--- a/dom/bluetooth/bluez/BluetoothHfpManager.cpp
+++ b/dom/bluetooth/bluez/BluetoothHfpManager.cpp
@@ -1065,34 +1065,34 @@ void
BluetoothHfpManager::Connect(const nsAString& aDeviceAddress,
BluetoothProfileController* aController)
{
MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(aController && !mController);
BluetoothService* bs = BluetoothService::Get();
if (!bs || sInShutdown) {
- aController->OnConnect(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
return;
}
if (mSocket) {
if (mDeviceAddress == aDeviceAddress) {
- aController->OnConnect(NS_LITERAL_STRING(ERR_ALREADY_CONNECTED));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_ALREADY_CONNECTED));
} else {
- aController->OnConnect(NS_LITERAL_STRING(ERR_REACHED_CONNECTION_LIMIT));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_REACHED_CONNECTION_LIMIT));
}
return;
}
nsString uuid;
BluetoothUuidHelper::GetString(BluetoothServiceClass::HANDSFREE, uuid);
if (NS_FAILED(bs->GetServiceChannel(aDeviceAddress, uuid, this))) {
- aController->OnConnect(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_NO_AVAILABLE_RESOURCE));
return;
}
// Stop listening because currently we only support one connection at a time.
if (mHandsfreeSocket) {
mHandsfreeSocket->Disconnect();
mHandsfreeSocket = nullptr;
}
@@ -1153,17 +1153,17 @@ BluetoothHfpManager::Listen()
void
BluetoothHfpManager::Disconnect(BluetoothProfileController* aController)
{
MOZ_ASSERT(NS_IsMainThread());
if (!mSocket) {
if (aController) {
- aController->OnDisconnect(NS_LITERAL_STRING(ERR_ALREADY_DISCONNECTED));
+ aController->NotifyCompletion(NS_LITERAL_STRING(ERR_ALREADY_DISCONNECTED));
}
return;
}
MOZ_ASSERT(!mController);
mController = aController;
mSocket->Disconnect();
@@ -1907,17 +1907,17 @@ BluetoothHfpManager::OnConnect(const nsA
/**
* On the one hand, notify the controller that we've done for outbound
* connections. On the other hand, we do nothing for inbound connections.
*/
NS_ENSURE_TRUE_VOID(mController);
nsRefPtr<BluetoothProfileController> controller = mController.forget();
- controller->OnConnect(aErrorStr);
+ controller->NotifyCompletion(aErrorStr);
}
void
BluetoothHfpManager::OnDisconnect(const nsAString& aErrorStr)
{
MOZ_ASSERT(NS_IsMainThread());
// Start listening
@@ -1926,13 +1926,13 @@ BluetoothHfpManager::OnDisconnect(const
/**
* On the one hand, notify the controller that we've done for outbound
* connections. On the other hand, we do nothing for inbound connections.
*/
NS_ENSURE_TRUE_VOID(mController);
nsRefPtr<BluetoothProfileController> controller = mController.forget();
- controller->OnDisconnect(aErrorStr);
+ controller->NotifyCompletion(aErrorStr);
}
NS_IMPL_ISUPPORTS1(BluetoothHfpManager, nsIObserver)
--- a/dom/devicestorage/test/test_fs_get.html
+++ b/dom/devicestorage/test/test_fs_get.html
@@ -17,16 +17,17 @@ https://bugzilla.mozilla.org/show_bug.cg
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=910412">Mozilla Bug 910412</a>
<p id="display"></p>
<div id="content" style="display: none">
</div>
<pre id="test">
<script class="testbody" type="text/javascript">
devicestorage_setup();
+SimpleTest.requestCompleteLog();
// The root directory object.
var gRoot = null;
var gSub1 = null;
var gSub2 = null;
var gTestCount = 0;
var gPath = "/";
@@ -153,31 +154,51 @@ function cbError(e) {
function cbSuccess(e) {
ok(false, "Should not arrive at cbSuccess!");
devicestorage_cleanup();
}
ok(navigator.getDeviceStorage, "Should have getDeviceStorage.");
-var storage = navigator.getDeviceStorage("pictures");
-ok(storage, "Should have gotten a storage.");
+var gStorage = navigator.getDeviceStorage("pictures");
+ok(gStorage, "Should have gotten a storage.");
+
+function createTestFile(path, callback) {
+ function addNamed() {
+ var req = gStorage.addNamed(createRandomBlob("image/png"), path);
+
+ req.onsuccess = function() {
+ ok(true, path + " was created.");
+ callback();
+ };
-// Create test files.
-var req = storage.addNamed(createRandomBlob("image/png"), "sub1/sub2/test.png");
+ req.onerror = function(e) {
+ ok(false, "Failed to create " + path + ": " + e.target.error.name);
+ devicestorage_cleanup();
+ };
+ }
+
+ // Bug 980136. Check if the file exists before we create.
+ var req = gStorage.get(path);
-req.onsuccess = function() {
- var promise = storage.getRoot();
+ req.onsuccess = function() {
+ ok(true, path + " exists. Do not need to create.");
+ callback();
+ };
+
+ req.onerror = function(e) {
+ ok(true, path + " does not exists: " + e.target.error.name);
+ addNamed();
+ };
+}
+
+createTestFile("sub1/sub2/test.png", function() {
+ var promise = gStorage.getRoot();
ok(promise, "Should have a non-null promise for getRoot.");
promise.then(getSuccess, cbError);
-};
-
-
-req.onerror = function() {
- ok(false, "Failed to created test files.");
- devicestorage_cleanup();
-};
+});
</script>
</pre>
</body>
</html>
--- a/dom/push/src/PushService.jsm
+++ b/dom/push/src/PushService.jsm
@@ -1434,17 +1434,17 @@ this.PushService = {
debug("UDP support disabled");
return;
}
this._udpServer = Cc["@mozilla.org/network/udp-socket;1"]
.createInstance(Ci.nsIUDPSocket);
this._udpServer.init(-1, false);
this._udpServer.asyncListen(this);
- debug("listenForUDPWakeup listening on " + this._udpPort);
+ debug("listenForUDPWakeup listening on " + this._udpServer.port);
return this._udpServer.port;
},
/**
* Called by UDP Server Socket. As soon as a ping is recieved via UDP,
* reconnect the WebSocket and get the actual data.
*/
--- a/dom/system/gonk/ril_worker.js
+++ b/dom/system/gonk/ril_worker.js
@@ -6752,22 +6752,35 @@ GsmPDUHelperObject.prototype = {
* @return the corresponding octet.
*/
BCDToOctet: function(bcd) {
bcd = Math.abs(bcd);
return ((bcd % 10) << 4) + (Math.floor(bcd / 10) % 10);
},
/**
- * Convert a semi-octet (number) to a GSM BCD char.
+ * Convert a semi-octet (number) to a GSM BCD char, or return empty string
+ * if invalid semiOctet and supressException is set to true.
+ *
+ * @param semiOctet
+ * Nibble to be converted to.
+ * @param [optional] supressException
+ * Supress exception if invalid semiOctet and supressException is set
+ * to true.
+ *
+ * @return GSM BCD char, or empty string.
*/
bcdChars: "0123456789*#,;",
- semiOctetToBcdChar: function(semiOctet) {
+ semiOctetToBcdChar: function(semiOctet, supressException) {
if (semiOctet >= 14) {
- throw new RangeError();
+ if (supressException) {
+ return "";
+ } else {
+ throw new RangeError();
+ }
}
return this.bcdChars.charAt(semiOctet);
},
/**
* Read a *swapped nibble* binary coded decimal (BCD)
*
@@ -6797,31 +6810,34 @@ GsmPDUHelperObject.prototype = {
return number;
},
/**
* Read a *swapped nibble* binary coded string (BCD)
*
* @param pairs
* Number of nibble *pairs* to read.
+ * @param [optional] supressException
+ * Supress exception if invalid semiOctet and supressException is set
+ * to true.
*
* @return The BCD string.
*/
- readSwappedNibbleBcdString: function(pairs) {
+ readSwappedNibbleBcdString: function(pairs, supressException) {
let str = "";
for (let i = 0; i < pairs; i++) {
let nibbleH = this.readHexNibble();
let nibbleL = this.readHexNibble();
if (nibbleL == 0x0F) {
break;
}
- str += this.semiOctetToBcdChar(nibbleL);
+ str += this.semiOctetToBcdChar(nibbleL, supressException);
if (nibbleH != 0x0F) {
- str += this.semiOctetToBcdChar(nibbleH);
+ str += this.semiOctetToBcdChar(nibbleH, supressException);
}
}
return str;
},
/**
* Write numerical data as swapped nibble BCD.
@@ -11941,17 +11957,23 @@ ICCRecordHelperObject.prototype = {
readICCID: function() {
function callback() {
let Buf = this.context.Buf;
let RIL = this.context.RIL;
let strLen = Buf.readInt32();
let octetLen = strLen / 2;
RIL.iccInfo.iccid =
- this.context.GsmPDUHelper.readSwappedNibbleBcdString(octetLen);
+ this.context.GsmPDUHelper.readSwappedNibbleBcdString(octetLen, true);
+ // Consumes the remaining buffer if any.
+ let unReadBuffer = this.context.Buf.getReadAvailable() -
+ this.context.Buf.PDU_HEX_OCTET_SIZE;
+ if (unReadBuffer > 0) {
+ this.context.Buf.seekIncoming(unReadBuffer);
+ }
Buf.readStringDelimiter(strLen);
if (DEBUG) this.context.debug("ICCID: " + RIL.iccInfo.iccid);
if (RIL.iccInfo.iccid) {
this.context.ICCUtilsHelper.handleICCInfoChange();
RIL.reportStkServiceIsRunning();
}
}
--- a/dom/system/gonk/tests/test_ril_worker_icc.js
+++ b/dom/system/gonk/tests/test_ril_worker_icc.js
@@ -23,16 +23,20 @@ function newUint8Worker() {
context.Buf.readUint8 = function() {
return buf[index++];
};
context.Buf.seekIncoming = function(offset) {
index += offset;
};
+ context.Buf.getReadAvailable = function() {
+ return buf.length - index;
+ };
+
worker.debug = do_print;
return worker;
}
/**
* Verify ICCPDUHelper#readICCUCS2String()
*/
@@ -2110,16 +2114,20 @@ add_test(function test_process_icc_io_er
function do_test(errorCode, expectedErrorMsg) {
let called = false;
function errorCb(errorMsg) {
called = true;
do_check_eq(errorMsg, expectedErrorMsg);
}
ioHelper.processICCIOError({rilRequestError: errorCode,
+ fileId: 0xffff,
+ command: 0xff,
+ sw1: 0xff,
+ sw2: 0xff,
onerror: errorCb});
do_check_true(called);
}
for (let i = 0; i < ERROR_REJECTED_BY_REMOTE + 1; i++) {
do_test(i, RIL_ERROR_TO_GECKO_ERROR[i]);
}
@@ -3087,8 +3095,56 @@ add_test(function test_icc_io_get_respon
do_check_eq(options.fileSize, 0x1A);
do_check_eq(options.recordSize, 0x1A);
do_check_eq(options.totalRecords, 0x01);
}
run_next_test();
});
+
+/**
+ * Verify reading EF_ICCID.
+ */
+add_test(function test_handling_iccid() {
+ let worker = newUint8Worker();
+ let context = worker.ContextPool._contexts[0];
+ let record = context.ICCRecordHelper;
+ let helper = context.GsmPDUHelper;
+ let ril = context.RIL;
+ let buf = context.Buf;
+ let io = context.ICCIOHelper;
+
+ ril.reportStkServiceIsRunning = function fakeReportStkServiceIsRunning() {
+ };
+
+ function do_test(rawICCID, expectedICCID) {
+ io.loadTransparentEF = function fakeLoadTransparentEF(options) {
+ // Write data size
+ buf.writeInt32(rawICCID.length);
+
+ // Write data
+ for (let i = 0; i < rawICCID.length; i += 2) {
+ helper.writeHexOctet(parseInt(rawICCID.substr(i, 2), 16));
+ }
+
+ // Write string delimiter
+ buf.writeStringDelimiter(rawICCID.length);
+
+ if (options.callback) {
+ options.callback(options);
+ }
+ };
+
+ record.readICCID();
+
+ do_check_eq(ril.iccInfo.iccid, expectedICCID);
+ }
+
+ // Invalid char at high nibbile + low nibbile contains 0xF.
+ do_test("9868002E90909F001519", "89860020909");
+ // Invalid char at low nibbile.
+ do_test("986800E2909090001519", "8986002090909005191");
+ // Valid ICCID.
+ do_test("98101430121181157002", "89014103211118510720");
+
+ run_next_test();
+});
--- a/ipc/unixfd/UnixFdWatcher.h
+++ b/ipc/unixfd/UnixFdWatcher.h
@@ -1,14 +1,17 @@
/* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
/* vim: set ts=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/. */
+#ifndef mozilla_ipc_UnixFdWatcher_h
+#define mozilla_ipc_UnixFdWatcher_h
+
#include "base/message_loop.h"
#include "mozilla/FileUtils.h"
namespace mozilla {
namespace ipc {
class UnixFdWatcher : public MessageLoopForIO::Watcher
{
@@ -57,8 +60,10 @@ private:
MessageLoop* mIOLoop;
ScopedClose mFd;
MessageLoopForIO::FileDescriptorWatcher mReadWatcher;
MessageLoopForIO::FileDescriptorWatcher mWriteWatcher;
};
}
}
+
+#endif
--- a/ipc/unixfd/UnixFileWatcher.h
+++ b/ipc/unixfd/UnixFileWatcher.h
@@ -1,14 +1,17 @@
/* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
/* vim: set ts=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/. */
+#ifndef mozilla_ipc_UnixFileWatcher_h
+#define mozilla_ipc_UnixFileWatcher_h
+
#include "UnixFdWatcher.h"
namespace mozilla {
namespace ipc {
class UnixFileWatcher : public UnixFdWatcher
{
public:
@@ -21,8 +24,10 @@ public:
protected:
UnixFileWatcher(MessageLoop* aIOLoop);
UnixFileWatcher(MessageLoop* aIOLoop, int aFd);
};
}
}
+
+#endif
--- a/ipc/unixfd/UnixSocketWatcher.h
+++ b/ipc/unixfd/UnixSocketWatcher.h
@@ -1,14 +1,17 @@
/* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
/* vim: set ts=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/. */
+#ifndef mozilla_ipc_UnixSocketWatcher_h
+#define mozilla_ipc_UnixSocketWatcher_h
+
#include "UnixFdWatcher.h"
namespace mozilla {
namespace ipc {
class UnixSocketWatcher : public UnixFdWatcher
{
public:
@@ -59,8 +62,10 @@ private:
void OnFileCanReadWithoutBlocking(int aFd) MOZ_OVERRIDE;
void OnFileCanWriteWithoutBlocking(int aFd) MOZ_OVERRIDE;
ConnectionStatus mConnectionStatus;
};
}
}
+
+#endif
--- a/memory/build/mozmemory_wrap.c
+++ b/memory/build/mozmemory_wrap.c
@@ -85,56 +85,61 @@ strdup_impl(const char *src)
{
size_t len = strlen(src);
return strndup_impl(src, len);
}
#endif /* XP_DARWIN */
#ifdef ANDROID
#include <stdarg.h>
+#include <stdio.h>
MOZ_MEMORY_API int
vasprintf_impl(char **str, const char *fmt, va_list ap)
{
+ char* ptr, *_ptr;
+ int ret;
+
if (str == NULL || fmt == NULL) {
return -1;
}
- char* ptr = (char*)malloc_impl(128);
+ ptr = (char*)malloc_impl(128);
if (ptr == NULL) {
*str = NULL;
return -1;
}
- int ret = vsnprintf(ptr, 128, fmt, ap);
+ ret = vsnprintf(ptr, 128, fmt, ap);
if (ret < 0) {
free_impl(ptr);
*str = NULL;
return -1;
}
- char* _ptr = realloc_impl(ptr, ret + 1);
+ _ptr = realloc_impl(ptr, ret + 1);
if (_ptr == NULL) {
free_impl(ptr);
*str = NULL;
return -1;
}
*str = _ptr;
return ret;
}
MOZ_MEMORY_API int
asprintf_impl(char **str, const char *fmt, ...)
- {
+{
+ int ret;
va_list ap;
va_start(ap, fmt);
- int ret = vasprintf_impl(str, fmt, ap);
+ ret = vasprintf_impl(str, fmt, ap);
va_end(ap);
return ret;
}
#endif
#ifdef XP_WIN
--- a/memory/mozjemalloc/jemalloc.c
+++ b/memory/mozjemalloc/jemalloc.c
@@ -2709,20 +2709,21 @@ RETURN:
/* Return the smallest alignment multiple that is >= s. */
#define ALIGNMENT_CEILING(s, alignment) \
(((s) + (alignment - 1)) & (-(alignment)))
static void *
pages_trim(void *addr, size_t alloc_size, size_t leadsize, size_t size)
{
+ size_t trailsize;
void *ret = (void *)((uintptr_t)addr + leadsize);
assert(alloc_size >= leadsize + size);
- size_t trailsize = alloc_size - leadsize - size;
+ trailsize = alloc_size - leadsize - size;
if (leadsize != 0)
pages_unmap(addr, leadsize);
if (trailsize != 0)
pages_unmap((void *)((uintptr_t)ret + size), trailsize);
return (ret);
}
--- a/modules/libpref/src/init/all.js
+++ b/modules/libpref/src/init/all.js
@@ -223,26 +223,28 @@ pref("media.gstreamer.enabled", true);
#endif
#ifdef MOZ_APPLEMEDIA
pref("media.apple.mp3.enabled", true);
#endif
#ifdef MOZ_WEBRTC
pref("media.navigator.enabled", true);
pref("media.navigator.video.enabled", true);
pref("media.navigator.load_adapt", false);
-pref("media.navigator.video.default_width",640);
-pref("media.navigator.video.default_height",480);
pref("media.navigator.video.default_fps",30);
pref("media.navigator.video.default_minfps",10);
#ifdef MOZ_WIDGET_GONK
+pref("media.navigator.video.default_width",320);
+pref("media.navigator.video.default_height",240);
pref("media.peerconnection.enabled", true);
pref("media.peerconnection.video.enabled", true);
pref("media.navigator.video.max_fs", 1200); // 640x480 == 1200mb
pref("media.navigator.video.max_fr", 30);
#else
+pref("media.navigator.video.default_width",640);
+pref("media.navigator.video.default_height",480);
pref("media.peerconnection.enabled", true);
pref("media.peerconnection.video.enabled", true);
pref("media.navigator.video.max_fs", 0); // unrestricted
pref("media.navigator.video.max_fr", 0); // unrestricted
#endif
pref("media.navigator.permission.disabled", false);
pref("media.peerconnection.default_iceservers", "[{\"url\": \"stun:stun.services.mozilla.com\"}]");
pref("media.peerconnection.trickle_ice", true);
--- a/netwerk/protocol/rtsp/rtsp/AMPEG4AudioAssembler.cpp
+++ b/netwerk/protocol/rtsp/rtsp/AMPEG4AudioAssembler.cpp
@@ -103,16 +103,17 @@ static status_t parseAudioObjectType(
}
return OK;
}
static status_t parseGASpecificConfig(
ABitReader *bits,
unsigned audioObjectType, unsigned channelConfiguration) {
+ /*unsigned frameLengthFlag = */bits->getBits(1);
unsigned dependsOnCoreCoder = bits->getBits(1);
if (dependsOnCoreCoder) {
/* unsigned coreCoderDelay = */bits->getBits(1);
}
unsigned extensionFlag = bits->getBits(1);
if (!channelConfiguration) {
// program_config_element