author | Ryan VanderMeulen <ryanvm@gmail.com> |
Wed, 05 Feb 2014 15:47:36 -0500 | |
changeset 167092 | 1e9f169c97155f464e7c623c5e504d55248c23a0 |
parent 167052 | bb4aa981b683c64419dba11b9b5aebd32ba0eb1a (current diff) |
parent 167091 | 67c9d01668dfbf6aba9fb99d324c482041bd499d (diff) |
child 167093 | 1409304e89e43950c182ea376aba0ee1c700fa57 |
child 167183 | 97de0a97a1f5dfe67e3ac5e366d915ed1faa9a0d |
child 167210 | 482f74d165b716c1b03e4b50490c7f1fe3979709 |
push id | 39368 |
push user | ryanvm@gmail.com |
push date | Wed, 05 Feb 2014 20:54:42 +0000 |
treeherder | mozilla-inbound@1409304e89e4 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
milestone | 30.0a1 |
first release with | nightly linux32
1e9f169c9715
/
30.0a1
/
20140206030201
/
files
nightly linux64
1e9f169c9715
/
30.0a1
/
20140206030201
/
files
nightly mac
1e9f169c9715
/
30.0a1
/
20140206030201
/
files
nightly win32
1e9f169c9715
/
30.0a1
/
20140206030201
/
files
nightly win64
1e9f169c9715
/
30.0a1
/
20140206030201
/
files
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
releases | nightly linux32
30.0a1
/
20140206030201
/
pushlog to previous
nightly linux64
30.0a1
/
20140206030201
/
pushlog to previous
nightly mac
30.0a1
/
20140206030201
/
pushlog to previous
nightly win32
30.0a1
/
20140206030201
/
pushlog to previous
nightly win64
30.0a1
/
20140206030201
/
pushlog to previous
|
dom/payment/PaymentRequestInfo.js | file | annotate | diff | comparison | revisions | |
dom/payment/interfaces/nsIDOMPaymentRequestInfo.idl | file | annotate | diff | comparison | revisions | |
gfx/layers/ipc/AsyncPanZoomController.cpp | file | annotate | diff | comparison | revisions |
--- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -7,18 +7,18 @@ <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/> <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="59605a7c026ff06cc1613af3938579b1dddc6cfe"> <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="ce212ba54f36284db84068f82af0c790ceb2c3ff"/> - <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9b6626eddbc85873eaa2a9174a9bd5101e5c05f"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="ac8a273809b5b160554e616bc5ef2d6fa026ce0e"/> + <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="49c722fa1a5e1873fa0010829fd97d0b74009ca5"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="eda08beb3ba9a159843c70ffde0f9660ec351eb9"/> <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="87aa8679560ce09f6445621d6f370d9de722cdba"/> <project name="moztt" path="external/moztt" remote="b2g" revision="e33ea242b4328fb0d1824c951f379332b5021512"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="788d9ce293a9b44f64536130cf4ad577e8101dbe"/> <!-- Stock Android things --> <project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/> <project name="platform/bionic" path="bionic" revision="c72b8f6359de7ed17c11ddc9dfdde3f615d188a9"/>
--- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -6,18 +6,18 @@ <remote fetch="https://git.mozilla.org/external/caf" name="caf"/> <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/> <!-- B2G specific things. --> <project name="platform_build" path="build" remote="b2g" revision="317f25e0a4cb3e8e86e2b76c37a14081372f0307"> <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="ce212ba54f36284db84068f82af0c790ceb2c3ff"/> - <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9b6626eddbc85873eaa2a9174a9bd5101e5c05f"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="ac8a273809b5b160554e616bc5ef2d6fa026ce0e"/> + <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="49c722fa1a5e1873fa0010829fd97d0b74009ca5"/> <project name="moztt" path="external/moztt" remote="b2g" revision="e33ea242b4328fb0d1824c951f379332b5021512"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="788d9ce293a9b44f64536130cf4ad577e8101dbe"/> <project name="valgrind" path="external/valgrind" remote="b2g" revision="905bfa3548eb75cf1792d0d8412b92113bbd4318"/> <project name="vex" path="external/VEX" remote="b2g" revision="c3d7efc45414f1b44cd9c479bb2758c91c4707c0"/> <!-- 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"/> <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="9025e50b9d29b3cabbbb21e1dd94d0d13121a17e"/>
--- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -7,18 +7,18 @@ <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/> <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="59605a7c026ff06cc1613af3938579b1dddc6cfe"> <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="ce212ba54f36284db84068f82af0c790ceb2c3ff"/> - <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9b6626eddbc85873eaa2a9174a9bd5101e5c05f"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="ac8a273809b5b160554e616bc5ef2d6fa026ce0e"/> + <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="49c722fa1a5e1873fa0010829fd97d0b74009ca5"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="eda08beb3ba9a159843c70ffde0f9660ec351eb9"/> <project name="platform_external_qemu" path="external/qemu" remote="b2g" revision="87aa8679560ce09f6445621d6f370d9de722cdba"/> <project name="moztt" path="external/moztt" remote="b2g" revision="e33ea242b4328fb0d1824c951f379332b5021512"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="788d9ce293a9b44f64536130cf4ad577e8101dbe"/> <!-- Stock Android things --> <project name="platform/abi/cpp" path="abi/cpp" revision="dd924f92906085b831bf1cbbc7484d3c043d613c"/> <project name="platform/bionic" path="bionic" revision="c72b8f6359de7ed17c11ddc9dfdde3f615d188a9"/>
--- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -1,4 +1,4 @@ { - "revision": "cea79abbb7a97c0bd67051087bcdf40d25611930", + "revision": "0fd4065b6621e3b7409cf90ac30d4e174e7317a6", "repo_path": "/integration/gaia-central" }
--- a/b2g/config/hamachi/sources.xml +++ b/b2g/config/hamachi/sources.xml @@ -6,18 +6,18 @@ <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/> <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="59605a7c026ff06cc1613af3938579b1dddc6cfe"> <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="ce212ba54f36284db84068f82af0c790ceb2c3ff"/> - <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9b6626eddbc85873eaa2a9174a9bd5101e5c05f"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="ac8a273809b5b160554e616bc5ef2d6fa026ce0e"/> + <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="49c722fa1a5e1873fa0010829fd97d0b74009ca5"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="librecovery" path="librecovery" remote="b2g" revision="84f2f2fce22605e17d511ff1767e54770067b5b5"/> <project name="moztt" path="external/moztt" remote="b2g" revision="e33ea242b4328fb0d1824c951f379332b5021512"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="788d9ce293a9b44f64536130cf4ad577e8101dbe"/> <!-- Stock Android things --> <project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/> <project name="platform/bionic" path="bionic" revision="d2eb6c7b6e1bc7643c17df2d9d9bcb1704d0b9ab"/> <project name="platform/bootable/recovery" path="bootable/recovery" revision="746bc48f34f5060f90801925dcdd964030c1ab6d"/>
--- a/b2g/config/helix/sources.xml +++ b/b2g/config/helix/sources.xml @@ -5,18 +5,18 @@ <remote fetch="https://git.mozilla.org/external/caf" name="caf"/> <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="59605a7c026ff06cc1613af3938579b1dddc6cfe"> <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="ce212ba54f36284db84068f82af0c790ceb2c3ff"/> - <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9b6626eddbc85873eaa2a9174a9bd5101e5c05f"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="ac8a273809b5b160554e616bc5ef2d6fa026ce0e"/> + <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="49c722fa1a5e1873fa0010829fd97d0b74009ca5"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="librecovery" path="librecovery" remote="b2g" revision="84f2f2fce22605e17d511ff1767e54770067b5b5"/> <project name="moztt" path="external/moztt" remote="b2g" revision="e33ea242b4328fb0d1824c951f379332b5021512"/> <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"/> <project name="platform/bootable/recovery" path="bootable/recovery" revision="575fdbf046e966a5915b1f1e800e5d6ad0ea14c0"/>
--- a/b2g/config/inari/sources.xml +++ b/b2g/config/inari/sources.xml @@ -7,18 +7,18 @@ <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/> <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="59605a7c026ff06cc1613af3938579b1dddc6cfe"> <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="ce212ba54f36284db84068f82af0c790ceb2c3ff"/> - <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9b6626eddbc85873eaa2a9174a9bd5101e5c05f"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="ac8a273809b5b160554e616bc5ef2d6fa026ce0e"/> + <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="49c722fa1a5e1873fa0010829fd97d0b74009ca5"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="librecovery" path="librecovery" remote="b2g" revision="84f2f2fce22605e17d511ff1767e54770067b5b5"/> <project name="moztt" path="external/moztt" remote="b2g" revision="e33ea242b4328fb0d1824c951f379332b5021512"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="788d9ce293a9b44f64536130cf4ad577e8101dbe"/> <!-- Stock Android things --> <project name="platform/abi/cpp" path="abi/cpp" revision="6426040f1be4a844082c9769171ce7f5341a5528"/> <project name="platform/bionic" path="bionic" revision="cd5dfce80bc3f0139a56b58aca633202ccaee7f8"/> <project name="platform/bootable/recovery" path="bootable/recovery" revision="e0a9ac010df3afaa47ba107192c05ac8b5516435"/>
--- a/b2g/config/leo/sources.xml +++ b/b2g/config/leo/sources.xml @@ -6,18 +6,18 @@ <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/> <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="59605a7c026ff06cc1613af3938579b1dddc6cfe"> <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="ce212ba54f36284db84068f82af0c790ceb2c3ff"/> - <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9b6626eddbc85873eaa2a9174a9bd5101e5c05f"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="ac8a273809b5b160554e616bc5ef2d6fa026ce0e"/> + <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="49c722fa1a5e1873fa0010829fd97d0b74009ca5"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="librecovery" path="librecovery" remote="b2g" revision="84f2f2fce22605e17d511ff1767e54770067b5b5"/> <project name="moztt" path="external/moztt" remote="b2g" revision="e33ea242b4328fb0d1824c951f379332b5021512"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="788d9ce293a9b44f64536130cf4ad577e8101dbe"/> <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/mako/sources.xml +++ b/b2g/config/mako/sources.xml @@ -6,18 +6,18 @@ <remote fetch="https://git.mozilla.org/external/caf" name="caf"/> <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/> <!-- B2G specific things. --> <project name="platform_build" path="build" remote="b2g" revision="317f25e0a4cb3e8e86e2b76c37a14081372f0307"> <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="ce212ba54f36284db84068f82af0c790ceb2c3ff"/> - <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9b6626eddbc85873eaa2a9174a9bd5101e5c05f"/> + <project name="gaia" path="gaia" remote="mozillaorg" revision="ac8a273809b5b160554e616bc5ef2d6fa026ce0e"/> + <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="49c722fa1a5e1873fa0010829fd97d0b74009ca5"/> <project name="moztt" path="external/moztt" remote="b2g" revision="e33ea242b4328fb0d1824c951f379332b5021512"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="788d9ce293a9b44f64536130cf4ad577e8101dbe"/> <project name="valgrind" path="external/valgrind" remote="b2g" revision="905bfa3548eb75cf1792d0d8412b92113bbd4318"/> <project name="vex" path="external/VEX" remote="b2g" revision="c3d7efc45414f1b44cd9c479bb2758c91c4707c0"/> <!-- 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"/> <project groups="linux" name="platform/prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" path="prebuilts/gcc/linux-x86/host/i686-linux-glibc2.7-4.6" revision="9025e50b9d29b3cabbbb21e1dd94d0d13121a17e"/>
--- a/b2g/config/wasabi/sources.xml +++ b/b2g/config/wasabi/sources.xml @@ -6,18 +6,18 @@ <remote fetch="https://git.mozilla.org/releases" name="mozillaorg"/> <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="59605a7c026ff06cc1613af3938579b1dddc6cfe"> <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="ce212ba54f36284db84068f82af0c790ceb2c3ff"/> - <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="e9b6626eddbc85873eaa2a9174a9bd5101e5c05f"/> + <project name="gaia.git" path="gaia" remote="mozillaorg" revision="ac8a273809b5b160554e616bc5ef2d6fa026ce0e"/> + <project name="gonk-misc" path="gonk-misc" remote="b2g" revision="49c722fa1a5e1873fa0010829fd97d0b74009ca5"/> <project name="rilproxy" path="rilproxy" remote="b2g" revision="827214fcf38d6569aeb5c6d6f31cb296d1f09272"/> <project name="librecovery" path="librecovery" remote="b2g" revision="84f2f2fce22605e17d511ff1767e54770067b5b5"/> <project name="moztt" path="external/moztt" remote="b2g" revision="e33ea242b4328fb0d1824c951f379332b5021512"/> <project name="apitrace" path="external/apitrace" remote="apitrace" revision="788d9ce293a9b44f64536130cf4ad577e8101dbe"/> <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="cd5dfce80bc3f0139a56b58aca633202ccaee7f8"/>
--- a/b2g/installer/package-manifest.in +++ b/b2g/installer/package-manifest.in @@ -559,17 +559,16 @@ @BINPATH@/components/TCPSocket.js @BINPATH@/components/TCPServerSocket.js @BINPATH@/components/TCPSocketParentIntermediary.js @BINPATH@/components/TCPSocket.manifest @BINPATH@/components/Payment.js @BINPATH@/components/PaymentFlowInfo.js -@BINPATH@/components/PaymentRequestInfo.js @BINPATH@/components/Payment.manifest @BINPATH@/components/DownloadsAPI.js @BINPATH@/components/DownloadsAPI.manifest ; InputMethod API @BINPATH@/components/MozKeyboard.js @BINPATH@/components/InputMethod.manifest
--- a/browser/installer/package-manifest.in +++ b/browser/installer/package-manifest.in @@ -564,17 +564,16 @@ @BINPATH@/components/ActivityProxy.js @BINPATH@/components/ActivityRequestHandler.js @BINPATH@/components/ActivityWrapper.js @BINPATH@/components/ActivityMessageConfigurator.js #endif @BINPATH@/components/Payment.js @BINPATH@/components/PaymentFlowInfo.js -@BINPATH@/components/PaymentRequestInfo.js @BINPATH@/components/Payment.manifest #ifdef MOZ_WEBRTC @BINPATH@/components/PeerConnection.js @BINPATH@/components/PeerConnection.manifest #endif @BINPATH@/components/HttpDataUsage.manifest
--- a/content/media/RtspMediaResource.h +++ b/content/media/RtspMediaResource.h @@ -199,17 +199,17 @@ public: NS_DECL_ISUPPORTS NS_DECL_NSIINTERFACEREQUESTOR NS_DECL_NSISTREAMINGPROTOCOLLISTENER void Revoke() { mResource = nullptr; } private: - nsRefPtr<RtspMediaResource> mResource; + RtspMediaResource* mResource; }; friend class Listener; protected: // Main thread access only. // These are called on the main thread by Listener. NS_DECL_NSISTREAMINGPROTOCOLLISTENER
--- a/dom/bluetooth/bluez/BluetoothOppManager.cpp +++ b/dom/bluetooth/bluez/BluetoothOppManager.cpp @@ -1462,17 +1462,17 @@ BluetoothOppManager::OnSocketConnectErro mSocket = nullptr; if (!mIsServer) { // Inform gaia of remaining blobs' sending failure DiscardBlobsToSend(); } // Listen as a server if there's no more batch to process - if (!ProcessNextBatch()) { + if (!ProcessNextBatch() && !mIsServer) { Listen(); } } void BluetoothOppManager::OnSocketDisconnect(BluetoothSocket* aSocket) { BT_LOGR("[%s]", (mIsServer)? "server" : "client");
--- a/dom/inputmethod/mochitest/test_bug944397.html +++ b/dom/inputmethod/mochitest/test_bug944397.html @@ -6,47 +6,58 @@ https://bugzilla.mozilla.org/show_bug.cg <head> <title>Basic test for InputMethod API.</title> <script type="application/javascript;version=1.7" src="/tests/SimpleTest/SimpleTest.js"></script> <script type="application/javascript;version=1.7" src="inputmethod_common.js"></script> <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/> </head> <body> <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=944397">Mozilla Bug 944397</a> -<input type="text" /> <p id="display"></p> <pre id="test"> <script class="testbody" type="application/javascript;version=1.7"> inputmethod_setup(function() { runTest(); }); // The frame script running in file_test_app.html. function appFrameScript() { let input = content.document.getElementById('test-input'); input.oninput = function() { sendAsyncMessage('test:InputMethod:oninput', {}); }; + + /* + * Bug 957213. Sometimes we need to refocus the input field to avoid + * intermittent test failure. + */ + content.setInterval(function() { + input.focus(); + }, 500); } function runTest() { var timeoutId = null; // Create an app frame to recieve keyboard inputs. let app = document.createElement('iframe'); app.src = 'file_test_app.html'; app.setAttribute('mozbrowser', true); document.body.appendChild(app); app.addEventListener('mozbrowserloadend', function() { let mm = SpecialPowers.getBrowserFrameMessageManager(app); mm.loadFrameScript('data:,(' + appFrameScript.toString() + ')();', false); mm.addMessageListener("test:InputMethod:oninput", function() { + if (!timeoutId) { + return; + } ok(true, 'Keyboard input was received.'); clearTimeout(timeoutId); + timeoutId = null; inputmethod_cleanup(); }); }); // Create a browser frame to load the input method app. let keyboard = document.createElement('iframe'); keyboard.setAttribute('mozbrowser', true); document.body.appendChild(keyboard); @@ -75,25 +86,26 @@ function runTest() { }], function() { let req = keyboard.setInputMethodActive(true); req.onsuccess = function() { ok(true, 'setInputMethodActive succeeded.'); timeoutId = setTimeout(function() { inputmethod_cleanup(); ok(false, 'Failed to generate keyboard input.'); - }, 60000); + }, 20000); }; req.onerror = function() { ok(false, 'setInputMethodActive failed: ' + this.error.name); inputmethod_cleanup(); }; // Loads the input method app to the browser frame after a delay. + SpecialPowers.DOMWindowUtils.focus(app); setTimeout(function() { keyboard.src = imeUrl; }, 100); }); } </script> </pre>
--- a/dom/ipc/TabChild.cpp +++ b/dom/ipc/TabChild.cpp @@ -605,17 +605,17 @@ TabChild::HandlePossibleViewportChange() metrics.mScrollId = viewId; } metrics.mDisplayPort = AsyncPanZoomController::CalculatePendingDisplayPort( // The page must have been refreshed in some way such as a new document or // new CSS viewport, so we know that there's no velocity, acceleration, and // we have no idea how long painting will take. - metrics, ScreenPoint(0.0f, 0.0f), gfx::Point(0.0f, 0.0f), 0.0); + metrics, ScreenPoint(0.0f, 0.0f), 0.0); metrics.mCumulativeResolution = metrics.mZoom / metrics.mDevPixelsPerCSSPixel * ScreenToLayerScale(1); // This is the root layer, so the cumulative resolution is the same // as the resolution. metrics.mResolution = metrics.mCumulativeResolution / LayoutDeviceToParentLayerScale(1); utils->SetResolution(metrics.mResolution.scale, metrics.mResolution.scale); CSSSize scrollPort = metrics.CalculateCompositedRectInCssPixels().Size(); utils->SetScrollPositionClampingScrollPortSize(scrollPort.width, scrollPort.height);
--- a/dom/network/src/NetworkStatsService.jsm +++ b/dom/network/src/NetworkStatsService.jsm @@ -24,16 +24,25 @@ const NET_NETWORKSTATSSERVICE_CID = Comp const TOPIC_BANDWIDTH_CONTROL = "netd-bandwidth-control" const TOPIC_INTERFACE_REGISTERED = "network-interface-registered"; const TOPIC_INTERFACE_UNREGISTERED = "network-interface-unregistered"; const NET_TYPE_WIFI = Ci.nsINetworkInterface.NETWORK_TYPE_WIFI; const NET_TYPE_MOBILE = Ci.nsINetworkInterface.NETWORK_TYPE_MOBILE; +// Networks have different status that NetworkStats API needs to be aware of. +// Network is present and ready, so NetworkManager provides the whole info. +const NETWORK_STATUS_READY = 0; +// Network is present but hasn't established a connection yet (e.g. SIM that has not +// enabled 3G since boot). +const NETWORK_STATUS_STANDBY = 1; +// Network is not present, but stored in database by the previous connections. +const NETWORK_STATUS_AWAY = 2; + // The maximum traffic amount can be saved in the |cachedStats|. const MAX_CACHED_TRAFFIC = 500 * 1000 * 1000; // 500 MB XPCOMUtils.defineLazyServiceGetter(this, "ppmm", "@mozilla.org/parentprocessmessagemanager;1", "nsIMessageListenerManager"); XPCOMUtils.defineLazyServiceGetter(this, "gRil", @@ -84,17 +93,18 @@ this.NetworkStatsService = { this._networks = Object.create(null); // There is no way to know a priori if wifi connection is available, // just when the wifi driver is loaded, but it is unloaded when // wifi is switched off. So wifi connection is hardcoded let netId = this.getNetworkId('0', NET_TYPE_WIFI); this._networks[netId] = { network: { id: '0', type: NET_TYPE_WIFI }, - interfaceName: null }; + interfaceName: null, + status: NETWORK_STATUS_STANDBY }; this.messages = ["NetworkStats:Get", "NetworkStats:Clear", "NetworkStats:ClearAll", "NetworkStats:SetAlarm", "NetworkStats:GetAlarms", "NetworkStats:RemoveAlarms", "NetworkStats:GetAvailableNetworks", @@ -273,24 +283,65 @@ this.NetworkStatsService = { let netId = this.getNetworkId(id, aNetwork.type); if (!this._networks[netId]) { this._networks[netId] = Object.create(null); this._networks[netId].network = { id: id, type: aNetwork.type }; } + this._networks[netId].status = NETWORK_STATUS_READY; this._networks[netId].interfaceName = aNetwork.name; return netId; }, getNetworkId: function getNetworkId(aIccId, aNetworkType) { return aIccId + '' + aNetworkType; }, + /* Function to ensure that one network is valid. The network is valid if its status is + * NETWORK_STATUS_READY, NETWORK_STATUS_STANDBY or NETWORK_STATUS_AWAY. + * + * The result is |netId| or null in case of a non-valid network + * aCallback is signatured as |function(netId)|. + */ + validateNetwork: function validateNetwork(aNetwork, aCallback) { + let netId = this.getNetworkId(aNetwork.id, aNetwork.type); + + if (this._networks[netId]) { + aCallback(netId); + return; + } + + // Check if network is valid (RIL entry) but has not established a connection yet. + // If so add to networks list with empty interfaceName. + let rilNetworks = this.getRilNetworks(); + if (rilNetworks[netId]) { + this._networks[netId] = Object.create(null); + this._networks[netId].network = rilNetworks[netId]; + this._networks[netId].status = NETWORK_STATUS_STANDBY; + this._currentAlarms[netId] = Object.create(null); + aCallback(netId); + return; + } + + // Check if network is available in the DB. + this._db.isNetworkAvailable(aNetwork, function(aError, aResult) { + if (aResult) { + this._networks[netId] = Object.create(null); + this._networks[netId].network = aNetwork; + this._networks[netId].status = NETWORK_STATUS_AWAY; + this._currentAlarms[netId] = Object.create(null); + aCallback(netId); + } + + aCallback(null); + }); + }, + getAvailableNetworks: function getAvailableNetworks(mm, msg) { let self = this; let rilNetworks = this.getRilNetworks(); this._db.getAvailableNetworks(function onGetNetworks(aError, aResult) { // Also return the networks that are valid but have not // established connections yet. for (let netId in rilNetworks) { @@ -363,101 +414,65 @@ this.NetworkStatsService = { } } let serviceType = msg.serviceType || ""; let start = new Date(msg.start); let end = new Date(msg.end); - // Check if the network is currently active. If yes, we need to update - // the cached stats first before retrieving stats from the DB. - if (this._networks[netId]) { - this.updateStats(netId, function onStatsUpdated(aResult, aMessage) { - debug("getstats for network " + network.id + " of type " + network.type); - debug("appId: " + appId + " from appManifestURL: " + appManifestURL); - - self.updateCachedStats(function onStatsUpdated(aResult, aMessage) { - self._db.find(function onStatsFound(aError, aResult) { - mm.sendAsyncMessage("NetworkStats:Get:Return", - { id: msg.id, error: aError, result: aResult }); - }, appId, serviceType, network, start, end, appManifestURL); - }); - }); - return; - } - - // Check if the network is available in the DB. If yes, we also - // retrieve the stats for it from the DB. - this._db.isNetworkAvailable(network, function(aError, aResult) { - let toFind = false; - if (aResult) { - toFind = true; - } else if (!aError) { - // Network is not found in the database without any errors. - // Check if network is valid but has not established a connection yet. - let rilNetworks = self.getRilNetworks(); - if (rilNetworks[netId]) { - // find will not get data for network from the database but will format the - // result object in order to make NetworkStatsManager be able to construct a - // nsIDOMMozNetworkStats object. - toFind = true; - } - } - - if (toFind) { - // If network is not active, there is no need to update stats before finding. - self._db.find(function onStatsFound(aError, aResult) { - mm.sendAsyncMessage("NetworkStats:Get:Return", - { id: msg.id, error: aError, result: aResult }); - }, appId, serviceType, network, start, end, appManifestURL); + this.validateNetwork(network, function onValidateNetwork(aNetId) { + if (!aNetId) { + mm.sendAsyncMessage("NetworkStats:Get:Return", + { id: msg.id, error: "Invalid connectionType", result: null }); return; } - if (!aError) { - aError = "Invalid connectionType"; + // If network is currently active we need to update the cached stats first before + // retrieving stats from the DB. + if (self._networks[aNetId].status == NETWORK_STATUS_READY) { + self.updateStats(aNetId, function onStatsUpdated(aResult, aMessage) { + debug("getstats for network " + network.id + " of type " + network.type); + debug("appId: " + appId + " from appManifestURL: " + appManifestURL); + + self.updateCachedStats(function onStatsUpdated(aResult, aMessage) { + self._db.find(function onStatsFound(aError, aResult) { + mm.sendAsyncMessage("NetworkStats:Get:Return", + { id: msg.id, error: aError, result: aResult }); + }, appId, serviceType, network, start, end, appManifestURL); + }); + }); + return; } - mm.sendAsyncMessage("NetworkStats:Get:Return", - { id: msg.id, error: aError, result: null }); + // Network not active, so no need to update + self._db.find(function onStatsFound(aError, aResult) { + mm.sendAsyncMessage("NetworkStats:Get:Return", + { id: msg.id, error: aError, result: aResult }); + }, appId, serviceType, network, start, end, appManifestURL); }); }, clearInterfaceStats: function clearInterfaceStats(mm, msg) { + let self = this; let network = msg.network; - let netId = this.getNetworkId(network.id, network.type); debug("clear stats for network " + network.id + " of type " + network.type); - if (!this._networks[netId]) { - // Check if network is valid but has not established a connection yet. If it is not - // found in RIL networks, it can be a SIM network used in the past having sample - // in the database. - let rilNetworks = this.getRilNetworks(); - if (!rilNetworks[netId]) { - // Check if it is available in the DB. - this._db.isNetworkAvailable(network, function(aError, aResult) { - if (aResult) { - this._db.clearInterfaceStats(network, function onDBCleared(aError, aResult) { - mm.sendAsyncMessage("NetworkStats:Clear:Return", - { id: msg.id, error: aError, result: aResult }); - }); - return; - } - - mm.sendAsyncMessage("NetworkStats:Clear:Return", - { id: msg.id, error: "Invalid networkType", result: null }); - }); + this.validateNetwork(network, function onValidateNetwork(aNetId) { + if (!aNetId) { + mm.sendAsyncMessage("NetworkStats:Clear:Return", + { id: msg.id, error: "Invalid connectionType", result: null }); return; } - } - this._db.clearInterfaceStats(network, function onDBCleared(aError, aResult) { - mm.sendAsyncMessage("NetworkStats:Clear:Return", - { id: msg.id, error: aError, result: aResult }); + self._db.clearInterfaceStats(network, function onDBCleared(aError, aResult) { + mm.sendAsyncMessage("NetworkStats:Clear:Return", + { id: msg.id, error: aError, result: aResult }); + }); }); }, clearDB: function clearDB(mm, msg) { let self = this; this._db.getAvailableNetworks(function onGetNetworks(aError, aResult) { if (aError) { mm.sendAsyncMessage("NetworkStats:ClearAll:Return", @@ -473,33 +488,46 @@ this.NetworkStatsService = { }); }, updateAllStats: function updateAllStats(aCallback) { // Update |cachedStats|. this.updateCachedStats(); let elements = []; - let lastElement; + let lastElement = null; // For each connectionType create an object containning the type // and the 'queueIndex', the 'queueIndex' is an integer representing // the index of a connection type in the global queue array. So, if // the connection type is already in the queue it is not appended again, // else it is pushed in 'elements' array, which later will be pushed to // the queue array. for (let netId in this._networks) { + if (this._networks[netId].status != NETWORK_STATUS_READY) { + continue; + } + lastElement = { netId: netId, queueIndex: this.updateQueueIndex(netId)}; if (lastElement.queueIndex == -1) { - elements.push({netId: lastElement.netId, callbacks: []}); + elements.push({ netId: lastElement.netId, callbacks: [] }); } } + if (!lastElement) { + // No elements need to be updated, probably because status is different than + // NETWORK_STATUS_READY. + if (aCallback) { + aCallback(true, "OK"); + } + return; + } + if (elements.length > 0) { // If length of elements is greater than 0, callback is set to // the last element. elements[elements.length - 1].callbacks.push(aCallback); this.updateQueue = this.updateQueue.concat(elements); } else { // Else, it means that all connection types are already in the queue to // be updated, so callback for this request is added to @@ -795,31 +823,39 @@ this.NetworkStatsService = { debug("===== LOG ====="); debug("There are " + aResult.length + " items"); debug(JSON.stringify(aResult)); }); }, getAlarms: function getAlarms(mm, msg) { + let self = this; let network = msg.data.network; let manifestURL = msg.data.manifestURL; - let netId = null; if (network) { - netId = this.getNetworkId(network.id, network.type); - if (!this._networks[netId]) { - mm.sendAsyncMessage("NetworkStats:GetAlarms:Return", - { id: msg.id, error: "InvalidInterface", result: null }); - return; - } + this.validateNetwork(network, function onValidateNetwork(aNetId) { + if (!aNetId) { + mm.sendAsyncMessage("NetworkStats:GetAlarms:Return", + { id: msg.id, error: "InvalidInterface", result: null }); + return; + } + + self._getAlarms(mm, msg, aNetId, manifestURL); + }); + return; } + this._getAlarms(mm, msg, null, manifestURL); + }, + + _getAlarms: function _getAlarms(mm, msg, aNetId, aManifestURL) { let self = this; - this._db.getAlarms(netId, manifestURL, function onCompleted(error, result) { + this._db.getAlarms(aNetId, aManifestURL, function onCompleted(error, result) { if (error) { mm.sendAsyncMessage("NetworkStats:GetAlarms:Return", { id: msg.id, error: error, result: result }); return; } let alarms = [] // NetworkStatsManager must return the network instead of the networkId. @@ -879,67 +915,69 @@ this.NetworkStatsService = { debug("Set alarm at " + threshold + " for " + JSON.stringify(network)); if (threshold < 0) { mm.sendAsyncMessage("NetworkStats:SetAlarm:Return", { id: msg.id, error: "InvalidThresholdValue", result: null }); return; } - let netId = this.getNetworkId(network.id, network.type); - if (!this._networks[netId]) { - mm.sendAsyncMessage("NetworkStats:SetAlarm:Return", - { id: msg.id, error: "InvalidiConnectionType", result: null }); - return; - } - - let newAlarm = { - id: null, - networkId: netId, - threshold: threshold, - absoluteThreshold: null, - startTime: options.startTime, - data: options.data, - pageURL: options.pageURL, - manifestURL: options.manifestURL - }; - let self = this; - this._updateThreshold(newAlarm, function onUpdate(error, _threshold) { - if (error) { + this.validateNetwork(network, function onValidateNetwork(aNetId) { + if (!aNetId) { mm.sendAsyncMessage("NetworkStats:SetAlarm:Return", - { id: msg.id, error: error, result: null }); + { id: msg.id, error: "InvalidiConnectionType", result: null }); return; } - newAlarm.absoluteThreshold = _threshold.absoluteThreshold; - self._db.addAlarm(newAlarm, function addSuccessCb(error, newId) { + let newAlarm = { + id: null, + networkId: aNetId, + threshold: threshold, + absoluteThreshold: null, + startTime: options.startTime, + data: options.data, + pageURL: options.pageURL, + manifestURL: options.manifestURL + }; + + self._updateThreshold(newAlarm, function onUpdate(error, _threshold) { if (error) { mm.sendAsyncMessage("NetworkStats:SetAlarm:Return", { id: msg.id, error: error, result: null }); return; } - newAlarm.id = newId; - self._setAlarm(newAlarm, function onSet(error, success) { - mm.sendAsyncMessage("NetworkStats:SetAlarm:Return", - { id: msg.id, error: error, result: newId }); + newAlarm.absoluteThreshold = _threshold.absoluteThreshold; + self._db.addAlarm(newAlarm, function addSuccessCb(error, newId) { + if (error) { + mm.sendAsyncMessage("NetworkStats:SetAlarm:Return", + { id: msg.id, error: error, result: null }); + return; + } - if (error == "InvalidStateError") { - self._fireAlarm(newAlarm); - } + newAlarm.id = newId; + self._setAlarm(newAlarm, function onSet(error, success) { + mm.sendAsyncMessage("NetworkStats:SetAlarm:Return", + { id: msg.id, error: error, result: newId }); + + if (error == "InvalidStateError") { + self._fireAlarm(newAlarm); + } + }); }); }); }); }, _setAlarm: function _setAlarm(aAlarm, aCallback) { let currentAlarm = this._currentAlarms[aAlarm.networkId]; - if (Object.getOwnPropertyNames(currentAlarm).length !== 0 && - aAlarm.absoluteThreshold > currentAlarm.alarm.absoluteThreshold) { + if ((Object.getOwnPropertyNames(currentAlarm).length !== 0 && + aAlarm.absoluteThreshold > currentAlarm.alarm.absoluteThreshold) || + this._networks[aAlarm.networkId].status != NETWORK_STATUS_READY) { aCallback(null, true); return; } let self = this; this._updateThreshold(aAlarm, function onUpdate(aError, aThreshold) { if (aError) { @@ -980,16 +1018,24 @@ this.NetworkStatsService = { function onStatsFound(error, result) { if (error) { debug("Error getting stats for " + JSON.stringify(self._networks[aAlarm.networkId]) + ": " + error); aCallback(error, result); return; } + if (!result) { + // There are no stats for the network of the alarm, set them to default 0 in + // order to be able to calculate the offset, systemThreshold and + // absoluteThreshold. + result = { rxTotalBytes: 0, txTotalBytes: 0, + rxSystemBytes: 0, txSystemBytes: 0 }; + } + let offset = aAlarm.threshold - result.rxTotalBytes - result.txTotalBytes; // Alarm set to a threshold lower than current rx/tx bytes. if (offset <= 0) { aCallback("InvalidStateError", null); return; }
--- a/dom/network/tests/unit_stats/test_networkstats_service.js +++ b/dom/network/tests/unit_stats/test_networkstats_service.js @@ -1,13 +1,17 @@ /* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components; +const NETWORK_STATUS_READY = 0; +const NETWORK_STATUS_STANDBY = 1; +const NETWORK_STATUS_AWAY = 2; + function getNetworks(callback) { NetworkStatsService._db.getAvailableNetworks(function onGetNetworks(aError, aResult) { callback(aError, aResult); }); } add_test(function test_clearDB() { getNetworks(function onGetNetworks(error, result) { @@ -80,19 +84,28 @@ add_test(function test_updateQueueIndex( index = NetworkStatsService.updateQueueIndex(10); do_check_eq(index, -1); NetworkStatsService.updateQueue = []; run_next_test(); }); add_test(function test_updateAllStats() { + NetworkStatsService._networks[wifiId].status = NETWORK_STATUS_READY; NetworkStatsService.updateAllStats(function(success, msg) { do_check_eq(success, true); - run_next_test(); + NetworkStatsService._networks[wifiId].status = NETWORK_STATUS_STANDBY; + NetworkStatsService.updateAllStats(function(success, msg) { + do_check_eq(success, true); + NetworkStatsService._networks[wifiId].status = NETWORK_STATUS_AWAY; + NetworkStatsService.updateAllStats(function(success, msg) { + do_check_eq(success, true); + run_next_test(); + }); + }); }); }); add_test(function test_updateStats_ok() { getNetworkId(function onGetId(error, result) { do_check_eq(error, null); var netId = result; NetworkStatsService.updateStats(netId, function(success, msg){ @@ -184,16 +197,18 @@ add_test(function test_setAlarm_invalid_ threshold: -10000, absoluteThreshold: null, alarmStart: null, alarmEnd: null, data: null, pageURL: testPageURL, manifestURL: testManifestURL }; + NetworkStatsService._networks[wifiId].status = NETWORK_STATUS_READY; + NetworkStatsService._setAlarm(alarm, function onSet(error, result) { do_check_eq(error, "InvalidStateError"); run_next_test(); }); }); add_test(function test_fireAlarm() { // Add a fake alarm into database.
--- a/dom/payment/Payment.jsm +++ b/dom/payment/Payment.jsm @@ -88,19 +88,16 @@ let PaymentManager = { // information. let paymentRequests = []; let jwtTypes = []; for (let i in msg.jwts) { let pr = this.getPaymentRequestInfo(requestId, msg.jwts[i]); if (!pr) { continue; } - if (!(pr instanceof Ci.nsIDOMPaymentRequestInfo)) { - return; - } // We consider jwt type repetition an error. if (jwtTypes[pr.type]) { this.paymentFailed(requestId, "PAY_REQUEST_ERROR_DUPLICATED_JWT_TYPE"); return; } jwtTypes[pr.type] = true; paymentRequests.push(pr); @@ -337,27 +334,17 @@ let PaymentManager = { this.LOG("Payment provider uris must be https: " + provider.uri); } this.paymentFailed(aRequestId, "INTERNAL_ERROR_NON_HTTPS_PROVIDER_URI"); return true; } let pldRequest = payloadObject.request; - let request = Cc["@mozilla.org/payment/request-info;1"] - .createInstance(Ci.nsIDOMPaymentRequestInfo); - if (!request) { - this.paymentFailed(aRequestId, - "INTERNAL_ERROR_ERROR_CREATING_PAY_REQUEST"); - return true; - } - request.wrappedJSObject.init(aJwt, - payloadObject.typ, - provider.name); - return request; + return { jwt: aJwt, type: payloadObject.typ, providerName: provider.name }; }, showPaymentFlow: function showPaymentFlow(aRequestId, aPaymentProvider, aJwt) { let paymentFlowInfo = Cc["@mozilla.org/payment/flow-info;1"] .createInstance(Ci.nsIPaymentFlowInfo); paymentFlowInfo.uri = aPaymentProvider.uri;
--- a/dom/payment/Payment.manifest +++ b/dom/payment/Payment.manifest @@ -1,9 +1,6 @@ component {a920adc0-c36e-4fd0-8de0-aac1ac6ebbd0} Payment.js contract @mozilla.org/payment/content-helper;1 {a920adc0-c36e-4fd0-8de0-aac1ac6ebbd0} category JavaScript-navigator-property mozPay @mozilla.org/payment/content-helper;1 component {b8bce4e7-fbf0-4719-a634-b1bf9018657c} PaymentFlowInfo.js contract @mozilla.org/payment/flow-info;1 {b8bce4e7-fbf0-4719-a634-b1bf9018657c} - -component {0a58c67d-f003-48da-81d1-bd8f605f4b1c} PaymentRequestInfo.js -contract @mozilla.org/payment/request-info;1 {0a58c67d-f003-48da-81d1-bd8f605f4b1c}
deleted file mode 100644 --- a/dom/payment/PaymentRequestInfo.js +++ /dev/null @@ -1,41 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -"use strict"; - -const {classes: Cc, interfaces: Ci, utils: Cu} = Components; - -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); - -const PAYMENTREQUESTINFO_CID = - Components.ID("{0a58c67d-f003-48da-81d1-bd8f605f4b1c}"); - -// nsIDOMPaymentRequestInfo - -function PaymentRequestInfo() { - this.wrappedJSObject = this; -}; - -PaymentRequestInfo.prototype = { - QueryInterface: XPCOMUtils.generateQI([Ci.nsIDOMPaymentRequestInfo]), - classID: PAYMENTREQUESTINFO_CID, - classInfo: XPCOMUtils.generateCI({ - classID: PAYMENTREQUESTINFO_CID, - contractID: "@mozilla.org/payment/request-info;1", - classDescription: "Payment request information", - flags: Ci.nsIClassInfo.DOM_OBJECT, - interfaces: [Ci.nsIDOMPaymentRequestInfo] - }), - jwt: null, - type: null, - providerName: null, - - init: function init(aJwt, aType, aProviderName) { - this.jwt = aJwt; - this.type = aType; - this.providerName = aProviderName; - } -}; - -this.NSGetFactory = XPCOMUtils.generateNSGetFactory([PaymentRequestInfo]);
--- a/dom/payment/interfaces/moz.build +++ b/dom/payment/interfaces/moz.build @@ -1,15 +1,14 @@ # -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- # vim: set filetype=python: # 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/. XPIDL_SOURCES += [ - 'nsIDOMPaymentRequestInfo.idl', 'nsINavigatorPayment.idl', 'nsIPaymentFlowInfo.idl', 'nsIPaymentUIGlue.idl', ] XPIDL_MODULE = 'dom_payment'
deleted file mode 100644 --- a/dom/payment/interfaces/nsIDOMPaymentRequestInfo.idl +++ /dev/null @@ -1,19 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "nsISupports.idl" - -[scriptable, uuid(93462984-0e9a-4016-bdb4-a24a88c08a29)] -interface nsIDOMPaymentRequestInfo : nsISupports -{ - // Base64 encoded and digitally signed payment request. - readonly attribute DOMString jwt; - - // JWT type that identifies the payment provider owner of the payment request - // format. - readonly attribute DOMString type; - - // Payment provider name. - readonly attribute DOMString providerName; -};
--- a/dom/payment/moz.build +++ b/dom/payment/moz.build @@ -11,11 +11,10 @@ TEST_DIRS += ['tests'] EXTRA_JS_MODULES += [ 'Payment.jsm', ] EXTRA_COMPONENTS += [ 'Payment.js', 'Payment.manifest', 'PaymentFlowInfo.js', - 'PaymentRequestInfo.js', ]
--- a/gfx/layers/ipc/AsyncPanZoomController.cpp +++ b/gfx/layers/ipc/AsyncPanZoomController.cpp @@ -995,20 +995,16 @@ float AsyncPanZoomController::PanDistanc ReentrantMonitorAutoEnter lock(mMonitor); return NS_hypot(mX.PanDistance(), mY.PanDistance()); } const ScreenPoint AsyncPanZoomController::GetVelocityVector() { return ScreenPoint(mX.GetVelocity(), mY.GetVelocity()); } -const gfx::Point AsyncPanZoomController::GetAccelerationVector() { - return gfx::Point(mX.GetAccelerationFactor(), mY.GetAccelerationFactor()); -} - void AsyncPanZoomController::HandlePanningWithTouchAction(double aAngle, TouchBehaviorFlags aBehavior) { // Handling of cross sliding will need to be added in this method after touch-action released // enabled by default. if ((aBehavior & AllowedTouchBehavior::VERTICAL_PAN) && (aBehavior & AllowedTouchBehavior::HORIZONTAL_PAN)) { if (mX.Scrollable() && mY.Scrollable()) { if (IsCloseToHorizontal(aAngle, AXIS_LOCK_ANGLE)) { mY.SetAxisLocked(true); SetState(PANNING_LOCKED_X); @@ -1310,17 +1306,16 @@ EnlargeDisplayPortAlongAxis(float* aOutO double paintFactor = (gUsePaintDuration ? aEstimatedPaintDurationMillis : 50.0); *aOutOffset += (aVelocity * paintFactor * gVelocityBias); } /* static */ const CSSRect AsyncPanZoomController::CalculatePendingDisplayPort( const FrameMetrics& aFrameMetrics, const ScreenPoint& aVelocity, - const gfx::Point& aAcceleration, double aEstimatedPaintDuration) { // convert to milliseconds double estimatedPaintDurationMillis = aEstimatedPaintDuration * 1000; CSSRect compositionBounds = aFrameMetrics.CalculateCompositedRectInCssPixels(); CSSPoint scrollOffset = aFrameMetrics.mScrollOffset; CSSRect displayPort(scrollOffset, compositionBounds.Size()); @@ -1344,20 +1339,19 @@ const CSSRect AsyncPanZoomController::Ca EnlargeDisplayPortAlongAxis(&(displayPort.y), &(displayPort.height), estimatedPaintDurationMillis, velocity.y, gYStationarySizeMultiplier, gYSkateSizeMultiplier); CSSRect scrollableRect = aFrameMetrics.GetExpandedScrollableRect(); displayPort = displayPort.ForceInside(scrollableRect) - scrollOffset; APZC_LOG_FM(aFrameMetrics, - "Calculated displayport as (%f %f %f %f) from velocity (%f %f) acceleration (%f %f) paint time %f metrics", + "Calculated displayport as (%f %f %f %f) from velocity (%f %f) paint time %f metrics", displayPort.x, displayPort.y, displayPort.width, displayPort.height, - aVelocity.x, aVelocity.y, aAcceleration.x, aAcceleration.y, - (float)estimatedPaintDurationMillis); + aVelocity.x, aVelocity.y, (float)estimatedPaintDurationMillis); return displayPort; } void AsyncPanZoomController::ScheduleComposite() { if (mCompositorParent) { mCompositorParent->ScheduleRenderOnCompositorThread(); } @@ -1366,17 +1360,16 @@ void AsyncPanZoomController::ScheduleCom void AsyncPanZoomController::RequestContentRepaint() { RequestContentRepaint(mFrameMetrics); } void AsyncPanZoomController::RequestContentRepaint(FrameMetrics& aFrameMetrics) { aFrameMetrics.mDisplayPort = CalculatePendingDisplayPort(aFrameMetrics, GetVelocityVector(), - GetAccelerationVector(), mPaintThrottler.AverageDuration().ToSeconds()); // If we're trying to paint what we already think is painted, discard this // request since it's a pointless paint. CSSRect oldDisplayPort = mLastPaintRequestMetrics.mDisplayPort + mLastPaintRequestMetrics.mScrollOffset; CSSRect newDisplayPort = aFrameMetrics.mDisplayPort + aFrameMetrics.mScrollOffset; @@ -1742,17 +1735,16 @@ void AsyncPanZoomController::ZoomToRect( aRect.x = cssPageRect.width - rectAfterZoom.width; aRect.x = aRect.x > 0 ? aRect.x : 0; } endZoomToMetrics.mScrollOffset = aRect.TopLeft(); endZoomToMetrics.mDisplayPort = CalculatePendingDisplayPort(endZoomToMetrics, ScreenPoint(0,0), - gfx::Point(0,0), 0); StartAnimation(new ZoomAnimation( mFrameMetrics.mScrollOffset, mFrameMetrics.mZoom, endZoomToMetrics.mScrollOffset, endZoomToMetrics.mZoom));
--- a/gfx/layers/ipc/AsyncPanZoomController.h +++ b/gfx/layers/ipc/AsyncPanZoomController.h @@ -235,17 +235,16 @@ public: * Recalculates the displayport. Ideally, this should paint an area bigger * than the composite-to dimensions so that when you scroll down, you don't * checkerboard immediately. This includes a bunch of logic, including * algorithms to bias painting in the direction of the velocity. */ static const CSSRect CalculatePendingDisplayPort( const FrameMetrics& aFrameMetrics, const ScreenPoint& aVelocity, - const gfx::Point& aAcceleration, double aEstimatedPaintDuration); /** * Send an mozbrowserasyncscroll event. * *** The monitor must be held while calling this. */ void SendAsyncScrollEvent(); @@ -434,21 +433,16 @@ protected: float PanDistance(); /** * Gets a vector of the velocities of each axis. */ const ScreenPoint GetVelocityVector(); /** - * Gets a vector of the acceleration factors of each axis. - */ - const gfx::Point GetAccelerationVector(); - - /** * Gets a reference to the first touch point from a MultiTouchInput. This * gets only the first one and assumes the rest are either missing or not * relevant. */ ScreenIntPoint& GetFirstTouchScreenPoint(const MultiTouchInput& aEvent); /** * Sets the panning state basing on the pan direction angle and current touch-action value.
--- a/gfx/layers/ipc/Axis.cpp +++ b/gfx/layers/ipc/Axis.cpp @@ -29,32 +29,16 @@ namespace layers { static float gMaxEventAcceleration = 999.0f; /** * Amount of friction applied during flings. */ static float gFlingFriction = 0.002f; /** - * Threshold for velocity beneath which we turn off any acceleration we had - * during repeated flings. - */ -static float gVelocityThreshold = 0.14f; - -/** - * Amount of acceleration we multiply in each time the user flings in one - * direction. Every time they let go of the screen, we increase the acceleration - * by this amount raised to the power of the amount of times they have let go, - * times two (to make the curve steeper). This stops if the user lets go and we - * slow down enough, or if they put their finger down without moving it for a - * moment (or in the opposite direction). - */ -static float gAccelerationMultiplier = 1.125f; - -/** * When flinging, if the velocity goes below this number, we just stop the * animation completely. This is to prevent asymptotically approaching 0 * velocity and rerendering unnecessarily. */ static float gFlingStoppedThreshold = 0.01f; /** * Maximum size of velocity queue. The queue contains last N velocity records. @@ -62,18 +46,16 @@ static float gFlingStoppedThreshold = 0. * touch/mouse drivers misbehaviour. */ static uint32_t gMaxVelocityQueueSize = 5; static void ReadAxisPrefs() { Preferences::AddFloatVarCache(&gMaxEventAcceleration, "apz.max_event_acceleration", gMaxEventAcceleration); Preferences::AddFloatVarCache(&gFlingFriction, "apz.fling_friction", gFlingFriction); - Preferences::AddFloatVarCache(&gVelocityThreshold, "apz.velocity_threshold", gVelocityThreshold); - Preferences::AddFloatVarCache(&gAccelerationMultiplier, "apz.acceleration_multiplier", gAccelerationMultiplier); Preferences::AddFloatVarCache(&gFlingStoppedThreshold, "apz.fling_stopped_threshold", gFlingStoppedThreshold); Preferences::AddUintVarCache(&gMaxVelocityQueueSize, "apz.max_velocity_queue_size", gMaxVelocityQueueSize); } class ReadAxisPref MOZ_FINAL : public nsRunnable { public: NS_IMETHOD Run() { @@ -95,35 +77,25 @@ static void InitAxisPrefs() // We have to dispatch an event to the main thread to read the pref. NS_DispatchToMainThread(new ReadAxisPref()); } } Axis::Axis(AsyncPanZoomController* aAsyncPanZoomController) : mPos(0), mVelocity(0.0f), - mAcceleration(0), mAxisLocked(false), mAsyncPanZoomController(aAsyncPanZoomController) { InitAxisPrefs(); } void Axis::UpdateWithTouchAtDevicePoint(int32_t aPos, const TimeDuration& aTimeDelta) { float newVelocity = mAxisLocked ? 0 : (mPos - aPos) / aTimeDelta.ToMilliseconds(); - bool curVelocityBelowThreshold = fabsf(newVelocity) < gVelocityThreshold; - bool directionChange = (mVelocity > 0) != (newVelocity > 0); - - // If we've changed directions, or the current velocity threshold, stop any - // acceleration we've accumulated. - if (directionChange || curVelocityBelowThreshold) { - mAcceleration = 0; - } - mVelocity = newVelocity; mPos = aPos; // Keep last gMaxVelocityQueueSize or less velocities in the queue. mVelocityQueue.AppendElement(mVelocity); if (mVelocityQueue.Length() > gMaxVelocityQueueSize) { mVelocityQueue.RemoveElementAt(0); } @@ -140,65 +112,56 @@ float Axis::AdjustDisplacement(float aDi if (mAxisLocked) { aOverscrollAmountOut = 0; return 0; } if (aScrollingDisabled) { // Scrolling is disabled on this axis, stop scrolling. aOverscrollAmountOut = aDisplacement; - mAcceleration = 0; return 0; } - if (fabsf(mVelocity) < gVelocityThreshold) { - mAcceleration = 0; - } + float displacement = aDisplacement; - float accelerationFactor = GetAccelerationFactor(); - float displacement = aDisplacement * accelerationFactor; // If this displacement will cause an overscroll, throttle it. Can potentially // bring it to 0 even if the velocity is high. if (DisplacementWillOverscroll(displacement) != OVERSCROLL_NONE) { // No need to have a velocity along this axis anymore; it won't take us // anywhere, so we're just spinning needlessly. mVelocity = 0.0f; - mAcceleration = 0; aOverscrollAmountOut = DisplacementWillOverscrollAmount(displacement); displacement -= aOverscrollAmountOut; } return displacement; } float Axis::PanDistance() { return fabsf(mPos - mStartPos); } float Axis::PanDistance(float aPos) { return fabsf(aPos - mStartPos); } void Axis::EndTouch() { - mAcceleration++; - // Calculate the mean velocity and empty the queue. int count = mVelocityQueue.Length(); if (count) { mVelocity = 0; while (!mVelocityQueue.IsEmpty()) { mVelocity += mVelocityQueue[0]; mVelocityQueue.RemoveElementAt(0); } mVelocity /= count; } } void Axis::CancelTouch() { mVelocity = 0.0f; - mAcceleration = 0; while (!mVelocityQueue.IsEmpty()) { mVelocityQueue.RemoveElementAt(0); } } bool Axis::Scrollable() { if (mAxisLocked) { return false; @@ -297,20 +260,16 @@ float Axis::ScaleWillOverscrollAmount(fl } return 0; } float Axis::GetVelocity() { return mAxisLocked ? 0 : mVelocity; } -float Axis::GetAccelerationFactor() { - return powf(gAccelerationMultiplier, std::max(0, (mAcceleration - 4) * 3)); -} - float Axis::GetCompositionEnd() { return GetOrigin() + GetCompositionLength(); } float Axis::GetPageEnd() { return GetPageStart() + GetPageLength(); }
--- a/gfx/layers/ipc/Axis.h +++ b/gfx/layers/ipc/Axis.h @@ -65,22 +65,21 @@ public: * Notify this Axis that a touch has ended forcefully. Useful for stopping * flings when a user puts their finger down in the middle of one (i.e. to * stop a previous touch including its fling so that a new one can take its * place). */ void CancelTouch(); /** - * Takes a requested displacement to the position of this axis, and adjusts - * it to account for acceleration (which might increase the displacement), - * overscroll (which might decrease the displacement; this is to prevent the - * viewport from overscrolling the page rect), and axis locking (which might - * prevent any displacement from happening). If overscroll ocurred, its amount - * is written to |aOverscrollAmountOut|. + * Takes a requested displacement to the position of this axis, and adjusts it + * to account for overscroll (which might decrease the displacement; this is + * to prevent the viewport from overscrolling the page rect), and axis locking + * (which might prevent any displacement from happening). If overscroll + * ocurred, its amount is written to |aOverscrollAmountOut|. * The adjusted displacement is returned. * * aScrollingDisabled is used to indicate that no scrolling should happen * in this axis. This is used to implement overflow: hidden; */ float AdjustDisplacement(float aDisplacement, float& aOverscrollAmountOut, bool aScrollingDisabled); @@ -124,22 +123,16 @@ public: * overscrolling in the positive direction, whereas negative excess means * that it is overscrolling in the negative direction. If there is overscroll * in both directions, this returns 0; it assumes that you check * GetOverscroll() first. */ float GetExcess(); /** - * Gets the factor of acceleration applied to the velocity, based on the - * amount of flings that have been done successively. - */ - float GetAccelerationFactor(); - - /** * Gets the raw velocity of this axis at this moment. */ float GetVelocity(); /** * Gets the overscroll state of the axis given an additional displacement. * That is to say, if the given displacement is applied, this will tell you * whether or not it will overscroll, and in what direction. @@ -183,22 +176,16 @@ public: virtual float GetPointOffset(const CSSPoint& aPoint) = 0; virtual float GetRectLength(const CSSRect& aRect) = 0; virtual float GetRectOffset(const CSSRect& aRect) = 0; protected: int32_t mPos; int32_t mStartPos; float mVelocity; - // Acceleration is represented by an int, which is the power we raise a - // constant to and then multiply the velocity by whenever it is sampled. We do - // this only when we detect that the user wants to do a fast fling; that is, - // they are flinging multiple times in a row very quickly, probably trying to - // reach one of the extremes of the page. - int32_t mAcceleration; bool mAxisLocked; // Whether movement on this axis is locked. AsyncPanZoomController* mAsyncPanZoomController; nsTArray<float> mVelocityQueue; }; class AxisX : public Axis { public: AxisX(AsyncPanZoomController* mAsyncPanZoomController);
--- a/ipc/glue/ProtocolUtils.h +++ b/ipc/glue/ProtocolUtils.h @@ -17,16 +17,20 @@ #include "IPCMessageStart.h" #include "mozilla/Attributes.h" #include "mozilla/ipc/FileDescriptor.h" #include "mozilla/ipc/Shmem.h" #include "mozilla/ipc/Transport.h" #include "mozilla/ipc/MessageLink.h" #include "mozilla/LinkedList.h" +#if defined(ANDROID) && defined(DEBUG) +#include <android/log.h> +#endif + // WARNING: this takes into account the private, special-message-type // enum in ipc_channel.h. They need to be kept in sync. namespace { // XXX the max message ID is actually kuint32max now ... when this // changed, the assumptions of the special message IDs changed in that // they're not carving out messages from likely-unallocated space, but // rather carving out messages from the end of space allocated to // protocol 0. Oops! We can get away with this until protocol 0
--- a/ipc/ipdl/ipdl/lower.py +++ b/ipc/ipdl/ipdl/lower.py @@ -1820,50 +1820,66 @@ def _generateMessageClass(clsname, msgid ExprVar('IPC::Message::PRIORITY_NORMAL'), compression, ExprLiteral.String(prettyName) ]) ]) cls.addstmts([ ctor, Whitespace.NL ]) # generate a logging function # 'pfx' will be something like "[FooParent] sent" pfxvar = ExprVar('__pfx') - outfvar = ExprVar('__outf') + otherprocess = ExprVar('__otherProcess') + receiving = ExprVar('__receiving') logger = MethodDefn(MethodDecl( 'Log', params=([ Decl(Type('std::string', const=1, ref=1), pfxvar.name), - Decl(Type('FILE', ptr=True), outfvar.name) ]), + Decl(Type('base::ProcessHandle'), otherprocess.name), + Decl(Type('bool'), receiving.name) ]), const=1)) # TODO/cjones: allow selecting what information is printed to # the log msgvar = ExprVar('__logmsg') logger.addstmt(StmtDecl(Decl(Type('std::string'), msgvar.name))) def appendToMsg(thing): return StmtExpr(ExprCall(ExprSelect(msgvar, '.', 'append'), args=[ thing ])) logger.addstmts([ StmtExpr(ExprCall( ExprVar('StringAppendF'), args=[ ExprAddrOf(msgvar), - ExprLiteral.String('[time:%" PRId64 "][%d]'), + ExprLiteral.String('[time:%" PRId64 "][%d%s%d]'), ExprCall(ExprVar('PR_Now')), - ExprCall(ExprVar('base::GetCurrentProcId')) ])), + ExprCall(ExprVar('base::GetCurrentProcId')), + ExprConditional(receiving, ExprLiteral.String('<-'), + ExprLiteral.String('->')), + otherprocess ])), appendToMsg(pfxvar), appendToMsg(ExprLiteral.String(clsname +'(')), Whitespace.NL ]) # TODO turn this back on when string stuff is sorted logger.addstmt(appendToMsg(ExprLiteral.String('[TODO])\\n'))) + logger.addstmts([ + CppDirective('ifdef', 'ANDROID'), + StmtExpr(ExprCall( + ExprVar('__android_log_write'), + args=[ ExprVar('ANDROID_LOG_INFO'), + ExprLiteral.String('GeckoIPC'), + ExprCall(ExprSelect(msgvar, '.', 'c_str')) ])), + CppDirective('endif') + ]) + # and actually print the log message logger.addstmt(StmtExpr(ExprCall( ExprVar('fputs'), - args=[ ExprCall(ExprSelect(msgvar, '.', 'c_str')), outfvar ]))) + args=[ ExprCall(ExprSelect(msgvar, '.', 'c_str')), + ExprVar('stderr') ]))) cls.addstmt(logger) return cls ##-------------------------------------------------- class _ComputeTypeDeps(TypeVisitor): @@ -4924,17 +4940,17 @@ class _GenerateProtocolActorCode(ipdl.as sendok, sendstmts = self.sendBlocking(md, msgvar, replyvar, actorvar) method.addstmts( stmts + [ Whitespace.NL, StmtDecl(Decl(Type('Message'), replyvar.name)) ] + sendstmts) destmts = self.deserializeReply( - md, ExprAddrOf(replyvar), self.side, errfnSend) + md, ExprAddrOf(replyvar), self.side, errfnSend, actorvar) ifsendok = StmtIf(ExprLiteral.FALSE) ifsendok.addifstmts(destmts) ifsendok.addifstmts([ Whitespace.NL, StmtExpr(ExprAssn(sendok, ExprLiteral.FALSE, '&=')) ]) method.addstmt(ifsendok) if self.protocol.decl.type.hasReentrantDelete: @@ -5160,17 +5176,18 @@ class _GenerateProtocolActorCode(ipdl.as # are forwarding the message name (yuck) or making the # IPDL|*Channel abstraction leak more StmtExpr(ExprCall( ExprSelect( ExprCast(msgvar, Type('Message', ref=1), const=1), '.', 'set_name'), args=[ ExprLiteral.String(md.prettyMsgName(self.protocol.name +'::')) ])), - self.logMessage(md, md.msgCast(msgexpr), 'Received '), + self.logMessage(md, md.msgCast(msgexpr), 'Received ', + receiving=True), self.profilerLabel('Recv', md.decl.progname), Whitespace.NL ]) if 0 == len(md.params): return stmts start, decls, reads = 0, [], [] @@ -5195,20 +5212,20 @@ class _GenerateProtocolActorCode(ipdl.as msgexpr, ExprAddrOf(itervar), errfn, p.bareType(side).name) for p in md.params[start:] ] + [ self.endRead(msgvar, itervar) ])) return stmts - def deserializeReply(self, md, replyexpr, side, errfn): + def deserializeReply(self, md, replyexpr, side, errfn, actor=None): stmts = [ Whitespace.NL, self.logMessage(md, md.replyCast(replyexpr), - 'Received reply ') ] + 'Received reply ', actor, receiving=True) ] if 0 == len(md.returns): return stmts itervar = self.itervar stmts.extend( [ Whitespace.NL, StmtDecl(Decl(Type.VOIDPTR, itervar.name), init=ExprLiteral.NULL) ] @@ -5221,34 +5238,34 @@ class _GenerateProtocolActorCode(ipdl.as return stmts def sendAsync(self, md, msgexpr, actor=None): sendok = ExprVar('__sendok') return ( sendok, ([ Whitespace.NL, - self.logMessage(md, msgexpr, 'Sending '), + self.logMessage(md, msgexpr, 'Sending ', actor), self.profilerLabel('AsyncSend', md.decl.progname) ] + self.transition(md, 'out', actor) + [ Whitespace.NL, StmtDecl(Decl(Type.BOOL, sendok.name), init=ExprCall( ExprSelect(self.protocol.channelVar(actor), self.protocol.channelSel(), 'Send'), args=[ msgexpr ])) ]) ) def sendBlocking(self, md, msgexpr, replyexpr, actor=None): sendok = ExprVar('__sendok') return ( sendok, ([ Whitespace.NL, - self.logMessage(md, msgexpr, 'Sending '), + self.logMessage(md, msgexpr, 'Sending ', actor), self.profilerLabel('Send', md.decl.progname) ] + self.transition(md, 'out', actor) + [ Whitespace.NL, StmtDecl( Decl(Type.BOOL, sendok.name), init=ExprCall(ExprSelect(self.protocol.channelVar(actor), self.protocol.channelSel(), _sendPrefix(md.decl.type)), @@ -5307,23 +5324,24 @@ class _GenerateProtocolActorCode(ipdl.as params=md.makeCxxParams(paramsems='in', returnsems='out', side=self.side, implicit=implicit), warn_unused=(self.side == 'parent'), ret=Type.BOOL) if md.decl.type.isCtor(): decl.ret = md.actorDecl().bareType(self.side) return decl - def logMessage(self, md, msgptr, pfx): + def logMessage(self, md, msgptr, pfx, actor=None, receiving=False): actorname = _actorName(self.protocol.name, self.side) - return _ifLogging([ - StmtExpr(ExprCall( - ExprSelect(msgptr, '->', 'Log'), - args=[ ExprLiteral.String('['+ actorname +'] '+ pfx), - ExprVar('stderr') ])) ]) + + return _ifLogging([ StmtExpr(ExprCall( + ExprSelect(msgptr, '->', 'Log'), + args=[ ExprLiteral.String('['+ actorname +'] '+ pfx), + self.protocol.callOtherProcess(actor), + ExprLiteral.TRUE if receiving else ExprLiteral.FALSE ])) ]) def profilerLabel(self, tag, msgname): return StmtExpr(ExprCall(ExprVar('PROFILER_LABEL'), [ ExprLiteral.String('IPDL::' + self.protocol.name), ExprLiteral.String(tag + msgname) ])) def saveActorId(self, md): idvar = ExprVar('__id')
--- a/ipc/unixsocket/UnixSocket.cpp +++ b/ipc/unixsocket/UnixSocket.cpp @@ -169,16 +169,19 @@ public: /** * Consumer pointer. Non-thread safe RefPtr, so should only be manipulated * directly from main thread. All non-main-thread accesses should happen with * mImpl as container. */ RefPtr<UnixSocketConsumer> mConsumer; private: + + void FireSocketError(); + /** * libevent triggered functions that reads data from socket when available and * guarenteed non-blocking. Only to be called on IO thread. * * @param aFd File descriptor to read from */ virtual void OnFileCanReadWithoutBlocking(int aFd); @@ -482,126 +485,132 @@ void ShutdownSocketTask::Run() mImpl->ShutdownOnIOThread(); nsRefPtr<nsIRunnable> t(new DeleteInstanceRunnable<UnixSocketImpl>(mImpl)); nsresult rv = NS_DispatchToMainThread(t); NS_ENSURE_SUCCESS_VOID(rv); } void -UnixSocketImpl::Accept() +UnixSocketImpl::FireSocketError() { MOZ_ASSERT(!NS_IsMainThread()); - if (!mConnector) { - NS_WARNING("No connector object available!"); - return; - } + // Clean up watchers, statuses, fds + mReadWatcher.StopWatchingFileDescriptor(); + mWriteWatcher.StopWatchingFileDescriptor(); + mConnectionStatus = SOCKET_DISCONNECTED; + mFd.reset(-1); + + // Tell the main thread we've errored + nsRefPtr<OnSocketEventTask> t = + new OnSocketEventTask(this, OnSocketEventTask::CONNECT_ERROR); + NS_DispatchToMainThread(t); +} + +void +UnixSocketImpl::Accept() +{ + MOZ_ASSERT(!NS_IsMainThread()); + MOZ_ASSERT(mConnector); // This will set things we don't particularly care about, but it will hand // back the correct structure size which is what we do care about. if (!mConnector->CreateAddr(true, mAddrSize, mAddr, nullptr)) { NS_WARNING("Cannot create socket address!"); + FireSocketError(); return; } if (mFd.get() < 0) { mFd = mConnector->Create(); if (mFd.get() < 0) { + NS_WARNING("Cannot create socket fd!"); + FireSocketError(); return; } if (!SetSocketFlags()) { + NS_WARNING("Cannot set socket flags!"); + FireSocketError(); return; } if (bind(mFd.get(), (struct sockaddr*)&mAddr, mAddrSize)) { #ifdef DEBUG CHROMIUM_LOG("...bind(%d) gave errno %d", mFd.get(), errno); #endif + FireSocketError(); return; } if (listen(mFd.get(), 1)) { #ifdef DEBUG CHROMIUM_LOG("...listen(%d) gave errno %d", mFd.get(), errno); #endif + FireSocketError(); return; } if (!mConnector->SetUpListenSocket(mFd)) { NS_WARNING("Could not set up listen socket!"); - nsRefPtr<OnSocketEventTask> t = - new OnSocketEventTask(this, OnSocketEventTask::CONNECT_ERROR); - NS_DispatchToMainThread(t); - mConnectionStatus = SOCKET_DISCONNECTED; + FireSocketError(); return; } } SetUpIO(); } void UnixSocketImpl::Connect() { MOZ_ASSERT(!NS_IsMainThread()); - - if (!mConnector) { - NS_WARNING("No connector object available!"); - return; - } + MOZ_ASSERT(mConnector); if (mFd.get() < 0) { mFd = mConnector->Create(); if (mFd.get() < 0) { + NS_WARNING("Cannot create socket fd!"); + FireSocketError(); return; } } int ret; if (!mConnector->CreateAddr(false, mAddrSize, mAddr, mAddress.get())) { NS_WARNING("Cannot create socket address!"); + FireSocketError(); return; } // Select non-blocking IO. if (-1 == fcntl(mFd.get(), F_SETFL, O_NONBLOCK)) { - nsRefPtr<OnSocketEventTask> t = - new OnSocketEventTask(this, OnSocketEventTask::CONNECT_ERROR); - NS_DispatchToMainThread(t); - mConnectionStatus = SOCKET_DISCONNECTED; + NS_WARNING("Cannot set nonblock!"); + FireSocketError(); return; } ret = connect(mFd.get(), (struct sockaddr*)&mAddr, mAddrSize); if (ret) { if (errno == EINPROGRESS) { // Select blocking IO again, since we've now at least queue'd the connect // as nonblock. int current_opts = fcntl(mFd.get(), F_GETFL, 0); if (-1 == current_opts) { NS_WARNING("Cannot get socket opts!"); - mFd.reset(-1); - nsRefPtr<OnSocketEventTask> t = - new OnSocketEventTask(this, OnSocketEventTask::CONNECT_ERROR); - NS_DispatchToMainThread(t); - mConnectionStatus = SOCKET_DISCONNECTED; + FireSocketError(); return; } if (-1 == fcntl(mFd.get(), F_SETFL, current_opts & ~O_NONBLOCK)) { NS_WARNING("Cannot set socket opts to blocking!"); - mFd.reset(-1); - nsRefPtr<OnSocketEventTask> t = - new OnSocketEventTask(this, OnSocketEventTask::CONNECT_ERROR); - NS_DispatchToMainThread(t); - mConnectionStatus = SOCKET_DISCONNECTED; + FireSocketError(); return; } // Set up a write watch to make sure we receive the connect signal MessageLoopForIO::current()->WatchFileDescriptor( mFd.get(), false, MessageLoopForIO::WATCH_WRITE, @@ -611,30 +620,29 @@ UnixSocketImpl::Connect() #ifdef DEBUG CHROMIUM_LOG("UnixSocket Connection delayed!"); #endif return; } #if DEBUG CHROMIUM_LOG("Socket connect errno=%d\n", errno); #endif - mFd.reset(-1); - nsRefPtr<OnSocketEventTask> t = - new OnSocketEventTask(this, OnSocketEventTask::CONNECT_ERROR); - NS_DispatchToMainThread(t); - mConnectionStatus = SOCKET_DISCONNECTED; + FireSocketError(); return; } if (!SetSocketFlags()) { + NS_WARNING("Cannot set socket flags!"); + FireSocketError(); return; } if (!mConnector->SetUp(mFd)) { NS_WARNING("Could not set up socket!"); + FireSocketError(); return; } nsRefPtr<OnSocketEventTask> t = new OnSocketEventTask(this, OnSocketEventTask::CONNECT_SUCCESS); NS_DispatchToMainThread(t); mConnectionStatus = SOCKET_CONNECTED; @@ -857,40 +865,29 @@ UnixSocketImpl::OnFileCanWriteWithoutBlo } } else if (mConnectionStatus == SOCKET_CONNECTING) { int error, ret; socklen_t len = sizeof(error); ret = getsockopt(mFd.get(), SOL_SOCKET, SO_ERROR, &error, &len); if (ret || error) { NS_WARNING("getsockopt failure on async socket connect!"); - mFd.reset(-1); - nsRefPtr<OnSocketEventTask> t = - new OnSocketEventTask(this, OnSocketEventTask::CONNECT_ERROR); - NS_DispatchToMainThread(t); - mConnectionStatus = SOCKET_DISCONNECTED; + FireSocketError(); return; } if (!SetSocketFlags()) { - mFd.reset(-1); - nsRefPtr<OnSocketEventTask> t = - new OnSocketEventTask(this, OnSocketEventTask::CONNECT_ERROR); - NS_DispatchToMainThread(t); - mConnectionStatus = SOCKET_DISCONNECTED; + NS_WARNING("Cannot set socket flags!"); + FireSocketError(); return; } if (!mConnector->SetUp(mFd)) { NS_WARNING("Could not set up socket!"); - mFd.reset(-1); - nsRefPtr<OnSocketEventTask> t = - new OnSocketEventTask(this, OnSocketEventTask::CONNECT_ERROR); - NS_DispatchToMainThread(t); - mConnectionStatus = SOCKET_DISCONNECTED; + FireSocketError(); return; } nsRefPtr<OnSocketEventTask> t = new OnSocketEventTask(this, OnSocketEventTask::CONNECT_SUCCESS); NS_DispatchToMainThread(t); mConnectionStatus = SOCKET_CONNECTED;
--- a/mobile/android/installer/package-manifest.in +++ b/mobile/android/installer/package-manifest.in @@ -580,17 +580,16 @@ bin/components/@DLL_PREFIX@nkgnomevfs@DL @BINPATH@/components/NSSDialogService.js @BINPATH@/components/PromptService.js @BINPATH@/components/SessionStore.js @BINPATH@/components/Sidebar.js @BINPATH@/components/Snippets.js @BINPATH@/components/Payment.js @BINPATH@/components/PaymentFlowInfo.js -@BINPATH@/components/PaymentRequestInfo.js @BINPATH@/components/Payment.manifest @BINPATH@/components/PaymentsUI.js #ifdef MOZ_SAFE_BROWSING @BINPATH@/components/SafeBrowsing.jsm #endif @BINPATH@/components/XPIDialogService.js @BINPATH@/components/browsercomps.xpt
--- a/netwerk/protocol/rtsp/rtsp/ARTSPConnection.cpp +++ b/netwerk/protocol/rtsp/rtsp/ARTSPConnection.cpp @@ -309,17 +309,17 @@ void ARTSPConnection::onConnect(const sp } close(mSocket); mSocket = -1; } else { reply->setInt32("result", OK); mState = CONNECTED; mNextCSeq = 1; - postReceiveReponseEvent(); + postReceiveResponseEvent(); } reply->post(); } void ARTSPConnection::performDisconnect() { if (mUIDValid) { HTTPBase::UnRegisterSocketUserTag(mSocket); @@ -411,17 +411,17 @@ void ARTSPConnection::onCompleteConnecti } close(mSocket); mSocket = -1; } else { reply->setInt32("result", OK); mState = CONNECTED; mNextCSeq = 1; - postReceiveReponseEvent(); + postReceiveResponseEvent(); } reply->post(); } void ARTSPConnection::onSendRequest(const sp<AMessage> &msg) { sp<AMessage> reply; CHECK(msg->findMessage("reply", &reply)); @@ -506,42 +506,42 @@ void ARTSPConnection::onReceiveResponse( FD_SET(mSocket, &rs); int res = select(mSocket + 1, &rs, NULL, NULL, &tv); CHECK_GE(res, 0); if (res == 1) { MakeSocketBlocking(mSocket, true); - bool success = receiveRTSPReponse(); + bool success = receiveRTSPResponse(); MakeSocketBlocking(mSocket, false); if (!success) { // Something horrible, irreparable has happened. flushPendingRequests(); return; } } - postReceiveReponseEvent(); + postReceiveResponseEvent(); } void ARTSPConnection::flushPendingRequests() { for (size_t i = 0; i < mPendingRequests.size(); ++i) { sp<AMessage> reply = mPendingRequests.valueAt(i); reply->setInt32("result", -ECONNABORTED); reply->post(); } mPendingRequests.clear(); } -void ARTSPConnection::postReceiveReponseEvent() { +void ARTSPConnection::postReceiveResponseEvent() { if (mReceiveResponseEventPending) { return; } sp<AMessage> msg = new AMessage(kWhatReceiveResponse, id()); msg->post(); mReceiveResponseEventPending = true; @@ -616,17 +616,17 @@ sp<ABuffer> ARTSPConnection::receiveBina return buffer; } static bool IsRTSPVersion(const AString &s) { return s == "RTSP/1.0"; } -bool ARTSPConnection::receiveRTSPReponse() { +bool ARTSPConnection::receiveRTSPResponse() { AString statusLine; if (!receiveLine(&statusLine)) { return false; } if (statusLine == "$") { sp<ABuffer> buffer = receiveBinaryData();
--- a/netwerk/protocol/rtsp/rtsp/ARTSPConnection.h +++ b/netwerk/protocol/rtsp/rtsp/ARTSPConnection.h @@ -97,20 +97,20 @@ private: void onConnect(const sp<AMessage> &msg); void onDisconnect(const sp<AMessage> &msg); void onCompleteConnection(const sp<AMessage> &msg); void onSendRequest(const sp<AMessage> &msg); void onReceiveResponse(); void flushPendingRequests(); - void postReceiveReponseEvent(); + void postReceiveResponseEvent(); // Return false iff something went unrecoverably wrong. - bool receiveRTSPReponse(); + bool receiveRTSPResponse(); status_t receive(void *data, size_t size); bool receiveLine(AString *line); sp<ABuffer> receiveBinaryData(); bool notifyResponseListener(const sp<ARTSPResponse> &response); bool parseAuthMethod(const sp<ARTSPResponse> &response); void addAuthentication(AString *request);
--- a/testing/mochitest/b2g.json +++ b/testing/mochitest/b2g.json @@ -354,16 +354,17 @@ "dom/tests/mochitest/localstorage/test_localStorageBase.html":"no storage chrome event received", "dom/tests/mochitest/localstorage/test_localStorageOriginsSchemaDiffs.html":"needs https support", "dom/tests/mochitest/localstorage/test_localStorageQuota.html":"needs https support", "dom/tests/mochitest/localstorage/test_localStorageQuotaSessionOnly.html":"needs https support", "dom/tests/mochitest/localstorage/test_localStorageQuotaSessionOnly2.html":"needs https support", "dom/tests/mochitest/sessionstorage/test_cookieSession.html":"4 failures", "dom/tests/mochitest/sessionstorage/test_sessionStorageBase.html":"no storage chrome event received", "dom/tests/mochitest/sessionstorage/test_sessionStorageBaseSessionOnly.html":"bug 967737", + "dom/tests/mochitest/sessionstorage/test_sessionStorageClone.html":"bug 968051", "dom/tests/mochitest/sessionstorage/test_sessionStorageHttpHttps.html":"needs https to work", "dom/tests/mochitest/pointerlock/test_pointerlock-api.html":"window.open focus issues (using fullscreen)", "dom/tests/mochitest/webapps/test_bug_779982.html":"", "dom/tests/mochitest/whatwg/test_postMessage_closed.html":"bug 894914 - wrong data - got FAIL, expected message", "dom/workers/test/test_suspend.html":"test timed out, might need more time", "dom/workers/test/test_xhr_parameters.html":"",