зеркало из https://github.com/mozilla/gecko-dev.git
Merge m-c to inbound, a=merge
This commit is contained in:
Коммит
2b2a2c426b
|
@ -165,6 +165,8 @@ UpdatePrompt.prototype = {
|
|||
},
|
||||
_pendingUpdateAvailablePackageInfo: null,
|
||||
_isPendingUpdateReady: false,
|
||||
_updateErrorQueue: [ ],
|
||||
_receivedUpdatePromptReady: false,
|
||||
|
||||
// nsISystemUpdateProvider
|
||||
checkForUpdate: function() {
|
||||
|
@ -320,6 +322,19 @@ UpdatePrompt.prototype = {
|
|||
this.waitForIdle();
|
||||
},
|
||||
|
||||
storeUpdateError: function UP_storeUpdateError(aUpdate) {
|
||||
log("Storing update error for later use");
|
||||
this._updateErrorQueue.push(aUpdate);
|
||||
},
|
||||
|
||||
sendStoredUpdateError: function UP_sendStoredUpdateError() {
|
||||
log("Sending stored update error");
|
||||
this._updateErrorQueue.forEach(aUpdate => {
|
||||
this.sendUpdateEvent("update-error", aUpdate);
|
||||
});
|
||||
this._updateErrorQueue = [ ];
|
||||
},
|
||||
|
||||
showUpdateError: function UP_showUpdateError(aUpdate) {
|
||||
log("Update error, state: " + aUpdate.state + ", errorCode: " +
|
||||
aUpdate.errorCode);
|
||||
|
@ -327,7 +342,12 @@ UpdatePrompt.prototype = {
|
|||
this._systemUpdateListener.onError("update-error: " + aUpdate.errorCode + " " + aUpdate.statusText);
|
||||
}
|
||||
|
||||
this.sendUpdateEvent("update-error", aUpdate);
|
||||
if (!this._receivedUpdatePromptReady) {
|
||||
this.storeUpdateError(aUpdate);
|
||||
} else {
|
||||
this.sendUpdateEvent("update-error", aUpdate);
|
||||
}
|
||||
|
||||
this.setUpdateStatus(aUpdate.statusText);
|
||||
},
|
||||
|
||||
|
@ -601,6 +621,10 @@ UpdatePrompt.prototype = {
|
|||
case "update-prompt-apply-result":
|
||||
this.handleApplyPromptResult(detail);
|
||||
break;
|
||||
case "update-prompt-ready":
|
||||
this._receivedUpdatePromptReady = true;
|
||||
this.sendStoredUpdateError();
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<project name="platform_build" path="build" remote="b2g" revision="8d83715f08b7849f16a0dfc88f78d5c3a89c0a54">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="87f5c9d55ab6a77dcfa48a3f3a8b4f5016f3c657"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="0b934d06c04adff2cd9bdd0bc204f974a18b710f"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="fake-qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="939b377d55a2f081d94029a30a75d05e5a20daf3"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="7938df689aa87769fad3f2cf9097fb4ecb106a43"/>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<project name="platform_build" path="build" remote="b2g" revision="8d83715f08b7849f16a0dfc88f78d5c3a89c0a54">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="87f5c9d55ab6a77dcfa48a3f3a8b4f5016f3c657"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="0b934d06c04adff2cd9bdd0bc204f974a18b710f"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="fake-qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="939b377d55a2f081d94029a30a75d05e5a20daf3"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="7938df689aa87769fad3f2cf9097fb4ecb106a43"/>
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
<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="87f5c9d55ab6a77dcfa48a3f3a8b4f5016f3c657"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="0b934d06c04adff2cd9bdd0bc204f974a18b710f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="7938df689aa87769fad3f2cf9097fb4ecb106a43"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="4ace9aaee0e048dfda11bb787646c59982a3dc80"/>
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
</project>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="87f5c9d55ab6a77dcfa48a3f3a8b4f5016f3c657"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="0b934d06c04adff2cd9bdd0bc204f974a18b710f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="7938df689aa87769fad3f2cf9097fb4ecb106a43"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="31a7849fe9a8b743d6f5e5facc212f0ef9d57499"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="25554535ee69d4c0c24a51f6a55bbabe5cb0a6b8"/>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<project name="platform_build" path="build" remote="b2g" revision="8d83715f08b7849f16a0dfc88f78d5c3a89c0a54">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="87f5c9d55ab6a77dcfa48a3f3a8b4f5016f3c657"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="0b934d06c04adff2cd9bdd0bc204f974a18b710f"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="7938df689aa87769fad3f2cf9097fb4ecb106a43"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<project name="platform_build" path="build" remote="b2g" revision="c9d4fe680662ee44a4bdea42ae00366f5df399cf">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="87f5c9d55ab6a77dcfa48a3f3a8b4f5016f3c657"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="0b934d06c04adff2cd9bdd0bc204f974a18b710f"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="7938df689aa87769fad3f2cf9097fb4ecb106a43"/>
|
||||
<project name="librecovery" path="librecovery" remote="b2g" revision="1b3591a50ed352fc6ddb77462b7b35d0bfa555a3"/>
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
<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="87f5c9d55ab6a77dcfa48a3f3a8b4f5016f3c657"/>
|
||||
<project name="gaia.git" path="gaia" remote="mozillaorg" revision="0b934d06c04adff2cd9bdd0bc204f974a18b710f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="7938df689aa87769fad3f2cf9097fb4ecb106a43"/>
|
||||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="platform_hardware_ril" path="hardware/ril" remote="b2g" revision="4ace9aaee0e048dfda11bb787646c59982a3dc80"/>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<project name="platform_build" path="build" remote="b2g" revision="8d83715f08b7849f16a0dfc88f78d5c3a89c0a54">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="87f5c9d55ab6a77dcfa48a3f3a8b4f5016f3c657"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="0b934d06c04adff2cd9bdd0bc204f974a18b710f"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="fake-qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="939b377d55a2f081d94029a30a75d05e5a20daf3"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="7938df689aa87769fad3f2cf9097fb4ecb106a43"/>
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
{
|
||||
"git": {
|
||||
"git_revision": "87f5c9d55ab6a77dcfa48a3f3a8b4f5016f3c657",
|
||||
"git_revision": "0b934d06c04adff2cd9bdd0bc204f974a18b710f",
|
||||
"remote": "https://git.mozilla.org/releases/gaia.git",
|
||||
"branch": ""
|
||||
},
|
||||
"revision": "9504a3c857fe2aa486a6cbbafd1a0007879fbb14",
|
||||
"revision": "dee47434923493d57f151448eec00f793f113bfd",
|
||||
"repo_path": "integration/gaia-central"
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<project name="platform_build" path="build" remote="b2g" revision="8d83715f08b7849f16a0dfc88f78d5c3a89c0a54">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="87f5c9d55ab6a77dcfa48a3f3a8b4f5016f3c657"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="0b934d06c04adff2cd9bdd0bc204f974a18b710f"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="fake-qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="939b377d55a2f081d94029a30a75d05e5a20daf3"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="7938df689aa87769fad3f2cf9097fb4ecb106a43"/>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
<project name="rilproxy" path="rilproxy" remote="b2g" revision="5ef30994f4778b4052e58a4383dbe7890048c87e"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="fake-qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="939b377d55a2f081d94029a30a75d05e5a20daf3"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="87f5c9d55ab6a77dcfa48a3f3a8b4f5016f3c657"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="0b934d06c04adff2cd9bdd0bc204f974a18b710f"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="7938df689aa87769fad3f2cf9097fb4ecb106a43"/>
|
||||
<project name="moztt" path="external/moztt" remote="b2g" revision="31a7849fe9a8b743d6f5e5facc212f0ef9d57499"/>
|
||||
<project name="apitrace" path="external/apitrace" remote="apitrace" revision="25554535ee69d4c0c24a51f6a55bbabe5cb0a6b8"/>
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
<project name="platform_build" path="build" remote="b2g" revision="c9d4fe680662ee44a4bdea42ae00366f5df399cf">
|
||||
<copyfile dest="Makefile" src="core/root.mk"/>
|
||||
</project>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="87f5c9d55ab6a77dcfa48a3f3a8b4f5016f3c657"/>
|
||||
<project name="gaia" path="gaia" remote="mozillaorg" revision="0b934d06c04adff2cd9bdd0bc204f974a18b710f"/>
|
||||
<project name="fake-libdvm" path="dalvik" remote="b2g" revision="d50ae982b19f42f0b66d08b9eb306be81687869f"/>
|
||||
<project name="fake-qemu-kernel" path="prebuilts/qemu-kernel" remote="b2g" revision="939b377d55a2f081d94029a30a75d05e5a20daf3"/>
|
||||
<project name="gonk-misc" path="gonk-misc" remote="b2g" revision="7938df689aa87769fad3f2cf9097fb4ecb106a43"/>
|
||||
|
|
|
@ -21,15 +21,15 @@
|
|||
:root {
|
||||
--backbutton-urlbar-overlap: 6px;
|
||||
|
||||
--toolbarbutton-hover-background: hsla(0,0%,100%,.3) linear-gradient(hsla(0,0%,100%,.7), hsla(0,0%,100%,.2));
|
||||
--toolbarbutton-hover-boxshadow: 0 1px 0 hsla(0,0%,100%,.3) inset, 0 0 0 1px hsla(0,0%,100%,.2) inset, 0 1px 0 hsla(0,0%,0%,.03);
|
||||
--toolbarbutton-hover-bordercolor: rgb(154,154,154);
|
||||
--toolbarbutton-hover-background: rgba(255,255,255,.5) linear-gradient(rgba(255,255,255,.5), transparent);
|
||||
--toolbarbutton-hover-bordercolor: rgba(0,0,0,.25);
|
||||
--toolbarbutton-hover-boxshadow: none;
|
||||
|
||||
--toolbarbutton-active-boxshadow: 0 1px 1px hsla(0,0%,0%,.1) inset, 0 0 1px hsla(0,0%,0%,.3) inset;
|
||||
--toolbarbutton-active-bordercolor: rgb(154,154,154);
|
||||
--toolbarbutton-active-background: rgba(154,154,154,.5) linear-gradient(hsla(0,0%,100%,.7), hsla(0,0%,100%,.4));
|
||||
--toolbarbutton-active-background: rgba(154,154,154,.5) linear-gradient(rgba(255,255,255,.7), rgba(255,255,255,.4));
|
||||
--toolbarbutton-active-bordercolor: rgba(0,0,0,.3);
|
||||
--toolbarbutton-active-boxshadow: 0 1px 1px rgba(0,0,0,.1) inset, 0 0 1px rgba(0,0,0,.3) inset;
|
||||
|
||||
--toolbarbutton-checkedhover-backgroundcolor: rgba(154,154,154,.15);
|
||||
--toolbarbutton-checkedhover-backgroundcolor: rgba(200,200,200,.5);
|
||||
|
||||
--identity-box-verified-background-color: #fff;
|
||||
|
||||
|
@ -626,8 +626,7 @@ toolbarbutton[constrain-size="true"][cui-areatype="toolbar"] > .toolbarbutton-ba
|
|||
:-moz-any(#TabsToolbar, #nav-bar) .toolbarbutton-1:not([disabled=true]):hover > .toolbarbutton-badge-stack,
|
||||
:-moz-any(#TabsToolbar, #nav-bar) .toolbarbutton-1:not([disabled=true]):hover > .toolbarbutton-icon {
|
||||
background: var(--toolbarbutton-hover-background);
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
background-clip: padding-box;
|
||||
border-color: var(--toolbarbutton-hover-bordercolor);
|
||||
box-shadow: var(--toolbarbutton-hover-boxshadow);
|
||||
}
|
||||
|
@ -644,9 +643,8 @@ toolbarbutton[constrain-size="true"][cui-areatype="toolbar"] > .toolbarbutton-ba
|
|||
:-moz-any(#TabsToolbar, #nav-bar) .toolbarbutton-1:not([disabled=true]):-moz-any([open],[checked],:hover:active) > .toolbarbutton-badge-stack,
|
||||
:-moz-any(#TabsToolbar, #nav-bar) .toolbarbutton-1:not([disabled=true]):-moz-any([open],[checked],:hover:active) > .toolbarbutton-icon {
|
||||
background: var(--toolbarbutton-active-background);
|
||||
background-clip: padding-box;
|
||||
box-shadow: var(--toolbarbutton-active-boxshadow);
|
||||
border-width: 1px;
|
||||
border-style: solid;
|
||||
border-color: var(--toolbarbutton-active-bordercolor);
|
||||
transition-duration: 10ms;
|
||||
}
|
||||
|
|
|
@ -14,10 +14,14 @@
|
|||
#include "ObexBase.h"
|
||||
|
||||
#include "mozilla/dom/BluetoothMapParametersBinding.h"
|
||||
#include "mozilla/dom/ipc/BlobParent.h"
|
||||
#include "mozilla/dom/File.h"
|
||||
|
||||
#include "mozilla/RefPtr.h"
|
||||
#include "mozilla/Services.h"
|
||||
#include "mozilla/StaticPtr.h"
|
||||
#include "nsAutoPtr.h"
|
||||
#include "nsIInputStream.h"
|
||||
#include "nsIObserver.h"
|
||||
#include "nsIObserverService.h"
|
||||
|
||||
|
@ -567,6 +571,75 @@ BluetoothMapSmsManager::ReplyToPut()
|
|||
SendMasObexData(req, ObexResponseCode::Success, index);
|
||||
}
|
||||
|
||||
bool
|
||||
BluetoothMapSmsManager::ReplyToFolderListing(long aMasId,
|
||||
const nsAString& aFolderlists)
|
||||
{
|
||||
// TODO: Implement this for future Email support
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
BluetoothMapSmsManager::ReplyToMessagesListing(BlobParent* aActor,
|
||||
long aMasId,
|
||||
bool aNewMessage,
|
||||
const nsAString& aTimestamp,
|
||||
int aSize)
|
||||
{
|
||||
nsRefPtr<BlobImpl> impl = aActor->GetBlobImpl();
|
||||
nsRefPtr<Blob> blob = Blob::Create(nullptr, impl);
|
||||
|
||||
return ReplyToMessagesListing(blob.get(), aMasId, aNewMessage, aTimestamp,
|
||||
aSize);
|
||||
}
|
||||
|
||||
bool
|
||||
BluetoothMapSmsManager::ReplyToMessagesListing(Blob* aBlob, long aMasId,
|
||||
bool aNewMessage,
|
||||
const nsAString& aTimestamp,
|
||||
int aSize)
|
||||
{
|
||||
// TODO: Implement in Bug 1211769
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
BluetoothMapSmsManager::ReplyToGetMessage(BlobParent* aActor, long aMasId)
|
||||
{
|
||||
nsRefPtr<BlobImpl> impl = aActor->GetBlobImpl();
|
||||
nsRefPtr<Blob> blob = Blob::Create(nullptr, impl);
|
||||
|
||||
return ReplyToGetMessage(blob.get(), aMasId);
|
||||
}
|
||||
|
||||
bool
|
||||
BluetoothMapSmsManager::ReplyToGetMessage(Blob* aBlob, long aMasId)
|
||||
{
|
||||
// TODO: Implement in Bug 1211769
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
BluetoothMapSmsManager::ReplyToSetMessageStatus(long aMasId, bool aStatus)
|
||||
{
|
||||
// TODO: Implement in Bug 1211769
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
BluetoothMapSmsManager::ReplyToSendMessage(long aMasId, bool aStatus)
|
||||
{
|
||||
// TODO: Implement in Bug 1211769
|
||||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
BluetoothMapSmsManager::ReplyToMessageUpdate(long aMasId, bool aStatus)
|
||||
{
|
||||
// TODO: Implement in Bug 1211769
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothMapSmsManager::CreateMnsObexConnection()
|
||||
{
|
||||
|
@ -1003,7 +1076,7 @@ BluetoothMapSmsManager::HandleNotificationRegistration(
|
|||
void
|
||||
BluetoothMapSmsManager::HandleEventReport(const ObexHeaderSet& aHeader)
|
||||
{
|
||||
// TODO: Handle event report in Bug 1166666
|
||||
// TODO: Handle event report in Bug 1211769
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -14,6 +14,15 @@
|
|||
#include "BluetoothSocketObserver.h"
|
||||
#include "mozilla/ipc/SocketBase.h"
|
||||
|
||||
class nsIInputStream;
|
||||
|
||||
namespace mozilla {
|
||||
namespace dom {
|
||||
class Blob;
|
||||
class BlobParent;
|
||||
}
|
||||
}
|
||||
|
||||
BEGIN_BLUETOOTH_NAMESPACE
|
||||
|
||||
struct Map {
|
||||
|
@ -79,6 +88,104 @@ public:
|
|||
static BluetoothMapSmsManager* Get();
|
||||
bool Listen();
|
||||
|
||||
/**
|
||||
* Reply folder-listing object to the *IPC* 'folderlisting'
|
||||
*
|
||||
* @param aMasId [in] MAS id
|
||||
* @param aFolderlists [in] folder listing object
|
||||
*
|
||||
* @return true if the response packet has been packed correctly and started
|
||||
* to be sent to the remote device; false otherwise.
|
||||
*/
|
||||
bool ReplyToFolderListing(long aMasId, const nsAString& aFolderlists);
|
||||
|
||||
/**
|
||||
* Reply message-listing object to the *IPC* 'messageslisting'
|
||||
*
|
||||
* @param aActor [in] a blob actor containing message-listing objects
|
||||
* @param aMasId [in] MAS id
|
||||
* @param aNewMessage [in] indicate whether there are unread messages
|
||||
* @param aTimestamp [in] time stamp
|
||||
* @param aSize [in] total number of messages
|
||||
*
|
||||
* @return true if the response packet has been packed correctly and started
|
||||
* to be sent to the remote device; false otherwise.
|
||||
*/
|
||||
bool ReplyToMessagesListing(
|
||||
BlobParent* aActor, long aMasId, bool aNewMessage,
|
||||
const nsAString& aTimestamp, int aSize);
|
||||
|
||||
/**
|
||||
* Reply messages-listing object to the *in-process* 'messageslisting' request
|
||||
*
|
||||
* @param aBlob [in] a blob contained the vCard objects
|
||||
* @param aMasId [in] MAS id
|
||||
* @param aNewMessage [in] indicate whether there are unread messages
|
||||
* @param aTimestamp [in] time stamp
|
||||
* @param aSize [in] total number of messages
|
||||
*
|
||||
* @return true if the response packet has been packed correctly and started
|
||||
* to be sent to the remote device; false otherwise.
|
||||
*/
|
||||
bool ReplyToMessagesListing(
|
||||
Blob* aBlob, long aMasId, bool aNewMessage, const nsAString& aTimestamp,
|
||||
int aSize);
|
||||
|
||||
/**
|
||||
* Reply bMessage object to the *IPC* 'getmessage' request.
|
||||
*
|
||||
* @param aActor [in] a blob actor containing the bMessage object
|
||||
* @param aMasId [in] MAS id
|
||||
*
|
||||
* @return true if the response packet has been packed correctly and started
|
||||
* to be sent to the remote device; false otherwise.
|
||||
*/
|
||||
bool ReplyToGetMessage(BlobParent* aActor, long aMasId);
|
||||
|
||||
/**
|
||||
* Reply bMessage to the *in-process* 'getmessage' request.
|
||||
*
|
||||
* @param aBlob [in] a blob containing the bMessage object
|
||||
* @param aMasId [in] the number of vCard indexes in the blob
|
||||
*
|
||||
* @return true if the response packet has been packed correctly and started
|
||||
* to be sent to the remote device; false otherwise.
|
||||
*/
|
||||
bool ReplyToGetMessage(Blob* aBlob, long aMasId);
|
||||
|
||||
/**
|
||||
* Reply to the *IPC* 'setmessage' request.
|
||||
*
|
||||
* @param aMasId [in] MAS id
|
||||
* @param aStatus [in] success or failure
|
||||
*
|
||||
* @return true if the response packet has been packed correctly and started
|
||||
* to be sent to the remote device; false otherwise.
|
||||
*/
|
||||
bool ReplyToSetMessageStatus(long aMasId, bool aStatus);
|
||||
|
||||
/**
|
||||
* Reply to the *in-process* 'sendmessage' request.
|
||||
*
|
||||
* @param aMasId [in] MAS id
|
||||
* @param aStatus [in] success or failure
|
||||
*
|
||||
* @return true if the response packet has been packed correctly and started
|
||||
* to be sent to the remote device; false otherwise.
|
||||
*/
|
||||
bool ReplyToSendMessage(long aMasId, bool aStatus);
|
||||
|
||||
/**
|
||||
* Reply to the *in-process* 'messageupdate' request.
|
||||
*
|
||||
* @param aMasId [in] MAS id
|
||||
* @param aStatus [in] success or failure
|
||||
*
|
||||
* @return true if the response packet has been packed correctly and started
|
||||
* to be sent to the remote device; false otherwise.
|
||||
*/
|
||||
bool ReplyToMessageUpdate(long aMasId, bool aStatus);
|
||||
|
||||
protected:
|
||||
virtual ~BluetoothMapSmsManager();
|
||||
|
||||
|
|
|
@ -386,7 +386,13 @@ BluetoothPbapManager::SetPhoneBookPath(uint8_t flags,
|
|||
if (flags & 1) {
|
||||
// Go up 1 level
|
||||
if (!newPath.IsEmpty()) {
|
||||
newPath = StringHead(newPath, newPath.RFindChar('/'));
|
||||
int32_t lastSlashIdx = newPath.RFindChar('/');
|
||||
if (lastSlashIdx != -1) {
|
||||
newPath = StringHead(newPath, lastSlashIdx);
|
||||
} else {
|
||||
// The parent folder is root.
|
||||
newPath.AssignLiteral("");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
MOZ_ASSERT(aHeader.Has(ObexHeaderId::Name));
|
||||
|
@ -398,7 +404,9 @@ BluetoothPbapManager::SetPhoneBookPath(uint8_t flags,
|
|||
newPath.AssignLiteral("");
|
||||
} else {
|
||||
// Go down 1 level
|
||||
newPath.AppendLiteral("/");
|
||||
if (!newPath.IsEmpty()) {
|
||||
newPath.AppendLiteral("/");
|
||||
}
|
||||
newPath.Append(childFolderName);
|
||||
}
|
||||
}
|
||||
|
@ -430,6 +438,14 @@ BluetoothPbapManager::PullPhonebook(const ObexHeaderSet& aHeader)
|
|||
|
||||
nsString name;
|
||||
aHeader.GetName(name);
|
||||
|
||||
// Ensure the name of phonebook object is legal
|
||||
if (!IsLegalPhonebookName(name)) {
|
||||
BT_LOGR("Illegal phone book object name [%s]",
|
||||
NS_ConvertUTF16toUTF8(name).get());
|
||||
return ObexResponseCode::NotFound;
|
||||
}
|
||||
|
||||
AppendNamedValue(data, "name", name);
|
||||
|
||||
AppendNamedValueByTagId(aHeader, data, AppParameterTag::Format);
|
||||
|
@ -457,9 +473,17 @@ BluetoothPbapManager::PullvCardListing(const ObexHeaderSet& aHeader)
|
|||
|
||||
InfallibleTArray<BluetoothNamedValue> data;
|
||||
|
||||
nsString name;
|
||||
aHeader.GetName(name);
|
||||
AppendNamedValue(data, "name", name);
|
||||
nsString folderName;
|
||||
aHeader.GetName(folderName);
|
||||
|
||||
// Section 5.3.3 "Name", PBAP 1.2
|
||||
// ... PullvCardListing function uses relative paths. An empty name header may
|
||||
// be sent to retrieve the vCard Listing object of the current folder.
|
||||
nsString folderPath = mCurrentPath;
|
||||
if (!folderName.IsEmpty()) {
|
||||
folderPath += NS_LITERAL_STRING("/") + folderName;
|
||||
}
|
||||
AppendNamedValue(data, "name", folderPath);
|
||||
|
||||
AppendNamedValueByTagId(aHeader, data, AppParameterTag::Order);
|
||||
AppendNamedValueByTagId(aHeader, data, AppParameterTag::SearchValue);
|
||||
|
@ -600,19 +624,19 @@ BluetoothPbapManager::IsLegalPath(const nsAString& aPath)
|
|||
{
|
||||
static const char* sLegalPaths[] = {
|
||||
"", // root
|
||||
"/telecom",
|
||||
"/telecom/pb",
|
||||
"/telecom/ich",
|
||||
"/telecom/och",
|
||||
"/telecom/mch",
|
||||
"/telecom/cch",
|
||||
"/SIM1",
|
||||
"/SIM1/telecom",
|
||||
"/SIM1/telecom/pb",
|
||||
"/SIM1/telecom/ich",
|
||||
"/SIM1/telecom/och",
|
||||
"/SIM1/telecom/mch",
|
||||
"/SIM1/telecom/cch"
|
||||
"telecom",
|
||||
"telecom/pb",
|
||||
"telecom/ich",
|
||||
"telecom/och",
|
||||
"telecom/mch",
|
||||
"telecom/cch",
|
||||
"SIM1",
|
||||
"SIM1/telecom",
|
||||
"SIM1/telecom/pb",
|
||||
"SIM1/telecom/ich",
|
||||
"SIM1/telecom/och",
|
||||
"SIM1/telecom/mch",
|
||||
"SIM1/telecom/cch"
|
||||
};
|
||||
|
||||
NS_ConvertUTF16toUTF8 path(aPath);
|
||||
|
@ -625,6 +649,32 @@ BluetoothPbapManager::IsLegalPath(const nsAString& aPath)
|
|||
return false;
|
||||
}
|
||||
|
||||
bool
|
||||
BluetoothPbapManager::IsLegalPhonebookName(const nsAString& aName)
|
||||
{
|
||||
static const char* sLegalNames[] = {
|
||||
"telecom/pb.vcf",
|
||||
"telecom/ich.vcf",
|
||||
"telecom/och.vcf",
|
||||
"telecom/mch.vcf",
|
||||
"telecom/cch.vcf",
|
||||
"SIM1/telecom/pb.vcf",
|
||||
"SIM1/telecom/ich.vcf",
|
||||
"SIM1/telecom/och.vcf",
|
||||
"SIM1/telecom/mch.vcf",
|
||||
"SIM1/telecom/cch.vcf"
|
||||
};
|
||||
|
||||
NS_ConvertUTF16toUTF8 name(aName);
|
||||
for (uint8_t i = 0; i < MOZ_ARRAY_LENGTH(sLegalNames); i++) {
|
||||
if (!strcmp(name.get(), sLegalNames[i])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothPbapManager::AfterPbapConnected()
|
||||
{
|
||||
|
|
|
@ -157,11 +157,11 @@ private:
|
|||
InfallibleTArray<uint32_t> PackPropertiesMask(uint8_t* aData, int aSize);
|
||||
bool CompareHeaderTarget(const ObexHeaderSet& aHeader);
|
||||
bool IsLegalPath(const nsAString& aPath);
|
||||
bool IsLegalPhonebookName(const nsAString& aName);
|
||||
bool GetInputStreamFromBlob(Blob* aBlob);
|
||||
void AfterPbapConnected();
|
||||
void AfterPbapDisconnected();
|
||||
|
||||
|
||||
/**
|
||||
* Whether 'PhonebookSize' is required for the OBEX response
|
||||
*/
|
||||
|
|
|
@ -1721,6 +1721,143 @@ BluetoothServiceBluedroid::ReplyTovCardListing(
|
|||
DispatchReplySuccess(aRunnable);
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothServiceBluedroid::ReplyToMapFolderListing(
|
||||
long aMasId,
|
||||
const nsAString& aFolderlists,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
// TODO: Implement for future Email support
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothServiceBluedroid::ReplyToMapMessagesListing(
|
||||
BlobParent* aBlobParent,
|
||||
BlobChild* aBlobChild,
|
||||
long aMasId,
|
||||
bool aNewMessage,
|
||||
const nsAString& aTimestamp,
|
||||
int aSize,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
BluetoothMapSmsManager* map = BluetoothMapSmsManager::Get();
|
||||
if (!map) {
|
||||
DispatchReplyError(aRunnable,
|
||||
NS_LITERAL_STRING("Reply to Messages Listing failed"));
|
||||
return;
|
||||
}
|
||||
|
||||
map->ReplyToMessagesListing(aBlobParent, aMasId, aNewMessage, aTimestamp,
|
||||
aSize);
|
||||
DispatchReplySuccess(aRunnable);
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothServiceBluedroid:: ReplyToMapMessagesListing(
|
||||
long aMasId,
|
||||
Blob* aBlob,
|
||||
bool aNewMessage,
|
||||
const nsAString& aTimestamp,
|
||||
int aSize,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
BluetoothMapSmsManager* map = BluetoothMapSmsManager::Get();
|
||||
if (!map) {
|
||||
DispatchReplyError(aRunnable,
|
||||
NS_LITERAL_STRING("Reply to Messages Listing failed"));
|
||||
return;
|
||||
}
|
||||
|
||||
map->ReplyToMessagesListing(aBlob, aMasId, aNewMessage, aTimestamp, aSize);
|
||||
DispatchReplySuccess(aRunnable);
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothServiceBluedroid:: ReplyToMapGetMessage(
|
||||
BlobParent* aBlobParent,
|
||||
BlobChild* aBlobChild,
|
||||
long aMasId,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
BluetoothMapSmsManager* map = BluetoothMapSmsManager::Get();
|
||||
if (!map) {
|
||||
DispatchReplyError(aRunnable,
|
||||
NS_LITERAL_STRING("Reply to Get Message failed"));
|
||||
return;
|
||||
}
|
||||
|
||||
map->ReplyToGetMessage(aBlobParent, aMasId);
|
||||
DispatchReplySuccess(aRunnable);
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothServiceBluedroid:: ReplyToMapGetMessage(
|
||||
Blob* aBlob,
|
||||
long aMasId,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
BluetoothMapSmsManager* map = BluetoothMapSmsManager::Get();
|
||||
if (!map) {
|
||||
DispatchReplyError(aRunnable,
|
||||
NS_LITERAL_STRING("Reply to Get Message failed"));
|
||||
return;
|
||||
}
|
||||
|
||||
map->ReplyToGetMessage(aBlob, aMasId);
|
||||
DispatchReplySuccess(aRunnable);
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothServiceBluedroid:: ReplyToMapSetMessageStatus(
|
||||
long aMasId,
|
||||
bool aStatus,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
BluetoothMapSmsManager* map = BluetoothMapSmsManager::Get();
|
||||
if (!map) {
|
||||
DispatchReplyError(aRunnable,
|
||||
NS_LITERAL_STRING("Reply to Set Message failed"));
|
||||
return;
|
||||
}
|
||||
|
||||
map->ReplyToSetMessageStatus(aMasId, aStatus);
|
||||
DispatchReplySuccess(aRunnable);
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothServiceBluedroid:: ReplyToMapSendMessage(
|
||||
long aMasId,
|
||||
bool aStatus,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
BluetoothMapSmsManager* map = BluetoothMapSmsManager::Get();
|
||||
if (!map) {
|
||||
DispatchReplyError(aRunnable,
|
||||
NS_LITERAL_STRING("Reply to Send Message failed"));
|
||||
return;
|
||||
}
|
||||
|
||||
map->ReplyToSendMessage(aMasId, aStatus);
|
||||
DispatchReplySuccess(aRunnable);
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothServiceBluedroid:: ReplyToMapMessageUpdate(
|
||||
long aMasId,
|
||||
bool aStatus,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
BluetoothMapSmsManager* map = BluetoothMapSmsManager::Get();
|
||||
if (!map) {
|
||||
DispatchReplyError(aRunnable,
|
||||
NS_LITERAL_STRING("Reply to MessageUpdate failed"));
|
||||
return;
|
||||
}
|
||||
|
||||
map->ReplyToMessageUpdate(aMasId, aStatus);
|
||||
DispatchReplySuccess(aRunnable);
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothServiceBluedroid::SendMetaData(const nsAString& aTitle,
|
||||
const nsAString& aArtist,
|
||||
|
|
|
@ -178,6 +178,52 @@ public:
|
|||
uint16_t aPhonebookSize,
|
||||
BluetoothReplyRunnable* aRunnable);
|
||||
|
||||
virtual void
|
||||
ReplyToMapFolderListing(long aMasId,
|
||||
const nsAString& aFolderlists,
|
||||
BluetoothReplyRunnable* aRunnable);
|
||||
|
||||
virtual void
|
||||
ReplyToMapMessagesListing(BlobParent* aBlobParent,
|
||||
BlobChild* aBlobChild,
|
||||
long aMasId,
|
||||
bool aNewMessage,
|
||||
const nsAString& aTimestamp,
|
||||
int aSize,
|
||||
BluetoothReplyRunnable* aRunnable);
|
||||
|
||||
virtual void
|
||||
ReplyToMapMessagesListing(long aMasId,
|
||||
Blob* aBlob,
|
||||
bool aNewMessage,
|
||||
const nsAString& aTimestamp,
|
||||
int aSize,
|
||||
BluetoothReplyRunnable* aRunnable);
|
||||
|
||||
virtual void
|
||||
ReplyToMapGetMessage(BlobParent* aBlobParent,
|
||||
BlobChild* aBlobChild,
|
||||
long aMasId,
|
||||
BluetoothReplyRunnable* aRunnable);
|
||||
|
||||
virtual void
|
||||
ReplyToMapGetMessage(Blob* aBlob,
|
||||
long aMasId,
|
||||
BluetoothReplyRunnable* aRunnable);
|
||||
|
||||
virtual void
|
||||
ReplyToMapSetMessageStatus(long aMasId,
|
||||
bool aStatus,
|
||||
BluetoothReplyRunnable* aRunnable);
|
||||
|
||||
virtual void
|
||||
ReplyToMapSendMessage(
|
||||
long aMasId, bool aStatus, BluetoothReplyRunnable* aRunnable);
|
||||
|
||||
virtual void
|
||||
ReplyToMapMessageUpdate(
|
||||
long aMasId, bool aStatus, BluetoothReplyRunnable* aRunnable);
|
||||
|
||||
virtual void
|
||||
AnswerWaitingCall(BluetoothReplyRunnable* aRunnable);
|
||||
|
||||
|
|
|
@ -4419,6 +4419,68 @@ BluetoothDBusService::ReplyTovCardListing(
|
|||
{
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothDBusService::ReplyToMapFolderListing(long aMasId,
|
||||
const nsAString& aFolderlists,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothDBusService::ReplyToMapMessagesListing(BlobParent* aBlobParent,
|
||||
BlobChild* aBlobChild,
|
||||
long aMasId,
|
||||
bool aNewMessage,
|
||||
const nsAString& aTimestamp,
|
||||
int aSize,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothDBusService::ReplyToMapMessagesListing(long aMasId,
|
||||
Blob* aBlob,
|
||||
bool aNewMessage,
|
||||
const nsAString& aTimestamp,
|
||||
int aSize,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothDBusService::ReplyToMapGetMessage(BlobParent* aBlobParent,
|
||||
BlobChild* aBlobChild,
|
||||
long aMasId,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothDBusService::ReplyToMapGetMessage(Blob* aBlob,
|
||||
long aMasId,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothDBusService::ReplyToMapSetMessageStatus(long aMasId,
|
||||
bool aStatus,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothDBusService::ReplyToMapSendMessage(long aMasId, bool aStatus,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothDBusService::ReplyToMapMessageUpdate(long aMasId, bool aStatus,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothDBusService::GattServerConnectPeripheralInternal(
|
||||
const nsAString& aAppUuid, const nsAString& aAddress,
|
||||
|
|
|
@ -186,7 +186,53 @@ public:
|
|||
virtual void
|
||||
ReplyTovCardListing(Blob* aBlob,
|
||||
uint16_t aPhonebookSize,
|
||||
BluetoothReplyRunnable* aRunnable);
|
||||
BluetoothReplyRunnable* aRunnable) override;
|
||||
|
||||
virtual void
|
||||
ReplyToMapFolderListing(long aMasId, const nsAString& aFolderlists,
|
||||
BluetoothReplyRunnable* aRunnable) override;
|
||||
|
||||
virtual void
|
||||
ReplyToMapMessagesListing(BlobParent* aBlobParent, BlobChild* aBlobChild,
|
||||
long aMasId,
|
||||
bool aNewMessage,
|
||||
const nsAString& aTimestamp,
|
||||
int aSize,
|
||||
BluetoothReplyRunnable* aRunnable) override;
|
||||
|
||||
virtual void
|
||||
ReplyToMapMessagesListing(long aMasId,
|
||||
Blob* aBlob,
|
||||
bool aNewMessage,
|
||||
const nsAString& aTimestamp,
|
||||
int aSize,
|
||||
BluetoothReplyRunnable* aRunnable) override;
|
||||
|
||||
virtual void
|
||||
ReplyToMapGetMessage(BlobParent* aBlobParent,
|
||||
BlobChild* aBlobChild,
|
||||
long aMasId,
|
||||
BluetoothReplyRunnable* aRunnable) override;
|
||||
|
||||
virtual void
|
||||
ReplyToMapGetMessage(Blob* aBlob,
|
||||
long aMasId,
|
||||
BluetoothReplyRunnable* aRunnable) override;
|
||||
|
||||
virtual void
|
||||
ReplyToMapSetMessageStatus(long aMasId,
|
||||
bool aStatus,
|
||||
BluetoothReplyRunnable* aRunnable) override;
|
||||
|
||||
virtual void
|
||||
ReplyToMapSendMessage(long aMasId,
|
||||
bool aStatus,
|
||||
BluetoothReplyRunnable* aRunnable) override;
|
||||
|
||||
virtual void
|
||||
ReplyToMapMessageUpdate(long aMasId,
|
||||
bool aStatus,
|
||||
BluetoothReplyRunnable* aRunnable) override;
|
||||
|
||||
#ifdef MOZ_B2G_RIL
|
||||
virtual void
|
||||
|
|
|
@ -341,6 +341,52 @@ public:
|
|||
uint16_t aPhonebookSize,
|
||||
BluetoothReplyRunnable* aRunnable) = 0;
|
||||
|
||||
virtual void
|
||||
ReplyToMapFolderListing(long aMasId,
|
||||
const nsAString& aFolderlists,
|
||||
BluetoothReplyRunnable* aRunnable) = 0;
|
||||
|
||||
virtual void
|
||||
ReplyToMapMessagesListing(BlobParent* aBlobParent,
|
||||
BlobChild* aBlobChild,
|
||||
long aMasId,
|
||||
bool aNewMessage,
|
||||
const nsAString& aTimestamp,
|
||||
int aSize,
|
||||
BluetoothReplyRunnable* aRunnable) = 0;
|
||||
|
||||
virtual void
|
||||
ReplyToMapMessagesListing(long aMasId,
|
||||
Blob* aBlob,
|
||||
bool aNewMessage,
|
||||
const nsAString& aTimestamp,
|
||||
int aSize,
|
||||
BluetoothReplyRunnable* aRunnable) = 0;
|
||||
|
||||
virtual void
|
||||
ReplyToMapGetMessage(BlobParent* aBlobParent,
|
||||
BlobChild* aBlobChild,
|
||||
long aMasId,
|
||||
BluetoothReplyRunnable* aRunnable) = 0;
|
||||
|
||||
virtual void
|
||||
ReplyToMapGetMessage(Blob* aBlob,
|
||||
long aMasId,
|
||||
BluetoothReplyRunnable* aRunnable) = 0;
|
||||
|
||||
virtual void
|
||||
ReplyToMapSetMessageStatus(long aMasId,
|
||||
bool aStatus,
|
||||
BluetoothReplyRunnable* aRunnable) = 0;
|
||||
|
||||
virtual void
|
||||
ReplyToMapSendMessage(
|
||||
long aMasId, bool aStatus, BluetoothReplyRunnable* aRunnable) = 0;
|
||||
|
||||
virtual void
|
||||
ReplyToMapMessageUpdate(
|
||||
long aMasId, bool aStatus, BluetoothReplyRunnable* aRunnable) = 0;
|
||||
|
||||
#ifdef MOZ_B2G_RIL
|
||||
virtual void
|
||||
AnswerWaitingCall(BluetoothReplyRunnable* aRunnable) = 0;
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include "BluetoothService.h"
|
||||
|
||||
#include "mozilla/dom/BluetoothMapRequestHandleBinding.h"
|
||||
#include "mozilla/dom/ContentChild.h"
|
||||
#include "mozilla/dom/Promise.h"
|
||||
|
||||
using namespace mozilla;
|
||||
|
@ -50,8 +51,37 @@ already_AddRefed<Promise>
|
|||
BluetoothMapRequestHandle::ReplyToFolderListing(long aMasId,
|
||||
const nsAString& aFolderlists, ErrorResult& aRv)
|
||||
{
|
||||
// TODO: Implement this fuction in Bug 1208492
|
||||
return nullptr;
|
||||
nsCOMPtr<nsIGlobalObject> global = do_QueryInterface(GetParentObject());
|
||||
if (!global) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
nsRefPtr<Promise> promise = Promise::Create(global, aRv);
|
||||
NS_ENSURE_TRUE(!aRv.Failed(), nullptr);
|
||||
|
||||
BluetoothService* bs = BluetoothService::Get();
|
||||
if (!bs) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (XRE_GetProcessType() == GeckoProcessType_Default) {
|
||||
// In-process reply
|
||||
bs->ReplyToMapFolderListing(aMasId, aFolderlists,
|
||||
new BluetoothVoidReplyRunnable(nullptr, promise));
|
||||
} else {
|
||||
ContentChild *cc = ContentChild::GetSingleton();
|
||||
if (!cc) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bs->ReplyToMapFolderListing(aMasId, aFolderlists,
|
||||
new BluetoothVoidReplyRunnable(nullptr, promise));
|
||||
}
|
||||
|
||||
return promise.forget();
|
||||
}
|
||||
|
||||
already_AddRefed<Promise>
|
||||
|
@ -62,16 +92,86 @@ BluetoothMapRequestHandle::ReplyToMessagesListing(long aMasId,
|
|||
int aSize,
|
||||
ErrorResult& aRv)
|
||||
{
|
||||
// TODO: Implement this fuction in Bug 1208492
|
||||
return nullptr;
|
||||
nsCOMPtr<nsIGlobalObject> global = do_QueryInterface(GetParentObject());
|
||||
if (!global) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
nsRefPtr<Promise> promise = Promise::Create(global, aRv);
|
||||
NS_ENSURE_TRUE(!aRv.Failed(), nullptr);
|
||||
|
||||
BluetoothService* bs = BluetoothService::Get();
|
||||
if (!bs) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (XRE_GetProcessType() == GeckoProcessType_Default) {
|
||||
// In-process reply
|
||||
bs->ReplyToMapMessagesListing(aMasId, &aBlob, aNewMessage, aTimestamp,
|
||||
aSize, new BluetoothVoidReplyRunnable(nullptr, promise));
|
||||
} else {
|
||||
ContentChild *cc = ContentChild::GetSingleton();
|
||||
if (!cc) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
BlobChild* actor = cc->GetOrCreateActorForBlob(&aBlob);
|
||||
if (!actor) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bs->ReplyToMapMessagesListing(nullptr, actor, aMasId, aNewMessage,
|
||||
aTimestamp, aSize, new BluetoothVoidReplyRunnable(nullptr, promise));
|
||||
}
|
||||
|
||||
return promise.forget();
|
||||
}
|
||||
|
||||
already_AddRefed<Promise>
|
||||
BluetoothMapRequestHandle::ReplyToGetMessage(long aMasId, Blob& aBlob,
|
||||
ErrorResult& aRv)
|
||||
{
|
||||
// TODO: Implement this fuction in Bug 1208492
|
||||
return nullptr;
|
||||
nsCOMPtr<nsIGlobalObject> global = do_QueryInterface(GetParentObject());
|
||||
if (!global) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
nsRefPtr<Promise> promise = Promise::Create(global, aRv);
|
||||
NS_ENSURE_TRUE(!aRv.Failed(), nullptr);
|
||||
|
||||
BluetoothService* bs = BluetoothService::Get();
|
||||
if (!bs) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (XRE_GetProcessType() == GeckoProcessType_Default) {
|
||||
// In-process reply
|
||||
bs->ReplyToMapGetMessage(&aBlob, aMasId,
|
||||
new BluetoothVoidReplyRunnable(nullptr, promise));
|
||||
} else {
|
||||
ContentChild *cc = ContentChild::GetSingleton();
|
||||
if (!cc) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
BlobChild* actor = cc->GetOrCreateActorForBlob(&aBlob);
|
||||
if (!actor) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bs->ReplyToMapGetMessage(nullptr, actor, aMasId,
|
||||
new BluetoothVoidReplyRunnable(nullptr, promise));
|
||||
}
|
||||
|
||||
return promise.forget();
|
||||
}
|
||||
|
||||
already_AddRefed<Promise>
|
||||
|
@ -79,8 +179,25 @@ BluetoothMapRequestHandle::ReplyToSetMessageStatus(long aMasId,
|
|||
bool aStatus,
|
||||
ErrorResult& aRv)
|
||||
{
|
||||
// TODO: Implement this fuction in Bug 1208492
|
||||
return nullptr;
|
||||
nsCOMPtr<nsIGlobalObject> global = do_QueryInterface(GetParentObject());
|
||||
if (!global) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
nsRefPtr<Promise> promise = Promise::Create(global, aRv);
|
||||
NS_ENSURE_TRUE(!aRv.Failed(), nullptr);
|
||||
|
||||
BluetoothService* bs = BluetoothService::Get();
|
||||
if (!bs) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bs->ReplyToMapSetMessageStatus(aMasId, aStatus,
|
||||
new BluetoothVoidReplyRunnable(nullptr, promise));
|
||||
|
||||
return promise.forget();
|
||||
}
|
||||
|
||||
already_AddRefed<Promise>
|
||||
|
@ -88,8 +205,25 @@ BluetoothMapRequestHandle::ReplyToSendMessage(long aMasId,
|
|||
bool aStatus,
|
||||
ErrorResult& aRv)
|
||||
{
|
||||
// TODO: Implement this fuction in Bug 1208492
|
||||
return nullptr;
|
||||
nsCOMPtr<nsIGlobalObject> global = do_QueryInterface(GetParentObject());
|
||||
if (!global) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
nsRefPtr<Promise> promise = Promise::Create(global, aRv);
|
||||
NS_ENSURE_TRUE(!aRv.Failed(), nullptr);
|
||||
|
||||
BluetoothService* bs = BluetoothService::Get();
|
||||
if (!bs) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bs->ReplyToMapSendMessage(aMasId, aStatus,
|
||||
new BluetoothVoidReplyRunnable(nullptr, promise));
|
||||
|
||||
return promise.forget();
|
||||
}
|
||||
|
||||
already_AddRefed<Promise>
|
||||
|
@ -97,8 +231,25 @@ BluetoothMapRequestHandle::ReplyToMessageUpdate(long aMasId,
|
|||
bool aStatus,
|
||||
ErrorResult& aRv)
|
||||
{
|
||||
// TODO: Implement this fuction in Bug 1208492
|
||||
return nullptr;
|
||||
nsCOMPtr<nsIGlobalObject> global = do_QueryInterface(GetParentObject());
|
||||
if (!global) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
nsRefPtr<Promise> promise = Promise::Create(global, aRv);
|
||||
NS_ENSURE_TRUE(!aRv.Failed(), nullptr);
|
||||
|
||||
BluetoothService* bs = BluetoothService::Get();
|
||||
if (!bs) {
|
||||
aRv.Throw(NS_ERROR_FAILURE);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
bs->ReplyToMapMessageUpdate(aMasId, aStatus,
|
||||
new BluetoothVoidReplyRunnable(nullptr, promise));
|
||||
|
||||
return promise.forget();
|
||||
}
|
||||
|
||||
JSObject*
|
||||
|
|
|
@ -252,6 +252,18 @@ BluetoothParent::RecvPBluetoothRequestConstructor(
|
|||
return actor->DoRequest(aRequest.get_ReplyToPhonebookPullingRequest());
|
||||
case Request::TReplyTovCardListingRequest:
|
||||
return actor->DoRequest(aRequest.get_ReplyTovCardListingRequest());
|
||||
case Request::TReplyToFolderListingRequest:
|
||||
return actor->DoRequest(aRequest.get_ReplyToFolderListingRequest());
|
||||
case Request::TReplyToMessagesListingRequest:
|
||||
return actor->DoRequest(aRequest.get_ReplyToMessagesListingRequest());
|
||||
case Request::TReplyToGetMessageRequest:
|
||||
return actor->DoRequest(aRequest.get_ReplyToGetMessageRequest());
|
||||
case Request::TReplyToSetMessageStatusRequest:
|
||||
return actor->DoRequest(aRequest.get_ReplyToSetMessageStatusRequest());
|
||||
case Request::TReplyToSendMessageRequest:
|
||||
return actor->DoRequest(aRequest.get_ReplyToSendMessageRequest());
|
||||
case Request::TReplyToMessageUpdateRequest:
|
||||
return actor->DoRequest(aRequest.get_ReplyToMessageUpdateRequest());
|
||||
#ifdef MOZ_B2G_RIL
|
||||
case Request::TAnswerWaitingCallRequest:
|
||||
return actor->DoRequest(aRequest.get_AnswerWaitingCallRequest());
|
||||
|
@ -776,6 +788,83 @@ BluetoothRequestParent::DoRequest(const ReplyTovCardListingRequest& aRequest)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
BluetoothRequestParent::DoRequest(const ReplyToFolderListingRequest& aRequest)
|
||||
{
|
||||
MOZ_ASSERT(mService);
|
||||
MOZ_ASSERT(mRequestType == Request::TReplyToFolderListingRequest);
|
||||
|
||||
mService->ReplyToMapFolderListing(aRequest.masId(),
|
||||
aRequest.folderList(),
|
||||
mReplyRunnable.get());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
BluetoothRequestParent::DoRequest(const ReplyToMessagesListingRequest& aRequest)
|
||||
{
|
||||
MOZ_ASSERT(mService);
|
||||
MOZ_ASSERT(mRequestType == Request::TReplyToMessagesListingRequest);
|
||||
|
||||
mService->ReplyToMapMessagesListing((BlobParent*)aRequest.blobParent(),
|
||||
(BlobChild*)aRequest.blobChild(),
|
||||
aRequest.masId(),
|
||||
aRequest.newMessage(),
|
||||
aRequest.timeStamp(),
|
||||
aRequest.size(),
|
||||
mReplyRunnable.get());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
BluetoothRequestParent::DoRequest(const ReplyToGetMessageRequest& aRequest)
|
||||
{
|
||||
MOZ_ASSERT(mService);
|
||||
MOZ_ASSERT(mRequestType == Request::TReplyToGetMessageRequest);
|
||||
|
||||
mService->ReplyToMapGetMessage((BlobParent*)aRequest.blobParent(),
|
||||
(BlobChild*)aRequest.blobChild(),
|
||||
aRequest.masId(),
|
||||
mReplyRunnable.get());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
BluetoothRequestParent::DoRequest(const ReplyToSetMessageStatusRequest& aRequest)
|
||||
{
|
||||
MOZ_ASSERT(mService);
|
||||
MOZ_ASSERT(mRequestType == Request::TReplyToSetMessageStatusRequest);
|
||||
|
||||
mService->ReplyToMapSetMessageStatus(aRequest.masId(),
|
||||
aRequest.messageStatus(),
|
||||
mReplyRunnable.get());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
BluetoothRequestParent::DoRequest(const ReplyToSendMessageRequest& aRequest)
|
||||
{
|
||||
MOZ_ASSERT(mService);
|
||||
MOZ_ASSERT(mRequestType == Request::TReplyToSendMessageRequest);
|
||||
|
||||
mService->ReplyToMapSendMessage(aRequest.masId(),
|
||||
aRequest.messageStatus(),
|
||||
mReplyRunnable.get());
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
BluetoothRequestParent::DoRequest(const ReplyToMessageUpdateRequest& aRequest)
|
||||
{
|
||||
MOZ_ASSERT(mService);
|
||||
MOZ_ASSERT(mRequestType == Request::TReplyToMessageUpdateRequest);
|
||||
|
||||
mService->ReplyToMapMessageUpdate(aRequest.masId(),
|
||||
aRequest.messageStatus(),
|
||||
mReplyRunnable.get());
|
||||
return true;
|
||||
}
|
||||
|
||||
#ifdef MOZ_B2G_RIL
|
||||
bool
|
||||
BluetoothRequestParent::DoRequest(const AnswerWaitingCallRequest& aRequest)
|
||||
|
|
|
@ -221,6 +221,24 @@ protected:
|
|||
bool
|
||||
DoRequest(const ReplyTovCardListingRequest& aRequest);
|
||||
|
||||
bool
|
||||
DoRequest(const ReplyToFolderListingRequest& aRequest);
|
||||
|
||||
bool
|
||||
DoRequest(const ReplyToMessagesListingRequest& aRequest);
|
||||
|
||||
bool
|
||||
DoRequest(const ReplyToGetMessageRequest& aRequest);
|
||||
|
||||
bool
|
||||
DoRequest(const ReplyToSetMessageStatusRequest& aRequest);
|
||||
|
||||
bool
|
||||
DoRequest(const ReplyToSendMessageRequest& aRequest);
|
||||
|
||||
bool
|
||||
DoRequest(const ReplyToMessageUpdateRequest& aRequest);
|
||||
|
||||
#ifdef MOZ_B2G_RIL
|
||||
bool
|
||||
DoRequest(const AnswerWaitingCallRequest& aRequest);
|
||||
|
|
|
@ -426,6 +426,88 @@ BluetoothServiceChildProcess::ReplyTovCardListing(
|
|||
MOZ_CRASH("This should never be called!");
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothServiceChildProcess::ReplyToMapFolderListing(long aMasId,
|
||||
const nsAString& aFolderList,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
SendRequest(aRunnable,
|
||||
ReplyToFolderListingRequest(aMasId, nsString(aFolderList)));
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothServiceChildProcess::ReplyToMapMessagesListing(BlobParent* aBlobParent,
|
||||
BlobChild* aBlobChild,
|
||||
long aMasId,
|
||||
bool aNewMessage,
|
||||
const nsAString& aTimestamp,
|
||||
int aSize,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
SendRequest(aRunnable,
|
||||
ReplyToMessagesListingRequest(aMasId, nullptr, aBlobChild,
|
||||
aNewMessage, nsString(aTimestamp), aSize));
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothServiceChildProcess::ReplyToMapMessagesListing(long aMasId,
|
||||
Blob* aBlob,
|
||||
bool aNewMessage,
|
||||
const nsAString& aTimestamp,
|
||||
int aSize,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
// Parent-process-only method
|
||||
MOZ_CRASH("This should never be called!");
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
BluetoothServiceChildProcess::ReplyToMapGetMessage(BlobParent* aBlobParent,
|
||||
BlobChild* aBlobChild,
|
||||
long aMasId,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
SendRequest(aRunnable,
|
||||
ReplyToGetMessageRequest(aMasId, nullptr, aBlobChild));
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothServiceChildProcess::ReplyToMapGetMessage(Blob* aBlob,
|
||||
long aMasId,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
// Parent-process-only method
|
||||
MOZ_CRASH("This should never be called!");
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothServiceChildProcess::ReplyToMapSetMessageStatus(long aMasId,
|
||||
bool aStatus,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
SendRequest(aRunnable,
|
||||
ReplyToSetMessageStatusRequest(aMasId, aStatus));
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothServiceChildProcess::ReplyToMapSendMessage(long aMasId,
|
||||
bool aStatus,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
SendRequest(aRunnable,
|
||||
ReplyToSendMessageRequest(aMasId, aStatus));
|
||||
}
|
||||
|
||||
void
|
||||
BluetoothServiceChildProcess::ReplyToMapMessageUpdate(long aMasId,
|
||||
bool aStatus,
|
||||
BluetoothReplyRunnable* aRunnable)
|
||||
{
|
||||
SendRequest(aRunnable,
|
||||
ReplyToMessageUpdateRequest(aMasId, aStatus));
|
||||
}
|
||||
|
||||
#ifdef MOZ_B2G_RIL
|
||||
void
|
||||
BluetoothServiceChildProcess::AnswerWaitingCall(
|
||||
|
|
|
@ -189,6 +189,52 @@ public:
|
|||
uint16_t aPhonebookSize,
|
||||
BluetoothReplyRunnable* aRunnable) override;
|
||||
|
||||
virtual void
|
||||
ReplyToMapFolderListing(long aMasId,
|
||||
const nsAString& aFolderlists,
|
||||
BluetoothReplyRunnable* aRunnable) override;
|
||||
|
||||
virtual void
|
||||
ReplyToMapMessagesListing(BlobParent* aBlobParent,
|
||||
BlobChild* aBlobChild,
|
||||
long aMasId,
|
||||
bool aNewMessage,
|
||||
const nsAString& aTimestamp,
|
||||
int aSize,
|
||||
BluetoothReplyRunnable* aRunnable) override;
|
||||
|
||||
virtual void
|
||||
ReplyToMapMessagesListing(long aMasId,
|
||||
Blob* aBlob,
|
||||
bool aNewMessage,
|
||||
const nsAString& aTimestamp,
|
||||
int aSize,
|
||||
BluetoothReplyRunnable* aRunnable) override;
|
||||
|
||||
virtual void
|
||||
ReplyToMapGetMessage(BlobParent* aBlobParent,
|
||||
BlobChild* aBlobChild,
|
||||
long aMasId,
|
||||
BluetoothReplyRunnable* aRunnable) override;
|
||||
|
||||
virtual void
|
||||
ReplyToMapGetMessage(Blob* aBlob,
|
||||
long aMasId,
|
||||
BluetoothReplyRunnable* aRunnable) override;
|
||||
|
||||
virtual void
|
||||
ReplyToMapSetMessageStatus(long aMasId,
|
||||
bool aStatus,
|
||||
BluetoothReplyRunnable* aRunnable) override;
|
||||
|
||||
virtual void
|
||||
ReplyToMapSendMessage(
|
||||
long aMasId, bool aStatus, BluetoothReplyRunnable* aRunnable) override;
|
||||
|
||||
virtual void
|
||||
ReplyToMapMessageUpdate(
|
||||
long aMasId, bool aStatus, BluetoothReplyRunnable* aRunnable) override;
|
||||
|
||||
#ifdef MOZ_B2G_RIL
|
||||
virtual void
|
||||
AnswerWaitingCall(BluetoothReplyRunnable* aRunnable) override;
|
||||
|
|
|
@ -188,6 +188,45 @@ struct ReplyTovCardListingRequest
|
|||
uint16_t phonebookSize;
|
||||
};
|
||||
|
||||
struct ReplyToFolderListingRequest
|
||||
{
|
||||
uint16_t masId;
|
||||
nsString folderList;
|
||||
};
|
||||
|
||||
struct ReplyToMessagesListingRequest
|
||||
{
|
||||
uint16_t masId;
|
||||
PBlob blob;
|
||||
bool newMessage;
|
||||
nsString timeStamp;
|
||||
uint16_t size;
|
||||
};
|
||||
|
||||
struct ReplyToGetMessageRequest
|
||||
{
|
||||
uint16_t masId;
|
||||
PBlob blob;
|
||||
};
|
||||
|
||||
struct ReplyToSetMessageStatusRequest
|
||||
{
|
||||
uint16_t masId;
|
||||
bool messageStatus;
|
||||
};
|
||||
|
||||
struct ReplyToSendMessageRequest
|
||||
{
|
||||
uint16_t masId;
|
||||
bool messageStatus;
|
||||
};
|
||||
|
||||
struct ReplyToMessageUpdateRequest
|
||||
{
|
||||
uint16_t masId;
|
||||
bool messageStatus;
|
||||
};
|
||||
|
||||
struct AnswerWaitingCallRequest
|
||||
{
|
||||
};
|
||||
|
@ -411,6 +450,12 @@ union Request
|
|||
ReplyTovCardPullingRequest;
|
||||
ReplyToPhonebookPullingRequest;
|
||||
ReplyTovCardListingRequest;
|
||||
ReplyToFolderListingRequest;
|
||||
ReplyToMessagesListingRequest;
|
||||
ReplyToGetMessageRequest;
|
||||
ReplyToSetMessageStatusRequest;
|
||||
ReplyToSendMessageRequest;
|
||||
ReplyToMessageUpdateRequest;
|
||||
AnswerWaitingCallRequest;
|
||||
IgnoreWaitingCallRequest;
|
||||
ToggleCallsRequest;
|
||||
|
|
|
@ -248,6 +248,10 @@ WifiProxyService::SendCommand(JS::Handle<JS::Value> aOptions,
|
|||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
if (!mControlThread) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
// Dispatch the command to the control thread.
|
||||
CommandOptions commandOptions(options);
|
||||
nsCOMPtr<nsIRunnable> runnable = new ControlRunnable(commandOptions, aInterface);
|
||||
|
@ -293,8 +297,10 @@ WifiProxyService::DispatchWifiResult(const WifiResultOptions& aOptions, const ns
|
|||
return;
|
||||
}
|
||||
|
||||
// Call the listener with a JS value.
|
||||
mListener->OnCommand(val, aInterface);
|
||||
if (mListener) {
|
||||
// Call the listener with a JS value.
|
||||
mListener->OnCommand(val, aInterface);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -1432,6 +1432,14 @@ var WifiManager = (function() {
|
|||
? wifiCommand.getConnectionInfoICS
|
||||
: wifiCommand.getConnectionInfoGB;
|
||||
|
||||
manager.ensureSupplicantDetached = aCallback => {
|
||||
if (!manager.enabled) {
|
||||
aCallback();
|
||||
return;
|
||||
}
|
||||
wifiCommand.closeSupplicantConnection(aCallback);
|
||||
};
|
||||
|
||||
manager.isHandShakeState = function(state) {
|
||||
switch (state) {
|
||||
case "AUTHENTICATING":
|
||||
|
@ -3820,10 +3828,14 @@ WifiWorker.prototype = {
|
|||
break;
|
||||
|
||||
case "xpcom-shutdown":
|
||||
let wifiService = Cc["@mozilla.org/wifi/service;1"].getService(Ci.nsIWifiProxyService);
|
||||
wifiService.shutdown();
|
||||
let wifiCertService = Cc["@mozilla.org/wifi/certservice;1"].getService(Ci.nsIWifiCertService);
|
||||
wifiCertService.shutdown();
|
||||
// Ensure the supplicant is detached from B2G to avoid XPCOM shutdown
|
||||
// blocks forever.
|
||||
WifiManager.ensureSupplicantDetached(() => {
|
||||
let wifiService = Cc["@mozilla.org/wifi/service;1"].getService(Ci.nsIWifiProxyService);
|
||||
wifiService.shutdown();
|
||||
let wifiCertService = Cc["@mozilla.org/wifi/certservice;1"].getService(Ci.nsIWifiCertService);
|
||||
wifiCertService.shutdown();
|
||||
});
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
|
Загрузка…
Ссылка в новой задаче