diff --git a/b2g/chrome/content/settings.js b/b2g/chrome/content/settings.js
index b007021cc053..0ea850ebb814 100644
--- a/b2g/chrome/content/settings.js
+++ b/b2g/chrome/content/settings.js
@@ -522,6 +522,7 @@ let settingsToObserve = {
'layers.effect.invert': false,
'layers.effect.grayscale': false,
'layers.effect.contrast': "0.0",
+ 'network.debugging.enabled': false,
'privacy.donottrackheader.enabled': false,
'ril.debugging.enabled': false,
'ril.radio.disabled': false,
diff --git a/b2g/components/PaymentProviderStrategy.js b/b2g/components/PaymentProviderStrategy.js
index e51e13927b95..67876f4b5a16 100644
--- a/b2g/components/PaymentProviderStrategy.js
+++ b/b2g/components/PaymentProviderStrategy.js
@@ -11,9 +11,9 @@ const PREF_DEBUG = "dom.payment.debug";
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
-XPCOMUtils.defineLazyServiceGetter(this, "gIccService",
- "@mozilla.org/icc/iccservice;1",
- "nsIIccService");
+XPCOMUtils.defineLazyServiceGetter(this, "iccProvider",
+ "@mozilla.org/ril/content-helper;1",
+ "nsIIccProvider");
XPCOMUtils.defineLazyServiceGetter(this, "gRil",
"@mozilla.org/ril;1",
@@ -148,8 +148,7 @@ PaymentProviderStrategy.prototype = {
if (!this._iccInfo) {
this._iccInfo = [];
for (let i = 0; i < gRil.numRadioInterfaces; i++) {
- let icc = gIccService.getIccByServiceId(i);
- let info = icc && icc.iccInfo;
+ let info = iccProvider.getIccInfo(i);
if (!info) {
LOGE("Tried to get the ICC info for an invalid service ID " + i);
continue;
diff --git a/b2g/config/dolphin/sources.xml b/b2g/config/dolphin/sources.xml
index 211c949ae5fe..e0bfbbd42d11 100644
--- a/b2g/config/dolphin/sources.xml
+++ b/b2g/config/dolphin/sources.xml
@@ -15,7 +15,7 @@
-
+
diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml
index 12dcd85e2b83..303192397d73 100644
--- a/b2g/config/emulator-ics/sources.xml
+++ b/b2g/config/emulator-ics/sources.xml
@@ -19,7 +19,7 @@
-
+
diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml
index af8e721d5563..ffd81023e015 100644
--- a/b2g/config/emulator-jb/sources.xml
+++ b/b2g/config/emulator-jb/sources.xml
@@ -17,7 +17,7 @@
-
+
diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml
index 2c0180e2a3da..b91b8f5d1df1 100644
--- a/b2g/config/emulator-kk/sources.xml
+++ b/b2g/config/emulator-kk/sources.xml
@@ -15,7 +15,7 @@
-
+
diff --git a/b2g/config/emulator-l/sources.xml b/b2g/config/emulator-l/sources.xml
index bf607f916b8b..a5702cba8629 100644
--- a/b2g/config/emulator-l/sources.xml
+++ b/b2g/config/emulator-l/sources.xml
@@ -15,7 +15,7 @@
-
+
diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml
index 12dcd85e2b83..303192397d73 100644
--- a/b2g/config/emulator/sources.xml
+++ b/b2g/config/emulator/sources.xml
@@ -19,7 +19,7 @@
-
+
diff --git a/b2g/config/flame-kk/sources.xml b/b2g/config/flame-kk/sources.xml
index 08cd2989ad48..84302b59fc06 100644
--- a/b2g/config/flame-kk/sources.xml
+++ b/b2g/config/flame-kk/sources.xml
@@ -15,7 +15,7 @@
-
+
diff --git a/b2g/config/flame/sources.xml b/b2g/config/flame/sources.xml
index a5b8948411c5..e52344bd45ec 100644
--- a/b2g/config/flame/sources.xml
+++ b/b2g/config/flame/sources.xml
@@ -17,7 +17,7 @@
-
+
diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json
index aa6c80cc0d84..c4e4f1efaf15 100644
--- a/b2g/config/gaia.json
+++ b/b2g/config/gaia.json
@@ -1,9 +1,9 @@
{
"git": {
- "git_revision": "b8051d370ddf4e5bd8e7d8a19fb9eeb5fd6ffb39",
+ "git_revision": "c39e15f631de80c69467fda0d4ea0bcda9e194ca",
"remote": "https://git.mozilla.org/releases/gaia.git",
"branch": ""
},
- "revision": "18a7681ac7c78cd21cc22de6ea1746fcab1c2f62",
+ "revision": "a7732a117f9499b15cc27c022a11cd75ef71f477",
"repo_path": "integration/gaia-central"
}
diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml
index 78214771e2a3..ef3f7d6872af 100644
--- a/b2g/config/nexus-4/sources.xml
+++ b/b2g/config/nexus-4/sources.xml
@@ -17,7 +17,7 @@
-
+
diff --git a/b2g/config/nexus-5-l/sources.xml b/b2g/config/nexus-5-l/sources.xml
index e11673bb2395..c9e026647055 100644
--- a/b2g/config/nexus-5-l/sources.xml
+++ b/b2g/config/nexus-5-l/sources.xml
@@ -15,7 +15,7 @@
-
+
diff --git a/b2g/installer/package-manifest.in b/b2g/installer/package-manifest.in
index e0477d956391..2c17b18648a9 100644
--- a/b2g/installer/package-manifest.in
+++ b/b2g/installer/package-manifest.in
@@ -178,6 +178,7 @@
@RESPATH@/components/dom_system_gonk.xpt
#endif
#ifdef MOZ_B2G_RIL
+@RESPATH@/components/dom_icc.xpt
@RESPATH@/components/dom_wappush.xpt
@RESPATH@/components/dom_mobileconnection.xpt
#endif
@@ -217,7 +218,6 @@
@RESPATH@/components/dom_permissionsettings.xpt
@RESPATH@/components/dom_sidebar.xpt
@RESPATH@/components/dom_cellbroadcast.xpt
-@RESPATH@/components/dom_icc.xpt
@RESPATH@/components/dom_mobilemessage.xpt
@RESPATH@/components/dom_storage.xpt
@RESPATH@/components/dom_stylesheets.xpt
@@ -483,8 +483,6 @@
#if defined(MOZ_WIDGET_GONK) && defined(MOZ_B2G_RIL)
@RESPATH@/components/CellBroadcastService.js
@RESPATH@/components/CellBroadcastService.manifest
-@BINPATH@/components/IccService.js
-@BINPATH@/components/IccService.manifest
@RESPATH@/components/MmsService.js
@RESPATH@/components/MmsService.manifest
@RESPATH@/components/MobileMessageDatabaseService.js
diff --git a/browser/installer/package-manifest.in b/browser/installer/package-manifest.in
index 184a26785bd3..bb8a13a33e42 100644
--- a/browser/installer/package-manifest.in
+++ b/browser/installer/package-manifest.in
@@ -215,7 +215,6 @@
@RESPATH@/components/dom_network.xpt
@RESPATH@/components/dom_notification.xpt
@RESPATH@/components/dom_html.xpt
-@RESPATH@/components/dom_icc.xpt
@RESPATH@/components/dom_offline.xpt
@RESPATH@/components/dom_json.xpt
@RESPATH@/components/dom_power.xpt
diff --git a/dom/apps/OperatorApps.jsm b/dom/apps/OperatorApps.jsm
index ebf124ccee6f..e6360cd6c2f0 100644
--- a/dom/apps/OperatorApps.jsm
+++ b/dom/apps/OperatorApps.jsm
@@ -21,9 +21,9 @@ Cu.import("resource://gre/modules/Task.jsm");
let Path = OS.Path;
#ifdef MOZ_B2G_RIL
-XPCOMUtils.defineLazyServiceGetter(this, "gIccService",
- "@mozilla.org/icc/iccservice;1",
- "nsIIccService");
+XPCOMUtils.defineLazyServiceGetter(this, "iccProvider",
+ "@mozilla.org/ril/content-helper;1",
+ "nsIIccProvider");
#endif
function debug(aMsg) {
@@ -69,18 +69,17 @@ let iccListener = {
notifyIccInfoChanged: function() {
// TODO: Bug 927709 - OperatorApps for multi-sim
- // In Multi-sim, there is more than one client in IccService. Each
- // client represents a icc handle. To maintain the backward compatibility
+ // In Multi-sim, there is more than one client in iccProvider. Each
+ // client represents a icc service. To maintain the backward compatibility
// with single sim, we always use client 0 for now. Adding support for
// multiple sim will be addressed in bug 927709, if needed.
let clientId = 0;
- let icc = gIccService.getIccByServiceId(clientId);
- let iccInfo = icc && icc.iccInfo;
+ let iccInfo = iccProvider.getIccInfo(clientId);
if (iccInfo && iccInfo.mcc && iccInfo.mnc) {
let mcc = iccInfo.mcc;
let mnc = iccInfo.mnc;
debug("******* iccListener cardIccInfo MCC-MNC: " + mcc + "-" + mnc);
- icc.unregisterListener(this);
+ iccProvider.unregisterIccMsg(clientId, this);
OperatorAppsRegistry._installOperatorApps(mcc, mnc);
debug("Broadcast message first-run-with-sim");
@@ -106,14 +105,13 @@ this.OperatorAppsRegistry = {
try {
yield this._initializeSourceDir();
// TODO: Bug 927709 - OperatorApps for multi-sim
- // In Multi-sim, there is more than one client in IccService. Each
- // client represents a icc handle. To maintain the backward
+ // In Multi-sim, there is more than one client in iccProvider. Each
+ // client represents a icc service. To maintain the backward
// compatibility with single sim, we always use client 0 for now.
// Adding support for multiple sim will be addressed in bug 927709, if
// needed.
let clientId = 0;
- let icc = gIccService.getIccByServiceId(clientId);
- let iccInfo = icc && icc.iccInfo;
+ let iccInfo = iccProvider.getIccInfo(clientId);
let mcc = 0;
let mnc = 0;
if (iccInfo && iccInfo.mcc) {
@@ -130,7 +128,7 @@ this.OperatorAppsRegistry = {
mnc: mnc });
} else {
- icc.registerListener(iccListener);
+ iccProvider.registerIccMsg(clientId, iccListener);
}
} catch (e) {
debug("Error Initializing OperatorApps. " + e);
diff --git a/dom/base/Navigator.cpp b/dom/base/Navigator.cpp
index 631076352f10..ad008d448606 100644
--- a/dom/base/Navigator.cpp
+++ b/dom/base/Navigator.cpp
@@ -36,7 +36,6 @@
#include "mozilla/dom/WakeLock.h"
#include "mozilla/dom/power/PowerManagerService.h"
#include "mozilla/dom/CellBroadcast.h"
-#include "mozilla/dom/IccManager.h"
#include "mozilla/dom/MobileMessageManager.h"
#include "mozilla/dom/ServiceWorkerContainer.h"
#include "mozilla/dom/Telephony.h"
@@ -54,6 +53,7 @@
#include "nsIMobileIdentityService.h"
#endif
#ifdef MOZ_B2G_RIL
+#include "mozilla/dom/IccManager.h"
#include "mozilla/dom/MobileConnectionArray.h"
#endif
#include "nsIIdleObserver.h"
@@ -177,7 +177,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(Navigator)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mBatteryManager)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mPowerManager)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mCellBroadcast)
- NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mIccManager)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mMobileMessageManager)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mTelephony)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mVoicemail)
@@ -185,6 +184,7 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(Navigator)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mConnection)
#ifdef MOZ_B2G_RIL
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mMobileConnections)
+ NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mIccManager)
#endif
#ifdef MOZ_B2G_BT
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mBluetooth)
@@ -250,11 +250,6 @@ Navigator::Invalidate()
mCellBroadcast = nullptr;
}
- if (mIccManager) {
- mIccManager->Shutdown();
- mIccManager = nullptr;
- }
-
if (mMobileMessageManager) {
mMobileMessageManager->Shutdown();
mMobileMessageManager = nullptr;
@@ -282,6 +277,11 @@ Navigator::Invalidate()
if (mMobileConnections) {
mMobileConnections = nullptr;
}
+
+ if (mIccManager) {
+ mIccManager->Shutdown();
+ mIccManager = nullptr;
+ }
#endif
#ifdef MOZ_B2G_BT
@@ -1707,6 +1707,8 @@ Navigator::GetMozVoicemail(ErrorResult& aRv)
return mVoicemail;
}
+#ifdef MOZ_B2G_RIL
+
IccManager*
Navigator::GetMozIccManager(ErrorResult& aRv)
{
@@ -1722,6 +1724,7 @@ Navigator::GetMozIccManager(ErrorResult& aRv)
return mIccManager;
}
+#endif // MOZ_B2G_RIL
#ifdef MOZ_GAMEPAD
void
diff --git a/dom/base/Navigator.h b/dom/base/Navigator.h
index c2849e7d7b90..09ba8e958a9e 100644
--- a/dom/base/Navigator.h
+++ b/dom/base/Navigator.h
@@ -44,6 +44,10 @@ class ServiceWorkerContainer;
}
}
+#ifdef MOZ_B2G_RIL
+class nsIDOMMozIccManager;
+#endif // MOZ_B2G_RIL
+
//*****************************************************************************
// Navigator: Script "navigator" object
//*****************************************************************************
@@ -84,12 +88,12 @@ class BluetoothManager;
#endif // MOZ_B2G_BT
#ifdef MOZ_B2G_RIL
+class IccManager;
class MobileConnectionArray;
#endif
class PowerManager;
class CellBroadcast;
-class IccManager;
class Telephony;
class Voicemail;
class TVManager;
@@ -220,7 +224,6 @@ public:
ErrorResult& aRv);
DesktopNotificationCenter* GetMozNotification(ErrorResult& aRv);
CellBroadcast* GetMozCellBroadcast(ErrorResult& aRv);
- IccManager* GetMozIccManager(ErrorResult& aRv);
MobileMessageManager* GetMozMobileMessage();
Telephony* GetMozTelephony(ErrorResult& aRv);
Voicemail* GetMozVoicemail(ErrorResult& aRv);
@@ -240,6 +243,7 @@ public:
#endif
#ifdef MOZ_B2G_RIL
MobileConnectionArray* GetMozMobileConnections(ErrorResult& aRv);
+ IccManager* GetMozIccManager(ErrorResult& aRv);
#endif // MOZ_B2G_RIL
#ifdef MOZ_GAMEPAD
void GetGamepads(nsTArray >& aGamepads, ErrorResult& aRv);
@@ -349,7 +353,6 @@ private:
#endif
nsRefPtr mPowerManager;
nsRefPtr mCellBroadcast;
- nsRefPtr mIccManager;
nsRefPtr mMobileMessageManager;
nsRefPtr mTelephony;
nsRefPtr mVoicemail;
@@ -357,6 +360,7 @@ private:
nsRefPtr mConnection;
#ifdef MOZ_B2G_RIL
nsRefPtr mMobileConnections;
+ nsRefPtr mIccManager;
#endif
#ifdef MOZ_B2G_BT
nsRefPtr mBluetooth;
diff --git a/dom/bluetooth/BluetoothRilListener.cpp b/dom/bluetooth/BluetoothRilListener.cpp
index 716c6b4f6340..cfade813bfb3 100644
--- a/dom/bluetooth/BluetoothRilListener.cpp
+++ b/dom/bluetooth/BluetoothRilListener.cpp
@@ -7,11 +7,12 @@
#include "BluetoothRilListener.h"
#include "BluetoothHfpManager.h"
-#include "nsIIccService.h"
+#include "nsIIccProvider.h"
#include "nsIMobileConnectionInfo.h"
#include "nsIMobileConnectionService.h"
#include "nsITelephonyCallInfo.h"
#include "nsITelephonyService.h"
+#include "nsRadioInterfaceLayer.h" // For NS_RILCONTENTHELPER_CONTRACTID.
#include "nsServiceManagerUtils.h"
#include "nsString.h"
@@ -59,19 +60,15 @@ IccListener::Listen(bool aStart)
{
NS_ENSURE_TRUE(mOwner, false);
- nsCOMPtr service =
- do_GetService(ICC_SERVICE_CONTRACTID);
- NS_ENSURE_TRUE(service, false);
-
- nsCOMPtr icc;
- service->GetIccByServiceId(mOwner->mClientId, getter_AddRefs(icc));
- NS_ENSURE_TRUE(icc, false);
+ nsCOMPtr provider =
+ do_GetService(NS_RILCONTENTHELPER_CONTRACTID);
+ NS_ENSURE_TRUE(provider, false);
nsresult rv;
if (aStart) {
- rv = icc->RegisterListener(this);
+ rv = provider->RegisterIccMsg(mOwner->mClientId, this);
} else {
- rv = icc->UnregisterListener(this);
+ rv = provider->UnregisterIccMsg(mOwner->mClientId, this);
}
return NS_SUCCEEDED(rv);
diff --git a/dom/bluetooth/BluetoothRilListener.h b/dom/bluetooth/BluetoothRilListener.h
index 3fae176bfb17..76d6cb838958 100644
--- a/dom/bluetooth/BluetoothRilListener.h
+++ b/dom/bluetooth/BluetoothRilListener.h
@@ -11,7 +11,7 @@
#include "nsAutoPtr.h"
-#include "nsIIccService.h"
+#include "nsIIccProvider.h"
#include "nsIMobileConnectionService.h"
#include "nsITelephonyCallInfo.h"
#include "nsITelephonyService.h"
diff --git a/dom/bluetooth/bluedroid/BluetoothA2dpHALInterface.cpp b/dom/bluetooth/bluedroid/BluetoothA2dpHALInterface.cpp
index f719869fee91..6695bb0de524 100644
--- a/dom/bluetooth/bluedroid/BluetoothA2dpHALInterface.cpp
+++ b/dom/bluetooth/bluedroid/BluetoothA2dpHALInterface.cpp
@@ -26,7 +26,7 @@ DispatchBluetoothA2dpHALResult(
{
MOZ_ASSERT(aRes);
- nsRunnable* runnable;
+ nsRefPtr runnable;
if (aStatus == STATUS_SUCCESS) {
runnable = new BluetoothA2dpHALResultRunnable(aRes, aMethod);
diff --git a/dom/bluetooth/bluedroid/BluetoothAvrcpHALInterface.cpp b/dom/bluetooth/bluedroid/BluetoothAvrcpHALInterface.cpp
index 3b9f1e8bae9d..153c55dad2f0 100644
--- a/dom/bluetooth/bluedroid/BluetoothAvrcpHALInterface.cpp
+++ b/dom/bluetooth/bluedroid/BluetoothAvrcpHALInterface.cpp
@@ -26,7 +26,7 @@ DispatchBluetoothAvrcpHALResult(
{
MOZ_ASSERT(aRes);
- nsRunnable* runnable;
+ nsRefPtr runnable;
if (aStatus == STATUS_SUCCESS) {
runnable = new BluetoothAvrcpHALResultRunnable(aRes, aMethod);
diff --git a/dom/bluetooth/bluedroid/BluetoothHALInterface.cpp b/dom/bluetooth/bluedroid/BluetoothHALInterface.cpp
index eedd057f0eb1..dd326a95c3c7 100644
--- a/dom/bluetooth/bluedroid/BluetoothHALInterface.cpp
+++ b/dom/bluetooth/bluedroid/BluetoothHALInterface.cpp
@@ -79,7 +79,7 @@ DispatchBluetoothHALResult(BluetoothResultHandler* aRes,
{
MOZ_ASSERT(aRes);
- nsRunnable* runnable;
+ nsRefPtr runnable;
if (aStatus == STATUS_SUCCESS) {
runnable = new BluetoothHALResultRunnable(aRes, aMethod);
diff --git a/dom/bluetooth/bluedroid/BluetoothHandsfreeHALInterface.cpp b/dom/bluetooth/bluedroid/BluetoothHandsfreeHALInterface.cpp
index 373a887d1c20..7d61db1bd666 100644
--- a/dom/bluetooth/bluedroid/BluetoothHandsfreeHALInterface.cpp
+++ b/dom/bluetooth/bluedroid/BluetoothHandsfreeHALInterface.cpp
@@ -26,7 +26,7 @@ DispatchBluetoothHandsfreeHALResult(
{
MOZ_ASSERT(aRes);
- nsRunnable* runnable;
+ nsRefPtr runnable;
if (aStatus == STATUS_SUCCESS) {
runnable = new BluetoothHandsfreeHALResultRunnable(aRes, aMethod);
diff --git a/dom/bluetooth/bluedroid/BluetoothSocketHALInterface.cpp b/dom/bluetooth/bluedroid/BluetoothSocketHALInterface.cpp
index 80e705f105b8..136c0bf7cf03 100644
--- a/dom/bluetooth/bluedroid/BluetoothSocketHALInterface.cpp
+++ b/dom/bluetooth/bluedroid/BluetoothSocketHALInterface.cpp
@@ -37,7 +37,7 @@ DispatchBluetoothSocketHALResult(
{
MOZ_ASSERT(aRes);
- nsRunnable* runnable;
+ nsRefPtr runnable;
if (aStatus == STATUS_SUCCESS) {
runnable = new BluetoothSocketHALIntResultRunnable(aRes, aMethod, aArg);
@@ -60,7 +60,7 @@ DispatchBluetoothSocketHALResult(
{
MOZ_ASSERT(aRes);
- nsRunnable* runnable;
+ nsRefPtr runnable;
if (aStatus == STATUS_SUCCESS) {
runnable = new BluetoothSocketHALIntStringIntResultRunnable(
diff --git a/dom/bluetooth/bluedroid/hfp/BluetoothHfpManager.cpp b/dom/bluetooth/bluedroid/hfp/BluetoothHfpManager.cpp
index f066dc9843d3..1121c0704926 100644
--- a/dom/bluetooth/bluedroid/hfp/BluetoothHfpManager.cpp
+++ b/dom/bluetooth/bluedroid/hfp/BluetoothHfpManager.cpp
@@ -17,13 +17,14 @@
#include "nsContentUtils.h"
#include "nsIAudioManager.h"
#include "nsIIccInfo.h"
-#include "nsIIccService.h"
+#include "nsIIccProvider.h"
#include "nsIMobileConnectionInfo.h"
#include "nsIMobileConnectionService.h"
#include "nsIMobileNetworkInfo.h"
#include "nsIObserverService.h"
#include "nsISettingsService.h"
#include "nsITelephonyService.h"
+#include "nsRadioInterfaceLayer.h"
#include "nsServiceManagerUtils.h"
#include "nsThreadUtils.h"
#include "mozilla/dom/BindingUtils.h"
@@ -724,16 +725,12 @@ BluetoothHfpManager::HandleVoiceConnectionChanged(uint32_t aClientId)
void
BluetoothHfpManager::HandleIccInfoChanged(uint32_t aClientId)
{
- nsCOMPtr service =
- do_GetService(ICC_SERVICE_CONTRACTID);
- NS_ENSURE_TRUE_VOID(service);
-
- nsCOMPtr icc;
- service->GetIccByServiceId(aClientId, getter_AddRefs(icc));
+ nsCOMPtr icc =
+ do_GetService(NS_RILCONTENTHELPER_CONTRACTID);
NS_ENSURE_TRUE_VOID(icc);
nsCOMPtr iccInfo;
- icc->GetIccInfo(getter_AddRefs(iccInfo));
+ icc->GetIccInfo(aClientId, getter_AddRefs(iccInfo));
NS_ENSURE_TRUE_VOID(iccInfo);
nsCOMPtr gsmIccInfo = do_QueryInterface(iccInfo);
diff --git a/dom/bluetooth/bluez/BluetoothHfpManager.cpp b/dom/bluetooth/bluez/BluetoothHfpManager.cpp
index 3c2ac4257597..cf0323cfdb0f 100644
--- a/dom/bluetooth/bluez/BluetoothHfpManager.cpp
+++ b/dom/bluetooth/bluez/BluetoothHfpManager.cpp
@@ -28,11 +28,12 @@
#ifdef MOZ_B2G_RIL
#include "nsIIccInfo.h"
-#include "nsIIccService.h"
+#include "nsIIccProvider.h"
#include "nsIMobileConnectionInfo.h"
#include "nsIMobileConnectionService.h"
#include "nsIMobileNetworkInfo.h"
#include "nsITelephonyService.h"
+#include "nsRadioInterfaceLayer.h"
#endif
/**
@@ -663,16 +664,12 @@ BluetoothHfpManager::HandleVoiceConnectionChanged(uint32_t aClientId)
void
BluetoothHfpManager::HandleIccInfoChanged(uint32_t aClientId)
{
- nsCOMPtr service =
- do_GetService(ICC_SERVICE_CONTRACTID);
- NS_ENSURE_TRUE_VOID(service);
-
- nsCOMPtr icc;
- service->GetIccByServiceId(aClientId, getter_AddRefs(icc));
+ nsCOMPtr icc =
+ do_GetService(NS_RILCONTENTHELPER_CONTRACTID);
NS_ENSURE_TRUE_VOID(icc);
nsCOMPtr iccInfo;
- icc->GetIccInfo(getter_AddRefs(iccInfo));
+ icc->GetIccInfo(aClientId, getter_AddRefs(iccInfo));
NS_ENSURE_TRUE_VOID(iccInfo);
nsCOMPtr gsmIccInfo = do_QueryInterface(iccInfo);
diff --git a/dom/bluetooth2/BluetoothRilListener.cpp b/dom/bluetooth2/BluetoothRilListener.cpp
index a13f1520c26c..f6237480ecfe 100644
--- a/dom/bluetooth2/BluetoothRilListener.cpp
+++ b/dom/bluetooth2/BluetoothRilListener.cpp
@@ -7,10 +7,11 @@
#include "BluetoothRilListener.h"
#include "BluetoothHfpManager.h"
-#include "nsIIccService.h"
+#include "nsIIccProvider.h"
#include "nsIMobileConnectionInfo.h"
#include "nsIMobileConnectionService.h"
#include "nsITelephonyService.h"
+#include "nsRadioInterfaceLayer.h" // For NS_RILCONTENTHELPER_CONTRACTID.
#include "nsServiceManagerUtils.h"
#include "nsString.h"
@@ -58,19 +59,15 @@ IccListener::Listen(bool aStart)
{
NS_ENSURE_TRUE(mOwner, false);
- nsCOMPtr service =
- do_GetService(ICC_SERVICE_CONTRACTID);
- NS_ENSURE_TRUE(service, false);
-
- nsCOMPtr icc;
- service->GetIccByServiceId(mOwner->mClientId, getter_AddRefs(icc));
- NS_ENSURE_TRUE(icc, false);
+ nsCOMPtr provider =
+ do_GetService(NS_RILCONTENTHELPER_CONTRACTID);
+ NS_ENSURE_TRUE(provider, false);
nsresult rv;
if (aStart) {
- rv = icc->RegisterListener(this);
+ rv = provider->RegisterIccMsg(mOwner->mClientId, this);
} else {
- rv = icc->UnregisterListener(this);
+ rv = provider->UnregisterIccMsg(mOwner->mClientId, this);
}
return NS_SUCCEEDED(rv);
diff --git a/dom/bluetooth2/BluetoothRilListener.h b/dom/bluetooth2/BluetoothRilListener.h
index 1768528d686a..11ce91173c44 100644
--- a/dom/bluetooth2/BluetoothRilListener.h
+++ b/dom/bluetooth2/BluetoothRilListener.h
@@ -11,7 +11,7 @@
#include "nsAutoPtr.h"
-#include "nsIIccService.h"
+#include "nsIIccProvider.h"
#include "nsIMobileConnectionService.h"
#include "nsITelephonyCallInfo.h"
#include "nsITelephonyService.h"
diff --git a/dom/bluetooth2/bluedroid/hfp/BluetoothHfpManager.cpp b/dom/bluetooth2/bluedroid/hfp/BluetoothHfpManager.cpp
index 56065fd2954f..73afc71d8af6 100644
--- a/dom/bluetooth2/bluedroid/hfp/BluetoothHfpManager.cpp
+++ b/dom/bluetooth2/bluedroid/hfp/BluetoothHfpManager.cpp
@@ -17,13 +17,14 @@
#include "nsContentUtils.h"
#include "nsIAudioManager.h"
#include "nsIIccInfo.h"
-#include "nsIIccService.h"
+#include "nsIIccProvider.h"
#include "nsIMobileConnectionInfo.h"
#include "nsIMobileConnectionService.h"
#include "nsIMobileNetworkInfo.h"
#include "nsIObserverService.h"
#include "nsISettingsService.h"
#include "nsITelephonyService.h"
+#include "nsRadioInterfaceLayer.h"
#include "nsServiceManagerUtils.h"
#include "nsThreadUtils.h"
#include "mozilla/dom/BindingUtils.h"
@@ -709,16 +710,12 @@ BluetoothHfpManager::HandleVoiceConnectionChanged(uint32_t aClientId)
void
BluetoothHfpManager::HandleIccInfoChanged(uint32_t aClientId)
{
- nsCOMPtr service =
- do_GetService(ICC_SERVICE_CONTRACTID);
- NS_ENSURE_TRUE_VOID(service);
-
- nsCOMPtr icc;
- service->GetIccByServiceId(aClientId, getter_AddRefs(icc));
+ nsCOMPtr icc =
+ do_GetService(NS_RILCONTENTHELPER_CONTRACTID);
NS_ENSURE_TRUE_VOID(icc);
nsCOMPtr iccInfo;
- icc->GetIccInfo(getter_AddRefs(iccInfo));
+ icc->GetIccInfo(aClientId, getter_AddRefs(iccInfo));
NS_ENSURE_TRUE_VOID(iccInfo);
nsCOMPtr gsmIccInfo = do_QueryInterface(iccInfo);
diff --git a/dom/bluetooth2/bluez/BluetoothHfpManager.cpp b/dom/bluetooth2/bluez/BluetoothHfpManager.cpp
index e531f44f4e0f..fea26b99b943 100644
--- a/dom/bluetooth2/bluez/BluetoothHfpManager.cpp
+++ b/dom/bluetooth2/bluez/BluetoothHfpManager.cpp
@@ -28,11 +28,12 @@
#ifdef MOZ_B2G_RIL
#include "nsIIccInfo.h"
-#include "nsIIccService.h"
+#include "nsIIccProvider.h"
#include "nsIMobileConnectionInfo.h"
#include "nsIMobileConnectionService.h"
#include "nsIMobileNetworkInfo.h"
#include "nsITelephonyService.h"
+#include "nsRadioInterfaceLayer.h"
#endif
/**
@@ -663,16 +664,12 @@ BluetoothHfpManager::HandleVoiceConnectionChanged(uint32_t aClientId)
void
BluetoothHfpManager::HandleIccInfoChanged(uint32_t aClientId)
{
- nsCOMPtr service =
- do_GetService(ICC_SERVICE_CONTRACTID);
- NS_ENSURE_TRUE_VOID(service);
-
- nsCOMPtr icc;
- service->GetIccByServiceId(aClientId, getter_AddRefs(icc));
+ nsCOMPtr icc =
+ do_GetService(NS_RILCONTENTHELPER_CONTRACTID);
NS_ENSURE_TRUE_VOID(icc);
nsCOMPtr iccInfo;
- icc->GetIccInfo(getter_AddRefs(iccInfo));
+ icc->GetIccInfo(aClientId, getter_AddRefs(iccInfo));
NS_ENSURE_TRUE_VOID(iccInfo);
nsCOMPtr gsmIccInfo = do_QueryInterface(iccInfo);
diff --git a/dom/icc/Assertions.cpp b/dom/icc/Assertions.cpp
index d228b5ac9964..0f9c7a07a33e 100644
--- a/dom/icc/Assertions.cpp
+++ b/dom/icc/Assertions.cpp
@@ -3,15 +3,15 @@
* You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "mozilla/dom/MozIccBinding.h"
-#include "nsIIccService.h"
+#include "nsIIccProvider.h"
namespace mozilla {
namespace dom {
namespace icc {
#define ASSERT_EQUALITY(webidlType, webidlState, xpidlState) \
- static_assert(static_cast(webidlType::webidlState) == nsIIcc::xpidlState, \
- #webidlType "::" #webidlState " should equal to nsIIccService::" #xpidlState)
+ static_assert(static_cast(webidlType::webidlState) == nsIIccProvider::xpidlState, \
+ #webidlType "::" #webidlState " should equal to nsIIccProvider::" #xpidlState)
/**
* Enum IccCardState
diff --git a/dom/icc/Icc.cpp b/dom/icc/Icc.cpp
index 5b3eceff281b..dc3d6fa38b75 100644
--- a/dom/icc/Icc.cpp
+++ b/dom/icc/Icc.cpp
@@ -4,7 +4,6 @@
#include "mozilla/dom/Icc.h"
-#include "IccCallback.h"
#include "mozilla/dom/DOMRequest.h"
#include "mozilla/dom/IccInfo.h"
#include "mozilla/dom/MozStkCommandEvent.h"
@@ -12,13 +11,10 @@
#include "mozilla/dom/ScriptSettings.h"
#include "nsIIccInfo.h"
#include "nsIIccProvider.h"
-#include "nsIIccService.h"
#include "nsJSON.h"
#include "nsRadioInterfaceLayer.h"
#include "nsServiceManagerUtils.h"
-using mozilla::dom::icc::IccCallback;
-
namespace mozilla {
namespace dom {
@@ -54,10 +50,9 @@ NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper)
NS_IMPL_ADDREF_INHERITED(Icc, DOMEventTargetHelper)
NS_IMPL_RELEASE_INHERITED(Icc, DOMEventTargetHelper)
-Icc::Icc(nsPIDOMWindow* aWindow, long aClientId, nsIIcc* aHandler, nsIIccInfo* aIccInfo)
+Icc::Icc(nsPIDOMWindow* aWindow, long aClientId, nsIIccInfo* aIccInfo)
: mLive(true)
, mClientId(aClientId)
- , mHandler(aHandler)
{
BindToOwner(aWindow);
@@ -84,7 +79,6 @@ Icc::Shutdown()
{
mIccInfo.SetNull();
mProvider = nullptr;
- mHandler = nullptr;
mLive = false;
}
@@ -176,10 +170,10 @@ Icc::GetCardState() const
{
Nullable result;
- uint32_t cardState = nsIIcc::CARD_STATE_UNDETECTED;
- if (mHandler &&
- NS_SUCCEEDED(mHandler->GetCardState(&cardState)) &&
- cardState != nsIIcc::CARD_STATE_UNDETECTED) {
+ uint32_t cardState = nsIIccProvider::CARD_STATE_UNDETECTED;
+ if (mProvider &&
+ NS_SUCCEEDED(mProvider->GetCardState(mClientId, &cardState)) &&
+ cardState != nsIIccProvider::CARD_STATE_UNDETECTED) {
MOZ_ASSERT(cardState < static_cast(IccCardState::EndGuard_));
result.SetValue(static_cast(cardState));
}
@@ -255,78 +249,72 @@ Icc::SendStkEventDownload(const JSContext* aCx, JS::Handle aEvent,
already_AddRefed
Icc::GetCardLock(IccLockType aLockType, ErrorResult& aRv)
{
- if (!mHandler) {
+ if (!mProvider) {
aRv.Throw(NS_ERROR_FAILURE);
return nullptr;
}
- nsRefPtr request = new DOMRequest(GetOwner());
- // TODO: Bug 1125018 - Simplify The Result of GetCardLock and
- // getCardLockRetryCount in MozIcc.webidl without a wrapper object.
- nsRefPtr requestCallback =
- new IccCallback(GetOwner(), request, true);
- nsresult rv = mHandler->GetCardLockEnabled(static_cast(aLockType),
- requestCallback);
+ nsRefPtr request;
+ nsresult rv = mProvider->GetCardLockEnabled(mClientId, GetOwner(),
+ static_cast(aLockType),
+ getter_AddRefs(request));
if (NS_FAILED(rv)) {
aRv.Throw(rv);
return nullptr;
}
- return request.forget();
+ return request.forget().downcast();
}
already_AddRefed
Icc::UnlockCardLock(const IccUnlockCardLockOptions& aOptions, ErrorResult& aRv)
{
- if (!mHandler) {
+ if (!mProvider) {
aRv.Throw(NS_ERROR_FAILURE);
return nullptr;
}
- nsRefPtr request = new DOMRequest(GetOwner());
- nsRefPtr requestCallback =
- new IccCallback(GetOwner(), request);
+ nsRefPtr request;
const nsString& password = IsPukCardLockType(aOptions.mLockType)
? aOptions.mPuk : aOptions.mPin;
- nsresult rv =
- mHandler->UnlockCardLock(static_cast(aOptions.mLockType),
- password, aOptions.mNewPin, requestCallback);
+ nsresult rv = mProvider->UnlockCardLock(mClientId, GetOwner(),
+ static_cast(aOptions.mLockType),
+ password, aOptions.mNewPin,
+ getter_AddRefs(request));
if (NS_FAILED(rv)) {
aRv.Throw(rv);
return nullptr;
}
- return request.forget();
+ return request.forget().downcast();
}
already_AddRefed
Icc::SetCardLock(const IccSetCardLockOptions& aOptions, ErrorResult& aRv)
{
- if (!mHandler) {
+ if (!mProvider) {
aRv.Throw(NS_ERROR_FAILURE);
return nullptr;
}
nsresult rv;
- nsRefPtr request = new DOMRequest(GetOwner());
- nsRefPtr requestCallback =
- new IccCallback(GetOwner(), request);
+ nsRefPtr request;
if (aOptions.mEnabled.WasPassed()) {
// Enable card lock.
const nsString& password = (aOptions.mLockType == IccLockType::Fdn) ?
aOptions.mPin2 : aOptions.mPin;
- rv =
- mHandler->SetCardLockEnabled(static_cast(aOptions.mLockType),
- password, aOptions.mEnabled.Value(),
- requestCallback);
+ rv = mProvider->SetCardLockEnabled(mClientId, GetOwner(),
+ static_cast(aOptions.mLockType),
+ password, aOptions.mEnabled.Value(),
+ getter_AddRefs(request));
} else {
// Change card lock password.
- rv =
- mHandler->ChangeCardLockPassword(static_cast(aOptions.mLockType),
- aOptions.mPin, aOptions.mNewPin,
- requestCallback);
+ rv = mProvider->ChangeCardLockPassword(mClientId, GetOwner(),
+ static_cast(aOptions.mLockType),
+ aOptions.mPin, aOptions.mNewPin,
+ getter_AddRefs(request));
}
if (NS_FAILED(rv)) {
@@ -334,28 +322,27 @@ Icc::SetCardLock(const IccSetCardLockOptions& aOptions, ErrorResult& aRv)
return nullptr;
}
- return request.forget();
+ return request.forget().downcast();
}
already_AddRefed
Icc::GetCardLockRetryCount(IccLockType aLockType, ErrorResult& aRv)
{
- if (!mHandler) {
+ if (!mProvider) {
aRv.Throw(NS_ERROR_FAILURE);
return nullptr;
}
- nsRefPtr request = new DOMRequest(GetOwner());
- nsRefPtr requestCallback =
- new IccCallback(GetOwner(), request);
- nsresult rv = mHandler->GetCardLockRetryCount(static_cast(aLockType),
- requestCallback);
+ nsRefPtr request;
+ nsresult rv = mProvider->GetCardLockRetryCount(mClientId, GetOwner(),
+ static_cast(aLockType),
+ getter_AddRefs(request));
if (NS_FAILED(rv)) {
aRv.Throw(rv);
return nullptr;
}
- return request.forget();
+ return request.forget().downcast();
}
already_AddRefed
@@ -405,54 +392,41 @@ already_AddRefed
Icc::MatchMvno(IccMvnoType aMvnoType, const nsAString& aMvnoData,
ErrorResult& aRv)
{
- if (!mHandler) {
+ if (!mProvider) {
aRv.Throw(NS_ERROR_FAILURE);
return nullptr;
}
- nsRefPtr request = new DOMRequest(GetOwner());
- nsRefPtr requestCallback =
- new IccCallback(GetOwner(), request);
- nsresult rv = mHandler->MatchMvno(static_cast(aMvnoType),
- aMvnoData, requestCallback);
+ nsRefPtr request;
+ nsresult rv = mProvider->MatchMvno(mClientId, GetOwner(),
+ static_cast(aMvnoType),
+ aMvnoData, getter_AddRefs(request));
if (NS_FAILED(rv)) {
aRv.Throw(rv);
return nullptr;
}
- return request.forget();
+ return request.forget().downcast();
}
already_AddRefed
Icc::GetServiceState(IccService aService, ErrorResult& aRv)
{
- if (!mHandler) {
+ if (!mProvider) {
aRv.Throw(NS_ERROR_FAILURE);
return nullptr;
}
- nsCOMPtr global = do_QueryInterface(GetOwner());
- if (!global) {
- return nullptr;
- }
-
- nsRefPtr promise = Promise::Create(global, aRv);
- if (aRv.Failed()) {
- return nullptr;
- }
-
- nsRefPtr requestCallback =
- new IccCallback(GetOwner(), promise);
-
- nsresult rv =
- mHandler->GetServiceStateEnabled(static_cast(aService),
- requestCallback);
-
+ nsCOMPtr supports;
+ nsresult rv = mProvider->GetServiceState(mClientId, GetOwner(),
+ static_cast(aService),
+ getter_AddRefs(supports));
if (NS_FAILED(rv)) {
- promise->MaybeReject(NS_ERROR_DOM_INVALID_STATE_ERR);
- // fall-through to return promise.
+ aRv.Throw(rv);
+ return nullptr;
}
+ nsCOMPtr promise = do_QueryInterface(supports);
return promise.forget();
}
diff --git a/dom/icc/Icc.h b/dom/icc/Icc.h
index e2f10549f3eb..d34066899560 100644
--- a/dom/icc/Icc.h
+++ b/dom/icc/Icc.h
@@ -8,7 +8,6 @@
#include "mozilla/dom/MozIccBinding.h"
#include "mozilla/DOMEventTargetHelper.h"
-class nsIIcc;
class nsIIccInfo;
class nsIIccProvider;
@@ -26,8 +25,7 @@ public:
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(Icc, DOMEventTargetHelper)
NS_REALLY_FORWARD_NSIDOMEVENTTARGET(DOMEventTargetHelper)
- Icc(nsPIDOMWindow* aWindow, long aClientId,
- nsIIcc* aHandler, nsIIccInfo* aIccInfo);
+ Icc(nsPIDOMWindow* aWindow, long aClientId, nsIIccInfo* aIccInfo);
void
Shutdown();
@@ -113,20 +111,14 @@ public:
IMPL_EVENT_HANDLER(stksessionend)
private:
- // Put definition of the destructor in Icc.cpp to ensure forward declaration
- // of nsIIccProvider, nsIIcc for the auto-generated .cpp file (i.e.,
- // MozIccManagerBinding.cpp) that includes this header.
~Icc();
bool mLive;
uint32_t mClientId;
nsString mIccId;
- // mProvider is a xpcom service and will be released at Shutdown(), so it
+ // mProvider is a xpcom service and will be released at shutdown, so it
// doesn't need to be cycle collected.
nsCOMPtr mProvider;
- // mHandler will be released at Shutdown(), so there is no need to join cycle
- // collection.
- nsCOMPtr mHandler;
Nullable mIccInfo;
};
diff --git a/dom/icc/IccCallback.cpp b/dom/icc/IccCallback.cpp
deleted file mode 100644
index ab71f39e223c..000000000000
--- a/dom/icc/IccCallback.cpp
+++ /dev/null
@@ -1,135 +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 "IccCallback.h"
-
-#include "mozilla/dom/IccCardLockError.h"
-#include "mozilla/dom/MozIccBinding.h"
-#include "mozilla/dom/Promise.h"
-#include "mozilla/dom/ToJSValue.h"
-#include "nsJSUtils.h"
-#include "nsServiceManagerUtils.h"
-
-namespace mozilla {
-namespace dom {
-namespace icc {
-
-NS_IMPL_ISUPPORTS(IccCallback, nsIIccCallback)
-
-IccCallback::IccCallback(nsPIDOMWindow* aWindow, DOMRequest* aRequest,
- bool aIsCardLockEnabled)
- : mWindow(aWindow)
- , mRequest(aRequest)
- , mIsCardLockEnabled(aIsCardLockEnabled)
-{
-}
-
-IccCallback::IccCallback(nsPIDOMWindow* aWindow, Promise* aPromise)
- : mWindow(aWindow)
- , mPromise(aPromise)
-{
-}
-
-nsresult
-IccCallback::NotifySuccess(JS::Handle aResult)
-{
- nsCOMPtr rs =
- do_GetService(DOMREQUEST_SERVICE_CONTRACTID);
- NS_ENSURE_TRUE(rs, NS_ERROR_FAILURE);
-
- return rs->FireSuccessAsync(mRequest, aResult);
-}
-
-nsresult
-IccCallback::NotifyGetCardLockEnabled(bool aResult)
-{
- IccCardLockStatus result;
- result.mEnabled.Construct(aResult);
-
- AutoJSAPI jsapi;
- if (NS_WARN_IF(!jsapi.Init(mWindow))) {
- return NS_ERROR_FAILURE;
- }
-
- JSContext* cx = jsapi.cx();
- JS::Rooted jsResult(cx);
- if (!ToJSValue(cx, result, &jsResult)) {
- JS_ClearPendingException(cx);
- return NS_ERROR_TYPE_ERR;
- }
-
- return NotifySuccess(jsResult);
-}
-
-NS_IMETHODIMP
-IccCallback::NotifySuccess()
-{
- return NotifySuccess(JS::UndefinedHandleValue);
-}
-
-NS_IMETHODIMP
-IccCallback::NotifySuccessWithBoolean(bool aResult)
-{
- if (mPromise) {
- mPromise->MaybeResolve(aResult ? JS::TrueHandleValue : JS::FalseHandleValue);
- return NS_OK;
- }
-
- return mIsCardLockEnabled
- ? NotifyGetCardLockEnabled(aResult)
- : NotifySuccess(aResult ? JS::TrueHandleValue : JS::FalseHandleValue);
-}
-
-NS_IMETHODIMP
-IccCallback::NotifyGetCardLockRetryCount(int32_t aCount)
-{
- // TODO: Bug 1125018 - Simplify The Result of GetCardLock and
- // getCardLockRetryCount in MozIcc.webidl without a wrapper object.
- IccCardLockRetryCount result;
- result.mRetryCount.Construct(aCount);
-
- AutoJSAPI jsapi;
- if (NS_WARN_IF(!jsapi.Init(mWindow))) {
- return NS_ERROR_FAILURE;
- }
-
- JSContext* cx = jsapi.cx();
- JS::Rooted jsResult(cx);
- if (!ToJSValue(cx, result, &jsResult)) {
- JS_ClearPendingException(cx);
- return NS_ERROR_TYPE_ERR;
- }
-
- return NotifySuccess(jsResult);
-}
-
-NS_IMETHODIMP
-IccCallback::NotifyError(const nsAString & aErrorMsg)
-{
- if (mPromise) {
- mPromise->MaybeRejectBrokenly(aErrorMsg);
- return NS_OK;
- }
-
- nsCOMPtr rs =
- do_GetService(DOMREQUEST_SERVICE_CONTRACTID);
- NS_ENSURE_TRUE(rs, NS_ERROR_FAILURE);
-
- return rs->FireErrorAsync(mRequest, aErrorMsg);
-}
-
-NS_IMETHODIMP
-IccCallback::NotifyCardLockError(const nsAString & aErrorMsg,
- int32_t aRetryCount)
-{
- nsRefPtr error =
- new IccCardLockError(mWindow, aErrorMsg, aRetryCount);
- mRequest->FireDetailedError(error);
-
- return NS_OK;
-}
-
-} // namespace icc
-} // namespace dom
-} // namespace mozilla
\ No newline at end of file
diff --git a/dom/icc/IccCallback.h b/dom/icc/IccCallback.h
deleted file mode 100644
index 17c05bd8b380..000000000000
--- a/dom/icc/IccCallback.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef mozilla_dom_icc_IccCallback_h
-#define mozilla_dom_icc_IccCallback_h
-
-#include "nsCOMPtr.h"
-#include "nsIIccService.h"
-
-namespace mozilla {
-namespace dom {
-
-class DOMRequest;
-class Promise;
-
-namespace icc {
-
-/**
- * A callback object for handling asynchronous request/response. This object is
- * created when an asynchronous request is made and should be destroyed after
- * Notify*Success/Error is called.
- * The modules hold the reference of IccCallback in OOP mode and non-OOP mode
- * are different.
- * - OOP mode: IccRequestChild
- * - non-OOP mode: IccService
- * The reference should be released after Notify*Success/Error is called.
- */
-class IccCallback MOZ_FINAL : public nsIIccCallback
-{
-public:
- NS_DECL_ISUPPORTS
- NS_DECL_NSIICCCALLBACK
-
- // TODO: Bug 1125018 - Simplify The Result of GetCardLock and
- // getCardLockRetryCount in MozIcc.webidl without a wrapper object.
- IccCallback(nsPIDOMWindow* aWindow, DOMRequest* aRequest,
- bool aIsCardLockEnabled = false);
- IccCallback(nsPIDOMWindow* aWindow, Promise* aPromise);
-
-private:
- ~IccCallback() {}
-
- nsresult
- NotifySuccess(JS::Handle aResult);
-
- // TODO: Bug 1125018 - Simplify The Result of GetCardLock and
- // getCardLockRetryCount in MozIcc.webidl without a wrapper object.
- nsresult
- NotifyGetCardLockEnabled(bool aResult);
-
- nsCOMPtr mWindow;
- nsRefPtr mRequest;
- nsRefPtr mPromise;
- // TODO: Bug 1125018 - Simplify The Result of GetCardLock and
- // getCardLockRetryCount in MozIcc.webidl without a wrapper object.
- bool mIsCardLockEnabled;
-};
-
-} // namespace icc
-} // namespace dom
-} // namespace mozilla
-
-#endif // mozilla_dom_icc_IccCallback_h
diff --git a/dom/icc/IccInfo.cpp b/dom/icc/IccInfo.cpp
index 7ac61390d732..cbe4493c8df1 100644
--- a/dom/icc/IccInfo.cpp
+++ b/dom/icc/IccInfo.cpp
@@ -4,7 +4,6 @@
#include "mozilla/dom/IccInfo.h"
-#include "mozilla/dom/icc/PIccTypes.h"
#include "nsPIDOMWindow.h"
#define CONVERT_STRING_TO_NULLABLE_ENUM(_string, _enumType, _enum) \
@@ -21,110 +20,29 @@
using namespace mozilla::dom;
-using mozilla::dom::icc::IccInfoData;
-
// IccInfo
-NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(IccInfo, mWindow)
+NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(IccInfo, mWindow, mIccInfo)
NS_IMPL_CYCLE_COLLECTING_ADDREF(IccInfo)
NS_IMPL_CYCLE_COLLECTING_RELEASE(IccInfo)
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(IccInfo)
- NS_INTERFACE_MAP_ENTRY(nsIIccInfo)
NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
+ NS_INTERFACE_MAP_ENTRY(nsISupports)
NS_INTERFACE_MAP_END
IccInfo::IccInfo(nsPIDOMWindow* aWindow)
: mWindow(aWindow)
{
- mIccType.SetIsVoid(true);
- mIccid.SetIsVoid(true);
- mMcc.SetIsVoid(true);
- mMnc.SetIsVoid(true);
- mSpn.SetIsVoid(true);
-}
-
-IccInfo::IccInfo(const IccInfoData& aData)
-{
- mIccType = aData.iccType();
- mIccid = aData.iccid();
- mMcc = aData.mcc();
- mMnc = aData.mnc();
- mSpn = aData.spn();
- mIsDisplayNetworkNameRequired = aData.isDisplayNetworkNameRequired();
- mIsDisplaySpnRequired = aData.isDisplaySpnRequired();
-}
-
-// nsIIccInfo
-
-NS_IMETHODIMP
-IccInfo::GetIccType(nsAString & aIccType)
-{
- aIccType = mIccType;
- return NS_OK;
-}
-
-NS_IMETHODIMP
-IccInfo::GetIccid(nsAString & aIccid)
-{
- aIccid = mIccid;
- return NS_OK;
-}
-
-NS_IMETHODIMP
-IccInfo::GetMcc(nsAString & aMcc)
-{
- aMcc = mMcc;
- return NS_OK;
-}
-
-NS_IMETHODIMP
-IccInfo::GetMnc(nsAString & aMnc)
-{
- aMnc = mMnc;
- return NS_OK;
-}
-
-NS_IMETHODIMP
-IccInfo::GetSpn(nsAString & aSpn)
-{
- aSpn = mSpn;
- return NS_OK;
-}
-
-NS_IMETHODIMP
-IccInfo::GetIsDisplayNetworkNameRequired(bool *aIsDisplayNetworkNameRequired)
-{
- *aIsDisplayNetworkNameRequired = mIsDisplayNetworkNameRequired;
- return NS_OK;
-}
-
-NS_IMETHODIMP
-IccInfo::GetIsDisplaySpnRequired(bool *aIsDisplaySpnRequired)
-{
- *aIsDisplaySpnRequired = mIsDisplaySpnRequired;
- return NS_OK;
}
void
IccInfo::Update(nsIIccInfo* aInfo)
{
- NS_ASSERTION(aInfo, "aInfo is null");
-
- aInfo->GetIccType(mIccType);
- aInfo->GetIccid(mIccid);
- aInfo->GetMcc(mMcc);
- aInfo->GetMnc(mMnc);
- aInfo->GetSpn(mSpn);
- aInfo->GetIsDisplayNetworkNameRequired(
- &mIsDisplayNetworkNameRequired);
- aInfo->GetIsDisplaySpnRequired(
- &mIsDisplaySpnRequired);
+ mIccInfo = aInfo;
}
-// WebIDL implementation
-
JSObject*
IccInfo::WrapObject(JSContext* aCx)
{
@@ -134,9 +52,15 @@ IccInfo::WrapObject(JSContext* aCx)
Nullable
IccInfo::GetIccType() const
{
+ if (!mIccInfo) {
+ return Nullable();
+ }
+
+ nsAutoString type;
Nullable iccType;
- CONVERT_STRING_TO_NULLABLE_ENUM(mIccType, IccType, iccType);
+ mIccInfo->GetIccType(type);
+ CONVERT_STRING_TO_NULLABLE_ENUM(type, IccType, iccType);
return iccType;
}
@@ -144,77 +68,96 @@ IccInfo::GetIccType() const
void
IccInfo::GetIccid(nsAString& aIccId) const
{
- aIccId = mIccid;
+ if (!mIccInfo) {
+ aIccId.SetIsVoid(true);
+ return;
+ }
+
+ mIccInfo->GetIccid(aIccId);
}
void
IccInfo::GetMcc(nsAString& aMcc) const
{
- aMcc = mMcc;
+ if (!mIccInfo) {
+ aMcc.SetIsVoid(true);
+ return;
+ }
+
+ mIccInfo->GetMcc(aMcc);
}
void
IccInfo::GetMnc(nsAString& aMnc) const
{
- aMnc = mMnc;
+ if (!mIccInfo) {
+ aMnc.SetIsVoid(true);
+ return;
+ }
+
+ mIccInfo->GetMnc(aMnc);
}
void
IccInfo::GetSpn(nsAString& aSpn) const
{
- aSpn = mSpn;
+ if (!mIccInfo) {
+ aSpn.SetIsVoid(true);
+ return;
+ }
+
+ mIccInfo->GetSpn(aSpn);
}
bool
IccInfo::IsDisplayNetworkNameRequired() const
{
- return mIsDisplayNetworkNameRequired;
+ if (!mIccInfo) {
+ return false;
+ }
+
+ bool isDisplayNetworkNameRequired;
+ mIccInfo->GetIsDisplayNetworkNameRequired(&isDisplayNetworkNameRequired);
+
+ return isDisplayNetworkNameRequired;
}
bool
IccInfo::IsDisplaySpnRequired() const
{
+ if (!mIccInfo) {
+ return false;
+ }
- return mIsDisplaySpnRequired;
+ bool isDisplaySpnRequired;
+ mIccInfo->GetIsDisplaySpnRequired(&isDisplaySpnRequired);
+
+ return isDisplaySpnRequired;
}
// GsmIccInfo
-NS_IMPL_ISUPPORTS_INHERITED(GsmIccInfo, IccInfo, nsIGsmIccInfo)
+NS_IMPL_CYCLE_COLLECTION_INHERITED(GsmIccInfo, IccInfo, mGsmIccInfo)
+
+NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(GsmIccInfo)
+NS_INTERFACE_MAP_END_INHERITING(IccInfo)
+
+NS_IMPL_ADDREF_INHERITED(GsmIccInfo, IccInfo)
+NS_IMPL_RELEASE_INHERITED(GsmIccInfo, IccInfo)
GsmIccInfo::GsmIccInfo(nsPIDOMWindow* aWindow)
: IccInfo(aWindow)
{
- mPhoneNumber.SetIsVoid(true);
}
-GsmIccInfo::GsmIccInfo(const IccInfoData& aData)
- : IccInfo(aData)
-{
- mPhoneNumber = aData.phoneNumber();
-}
-
-// nsIGsmIccInfo
-
-NS_IMETHODIMP
-GsmIccInfo::GetMsisdn(nsAString & aMsisdn)
-{
- aMsisdn = mPhoneNumber;
- return NS_OK;
-}
-
-// WebIDL implementation
-
void
GsmIccInfo::Update(nsIGsmIccInfo* aInfo)
{
- MOZ_ASSERT(aInfo);
nsCOMPtr iccInfo = do_QueryInterface(aInfo);
MOZ_ASSERT(iccInfo);
IccInfo::Update(iccInfo);
-
- aInfo->GetMsisdn(mPhoneNumber);
+ mGsmIccInfo = aInfo;
}
JSObject*
@@ -226,57 +169,39 @@ GsmIccInfo::WrapObject(JSContext* aCx)
void
GsmIccInfo::GetMsisdn(nsAString& aMsisdn) const
{
- aMsisdn = mPhoneNumber;
+ if (!mGsmIccInfo) {
+ aMsisdn.SetIsVoid(true);
+ return;
+ }
+
+ mGsmIccInfo->GetMsisdn(aMsisdn);
}
// CdmaIccInfo
-NS_IMPL_ISUPPORTS_INHERITED(CdmaIccInfo, IccInfo, nsICdmaIccInfo)
+NS_IMPL_CYCLE_COLLECTION_INHERITED(CdmaIccInfo, IccInfo, mCdmaIccInfo)
+
+NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(CdmaIccInfo)
+NS_INTERFACE_MAP_END_INHERITING(IccInfo)
+
+NS_IMPL_ADDREF_INHERITED(CdmaIccInfo, IccInfo)
+NS_IMPL_RELEASE_INHERITED(CdmaIccInfo, IccInfo)
CdmaIccInfo::CdmaIccInfo(nsPIDOMWindow* aWindow)
: IccInfo(aWindow)
{
- mPhoneNumber.SetIsVoid(true);
-}
-
-CdmaIccInfo::CdmaIccInfo(const IccInfoData& aData)
- : IccInfo(aData)
-{
- mPhoneNumber = aData.phoneNumber();
- mPrlVersion = aData.prlVersion();
-}
-
-// nsICdmaIccInfo
-
-NS_IMETHODIMP
-CdmaIccInfo::GetMdn(nsAString & aMdn)
-{
- aMdn = mPhoneNumber;
- return NS_OK;
-}
-
-NS_IMETHODIMP
-CdmaIccInfo::GetPrlVersion(int32_t *aPrlVersion)
-{
- *aPrlVersion = mPrlVersion;
- return NS_OK;
}
void
CdmaIccInfo::Update(nsICdmaIccInfo* aInfo)
{
- MOZ_ASSERT(aInfo);
nsCOMPtr iccInfo = do_QueryInterface(aInfo);
MOZ_ASSERT(iccInfo);
IccInfo::Update(iccInfo);
-
- aInfo->GetMdn(mPhoneNumber);
- aInfo->GetPrlVersion(&mPrlVersion);
+ mCdmaIccInfo = aInfo;
}
-// WebIDL implementation
-
JSObject*
CdmaIccInfo::WrapObject(JSContext* aCx)
{
@@ -286,11 +211,23 @@ CdmaIccInfo::WrapObject(JSContext* aCx)
void
CdmaIccInfo::GetMdn(nsAString& aMdn) const
{
- aMdn = mPhoneNumber;
+ if (!mCdmaIccInfo) {
+ aMdn.SetIsVoid(true);
+ return;
+ }
+
+ mCdmaIccInfo->GetMdn(aMdn);
}
int32_t
CdmaIccInfo::PrlVersion() const
{
- return mPrlVersion;
+ if (!mCdmaIccInfo) {
+ return 0;
+ }
+
+ int32_t prlVersion;
+ mCdmaIccInfo->GetPrlVersion(&prlVersion);
+
+ return prlVersion;
}
diff --git a/dom/icc/IccInfo.h b/dom/icc/IccInfo.h
index d6be4f2bfe0e..c893a3621a60 100644
--- a/dom/icc/IccInfo.h
+++ b/dom/icc/IccInfo.h
@@ -14,20 +14,14 @@ class nsPIDOMWindow;
namespace mozilla {
namespace dom {
-namespace icc {
-class IccInfoData;
-} // namespace icc
-
-class IccInfo : public nsIIccInfo
+class IccInfo : public nsISupports
, public nsWrapperCache
{
public:
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(IccInfo)
- NS_DECL_NSIICCINFO
explicit IccInfo(nsPIDOMWindow* aWindow);
- explicit IccInfo(const icc::IccInfoData& aData);
void
Update(nsIIccInfo* aInfo);
@@ -67,30 +61,18 @@ public:
protected:
virtual ~IccInfo() {}
+protected:
nsCOMPtr mWindow;
- // To prevent compiling error in OS_WIN in auto-generated UnifiedBindingsXX.cpp,
- // we have all data fields expended here instead of having a data member of
- // |IccInfoData| defined in PIccTypes.h which indirectly includes "windows.h"
- // See 925382 for the restriction of including "windows.h" in UnifiedBindings.cpp.
- nsString mIccType;
- nsString mIccid;
- nsString mMcc;
- nsString mMnc;
- nsString mSpn;
- bool mIsDisplayNetworkNameRequired;
- bool mIsDisplaySpnRequired;
+ nsCOMPtr mIccInfo;
};
class GsmIccInfo MOZ_FINAL : public IccInfo
- , public nsIGsmIccInfo
{
public:
NS_DECL_ISUPPORTS_INHERITED
- NS_FORWARD_NSIICCINFO(IccInfo::)
- NS_DECL_NSIGSMICCINFO
+ NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(GsmIccInfo, IccInfo)
explicit GsmIccInfo(nsPIDOMWindow* aWindow);
- explicit GsmIccInfo(const icc::IccInfoData& aData);
void
Update(nsIGsmIccInfo* aInfo);
@@ -106,19 +88,17 @@ public:
private:
~GsmIccInfo() {}
- nsString mPhoneNumber;
+private:
+ nsCOMPtr mGsmIccInfo;
};
class CdmaIccInfo MOZ_FINAL : public IccInfo
- , public nsICdmaIccInfo
{
public:
NS_DECL_ISUPPORTS_INHERITED
- NS_FORWARD_NSIICCINFO(IccInfo::)
- NS_DECL_NSICDMAICCINFO
+ NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(CdmaIccInfo, IccInfo)
explicit CdmaIccInfo(nsPIDOMWindow* aWindow);
- explicit CdmaIccInfo(const icc::IccInfoData& aData);
void
Update(nsICdmaIccInfo* aInfo);
@@ -137,8 +117,8 @@ public:
private:
~CdmaIccInfo() {}
- nsString mPhoneNumber;
- int32_t mPrlVersion;
+private:
+ nsCOMPtr mCdmaIccInfo;
};
} // namespace dom
diff --git a/dom/icc/IccListener.cpp b/dom/icc/IccListener.cpp
index 7474a321738d..911974c9bcce 100644
--- a/dom/icc/IccListener.cpp
+++ b/dom/icc/IccListener.cpp
@@ -20,8 +20,6 @@ IccListener::IccListener(IccManager* aIccManager, uint32_t aClientId)
{
MOZ_ASSERT(mIccManager);
- // TODO: Bug 1114938, Refactor STK in MozIcc.webidl with IPDL.
- // Remove the registration to IccProvider.
mProvider = do_GetService(NS_RILCONTENTHELPER_CONTRACTID);
if (!mProvider) {
@@ -29,34 +27,17 @@ IccListener::IccListener(IccManager* aIccManager, uint32_t aClientId)
return;
}
- nsCOMPtr iccService = do_GetService(ICC_SERVICE_CONTRACTID);
-
- if (!iccService) {
- NS_WARNING("Could not acquire nsIIccService!");
- return;
- }
-
- iccService->GetIccByServiceId(mClientId, getter_AddRefs(mHandler));
- if (!mHandler) {
- NS_WARNING("Could not acquire nsIIcc!");
- return;
- }
-
nsCOMPtr iccInfo;
- mHandler->GetIccInfo(getter_AddRefs(iccInfo));
+ mProvider->GetIccInfo(mClientId, getter_AddRefs(iccInfo));
if (iccInfo) {
nsString iccId;
iccInfo->GetIccid(iccId);
if (!iccId.IsEmpty()) {
- mIcc = new Icc(mIccManager->GetOwner(), mClientId, mHandler, iccInfo);
+ mIcc = new Icc(mIccManager->GetOwner(), mClientId, iccInfo);
}
}
- DebugOnly rv = mHandler->RegisterListener(this);
- NS_WARN_IF_FALSE(NS_SUCCEEDED(rv),
- "Failed registering icc listener with Icc Handler");
-
- rv = mProvider->RegisterIccMsg(mClientId, this);
+ DebugOnly rv = mProvider->RegisterIccMsg(mClientId, this);
NS_WARN_IF_FALSE(NS_SUCCEEDED(rv),
"Failed registering icc messages with provider");
}
@@ -69,18 +50,11 @@ IccListener::~IccListener()
void
IccListener::Shutdown()
{
- // TODO: Bug 1114938, Refactor STK in MozIcc.webidl with IPDL.
- // Remove the unregistration to IccProvider.
if (mProvider) {
mProvider->UnregisterIccMsg(mClientId, this);
mProvider = nullptr;
}
- if (mHandler) {
- mHandler->UnregisterListener(this);
- mHandler = nullptr;
- }
-
if (mIcc) {
mIcc->Shutdown();
mIcc = nullptr;
@@ -124,12 +98,8 @@ IccListener::NotifyCardStateChanged()
NS_IMETHODIMP
IccListener::NotifyIccInfoChanged()
{
- if (!mHandler) {
- return NS_OK;
- }
-
nsCOMPtr iccInfo;
- mHandler->GetIccInfo(getter_AddRefs(iccInfo));
+ mProvider->GetIccInfo(mClientId, getter_AddRefs(iccInfo));
// Create/delete icc object based on current iccInfo.
// 1. If the mIcc is nullptr and iccInfo has valid data, create icc object and
@@ -141,7 +111,7 @@ IccListener::NotifyIccInfoChanged()
nsString iccId;
iccInfo->GetIccid(iccId);
if (!iccId.IsEmpty()) {
- mIcc = new Icc(mIccManager->GetOwner(), mClientId, mHandler, iccInfo);
+ mIcc = new Icc(mIccManager->GetOwner(), mClientId, iccInfo);
mIccManager->NotifyIccAdd(iccId);
mIcc->NotifyEvent(NS_LITERAL_STRING("iccinfochange"));
}
diff --git a/dom/icc/IccListener.h b/dom/icc/IccListener.h
index 4b000f23641b..c152678d3dbc 100644
--- a/dom/icc/IccListener.h
+++ b/dom/icc/IccListener.h
@@ -7,7 +7,6 @@
#include "nsAutoPtr.h"
#include "nsIIccProvider.h"
-#include "nsIIccService.h"
namespace mozilla {
namespace dom {
@@ -43,12 +42,9 @@ private:
// IccListener, this will release the reference and break the cycle.
nsRefPtr mIcc;
nsRefPtr mIccManager;
- // mProvider is a xpcom service and will be released at Shutdown(), so it
+ // mProvider is a xpcom service and will be released at shutdown, so it
// doesn't need to be cycle collected.
nsCOMPtr mProvider;
- // mHandler will be released at Shutdown(), there is no need to join cycle
- // collection.
- nsCOMPtr mHandler;
};
} // namespace dom
diff --git a/dom/icc/IccManager.cpp b/dom/icc/IccManager.cpp
index 90115c058fdd..193941a27f30 100644
--- a/dom/icc/IccManager.cpp
+++ b/dom/icc/IccManager.cpp
@@ -10,15 +10,6 @@
#include "mozilla/dom/IccChangeEvent.h"
#include "mozilla/Preferences.h"
#include "nsIIccInfo.h"
-// Service instantiation
-#include "ipc/IccIPCService.h"
-#if defined(MOZ_WIDGET_GONK) && defined(MOZ_B2G_RIL)
-// TODO: Bug 815526, deprecate RILContentHelper.
-#include "nsIRadioInterfaceLayer.h"
-#include "nsRadioInterfaceLayer.h"
-#include "nsIGonkIccService.h"
-#endif
-#include "nsXULAppAPI.h" // For XRE_GetProcessType()
using namespace mozilla::dom;
@@ -138,25 +129,3 @@ IccManager::GetIccById(const nsAString& aIccId) const
}
return nullptr;
}
-
-already_AddRefed
-NS_CreateIccService()
-{
- nsCOMPtr service;
-
- if (XRE_GetProcessType() == GeckoProcessType_Content) {
- service = new mozilla::dom::icc::IccIPCService();
-#if defined(MOZ_WIDGET_GONK) && defined(MOZ_B2G_RIL)
- } else {
- // TODO: Bug 815526, deprecate RILContentHelper.
- nsCOMPtr ril =
- do_GetService(NS_RADIOINTERFACELAYER_CONTRACTID);
- nsCOMPtr ril_new(do_QueryInterface(ril));
-
- service = (ril_new) ? do_GetService(GONK_ICC_SERVICE_CONTRACTID)
- : do_GetService(NS_RILCONTENTHELPER_CONTRACTID);
-#endif
- }
-
- return service.forget();
-}
diff --git a/dom/icc/IccManager.h b/dom/icc/IccManager.h
index fff96ba7bb7e..7f43b62a1f44 100644
--- a/dom/icc/IccManager.h
+++ b/dom/icc/IccManager.h
@@ -7,6 +7,7 @@
#include "mozilla/DOMEventTargetHelper.h"
#include "nsCycleCollectionParticipant.h"
+#include "nsIIccProvider.h"
#include "nsTArrayHelpers.h"
namespace mozilla {
@@ -24,7 +25,7 @@ public:
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(IccManager, DOMEventTargetHelper)
- explicit IccManager(nsPIDOMWindow* aWindow);
+ IccManager(nsPIDOMWindow* aWindow);
void
Shutdown();
diff --git a/dom/icc/gonk/IccService.js b/dom/icc/gonk/IccService.js
deleted file mode 100644
index fa4ce0459d45..000000000000
--- a/dom/icc/gonk/IccService.js
+++ /dev/null
@@ -1,437 +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, results: Cr} = Components;
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import("resource://gre/modules/Services.jsm");
-
-var RIL = {};
-Cu.import("resource://gre/modules/ril_consts.js", RIL);
-
-const GONK_ICCSERVICE_CONTRACTID = "@mozilla.org/icc/gonkiccservice;1";
-const GONK_ICCSERVICE_CID = Components.ID("{df854256-9554-11e4-a16c-c39e8d106c26}");
-
-const NS_XPCOM_SHUTDOWN_OBSERVER_ID = "xpcom-shutdown";
-const NS_PREFBRANCH_PREFCHANGE_TOPIC_ID = "nsPref:changed";
-
-const kPrefRilDebuggingEnabled = "ril.debugging.enabled";
-const kPrefRilNumRadioInterfaces = "ril.numRadioInterfaces";
-
-XPCOMUtils.defineLazyServiceGetter(this, "gRadioInterfaceLayer",
- "@mozilla.org/ril;1",
- "nsIRadioInterfaceLayer");
-
-let DEBUG = RIL.DEBUG_RIL;
-function debug(s) {
- dump("IccService: " + s);
-}
-
-function IccInfo() {}
-IccInfo.prototype = {
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIIccInfo]),
-
- // nsIIccInfo
-
- iccType: null,
- iccid: null,
- mcc: null,
- mnc: null,
- spn: null,
- isDisplayNetworkNameRequired: false,
- isDisplaySpnRequired: false
-};
-
-function GsmIccInfo() {}
-GsmIccInfo.prototype = {
- __proto__: IccInfo.prototype,
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIGsmIccInfo,
- Ci.nsIIccInfo]),
-
- // nsIGsmIccInfo
-
- msisdn: null
-};
-
-function CdmaIccInfo() {}
-CdmaIccInfo.prototype = {
- __proto__: IccInfo.prototype,
- QueryInterface: XPCOMUtils.generateQI([Ci.nsICdmaIccInfo,
- Ci.nsIIccInfo]),
-
- // nsICdmaIccInfo
-
- mdn: null,
- prlVersion: 0
-};
-
-function IccService() {
- this._iccs = [];
-
- let numClients = gRadioInterfaceLayer.numRadioInterfaces;
- for (let i = 0; i < numClients; i++) {
- this._iccs.push(new Icc(gRadioInterfaceLayer.getRadioInterface(i)));
- }
-
- this._updateDebugFlag();
-
- Services.prefs.addObserver(kPrefRilDebuggingEnabled, this, false);
- Services.obs.addObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID, false);
-}
-IccService.prototype = {
- classID: GONK_ICCSERVICE_CID,
-
- classInfo: XPCOMUtils.generateCI({classID: GONK_ICCSERVICE_CID,
- contractID: GONK_ICCSERVICE_CONTRACTID,
- classDescription: "IccService",
- interfaces: [Ci.nsIIccService,
- Ci.nsIGonkIccService],
- flags: Ci.nsIClassInfo.SINGLETON}),
-
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIIccService,
- Ci.nsIGonkIccService,
- Ci.nsIObserver]),
-
- // An array of Icc instances.
- _iccs: null,
-
- _updateDebugFlag: function() {
- try {
- DEBUG = DEBUG ||
- Services.prefs.getBoolPref(kPrefRilDebuggingEnabled);
- } catch (e) {}
- },
-
- /**
- * nsIIccService interface.
- */
- getIccByServiceId: function(aServiceId) {
- let icc = this._iccs[aServiceId];
- if (!icc) {
- throw Cr.NS_ERROR_UNEXPECTED;
- }
-
- return icc;
- },
-
- /**
- * nsIGonkIccService interface.
- */
- notifyCardStateChanged: function(aServiceId, aCardState) {
- if (DEBUG) {
- debug("notifyCardStateChanged for service Id: " + aServiceId +
- ", CardState: " + aCardState);
- }
-
- this.getIccByServiceId(aServiceId)._updateCardState(aCardState);
- },
-
- notifyIccInfoChanged: function(aServiceId, aIccInfo) {
- if (DEBUG) {
- debug("notifyIccInfoChanged for service Id: " + aServiceId +
- ", IccInfo: " + JSON.stringify(aIccInfo));
- }
-
- this.getIccByServiceId(aServiceId)._updateIccInfo(aIccInfo);
- },
-
- notifyImsiChanged: function(aServiceId, aImsi) {
- if (DEBUG) {
- debug("notifyImsiChanged for service Id: " + aServiceId +
- ", Imsi: " + aImsi);
- }
-
- let icc = this.getIccByServiceId(aServiceId);
- icc._imsi = aImsi;
- },
-
- /**
- * nsIObserver interface.
- */
- observe: function(aSubject, aTopic, aData) {
- switch (aTopic) {
- case NS_PREFBRANCH_PREFCHANGE_TOPIC_ID:
- if (aData === kPrefRilDebuggingEnabled) {
- this._updateDebugFlag();
- }
- break;
- case NS_XPCOM_SHUTDOWN_OBSERVER_ID:
- Services.prefs.removeObserver(kPrefRilDebuggingEnabled, this);
- Services.obs.removeObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID);
- break;
- }
- }
-};
-
-function Icc(aRadioInterface) {
- this._radioInterface = aRadioInterface;
- this._listeners = [];
-}
-Icc.prototype = {
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIIcc]),
-
- _radioInterface: null,
- _imsi: null,
- _listeners: null,
-
- _updateCardState: function(aCardState) {
- if (this.cardState != aCardState) {
- this.cardState = aCardState;
- }
-
- this._deliverListenerEvent("notifyCardStateChanged");
- },
-
- // An utility function to copy objects.
- _updateInfo: function(aSrcInfo, aDestInfo) {
- for (let key in aSrcInfo) {
- aDestInfo[key] = aSrcInfo[key];
- }
- },
-
- /**
- * We need to consider below cases when update iccInfo:
- * 1. Should clear iccInfo to null if there is no card detected.
- * 2. Need to create corresponding object based on iccType.
- */
- _updateIccInfo: function(aIccInfo) {
- // Card is not detected, clear iccInfo to null.
- if (!aIccInfo || !aIccInfo.iccid) {
- if (this.iccInfo) {
- if (DEBUG) {
- debug("Card is not detected, clear iccInfo to null.");
- }
- this.iccInfo = null;
- this._deliverListenerEvent("notifyIccInfoChanged");
- }
- return;
- }
-
- // If iccInfo is null, new corresponding object based on iccType.
- if (!this.iccInfo ||
- this.iccInfo.iccType != aIccInfo.iccType) {
- if (aIccInfo.iccType === "ruim" || aIccInfo.iccType === "csim") {
- this.iccInfo = new CdmaIccInfo();
- } else if (aIccInfo.iccType === "sim" || aIccInfo.iccType === "usim") {
- this.iccInfo = new GsmIccInfo();
- } else {
- this.iccInfo = new IccInfo();
- }
- }
-
- this._updateInfo(aIccInfo, this.iccInfo);
-
- this._deliverListenerEvent("notifyIccInfoChanged");
-
- // Update lastKnownSimMcc.
- if (aIccInfo.mcc) {
- try {
- Services.prefs.setCharPref("ril.lastKnownSimMcc",
- aIccInfo.mcc.toString());
- } catch (e) {}
- }
- },
-
- _deliverListenerEvent: function(aName, aArgs) {
- let listeners = this._listeners.slice();
- for (let listener of listeners) {
- if (this._listeners.indexOf(listener) === -1) {
- continue;
- }
- let handler = listener[aName];
- if (typeof handler != "function") {
- throw new Error("No handler for " + aName);
- }
- try {
- handler.apply(listener, aArgs);
- } catch (e) {
- if (DEBUG) {
- debug("listener for " + aName + " threw an exception: " + e);
- }
- }
- }
- },
-
- _modifyCardLock: function(aOperation, aOptions, aCallback) {
- this._radioInterface.sendWorkerMessage(aOperation,
- aOptions,
- (aResponse) => {
- if (aResponse.errorMsg) {
- let retryCount =
- (aResponse.retryCount !== undefined) ? aResponse.retryCount : -1;
- aCallback.notifyCardLockError(aResponse.errorMsg, retryCount);
- return;
- }
-
- aCallback.notifySuccess();
- });
- },
-
- /**
- * Helper to match the MVNO pattern with IMSI.
- *
- * Note: Characters 'x' and 'X' in MVNO are skipped and not compared.
- * E.g., if the aMvnoData passed is '310260x10xxxxxx', then the
- * function returns true only if imsi has the same first 6 digits, 8th
- * and 9th digit.
- *
- * @param aMvnoData
- * MVNO pattern.
- * @param aImsi
- * IMSI of this ICC.
- *
- * @return true if matched.
- */
- _isImsiMatches: function(aMvnoData, aImsi) {
- // This should not be an error, but a mismatch.
- if (aMvnoData.length > aImsi.length) {
- return false;
- }
-
- for (let i = 0; i < aMvnoData.length; i++) {
- let c = aMvnoData[i];
- if ((c !== 'x') && (c !== 'X') && (c !== aImsi[i])) {
- return false;
- }
- }
- return true;
- },
-
- /**
- * nsIIcc interface.
- */
- iccInfo: null,
- cardState: Ci.nsIIcc.CARD_STATE_UNKNOWN,
-
- registerListener: function(aListener) {
- if (this._listeners.indexOf(aListener) >= 0) {
- throw Cr.NS_ERROR_UNEXPECTED;
- }
-
- this._listeners.push(aListener);
- },
-
- unregisterListener: function(aListener) {
- let index = this._listeners.indexOf(aListener);
- if (index >= 0) {
- this._listeners.splice(index, 1);
- }
- },
-
- getCardLockEnabled: function(aLockType, aCallback) {
- this._radioInterface.sendWorkerMessage("iccGetCardLockEnabled",
- { lockType: aLockType },
- (aResponse) => {
- if (aResponse.errorMsg) {
- aCallback.notifyError(aResponse.errorMsg);
- return;
- }
-
- aCallback.notifySuccessWithBoolean(aResponse.enabled);
- });
- },
-
- unlockCardLock: function(aLockType, aPassword, aNewPin, aCallback) {
- this._modifyCardLock("iccUnlockCardLock",
- { lockType: aLockType,
- password: aPassword,
- newPin: aNewPin },
- aCallback);
- },
-
- setCardLockEnabled: function(aLockType, aPassword, aEnabled, aCallback) {
- this._modifyCardLock("iccSetCardLockEnabled",
- { lockType: aLockType,
- password: aPassword,
- enabled: aEnabled },
- aCallback);
- },
-
- changeCardLockPassword: function(aLockType, aPassword, aNewPassword, aCallback) {
- this._modifyCardLock("iccChangeCardLockPassword",
- { lockType: aLockType,
- password: aPassword,
- newPassword: aNewPassword, },
- aCallback);
- },
-
- getCardLockRetryCount: function(aLockType, aCallback) {
- this._radioInterface.sendWorkerMessage("iccGetCardLockRetryCount",
- { lockType: aLockType },
- (aResponse) => {
- if (aResponse.errorMsg) {
- aCallback.notifyError(aResponse.errorMsg);
- return;
- }
-
- aCallback.notifyGetCardLockRetryCount(aResponse.retryCount);
- });
- },
-
- matchMvno: function(aMvnoType, aMvnoData, aCallback) {
- if (!aMvnoData) {
- aCallback.notifyError(RIL.GECKO_ERROR_INVALID_PARAMETER);
- return;
- }
-
- switch (aMvnoType) {
- case Ci.nsIIcc.CARD_MVNO_TYPE_IMSI:
- let imsi = this._imsi;
- if (!imsi) {
- aCallback.notifyError(RIL.GECKO_ERROR_GENERIC_FAILURE);
- break;
- }
- aCallback.notifySuccessWithBoolean(
- this._isImsiMatches(aMvnoData, imsi));
- break;
- case Ci.nsIIcc.CARD_MVNO_TYPE_SPN:
- let spn = this.iccInfo && this.iccInfo.spn;
- if (!spn) {
- aCallback.notifyError(RIL.GECKO_ERROR_GENERIC_FAILURE);
- break;
- }
- aCallback.notifySuccessWithBoolean(spn == aMvnoData);
- break;
- case Ci.nsIIcc.CARD_MVNO_TYPE_GID:
- this._radioInterface.sendWorkerMessage("getGID1",
- null,
- (aResponse) => {
- let gid = aResponse.gid1;
- let mvnoDataLength = aMvnoData.length;
-
- if (!gid) {
- aCallback.notifyError(RIL.GECKO_ERROR_GENERIC_FAILURE);
- } else if (mvnoDataLength > gid.length) {
- aCallback.notifySuccessWithBoolean(false);
- } else {
- let result =
- gid.substring(0, mvnoDataLength).toLowerCase() ==
- aMvnoData.toLowerCase();
- aCallback.notifySuccessWithBoolean(result);
- }
- });
- break;
- default:
- aCallback.notifyError(RIL.GECKO_ERROR_MODE_NOT_SUPPORTED);
- break;
- }
- },
-
- getServiceStateEnabled: function(aService, aCallback) {
- this._radioInterface.sendWorkerMessage("getIccServiceState",
- { service: aService },
- (aResponse) => {
- if (aResponse.errorMsg) {
- aCallback.notifyError(aResponse.errorMsg);
- return;
- }
-
- aCallback.notifySuccessWithBoolean(aResponse.result);
- });
- }
-};
-
-this.NSGetFactory = XPCOMUtils.generateNSGetFactory([IccService]);
diff --git a/dom/icc/gonk/IccService.manifest b/dom/icc/gonk/IccService.manifest
deleted file mode 100644
index dcff16c67635..000000000000
--- a/dom/icc/gonk/IccService.manifest
+++ /dev/null
@@ -1,6 +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/.
-
-component {df854256-9554-11e4-a16c-c39e8d106c26} IccService.js
-contract @mozilla.org/icc/gonkiccservice;1 {df854256-9554-11e4-a16c-c39e8d106c26}
\ No newline at end of file
diff --git a/dom/icc/interfaces/moz.build b/dom/icc/interfaces/moz.build
index 9c5a1fa64351..1bd27608e7bf 100644
--- a/dom/icc/interfaces/moz.build
+++ b/dom/icc/interfaces/moz.build
@@ -6,13 +6,11 @@
XPIDL_SOURCES += [
'nsIIccInfo.idl',
- 'nsIIccProvider.idl', # TODO: Bug 815526, deprecate RILContentHelper.
- 'nsIIccService.idl',
+ 'nsIIccProvider.idl',
]
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk' and CONFIG['MOZ_B2G_RIL']:
XPIDL_SOURCES += [
- 'nsIGonkIccService.idl',
'nsIIccMessenger.idl',
]
diff --git a/dom/icc/interfaces/nsIGonkIccService.idl b/dom/icc/interfaces/nsIGonkIccService.idl
deleted file mode 100644
index 890b1c98551b..000000000000
--- a/dom/icc/interfaces/nsIGonkIccService.idl
+++ /dev/null
@@ -1,21 +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 "nsIIccService.idl"
-
-%{C++
-#define GONK_ICC_SERVICE_CONTRACTID \
- "@mozilla.org/icc/gonkiccservice;1"
-%}
-
-[scriptable, uuid(a037b8a2-b027-11e4-9496-c3b7af59a512)]
-interface nsIGonkIccService : nsIIccService
-{
- // TODO: Bug 1114938 - Refactor STK in MozIcc.webidl with IPDL:
- // void notifyStkCommand(in unsigned long aServiceId, in jsval aStkcommand);
- // void notifyStkSessionEnd(in unsigned long aServiceId);
- void notifyCardStateChanged(in unsigned long aServiceId, in unsigned long aCardState);
- void notifyIccInfoChanged(in unsigned long aServiceId, in jsval aIccInfo);
- void notifyImsiChanged(in unsigned long aServiceId, in DOMString aImsi);
-};
diff --git a/dom/icc/interfaces/nsIIccProvider.idl b/dom/icc/interfaces/nsIIccProvider.idl
index ec3d01ef0933..94f09d05d3b1 100644
--- a/dom/icc/interfaces/nsIIccProvider.idl
+++ b/dom/icc/interfaces/nsIIccProvider.idl
@@ -7,7 +7,15 @@
interface nsIDOMDOMRequest;
interface nsIDOMWindow;
interface nsIIccInfo;
-interface nsIIccListener;
+
+[scriptable, uuid(7c0ada3d-d8d4-493e-9243-fa3df39855e4)]
+interface nsIIccListener : nsISupports
+{
+ void notifyStkCommand(in DOMString aMessage);
+ void notifyStkSessionEnd();
+ void notifyCardStateChanged();
+ void notifyIccInfoChanged();
+};
[scriptable, uuid(6136acab-b50e-494a-a86d-df392a032897)]
interface nsIIccChannelCallback : nsISupports
@@ -50,9 +58,83 @@ interface nsIIccChannelCallback : nsISupports
/**
* XPCOM component (in the content process) that provides the ICC information.
*/
-[scriptable, uuid(7dd6e186-b007-11e4-9b7e-7717d7863cb8)]
+[scriptable, uuid(a203cd2e-2280-4d8e-a687-42b745d322c1)]
interface nsIIccProvider : nsISupports
{
+ // MUST match enum IccCardState in MozIcc.webidl!
+ const unsigned long CARD_STATE_UNKNOWN = 0;
+ const unsigned long CARD_STATE_READY = 1;
+ const unsigned long CARD_STATE_PIN_REQUIRED = 2;
+ const unsigned long CARD_STATE_PUK_REQUIRED = 3;
+ const unsigned long CARD_STATE_PERMANENT_BLOCKED = 4;
+ const unsigned long CARD_STATE_PERSONALIZATION_IN_PROGRESS = 5;
+ const unsigned long CARD_STATE_PERSONALIZATION_READY = 6;
+ const unsigned long CARD_STATE_NETWORK_LOCKED = 7;
+ const unsigned long CARD_STATE_NETWORK_SUBSET_LOCKED = 8;
+ const unsigned long CARD_STATE_CORPORATE_LOCKED = 9;
+ const unsigned long CARD_STATE_SERVICE_PROVIDER_LOCKED = 10;
+ const unsigned long CARD_STATE_SIM_LOCKED = 11;
+ const unsigned long CARD_STATE_NETWORK_PUK_REQUIRED = 12;
+ const unsigned long CARD_STATE_NETWORK_SUBSET_PUK_REQUIRED = 13;
+ const unsigned long CARD_STATE_CORPORATE_PUK_REQUIRED = 14;
+ const unsigned long CARD_STATE_SERVICE_PROVIDER_PUK_REQUIRED = 15;
+ const unsigned long CARD_STATE_SIM_PUK_REQUIRED = 16;
+ const unsigned long CARD_STATE_NETWORK1_LOCKED = 17;
+ const unsigned long CARD_STATE_NETWORK2_LOCKED = 18;
+ const unsigned long CARD_STATE_HRPD_NETWORK_LOCKED = 19;
+ const unsigned long CARD_STATE_RUIM_CORPORATE_LOCKED = 20;
+ const unsigned long CARD_STATE_RUIM_SERVICE_PROVIDER_LOCKED = 21;
+ const unsigned long CARD_STATE_RUIM_LOCKED = 22;
+ const unsigned long CARD_STATE_NETWORK1_PUK_REQUIRED = 23;
+ const unsigned long CARD_STATE_NETWORK2_PUK_REQUIRED = 24;
+ const unsigned long CARD_STATE_HRPD_NETWORK_PUK_REQUIRED = 25;
+ const unsigned long CARD_STATE_RUIM_CORPORATE_PUK_REQUIRED = 26;
+ const unsigned long CARD_STATE_RUIM_SERVICE_PROVIDER_PUK_REQUIRED = 27;
+ const unsigned long CARD_STATE_RUIM_PUK_REQUIRED = 28;
+ const unsigned long CARD_STATE_ILLEGAL = 29;
+
+ const unsigned long CARD_STATE_UNDETECTED = 4294967295; // UINT32_MAX
+
+ // MUST match with enum IccLockType in MozIcc.webidl
+ const unsigned long CARD_LOCK_TYPE_PIN = 0;
+ const unsigned long CARD_LOCK_TYPE_PIN2 = 1;
+ const unsigned long CARD_LOCK_TYPE_PUK = 2;
+ const unsigned long CARD_LOCK_TYPE_PUK2 = 3;
+ const unsigned long CARD_LOCK_TYPE_NCK = 4;
+ const unsigned long CARD_LOCK_TYPE_NSCK = 5;
+ const unsigned long CARD_LOCK_TYPE_NCK1 = 6;
+ const unsigned long CARD_LOCK_TYPE_NCK2 = 7;
+ const unsigned long CARD_LOCK_TYPE_HNCK = 8;
+ const unsigned long CARD_LOCK_TYPE_CCK = 9;
+ const unsigned long CARD_LOCK_TYPE_SPCK = 10;
+ const unsigned long CARD_LOCK_TYPE_PCK = 11;
+ const unsigned long CARD_LOCK_TYPE_RCCK = 12;
+ const unsigned long CARD_LOCK_TYPE_RSPCK = 13;
+ const unsigned long CARD_LOCK_TYPE_NCK_PUK = 14;
+ const unsigned long CARD_LOCK_TYPE_NSCK_PUK = 15;
+ const unsigned long CARD_LOCK_TYPE_NCK1_PUK = 16;
+ const unsigned long CARD_LOCK_TYPE_NCK2_PUK = 17;
+ const unsigned long CARD_LOCK_TYPE_HNCK_PUK = 18;
+ const unsigned long CARD_LOCK_TYPE_CCK_PUK = 19;
+ const unsigned long CARD_LOCK_TYPE_SPCK_PUK = 20;
+ const unsigned long CARD_LOCK_TYPE_PCK_PUK = 21;
+ const unsigned long CARD_LOCK_TYPE_RCCK_PUK = 22;
+ const unsigned long CARD_LOCK_TYPE_RSPCK_PUK = 23;
+ const unsigned long CARD_LOCK_TYPE_FDN = 24;
+
+ // MUST match with enum IccContactType in MozIcc.webidl
+ const unsigned long CARD_CONTACT_TYPE_ADN = 0;
+ const unsigned long CARD_CONTACT_TYPE_FDN = 1;
+ const unsigned long CARD_CONTACT_TYPE_SDN = 2;
+
+ // MUST match with enum IccMvnoType in MozIcc.webidl
+ const unsigned long CARD_MVNO_TYPE_IMSI = 0;
+ const unsigned long CARD_MVNO_TYPE_SPN = 1;
+ const unsigned long CARD_MVNO_TYPE_GID = 2;
+
+ // MUST match with enum IccService in MozIcc.webidl
+ const unsigned long CARD_SERVICE_FDN = 0;
+
/**
* Called when a content process registers receiving unsolicited messages from
* RadioInterfaceLayer in the chrome process. Only a content process that has
@@ -61,6 +143,18 @@ interface nsIIccProvider : nsISupports
void registerIccMsg(in unsigned long clientId, in nsIIccListener listener);
void unregisterIccMsg(in unsigned long clientId, in nsIIccListener listener);
+ /**
+ * UICC Information
+ */
+ nsIIccInfo getIccInfo(in unsigned long clientId);
+
+ /**
+ * Card State
+ *
+ * One of the nsIIccProvider.CARD_STATE_* values.
+ */
+ unsigned long getCardState(in unsigned long clientId);
+
/**
* STK interfaces.
*/
@@ -79,6 +173,31 @@ interface nsIIccProvider : nsISupports
in nsIDOMWindow window,
in jsval event);
+ /**
+ * Card lock interfaces.
+ */
+ nsIDOMDOMRequest getCardLockEnabled(in unsigned long clientId,
+ in nsIDOMWindow window,
+ in unsigned long lockType);
+ nsIDOMDOMRequest unlockCardLock(in unsigned long clientId,
+ in nsIDOMWindow window,
+ in unsigned long lockType,
+ in DOMString password,
+ [optional] in DOMString newPin);
+ nsIDOMDOMRequest setCardLockEnabled(in unsigned long clientId,
+ in nsIDOMWindow window,
+ in unsigned long lockType,
+ in DOMString password,
+ in boolean enabled);
+ nsIDOMDOMRequest changeCardLockPassword(in unsigned long clientId,
+ in nsIDOMWindow window,
+ in unsigned long lockType,
+ in DOMString password,
+ in DOMString newPassword);
+ nsIDOMDOMRequest getCardLockRetryCount(in unsigned long clientId,
+ in nsIDOMWindow window,
+ in unsigned long lockType);
+
/**
* Phonebook interfaces.
*/
@@ -92,7 +211,7 @@ interface nsIIccProvider : nsISupports
in jsval contact,
in DOMString pin2);
- /**
+/**
* Secure Card Icc communication channel
*/
void iccOpenChannel(in unsigned long clientId,
@@ -119,4 +238,16 @@ interface nsIIccProvider : nsISupports
void iccCloseChannel(in unsigned long clientId,
in long channel,
in nsIIccChannelCallback callback);
+
+ /**
+ * Helpers
+ */
+ nsIDOMDOMRequest matchMvno(in unsigned long clientId,
+ in nsIDOMWindow window,
+ in unsigned long mvnoType,
+ in DOMString mvnoData);
+
+ nsISupports getServiceState(in unsigned long clientId,
+ in nsIDOMWindow window,
+ in unsigned long service);
};
diff --git a/dom/icc/interfaces/nsIIccService.idl b/dom/icc/interfaces/nsIIccService.idl
deleted file mode 100644
index b40b3ddb8b8f..000000000000
--- a/dom/icc/interfaces/nsIIccService.idl
+++ /dev/null
@@ -1,329 +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"
-
-interface nsIIcc;
-interface nsIIccInfo;
-
-[scriptable, uuid(7c0ada3d-d8d4-493e-9243-fa3df39855e4)]
-interface nsIIccListener : nsISupports
-{
- void notifyStkCommand(in DOMString aMessage);
- void notifyStkSessionEnd();
- void notifyCardStateChanged();
- void notifyIccInfoChanged();
-};
-
-/**
- * A callback interface for handling asynchronous response.
- */
-[scriptable, uuid(b0e2899a-adc3-11e4-89cf-1b60eaa35b06)]
-interface nsIIccCallback : nsISupports
-{
- /**
- * The success callback with no result required:
- * |unlockCardLock|, |setCardLockEnabled| and |changeCardLockPassword|.
- */
- void notifySuccess();
-
- /**
- * The success callback with boolean response:
- * |getCardLockEnabled|, |matchMvno|, and |getServiceStateEnabled|.
- */
- void notifySuccessWithBoolean(in boolean aResult);
-
- /**
- * The success callback of |getCardLockRetryCount|.
- *
- * @param aCount
- * The number of remaining retries. -1 if unknown.
- */
- void notifyGetCardLockRetryCount(in long aCount);
-
- /**
- * The error callback of |getCardLockEnabled|, |getCardLockRetryCount|,
- * |matchMvno|, and |getServiceStateEnabled|.
- *
- * @param aErrorMsg
- * The error message.
- */
- void notifyError(in DOMString aErrorMsg);
-
- /**
- * The error callback of |unlockCardLock|, |setCardLockEnabled| and
- * |changeCardLockPassword|.
- *
- * @param aErrorMsg
- * The error message.
- * @param aRetryCount
- * The number of remaining retries. -1 if unknown.
- */
- void notifyCardLockError(in DOMString aErrorMsg, in long aRetryCount);
-};
-
-%{C++
-#define ICC_SERVICE_CID \
- { 0xbab0277a, 0x900e, 0x11e4, { 0x80, 0xc7, 0xdb, 0xd7, 0xad, 0x05, 0x24, 0x01 } }
-#define ICC_SERVICE_CONTRACTID \
- "@mozilla.org/icc/iccservice;1"
-
-template struct already_AddRefed;
-%}
-
-/**
- * XPCOM Service for the selection of the ICC to be accessed.
- */
-[scriptable, uuid(6590a04c-9ca4-11e4-ae95-570876ecc428)]
-interface nsIIccService : nsISupports
-{
- /**
- * Get Icc instance with specified Service Id.
- *
- * @param aServiceId
- * Started from 0 to nsIMobileConnectionService.numItems - 1;
- *
- * @return a nsIcc instance.
- */
- nsIIcc getIccByServiceId(in unsigned long aServiceId);
-};
-
-%{C++
-already_AddRefed
-NS_CreateIccService();
-%}
-
-/**
- * XPCOM component that provides the access to the selected ICC.
- */
-[scriptable, uuid(38a5bbe2-add6-11e4-ba9e-e390d1d19195)]
-interface nsIIcc : nsISupports
-{
- /**
- * Card State Constants
- *
- * Note: MUST be matched with enum IccCardState in MozIcc.webidl!
- */
- const unsigned long CARD_STATE_UNKNOWN = 0;
- const unsigned long CARD_STATE_READY = 1;
- const unsigned long CARD_STATE_PIN_REQUIRED = 2;
- const unsigned long CARD_STATE_PUK_REQUIRED = 3;
- const unsigned long CARD_STATE_PERMANENT_BLOCKED = 4;
- const unsigned long CARD_STATE_PERSONALIZATION_IN_PROGRESS = 5;
- const unsigned long CARD_STATE_PERSONALIZATION_READY = 6;
- const unsigned long CARD_STATE_NETWORK_LOCKED = 7;
- const unsigned long CARD_STATE_NETWORK_SUBSET_LOCKED = 8;
- const unsigned long CARD_STATE_CORPORATE_LOCKED = 9;
- const unsigned long CARD_STATE_SERVICE_PROVIDER_LOCKED = 10;
- const unsigned long CARD_STATE_SIM_LOCKED = 11;
- const unsigned long CARD_STATE_NETWORK_PUK_REQUIRED = 12;
- const unsigned long CARD_STATE_NETWORK_SUBSET_PUK_REQUIRED = 13;
- const unsigned long CARD_STATE_CORPORATE_PUK_REQUIRED = 14;
- const unsigned long CARD_STATE_SERVICE_PROVIDER_PUK_REQUIRED = 15;
- const unsigned long CARD_STATE_SIM_PUK_REQUIRED = 16;
- const unsigned long CARD_STATE_NETWORK1_LOCKED = 17;
- const unsigned long CARD_STATE_NETWORK2_LOCKED = 18;
- const unsigned long CARD_STATE_HRPD_NETWORK_LOCKED = 19;
- const unsigned long CARD_STATE_RUIM_CORPORATE_LOCKED = 20;
- const unsigned long CARD_STATE_RUIM_SERVICE_PROVIDER_LOCKED = 21;
- const unsigned long CARD_STATE_RUIM_LOCKED = 22;
- const unsigned long CARD_STATE_NETWORK1_PUK_REQUIRED = 23;
- const unsigned long CARD_STATE_NETWORK2_PUK_REQUIRED = 24;
- const unsigned long CARD_STATE_HRPD_NETWORK_PUK_REQUIRED = 25;
- const unsigned long CARD_STATE_RUIM_CORPORATE_PUK_REQUIRED = 26;
- const unsigned long CARD_STATE_RUIM_SERVICE_PROVIDER_PUK_REQUIRED = 27;
- const unsigned long CARD_STATE_RUIM_PUK_REQUIRED = 28;
- const unsigned long CARD_STATE_ILLEGAL = 29;
-
- const unsigned long CARD_STATE_UNDETECTED = 4294967295; // UINT32_MAX
-
- /**
- * Card Lock Constants
- *
- * Note: MUST be matched with enum IccLockType in MozIcc.webidl!
- */
- const unsigned long CARD_LOCK_TYPE_PIN = 0;
- const unsigned long CARD_LOCK_TYPE_PIN2 = 1;
- const unsigned long CARD_LOCK_TYPE_PUK = 2;
- const unsigned long CARD_LOCK_TYPE_PUK2 = 3;
- const unsigned long CARD_LOCK_TYPE_NCK = 4;
- const unsigned long CARD_LOCK_TYPE_NSCK = 5;
- const unsigned long CARD_LOCK_TYPE_NCK1 = 6;
- const unsigned long CARD_LOCK_TYPE_NCK2 = 7;
- const unsigned long CARD_LOCK_TYPE_HNCK = 8;
- const unsigned long CARD_LOCK_TYPE_CCK = 9;
- const unsigned long CARD_LOCK_TYPE_SPCK = 10;
- const unsigned long CARD_LOCK_TYPE_PCK = 11;
- const unsigned long CARD_LOCK_TYPE_RCCK = 12;
- const unsigned long CARD_LOCK_TYPE_RSPCK = 13;
- const unsigned long CARD_LOCK_TYPE_NCK_PUK = 14;
- const unsigned long CARD_LOCK_TYPE_NSCK_PUK = 15;
- const unsigned long CARD_LOCK_TYPE_NCK1_PUK = 16;
- const unsigned long CARD_LOCK_TYPE_NCK2_PUK = 17;
- const unsigned long CARD_LOCK_TYPE_HNCK_PUK = 18;
- const unsigned long CARD_LOCK_TYPE_CCK_PUK = 19;
- const unsigned long CARD_LOCK_TYPE_SPCK_PUK = 20;
- const unsigned long CARD_LOCK_TYPE_PCK_PUK = 21;
- const unsigned long CARD_LOCK_TYPE_RCCK_PUK = 22;
- const unsigned long CARD_LOCK_TYPE_RSPCK_PUK = 23;
- const unsigned long CARD_LOCK_TYPE_FDN = 24;
-
- /**
- * Contact Type Constants
- *
- * Note: MUST be matched with enum IccContactType in MozIcc.webidl!
- */
- const unsigned long CARD_CONTACT_TYPE_ADN = 0;
- const unsigned long CARD_CONTACT_TYPE_FDN = 1;
- const unsigned long CARD_CONTACT_TYPE_SDN = 2;
-
- /**
- * MVNO Type Constants
- *
- * Note: MUST be matched with enum IccMvnoType in MozIcc.webidl!
- */
- const unsigned long CARD_MVNO_TYPE_IMSI = 0;
- const unsigned long CARD_MVNO_TYPE_SPN = 1;
- const unsigned long CARD_MVNO_TYPE_GID = 2;
-
- /**
- * Card Service Constants
- *
- * Note: MUST be matched with enum IccService in MozIcc.webidl!
- */
- const unsigned long CARD_SERVICE_FDN = 0;
-
- /**
- * Called to register icc-related changes.
- *
- * 'mobileconnection' permission is required to register.
- */
- void registerListener(in nsIIccListener aListener);
- void unregisterListener(in nsIIccListener aListener);
-
- /**
- * Information stored in this ICC.
- */
- readonly attribute nsIIccInfo iccInfo;
-
- /**
- * Indicates the state of this ICC.
- *
- * One of the CARD_STATE_* values.
- */
- readonly attribute unsigned long cardState;
-
- /**
- * Get the status of an ICC lock (e.g. the PIN lock).
- *
- * @param aLockType
- * One of the CARD_LOCK_TYPE_* values.
- * @param aCallback
- * An instance of nsIIccCallback:
- * nsIIccCallback::notifySuccessWithBoolean() if success.
- * nsIIccCallback::notifyError(), otherwise.
- */
- void getCardLockEnabled(in unsigned long aLockType,
- in nsIIccCallback aCallback);
-
- /**
- * Unlock a card lock.
- *
- * @param aLockType
- * One of the CARD_LOCK_TYPE_* values.
- * @param aPassword
- * The password of this lock.
- * @param aNewPin (Optional)
- * The new PIN to be set after PUK/PUK2 is unlock.
- * @param aCallback
- * An instance of nsIIccCallback:
- * nsIIccCallback::notifySuccess() if success.
- * nsIIccCallback::notifyCardLockError(), otherwise.
- */
- void unlockCardLock(in unsigned long aLockType,
- in DOMString aPassword,
- in DOMString aNewPin,
- in nsIIccCallback aCallback);
-
- /**
- * Enable/Disable a card lock.
- *
- * @param aLockType
- * One of the CARD_LOCK_TYPE_* values.
- * @param aPassword
- * The password of this lock.
- * @param aEnabled.
- * True to enable the lock. False to disable, otherwise.
- * @param aCallback
- * An instance of nsIIccCallback:
- * nsIIccCallback::notifySuccess() if success.
- * nsIIccCallback::notifyCardLockError(), otherwise.
- */
- void setCardLockEnabled(in unsigned long aLockType,
- in DOMString aPassword,
- in boolean aEnabled,
- in nsIIccCallback aCallback);
-
- /**
- * Change the password of a card lock.
- *
- * @param aLockType
- * One of the CARD_LOCK_TYPE_* values.
- * @param aPassword
- * The password of this lock.
- * @param aNewPassword.
- * The new password of this lock.
- * @param aCallback
- * An instance of nsIIccCallback:
- * nsIIccCallback::notifySuccess() if success.
- * nsIIccCallback::notifyCardLockError(), otherwise.
- */
- void changeCardLockPassword(in unsigned long aLockType,
- in DOMString aPassword,
- in DOMString aNewPassword,
- in nsIIccCallback aCallback);
-
- /**
- * Get the number of remaining tries of a lock.
- *
- * @param aLockType
- * One of the CARD_LOCK_TYPE_* values.
- * @param aCallback
- * An instance of nsIIccCallback:
- * nsIIccCallback::notifyGetCardLockRetryCount() if success.
- * nsIIccCallback::notifyError(), otherwise.
- */
- void getCardLockRetryCount(in unsigned long aLockType,
- in nsIIccCallback aCallback);
-
- /**
- * Verify whether the passed data (matchData) matches with some ICC's field
- * according to the mvno type (mvnoType).
- *
- * @param aMvnoType
- * One of CARD_MVNO_TYPE_* values.
- * @param aMvnoData
- * Data to be compared with ICC's field.
- * @param aCallback
- * An instance of nsIIccCallback:
- * nsIIccCallback::notifySuccessWithBoolean() if success.
- * nsIIccCallback::notifyError(), otherwise.
- */
- void matchMvno(in unsigned long aMvnoType,
- in DOMString aMvnoData,
- in nsIIccCallback aCallback);
-
- /**
- * Retrieve the the availability of an icc service.
- *
- * @param aService
- * One of CARD_SERVICE_* values.
- * @param aCallback
- * An instance of nsIIccCallback:
- * nsIIccCallback::notifySuccessWithBoolean() if success.
- * nsIIccCallback::notifyError(), otherwise.
- */
- void getServiceStateEnabled(in unsigned long aService,
- in nsIIccCallback aCallback);
-};
diff --git a/dom/icc/ipc/IccChild.cpp b/dom/icc/ipc/IccChild.cpp
deleted file mode 100644
index df988183966e..000000000000
--- a/dom/icc/ipc/IccChild.cpp
+++ /dev/null
@@ -1,310 +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 "mozilla/dom/icc/IccChild.h"
-#include "IccInfo.h"
-
-using mozilla::dom::IccInfo;
-
-namespace mozilla {
-namespace dom {
-namespace icc {
-
-/**
- * PIccChild Implementation.
- */
-
-IccChild::IccChild()
- : mCardState(nsIIcc::CARD_STATE_UNKNOWN)
- , mIsAlive(true)
-{
- MOZ_COUNT_CTOR(IccChild);
-}
-
-IccChild::~IccChild()
-{
- MOZ_COUNT_DTOR(IccChild);
-}
-
-void
-IccChild::Init()
-{
- OptionalIccInfoData infoData;
-
- bool rv = SendInit(&infoData, &mCardState);
- NS_ENSURE_TRUE_VOID(rv);
-
- UpdateIccInfo(infoData);
-}
-
-void
-IccChild::Shutdown(){
- if (mIsAlive) {
- mIsAlive = false;
- Send__delete__(this);
- }
-
- mListeners.Clear();
- mIccInfo = nullptr;
- mCardState = nsIIcc::CARD_STATE_UNKNOWN;
-}
-
-void
-IccChild::ActorDestroy(ActorDestroyReason why)
-{
- mIsAlive = false;
-}
-
-bool
-IccChild::RecvNotifyCardStateChanged(const uint32_t& aCardState)
-{
- mCardState = aCardState;
-
- for (int32_t i = 0; i < mListeners.Count(); i++) {
- mListeners[i]->NotifyCardStateChanged();
- }
-
- return true;
-}
-
-bool
-IccChild::RecvNotifyIccInfoChanged(const OptionalIccInfoData& aInfoData)
-{
- UpdateIccInfo(aInfoData);
-
- for (int32_t i = 0; i < mListeners.Count(); i++) {
- mListeners[i]->NotifyIccInfoChanged();
- }
-
- return true;
-}
-
-PIccRequestChild*
-IccChild::AllocPIccRequestChild(const IccRequest& aRequest)
-{
- MOZ_CRASH("Caller is supposed to manually construct a request!");
-}
-
-bool
-IccChild::DeallocPIccRequestChild(PIccRequestChild* aActor)
-{
- delete aActor;
- return true;
-}
-
-bool
-IccChild::SendRequest(const IccRequest& aRequest, nsIIccCallback* aRequestReply)
-{
- NS_ENSURE_TRUE(mIsAlive, false);
-
- // Deallocated in IccChild::DeallocPIccRequestChild().
- IccRequestChild* actor = new IccRequestChild(aRequestReply);
- SendPIccRequestConstructor(actor, aRequest);
-
- return true;
-}
-
-void
-IccChild::UpdateIccInfo(const OptionalIccInfoData& aInfoData) {
- if (aInfoData.type() == OptionalIccInfoData::Tvoid_t) {
- mIccInfo = nullptr;
- return;
- }
-
- NS_ENSURE_TRUE_VOID(aInfoData.type() == OptionalIccInfoData::TIccInfoData);
-
- nsRefPtr iccInfo;
- const IccInfoData& infoData = aInfoData.get_IccInfoData();
- if (infoData.iccType().EqualsLiteral("sim")
- || infoData.iccType().EqualsLiteral("usim")) {
- iccInfo = new GsmIccInfo(infoData);
- } else if (infoData.iccType().EqualsLiteral("ruim")
- || infoData.iccType().EqualsLiteral("csim")){
- iccInfo = new CdmaIccInfo(infoData);
- } else {
- iccInfo = new IccInfo(infoData);
- }
-
- // We update the orignal one instead of replacing with a new one
- // if the IccType is the same.
- if (mIccInfo) {
- nsString oldIccType;
- nsString newIccType;
- mIccInfo->GetIccType(oldIccType);
- iccInfo->GetIccType(newIccType);
-
- if (oldIccType.Equals(newIccType)) {
- mIccInfo->Update(iccInfo);
- return;
- }
- }
-
- mIccInfo = iccInfo;
-}
-
-/**
- * nsIIcc Implementation.
- */
-
-NS_IMPL_ISUPPORTS(IccChild, nsIIcc)
-
-NS_IMETHODIMP
-IccChild::RegisterListener(nsIIccListener *aListener)
-{
- NS_ENSURE_TRUE(!mListeners.Contains(aListener), NS_ERROR_UNEXPECTED);
-
- mListeners.AppendObject(aListener);
- return NS_OK;
-}
-
-NS_IMETHODIMP
-IccChild::UnregisterListener(nsIIccListener *aListener)
-{
- NS_ENSURE_TRUE(mListeners.Contains(aListener), NS_ERROR_UNEXPECTED);
-
- mListeners.RemoveObject(aListener);
- return NS_OK;
-}
-
-NS_IMETHODIMP
-IccChild::GetIccInfo(nsIIccInfo** aIccInfo)
-{
- nsCOMPtr info(mIccInfo);
- info.forget(aIccInfo);
- return NS_OK;
-}
-
-NS_IMETHODIMP
-IccChild::GetCardState(uint32_t* aCardState)
-{
- *aCardState = mCardState;
- return NS_OK;
-}
-
-NS_IMETHODIMP
-IccChild::GetCardLockEnabled(uint32_t aLockType,
- nsIIccCallback* aRequestReply)
-{
- return SendRequest(GetCardLockEnabledRequest(aLockType), aRequestReply)
- ? NS_OK : NS_ERROR_FAILURE;
-}
-
-NS_IMETHODIMP
-IccChild::UnlockCardLock(uint32_t aLockType,
- const nsAString& aPassword,
- const nsAString& aNewPin,
- nsIIccCallback* aRequestReply)
-{
- return SendRequest(UnlockCardLockRequest(aLockType,
- nsString(aPassword),
- nsString(aNewPin)),
- aRequestReply)
- ? NS_OK : NS_ERROR_FAILURE;
-}
-
-NS_IMETHODIMP
-IccChild::SetCardLockEnabled(uint32_t aLockType,
- const nsAString& aPassword,
- bool aEnabled,
- nsIIccCallback* aRequestReply)
-{
- return SendRequest(SetCardLockEnabledRequest(aLockType,
- nsString(aPassword),
- aEnabled),
- aRequestReply)
- ? NS_OK : NS_ERROR_FAILURE;
-}
-
-NS_IMETHODIMP
-IccChild::ChangeCardLockPassword(uint32_t aLockType,
- const nsAString& aPassword,
- const nsAString& aNewPassword,
- nsIIccCallback* aRequestReply)
-{
- return SendRequest(ChangeCardLockPasswordRequest(aLockType,
- nsString(aPassword),
- nsString(aNewPassword)),
- aRequestReply)
- ? NS_OK : NS_ERROR_FAILURE;
-}
-
-NS_IMETHODIMP
-IccChild::GetCardLockRetryCount(uint32_t aLockType,
- nsIIccCallback* aRequestReply)
-{
- return SendRequest(GetCardLockRetryCountRequest(aLockType), aRequestReply)
- ? NS_OK : NS_ERROR_FAILURE;
-}
-
-NS_IMETHODIMP
-IccChild::MatchMvno(uint32_t aMvnoType,
- const nsAString& aMvnoData,
- nsIIccCallback* aRequestReply)
-{
- return SendRequest(MatchMvnoRequest(aMvnoType, nsString(aMvnoData)),
- aRequestReply)
- ? NS_OK : NS_ERROR_FAILURE;
-}
-
-NS_IMETHODIMP
-IccChild::GetServiceStateEnabled(uint32_t aService,
- nsIIccCallback* aRequestReply)
-{
- return SendRequest(GetServiceStateEnabledRequest(aService),
- aRequestReply)
- ? NS_OK : NS_ERROR_FAILURE;
-}
-
-/**
- * PIccRequestChild Implementation.
- */
-
-IccRequestChild::IccRequestChild(nsIIccCallback* aRequestReply)
- : mRequestReply(aRequestReply)
-{
- MOZ_COUNT_CTOR(IccRequestChild);
- MOZ_ASSERT(aRequestReply);
-}
-
-bool
-IccRequestChild::Recv__delete__(const IccReply& aResponse)
-{
- MOZ_ASSERT(mRequestReply);
-
- switch(aResponse.type()) {
- case IccReply::TIccReplySuccess:
- return NS_SUCCEEDED(mRequestReply->NotifySuccess());
- case IccReply::TIccReplySuccessWithBoolean: {
- const IccReplySuccessWithBoolean& resultWithBoolean
- = aResponse.get_IccReplySuccessWithBoolean();
- return NS_SUCCEEDED(
- mRequestReply->NotifySuccessWithBoolean(resultWithBoolean.result()));
- }
- case IccReply::TIccReplyCardLockRetryCount: {
- const IccReplyCardLockRetryCount& retryCount
- = aResponse.get_IccReplyCardLockRetryCount();
- return NS_SUCCEEDED(
- mRequestReply->NotifyGetCardLockRetryCount(retryCount.count()));
- }
- case IccReply::TIccReplyError: {
- const IccReplyError& error = aResponse.get_IccReplyError();
- return NS_SUCCEEDED(mRequestReply->NotifyError(error.message()));
- }
- case IccReply::TIccReplyCardLockError: {
- const IccReplyCardLockError& error
- = aResponse.get_IccReplyCardLockError();
- return NS_SUCCEEDED(
- mRequestReply->NotifyCardLockError(error.message(),
- error.retryCount()));
- }
- default:
- MOZ_CRASH("Received invalid response type!");
- }
-
- return true;
-}
-
-} // namespace icc
-} // namespace dom
-} // namespace mozilla
\ No newline at end of file
diff --git a/dom/icc/ipc/IccChild.h b/dom/icc/ipc/IccChild.h
deleted file mode 100644
index eb7aefe37cc7..000000000000
--- a/dom/icc/ipc/IccChild.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef mozilla_dom_icc_IccChild_h
-#define mozilla_dom_icc_IccChild_h
-
-#include "mozilla/dom/icc/PIccChild.h"
-#include "mozilla/dom/icc/PIccRequestChild.h"
-#include "nsIIccService.h"
-
-namespace mozilla {
-namespace dom {
-
-class IccInfo;
-
-namespace icc {
-
-class IccChild MOZ_FINAL : public PIccChild
- , public nsIIcc
-{
-public:
- NS_DECL_ISUPPORTS
- NS_DECL_NSIICC
-
- explicit IccChild();
-
- void
- Init();
-
- void
- Shutdown();
-
-protected:
- virtual void
- ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE;
-
- virtual PIccRequestChild*
- AllocPIccRequestChild(const IccRequest& aRequest) MOZ_OVERRIDE;
-
- virtual bool
- DeallocPIccRequestChild(PIccRequestChild* aActor) MOZ_OVERRIDE;
-
- virtual bool
- RecvNotifyCardStateChanged(const uint32_t& aCardState) MOZ_OVERRIDE;
-
- virtual bool
- RecvNotifyIccInfoChanged(const OptionalIccInfoData& aInfoData) MOZ_OVERRIDE;
-
-private:
- // MOZ_FINAL suppresses -Werror,-Wdelete-non-virtual-dtor
- ~IccChild();
-
- void
- UpdateIccInfo(const OptionalIccInfoData& aInfoData);
-
- bool
- SendRequest(const IccRequest& aRequest, nsIIccCallback* aRequestReply);
-
- nsCOMArray mListeners;
- nsRefPtr mIccInfo;
- uint32_t mCardState;
- bool mIsAlive;
-};
-
-class IccRequestChild MOZ_FINAL : public PIccRequestChild
-{
-public:
- explicit IccRequestChild(nsIIccCallback* aRequestReply);
-
-protected:
- virtual bool
- Recv__delete__(const IccReply& aReply) MOZ_OVERRIDE;
-
-private:
- // MOZ_FINAL suppresses -Werror,-Wdelete-non-virtual-dtor
- virtual ~IccRequestChild() {
- MOZ_COUNT_DTOR(IccRequestChild);
- }
-
- nsCOMPtr mRequestReply;
-};
-
-} // namespace icc
-} // namespace dom
-} // namespace mozilla
-
-#endif // mozilla_dom_icc_IccChild_h
diff --git a/dom/icc/ipc/IccIPCService.cpp b/dom/icc/ipc/IccIPCService.cpp
deleted file mode 100644
index 64b4e43ddfc0..000000000000
--- a/dom/icc/ipc/IccIPCService.cpp
+++ /dev/null
@@ -1,56 +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 "IccIPCService.h"
-
-#include "mozilla/dom/ContentChild.h"
-#include "mozilla/Preferences.h"
-
-namespace mozilla {
-namespace dom {
-namespace icc {
-
-NS_IMPL_ISUPPORTS(IccIPCService, nsIIccService)
-
-IccIPCService::IccIPCService()
-{
- int32_t numRil = Preferences::GetInt("ril.numRadioInterfaces", 1);
- mIccs.SetLength(numRil);
-}
-
-IccIPCService::~IccIPCService()
-{
- uint32_t count = mIccs.Length();
- for (uint32_t i = 0; i < count; i++) {
- if (mIccs[i]) {
- mIccs[i]->Shutdown();
- }
- }
-}
-
-NS_IMETHODIMP
-IccIPCService::GetIccByServiceId(uint32_t aServiceId, nsIIcc** aIcc)
-{
- NS_ENSURE_TRUE(aServiceId < mIccs.Length(), NS_ERROR_INVALID_ARG);
-
- if (!mIccs[aServiceId]) {
- nsRefPtr child = new IccChild();
-
- // |SendPIccConstructor| adds another reference to the child
- // actor and removes in |DeallocPIccChild|.
- ContentChild::GetSingleton()->SendPIccConstructor(child, aServiceId);
- child->Init();
-
- mIccs[aServiceId] = child;
- }
-
- nsCOMPtr icc(mIccs[aServiceId]);
- icc.forget(aIcc);
-
- return NS_OK;
-}
-
-} // namespace icc
-} // namespace dom
-} // namespace mozilla
diff --git a/dom/icc/ipc/IccIPCService.h b/dom/icc/ipc/IccIPCService.h
deleted file mode 100644
index 87a54d2ed117..000000000000
--- a/dom/icc/ipc/IccIPCService.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef mozilla_dom_icc_IccIPCService_h
-#define mozilla_dom_icc_IccIPCService_h
-
-#include "nsCOMPtr.h"
-#include "nsIIccService.h"
-
-namespace mozilla {
-namespace dom {
-namespace icc {
-
-class IccChild;
-
-class IccIPCService MOZ_FINAL : public nsIIccService
-{
-public:
- NS_DECL_ISUPPORTS
- NS_DECL_NSIICCSERVICE
-
- IccIPCService();
-
-private:
- // MOZ_FINAL suppresses -Werror,-Wdelete-non-virtual-dtor
- ~IccIPCService();
-
- nsTArray> mIccs;
-};
-
-} // namespace icc
-} // namespace dom
-} // namespace mozilla
-
-#endif // mozilla_dom_icc_IccIPCService_h
\ No newline at end of file
diff --git a/dom/icc/ipc/IccParent.cpp b/dom/icc/ipc/IccParent.cpp
deleted file mode 100644
index f6f996cddc2b..000000000000
--- a/dom/icc/ipc/IccParent.cpp
+++ /dev/null
@@ -1,320 +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 "mozilla/dom/icc/IccParent.h"
-#include "nsIIccService.h"
-#include "IccInfo.h"
-
-using mozilla::dom::IccInfo;
-
-namespace mozilla {
-namespace dom {
-namespace icc {
-
-namespace {
-
-static void
-GetIccInfoDataFromIccInfo(nsIIccInfo* aInInfo, IccInfoData& aOutData) {
- aInInfo->GetIccType(aOutData.iccType());
- aInInfo->GetIccid(aOutData.iccid());
- aInInfo->GetMcc(aOutData.mcc());
- aInInfo->GetMnc(aOutData.mnc());
- aInInfo->GetSpn(aOutData.spn());
- aInInfo->GetIsDisplayNetworkNameRequired(
- &aOutData.isDisplayNetworkNameRequired());
- aInInfo->GetIsDisplaySpnRequired(
- &aOutData.isDisplaySpnRequired());
-
- nsCOMPtr gsmIccInfo(do_QueryInterface(aInInfo));
- if (gsmIccInfo) {
- gsmIccInfo->GetMsisdn(aOutData.phoneNumber());
- }
-
- nsCOMPtr cdmaIccInfo(do_QueryInterface(aInInfo));
- if (cdmaIccInfo) {
- cdmaIccInfo->GetMdn(aOutData.phoneNumber());
- cdmaIccInfo->GetPrlVersion(&aOutData.prlVersion());
- }
-}
-
-} // anonymous namespace
-
-/**
- * PIccParent Implementation.
- */
-
-IccParent::IccParent(uint32_t aServiceId)
-{
- MOZ_COUNT_CTOR(IccParent);
-
- nsCOMPtr service =
- do_GetService(ICC_SERVICE_CONTRACTID);
-
- NS_ASSERTION(service, "Failed to get IccService!");
-
- service->GetIccByServiceId(aServiceId, getter_AddRefs(mIcc));
-
- NS_ASSERTION(mIcc, "Failed to get Icc with specified serviceId.");
-
- mIcc->RegisterListener(this);
-}
-
-void
-IccParent::ActorDestroy(ActorDestroyReason aWhy)
-{
- if (mIcc) {
- mIcc->UnregisterListener(this);
- mIcc = nullptr;
- }
-}
-
-bool
-IccParent::RecvInit(OptionalIccInfoData* aInfoData,
- uint32_t* aCardState)
-{
- NS_ENSURE_TRUE(mIcc, false);
-
- nsresult rv = mIcc->GetCardState(aCardState);
- NS_ENSURE_SUCCESS(rv, false);
-
- nsCOMPtr iccInfo;
- rv = mIcc->GetIccInfo(getter_AddRefs(iccInfo));
- NS_ENSURE_SUCCESS(rv, false);
-
- if (iccInfo) {
- IccInfoData data;
- GetIccInfoDataFromIccInfo(iccInfo, data);
- *aInfoData = OptionalIccInfoData(data);
-
- return true;
- }
-
- *aInfoData = OptionalIccInfoData(void_t());
-
- return true;
-}
-
-PIccRequestParent*
-IccParent::AllocPIccRequestParent(const IccRequest& aRequest)
-{
- NS_ASSERTION(mIcc, "AllocPIccRequestParent after actor was destroyed!");
-
- IccRequestParent* actor = new IccRequestParent(mIcc);
- // Add an extra ref for IPDL. Will be released in
- // IccParent::DeallocPIccRequestParent().
- actor->AddRef();
- return actor;
-}
-
-bool
-IccParent::DeallocPIccRequestParent(PIccRequestParent* aActor)
-{
- // IccRequestParent is refcounted, must not be freed manually.
- static_cast(aActor)->Release();
- return true;
-}
-
-bool
-IccParent::RecvPIccRequestConstructor(PIccRequestParent* aActor,
- const IccRequest& aRequest)
-{
- NS_ASSERTION(mIcc, "RecvPIccRequestConstructor after actor was destroyed!");
-
- IccRequestParent* actor = static_cast(aActor);
-
- switch (aRequest.type()) {
- case IccRequest::TGetCardLockEnabledRequest:
- return actor->DoRequest(aRequest.get_GetCardLockEnabledRequest());
- case IccRequest::TUnlockCardLockRequest:
- return actor->DoRequest(aRequest.get_UnlockCardLockRequest());
- case IccRequest::TSetCardLockEnabledRequest:
- return actor->DoRequest(aRequest.get_SetCardLockEnabledRequest());
- case IccRequest::TChangeCardLockPasswordRequest:
- return actor->DoRequest(aRequest.get_ChangeCardLockPasswordRequest());
- case IccRequest::TGetCardLockRetryCountRequest:
- return actor->DoRequest(aRequest.get_GetCardLockRetryCountRequest());
- case IccRequest::TMatchMvnoRequest:
- return actor->DoRequest(aRequest.get_MatchMvnoRequest());
- case IccRequest::TGetServiceStateEnabledRequest:
- return actor->DoRequest(aRequest.get_GetServiceStateEnabledRequest());
- default:
- MOZ_CRASH("Received invalid request type!");
- }
-
- return true;
-}
-
-/**
- * nsIIccListener Implementation.
- */
-
-NS_IMPL_ISUPPORTS(IccParent, nsIIccListener)
-
-NS_IMETHODIMP
-IccParent::NotifyStkCommand(const nsAString & aMessage)
-{
- // Bug 1114938 - [B2G][ICC] Refactor STK in MozIcc.webidl with IPDL.
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-IccParent::NotifyStkSessionEnd()
-{
- // Bug 1114938 - [B2G][ICC] Refactor STK in MozIcc.webidl with IPDL.
- return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
-IccParent::NotifyCardStateChanged()
-{
- NS_ENSURE_TRUE(mIcc, NS_ERROR_FAILURE);
-
- uint32_t cardState;
- nsresult rv = mIcc->GetCardState(&cardState);
- NS_ENSURE_SUCCESS(rv, rv);
-
- return SendNotifyCardStateChanged(cardState) ? NS_OK : NS_ERROR_FAILURE;
-}
-
-NS_IMETHODIMP
-IccParent::NotifyIccInfoChanged()
-{
- NS_ENSURE_TRUE(mIcc, NS_ERROR_FAILURE);
-
- nsCOMPtr iccInfo;
- nsresult rv = mIcc->GetIccInfo(getter_AddRefs(iccInfo));
- NS_ENSURE_SUCCESS(rv, rv);
-
- if (!iccInfo) {
- return SendNotifyIccInfoChanged(OptionalIccInfoData(void_t()))
- ? NS_OK : NS_ERROR_FAILURE;
- }
-
- IccInfoData data;
- GetIccInfoDataFromIccInfo(iccInfo, data);
-
- return SendNotifyIccInfoChanged(OptionalIccInfoData(data))
- ? NS_OK : NS_ERROR_FAILURE;
-}
-
-/**
- * PIccRequestParent Implementation.
- */
-
-IccRequestParent::IccRequestParent(nsIIcc* aIcc)
- : mIcc(aIcc)
-{
- MOZ_COUNT_CTOR(IccRequestParent);
-}
-
-void
-IccRequestParent::ActorDestroy(ActorDestroyReason aWhy)
-{
- mIcc = nullptr;
-}
-
-bool
-IccRequestParent::DoRequest(const GetCardLockEnabledRequest& aRequest)
-{
- return NS_SUCCEEDED(mIcc->GetCardLockEnabled(aRequest.lockType(),
- this));
-}
-
-bool
-IccRequestParent::DoRequest(const UnlockCardLockRequest& aRequest)
-{
- return NS_SUCCEEDED(mIcc->UnlockCardLock(aRequest.lockType(),
- aRequest.password(),
- aRequest.newPin(),
- this));
-}
-
-bool
-IccRequestParent::DoRequest(const SetCardLockEnabledRequest& aRequest)
-{
- return NS_SUCCEEDED(mIcc->SetCardLockEnabled(aRequest.lockType(),
- aRequest.password(),
- aRequest.enabled(),
- this));
-}
-
-bool
-IccRequestParent::DoRequest(const ChangeCardLockPasswordRequest& aRequest)
-{
- return NS_SUCCEEDED(mIcc->ChangeCardLockPassword(aRequest.lockType(),
- aRequest.password(),
- aRequest.newPassword(),
- this));
-}
-
-bool
-IccRequestParent::DoRequest(const GetCardLockRetryCountRequest& aRequest)
-{
- return NS_SUCCEEDED(mIcc->GetCardLockRetryCount(aRequest.lockType(),
- this));
-}
-
-bool
-IccRequestParent::DoRequest(const MatchMvnoRequest& aRequest)
-{
- return NS_SUCCEEDED(mIcc->MatchMvno(aRequest.mvnoType(),
- aRequest.mvnoData(),
- this));
-}
-
-bool
-IccRequestParent::DoRequest(const GetServiceStateEnabledRequest& aRequest)
-{
- return NS_SUCCEEDED(mIcc->GetServiceStateEnabled(aRequest.service(),
- this));
-}
-
-nsresult
-IccRequestParent::SendReply(const IccReply& aReply)
-{
- NS_ENSURE_TRUE(mIcc, NS_ERROR_FAILURE);
-
- return Send__delete__(this, aReply) ? NS_OK : NS_ERROR_FAILURE;
-}
-
-/**
- * nsIIccCallback Implementation.
- */
-
-NS_IMPL_ISUPPORTS(IccRequestParent, nsIIccCallback)
-
-NS_IMETHODIMP
-IccRequestParent::NotifySuccess()
-{
- return SendReply(IccReplySuccess());
-}
-
-NS_IMETHODIMP
-IccRequestParent::NotifySuccessWithBoolean(bool aResult)
-{
- return SendReply(IccReplySuccessWithBoolean(aResult));
-}
-
-NS_IMETHODIMP
-IccRequestParent::NotifyGetCardLockRetryCount(int32_t aCount)
-{
- return SendReply(IccReplyCardLockRetryCount(aCount));
-}
-
-NS_IMETHODIMP
-IccRequestParent::NotifyError(const nsAString & aErrorMsg)
-{
- return SendReply(IccReplyError(nsString(aErrorMsg)));
-}
-
-NS_IMETHODIMP
-IccRequestParent::NotifyCardLockError(const nsAString & aErrorMsg,
- int32_t aRetryCount)
-{
- return SendReply(IccReplyCardLockError(aRetryCount, nsString(aErrorMsg)));
-}
-
-} // namespace icc
-} // namespace dom
-} // namespace mozilla
\ No newline at end of file
diff --git a/dom/icc/ipc/IccParent.h b/dom/icc/ipc/IccParent.h
deleted file mode 100644
index bd76620cfb8a..000000000000
--- a/dom/icc/ipc/IccParent.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-#ifndef mozilla_dom_icc_IccParent_h
-#define mozilla_dom_icc_IccParent_h
-
-#include "mozilla/dom/icc/PIccParent.h"
-#include "mozilla/dom/icc/PIccRequestParent.h"
-#include "nsIIccService.h"
-
-namespace mozilla {
-namespace dom {
-namespace icc {
-
-class IccParent MOZ_FINAL : public PIccParent
- , public nsIIccListener
-{
-public:
- NS_DECL_ISUPPORTS
- NS_DECL_NSIICCLISTENER
-
- explicit IccParent(uint32_t aServiceId);
-
-protected:
- virtual
- // MOZ_FINAL suppresses -Werror,-Wdelete-non-virtual-dtor
- ~IccParent()
- {
- MOZ_COUNT_DTOR(IccParent);
- }
-
- virtual void
- ActorDestroy(ActorDestroyReason aWhy) MOZ_OVERRIDE;
-
- virtual bool
- RecvInit(
- OptionalIccInfoData* aInfoData,
- uint32_t* aCardState) MOZ_OVERRIDE;
-
- virtual PIccRequestParent*
- AllocPIccRequestParent(const IccRequest& aRequest) MOZ_OVERRIDE;
-
- virtual bool
- DeallocPIccRequestParent(PIccRequestParent* aActor) MOZ_OVERRIDE;
-
- virtual bool
- RecvPIccRequestConstructor(PIccRequestParent* aActor,
- const IccRequest& aRequest) MOZ_OVERRIDE;
-
-private:
- IccParent();
- nsCOMPtr mIcc;
-};
-
-class IccRequestParent MOZ_FINAL : public PIccRequestParent
- , public nsIIccCallback
-{
- friend class IccParent;
-
-public:
- NS_DECL_ISUPPORTS
- NS_DECL_NSIICCCALLBACK
-
- explicit IccRequestParent(nsIIcc* icc);
-
-protected:
- virtual void
- ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE;
-
-private:
- // MOZ_FINAL suppresses -Werror,-Wdelete-non-virtual-dtor
- ~IccRequestParent()
- {
- MOZ_COUNT_DTOR(IccRequestParent);
- }
-
- bool
- DoRequest(const GetCardLockEnabledRequest& aRequest);
-
- bool
- DoRequest(const UnlockCardLockRequest& aRequest);
-
- bool
- DoRequest(const SetCardLockEnabledRequest& aRequest);
-
- bool
- DoRequest(const ChangeCardLockPasswordRequest& aRequest);
-
- bool
- DoRequest(const GetCardLockRetryCountRequest& aRequest);
-
- bool
- DoRequest(const MatchMvnoRequest& aRequest);
-
- bool
- DoRequest(const GetServiceStateEnabledRequest& aRequest);
-
- nsresult
- SendReply(const IccReply& aReply);
-
- nsCOMPtr mIcc;
-};
-
-} // namespace icc
-} // namespace dom
-} // namespace mozilla
-
-#endif // mozilla_dom_icc_IccParent_h
diff --git a/dom/icc/ipc/PIcc.ipdl b/dom/icc/ipc/PIcc.ipdl
deleted file mode 100644
index 88edc2b17fdc..000000000000
--- a/dom/icc/ipc/PIcc.ipdl
+++ /dev/null
@@ -1,111 +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 protocol PContent;
-include protocol PIccRequest;
-include PIccTypes;
-
-using struct mozilla::void_t from "ipc/IPCMessageUtils.h";
-
-namespace mozilla {
-namespace dom {
-namespace icc {
-
-union OptionalIccInfoData
-{
- void_t;
- IccInfoData;
-};
-
-struct GetCardLockEnabledRequest
-{
- uint32_t lockType;
-};
-
-struct UnlockCardLockRequest
-{
- uint32_t lockType;
- nsString password;
- nsString newPin;
-};
-
-struct SetCardLockEnabledRequest
-{
- uint32_t lockType;
- nsString password;
- bool enabled;
-};
-
-struct ChangeCardLockPasswordRequest
-{
- uint32_t lockType;
- nsString password;
- nsString newPassword;
-};
-
-struct GetCardLockRetryCountRequest
-{
- uint32_t lockType;
-};
-
-struct MatchMvnoRequest
-{
- uint32_t mvnoType;
- nsString mvnoData;
-};
-
-struct GetServiceStateEnabledRequest
-{
- uint32_t service;
-};
-
-union IccRequest
-{
- GetCardLockEnabledRequest;
- UnlockCardLockRequest;
- SetCardLockEnabledRequest;
- ChangeCardLockPasswordRequest;
- GetCardLockRetryCountRequest;
- MatchMvnoRequest;
- GetServiceStateEnabledRequest;
-};
-
-sync protocol PIcc
-{
- manager PContent;
- manages PIccRequest;
-
-child:
- /**
- * Notify CardStateChanged with updated CardState.
- */
- NotifyCardStateChanged(uint32_t aCardState);
-
- /**
- * Notify IccInfoChanged with updated IccInfo.
- */
- NotifyIccInfoChanged(OptionalIccInfoData aInfoData);
-
-parent:
- /**
- * Sent when the child no longer needs to use PIcc.
- */
- __delete__();
-
- /**
- * Sent when the child makes an asynchronous request to the parent.
- */
- PIccRequest(IccRequest aRequest);
-
- /**
- * Sync call to initialize the updated IccInfo/CardState.
- */
- sync Init()
- returns (OptionalIccInfoData aInfoData, uint32_t aCardState);
-
-};
-
-} // namespace icc
-} // namespace dom
-} // namespace mozilla
\ No newline at end of file
diff --git a/dom/icc/ipc/PIccRequest.ipdl b/dom/icc/ipc/PIccRequest.ipdl
deleted file mode 100644
index afe2c386491c..000000000000
--- a/dom/icc/ipc/PIccRequest.ipdl
+++ /dev/null
@@ -1,61 +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 protocol PIcc;
-include PIccTypes;
-
-namespace mozilla {
-namespace dom {
-namespace icc {
-
-struct IccReplySuccess
-{
-};
-
-struct IccReplySuccessWithBoolean
-{
- bool result;
-};
-
-struct IccReplyCardLockRetryCount
-{
- int32_t count;
-};
-
-struct IccReplyError
-{
- nsString message;
-};
-
-struct IccReplyCardLockError
-{
- int32_t retryCount;
- nsString message;
-};
-
-union IccReply
-{
- // Success
- IccReplySuccess;
- IccReplySuccessWithBoolean;
- IccReplyCardLockRetryCount;
- // Error
- IccReplyError;
- IccReplyCardLockError;
-};
-
-protocol PIccRequest
-{
- manager PIcc;
-
-child:
- /**
- * Sent when the asynchronous request has completed.
- */
- __delete__(IccReply response);
-};
-
-} // namespace icc
-} // namespace dom
-} // namespace mozilla
\ No newline at end of file
diff --git a/dom/icc/ipc/PIccTypes.ipdlh b/dom/icc/ipc/PIccTypes.ipdlh
deleted file mode 100644
index 1a463f8ebc51..000000000000
--- a/dom/icc/ipc/PIccTypes.ipdlh
+++ /dev/null
@@ -1,24 +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/. */
-
-namespace mozilla {
-namespace dom {
-namespace icc {
-
-struct IccInfoData
-{
- nsString iccType;
- nsString iccid;
- nsString mcc;
- nsString mnc;
- nsString spn;
- bool isDisplayNetworkNameRequired;
- bool isDisplaySpnRequired;
- nsString phoneNumber;
- int32_t prlVersion;
-};
-
-} // namespace icc
-} // namespace dom
-} // namespace mozilla
\ No newline at end of file
diff --git a/dom/icc/moz.build b/dom/icc/moz.build
index 257dc9a75267..9421feb10d9f 100644
--- a/dom/icc/moz.build
+++ b/dom/icc/moz.build
@@ -13,38 +13,19 @@ EXPORTS.mozilla.dom += [
'IccManager.h',
]
-EXPORTS.mozilla.dom.icc += [
- 'ipc/IccChild.h',
- 'ipc/IccParent.h',
-]
-
UNIFIED_SOURCES += [
'Assertions.cpp',
'Icc.cpp',
- 'IccCallback.cpp',
'IccCardLockError.cpp',
"IccInfo.cpp",
'IccListener.cpp',
'IccManager.cpp',
- 'ipc/IccChild.cpp',
- 'ipc/IccIPCService.cpp',
- 'ipc/IccParent.cpp',
-]
-
-IPDL_SOURCES += [
- 'ipc/PIcc.ipdl',
- 'ipc/PIccRequest.ipdl',
- 'ipc/PIccTypes.ipdlh',
]
if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk' and CONFIG['MOZ_B2G_RIL']:
EXTRA_JS_MODULES += [
'gonk/StkProactiveCmdFactory.jsm',
]
- EXTRA_COMPONENTS += [
- 'gonk/IccService.js',
- 'gonk/IccService.manifest',
- ]
FAIL_ON_WARNINGS = True
diff --git a/dom/ipc/ContentChild.cpp b/dom/ipc/ContentChild.cpp
index 0eb46c5be95a..be29247827e3 100644
--- a/dom/ipc/ContentChild.cpp
+++ b/dom/ipc/ContentChild.cpp
@@ -148,7 +148,6 @@
#include "mozilla/dom/File.h"
#include "mozilla/dom/cellbroadcast/CellBroadcastIPCService.h"
-#include "mozilla/dom/icc/IccChild.h"
#include "mozilla/dom/mobileconnection/MobileConnectionChild.h"
#include "mozilla/dom/mobilemessage/SmsChild.h"
#include "mozilla/dom/devicestorage/DeviceStorageRequestChild.h"
@@ -181,7 +180,6 @@ using namespace mozilla::docshell;
using namespace mozilla::dom::bluetooth;
using namespace mozilla::dom::cellbroadcast;
using namespace mozilla::dom::devicestorage;
-using namespace mozilla::dom::icc;
using namespace mozilla::dom::ipc;
using namespace mozilla::dom::mobileconnection;
using namespace mozilla::dom::mobilemessage;
@@ -1455,31 +1453,6 @@ ContentChild::DeallocPHalChild(PHalChild* aHal)
return true;
}
-PIccChild*
-ContentChild::SendPIccConstructor(PIccChild* aActor,
- const uint32_t& aServiceId)
-{
- // Add an extra ref for IPDL. Will be released in
- // ContentChild::DeallocPIccChild().
- static_cast(aActor)->AddRef();
- return PContentChild::SendPIccConstructor(aActor, aServiceId);
-}
-
-PIccChild*
-ContentChild::AllocPIccChild(const uint32_t& aServiceId)
-{
- NS_NOTREACHED("No one should be allocating PIccChild actors");
- return nullptr;
-}
-
-bool
-ContentChild::DeallocPIccChild(PIccChild* aActor)
-{
- // IccChild is refcounted, must not be freed manually.
- static_cast(aActor)->Release();
- return true;
-}
-
asmjscache::PAsmJSCacheEntryChild*
ContentChild::AllocPAsmJSCacheEntryChild(
const asmjscache::OpenMode& aOpenMode,
diff --git a/dom/ipc/ContentChild.h b/dom/ipc/ContentChild.h
index 272cae9ccd05..67aac6439d1d 100644
--- a/dom/ipc/ContentChild.h
+++ b/dom/ipc/ContentChild.h
@@ -172,13 +172,6 @@ public:
virtual PHalChild* AllocPHalChild() MOZ_OVERRIDE;
virtual bool DeallocPHalChild(PHalChild*) MOZ_OVERRIDE;
- PIccChild*
- SendPIccConstructor(PIccChild* aActor, const uint32_t& aServiceId);
- virtual PIccChild*
- AllocPIccChild(const uint32_t& aClientId) MOZ_OVERRIDE;
- virtual bool
- DeallocPIccChild(PIccChild* aActor) MOZ_OVERRIDE;
-
virtual PMemoryReportRequestChild*
AllocPMemoryReportRequestChild(const uint32_t& aGeneration,
const bool& aAnonymize,
diff --git a/dom/ipc/ContentParent.cpp b/dom/ipc/ContentParent.cpp
index 018b7ce2f765..c27c3fa20bf6 100755
--- a/dom/ipc/ContentParent.cpp
+++ b/dom/ipc/ContentParent.cpp
@@ -51,7 +51,6 @@
#include "mozilla/dom/bluetooth/PBluetoothParent.h"
#include "mozilla/dom/cellbroadcast/CellBroadcastParent.h"
#include "mozilla/dom/devicestorage/DeviceStorageRequestParent.h"
-#include "mozilla/dom/icc/IccParent.h"
#include "mozilla/dom/mobileconnection/MobileConnectionParent.h"
#include "mozilla/dom/mobilemessage/SmsParent.h"
#include "mozilla/dom/power/PowerManagerService.h"
@@ -225,7 +224,6 @@ using namespace CrashReporter;
using namespace mozilla::dom::bluetooth;
using namespace mozilla::dom::cellbroadcast;
using namespace mozilla::dom::devicestorage;
-using namespace mozilla::dom::icc;
using namespace mozilla::dom::indexedDB;
using namespace mozilla::dom::power;
using namespace mozilla::dom::mobileconnection;
@@ -3382,27 +3380,6 @@ ContentParent::DeallocPHalParent(hal_sandbox::PHalParent* aHal)
return true;
}
-PIccParent*
-ContentParent::AllocPIccParent(const uint32_t& aServiceId)
-{
- if (!AssertAppProcessPermission(this, "mobileconnection")) {
- return nullptr;
- }
- IccParent* parent = new IccParent(aServiceId);
- // We release this ref in DeallocPIccParent().
- parent->AddRef();
-
- return parent;
-}
-
-bool
-ContentParent::DeallocPIccParent(PIccParent* aActor)
-{
- // IccParent is refcounted, must not be freed manually.
- static_cast(aActor)->Release();
- return true;
-}
-
PMemoryReportRequestParent*
ContentParent::AllocPMemoryReportRequestParent(const uint32_t& aGeneration,
const bool &aAnonymize,
diff --git a/dom/ipc/ContentParent.h b/dom/ipc/ContentParent.h
index 91b9fd3f2ae8..8b19b4c0aad0 100644
--- a/dom/ipc/ContentParent.h
+++ b/dom/ipc/ContentParent.h
@@ -549,9 +549,6 @@ private:
virtual bool DeallocPHalParent(PHalParent*) MOZ_OVERRIDE;
- virtual PIccParent* AllocPIccParent(const uint32_t& aServiceId) MOZ_OVERRIDE;
- virtual bool DeallocPIccParent(PIccParent* aActor) MOZ_OVERRIDE;
-
virtual PMemoryReportRequestParent*
AllocPMemoryReportRequestParent(const uint32_t& aGeneration,
const bool &aAnonymize,
diff --git a/dom/ipc/PContent.ipdl b/dom/ipc/PContent.ipdl
index 8c6e2193e019..8a2907819179 100644
--- a/dom/ipc/PContent.ipdl
+++ b/dom/ipc/PContent.ipdl
@@ -21,7 +21,6 @@ include protocol PFileDescriptorSet;
include protocol PFMRadio;
include protocol PFileSystemRequest;
include protocol PHal;
-include protocol PIcc;
include protocol PProcessHangMonitor;
include protocol PImageBridge;
include protocol PMemoryReportRequest;
@@ -371,7 +370,6 @@ prio(normal upto urgent) sync protocol PContent
manages PFileDescriptorSet;
manages PFMRadio;
manages PHal;
- manages PIcc;
manages PMemoryReportRequest;
manages PMobileConnection;
manages PNecko;
@@ -646,8 +644,6 @@ parent:
PHal();
- PIcc(uint32_t serviceId);
-
PMobileConnection(uint32_t clientId);
PNecko();
diff --git a/dom/ipc/preload.js b/dom/ipc/preload.js
index ff9330d28679..0c59d94d4e15 100644
--- a/dom/ipc/preload.js
+++ b/dom/ipc/preload.js
@@ -75,6 +75,7 @@ const BrowserElementIsPreloaded = true;
Cc["@mozilla.org/uriloader;1"].getService(Ci["nsIURILoader"]);
Cc["@mozilla.org/cspcontext;1"].createInstance(Ci["nsIContentSecurityPolicy"]);
Cc["@mozilla.org/settingsManager;1"].createInstance(Ci["nsISupports"]);
+ Cc["@mozilla.org/webapps;1"].createInstance(Ci["nsISupports"]);
/* Applications Specific Helper */
try {
diff --git a/dom/mobileconnection/MobileConnection.cpp b/dom/mobileconnection/MobileConnection.cpp
index e78f5881e2c9..11e7bf0e8938 100644
--- a/dom/mobileconnection/MobileConnection.cpp
+++ b/dom/mobileconnection/MobileConnection.cpp
@@ -15,7 +15,6 @@
#include "mozilla/Preferences.h"
#include "mozilla/Services.h"
#include "nsIDOMDOMRequest.h"
-#include "nsIIccInfo.h"
#include "nsIPermissionManager.h"
#include "nsIVariant.h"
#include "nsJSON.h"
@@ -23,6 +22,10 @@
#include "nsRadioInterfaceLayer.h"
#include "nsServiceManagerUtils.h"
+#ifdef MOZ_B2G_RIL
+#include "nsIIccInfo.h"
+#endif // MOZ_B2G_RIL
+
#define MOBILECONN_ERROR_INVALID_PARAMETER NS_LITERAL_STRING("InvalidParameter")
#define MOBILECONN_ERROR_INVALID_PASSWORD NS_LITERAL_STRING("InvalidPassword")
@@ -46,14 +49,18 @@ using namespace mozilla::dom;
using namespace mozilla::dom::mobileconnection;
class MobileConnection::Listener MOZ_FINAL : public nsIMobileConnectionListener
+#ifdef MOZ_B2G_RIL
, public nsIIccListener
+#endif // MOZ_B2G_RIL
{
MobileConnection* mMobileConnection;
public:
NS_DECL_ISUPPORTS
NS_FORWARD_SAFE_NSIMOBILECONNECTIONLISTENER(mMobileConnection)
+#ifdef MOZ_B2G_RIL
NS_FORWARD_SAFE_NSIICCLISTENER(mMobileConnection)
+#endif // MOZ_B2G_RIL
explicit Listener(MobileConnection* aMobileConnection)
: mMobileConnection(aMobileConnection)
@@ -74,8 +81,12 @@ private:
}
};
+#ifdef MOZ_B2G_RIL
NS_IMPL_ISUPPORTS(MobileConnection::Listener, nsIMobileConnectionListener,
nsIIccListener)
+#else
+NS_IMPL_ISUPPORTS(MobileConnection::Listener, nsIMobileConnectionListener)
+#endif // MOZ_B2G_RIL
NS_IMPL_CYCLE_COLLECTION_CLASS(MobileConnection)
@@ -87,7 +98,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(MobileConnection,
// down.
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mVoice)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mData)
- NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mIccHandler)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(MobileConnection,
@@ -95,7 +105,6 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(MobileConnection,
tmp->Shutdown();
NS_IMPL_CYCLE_COLLECTION_UNLINK(mVoice)
NS_IMPL_CYCLE_COLLECTION_UNLINK(mData)
- NS_IMPL_CYCLE_COLLECTION_UNLINK(mIccHandler)
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(MobileConnection)
@@ -127,15 +136,15 @@ MobileConnection::MobileConnection(nsPIDOMWindow* aWindow, uint32_t aClientId)
nsresult rv = service->GetItemByServiceId(mClientId,
getter_AddRefs(mMobileConnection));
+#ifdef MOZ_B2G_RIL
+ mIcc = do_GetService(NS_RILCONTENTHELPER_CONTRACTID);
- nsCOMPtr iccService = do_GetService(ICC_SERVICE_CONTRACTID);
-
- if (iccService) {
- iccService->GetIccByServiceId(mClientId, getter_AddRefs(mIccHandler));
- }
-
- if (NS_FAILED(rv) || !mMobileConnection || !mIccHandler) {
- NS_WARNING("Could not acquire nsIMobileConnection or nsIIcc!");
+ if (NS_FAILED(rv) || !mMobileConnection || !mIcc) {
+ NS_WARNING("Could not acquire nsIMobileConnection or nsIIccProvider!");
+#else
+ if (NS_FAILED(rv) || !mMobileConnection) {
+ NS_WARNING("Could not acquire nsIMobileConnection!");
+#endif // MOZ_B2G_RIL
return;
}
@@ -150,10 +159,12 @@ MobileConnection::MobileConnection(nsPIDOMWindow* aWindow, uint32_t aClientId)
UpdateVoice();
UpdateData();
- rv = mIccHandler->RegisterListener(mListener);
+#ifdef MOZ_B2G_RIL
+ rv = mIcc->RegisterIccMsg(mClientId, mListener);
NS_WARN_IF_FALSE(NS_SUCCEEDED(rv),
"Failed registering icc messages with service");
UpdateIccId();
+#endif // MOZ_B2G_RIL
}
}
@@ -165,9 +176,11 @@ MobileConnection::Shutdown()
mMobileConnection->UnregisterListener(mListener);
}
- if (mIccHandler) {
- mIccHandler->UnregisterListener(mListener);
+#ifdef MOZ_B2G_RIL
+ if (mIcc) {
+ mIcc->UnregisterIccMsg(mClientId, mListener);
}
+#endif // MOZ_B2G_RIL
mListener->Disconnect();
mListener = nullptr;
@@ -233,10 +246,11 @@ MobileConnection::UpdateData()
bool
MobileConnection::UpdateIccId()
{
+#ifdef MOZ_B2G_RIL
nsAutoString iccId;
nsCOMPtr iccInfo;
- if (mIccHandler &&
- NS_SUCCEEDED(mIccHandler->GetIccInfo(getter_AddRefs(iccInfo))) &&
+ if (mIcc &&
+ NS_SUCCEEDED(mIcc->GetIccInfo(mClientId, getter_AddRefs(iccInfo))) &&
iccInfo) {
iccInfo->GetIccid(iccId);
} else {
@@ -247,6 +261,7 @@ MobileConnection::UpdateIccId()
mIccId = iccId;
return true;
}
+#endif // MOZ_B2G_RIL
return false;
}
@@ -1119,6 +1134,7 @@ MobileConnection::NotifyNetworkSelectionModeChanged()
return NS_OK;
}
+#ifdef MOZ_B2G_RIL
// nsIIccListener
NS_IMETHODIMP
@@ -1155,3 +1171,4 @@ MobileConnection::NotifyIccInfoChanged()
return asyncDispatcher->PostDOMEvent();
}
+#endif // MOZ_B2G_RIL
diff --git a/dom/mobileconnection/MobileConnection.h b/dom/mobileconnection/MobileConnection.h
index 40b7396d56e5..4cd1c60a54d7 100644
--- a/dom/mobileconnection/MobileConnection.h
+++ b/dom/mobileconnection/MobileConnection.h
@@ -11,16 +11,21 @@
#include "mozilla/dom/MobileNetworkInfo.h"
#include "mozilla/dom/MozMobileConnectionBinding.h"
#include "nsCycleCollectionParticipant.h"
-#include "nsIIccService.h"
#include "nsIMobileConnectionService.h"
#include "nsWeakPtr.h"
+#ifdef MOZ_B2G_RIL
+#include "nsIIccProvider.h"
+#endif // MOZ_B2G_RIL
+
namespace mozilla {
namespace dom {
class MobileConnection MOZ_FINAL : public DOMEventTargetHelper
, private nsIMobileConnectionListener
+#ifdef MOZ_B2G_RIL
, private nsIIccListener
+#endif // MOZ_B2G_RIL
{
/**
* Class MobileConnection doesn't actually expose
@@ -35,7 +40,9 @@ class MobileConnection MOZ_FINAL : public DOMEventTargetHelper
public:
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_NSIMOBILECONNECTIONLISTENER
+#ifdef MOZ_B2G_RIL
NS_DECL_NSIICCLISTENER
+#endif // MOZ_B2G_RIL
NS_REALLY_FORWARD_NSIDOMEVENTTARGET(DOMEventTargetHelper)
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(MobileConnection,
DOMEventTargetHelper)
@@ -162,7 +169,9 @@ private:
uint32_t mClientId;
nsString mIccId;
nsCOMPtr mMobileConnection;
- nsCOMPtr mIccHandler;
+#ifdef MOZ_B2G_RIL
+ nsCOMPtr mIcc;
+#endif // MOZ_B2G_RIL
nsRefPtr mListener;
nsRefPtr mVoice;
nsRefPtr mData;
diff --git a/dom/mobilemessage/gonk/MmsService.js b/dom/mobilemessage/gonk/MmsService.js
index 405e9818d5eb..3fa167b76bbc 100644
--- a/dom/mobilemessage/gonk/MmsService.js
+++ b/dom/mobilemessage/gonk/MmsService.js
@@ -406,7 +406,7 @@ MmsConnection.prototype = {
if (DEBUG) debug("Error! Radio is disabled when sending MMS.");
errorStatus = _HTTP_STATUS_RADIO_DISABLED;
} else if (this.radioInterface.rilContext.cardState !=
- Ci.nsIIcc.CARD_STATE_READY) {
+ Ci.nsIIccProvider.CARD_STATE_READY) {
if (DEBUG) debug("Error! SIM card is not ready when sending MMS.");
errorStatus = _HTTP_STATUS_NO_SIM_CARD;
}
diff --git a/dom/mobilemessage/gonk/SmsService.js b/dom/mobilemessage/gonk/SmsService.js
index 2626ee631670..d0800b05eb74 100644
--- a/dom/mobilemessage/gonk/SmsService.js
+++ b/dom/mobilemessage/gonk/SmsService.js
@@ -880,7 +880,7 @@ SmsService.prototype = {
if (DEBUG) debug("Error! Radio is disabled when sending SMS.");
errorCode = Ci.nsIMobileMessageCallback.RADIO_DISABLED_ERROR;
} else if (gRadioInterfaces[aServiceId].rilContext.cardState !=
- Ci.nsIIcc.CARD_STATE_READY) {
+ Ci.nsIIccProvider.CARD_STATE_READY) {
if (DEBUG) debug("Error! SIM card is not ready when sending SMS.");
errorCode = Ci.nsIMobileMessageCallback.NO_SIM_CARD_ERROR;
}
diff --git a/dom/mobilemessage/tests/marionette/head.js b/dom/mobilemessage/tests/marionette/head.js
index f4eb83882d41..7c317049199f 100644
--- a/dom/mobilemessage/tests/marionette/head.js
+++ b/dom/mobilemessage/tests/marionette/head.js
@@ -110,33 +110,6 @@ function waitForManagerEvent(aEventName, aMatchFunc) {
return deferred.promise;
}
-/**
- * Wrap DOMRequest onsuccess/onerror events to Promise resolve/reject.
- *
- * Fulfill params: A DOMEvent.
- * Reject params: A DOMEvent.
- *
- * @param aRequest
- * A DOMRequest instance.
- *
- * @return A deferred promise.
- */
-function wrapDomRequestAsPromise(aRequest) {
- let deferred = Promise.defer();
-
- ok(aRequest instanceof DOMRequest,
- "aRequest is instanceof " + aRequest.constructor);
-
- aRequest.addEventListener("success", function(aEvent) {
- deferred.resolve(aEvent);
- });
- aRequest.addEventListener("error", function(aEvent) {
- deferred.reject(aEvent);
- });
-
- return deferred.promise;
-}
-
/**
* Send a SMS message to a single receiver. Resolve if it succeeds, reject
* otherwise.
@@ -153,10 +126,7 @@ function wrapDomRequestAsPromise(aRequest) {
* @return A deferred promise.
*/
function sendSmsWithSuccess(aReceiver, aText) {
- let request = manager.send(aReceiver, aText);
- return wrapDomRequestAsPromise(request)
- .then((aEvent) => { return aEvent.target.result; },
- (aEvent) => { throw aEvent.target.error; });
+ return manager.send(aReceiver, aText);
}
/**
@@ -180,11 +150,9 @@ function sendSmsWithFailure(aReceiver, aText) {
let promises = [];
promises.push(waitForManagerEvent("failed")
.then((aEvent) => { return aEvent.message; }));
-
- let request = manager.send(aReceiver, aText);
- promises.push(wrapDomRequestAsPromise(request)
- .then((aEvent) => { throw aEvent; },
- (aEvent) => { return aEvent.target.error; }));
+ promises.push(manager.send(aReceiver, aText)
+ .then((aResult) => { throw aResult; },
+ (aError) => { return aError; }));
return Promise.all(promises)
.then((aResults) => { return { message: aResults[0],
@@ -213,11 +181,9 @@ function sendMmsWithFailure(aMmsParameters, aSendParameters) {
let promises = [];
promises.push(waitForManagerEvent("failed")
.then((aEvent) => { return aEvent.message; }));
-
- let request = manager.sendMMS(aMmsParameters, aSendParameters);
- promises.push(wrapDomRequestAsPromise(request)
- .then((aEvent) => { throw aEvent; },
- (aEvent) => { return aEvent.target.error; }));
+ promises.push(manager.sendMMS(aMmsParameters, aSendParameters)
+ .then((aResult) => { throw aResult; },
+ (aError) => { return aError; }));
return Promise.all(promises)
.then((aResults) => { return { message: aResults[0],
@@ -237,9 +203,7 @@ function sendMmsWithFailure(aMmsParameters, aSendParameters) {
* @return A deferred promise.
*/
function getMessage(aId) {
- let request = manager.getMessage(aId);
- return wrapDomRequestAsPromise(request)
- .then((aEvent) => { return aEvent.target.result; });
+ return manager.getMessage(aId);
}
/**
@@ -371,14 +335,12 @@ function deleteMessagesById(aMessageIds) {
let promises = [];
promises.push(waitForManagerEvent("deleted"));
-
- let request = manager.delete(aMessageIds);
- promises.push(wrapDomRequestAsPromise(request));
+ promises.push(manager.delete(aMessageIds));
return Promise.all(promises)
.then((aResults) => {
return { deletedInfo: aResults[0],
- deletedFlags: aResults[1].target.result };
+ deletedFlags: aResults[1] };
});
}
diff --git a/dom/mobilemessage/tests/marionette/test_getmessage_notfound.js b/dom/mobilemessage/tests/marionette/test_getmessage_notfound.js
index 5cd9b8cc9a55..384f5b91d018 100644
--- a/dom/mobilemessage/tests/marionette/test_getmessage_notfound.js
+++ b/dom/mobilemessage/tests/marionette/test_getmessage_notfound.js
@@ -13,10 +13,9 @@ function getNonExistentMsg(aId) {
return getMessage(aId)
.then(function onresolve() {
ok(false, "request succeeded when tried to get non-existent sms");
- }, function onreject(aEvent) {
- let error = aEvent.target.error;
- ok(error, "DOMError");
- is(error.name, "NotFoundError", "error.name");
+ }, function onreject(aError) {
+ ok(aError, "DOMError");
+ is(aError.name, "NotFoundError", "error.name");
});
}
@@ -27,10 +26,9 @@ function getMsgInvalidId(aId) {
.then(function onresolve() {
ok(false, "request succeeded when tried to get message with " +
"invalid id (id: " + aId + ").");
- }, function onreject(aEvent) {
- let error = aEvent.target.error;
- ok(error, "DOMError");
- is(error.name, "NotFoundError", "error.name");
+ }, function onreject(aError) {
+ ok(aError, "DOMError");
+ is(aError.name, "NotFoundError", "error.name");
});
}
diff --git a/dom/mobilemessage/tests/marionette/test_getsegmentinfofortext.js b/dom/mobilemessage/tests/marionette/test_getsegmentinfofortext.js
index 8803e8ee2c93..9a60049f1c07 100644
--- a/dom/mobilemessage/tests/marionette/test_getsegmentinfofortext.js
+++ b/dom/mobilemessage/tests/marionette/test_getsegmentinfofortext.js
@@ -13,16 +13,14 @@ function test(text, segments, charsPerSegment, charsAvailableInLastSegment) {
let domRequest = manager.getSegmentInfoForText(text);
ok(domRequest, "DOMRequest object returned.");
- return wrapDomRequestAsPromise(domRequest)
- .then(function(aEvent) {
- let result = aEvent.target.result;
- ok(result, "aEvent.target.result = " + JSON.stringify(result));
+ return domRequest.then(function(aResult) {
+ ok(aResult, "result = " + JSON.stringify(aResult));
- is(result.segments, segments, "result.segments");
- is(result.charsPerSegment, charsPerSegment, "result.charsPerSegment");
- is(result.charsAvailableInLastSegment, charsAvailableInLastSegment,
- "result.charsAvailableInLastSegment");
- });
+ is(aResult.segments, segments, "result.segments");
+ is(aResult.charsPerSegment, charsPerSegment, "result.charsPerSegment");
+ is(aResult.charsAvailableInLastSegment, charsAvailableInLastSegment,
+ "result.charsAvailableInLastSegment");
+ });
}
startTestCommon(function() {
diff --git a/dom/mobilemessage/tests/marionette/test_massive_incoming_delete.js b/dom/mobilemessage/tests/marionette/test_massive_incoming_delete.js
index 8be6ad53ff6d..58e5f92e8a55 100644
--- a/dom/mobilemessage/tests/marionette/test_massive_incoming_delete.js
+++ b/dom/mobilemessage/tests/marionette/test_massive_incoming_delete.js
@@ -1,217 +1,81 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
-MARIONETTE_TIMEOUT = 60000;
-
-SpecialPowers.setBoolPref("dom.sms.enabled", true);
-SpecialPowers.addPermission("sms", true, document);
+MARIONETTE_TIMEOUT = 90000;
+MARIONETTE_HEAD_JS = "head.js";
const SENDER = "5555552368"; // the remote number
const RECEIVER = "15555215554"; // the emulator's number
-
-let manager = window.navigator.mozMobileMessage;
-let MSG_TEXT = "Mozilla Firefox OS!";
-let SMS_NUMBER = 100;
+const MSG_TEXT = "Mozilla Firefox OS!";
+const SMS_NUMBER = 100;
let SmsList = [];
-let checkDone = true;
-let emulatorReady = true;
-let pendingEmulatorCmdCount = 0;
-function sendSmsToEmulator(from, text) {
- ++pendingEmulatorCmdCount;
-
- let cmd = "sms send " + from + " " + text;
- runEmulatorCmd(cmd, function(result) {
- --pendingEmulatorCmdCount;
-
- is(result[0], "OK", "Emulator response");
- });
-}
-
-let tasks = {
- // List of test fuctions. Each of them should call |tasks.next()| when
- // completed or |tasks.finish()| to jump to the last one.
- _tasks: [],
- _nextTaskIndex: 0,
-
- push: function(func) {
- this._tasks.push(func);
- },
-
- next: function() {
- let index = this._nextTaskIndex++;
- let task = this._tasks[index];
- try {
- task();
- } catch (ex) {
- ok(false, "test task[" + index + "] throws: " + ex);
- // Run last task as clean up if possible.
- if (index != this._tasks.length - 1) {
- this.finish();
- }
- }
- },
-
- finish: function() {
- this._tasks[this._tasks.length - 1]();
- },
-
- run: function() {
- this.next();
- }
-};
-
-function taskNextWrapper() {
- tasks.next();
-}
-
-function verifySmsExists(incomingSms) {
- log("Getting SMS (id: " + incomingSms.id + ").");
- let requestRet = manager.getMessage(incomingSms.id);
- ok(requestRet, "smsrequest obj returned");
-
- requestRet.onsuccess = function(event) {
- log("Received 'onsuccess' smsrequest event.");
- ok(event.target.result, "smsrequest event.target.result");
- let foundSms = event.target.result;
- is(foundSms.id, incomingSms.id, "found SMS id matches");
- is(foundSms.threadId, incomingSms.threadId, "found SMS thread id matches");
- is(foundSms.body, MSG_TEXT, "found SMS msg text matches");
- is(foundSms.delivery, "received", "delivery");
- is(foundSms.deliveryStatus, "success", "deliveryStatus");
- is(foundSms.read, false, "read");
- is(foundSms.receiver, RECEIVER, "receiver");
- is(foundSms.sender, SENDER, "sender");
- is(foundSms.messageClass, "normal", "messageClass");
- log("Got SMS (id: " + foundSms.id + ") as expected.");
-
- SmsList.push(incomingSms);
- };
-
- requestRet.onerror = function(event) {
- log("Received 'onerror' smsrequest event.");
- ok(event.target.error, "domerror obj");
- is(event.target.error.name, "NotFoundError", "error returned");
- log("Could not get SMS (id: " + incomingSms.id + ") but should have.");
- ok(false,"SMS was not found");
- tasks.finish();
- };
-}
-
-let verifDeletedCount = 0;
-function verifySmsDeleted(smsId) {
- log("Getting SMS (id: " + smsId + ").");
- let requestRet = manager.getMessage(smsId);
- ok(requestRet, "smsrequest obj returned");
-
- requestRet.onsuccess = function(event) {
- log("Received 'onsuccess' smsrequest event.");
- ok(event.target.result, "smsrequest event.target.result");
- let foundSms = event.target.result;
- is(foundSms.id, smsId, "found SMS id matches");
- is(foundSms.body, MSG_TEXT, "found SMS msg text matches");
- log("Got SMS (id: " + foundSms.id + ") but should not have.");
- ok(false, "SMS was not deleted");
- tasks.finish();
- };
-
- requestRet.onerror = function(event) {
- log("Received 'onerror' smsrequest event.");
- ok(event.target.error, "domerror obj");
- is(event.target.error.name, "NotFoundError", "error returned");
- log("Could not get SMS (id: " + smsId + ") as expected.");
- verifDeletedCount++;
- };
-}
-
-tasks.push(function init() {
- log("Initialize test object.");
- ok(manager instanceof MozMobileMessageManager,
- "manager is instance of " + manager.constructor);
-
- // Callback for incoming sms
- manager.onreceived = function onreceived(event) {
- log("Received 'onreceived' event.");
- let incomingSms = event.message;
- ok(incomingSms, "incoming sms");
- ok(incomingSms.id, "sms id");
- log("Received SMS (id: " + incomingSms.id + ").");
- ok(incomingSms.threadId, "thread id");
- is(incomingSms.body, MSG_TEXT, "msg body");
- is(incomingSms.delivery, "received", "delivery");
- is(incomingSms.deliveryStatus, "success", "deliveryStatus");
- is(incomingSms.read, false, "read");
- is(incomingSms.receiver, RECEIVER, "receiver");
- is(incomingSms.sender, SENDER, "sender");
- is(incomingSms.messageClass, "normal", "messageClass");
- is(incomingSms.deliveryTimestamp, 0, "deliveryTimestamp is 0");
-
- verifySmsExists(incomingSms);
- };
-
- tasks.next();
-});
-
-tasks.push(function sendAllSms() {
+function sendAllSms() {
log("Send " + SMS_NUMBER + " SMS");
+
+ let promises = [];
+
+ // Wait for all "received" event are received.
+ promises.push(waitForManagerEvent("received", function(aEvent) {
+ let message = aEvent.message;
+ log("Received 'onreceived' event.");
+ ok(message, "incoming sms");
+ ok(message.id, "sms id");
+ log("Received SMS (id: " + message.id + ").");
+ ok(message.threadId, "thread id");
+ is(message.body, MSG_TEXT, "msg body");
+ is(message.delivery, "received", "delivery");
+ is(message.deliveryStatus, "success", "deliveryStatus");
+ is(message.read, false, "read");
+ is(message.receiver, RECEIVER, "receiver");
+ is(message.sender, SENDER, "sender");
+ is(message.messageClass, "normal", "messageClass");
+ is(message.deliveryTimestamp, 0, "deliveryTimestamp is 0");
+ SmsList.push(message);
+ return SmsList.length === SMS_NUMBER;
+ }));
+
+ // Generate massive incoming message.
for (let i = 0; i < SMS_NUMBER; i++) {
- sendSmsToEmulator(SENDER, MSG_TEXT);
+ promises.push(sendTextSmsToEmulator(SENDER, MSG_TEXT));
}
- waitFor(taskNextWrapper, function() {
- return (pendingEmulatorCmdCount === 0) && (SmsList.length === SMS_NUMBER);
- });
-});
+ return Promise.all(promises);
+}
+
+function deleteAllSms() {
+ log("Deleting SMS: " + JSON.stringify(SmsList));
-tasks.push(function deleteAllSms() {
- log("Deleting SMS using smsmsg obj array parameter.");
let deleteStart = Date.now();
- log("deleteStart: " + deleteStart);
- log("SmsList: " + JSON.stringify(SmsList));
- let requestRet = manager.delete(SmsList);
- ok(requestRet,"smsrequest obj returned");
+ return deleteMessages(SmsList)
+ .then(() => {
+ let deleteDone = Date.now();
+ log("Delete " + SmsList.length + " SMS takes " +
+ (deleteDone - deleteStart) + " ms.");
+ })
+ // Verify SMS Deleted
+ .then(() => {
+ let promises = [];
- requestRet.onsuccess = function(event) {
- let deleteDone = Date.now();
- log("Delete " + SMS_NUMBER + " SMS takes " + (deleteDone - deleteStart) + " ms.");
- log("Received 'onsuccess' smsrequest event.");
- if (event.target.result) {
for (let i = 0; i < SmsList.length; i++) {
- verifySmsDeleted(SmsList[i].id);
+ let smsId = SmsList[i].id;
+ promises.push(getMessage(smsId)
+ .then((aMessageInDB) => {
+ log("Got SMS (id: " + aMessageInDB.id + ") but should not have.");
+ ok(false, "SMS (id: " + aMessageInDB.id + ") was not deleted");
+ }, (aError) => {
+ log("Could not get SMS (id: " + smsId + ") as expected.");
+ is(aError.name, "NotFoundError", "error returned");
+ }));
}
- } else {
- log("smsrequest returned false for manager.delete");
- ok(false, "SMS delete failed");
- }
- };
- requestRet.onerror = function(event) {
- log("Received 'onerror' smsrequest event.");
- ok(event.target.error, "domerror obj");
- ok(false, "manager.delete request returned unexpected error: "
- + event.target.error.name);
- tasks.finish();
- };
-
- waitFor(taskNextWrapper, function() {
- return verifDeletedCount === SMS_NUMBER;
- });
-});
-
-// WARNING: All tasks should be pushed before this!!!
-tasks.push(function cleanUp() {
- if (pendingEmulatorCmdCount) {
- window.setTimeout(cleanUp, 100);
- return;
- }
-
- manager.onreceived = null;
- SpecialPowers.removePermission("sms", document);
- SpecialPowers.clearUserPref("dom.sms.enabled");
- log("Finish!!!");
- finish();
-});
+ return Promise.all(promises);
+ });
+}
// Start the test
-tasks.run();
+startTestCommon(function testCaseMain() {
+ return sendAllSms()
+ .then(() => deleteAllSms());
+});
diff --git a/dom/mobilemessage/tests/marionette/test_outgoing.js b/dom/mobilemessage/tests/marionette/test_outgoing.js
index fe0821249359..ef7efd2e2b64 100644
--- a/dom/mobilemessage/tests/marionette/test_outgoing.js
+++ b/dom/mobilemessage/tests/marionette/test_outgoing.js
@@ -103,24 +103,22 @@ function doSingleRequest(aRequest, aReceiver, aBody, aNow) {
sentGot = true;
}));
- promises.push(wrapDomRequestAsPromise(aRequest)
- .then(function(aEvent) {
- log(" onsuccess event for '" + aReceiver + "' received.");
+ promises.push(aRequest.then(function(aResult) {
+ log(" onsuccess event for '" + aReceiver + "' received.");
- let message = aEvent.target.result;
- checkMessage(message, "sent", aBody);
- // Should be mostly identical to sendingMessage.
- is(message.id, sendingMessage.id, "message.id");
- is(message.receiver, sendingMessage.receiver, "message.receiver");
- is(message.body, sendingMessage.body, "message.body");
- is(message.timestamp, sendingMessage.timestamp, "message.timestamp");
+ checkMessage(aResult, "sent", aBody);
+ // Should be mostly identical to sendingMessage.
+ is(aResult.id, sendingMessage.id, "message.id");
+ is(aResult.receiver, sendingMessage.receiver, "message.receiver");
+ is(aResult.body, sendingMessage.body, "message.body");
+ is(aResult.timestamp, sendingMessage.timestamp, "message.timestamp");
- ok(sendingGot, "sending event should have been triggered");
- ok(!sentGot, "sent event should not have been triggered");
- ok(!successGot, "success event should not have been triggered");
+ ok(sendingGot, "sending event should have been triggered");
+ ok(!sentGot, "sent event should not have been triggered");
+ ok(!successGot, "success event should not have been triggered");
- successGot = true;
- }));
+ successGot = true;
+ }));
return Promise.all(promises);
}
diff --git a/dom/mobilemessage/tests/marionette/test_segment_info.js b/dom/mobilemessage/tests/marionette/test_segment_info.js
index 3f690695d39e..fa42595fa46f 100644
--- a/dom/mobilemessage/tests/marionette/test_segment_info.js
+++ b/dom/mobilemessage/tests/marionette/test_segment_info.js
@@ -23,16 +23,14 @@ function test(text, segments, charsPerSegment, charsAvailableInLastSegment) {
let domRequest = manager.getSegmentInfoForText(text);
ok(domRequest, "DOMRequest object returned.");
- return wrapDomRequestAsPromise(domRequest)
- .then(function(aEvent) {
- let result = aEvent.target.result;
- ok(result, "aEvent.target.result = " + JSON.stringify(result));
+ return domRequest.then(function(aResult) {
+ ok(aResult, "result = " + JSON.stringify(aResult));
- is(result.segments, segments, "result.segments");
- is(result.charsPerSegment, charsPerSegment, "result.charsPerSegment");
- is(result.charsAvailableInLastSegment, charsAvailableInLastSegment,
- "result.charsAvailableInLastSegment");
- });
+ is(aResult.segments, segments, "result.segments");
+ is(aResult.charsPerSegment, charsPerSegment, "result.charsPerSegment");
+ is(aResult.charsAvailableInLastSegment, charsAvailableInLastSegment,
+ "result.charsAvailableInLastSegment");
+ });
}
startTestCommon(function() {
diff --git a/dom/moz.build b/dom/moz.build
index a4a1092b3d53..9ef5a69d8318 100644
--- a/dom/moz.build
+++ b/dom/moz.build
@@ -64,7 +64,6 @@ DIRS += [
'fmradio',
'geolocation',
'html',
- 'icc',
'json',
'jsurl',
'asmjscache',
@@ -123,6 +122,7 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk':
if CONFIG['MOZ_B2G_RIL']:
DIRS += [
+ 'icc',
'wappush',
]
diff --git a/dom/phonenumberutils/PhoneNumberUtils.jsm b/dom/phonenumberutils/PhoneNumberUtils.jsm
index 478e6f67905a..c5c09ecff5b7 100644
--- a/dom/phonenumberutils/PhoneNumberUtils.jsm
+++ b/dom/phonenumberutils/PhoneNumberUtils.jsm
@@ -23,9 +23,9 @@ XPCOMUtils.defineLazyModuleGetter(this, "MCC_ISO3166_TABLE",
XPCOMUtils.defineLazyServiceGetter(this, "mobileConnection",
"@mozilla.org/mobileconnection/mobileconnectionservice;1",
"nsIMobileConnectionService");
-XPCOMUtils.defineLazyServiceGetter(this, "gIccService",
- "@mozilla.org/icc/iccservice;1",
- "nsIIccService");
+XPCOMUtils.defineLazyServiceGetter(this, "icc",
+ "@mozilla.org/ril/content-helper;1",
+ "nsIIccProvider");
#endif
this.PhoneNumberUtils = {
@@ -46,8 +46,8 @@ this.PhoneNumberUtils = {
#ifdef MOZ_B2G_RIL
// TODO: Bug 926740 - PhoneNumberUtils for multisim
- // In Multi-sim, there is more than one client in
- // iccService/mobileConnectionService. Each client represents a
+ // In Multi-sim, there is more than one client in
+ // iccProvider/mobileConnectionProvider. Each client represents a
// icc/mobileConnection service. To maintain the backward compatibility with
// single sim, we always use client 0 for now. Adding support for multiple
// sim will be addressed in bug 926740, if needed.
@@ -61,8 +61,7 @@ this.PhoneNumberUtils = {
}
// Get SIM mcc
- let icc = gIccService.getIccByServiceId(clientId);
- let iccInfo = icc && icc.iccInfo;
+ let iccInfo = icc.getIccInfo(clientId);
if (!mcc && iccInfo && iccInfo.mcc) {
mcc = iccInfo.mcc;
}
diff --git a/dom/push/PushService.jsm b/dom/push/PushService.jsm
index c375751e0a77..1276eaac74d4 100644
--- a/dom/push/PushService.jsm
+++ b/dom/push/PushService.jsm
@@ -1775,15 +1775,14 @@ this.PushService = {
let nm = Cc["@mozilla.org/network/manager;1"].getService(Ci.nsINetworkManager);
if (nm.active && nm.active.type == Ci.nsINetworkInterface.NETWORK_TYPE_MOBILE) {
- let iccService = Cc["@mozilla.org/icc/iccservice;1"].getService(Ci.nsIIccService);
+ let icc = Cc["@mozilla.org/ril/content-helper;1"].getService(Ci.nsIIccProvider);
// TODO: Bug 927721 - PushService for multi-sim
- // In Multi-sim, there is more than one client in iccService. Each
- // client represents a icc handle. To maintain backward compatibility
+ // In Multi-sim, there is more than one client in iccProvider. Each
+ // client represents a icc service. To maintain backward compatibility
// with single sim, we always use client 0 for now. Adding support
// for multiple sim will be addressed in bug 927721, if needed.
let clientId = 0;
- let icc = iccService.getIccByServiceId(clientId);
- let iccInfo = icc && icc.iccInfo;
+ let iccInfo = icc.getIccInfo(clientId);
if (iccInfo) {
debug("Running on mobile data");
diff --git a/dom/system/gonk/NetworkManager.js b/dom/system/gonk/NetworkManager.js
index ad61f69680de..5a29545577d1 100644
--- a/dom/system/gonk/NetworkManager.js
+++ b/dom/system/gonk/NetworkManager.js
@@ -38,6 +38,7 @@ const TOPIC_PREF_CHANGED = "nsPref:changed";
const TOPIC_XPCOM_SHUTDOWN = "xpcom-shutdown";
const TOPIC_CONNECTION_STATE_CHANGED = "network-connection-state-changed";
const PREF_MANAGE_OFFLINE_STATUS = "network.gonk.manage-offline-status";
+const PREF_NETWORK_DEBUG_ENABLED = "network.debugging.enabled";
const IPV4_ADDRESS_ANY = "0.0.0.0";
const IPV6_ADDRESS_ANY = "::0";
@@ -53,13 +54,22 @@ const CONNECTION_TYPE_WIFI = 3;
const CONNECTION_TYPE_OTHER = 4;
const CONNECTION_TYPE_NONE = 5;
-let DEBUG = false;
+let debug;
+function updateDebug() {
+ let debugPref = false; // set default value here.
+ try {
+ debugPref = debugPref || Services.prefs.getBoolPref(PREF_NETWORK_DEBUG_ENABLED);
+ } catch (e) {}
-// Read debug setting from pref.
-try {
- let debugPref = Services.prefs.getBoolPref("network.debugging.enabled");
- DEBUG = DEBUG || debugPref;
-} catch (e) {}
+ if (debugPref) {
+ debug = function(s) {
+ dump("-*- NetworkManager: " + s + "\n");
+ };
+ } else {
+ debug = function(s) {};
+ }
+}
+updateDebug();
function defineLazyRegExp(obj, name, pattern) {
obj.__defineGetter__(name, function() {
@@ -121,6 +131,7 @@ function NetworkManager() {
// Ignore.
}
Services.prefs.addObserver(PREF_MANAGE_OFFLINE_STATUS, this, false);
+ Services.prefs.addObserver(PREF_NETWORK_DEBUG_ENABLED, this, false);
Services.obs.addObserver(this, TOPIC_XPCOM_SHUTDOWN, false);
this.setAndConfigureActive();
@@ -147,13 +158,18 @@ NetworkManager.prototype = {
observe: function(subject, topic, data) {
switch (topic) {
case TOPIC_PREF_CHANGED:
- this._manageOfflineStatus =
- Services.prefs.getBoolPref(PREF_MANAGE_OFFLINE_STATUS);
- debug(PREF_MANAGE_OFFLINE_STATUS + " has changed to " + this._manageOfflineStatus);
+ if (data === PREF_NETWORK_DEBUG_ENABLED) {
+ updateDebug();
+ } else if (data === PREF_MANAGE_OFFLINE_STATUS) {
+ this._manageOfflineStatus =
+ Services.prefs.getBoolPref(PREF_MANAGE_OFFLINE_STATUS);
+ debug(PREF_MANAGE_OFFLINE_STATUS + " has changed to " + this._manageOfflineStatus);
+ }
break;
case TOPIC_XPCOM_SHUTDOWN:
Services.obs.removeObserver(this, TOPIC_XPCOM_SHUTDOWN);
Services.prefs.removeObserver(PREF_MANAGE_OFFLINE_STATUS, this);
+ Services.prefs.removeObserver(PREF_NETWORK_DEBUG_ENABLED, this);
break;
}
},
@@ -715,8 +731,8 @@ NetworkManager.prototype = {
return;
}
- if (DEBUG) debug("hostname is resolved: " + hostname);
- if (DEBUG) debug("Addresses: " + JSON.stringify(retval));
+ debug("hostname is resolved: " + hostname);
+ debug("Addresses: " + JSON.stringify(retval));
deferred.resolve(retval);
};
@@ -853,14 +869,4 @@ XPCOMUtils.defineLazyGetter(NetworkManager.prototype, "mRil", function() {
return null;
});
-this.NSGetFactory = XPCOMUtils.generateNSGetFactory([NetworkManager]);
-
-
-let debug;
-if (DEBUG) {
- debug = function(s) {
- dump("-*- NetworkManager: " + s + "\n");
- };
-} else {
- debug = function(s) {};
-}
+this.NSGetFactory = XPCOMUtils.generateNSGetFactory([NetworkManager]);
\ No newline at end of file
diff --git a/dom/system/gonk/NetworkService.js b/dom/system/gonk/NetworkService.js
index 9c4f9888d055..28f3cee7092f 100644
--- a/dom/system/gonk/NetworkService.js
+++ b/dom/system/gonk/NetworkService.js
@@ -15,6 +15,10 @@ Cu.import("resource://gre/modules/Promise.jsm");
const NETWORKSERVICE_CONTRACTID = "@mozilla.org/network/service;1";
const NETWORKSERVICE_CID = Components.ID("{baec696c-c78d-42db-8b44-603f8fbfafb4}");
+const TOPIC_PREF_CHANGED = "nsPref:changed";
+const TOPIC_XPCOM_SHUTDOWN = "xpcom-shutdown";
+const PREF_NETWORK_DEBUG_ENABLED = "network.debugging.enabled";
+
XPCOMUtils.defineLazyServiceGetter(this, "gNetworkWorker",
"@mozilla.org/network/worker;1",
"nsINetworkWorker");
@@ -35,13 +39,22 @@ const WIFI_CTRL_INTERFACE = "wl0.1";
const MANUAL_PROXY_CONFIGURATION = 1;
-let DEBUG = false;
+let debug;
+function updateDebug() {
+ let debugPref = false; // set default value here.
+ try {
+ debugPref = debugPref || Services.prefs.getBoolPref(PREF_NETWORK_DEBUG_ENABLED);
+ } catch (e) {}
-// Read debug setting from pref.
-try {
- let debugPref = Services.prefs.getBoolPref("network.debugging.enabled");
- DEBUG = DEBUG || debugPref;
-} catch (e) {}
+ if (debugPref) {
+ debug = function(s) {
+ dump("-*- NetworkService: " + s + "\n");
+ };
+ } else {
+ debug = function(s) {};
+ }
+}
+updateDebug();
function netdResponseType(code) {
return Math.floor(code / 100) * 100;
@@ -52,10 +65,6 @@ function isError(code) {
return (type !== NETD_COMMAND_PROCEEDING && type !== NETD_COMMAND_OKAY);
}
-function debug(msg) {
- dump("-*- NetworkService: " + msg + "\n");
-}
-
function Task(id, params, setupFunction) {
this.id = id;
this.params = params;
@@ -73,7 +82,7 @@ NetworkWorkerRequestQueue.prototype = {
}
let task = this.tasks[0];
- if (DEBUG) debug("run task id: " + task.id);
+ debug("run task id: " + task.id);
if (typeof task.setupFunction === 'function') {
// If setupFunction returns false, skip sending to Network Worker but call
@@ -89,7 +98,7 @@ NetworkWorkerRequestQueue.prototype = {
},
enqueue: function(id, params, setupFunction) {
- if (DEBUG) debug("enqueue id: " + id);
+ debug("enqueue id: " + id);
this.tasks.push(new Task(id, params, setupFunction));
if (this.tasks.length === 1) {
@@ -98,10 +107,10 @@ NetworkWorkerRequestQueue.prototype = {
},
dequeue: function(id) {
- if (DEBUG) debug("dequeue id: " + id);
+ debug("dequeue id: " + id);
if (!this.tasks.length || this.tasks[0].id != id) {
- if (DEBUG) debug("Id " + id + " is not on top of the queue");
+ debug("Id " + id + " is not on top of the queue");
return;
}
@@ -121,7 +130,7 @@ NetworkWorkerRequestQueue.prototype = {
* adjusts routes etc. accordingly.
*/
function NetworkService() {
- if(DEBUG) debug("Starting net_worker.");
+ debug("Starting net_worker.");
let self = this;
@@ -139,7 +148,9 @@ function NetworkService() {
this.addedRoutes = new Map();
this.netWorkerRequestQueue = new NetworkWorkerRequestQueue(this);
this.shutdown = false;
- Services.obs.addObserver(this, "xpcom-shutdown", false);
+
+ Services.prefs.addObserver(PREF_NETWORK_DEBUG_ENABLED, this, false);
+ Services.obs.addObserver(this, TOPIC_XPCOM_SHUTDOWN, false);
}
NetworkService.prototype = {
@@ -148,11 +159,38 @@ NetworkService.prototype = {
contractID: NETWORKSERVICE_CONTRACTID,
classDescription: "Network Service",
interfaces: [Ci.nsINetworkService]}),
- QueryInterface: XPCOMUtils.generateQI([Ci.nsINetworkService]),
+ QueryInterface: XPCOMUtils.generateQI([Ci.nsINetworkService,
+ Ci.nsIObserver]),
+
+ addedRoutes: null,
+
+ shutdown: false,
+
+ // nsIObserver
+
+ observe: function(subject, topic, data) {
+ switch (topic) {
+ case TOPIC_PREF_CHANGED:
+ if (data === PREF_NETWORK_DEBUG_ENABLED) {
+ updateDebug();
+ }
+ break;
+ case TOPIC_XPCOM_SHUTDOWN:
+ debug("NetworkService shutdown");
+ this.shutdown = true;
+ if (gNetworkWorker) {
+ gNetworkWorker.shutdown();
+ gNetworkWorker = null;
+ }
+
+ Services.obs.removeObserver(this, TOPIC_XPCOM_SHUTDOWN);
+ Services.prefs.removeObserver(PREF_NETWORK_DEBUG_ENABLED, this);
+ break;
+ }
+ },
// Helpers
- addedRoutes: null,
idgen: 0,
controlMessage: function(params, callback, setupFunction) {
if (this.shutdown) {
@@ -178,7 +216,7 @@ NetworkService.prototype = {
},
handleWorkerMessage: function(response) {
- if(DEBUG) debug("NetworkManager received message from worker: " + JSON.stringify(response));
+ debug("NetworkManager received message from worker: " + JSON.stringify(response));
let id = response.id;
if (response.broadcast === true) {
Services.obs.notifyObservers(null, response.topic, response.reason);
@@ -196,7 +234,7 @@ NetworkService.prototype = {
// nsINetworkService
getNetworkInterfaceStats: function(networkName, callback) {
- if(DEBUG) debug("getNetworkInterfaceStats for " + networkName);
+ debug("getNetworkInterfaceStats for " + networkName);
let file = new FileUtils.File("/proc/net/dev");
if (!file) {
@@ -257,7 +295,7 @@ NetworkService.prototype = {
},
_setNetworkInterfaceAlarm: function(networkName, threshold, callback) {
- if(DEBUG) debug("setNetworkInterfaceAlarm for " + networkName + " at " + threshold + "bytes");
+ debug("setNetworkInterfaceAlarm for " + networkName + " at " + threshold + "bytes");
let params = {
cmd: "setNetworkInterfaceAlarm",
@@ -278,7 +316,7 @@ NetworkService.prototype = {
},
_enableNetworkInterfaceAlarm: function(networkName, threshold, callback) {
- if(DEBUG) debug("enableNetworkInterfaceAlarm for " + networkName + " at " + threshold + "bytes");
+ debug("enableNetworkInterfaceAlarm for " + networkName + " at " + threshold + "bytes");
let params = {
cmd: "enableNetworkInterfaceAlarm",
@@ -298,7 +336,7 @@ NetworkService.prototype = {
},
_disableNetworkInterfaceAlarm: function(networkName, callback) {
- if(DEBUG) debug("disableNetworkInterfaceAlarm for " + networkName);
+ debug("disableNetworkInterfaceAlarm for " + networkName);
let params = {
cmd: "disableNetworkInterfaceAlarm",
@@ -313,7 +351,7 @@ NetworkService.prototype = {
},
setWifiOperationMode: function(interfaceName, mode, callback) {
- if(DEBUG) debug("setWifiOperationMode on " + interfaceName + " to " + mode);
+ debug("setWifiOperationMode on " + interfaceName + " to " + mode);
let params = {
cmd: "setWifiOperationMode",
@@ -342,7 +380,7 @@ NetworkService.prototype = {
},
setDNS: function(networkInterface, callback) {
- if (DEBUG) debug("Going DNS to " + networkInterface.name);
+ debug("Going DNS to " + networkInterface.name);
let dnses = networkInterface.getDnses();
let options = {
cmd: "setDNS",
@@ -356,7 +394,7 @@ NetworkService.prototype = {
},
setDefaultRoute: function(network, oldInterface, callback) {
- if (DEBUG) debug("Going to change default route to " + network.name);
+ debug("Going to change default route to " + network.name);
let gateways = network.getGateways();
let options = {
cmd: "setDefaultRoute",
@@ -370,7 +408,7 @@ NetworkService.prototype = {
},
removeDefaultRoute: function(network) {
- if(DEBUG) debug("Remove default route for " + network.name);
+ debug("Remove default route for " + network.name);
let gateways = network.getGateways();
let options = {
cmd: "removeDefaultRoute",
@@ -395,14 +433,14 @@ NetworkService.prototype = {
command = 'removeHostRoute';
break;
default:
- if (DEBUG) debug('Unknown action: ' + action);
+ debug('Unknown action: ' + action);
return Promise.reject();
}
let route = this._routeToString(interfaceName, host, prefixLength, gateway);
let setupFunc = () => {
let count = this.addedRoutes.get(route);
- if (DEBUG) debug(command + ": " + route + " -> " + count);
+ debug(command + ": " + route + " -> " + count);
// Return false if there is no need to send the command to network worker.
if ((action == Ci.nsINetworkService.MODIFY_ROUTE_ADD && count) ||
@@ -414,7 +452,7 @@ NetworkService.prototype = {
return true;
};
- if (DEBUG) debug(command + " " + host + " on " + interfaceName);
+ debug(command + " " + host + " on " + interfaceName);
let options = {
cmd: command,
ifname: interfaceName,
@@ -451,7 +489,7 @@ NetworkService.prototype = {
},
addSecondaryRoute: function(ifname, route) {
- if(DEBUG) debug("Going to add route to secondary table on " + ifname);
+ debug("Going to add route to secondary table on " + ifname);
let options = {
cmd: "addSecondaryRoute",
ifname: ifname,
@@ -463,7 +501,7 @@ NetworkService.prototype = {
},
removeSecondaryRoute: function(ifname, route) {
- if(DEBUG) debug("Going to remove route from secondary table on " + ifname);
+ debug("Going to remove route from secondary table on " + ifname);
let options = {
cmd: "removeSecondaryRoute",
ifname: ifname,
@@ -480,11 +518,11 @@ NetworkService.prototype = {
// Sets direct connection to internet.
this.clearNetworkProxy();
- if (DEBUG) debug("No proxy support for " + network.name + " network interface.");
+ debug("No proxy support for " + network.name + " network interface.");
return;
}
- if (DEBUG) debug("Going to set proxy settings for " + network.name + " network interface.");
+ debug("Going to set proxy settings for " + network.name + " network interface.");
// Sets manual proxy configuration.
Services.prefs.setIntPref("network.proxy.type", MANUAL_PROXY_CONFIGURATION);
// Do not use this proxy server for all protocols.
@@ -495,13 +533,13 @@ NetworkService.prototype = {
Services.prefs.setIntPref("network.proxy.http_port", port);
Services.prefs.setIntPref("network.proxy.ssl_port", port);
} catch(ex) {
- if (DEBUG) debug("Exception " + ex + ". Unable to set proxy setting for " +
+ debug("Exception " + ex + ". Unable to set proxy setting for " +
network.name + " network interface.");
}
},
clearNetworkProxy: function() {
- if (DEBUG) debug("Going to clear all network proxy.");
+ debug("Going to clear all network proxy.");
Services.prefs.clearUserPref("network.proxy.type");
Services.prefs.clearUserPref("network.proxy.share_proxy_settings");
@@ -545,7 +583,7 @@ NetworkService.prototype = {
let enable = data.enable;
let enableString = enable ? "Enable" : "Disable";
- if(DEBUG) debug(enableString + " Wifi tethering result: Code " + code + " reason " + reason);
+ debug(enableString + " Wifi tethering result: Code " + code + " reason " + reason);
if (isError(code)) {
callback.wifiTetheringEnabledChange("netd command error");
@@ -565,7 +603,7 @@ NetworkService.prototype = {
let enable = data.enable;
let enableString = enable ? "Enable" : "Disable";
- if(DEBUG) debug(enableString + " USB tethering result: Code " + code + " reason " + reason);
+ debug(enableString + " USB tethering result: Code " + code + " reason " + reason);
if (isError(code)) {
callback.usbTetheringEnabledChange("netd command error");
@@ -577,7 +615,7 @@ NetworkService.prototype = {
// Switch usb function by modifying property of persist.sys.usb.config.
enableUsbRndis: function(enable, callback) {
- if(DEBUG) debug("enableUsbRndis: " + enable);
+ debug("enableUsbRndis: " + enable);
let params = {
cmd: "enableUsbRndis",
@@ -609,7 +647,7 @@ NetworkService.prototype = {
this.controlMessage(params, function(data) {
let code = data.resultCode;
let reason = data.resultReason;
- if(DEBUG) debug("updateUpStream result: Code " + code + " reason " + reason);
+ debug("updateUpStream result: Code " + code + " reason " + reason);
callback.updateUpStreamResult(!isError(code), data.curExternalIfname);
});
},
@@ -695,22 +733,6 @@ NetworkService.prototype = {
callback.nativeCommandResult(!result.error);
});
},
-
- shutdown: false,
-
- observe: function observe(aSubject, aTopic, aData) {
- switch (aTopic) {
- case "xpcom-shutdown":
- debug("NetworkService shutdown");
- this.shutdown = true;
- Services.obs.removeObserver(this, "xpcom-shutdown");
- if (gNetworkWorker) {
- gNetworkWorker.shutdown();
- gNetworkWorker = null;
- }
- break;
- }
- },
};
this.NSGetFactory = XPCOMUtils.generateNSGetFactory([NetworkService]);
diff --git a/dom/system/gonk/RILContentHelper.js b/dom/system/gonk/RILContentHelper.js
index 78471b273527..655d4c115c19 100644
--- a/dom/system/gonk/RILContentHelper.js
+++ b/dom/system/gonk/RILContentHelper.js
@@ -98,8 +98,8 @@ IccInfo.prototype = {
mcc: null,
mnc: null,
spn: null,
- isDisplayNetworkNameRequired: false,
- isDisplaySpnRequired: false
+ isDisplayNetworkNameRequired: null,
+ isDisplaySpnRequired: null
};
function GsmIccInfo() {}
@@ -131,19 +131,16 @@ function RILContentHelper() {
this.numClients = gNumRadioInterfaces;
if (DEBUG) debug("Number of clients: " + this.numClients);
- this._iccs = [];
this.rilContexts = [];
for (let clientId = 0; clientId < this.numClients; clientId++) {
- this._iccs.push(new Icc(this, clientId));
this.rilContexts[clientId] = {
- cardState: Ci.nsIIcc.CARD_STATE_UNKNOWN,
+ cardState: Ci.nsIIccProvider.CARD_STATE_UNKNOWN,
iccInfo: null
};
}
this.initDOMRequestHelper(/* aWindow */ null, RIL_IPC_MSG_NAMES);
this._windowsMap = [];
- this._requestMap = [];
this._iccListeners = [];
this._iccChannelCallback = [];
@@ -156,14 +153,12 @@ RILContentHelper.prototype = {
__proto__: DOMRequestIpcHelper.prototype,
QueryInterface: XPCOMUtils.generateQI([Ci.nsIIccProvider,
- Ci.nsIIccService,
Ci.nsIObserver,
Ci.nsISupportsWeakReference]),
classID: RILCONTENTHELPER_CID,
classInfo: XPCOMUtils.generateCI({classID: RILCONTENTHELPER_CID,
classDescription: "RILContentHelper",
- interfaces: [Ci.nsIIccProvider,
- Ci.nsIIccService]}),
+ interfaces: [Ci.nsIIccProvider]}),
updateDebugFlag: function() {
try {
@@ -211,8 +206,6 @@ RILContentHelper.prototype = {
_windowsMap: null,
- _requestMap: null,
-
rilContexts: null,
getRilContext: function(clientId) {
@@ -241,6 +234,142 @@ RILContentHelper.prototype = {
* nsIIccProvider
*/
+ getIccInfo: function(clientId) {
+ let context = this.getRilContext(clientId);
+ return context && context.iccInfo;
+ },
+
+ getCardState: function(clientId) {
+ let context = this.getRilContext(clientId);
+ return context && context.cardState;
+ },
+
+ matchMvno: function(clientId, window, mvnoType, mvnoData) {
+ if (window == null) {
+ throw Components.Exception("Can't get window object",
+ Cr.NS_ERROR_UNEXPECTED);
+ }
+
+ let request = Services.DOMRequest.createRequest(window);
+ let requestId = this.getRequestId(request);
+
+ cpmm.sendAsyncMessage("RIL:MatchMvno", {
+ clientId: clientId,
+ data: {
+ requestId: requestId,
+ mvnoType: mvnoType,
+ mvnoData: mvnoData
+ }
+ });
+ return request;
+ },
+
+ getCardLockEnabled: function(clientId, window, lockType) {
+ if (window == null) {
+ throw Components.Exception("Can't get window object",
+ Cr.NS_ERROR_UNEXPECTED);
+ }
+
+ let request = Services.DOMRequest.createRequest(window);
+ let requestId = this.getRequestId(request);
+ this._windowsMap[requestId] = window;
+
+ cpmm.sendAsyncMessage("RIL:GetCardLockEnabled", {
+ clientId: clientId,
+ data: {
+ lockType: lockType,
+ requestId: requestId
+ }
+ });
+ return request;
+ },
+
+ unlockCardLock: function(clientId, window, lockType, password, newPin) {
+ if (window == null) {
+ throw Components.Exception("Can't get window object",
+ Cr.NS_ERROR_UNEXPECTED);
+ }
+
+ let request = Services.DOMRequest.createRequest(window);
+ let requestId = this.getRequestId(request);
+ this._windowsMap[requestId] = window;
+
+ cpmm.sendAsyncMessage("RIL:UnlockCardLock", {
+ clientId: clientId,
+ data: {
+ lockType: lockType,
+ password: password,
+ newPin: newPin,
+ requestId: requestId
+ }
+ });
+ return request;
+ },
+
+ setCardLockEnabled: function(clientId, window, lockType, password, enabled) {
+ if (window == null) {
+ throw Components.Exception("Can't get window object",
+ Cr.NS_ERROR_UNEXPECTED);
+ }
+
+ let request = Services.DOMRequest.createRequest(window);
+ let requestId = this.getRequestId(request);
+ this._windowsMap[requestId] = window;
+
+ cpmm.sendAsyncMessage("RIL:SetCardLockEnabled", {
+ clientId: clientId,
+ data: {
+ lockType: lockType,
+ password: password,
+ enabled: enabled,
+ requestId: requestId
+ }
+ });
+ return request;
+ },
+
+ changeCardLockPassword: function(clientId, window, lockType, password,
+ newPassword) {
+ if (window == null) {
+ throw Components.Exception("Can't get window object",
+ Cr.NS_ERROR_UNEXPECTED);
+ }
+
+ let request = Services.DOMRequest.createRequest(window);
+ let requestId = this.getRequestId(request);
+ this._windowsMap[requestId] = window;
+
+ cpmm.sendAsyncMessage("RIL:ChangeCardLockPassword", {
+ clientId: clientId,
+ data: {
+ lockType: lockType,
+ password: password,
+ newPassword: newPassword,
+ requestId: requestId
+ }
+ });
+ return request;
+ },
+
+ getCardLockRetryCount: function(clientId, window, lockType) {
+ if (window == null) {
+ throw Components.Exception("Can't get window object",
+ Cr.NS_ERROR_UNEXPECTED);
+ }
+ let request = Services.DOMRequest.createRequest(window);
+ let requestId = this.getRequestId(request);
+ this._windowsMap[requestId] = window;
+
+ cpmm.sendAsyncMessage("RIL:GetCardLockRetryCount", {
+ clientId: clientId,
+ data: {
+ lockType: lockType,
+ requestId: requestId
+ }
+ });
+ return request;
+ },
+
sendStkResponse: function(clientId, window, command, response) {
if (window == null) {
throw Components.Exception("Can't get window object",
@@ -416,6 +545,27 @@ RILContentHelper.prototype = {
return request;
},
+ getServiceState: function(clientId, window, service) {
+ if (window == null) {
+ throw Components.Exception("Can't get window object",
+ Cr.NS_ERROR_UNEXPECTED);
+ }
+
+ return new window.Promise((resolve, reject) => {
+ let requestId =
+ this.getPromiseResolverId({resolve: resolve, reject: reject});
+ this._windowsMap[requestId] = window;
+
+ cpmm.sendAsyncMessage("RIL:GetServiceState", {
+ clientId: clientId,
+ data: {
+ requestId: requestId,
+ service: service
+ }
+ });
+ });
+ },
+
_iccListeners: null,
registerListener: function(listenerType, clientId, listener) {
@@ -571,56 +721,62 @@ RILContentHelper.prototype = {
case "RIL:CardStateChanged":
if (this.rilContexts[clientId].cardState != data.cardState) {
this.rilContexts[clientId].cardState = data.cardState;
- this._deliverIccEvent(clientId,
- "notifyCardStateChanged",
- null);
+ this._deliverEvent(clientId,
+ "_iccListeners",
+ "notifyCardStateChanged",
+ null);
}
break;
case "RIL:IccInfoChanged":
this.updateIccInfo(clientId, data);
- this._deliverIccEvent(clientId,
- "notifyIccInfoChanged",
- null);
+ this._deliverEvent(clientId,
+ "_iccListeners",
+ "notifyIccInfoChanged",
+ null);
break;
case "RIL:GetCardLockResult": {
let requestId = data.requestId;
- let callback = this._requestMap[requestId];
- delete this._requestMap[requestId];
+ let requestWindow = this._windowsMap[requestId];
+ delete this._windowsMap[requestId];
if (data.errorMsg) {
- callback.notifyError(data.errorMsg);
+ this.fireRequestError(requestId, data.errorMsg);
break;
}
- callback.notifySuccessWithBoolean(data.enabled);
+ this.fireRequestSuccess(requestId,
+ Cu.cloneInto({ enabled: data.enabled },
+ requestWindow));
break;
}
case "RIL:SetUnlockCardLockResult": {
let requestId = data.requestId;
- let callback = this._requestMap[requestId];
- delete this._requestMap[requestId];
+ let requestWindow = this._windowsMap[requestId];
+ delete this._windowsMap[requestId];
if (data.errorMsg) {
- let retryCount =
- (data.retryCount !== undefined) ? data.retryCount : -1;
- callback.notifyCardLockError(data.errorMsg, retryCount);
+ let cardLockError = new requestWindow.IccCardLockError(data.errorMsg,
+ data.retryCount);
+ this.fireRequestDetailedError(requestId, cardLockError);
break;
}
- callback.notifySuccess();
+ this.fireRequestSuccess(requestId, null);
break;
}
case "RIL:CardLockRetryCount": {
let requestId = data.requestId;
- let callback = this._requestMap[requestId];
- delete this._requestMap[requestId];
+ let requestWindow = this._windowsMap[requestId];
+ delete this._windowsMap[requestId];
if (data.errorMsg) {
- callback.notifyError(data.errorMsg);
+ this.fireRequestError(data.requestId, data.errorMsg);
break;
}
- callback.notifyGetCardLockRetryCount(data.retryCount);
+ this.fireRequestSuccess(data.requestId,
+ Cu.cloneInto({ retryCount: data.retryCount },
+ requestWindow));
break;
}
case "RIL:StkCommand":
@@ -645,30 +801,12 @@ RILContentHelper.prototype = {
case "RIL:UpdateIccContact":
this.handleUpdateIccContact(data);
break;
- case "RIL:MatchMvno": {
- let requestId = data.requestId;
- let callback = this._requestMap[requestId];
- delete this._requestMap[requestId];
-
- if (data.errorMsg) {
- callback.notifyError(data.errorMsg);
- break;
- }
- callback.notifySuccessWithBoolean(data.result);
+ case "RIL:MatchMvno":
+ this.handleSimpleRequest(data.requestId, data.errorMsg, data.result);
break;
- }
- case "RIL:GetServiceState": {
- let requestId = data.requestId;
- let callback = this._requestMap[requestId];
- delete this._requestMap[requestId];
-
- if (data.errorMsg) {
- callback.notifyError(data.errorMsg);
- break;
- }
- callback.notifySuccessWithBoolean(data.result);
+ case "RIL:GetServiceState":
+ this.handleGetServiceState(data);
break;
- }
}
},
@@ -771,6 +909,20 @@ RILContentHelper.prototype = {
this.fireRequestSuccess(message.requestId, contact);
},
+ handleGetServiceState: function(message) {
+ let requestId = message.requestId;
+ let requestWindow = this._windowsMap[requestId];
+ delete this._windowsMap[requestId];
+
+ let resolver = this.takePromiseResolver(requestId);
+ if (message.errorMsg) {
+ resolver.reject(new requestWindow.DOMError(message.errorMsg));
+ return;
+ }
+
+ resolver.resolve(message.result);
+ },
+
_deliverEvent: function(clientId, listenerType, name, args) {
if (!this[listenerType]) {
return;
@@ -795,235 +947,6 @@ RILContentHelper.prototype = {
if (DEBUG) debug("listener for " + name + " threw an exception: " + e);
}
}
- },
-
- /**
- * nsIIccService interface.
- */
-
- _iccs: null, // An array of Icc instances.
-
- getIccByServiceId: function(serviceId) {
- let icc = this._iccs[serviceId];
- if (!icc) {
- throw Cr.NS_ERROR_UNEXPECTED;
- }
-
- return icc;
- },
-
- /**
- * Bridge APIs from nsIIccService to nsIIccProvider
- */
-
- _deliverIccEvent: function(clientId, name, args) {
- let icc = this._iccs[clientId];
- if (!icc) {
- if (DEBUG) debug("_deliverIccEvent: Invalid clientId: " + clientId);
- return;
- }
-
- icc.deliverListenerEvent(name, args);
- },
-
- getIccInfo: function(clientId) {
- let context = this.getRilContext(clientId);
- return context && context.iccInfo;
- },
-
- getCardState: function(clientId) {
- let context = this.getRilContext(clientId);
- return context && context.cardState;
- },
-
- matchMvno: function(clientId, mvnoType, mvnoData, callback) {
- let requestId = UUIDGenerator.generateUUID().toString();
- this._requestMap[requestId] = callback;
-
- cpmm.sendAsyncMessage("RIL:MatchMvno", {
- clientId: clientId,
- data: {
- requestId: requestId,
- mvnoType: mvnoType,
- mvnoData: mvnoData
- }
- });
- },
-
- getCardLockEnabled: function(clientId, lockType, callback) {
- let requestId = UUIDGenerator.generateUUID().toString();
- this._requestMap[requestId] = callback;
-
- cpmm.sendAsyncMessage("RIL:GetCardLockEnabled", {
- clientId: clientId,
- data: {
- lockType: lockType,
- requestId: requestId
- }
- });
- },
-
- unlockCardLock: function(clientId, lockType, password, newPin, callback) {
- let requestId = UUIDGenerator.generateUUID().toString();
- this._requestMap[requestId] = callback;
-
- cpmm.sendAsyncMessage("RIL:UnlockCardLock", {
- clientId: clientId,
- data: {
- lockType: lockType,
- password: password,
- newPin: newPin,
- requestId: requestId
- }
- });
- },
-
- setCardLockEnabled: function(clientId, lockType, password, enabled, callback) {
- let requestId = UUIDGenerator.generateUUID().toString();
- this._requestMap[requestId] = callback;
-
- cpmm.sendAsyncMessage("RIL:SetCardLockEnabled", {
- clientId: clientId,
- data: {
- lockType: lockType,
- password: password,
- enabled: enabled,
- requestId: requestId
- }
- });
- },
-
- changeCardLockPassword: function(clientId, lockType, password, newPassword,
- callback) {
- let requestId = UUIDGenerator.generateUUID().toString();
- this._requestMap[requestId] = callback;
-
- cpmm.sendAsyncMessage("RIL:ChangeCardLockPassword", {
- clientId: clientId,
- data: {
- lockType: lockType,
- password: password,
- newPassword: newPassword,
- requestId: requestId
- }
- });
- },
-
- getCardLockRetryCount: function(clientId, lockType, callback) {
- let requestId = UUIDGenerator.generateUUID().toString();
- this._requestMap[requestId] = callback;
-
- cpmm.sendAsyncMessage("RIL:GetCardLockRetryCount", {
- clientId: clientId,
- data: {
- lockType: lockType,
- requestId: requestId
- }
- });
- },
-
- getServiceStateEnabled: function(clientId, service, callback) {
- let requestId = UUIDGenerator.generateUUID().toString();
- this._requestMap[requestId] = callback;
-
- cpmm.sendAsyncMessage("RIL:GetServiceState", {
- clientId: clientId,
- data: {
- requestId: requestId,
- service: service
- }
- });
- }
-};
-
-function Icc(aIccProvider, aClientId) {
- this._iccProvider = aIccProvider;
- this._clientId = aClientId;
- this._listeners = [];
-}
-Icc.prototype = {
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIIcc]),
-
- _iccProvider: null,
- _clientId: -1,
- _listeners: null,
-
- deliverListenerEvent: function(aName, aArgs) {
- let listeners = this._listeners.slice();
- for (let listener of listeners) {
- if (this._listeners.indexOf(listener) === -1) {
- continue;
- }
- let handler = listener[aName];
- if (typeof handler != "function") {
- throw new Error("No handler for " + aName);
- }
- try {
- handler.apply(listener, aArgs);
- } catch (e) {
- if (DEBUG) {
- debug("listener for " + aName + " threw an exception: " + e);
- }
- }
- }
- },
-
- /**
- * nsIIcc interface.
- */
- registerListener: function(aListener) {
- if (this._listeners.indexOf(aListener) >= 0) {
- throw Cr.NS_ERROR_UNEXPECTED;
- }
-
- this._listeners.push(aListener);
- cpmm.sendAsyncMessage("RIL:RegisterIccMsg");
- },
-
- unregisterListener: function(aListener) {
- let index = this._listeners.indexOf(aListener);
- if (index >= 0) {
- this._listeners.splice(index, 1);
- }
- },
-
- get iccInfo() {
- return this._iccProvider.getIccInfo(this._clientId);
- },
-
- get cardState() {
- return this._iccProvider.getCardState(this._clientId);
- },
-
- getCardLockEnabled: function(aLockType, aCallback) {
- this._iccProvider.getCardLockEnabled(this._clientId, aLockType, aCallback);
- },
-
- unlockCardLock: function(aLockType, aPassword, aNewPin, aCallback) {
- this._iccProvider.unlockCardLock(this._clientId, aLockType,
- aPassword, aNewPin, aCallback);
- },
-
- setCardLockEnabled: function(aLockType, aPassword, aEnabled, aCallback) {
- this._iccProvider.setCardLockEnabled(this._clientId, aLockType,
- aPassword, aEnabled, aCallback);
- },
-
- changeCardLockPassword: function(aLockType, aPassword, aNewPassword, aCallback) {
- this._iccProvider.changeCardLockPassword(this._clientId, aLockType,
- aPassword, aNewPassword, aCallback);
- },
-
- getCardLockRetryCount: function(aLockType, aCallback) {
- this._iccProvider.getCardLockRetryCount(this._clientId, aLockType, aCallback);
- },
-
- matchMvno: function(aMvnoType, aMvnoData, aCallback) {
- this._iccProvider.matchMvno(this._clientId, aMvnoType, aMvnoData, aCallback);
- },
-
- getServiceStateEnabled: function(aService, aCallback) {
- this._iccProvider.getServiceStateEnabled(this._clientId, aService, aCallback);
}
};
diff --git a/dom/system/gonk/RILContentHelper.manifest b/dom/system/gonk/RILContentHelper.manifest
index c9a871ba583e..fbfb1a1f64b1 100644
--- a/dom/system/gonk/RILContentHelper.manifest
+++ b/dom/system/gonk/RILContentHelper.manifest
@@ -13,8 +13,6 @@
# limitations under the License.
# RILContentHelper.js
-# TODO: Bug 815526, deprecate RILContentHelper:
-# To be removed from b2g/installer/package-manifest.in as well.
component {472816e1-1fd6-4405-996c-806f9ea68174} RILContentHelper.js
contract @mozilla.org/ril/content-helper;1 {472816e1-1fd6-4405-996c-806f9ea68174}
category profile-after-change RILContentHelper @mozilla.org/ril/content-helper;1
diff --git a/dom/system/gonk/RadioInterfaceLayer.js b/dom/system/gonk/RadioInterfaceLayer.js
index fe508f39dc2a..ba89600ada5a 100644
--- a/dom/system/gonk/RadioInterfaceLayer.js
+++ b/dom/system/gonk/RadioInterfaceLayer.js
@@ -87,7 +87,6 @@ const NETWORK_TYPE_MOBILE_SUPL = Ci.nsINetworkInterface.NETWORK_TYPE_MOBILE_SUPL
const NETWORK_TYPE_MOBILE_IMS = Ci.nsINetworkInterface.NETWORK_TYPE_MOBILE_IMS;
const NETWORK_TYPE_MOBILE_DUN = Ci.nsINetworkInterface.NETWORK_TYPE_MOBILE_DUN;
-// TODO: Bug 815526, deprecate RILContentHelper.
const RIL_IPC_ICCMANAGER_MSG_NAMES = [
"RIL:GetRilContext",
"RIL:SendStkResponse",
@@ -128,10 +127,6 @@ function debug(s) {
dump("-*- RadioInterfaceLayer: " + s + "\n");
}
-XPCOMUtils.defineLazyServiceGetter(this, "gIccService",
- "@mozilla.org/icc/gonkiccservice;1",
- "nsIGonkIccService");
-
XPCOMUtils.defineLazyServiceGetter(this, "gMobileMessageService",
"@mozilla.org/mobilemessage/mobilemessageservice;1",
"nsIMobileMessageService");
@@ -182,7 +177,6 @@ XPCOMUtils.defineLazyGetter(this, "gStkCmdFactory", function() {
return stk.StkProactiveCmdFactory;
});
-// TODO: Bug 815526, deprecate RILContentHelper.
XPCOMUtils.defineLazyGetter(this, "gMessageManager", function() {
return {
QueryInterface: XPCOMUtils.generateQI([Ci.nsIMessageListener,
@@ -892,8 +886,8 @@ IccInfo.prototype = {
mcc: null,
mnc: null,
spn: null,
- isDisplayNetworkNameRequired: false,
- isDisplaySpnRequired: false
+ isDisplayNetworkNameRequired: null,
+ isDisplaySpnRequired: null
};
function GsmIccInfo() {}
@@ -1429,7 +1423,7 @@ function RadioInterfaceLayer() {
Services.obs.addObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID, false);
Services.prefs.addObserver(kPrefRilDebuggingEnabled, this, false);
- gMessageManager.init(this); // TODO: Bug 815526, deprecate RILContentHelper.
+ gMessageManager.init(this);
gRadioEnabledController.init(this);
gDataConnectionManager.init(this);
}
@@ -1441,7 +1435,6 @@ RadioInterfaceLayer.prototype = {
interfaces: [Ci.nsIRadioInterfaceLayer]}),
QueryInterface: XPCOMUtils.generateQI([Ci.nsIRadioInterfaceLayer,
- Ci.nsIRadioInterfaceLayer_new, // TODO: Bug 815526, deprecate RILContentHelper.
Ci.nsIObserver]),
/**
@@ -1683,14 +1676,13 @@ function RadioInterface(aClientId, aWorkerMessenger) {
this.clientId = aClientId;
this.workerMessenger = {
send: aWorkerMessenger.send.bind(aWorkerMessenger, aClientId),
- // TODO: Bug 815526, deprecate RILContentHelper.
sendWithIPCMessage:
aWorkerMessenger.sendWithIPCMessage.bind(aWorkerMessenger, aClientId),
};
aWorkerMessenger.registerClient(aClientId, this);
this.rilContext = {
- cardState: Ci.nsIIcc.CARD_STATE_UNKNOWN,
+ cardState: Ci.nsIIccProvider.CARD_STATE_UNKNOWN,
iccInfo: null,
imsi: null
};
@@ -1788,14 +1780,12 @@ RadioInterface.prototype = {
isCardPresent: function() {
let cardState = this.rilContext.cardState;
- return cardState !== Ci.nsIIcc.CARD_STATE_UNDETECTED &&
- cardState !== Ci.nsIIcc.CARD_STATE_UNKNOWN;
+ return cardState !== Ci.nsIIccProvider.CARD_STATE_UNDETECTED &&
+ cardState !== Ci.nsIIccProvider.CARD_STATE_UNKNOWN;
},
/**
* Process a message from the content process.
- *
- * TODO: Bug 815526, deprecate RILContentHelper
*/
receiveMessage: function(msg) {
switch (msg.name) {
@@ -1935,9 +1925,6 @@ RadioInterface.prototype = {
case "cardstatechange":
this.rilContext.cardState = message.cardState;
gRadioEnabledController.receiveCardState(this.clientId);
- gIccService.notifyCardStateChanged(this.clientId,
- this.rilContext.cardState);
- // TODO: Bug 815526, deprecate RILContentHelper.
gMessageManager.sendIccMessage("RIL:CardStateChanged",
this.clientId, message);
break;
@@ -1955,7 +1942,6 @@ RadioInterface.prototype = {
break;
case "iccimsi":
this.rilContext.imsi = message.imsi;
- gIccService.notifyImsiChanged(this.clientId, this.rilContext.imsi);
break;
case "iccmbdn":
this.handleIccMbdn(message);
@@ -1967,7 +1953,6 @@ RadioInterface.prototype = {
this.handleStkProactiveCommand(message);
break;
case "stksessionend":
- // TODO: Bug 815526, deprecate RILContentHelper.
gMessageManager.sendIccMessage("RIL:StkSessionEnd", this.clientId, null);
break;
case "cdma-info-rec-received":
@@ -1983,7 +1968,6 @@ RadioInterface.prototype = {
// and not compared. E.g., if the mvnoData passed is '310260x10xxxxxx',
// then the function returns true only if imsi has the same first 6 digits,
// 8th and 9th digit.
- // TODO: Bug 815526, deprecate RILContentHelper.
isImsiMatches: function(mvnoData) {
let imsi = this.rilContext.imsi;
@@ -2001,7 +1985,6 @@ RadioInterface.prototype = {
return true;
},
- // TODO: Bug 815526, deprecate RILContentHelper.
matchMvno: function(target, message) {
if (DEBUG) this.debug("matchMvno: " + JSON.stringify(message));
@@ -2239,8 +2222,6 @@ RadioInterface.prototype = {
handleIccInfoChange: function(message) {
let oldSpn = this.rilContext.iccInfo ? this.rilContext.iccInfo.spn : null;
- // TODO: Bug 815526, deprecate RILContentHelper:
- // Move the logic of updating iccInfo to IccService.js.
if (!message || !message.iccid) {
// If iccInfo is already `null`, don't have to clear it and send
// RIL:IccInfoChanged.
@@ -2270,11 +2251,17 @@ RadioInterface.prototype = {
// RIL:IccInfoChanged corresponds to a DOM event that gets fired only
// when iccInfo has changed.
- // TODO: Bug 815526, deprecate RILContentHelper.
gMessageManager.sendIccMessage("RIL:IccInfoChanged",
this.clientId,
message.iccid ? message : null);
- gIccService.notifyIccInfoChanged(this.clientId, this.rilContext.iccInfo);
+
+ // Update lastKnownSimMcc.
+ if (message.mcc) {
+ try {
+ Services.prefs.setCharPref("ril.lastKnownSimMcc",
+ message.mcc.toString());
+ } catch (e) {}
+ }
// Update lastKnownHomeNetwork.
if (message.mcc && message.mnc) {
@@ -2302,7 +2289,6 @@ RadioInterface.prototype = {
.notifyStkProactiveCommand(iccId,
gStkCmdFactory.createCommand(message));
}
- // TODO: Bug 815526, deprecate RILContentHelper.
gMessageManager.sendIccMessage("RIL:StkCommand", this.clientId, message);
},
diff --git a/dom/system/gonk/TetheringService.js b/dom/system/gonk/TetheringService.js
index 077c10b95cee..ee61efebdd01 100644
--- a/dom/system/gonk/TetheringService.js
+++ b/dom/system/gonk/TetheringService.js
@@ -43,7 +43,9 @@ const TOPIC_INTERFACE_REGISTERED = "network-interface-registered";
const TOPIC_INTERFACE_UNREGISTERED = "network-interface-unregistered";
const TOPIC_MOZSETTINGS_CHANGED = "mozsettings-changed";
const TOPIC_CONNECTION_STATE_CHANGED = "network-connection-state-changed";
+const TOPIC_PREF_CHANGED = "nsPref:changed";
const TOPIC_XPCOM_SHUTDOWN = "xpcom-shutdown";
+const PREF_NETWORK_DEBUG_ENABLED = "network.debugging.enabled";
const POSSIBLE_USB_INTERFACE_NAME = "rndis0,usb0";
const DEFAULT_USB_INTERFACE_NAME = "rndis0";
@@ -103,21 +105,22 @@ const MOBILE_DUN_CONNECT_TIMEOUT = 30000;
const MOBILE_DUN_RETRY_INTERVAL = 5000;
const MOBILE_DUN_MAX_RETRIES = 5;
-let DEBUG = false;
-// Read debug setting from pref.
-try {
- let debugPref = Services.prefs.getBoolPref("network.debugging.enabled");
- DEBUG = DEBUG || debugPref;
-} catch (e) {}
-
let debug;
-if (DEBUG) {
- debug = function(s) {
- dump("-*- TetheringService: " + s + "\n");
- };
-} else {
- debug = function(s) {};
+function updateDebug() {
+ let debugPref = false; // set default value here.
+ try {
+ debugPref = debugPref || Services.prefs.getBoolPref(PREF_NETWORK_DEBUG_ENABLED);
+ } catch (e) {}
+
+ if (debugPref) {
+ debug = function(s) {
+ dump("-*- TetheringService: " + s + "\n");
+ };
+ } else {
+ debug = function(s) {};
+ }
}
+updateDebug();
function TetheringService() {
Services.obs.addObserver(this, TOPIC_XPCOM_SHUTDOWN, false);
@@ -125,6 +128,7 @@ function TetheringService() {
Services.obs.addObserver(this, TOPIC_CONNECTION_STATE_CHANGED, false);
Services.obs.addObserver(this, TOPIC_INTERFACE_REGISTERED, false);
Services.obs.addObserver(this, TOPIC_INTERFACE_UNREGISTERED, false);
+ Services.prefs.addObserver(PREF_NETWORK_DEBUG_ENABLED, this, false);
this._dataDefaultServiceId = 0;
@@ -236,6 +240,11 @@ TetheringService.prototype = {
let network;
switch(aTopic) {
+ case TOPIC_PREF_CHANGED:
+ if (aData === PREF_NETWORK_DEBUG_ENABLED) {
+ updateDebug();
+ }
+ break;
case TOPIC_MOZSETTINGS_CHANGED:
if ("wrappedJSObject" in aSubject) {
aSubject = aSubject.wrappedJSObject;
@@ -270,6 +279,7 @@ TetheringService.prototype = {
Services.obs.removeObserver(this, TOPIC_CONNECTION_STATE_CHANGED);
Services.obs.removeObserver(this, TOPIC_INTERFACE_REGISTERED);
Services.obs.removeObserver(this, TOPIC_INTERFACE_UNREGISTERED);
+ Services.prefs.removeObserver(PREF_NETWORK_DEBUG_ENABLED, this);
this.dunConnectTimer.cancel();
this.dunRetryTimer.cancel();
diff --git a/dom/system/gonk/moz.build b/dom/system/gonk/moz.build
index c52f5149ee5c..1a88c4c22154 100644
--- a/dom/system/gonk/moz.build
+++ b/dom/system/gonk/moz.build
@@ -89,8 +89,8 @@ if CONFIG['MOZ_B2G_RIL']:
'nsIRadioInterfaceLayer.idl',
]
EXTRA_COMPONENTS += [
- 'RILContentHelper.js', # TODO: Bug 815526, deprecate RILContentHelper.
- 'RILContentHelper.manifest', # TODO: Bug 815526, deprecate RILContentHelper.
+ 'RILContentHelper.js',
+ 'RILContentHelper.manifest',
'RILSystemMessengerHelper.js',
'RILSystemMessengerHelper.manifest',
]
diff --git a/dom/system/gonk/nsIRadioInterfaceLayer.idl b/dom/system/gonk/nsIRadioInterfaceLayer.idl
index db4c56a9c8a4..f20564c7aac9 100644
--- a/dom/system/gonk/nsIRadioInterfaceLayer.idl
+++ b/dom/system/gonk/nsIRadioInterfaceLayer.idl
@@ -25,7 +25,7 @@ interface nsIRilNetworkInterface : nsINetworkInterface
interface nsIRilContext : nsISupports
{
/**
- * One of the nsIIcc.CARD_STATE_* values.
+ * One of the nsIIccProvider.CARD_STATE_* values.
*/
readonly attribute unsigned long cardState;
@@ -79,13 +79,3 @@ interface nsIRadioInterfaceLayer : nsISupports
void setMicrophoneMuted(in boolean muted);
};
-
-
-/**
- * Helper Interface to define new APIs of nsIRadioInterfaceLayer during
- * ril-interfaces frozen phase.
- */
-[scriptable, uuid(f8ec63da-c22e-11e4-89f3-b767dae42a13)]
-interface nsIRadioInterfaceLayer_new : nsIRadioInterfaceLayer
-{
-};
diff --git a/dom/system/gonk/ril_consts.js b/dom/system/gonk/ril_consts.js
index fd2dbfceeaf4..f3beee1063f4 100644
--- a/dom/system/gonk/ril_consts.js
+++ b/dom/system/gonk/ril_consts.js
@@ -2557,7 +2557,7 @@ this.GECKO_RADIOSTATE_DISABLED = 1;
// Only used in ril_worker.js
this.GECKO_CARDSTATE_UNINITIALIZED = 4294967294; // UINT32_MAX - 1
-// See nsIIcc::CARD_STATE_*
+// See nsIIccProvider::CARD_STATE_*
this.GECKO_CARDSTATE_UNDETECTED = 4294967295; // UINT32_MAX
this.GECKO_CARDSTATE_UNKNOWN = 0;
this.GECKO_CARDSTATE_READY = 1;
@@ -2590,7 +2590,7 @@ this.GECKO_CARDSTATE_RUIM_SERVICE_PROVIDER_PUK_REQUIRED = 27;
this.GECKO_CARDSTATE_RUIM_PUK_REQUIRED = 28;
this.GECKO_CARDSTATE_ILLEGAL = 29;
-// See nsIIcc::CARD_LOCK_TYPE_*
+// See nsIIccProvider::CARD_LOCK_TYPE_*
this.GECKO_CARDLOCK_PIN = 0;
this.GECKO_CARDLOCK_PIN2 = 1;
this.GECKO_CARDLOCK_PUK = 2;
@@ -2633,17 +2633,17 @@ GECKO_CARDLOCK_TO_SEL_CODE[GECKO_CARDLOCK_SPCK] = ICC_SEL_CODE_PH_SP_PIN;
// TODO: Bug 1116072: identify the mapping between RIL_PERSOSUBSTATE_SIM_SIM @
// ril.h and TS 27.007, clause 8.65 for GECKO_CARDLOCK_PCK.
-// See nsIIcc::CARD_CONTACT_TYPE_*
+// See nsIIccProvider::CARD_CONTACT_TYPE_*
this.GECKO_CARDCONTACT_TYPE_ADN = 0;
this.GECKO_CARDCONTACT_TYPE_FDN = 1;
this.GECKO_CARDCONTACT_TYPE_SDN = 2;
-// See nsIIcc::CARD_MVNO_TYPE_*
+// See nsIIccProvider::CARD_MVNO_TYPE_*
this.GECKO_CARDMVNO_TYPE_IMSI = 0;
this.GECKO_CARDMVNO_TYPE_SPN = 1;
this.GECKO_CARDMVNO_TYPE_GID = 2;
-// See nsIIcc::CARD_SERVICE_*
+// See nsIIccProvider::CARD_MVNO_TYPE_*
this.GECKO_CARDSERVICE_FDN = 0;
// See ril.h RIL_PersoSubstate
diff --git a/dom/system/gonk/tests/marionette/test_ril_code_quality.py b/dom/system/gonk/tests/marionette/test_ril_code_quality.py
index 1002b99486f7..f9221391f54d 100644
--- a/dom/system/gonk/tests/marionette/test_ril_code_quality.py
+++ b/dom/system/gonk/tests/marionette/test_ril_code_quality.py
@@ -2,7 +2,7 @@
The test performs the static code analysis check by JSHint.
Target js files:
-- RILContentHelper.js TODO: Bug 815526, deprecate RILContentHelper.
+- RILContentHelper.js
- RadioInterfaceLayer.js
- ril_worker.js
- ril_consts.js
@@ -100,7 +100,7 @@ class ResourceUriFileReader:
URI_PREFIX = 'resource://gre/'
URI_PATH = {
- 'RILContentHelper.js': 'components/RILContentHelper.js', #TODO: Bug 815526, deprecate RILContentHelper.
+ 'RILContentHelper.js': 'components/RILContentHelper.js',
'RadioInterfaceLayer.js': 'components/RadioInterfaceLayer.js',
'ril_worker.js': 'modules/ril_worker.js',
'ril_consts.js': 'modules/ril_consts.js',
@@ -354,7 +354,6 @@ class TestRILCodeQuality(MarionetteTestCase):
def tearDown(self):
MarionetteTestCase.tearDown(self)
- # TODO: Bug 815526, deprecate RILContentHelper.
def test_RILContentHelper(self):
self._check('RILContentHelper.js')
diff --git a/dom/system/gonk/tests/test_ril_worker_icc_CardState.js b/dom/system/gonk/tests/test_ril_worker_icc_CardState.js
index 788df5073f7e..75ebc30a9a83 100644
--- a/dom/system/gonk/tests/test_ril_worker_icc_CardState.js
+++ b/dom/system/gonk/tests/test_ril_worker_icc_CardState.js
@@ -33,65 +33,65 @@ add_test(function test_personalization_state() {
// Test GSM personalization state.
testPersonalization(false, CARD_PERSOSUBSTATE_SIM_NETWORK,
- Ci.nsIIcc.CARD_STATE_NETWORK_LOCKED);
+ Ci.nsIIccProvider.CARD_STATE_NETWORK_LOCKED);
testPersonalization(false, CARD_PERSOSUBSTATE_SIM_NETWORK_SUBSET,
- Ci.nsIIcc.CARD_STATE_NETWORK_SUBSET_LOCKED);
+ Ci.nsIIccProvider.CARD_STATE_NETWORK_SUBSET_LOCKED);
testPersonalization(false, CARD_PERSOSUBSTATE_SIM_CORPORATE,
- Ci.nsIIcc.CARD_STATE_CORPORATE_LOCKED);
+ Ci.nsIIccProvider.CARD_STATE_CORPORATE_LOCKED);
testPersonalization(false, CARD_PERSOSUBSTATE_SIM_SERVICE_PROVIDER,
- Ci.nsIIcc.CARD_STATE_SERVICE_PROVIDER_LOCKED);
+ Ci.nsIIccProvider.CARD_STATE_SERVICE_PROVIDER_LOCKED);
testPersonalization(false, CARD_PERSOSUBSTATE_SIM_SIM,
- Ci.nsIIcc.CARD_STATE_SIM_LOCKED);
+ Ci.nsIIccProvider.CARD_STATE_SIM_LOCKED);
testPersonalization(false, CARD_PERSOSUBSTATE_SIM_NETWORK_PUK,
- Ci.nsIIcc.CARD_STATE_NETWORK_PUK_REQUIRED);
+ Ci.nsIIccProvider.CARD_STATE_NETWORK_PUK_REQUIRED);
testPersonalization(false, CARD_PERSOSUBSTATE_SIM_NETWORK_SUBSET_PUK,
- Ci.nsIIcc.CARD_STATE_NETWORK_SUBSET_PUK_REQUIRED);
+ Ci.nsIIccProvider.CARD_STATE_NETWORK_SUBSET_PUK_REQUIRED);
testPersonalization(false, CARD_PERSOSUBSTATE_SIM_CORPORATE_PUK,
- Ci.nsIIcc.CARD_STATE_CORPORATE_PUK_REQUIRED);
+ Ci.nsIIccProvider.CARD_STATE_CORPORATE_PUK_REQUIRED);
testPersonalization(false, CARD_PERSOSUBSTATE_SIM_SERVICE_PROVIDER_PUK,
- Ci.nsIIcc.CARD_STATE_SERVICE_PROVIDER_PUK_REQUIRED);
+ Ci.nsIIccProvider.CARD_STATE_SERVICE_PROVIDER_PUK_REQUIRED);
testPersonalization(false, CARD_PERSOSUBSTATE_SIM_SIM_PUK,
- Ci.nsIIcc.CARD_STATE_SIM_PUK_REQUIRED);
+ Ci.nsIIccProvider.CARD_STATE_SIM_PUK_REQUIRED);
testPersonalization(false, CARD_PERSOSUBSTATE_UNKNOWN,
- Ci.nsIIcc.CARD_STATE_UNKNOWN);
+ Ci.nsIIccProvider.CARD_STATE_UNKNOWN);
testPersonalization(false, CARD_PERSOSUBSTATE_IN_PROGRESS,
- Ci.nsIIcc.CARD_STATE_PERSONALIZATION_IN_PROGRESS);
+ Ci.nsIIccProvider.CARD_STATE_PERSONALIZATION_IN_PROGRESS);
testPersonalization(false, CARD_PERSOSUBSTATE_READY,
- Ci.nsIIcc.CARD_STATE_PERSONALIZATION_READY);
+ Ci.nsIIccProvider.CARD_STATE_PERSONALIZATION_READY);
// Test CDMA personalization state.
testPersonalization(true, CARD_PERSOSUBSTATE_RUIM_NETWORK1,
- Ci.nsIIcc.CARD_STATE_NETWORK1_LOCKED);
+ Ci.nsIIccProvider.CARD_STATE_NETWORK1_LOCKED);
testPersonalization(true, CARD_PERSOSUBSTATE_RUIM_NETWORK2,
- Ci.nsIIcc.CARD_STATE_NETWORK2_LOCKED);
+ Ci.nsIIccProvider.CARD_STATE_NETWORK2_LOCKED);
testPersonalization(true, CARD_PERSOSUBSTATE_RUIM_HRPD,
- Ci.nsIIcc.CARD_STATE_HRPD_NETWORK_LOCKED);
+ Ci.nsIIccProvider.CARD_STATE_HRPD_NETWORK_LOCKED);
testPersonalization(true, CARD_PERSOSUBSTATE_RUIM_CORPORATE,
- Ci.nsIIcc.CARD_STATE_RUIM_CORPORATE_LOCKED);
+ Ci.nsIIccProvider.CARD_STATE_RUIM_CORPORATE_LOCKED);
testPersonalization(true, CARD_PERSOSUBSTATE_RUIM_SERVICE_PROVIDER,
- Ci.nsIIcc.CARD_STATE_RUIM_SERVICE_PROVIDER_LOCKED);
+ Ci.nsIIccProvider.CARD_STATE_RUIM_SERVICE_PROVIDER_LOCKED);
testPersonalization(true, CARD_PERSOSUBSTATE_RUIM_RUIM,
- Ci.nsIIcc.CARD_STATE_RUIM_LOCKED);
+ Ci.nsIIccProvider.CARD_STATE_RUIM_LOCKED);
testPersonalization(true, CARD_PERSOSUBSTATE_RUIM_NETWORK1_PUK,
- Ci.nsIIcc.CARD_STATE_NETWORK1_PUK_REQUIRED);
+ Ci.nsIIccProvider.CARD_STATE_NETWORK1_PUK_REQUIRED);
testPersonalization(true, CARD_PERSOSUBSTATE_RUIM_NETWORK2_PUK,
- Ci.nsIIcc.CARD_STATE_NETWORK2_PUK_REQUIRED);
+ Ci.nsIIccProvider.CARD_STATE_NETWORK2_PUK_REQUIRED);
testPersonalization(true, CARD_PERSOSUBSTATE_RUIM_HRPD_PUK,
- Ci.nsIIcc.CARD_STATE_HRPD_NETWORK_PUK_REQUIRED);
+ Ci.nsIIccProvider.CARD_STATE_HRPD_NETWORK_PUK_REQUIRED);
testPersonalization(true, CARD_PERSOSUBSTATE_RUIM_CORPORATE_PUK,
- Ci.nsIIcc.CARD_STATE_RUIM_CORPORATE_PUK_REQUIRED);
+ Ci.nsIIccProvider.CARD_STATE_RUIM_CORPORATE_PUK_REQUIRED);
testPersonalization(true, CARD_PERSOSUBSTATE_RUIM_SERVICE_PROVIDER_PUK,
- Ci.nsIIcc.CARD_STATE_RUIM_SERVICE_PROVIDER_PUK_REQUIRED);
+ Ci.nsIIccProvider.CARD_STATE_RUIM_SERVICE_PROVIDER_PUK_REQUIRED);
testPersonalization(true, CARD_PERSOSUBSTATE_RUIM_RUIM_PUK,
- Ci.nsIIcc.CARD_STATE_RUIM_PUK_REQUIRED);
+ Ci.nsIIccProvider.CARD_STATE_RUIM_PUK_REQUIRED);
testPersonalization(true, CARD_PERSOSUBSTATE_UNKNOWN,
- Ci.nsIIcc.CARD_STATE_UNKNOWN);
+ Ci.nsIIccProvider.CARD_STATE_UNKNOWN);
testPersonalization(true, CARD_PERSOSUBSTATE_IN_PROGRESS,
- Ci.nsIIcc.CARD_STATE_PERSONALIZATION_IN_PROGRESS);
+ Ci.nsIIccProvider.CARD_STATE_PERSONALIZATION_IN_PROGRESS);
testPersonalization(true, CARD_PERSOSUBSTATE_READY,
- Ci.nsIIcc.CARD_STATE_PERSONALIZATION_READY);
+ Ci.nsIIccProvider.CARD_STATE_PERSONALIZATION_READY);
run_next_test();
});
@@ -121,17 +121,17 @@ add_test(function test_card_app_state() {
}
testCardAppState(CARD_APPSTATE_ILLEGAL,
- Ci.nsIIcc.CARD_STATE_ILLEGAL);
+ Ci.nsIIccProvider.CARD_STATE_ILLEGAL);
testCardAppState(CARD_APPSTATE_PIN,
- Ci.nsIIcc.CARD_STATE_PIN_REQUIRED);
+ Ci.nsIIccProvider.CARD_STATE_PIN_REQUIRED);
testCardAppState(CARD_APPSTATE_PUK,
- Ci.nsIIcc.CARD_STATE_PUK_REQUIRED);
+ Ci.nsIIccProvider.CARD_STATE_PUK_REQUIRED);
testCardAppState(CARD_APPSTATE_READY,
- Ci.nsIIcc.CARD_STATE_READY);
+ Ci.nsIIccProvider.CARD_STATE_READY);
testCardAppState(CARD_APPSTATE_UNKNOWN,
- Ci.nsIIcc.CARD_STATE_UNKNOWN);
+ Ci.nsIIccProvider.CARD_STATE_UNKNOWN);
testCardAppState(CARD_APPSTATE_DETECTED,
- Ci.nsIIcc.CARD_STATE_UNKNOWN);
+ Ci.nsIIccProvider.CARD_STATE_UNKNOWN);
run_next_test();
});
@@ -159,7 +159,7 @@ add_test(function test_icc_permanent_blocked() {
};
ril._processICCStatus(iccStatus);
- equal(ril.cardState, Ci.nsIIcc.CARD_STATE_PERMANENT_BLOCKED);
+ equal(ril.cardState, Ci.nsIIccProvider.CARD_STATE_PERMANENT_BLOCKED);
}
testPermanentBlocked(1,
diff --git a/dom/webidl/MozIcc.webidl b/dom/webidl/MozIcc.webidl
index d2cab4f47dd1..afe1f4c8c239 100644
--- a/dom/webidl/MozIcc.webidl
+++ b/dom/webidl/MozIcc.webidl
@@ -129,16 +129,6 @@ dictionary IccSetCardLockOptions
// Necessary for lock types: "pin", "fdn"
};
-dictionary IccCardLockStatus
-{
- boolean enabled; // True when CardLock is enabled.
-};
-
-dictionary IccCardLockRetryCount
-{
- long retryCount; // The number of remaining retries. -1 if unkown.
-};
-
[Pref="dom.icc.enabled",
CheckPermissions="mobileconnection",
AvailableIn="CertifiedApps"]
@@ -257,7 +247,6 @@ interface MozIcc : EventTarget
* The request's result will be an object containing
* information about the specified lock's status.
* e.g. {enabled: true}.
- * @see IccCardLockStatus.
*/
[Throws]
DOMRequest getCardLock(IccLockType lockType);
@@ -300,8 +289,8 @@ interface MozIcc : EventTarget
*
* @return a DOMRequest.
* The request's result will be an object containing the number of
- * remaining retries. e.g. {retryCount: 3}.
- * @see IccCardLockRetryCount.
+ * remaining retries.
+ * e.g. {retryCount: 3}.
*/
[Throws]
DOMRequest getCardLockRetryCount(IccLockType lockType);
diff --git a/dom/webidl/moz.build b/dom/webidl/moz.build
index ca3cb1c219f9..d9804a43c2f0 100644
--- a/dom/webidl/moz.build
+++ b/dom/webidl/moz.build
@@ -229,7 +229,6 @@ WEBIDL_FILES = [
'HTMLTrackElement.webidl',
'HTMLUListElement.webidl',
'HTMLVideoElement.webidl',
- 'IccCardLockError.webidl',
'IDBCursor.webidl',
'IDBDatabase.webidl',
'IDBEnvironment.webidl',
@@ -288,9 +287,6 @@ WEBIDL_FILES = [
'MozActivity.webidl',
'MozCellBroadcast.webidl',
'MozCellBroadcastMessage.webidl',
- 'MozIcc.webidl',
- 'MozIccInfo.webidl',
- 'MozIccManager.webidl',
'MozMmsMessage.webidl',
'MozMobileCellInfo.webidl',
'MozMobileConnection.webidl',
@@ -652,6 +648,14 @@ if CONFIG['MOZ_B2G_BT']:
'BluetoothManager.webidl',
]
+if CONFIG['MOZ_B2G_RIL']:
+ WEBIDL_FILES += [
+ 'IccCardLockError.webidl',
+ 'MozIcc.webidl',
+ 'MozIccInfo.webidl',
+ 'MozIccManager.webidl',
+ ]
+
if CONFIG['MOZ_NFC']:
WEBIDL_FILES += [
'MozIsoDepTech.webidl',
diff --git a/dom/wifi/test/marionette/head.js b/dom/wifi/test/marionette/head.js
index dd28995bae07..6effb70fd822 100644
--- a/dom/wifi/test/marionette/head.js
+++ b/dom/wifi/test/marionette/head.js
@@ -450,6 +450,57 @@ let gTestSuite = (function() {
.then(event => event.target.result);
}
+ /**
+ * Import a certificate with nickname and password.
+ *
+ * Resolve when we import certificate successfully; reject when any error
+ * occurs.
+ *
+ * Fulfill params: An object of certificate information.
+ * Reject params: (none)
+ *
+ * @return A deferred promise.
+ */
+ function importCert(certBlob, password, nickname) {
+ let request = wifiManager.importCert(certBlob, password, nickname);
+ return wrapDomRequestAsPromise(request)
+ .then(event => event.target.result);
+ }
+
+ /**
+ * Delete certificate of nickname.
+ *
+ * Resolve when we delete certificate successfully; reject when any error
+ * occurs.
+ *
+ * Fulfill params: (none)
+ * Reject params: (none)
+ *
+ * @return A deferred promise.
+ */
+ function deleteCert(nickname) {
+ let request = wifiManager.deleteCert(nickname);
+ return wrapDomRequestAsPromise(request)
+ .then(event => event.target.result);
+ }
+
+ /**
+ * Get list of imported certificates.
+ *
+ * Resolve when we get certificate list successfully; reject when any error
+ * occurs.
+ *
+ * Fulfill params: Nickname of imported certificate arranged by usage.
+ * Reject params: (none)
+ *
+ * @return A deferred promise.
+ */
+ function getImportedCerts() {
+ let request = wifiManager.getImportedCerts();
+ return wrapDomRequestAsPromise(request)
+ .then(event => event.target.result);
+ }
+
/**
* Request wifi scan and verify the scan result as well.
*
@@ -1188,6 +1239,9 @@ let gTestSuite = (function() {
suite.waitForTimeout = waitForTimeout;
suite.waitForRilDataConnected = waitForRilDataConnected;
suite.requestTetheringEnabled = requestTetheringEnabled;
+ suite.importCert = importCert;
+ suite.getImportedCerts = getImportedCerts;
+ suite.deleteCert = deleteCert;
/**
* Common test routine.
@@ -1288,5 +1342,61 @@ let gTestSuite = (function() {
});
};
+ /**
+ * Run test with imported certificate.
+ *
+ * Certificate will be imported and confirmed before running test, and be
+ * deleted after running test.
+ *
+ * Fulfill params: (none)
+ *
+ * @param certBlob
+ * Certificate content as Blob.
+ * @param password
+ * Password for importing certificate, only used for importing PKCS#12.
+ * @param nickanem
+ * Nickname for imported certificate.
+ * @param usage
+ * Expected usage of imported certificate.
+ * @param aTestCaseChain
+ * The test case entry point, which can be a function or a promise.
+ *
+ * @return A deferred promise.
+ */
+ suite.doTestWithCertificate = function(certBlob, password, nickname, usage, aTestCaseChain) {
+ return suite.doTest(function() {
+ return ensureWifiEnabled(true)
+ // Import test certificate.
+ .then(() => importCert(certBlob, password, nickname))
+ .then(function(info) {
+ // Check import result.
+ is(info.nickname, nickname, "Imported nickname");
+ for (let i = 0; i < usage.length; i++) {
+ isnot(info.usage.indexOf(usage[i]), -1, "Usage " + usage[i]);
+ }
+ })
+ // Get imported certificate list.
+ .then(getImportedCerts)
+ // Check if certificate exists in imported certificate list.
+ .then(function(list) {
+ for (let i = 0; i < usage.length; i++) {
+ isnot(list[usage[i]].indexOf(nickname), -1,
+ "Certificate \"" + nickname + "\" of usage " + usage[i] + " is imported");
+ }
+ })
+ // Run test case.
+ .then(aTestCaseChain)
+ // Delete imported certificates.
+ .then(() => deleteCert(nickname))
+ // Check if certificate doesn't exist in imported certificate list.
+ .then(getImportedCerts)
+ .then(function(list) {
+ for (let i = 0; i < usage.length; i++) {
+ is(list[usage[i]].indexOf(nickname), -1, "Certificate is deleted");
+ }
+ })
+ });
+ };
+
return suite;
})();
diff --git a/dom/wifi/test/marionette/manifest.ini b/dom/wifi/test/marionette/manifest.ini
index 97123d10bffe..8efd9a4d153f 100644
--- a/dom/wifi/test/marionette/manifest.ini
+++ b/dom/wifi/test/marionette/manifest.ini
@@ -11,4 +11,7 @@ qemu = true
[test_wifi_tethering_wifi_disabled.js]
[test_wifi_tethering_wifi_inactive.js]
[test_wifi_tethering_wifi_active.js]
+[test_wifi_manage_server_certificate.js]
+[test_wifi_manage_user_certificate.js]
+[test_wifi_manage_pkcs12_certificate.js]
[test_wifi_enable_api.js]
diff --git a/dom/wifi/test/marionette/test_wifi_manage_pkcs12_certificate.js b/dom/wifi/test/marionette/test_wifi_manage_pkcs12_certificate.js
new file mode 100644
index 000000000000..f85ef00c9407
--- /dev/null
+++ b/dom/wifi/test/marionette/test_wifi_manage_pkcs12_certificate.js
@@ -0,0 +1,338 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+MARIONETTE_TIMEOUT = 60000;
+MARIONETTE_HEAD_JS = 'head.js';
+
+// Binary form of test certificate.
+var testCertInfo = {
+ nickname: 'Test Certificate',
+ password: '12345678',
+ usage: ['UserCert', 'ServerCert'],
+ blob: [0x30, 0x82, 0x09, 0xF1, 0x02, 0x01, 0x03, 0x30,
+ 0x82, 0x09, 0xB7, 0x06, 0x09, 0x2A, 0x86, 0x48,
+ 0x86, 0xF7, 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82,
+ 0x09, 0xA8, 0x04, 0x82, 0x09, 0xA4, 0x30, 0x82,
+ 0x09, 0xA0, 0x30, 0x82, 0x06, 0x9F, 0x06, 0x09,
+ 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x07,
+ 0x06, 0xA0, 0x82, 0x06, 0x90, 0x30, 0x82, 0x06,
+ 0x8C, 0x02, 0x01, 0x00, 0x30, 0x82, 0x06, 0x85,
+ 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D,
+ 0x01, 0x07, 0x01, 0x30, 0x1C, 0x06, 0x0A, 0x2A,
+ 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x0C, 0x01,
+ 0x06, 0x30, 0x0E, 0x04, 0x08, 0x13, 0xB5, 0x2F,
+ 0x5A, 0xB9, 0x49, 0xE6, 0x0B, 0x02, 0x02, 0x08,
+ 0x00, 0x80, 0x82, 0x06, 0x58, 0x35, 0x77, 0x6B,
+ 0xBF, 0x5C, 0x06, 0x09, 0xD8, 0xF0, 0x36, 0x06,
+ 0x69, 0x8D, 0xA2, 0x86, 0xCF, 0x6B, 0x73, 0x86,
+ 0x14, 0xFA, 0x51, 0x9A, 0x87, 0x73, 0x29, 0x71,
+ 0xC5, 0xB1, 0x4F, 0xFB, 0xEC, 0x64, 0x84, 0x20,
+ 0xFC, 0x06, 0x4A, 0x93, 0x74, 0x01, 0xFB, 0xEB,
+ 0x1F, 0xDC, 0xF8, 0xF7, 0xBB, 0xDC, 0x42, 0xA1,
+ 0x4A, 0x71, 0xDE, 0x08, 0x33, 0x7A, 0xCA, 0xD3,
+ 0xD8, 0x40, 0x24, 0x47, 0xAE, 0x41, 0x42, 0x8E,
+ 0xC8, 0x4E, 0xBE, 0x8B, 0xB3, 0xE5, 0x77, 0xAC,
+ 0xBD, 0x98, 0x0C, 0x0E, 0x53, 0xBE, 0x38, 0xB7,
+ 0xEA, 0xD2, 0x29, 0x35, 0xD2, 0xC4, 0xF4, 0xC7,
+ 0xD8, 0xB1, 0x73, 0x2A, 0x13, 0x11, 0x65, 0xF7,
+ 0x0C, 0x8B, 0xC0, 0x43, 0xFB, 0x31, 0x6C, 0xD2,
+ 0xE4, 0x43, 0x85, 0x51, 0x16, 0xBF, 0x35, 0xB5,
+ 0x05, 0x6B, 0x86, 0x11, 0xEA, 0x78, 0x64, 0x9F,
+ 0x42, 0x29, 0xB9, 0x79, 0xAF, 0xB0, 0x7C, 0xBF,
+ 0xC0, 0x89, 0xAD, 0xC7, 0x37, 0xD2, 0x30, 0x8C,
+ 0xDC, 0xF6, 0x77, 0x5E, 0x1F, 0x26, 0x28, 0x8F,
+ 0xAC, 0x19, 0x6C, 0xA0, 0x15, 0xC7, 0x12, 0xA3,
+ 0x0A, 0xD5, 0xC6, 0x15, 0x60, 0x58, 0x16, 0xB8,
+ 0x30, 0x12, 0x3C, 0x78, 0x3C, 0x93, 0x23, 0xA1,
+ 0x56, 0x75, 0x0B, 0x77, 0xAA, 0x0B, 0x0B, 0x2B,
+ 0x91, 0xB6, 0x41, 0xAB, 0xF5, 0x09, 0x4C, 0x1E,
+ 0x36, 0xC0, 0x88, 0xC3, 0x08, 0xF2, 0x65, 0xCB,
+ 0x58, 0x8F, 0x94, 0xB4, 0xB4, 0x05, 0xCC, 0x44,
+ 0x49, 0x73, 0x1B, 0x25, 0x6F, 0x5D, 0x83, 0xBD,
+ 0xF0, 0x70, 0xD0, 0xE8, 0x0D, 0x18, 0x2E, 0x44,
+ 0xD7, 0x89, 0x64, 0x6A, 0xED, 0x23, 0x30, 0xDF,
+ 0xAD, 0x84, 0x3B, 0x74, 0x2C, 0x0D, 0x2B, 0x51,
+ 0x84, 0xA2, 0xA4, 0x9E, 0x42, 0xC3, 0x81, 0x69,
+ 0xFA, 0x56, 0x76, 0x9F, 0xD9, 0x02, 0x64, 0x04,
+ 0xFE, 0xF0, 0xD9, 0x01, 0xBC, 0xE2, 0xC9, 0xDD,
+ 0x88, 0xAC, 0xFA, 0x24, 0x7E, 0xB1, 0xF8, 0x39,
+ 0x27, 0xA2, 0xEB, 0xE4, 0x53, 0xC1, 0xF3, 0xFE,
+ 0x2D, 0x9A, 0x49, 0x73, 0xFF, 0x7C, 0x8E, 0x39,
+ 0xF7, 0x15, 0x27, 0xB3, 0x47, 0x48, 0x92, 0x8C,
+ 0x57, 0x60, 0x9C, 0x97, 0xBA, 0x80, 0xD2, 0x25,
+ 0x80, 0x94, 0xCE, 0x2C, 0x0C, 0x00, 0x44, 0x8C,
+ 0x8C, 0x37, 0x82, 0x5D, 0x5F, 0x62, 0x8B, 0x05,
+ 0x6F, 0xB0, 0x07, 0x34, 0xF9, 0xC3, 0xA1, 0x34,
+ 0x3D, 0xE4, 0x90, 0xB0, 0x03, 0x59, 0x97, 0x6E,
+ 0xFB, 0xF2, 0x92, 0xE5, 0xB5, 0x30, 0x7C, 0x0D,
+ 0x3B, 0x8F, 0x90, 0x8E, 0x04, 0x47, 0x01, 0x0E,
+ 0x88, 0x50, 0x4A, 0x88, 0xA0, 0xFF, 0xB7, 0x9E,
+ 0x2B, 0x2C, 0x98, 0xD0, 0x3E, 0x16, 0x35, 0x5B,
+ 0xD5, 0xEA, 0x54, 0x86, 0xE0, 0xFB, 0x9F, 0x2F,
+ 0x62, 0x89, 0x36, 0x36, 0x9D, 0x6E, 0x62, 0xCB,
+ 0xC8, 0x6C, 0x62, 0x34, 0x8F, 0x66, 0x07, 0x62,
+ 0xA7, 0x00, 0x90, 0x31, 0xFA, 0x5D, 0xDD, 0x12,
+ 0x33, 0x69, 0xD0, 0x74, 0x0E, 0x0B, 0x42, 0x9A,
+ 0xF3, 0x40, 0x7E, 0x3E, 0x48, 0x1D, 0xF2, 0x5C,
+ 0x71, 0x0B, 0x78, 0x7E, 0xD5, 0x15, 0xA4, 0x16,
+ 0x1E, 0xBD, 0x71, 0x18, 0x87, 0x3A, 0xC9, 0xE3,
+ 0x45, 0xEE, 0x70, 0xA2, 0x4C, 0x50, 0xF5, 0x16,
+ 0x5C, 0xF8, 0x76, 0xE6, 0x9F, 0x8D, 0x86, 0x41,
+ 0x7E, 0xF8, 0x60, 0x3D, 0x75, 0x6D, 0x55, 0x96,
+ 0x9E, 0x43, 0x48, 0x82, 0xF7, 0xB6, 0xAC, 0x98,
+ 0x6F, 0x10, 0xAA, 0x20, 0x64, 0xD0, 0x7C, 0x25,
+ 0x24, 0xF7, 0xD8, 0xA4, 0xCC, 0x2D, 0xBF, 0x85,
+ 0x62, 0x6C, 0x4F, 0xFF, 0x9D, 0x71, 0x04, 0x98,
+ 0x61, 0xB0, 0xBC, 0x31, 0xC1, 0xE9, 0xB8, 0x29,
+ 0xA5, 0xEB, 0xD1, 0x1D, 0x65, 0x8E, 0xAE, 0x38,
+ 0x55, 0x65, 0x22, 0xC7, 0xFD, 0x7E, 0xF2, 0x6A,
+ 0xB6, 0xB1, 0x51, 0x37, 0x4B, 0x05, 0x8F, 0xA7,
+ 0x2D, 0x3F, 0x5C, 0x04, 0x2B, 0xBA, 0x2C, 0x37,
+ 0xCA, 0xDE, 0xD5, 0x3E, 0xA0, 0xA5, 0x86, 0x59,
+ 0xA7, 0xD7, 0x38, 0x07, 0xFB, 0x79, 0xF6, 0x2D,
+ 0xE1, 0xAA, 0x7C, 0xD1, 0x91, 0xBE, 0x39, 0xDF,
+ 0x53, 0x3C, 0xD1, 0x44, 0x2C, 0xF9, 0x12, 0x7D,
+ 0xB1, 0xCD, 0xF3, 0x35, 0x1F, 0x85, 0xA6, 0x64,
+ 0x2F, 0xFD, 0x28, 0xF2, 0x85, 0xA8, 0xA7, 0x1F,
+ 0x7F, 0xD9, 0x79, 0x30, 0x9B, 0xFC, 0x69, 0x3A,
+ 0x9B, 0x1F, 0x55, 0x70, 0xC9, 0x60, 0x82, 0x3D,
+ 0xE9, 0x5A, 0x37, 0x5F, 0x8C, 0xBD, 0x19, 0x5D,
+ 0xCC, 0x1C, 0xBE, 0x26, 0x4A, 0xEA, 0x8B, 0x39,
+ 0xCE, 0x0D, 0xBD, 0x63, 0x05, 0x98, 0x75, 0xAB,
+ 0x08, 0x79, 0x90, 0xC7, 0x20, 0xFF, 0xE4, 0x0D,
+ 0xB1, 0xA0, 0x92, 0x2B, 0x0C, 0x4B, 0x0C, 0xDC,
+ 0xB9, 0x72, 0x2A, 0xA4, 0xCC, 0xA6, 0x32, 0xA3,
+ 0x57, 0x82, 0xB4, 0xB9, 0x0F, 0x81, 0xC5, 0xD9,
+ 0x7C, 0xB8, 0x0F, 0x7D, 0xEA, 0x5D, 0xD3, 0xC4,
+ 0x2F, 0x31, 0x79, 0x11, 0xAD, 0x36, 0x56, 0x1F,
+ 0xFA, 0xE3, 0xCE, 0xD2, 0x29, 0x23, 0xE8, 0x2C,
+ 0xDF, 0x7D, 0x94, 0x28, 0x28, 0x9A, 0x0E, 0x64,
+ 0xFC, 0x07, 0x11, 0x96, 0x06, 0x1A, 0x39, 0xCD,
+ 0x04, 0x37, 0x37, 0xDB, 0xFE, 0x68, 0x37, 0xF5,
+ 0x59, 0x54, 0xBC, 0xEF, 0xDB, 0x0C, 0x80, 0xCD,
+ 0xD3, 0x46, 0xA8, 0xA2, 0xBE, 0xE0, 0x63, 0x80,
+ 0xA1, 0x5F, 0x5D, 0xF1, 0xFB, 0x96, 0x8C, 0x06,
+ 0x38, 0xB6, 0xCB, 0x70, 0xB0, 0xFB, 0xD3, 0x26,
+ 0xB3, 0x8B, 0xC6, 0x85, 0x34, 0xB7, 0xAB, 0x5F,
+ 0x7E, 0xC6, 0xAA, 0x79, 0x5B, 0x48, 0x11, 0x65,
+ 0x9E, 0x2A, 0xCD, 0x6A, 0xF0, 0xB2, 0x93, 0xF5,
+ 0x2B, 0x88, 0x45, 0xB7, 0xC9, 0xBE, 0x1A, 0x72,
+ 0x60, 0x62, 0xA4, 0xA5, 0x3B, 0xC2, 0x1C, 0xC6,
+ 0x21, 0x09, 0xA9, 0x40, 0xF6, 0x58, 0x2B, 0xE5,
+ 0x70, 0xDC, 0xFC, 0x47, 0x3B, 0x08, 0xEE, 0xA9,
+ 0x94, 0x26, 0x43, 0xFE, 0xA7, 0x75, 0xD6, 0x4E,
+ 0x52, 0xF6, 0x46, 0xD1, 0x80, 0xEB, 0x3B, 0x8E,
+ 0xBE, 0x54, 0x4F, 0xBD, 0x42, 0x0E, 0x41, 0xF9,
+ 0x36, 0x7D, 0xB6, 0x7F, 0x99, 0x20, 0xC9, 0x63,
+ 0xE7, 0x93, 0x02, 0x62, 0x59, 0x94, 0xCB, 0xC6,
+ 0x62, 0xA9, 0x26, 0xE1, 0x1E, 0x03, 0x5A, 0x41,
+ 0x2F, 0x43, 0x28, 0x75, 0xB7, 0x0C, 0x02, 0x9C,
+ 0x1E, 0xE0, 0x40, 0xB3, 0xE2, 0x9A, 0xED, 0xC6,
+ 0x20, 0x49, 0xEC, 0xDD, 0xC5, 0x64, 0x95, 0x83,
+ 0x51, 0xAE, 0x46, 0x9D, 0x70, 0x17, 0xC6, 0x47,
+ 0xD3, 0x82, 0xCC, 0x6A, 0x5D, 0x93, 0xB2, 0x85,
+ 0x5B, 0x25, 0x05, 0xE7, 0x26, 0x2E, 0xD3, 0xDA,
+ 0x1C, 0xD9, 0x06, 0xB6, 0x16, 0x69, 0x8C, 0x7F,
+ 0xC8, 0xCF, 0x95, 0x18, 0xB5, 0x98, 0xC0, 0x42,
+ 0x61, 0xDE, 0x77, 0x41, 0x3A, 0xF6, 0xE1, 0xB0,
+ 0xE8, 0x64, 0x4A, 0xC2, 0x58, 0xBE, 0x27, 0xC6,
+ 0x9B, 0x0D, 0x47, 0x1A, 0x09, 0x56, 0x7D, 0x2B,
+ 0x19, 0x01, 0x88, 0xC7, 0xFB, 0x1E, 0xCF, 0x5E,
+ 0xF6, 0xB0, 0x82, 0x87, 0xC0, 0xBE, 0xD6, 0xA5,
+ 0xC3, 0xAC, 0x3A, 0x97, 0x88, 0x25, 0x81, 0xAA,
+ 0x3A, 0xCE, 0x66, 0x88, 0x0F, 0xC3, 0x02, 0x50,
+ 0x1C, 0xC3, 0x2B, 0xBC, 0x53, 0x52, 0xFE, 0xD2,
+ 0x3F, 0x50, 0xC8, 0xB2, 0x19, 0x0A, 0x14, 0xB1,
+ 0x73, 0x18, 0xB4, 0xDF, 0xBD, 0xED, 0x43, 0xC5,
+ 0x91, 0xF4, 0x91, 0xBA, 0x7E, 0xB0, 0x7E, 0xA9,
+ 0x43, 0x67, 0x06, 0xCF, 0x51, 0xC1, 0xBF, 0x63,
+ 0x7E, 0x91, 0x76, 0xFF, 0x4F, 0x48, 0x91, 0xCF,
+ 0xDF, 0x01, 0x4D, 0x7E, 0x81, 0x22, 0xFB, 0x79,
+ 0xFC, 0x1D, 0xE3, 0xA7, 0x45, 0x16, 0xFB, 0xF2,
+ 0x83, 0xC7, 0xAE, 0xC6, 0xC5, 0x81, 0xDB, 0xA2,
+ 0x9F, 0x2F, 0xEA, 0xE6, 0x8E, 0x12, 0x8D, 0x43,
+ 0x14, 0x26, 0x25, 0x0E, 0xB4, 0x18, 0xE8, 0x41,
+ 0x84, 0xA3, 0x04, 0xDF, 0x97, 0xFF, 0xAA, 0x45,
+ 0xEC, 0x18, 0xAA, 0xB1, 0xFC, 0xDC, 0xB9, 0xAB,
+ 0xEE, 0xD1, 0xC4, 0x9E, 0x42, 0x3F, 0x5B, 0x8F,
+ 0x9F, 0x22, 0xAF, 0xCC, 0x6F, 0xA0, 0x41, 0x41,
+ 0xCB, 0xD3, 0xAC, 0x96, 0x20, 0xF1, 0x63, 0x56,
+ 0x65, 0xCE, 0x83, 0xC6, 0x62, 0x04, 0x85, 0x16,
+ 0x7F, 0x4E, 0xFB, 0xA0, 0x68, 0x11, 0x85, 0x5B,
+ 0x51, 0xB6, 0x9F, 0xA2, 0xF5, 0xA1, 0xCF, 0x01,
+ 0x9A, 0x80, 0x68, 0xC3, 0xE9, 0x7F, 0x9E, 0x2E,
+ 0x83, 0x84, 0xDC, 0x3C, 0x35, 0xCF, 0x24, 0xBF,
+ 0xF5, 0x00, 0x91, 0x45, 0x14, 0x65, 0xE0, 0xC5,
+ 0x75, 0xDA, 0xEF, 0x14, 0xBD, 0xDB, 0x28, 0x8D,
+ 0x30, 0x96, 0xC9, 0xFE, 0xA8, 0x49, 0x76, 0xC9,
+ 0xED, 0x90, 0x4C, 0x2E, 0xF1, 0x14, 0x2C, 0xF7,
+ 0x13, 0x7C, 0xF1, 0xCC, 0x67, 0xA5, 0x11, 0x55,
+ 0xBD, 0x66, 0x13, 0x8A, 0x76, 0xF9, 0xAC, 0xC9,
+ 0x51, 0x8A, 0xBB, 0x5D, 0x29, 0xEF, 0xF6, 0x37,
+ 0xA0, 0x3E, 0x99, 0x77, 0x6B, 0xE5, 0xCD, 0x06,
+ 0xAC, 0x57, 0x07, 0x37, 0x44, 0x3D, 0x5D, 0xD7,
+ 0xB6, 0x5C, 0xCB, 0x77, 0xD0, 0x4C, 0x28, 0x9D,
+ 0x12, 0x69, 0x5A, 0x68, 0xD1, 0x15, 0x30, 0xC4,
+ 0x30, 0xD2, 0x20, 0xDF, 0xD5, 0x73, 0x9F, 0x83,
+ 0xE9, 0x4C, 0x55, 0xF5, 0xAF, 0xAA, 0x37, 0xF8,
+ 0x28, 0xB6, 0x3F, 0x99, 0x4B, 0x15, 0x1E, 0x40,
+ 0xAB, 0x4F, 0x58, 0x3D, 0x3B, 0x81, 0x7D, 0x62,
+ 0x28, 0x6E, 0x73, 0x58, 0x50, 0x36, 0x49, 0x01,
+ 0xF7, 0x04, 0x3A, 0x23, 0x28, 0xDA, 0x15, 0xC5,
+ 0xE3, 0xF6, 0x6F, 0xE1, 0x79, 0x07, 0xFB, 0xAA,
+ 0xFF, 0x44, 0x48, 0x53, 0x9E, 0x7F, 0x8D, 0x89,
+ 0x88, 0x1A, 0x9A, 0xF9, 0x47, 0x58, 0x20, 0xBB,
+ 0x79, 0x4A, 0x2A, 0x14, 0x03, 0x9B, 0x65, 0x4C,
+ 0x67, 0x02, 0x02, 0xFE, 0xEB, 0xCD, 0xCB, 0x84,
+ 0xF5, 0xCE, 0x32, 0x59, 0xBC, 0xEA, 0xEC, 0xB1,
+ 0x3C, 0x22, 0xCF, 0x9D, 0xB0, 0x34, 0x6D, 0xE6,
+ 0x5A, 0x37, 0xC0, 0x22, 0xAA, 0xF3, 0xB5, 0x71,
+ 0x90, 0x21, 0xE0, 0xB6, 0x19, 0xE9, 0xB3, 0x10,
+ 0xCE, 0x5B, 0xF9, 0xD4, 0x25, 0x30, 0x7D, 0xF6,
+ 0x7D, 0xB6, 0x16, 0xFC, 0x20, 0x3C, 0x2F, 0x96,
+ 0xD5, 0x79, 0x90, 0x88, 0x24, 0x5D, 0x46, 0x64,
+ 0x99, 0xC1, 0xF8, 0x7F, 0x96, 0xA7, 0xB5, 0xA9,
+ 0x47, 0xA3, 0x14, 0xED, 0x93, 0xED, 0x30, 0x56,
+ 0x58, 0xA5, 0xD4, 0x54, 0x2A, 0xF3, 0x89, 0x27,
+ 0x7C, 0x55, 0x41, 0x11, 0x27, 0x9D, 0xF6, 0x4D,
+ 0xA6, 0xB1, 0x00, 0xE0, 0xB0, 0xF6, 0x1E, 0xAB,
+ 0x20, 0x1F, 0xAE, 0x8A, 0x82, 0xA7, 0x49, 0xFC,
+ 0xBB, 0x66, 0xAC, 0x97, 0x95, 0x49, 0x29, 0xCB,
+ 0x6F, 0xF4, 0xC1, 0xB7, 0x6B, 0xF9, 0x8C, 0x25,
+ 0xC6, 0xF0, 0xB5, 0x81, 0xB0, 0xA2, 0x4D, 0xCC,
+ 0x2E, 0xD0, 0x13, 0x5F, 0x96, 0x3F, 0xCD, 0xD0,
+ 0x52, 0xD1, 0xFE, 0xF9, 0xC2, 0x7E, 0x9D, 0xAB,
+ 0xCB, 0x95, 0x0F, 0x27, 0x01, 0x9E, 0x23, 0x6B,
+ 0x19, 0xFF, 0x52, 0x55, 0x71, 0x0A, 0xD4, 0xBB,
+ 0x43, 0x65, 0x29, 0x66, 0xBE, 0x2D, 0x6C, 0xE3,
+ 0x2A, 0x7C, 0xB4, 0x02, 0x32, 0x59, 0x94, 0x80,
+ 0x14, 0xE7, 0x62, 0xE4, 0xCE, 0xB0, 0xCA, 0xCA,
+ 0x37, 0xD7, 0x0C, 0x68, 0x29, 0xE2, 0x92, 0xE1,
+ 0xEB, 0x91, 0xE5, 0xA1, 0x0C, 0xFC, 0x55, 0xCB,
+ 0x56, 0xB3, 0x96, 0xFB, 0x64, 0xD9, 0x53, 0x8E,
+ 0x82, 0x2B, 0xDF, 0x7F, 0xCB, 0x2A, 0xF6, 0x3C,
+ 0xA7, 0x89, 0x52, 0x13, 0x2C, 0x6A, 0x93, 0xA2,
+ 0x74, 0xF5, 0x91, 0x00, 0x17, 0xAA, 0x74, 0x45,
+ 0x63, 0x5A, 0xE5, 0xC3, 0x16, 0xFC, 0x0E, 0xF7,
+ 0xF3, 0xA4, 0x55, 0x8A, 0xA2, 0x60, 0x24, 0x57,
+ 0x25, 0x2C, 0x94, 0xE0, 0xF5, 0x32, 0x54, 0x4A,
+ 0x2D, 0x63, 0x5F, 0xD8, 0x35, 0x96, 0xBD, 0xFE,
+ 0x90, 0x33, 0x17, 0xF6, 0xB5, 0x81, 0x02, 0xFA,
+ 0x5C, 0x94, 0x3A, 0xBE, 0x22, 0xB9, 0xFC, 0x3E,
+ 0x09, 0xE4, 0x76, 0xD7, 0x03, 0x38, 0x38, 0xC2,
+ 0xC2, 0x0D, 0x66, 0x3C, 0xD0, 0x91, 0x5C, 0xF4,
+ 0x0E, 0xC2, 0xDE, 0x46, 0x90, 0x2E, 0xF5, 0x22,
+ 0xA9, 0x3D, 0x15, 0x20, 0x5F, 0x17, 0x10, 0x5A,
+ 0x54, 0x63, 0x93, 0x7B, 0xC3, 0x00, 0x3D, 0x42,
+ 0x73, 0xF1, 0xAD, 0xC1, 0xDE, 0x76, 0x18, 0x9C,
+ 0x68, 0x17, 0xBF, 0x3B, 0xE0, 0x30, 0x82, 0x02,
+ 0xF9, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7,
+ 0x0D, 0x01, 0x07, 0x01, 0xA0, 0x82, 0x02, 0xEA,
+ 0x04, 0x82, 0x02, 0xE6, 0x30, 0x82, 0x02, 0xE2,
+ 0x30, 0x82, 0x02, 0xDE, 0x06, 0x0B, 0x2A, 0x86,
+ 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x0C, 0x0A, 0x01,
+ 0x02, 0xA0, 0x82, 0x02, 0xA6, 0x30, 0x82, 0x02,
+ 0xA2, 0x30, 0x1C, 0x06, 0x0A, 0x2A, 0x86, 0x48,
+ 0x86, 0xF7, 0x0D, 0x01, 0x0C, 0x01, 0x03, 0x30,
+ 0x0E, 0x04, 0x08, 0x34, 0x37, 0x27, 0x5F, 0xE8,
+ 0xD6, 0x00, 0x0D, 0x02, 0x02, 0x08, 0x00, 0x04,
+ 0x82, 0x02, 0x80, 0xC0, 0xE6, 0xB1, 0x63, 0x73,
+ 0xFC, 0xBF, 0x50, 0xFB, 0x54, 0xCF, 0x67, 0x16,
+ 0xF8, 0x28, 0x48, 0x13, 0x7F, 0xF2, 0xBD, 0x66,
+ 0x70, 0xC7, 0xF6, 0x01, 0xD0, 0x58, 0xF4, 0xA4,
+ 0xD9, 0x45, 0xE2, 0x63, 0x92, 0x7F, 0x78, 0x2B,
+ 0xB6, 0xDB, 0x16, 0x44, 0x1D, 0x11, 0xCB, 0xC3,
+ 0x20, 0xA9, 0x8A, 0x96, 0x13, 0xB8, 0x6E, 0xF3,
+ 0xDA, 0x46, 0x05, 0x2C, 0xF9, 0x67, 0xBB, 0x05,
+ 0x88, 0xC0, 0xC8, 0x60, 0x09, 0xA3, 0x82, 0x27,
+ 0x33, 0xEB, 0xEE, 0x43, 0x98, 0xE9, 0xE2, 0x24,
+ 0xA8, 0x06, 0xD5, 0xFF, 0xF5, 0xC0, 0x79, 0x4B,
+ 0x06, 0x40, 0xE6, 0x28, 0xC6, 0x6E, 0x4E, 0x03,
+ 0xCC, 0x9B, 0xB6, 0xBD, 0xB6, 0x81, 0x88, 0x5C,
+ 0x34, 0x6B, 0x8B, 0x15, 0x23, 0x75, 0x21, 0xAC,
+ 0x79, 0xFD, 0xDB, 0x80, 0x1D, 0x20, 0x84, 0xF1,
+ 0x47, 0xAF, 0x7B, 0x40, 0x6C, 0xD2, 0x64, 0x52,
+ 0x11, 0x1B, 0x01, 0x1E, 0xB5, 0xA9, 0x4B, 0xC4,
+ 0x51, 0x54, 0x40, 0xE2, 0xC8, 0xEB, 0x20, 0x48,
+ 0x2D, 0x40, 0xF8, 0xC6, 0x58, 0x5A, 0xE3, 0x34,
+ 0xD8, 0x79, 0x04, 0xD7, 0xD6, 0x07, 0xF2, 0x12,
+ 0x66, 0xC8, 0x31, 0x37, 0x71, 0x60, 0xF4, 0x75,
+ 0xDC, 0x60, 0x54, 0x19, 0x6A, 0x75, 0x56, 0xC5,
+ 0xA9, 0x67, 0x4A, 0x03, 0x7A, 0xFD, 0x12, 0x59,
+ 0x2B, 0x74, 0xE6, 0xA5, 0xE2, 0xF8, 0xBB, 0x1E,
+ 0x76, 0x96, 0xD4, 0xD4, 0x3F, 0x8B, 0xAD, 0x90,
+ 0xAF, 0x04, 0x41, 0xDB, 0xD8, 0xCC, 0x2D, 0x37,
+ 0x06, 0x20, 0x9B, 0xE7, 0x98, 0x87, 0x12, 0xAC,
+ 0x70, 0xC9, 0xF4, 0x1C, 0x28, 0xFB, 0x2C, 0x9E,
+ 0x18, 0xE1, 0x6D, 0x79, 0x34, 0xBC, 0xAC, 0xCB,
+ 0x75, 0x92, 0x7E, 0x8E, 0x7C, 0xA9, 0x0B, 0x86,
+ 0x4A, 0x88, 0xFB, 0xE8, 0xBE, 0x6A, 0x32, 0xEF,
+ 0x58, 0xCC, 0x4C, 0x89, 0x50, 0xEF, 0xDF, 0xE0,
+ 0xDD, 0x35, 0x07, 0x8C, 0x01, 0x8B, 0x57, 0x38,
+ 0xB5, 0x64, 0xBB, 0x0A, 0xC2, 0xD8, 0xAB, 0xC5,
+ 0x45, 0xA6, 0x83, 0xBF, 0xA6, 0xA2, 0xCC, 0x06,
+ 0x64, 0xBE, 0x84, 0x04, 0x55, 0x8E, 0xF4, 0x4C,
+ 0xB5, 0xBC, 0xE5, 0x97, 0x2B, 0x3C, 0x42, 0x44,
+ 0x91, 0x9B, 0xB2, 0x65, 0x70, 0x02, 0xC5, 0xB7,
+ 0x71, 0xB3, 0xF0, 0xAA, 0x46, 0x4F, 0x42, 0x40,
+ 0x53, 0x65, 0x89, 0xA5, 0x6C, 0xBC, 0xB5, 0x6C,
+ 0x0C, 0x3B, 0x50, 0x46, 0x67, 0xFA, 0x14, 0x68,
+ 0x01, 0xE7, 0xA6, 0xD4, 0xB5, 0xD0, 0x82, 0x44,
+ 0x92, 0x2C, 0xE3, 0x43, 0x5D, 0x34, 0x7C, 0x04,
+ 0xA3, 0x4D, 0x2F, 0x5A, 0x75, 0xE7, 0x0B, 0x64,
+ 0xD0, 0xAE, 0x7F, 0xCB, 0xDD, 0x7D, 0x05, 0x88,
+ 0x4C, 0x34, 0xBB, 0xF4, 0x00, 0xCE, 0x1C, 0x13,
+ 0x4E, 0xA3, 0xE3, 0x60, 0x4B, 0x50, 0x4E, 0xE1,
+ 0x26, 0x22, 0x51, 0xD4, 0x32, 0x60, 0xC6, 0x3E,
+ 0x7D, 0x4A, 0x3E, 0x56, 0x78, 0xBD, 0x5F, 0x23,
+ 0x7F, 0x0A, 0xA0, 0xC1, 0x1A, 0x60, 0xA2, 0x7C,
+ 0x9E, 0x17, 0x6F, 0xD8, 0x73, 0x0F, 0x1A, 0x1F,
+ 0x47, 0x58, 0x44, 0x20, 0x80, 0xC6, 0x5D, 0x6E,
+ 0xEC, 0xFF, 0xCA, 0x65, 0xA1, 0xFB, 0xEE, 0xF2,
+ 0x56, 0x1A, 0x16, 0x9E, 0x4D, 0xCA, 0x67, 0x81,
+ 0x23, 0xDE, 0xBE, 0x5E, 0x31, 0x56, 0xF0, 0x34,
+ 0xBA, 0x12, 0xFC, 0x07, 0x03, 0x96, 0xD2, 0x8E,
+ 0xCE, 0xA6, 0xF6, 0x74, 0x07, 0x4F, 0x63, 0x40,
+ 0x14, 0x0A, 0xD6, 0x45, 0xB4, 0xF1, 0x72, 0x87,
+ 0x34, 0x89, 0x5C, 0x06, 0x1B, 0x8C, 0x0E, 0xA2,
+ 0x84, 0x50, 0x12, 0xAD, 0x26, 0x5B, 0x4F, 0x6B,
+ 0x23, 0x9D, 0x3C, 0xBB, 0x8A, 0xDA, 0x08, 0x4B,
+ 0x93, 0x47, 0x02, 0x96, 0x76, 0xD4, 0x87, 0xE9,
+ 0x4B, 0x69, 0x82, 0xD6, 0xCC, 0x69, 0x02, 0xC0,
+ 0xA4, 0x75, 0x7A, 0x90, 0xFD, 0xF6, 0xD6, 0x9D,
+ 0xE2, 0x4C, 0xB6, 0xFA, 0x61, 0xA5, 0x7C, 0x18,
+ 0xEA, 0x84, 0xA1, 0x74, 0x85, 0x2E, 0xCA, 0xF9,
+ 0x17, 0x29, 0xFF, 0x67, 0x70, 0xC9, 0x6F, 0xF1,
+ 0x41, 0xEF, 0xA1, 0x59, 0x54, 0xA0, 0x99, 0x14,
+ 0x48, 0x74, 0x5D, 0x14, 0x3E, 0x04, 0xCE, 0xF7,
+ 0x16, 0x9F, 0x8A, 0x41, 0xF4, 0xAE, 0xB3, 0x10,
+ 0xCE, 0x19, 0xC2, 0x83, 0x7B, 0xD0, 0x26, 0x1E,
+ 0x75, 0x8A, 0x0A, 0x40, 0x4A, 0xB8, 0xE0, 0x5C,
+ 0x13, 0x8B, 0xCC, 0x6F, 0xF3, 0x00, 0xB3, 0x64,
+ 0x1B, 0x3C, 0x3D, 0x08, 0x3B, 0x9F, 0xD0, 0x9B,
+ 0xE5, 0x72, 0x45, 0x96, 0x95, 0x4D, 0x66, 0xC7,
+ 0x79, 0x5D, 0x3A, 0x1A, 0x94, 0x64, 0x94, 0x07,
+ 0x1A, 0xE8, 0x7C, 0xD1, 0x1C, 0xB1, 0x7E, 0x32,
+ 0x28, 0x1A, 0x90, 0x22, 0xD9, 0x86, 0x9B, 0x9C,
+ 0x9B, 0x0C, 0x04, 0x31, 0x85, 0x10, 0x42, 0x50,
+ 0x40, 0x11, 0x72, 0xAB, 0x94, 0x0C, 0xAF, 0xC3,
+ 0x22, 0x1A, 0xC1, 0x31, 0x25, 0x30, 0x23, 0x06,
+ 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01,
+ 0x09, 0x15, 0x31, 0x16, 0x04, 0x14, 0xFD, 0x78,
+ 0xA7, 0x70, 0x1F, 0x8A, 0xE9, 0x07, 0xB9, 0xCA,
+ 0x3C, 0xD1, 0xE8, 0xDC, 0x68, 0xFF, 0x02, 0x61,
+ 0x29, 0x97, 0x30, 0x31, 0x30, 0x21, 0x30, 0x09,
+ 0x06, 0x05, 0x2B, 0x0E, 0x03, 0x02, 0x1A, 0x05,
+ 0x00, 0x04, 0x14, 0x22, 0x7E, 0x99, 0x10, 0xB3,
+ 0x99, 0x79, 0xE7, 0x14, 0x7F, 0x91, 0x59, 0x24,
+ 0x4F, 0x2F, 0xCF, 0xE8, 0x53, 0x1D, 0x0F, 0x04,
+ 0x08, 0x30, 0x1E, 0x5C, 0xE4, 0x3C, 0x66, 0xDF,
+ 0xB0, 0x02, 0x02, 0x08, 0x00]
+};
+
+gTestSuite.doTestWithCertificate(
+ new Blob([new Uint8Array(testCertInfo.blob)]),
+ testCertInfo.password,
+ testCertInfo.nickname,
+ testCertInfo.usage
+);
diff --git a/dom/wifi/test/marionette/test_wifi_manage_server_certificate.js b/dom/wifi/test/marionette/test_wifi_manage_server_certificate.js
new file mode 100644
index 000000000000..dfaf524b211d
--- /dev/null
+++ b/dom/wifi/test/marionette/test_wifi_manage_server_certificate.js
@@ -0,0 +1,106 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+MARIONETTE_TIMEOUT = 60000;
+MARIONETTE_HEAD_JS = 'head.js';
+
+// Binary form of test certificate.
+var testCertInfo = {
+ nickname: 'Test Certificate',
+ password: '',
+ usage: ['ServerCert'],
+ blob: [0x30, 0x82, 0x02, 0xae, 0x30, 0x82, 0x02, 0x17,
+ 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x09, 0x00,
+ 0x92, 0x49, 0xe2, 0x62, 0x71, 0xf6, 0xc7, 0x92,
+ 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
+ 0xf7, 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x30,
+ 0x70, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55,
+ 0x04, 0x06, 0x13, 0x02, 0x54, 0x57, 0x31, 0x0f,
+ 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04, 0x08, 0x0c,
+ 0x06, 0x54, 0x61, 0x69, 0x70, 0x65, 0x69, 0x31,
+ 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55, 0x04, 0x0a,
+ 0x0c, 0x07, 0x4d, 0x6f, 0x7a, 0x69, 0x6c, 0x6c,
+ 0x61, 0x31, 0x0b, 0x30, 0x09, 0x06, 0x03, 0x55,
+ 0x04, 0x0b, 0x0c, 0x02, 0x51, 0x41, 0x31, 0x0e,
+ 0x30, 0x0c, 0x06, 0x03, 0x55, 0x04, 0x03, 0x0c,
+ 0x05, 0x47, 0x65, 0x72, 0x72, 0x79, 0x31, 0x21,
+ 0x30, 0x1f, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
+ 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x16, 0x12, 0x67,
+ 0x63, 0x68, 0x61, 0x6e, 0x67, 0x40, 0x6d, 0x6f,
+ 0x7a, 0x69, 0x6c, 0x6c, 0x61, 0x2e, 0x63, 0x6f,
+ 0x6d, 0x30, 0x1e, 0x17, 0x0d, 0x31, 0x34, 0x30,
+ 0x35, 0x32, 0x33, 0x30, 0x39, 0x34, 0x32, 0x33,
+ 0x37, 0x5a, 0x17, 0x0d, 0x31, 0x37, 0x30, 0x35,
+ 0x32, 0x32, 0x30, 0x39, 0x34, 0x32, 0x33, 0x37,
+ 0x5a, 0x30, 0x70, 0x31, 0x0b, 0x30, 0x09, 0x06,
+ 0x03, 0x55, 0x04, 0x06, 0x13, 0x02, 0x54, 0x57,
+ 0x31, 0x0f, 0x30, 0x0d, 0x06, 0x03, 0x55, 0x04,
+ 0x08, 0x0c, 0x06, 0x54, 0x61, 0x69, 0x70, 0x65,
+ 0x69, 0x31, 0x10, 0x30, 0x0e, 0x06, 0x03, 0x55,
+ 0x04, 0x0a, 0x0c, 0x07, 0x4d, 0x6f, 0x7a, 0x69,
+ 0x6c, 0x6c, 0x61, 0x31, 0x0b, 0x30, 0x09, 0x06,
+ 0x03, 0x55, 0x04, 0x0b, 0x0c, 0x02, 0x51, 0x41,
+ 0x31, 0x0e, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x04,
+ 0x03, 0x0c, 0x05, 0x47, 0x65, 0x72, 0x72, 0x79,
+ 0x31, 0x21, 0x30, 0x1f, 0x06, 0x09, 0x2a, 0x86,
+ 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x09, 0x01, 0x16,
+ 0x12, 0x67, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x40,
+ 0x6d, 0x6f, 0x7a, 0x69, 0x6c, 0x6c, 0x61, 0x2e,
+ 0x63, 0x6f, 0x6d, 0x30, 0x81, 0x9f, 0x30, 0x0d,
+ 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
+ 0x01, 0x01, 0x01, 0x05, 0x00, 0x03, 0x81, 0x8d,
+ 0x00, 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00,
+ 0xd3, 0xdb, 0x54, 0xcc, 0xca, 0x0b, 0xee, 0xf9,
+ 0x8a, 0x37, 0x0d, 0x06, 0x8b, 0x20, 0x00, 0x4a,
+ 0x55, 0x84, 0x90, 0x1a, 0xb7, 0x9c, 0x91, 0xb2,
+ 0x38, 0x6b, 0x8b, 0x32, 0x7a, 0x89, 0x9e, 0x79,
+ 0x71, 0x88, 0x43, 0x21, 0x94, 0x18, 0xa8, 0xfc,
+ 0xe3, 0x7a, 0x8a, 0xb3, 0xa1, 0xf7, 0x23, 0xe7,
+ 0x1a, 0xe3, 0xe7, 0x0d, 0xf1, 0x66, 0x21, 0x58,
+ 0x21, 0x85, 0x5b, 0x35, 0xec, 0x68, 0xd2, 0xfd,
+ 0x44, 0x76, 0x93, 0x05, 0xbb, 0x89, 0x7d, 0x92,
+ 0xf9, 0xce, 0x75, 0xa3, 0xeb, 0x39, 0xc1, 0x7d,
+ 0x7e, 0x50, 0xf9, 0xb8, 0x60, 0x61, 0xf7, 0x2f,
+ 0x54, 0x39, 0xfe, 0x8a, 0x20, 0xb2, 0x0d, 0x48,
+ 0x7f, 0x18, 0x0d, 0x02, 0xcc, 0x7b, 0x8e, 0x31,
+ 0xe9, 0xbe, 0xfc, 0x96, 0x2e, 0x63, 0x6f, 0xfa,
+ 0x4c, 0xc4, 0xcf, 0x8a, 0xe4, 0x13, 0x67, 0xf1,
+ 0xec, 0x3e, 0xd8, 0x23, 0xa1, 0xbf, 0x67, 0x71,
+ 0x02, 0x03, 0x01, 0x00, 0x01, 0xa3, 0x50, 0x30,
+ 0x4e, 0x30, 0x1d, 0x06, 0x03, 0x55, 0x1d, 0x0e,
+ 0x04, 0x16, 0x04, 0x14, 0x13, 0xe1, 0xac, 0xa4,
+ 0x75, 0x3d, 0x2c, 0x5f, 0xe5, 0x41, 0x42, 0x90,
+ 0x5a, 0x48, 0x5c, 0x46, 0xbc, 0x24, 0x8e, 0xa1,
+ 0x30, 0x1f, 0x06, 0x03, 0x55, 0x1d, 0x23, 0x04,
+ 0x18, 0x30, 0x16, 0x80, 0x14, 0x13, 0xe1, 0xac,
+ 0xa4, 0x75, 0x3d, 0x2c, 0x5f, 0xe5, 0x41, 0x42,
+ 0x90, 0x5a, 0x48, 0x5c, 0x46, 0xbc, 0x24, 0x8e,
+ 0xa1, 0x30, 0x0c, 0x06, 0x03, 0x55, 0x1d, 0x13,
+ 0x04, 0x05, 0x30, 0x03, 0x01, 0x01, 0xff, 0x30,
+ 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7,
+ 0x0d, 0x01, 0x01, 0x05, 0x05, 0x00, 0x03, 0x81,
+ 0x81, 0x00, 0xaa, 0x6b, 0x62, 0x53, 0x74, 0x2a,
+ 0x20, 0x76, 0xab, 0xd2, 0x60, 0x06, 0xfd, 0x88,
+ 0xf5, 0x1c, 0x85, 0xe6, 0x57, 0xf1, 0xf0, 0x18,
+ 0x97, 0x7c, 0x70, 0xb8, 0xb4, 0x7c, 0xcc, 0x58,
+ 0x8d, 0xf4, 0x7c, 0xb6, 0x34, 0xcc, 0x15, 0x79,
+ 0xaf, 0x75, 0xa9, 0x0b, 0xd1, 0xea, 0xf8, 0x85,
+ 0x7c, 0xe8, 0x19, 0xe9, 0x13, 0x90, 0x84, 0x5f,
+ 0x21, 0x94, 0x0a, 0x4d, 0x15, 0xef, 0xd1, 0x16,
+ 0xd4, 0xba, 0x2c, 0x59, 0x1b, 0x83, 0x23, 0xf5,
+ 0xa5, 0xcd, 0xbd, 0xda, 0x32, 0x73, 0x46, 0x49,
+ 0x98, 0xf3, 0xfb, 0x50, 0x6e, 0x30, 0xd7, 0x3e,
+ 0x31, 0xd6, 0xe8, 0x65, 0x2f, 0x5a, 0xf1, 0x0f,
+ 0x7b, 0x0a, 0x21, 0x61, 0x8e, 0x45, 0x29, 0x4f,
+ 0x7a, 0x04, 0xda, 0x29, 0xfc, 0x6f, 0xc5, 0x5e,
+ 0xee, 0xe1, 0x0f, 0xd5, 0x4b, 0xb7, 0xc9, 0x6a,
+ 0x8e, 0x7c, 0x19, 0xef, 0x6e, 0x64, 0x98, 0xfe,
+ 0xe3, 0x35]
+};
+
+gTestSuite.doTestWithCertificate(
+ new Blob([new Uint8Array(testCertInfo.blob)]),
+ testCertInfo.password,
+ testCertInfo.nickname,
+ testCertInfo.usage
+);
diff --git a/dom/wifi/test/marionette/test_wifi_manage_user_certificate.js b/dom/wifi/test/marionette/test_wifi_manage_user_certificate.js
new file mode 100644
index 000000000000..950ceae4ed6a
--- /dev/null
+++ b/dom/wifi/test/marionette/test_wifi_manage_user_certificate.js
@@ -0,0 +1,34 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+MARIONETTE_TIMEOUT = 60000;
+MARIONETTE_HEAD_JS = 'head.js';
+
+// Binary form of test certificate.
+var testCertInfo = {
+ nickname: 'Test Certificate',
+ password: '',
+ usage: ['UserCert'],
+ blob: '-----BEGIN CERTIFICATE-----\n' +
+ 'MIICTjCCAbegAwIBAgICNV4wDQYJKoZIhvcNAQEEBQAwgYUxCzAJBgNVBAYTAklU\n' +
+ 'MRYwFAYDVQQKEw1aZXJvc2hlbGwubmV0MRAwDgYDVQQLEwdFeGFtcGxlMR0wGwYD\n' +
+ 'VQQDExRaZXJvU2hlbGwgRXhhbXBsZSBDQTEtMCsGCSqGSIb3DQEJARYeRnVsdmlv\n' +
+ 'LlJpY2NpYXJkaUB6ZXJvc2hlbGwubmV0MB4XDTEzMDMxMTAzMzg1MloXDTE0MDMx\n' +
+ 'MTAzMzg1MlowIzEOMAwGA1UECxMFVXNlcnMxETAPBgNVBAMTCGNodWNrbGVlMIGf\n' +
+ 'MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDvVzFhQAVqAIHW5DlAhp4FEGEei7k7\n' +
+ 'uVUeqkH7JAsww6zmDLg9yZlcZAc95N0lkz022gLXehH2M0R1FOR++nkqofzWfc7w\n' +
+ 'n79ith+dU2GQMeKq7vPGDYXpgIkEKbYfzKj3fY3129MlTxJQt1UD/ejz38V8HKgw\n' +
+ 'qKSuwo0NVeY66QIDAQABoy4wLDALBgNVHQ8EBAMCBLAwHQYDVR0lBBYwFAYIKwYB\n' +
+ 'BQUHAwIGCCsGAQUFBwMEMA0GCSqGSIb3DQEBBAUAA4GBAJWgfX5vYSD7MGZk1rTF\n' +
+ 'DSziWYGqpR+Moo3qQ+9qLG8m+XVM9hckWpY31A5sWAeCZCe1SSNLFbbgsaOyPZE2\n' +
+ 'NqMyvs61Vszpc2mmWAYT6j2OU2tw8p5pcUZd6eIp7Gc3fLymiX/WoSmilZKmrGUZ\n' +
+ 'Q15R+TCpclUsaNrUGjybgaw7\n' +
+ '-----END CERTIFICATE-----'
+};
+
+gTestSuite.doTestWithCertificate(
+ new Blob([testCertInfo.blob]),
+ testCertInfo.password,
+ testCertInfo.nickname,
+ testCertInfo.usage
+);
diff --git a/layout/build/nsLayoutModule.cpp b/layout/build/nsLayoutModule.cpp
index c801285e39fb..eb8f8d6be63a 100644
--- a/layout/build/nsLayoutModule.cpp
+++ b/layout/build/nsLayoutModule.cpp
@@ -213,7 +213,6 @@ static void Shutdown();
#include "mozilla/dom/nsCSPService.h"
#include "mozilla/dom/nsCSPContext.h"
#include "nsICellBroadcastService.h"
-#include "nsIIccService.h"
#include "nsISmsService.h"
#include "nsIMmsService.h"
#include "nsIMobileConnectionService.h"
@@ -339,7 +338,6 @@ NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsICellBroadcastService,
NS_CreateCellBroadcastService)
NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsISmsService, NS_CreateSmsService)
#endif
-NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIIccService, NS_CreateIccService)
NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIMmsService, NS_CreateMmsService)
NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIMobileMessageService,
NS_CreateMobileMessageService)
@@ -800,7 +798,6 @@ NS_DEFINE_NAMED_CID(NS_VOICEMAIL_SERVICE_CID);
NS_DEFINE_NAMED_CID(NS_MOBILE_CONNECTION_SERVICE_CID);
NS_DEFINE_NAMED_CID(SMS_SERVICE_CID);
#endif
-NS_DEFINE_NAMED_CID(ICC_SERVICE_CID);
NS_DEFINE_NAMED_CID(MMS_SERVICE_CID);
NS_DEFINE_NAMED_CID(MOBILE_MESSAGE_SERVICE_CID);
NS_DEFINE_NAMED_CID(MOBILE_MESSAGE_DATABASE_SERVICE_CID);
@@ -1095,7 +1092,6 @@ static const mozilla::Module::CIDEntry kLayoutCIDs[] = {
{ &kCELLBROADCAST_SERVICE_CID, false, nullptr, nsICellBroadcastServiceConstructor },
{ &kSMS_SERVICE_CID, false, nullptr, nsISmsServiceConstructor },
#endif
- { &kICC_SERVICE_CID, false, nullptr, nsIIccServiceConstructor },
{ &kMMS_SERVICE_CID, false, nullptr, nsIMmsServiceConstructor },
{ &kMOBILE_MESSAGE_SERVICE_CID, false, nullptr, nsIMobileMessageServiceConstructor },
{ &kMOBILE_MESSAGE_DATABASE_SERVICE_CID, false, nullptr, nsIMobileMessageDatabaseServiceConstructor },
@@ -1259,7 +1255,6 @@ static const mozilla::Module::ContractIDEntry kLayoutContracts[] = {
{ CELLBROADCAST_SERVICE_CONTRACTID, &kCELLBROADCAST_SERVICE_CID },
{ SMS_SERVICE_CONTRACTID, &kSMS_SERVICE_CID },
#endif
- { ICC_SERVICE_CONTRACTID, &kICC_SERVICE_CID },
{ MMS_SERVICE_CONTRACTID, &kMMS_SERVICE_CID },
{ MOBILE_MESSAGE_SERVICE_CONTRACTID, &kMOBILE_MESSAGE_SERVICE_CID },
{ MOBILE_MESSAGE_DATABASE_SERVICE_CONTRACTID, &kMOBILE_MESSAGE_DATABASE_SERVICE_CID },
diff --git a/mozglue/build/Nuwa.cpp b/mozglue/build/Nuwa.cpp
index 09fc05a27523..99d661ef56b2 100644
--- a/mozglue/build/Nuwa.cpp
+++ b/mozglue/build/Nuwa.cpp
@@ -76,6 +76,7 @@ int __real_close(int aFd);
* threads are frozen.
*/
static bool sIsNuwaProcess = false; // This process is a Nuwa process.
+static bool sIsNuwaChildProcess = false; // This process is spawned from Nuwa.
static bool sIsFreezing = false; // Waiting for all threads getting frozen.
static bool sNuwaReady = false; // Nuwa process is ready.
static bool sNuwaPendingSpawn = false; // Are there any pending spawn requests?
@@ -301,6 +302,7 @@ struct AllThreadsListType : public AutoCleanLinkedList
}
};
static AllThreadsListType sAllThreads;
+static AllThreadsListType sExitingThreads;
/**
* This mutex protects the access to thread info:
@@ -344,6 +346,14 @@ GetThreadInfoInner(pthread_t threadID) {
}
}
+ for (thread_info_t *tinfo = sExitingThreads.getFirst();
+ tinfo;
+ tinfo = tinfo->getNext()) {
+ if (pthread_equal(tinfo->origThreadID, threadID)) {
+ return tinfo;
+ }
+ }
+
return nullptr;
}
@@ -354,13 +364,11 @@ GetThreadInfoInner(pthread_t threadID) {
*/
static thread_info_t *
GetThreadInfo(pthread_t threadID) {
- if (sIsNuwaProcess) {
- REAL(pthread_mutex_lock)(&sThreadCountLock);
- }
+ REAL(pthread_mutex_lock)(&sThreadCountLock);
+
thread_info_t *tinfo = GetThreadInfoInner(threadID);
- if (sIsNuwaProcess) {
- pthread_mutex_unlock(&sThreadCountLock);
- }
+
+ pthread_mutex_unlock(&sThreadCountLock);
return tinfo;
}
@@ -597,24 +605,69 @@ thread_info_cleanup(void *arg) {
pthread_mutex_unlock(&sThreadCountLock);
}
-static void*
-cleaner_thread(void *arg) {
- thread_info_t *tinfo = (thread_info_t *)arg;
- pthread_t *thread = sIsNuwaProcess ? &tinfo->origThreadID
- : &tinfo->recreatedThreadID;
- // Wait until target thread end.
- while (!pthread_kill(*thread, 0)) {
+static void
+EnsureThreadExited(thread_info_t *tinfo) {
+ pid_t thread = sIsNuwaProcess ? tinfo->origNativeThreadID
+ : tinfo->recreatedNativeThreadID;
+ // Wait until the target thread exits. Note that we use tgkill() instead of
+ // pthread_kill() because of:
+ // 1. Use after free inside pthread implementation.
+ // 2. Race due to pthread_t reuse when a thread is created.
+ while (!syscall(__NR_tgkill, getpid(), thread, 0)) {
sched_yield();
}
+}
+
+static void*
+safe_thread_info_cleanup(void *arg)
+{
+ thread_info_t *tinfo = (thread_info_t *)arg;
+
+ // We need to ensure the thread is really dead before cleaning up tinfo.
+ EnsureThreadExited(tinfo);
thread_info_cleanup(tinfo);
+
return nullptr;
}
static void
-thread_cleanup(void *arg) {
+MaybeCleanUpDetachedThread(thread_info_t *tinfo)
+{
+ if (pthread_getattr_np(REAL(pthread_self()), &tinfo->threadAttr)) {
+ return;
+ }
+
+ int detachState = 0;
+ if (pthread_attr_getdetachstate(&tinfo->threadAttr, &detachState) ||
+ detachState == PTHREAD_CREATE_JOINABLE) {
+ // We only clean up tinfo of a detached thread. A joinable thread
+ // will be cleaned up in __wrap_pthread_join().
+ return;
+ }
+
+ // Create a detached thread to safely clean up the current thread.
pthread_t thread;
- REAL(pthread_create)(&thread, nullptr, &cleaner_thread, arg);
- pthread_detach(thread);
+ if (!REAL(pthread_create)(&thread,
+ nullptr,
+ safe_thread_info_cleanup,
+ tinfo)) {
+ pthread_detach(thread);
+ }
+}
+
+static void
+invalidate_thread_info(void *arg) {
+ REAL(pthread_mutex_lock)(&sThreadCountLock);
+
+ // Unlink tinfo from sAllThreads to make it invisible from CUR_THREAD_INFO so
+ // it won't be misused by a newly created thread.
+ thread_info_t *tinfo = (thread_info_t*) arg;
+ tinfo->remove();
+ sExitingThreads.insertBack(tinfo);
+
+ pthread_mutex_unlock(&sThreadCountLock);
+
+ MaybeCleanUpDetachedThread(tinfo);
}
static void *
@@ -630,16 +683,8 @@ _thread_create_startup(void *arg) {
tinfo->origThreadID = REAL(pthread_self)();
tinfo->origNativeThreadID = gettid();
- pthread_cleanup_push(thread_cleanup, tinfo);
-
r = tinfo->startupFunc(tinfo->startupArg);
- if (!sIsNuwaProcess) {
- return r;
- }
-
- pthread_cleanup_pop(1);
-
return r;
}
@@ -670,7 +715,12 @@ thread_create_startup(void *arg) {
abort(); // Did not reserve enough stack space.
}
+ // Get tinfo before invalidating it. Note that we cannot use arg directly here
+ // because thread_recreate_startup() also runs on the same stack area and
+ // could corrupt the value.
thread_info_t *tinfo = CUR_THREAD_INFO;
+ invalidate_thread_info(tinfo);
+
if (!sIsNuwaProcess) {
longjmp(tinfo->retEnv, 1);
@@ -766,7 +816,11 @@ __wrap_pthread_key_create(pthread_key_t *key, void (*destructor)(void*)) {
extern "C" MFBT_API int
__wrap_pthread_key_delete(pthread_key_t key) {
- int rv = REAL(pthread_key_delete)(key);
+ // Don't call pthread_key_delete() for Nuwa-forked processes because bionic's
+ // pthread_key_delete() implementation can touch the thread stack that was
+ // freed in thread_info_cleanup().
+ int rv = sIsNuwaChildProcess ?
+ 0 : REAL(pthread_key_delete)(key);
if (rv != 0) {
return rv;
}
@@ -798,8 +852,23 @@ __wrap_pthread_join(pthread_t thread, void **retval) {
if (tinfo == nullptr) {
return REAL(pthread_join)(thread, retval);
}
- // pthread_join() need to use the real thread ID in the spawned process.
- return REAL(pthread_join)(tinfo->recreatedThreadID, retval);
+
+ pthread_t thread_info_t::*threadIDptr =
+ (sIsNuwaProcess ?
+ &thread_info_t::origThreadID :
+ &thread_info_t::recreatedThreadID);
+
+ // pthread_join() uses the origThreadID or recreatedThreadID depending on
+ // whether we are in Nuwa or forked processes.
+ int rc = REAL(pthread_join)(tinfo->*threadIDptr, retval);
+
+ // Before Android L, bionic wakes up the caller of pthread_join() with
+ // pthread_cond_signal() so the thread can still use the stack for some while.
+ // Call safe_thread_info_cleanup() to destroy tinfo after the thread really
+ // exits.
+ safe_thread_info_cleanup(tinfo);
+
+ return rc;
}
/**
@@ -1643,6 +1712,7 @@ ForkIPCProcess() {
CloseAllProtoSockets(sProtoFdInfos, sProtoFdInfosSize);
} else {
// in the child
+ sIsNuwaChildProcess = true;
if (getenv("MOZ_DEBUG_CHILD_PROCESS")) {
printf("\n\nNUWA CHILDCHILDCHILDCHILD\n debug me @ %d\n\n", getpid());
sleep(30);
diff --git a/services/mobileid/MobileIdentityManager.jsm b/services/mobileid/MobileIdentityManager.jsm
index 339341bbb5f2..cefb6a4a10a9 100644
--- a/services/mobileid/MobileIdentityManager.jsm
+++ b/services/mobileid/MobileIdentityManager.jsm
@@ -56,9 +56,9 @@ XPCOMUtils.defineLazyServiceGetter(this, "Ril",
"@mozilla.org/ril;1",
"nsIRadioInterfaceLayer");
-XPCOMUtils.defineLazyServiceGetter(this, "IccService",
- "@mozilla.org/icc/iccservice;1",
- "nsIIccService");
+XPCOMUtils.defineLazyServiceGetter(this, "IccProvider",
+ "@mozilla.org/ril/content-helper;1",
+ "nsIIccProvider");
XPCOMUtils.defineLazyServiceGetter(this, "MobileConnectionService",
"@mozilla.org/mobileconnection/mobileconnectionservice;1",
@@ -116,11 +116,11 @@ this.MobileIdentityManager = {
return Ril;
},
- get iccService() {
- if (this._iccService) {
- return this._iccService;
+ get iccProvider() {
+ if (this._iccProvider) {
+ return this._iccProvider;
}
- return IccService;
+ return IccProvider;
},
get mobileConnectionService() {
@@ -153,10 +153,8 @@ this.MobileIdentityManager = {
// We don't need to keep listening for changes until we rebuild the
// cache again.
for (let i = 0; i < self._iccInfo.length; i++) {
- let icc = self.iccService.getIccByServiceId(i);
- if (icc) {
- icc.unregisterListener(iccListener);
- }
+ self.iccProvider.unregisterIccMsg(self._iccInfo[i].clientId,
+ iccListener);
}
self._iccInfo = null;
@@ -216,10 +214,7 @@ this.MobileIdentityManager = {
// We need to subscribe to ICC change notifications so we can refresh
// the cache if any change is observed.
- let icc = this.iccService.getIccByServiceId(i);
- if (icc) {
- icc.registerListener(iccListener);
- }
+ this.iccProvider.registerIccMsg(i, iccListener);
}
return this._iccInfo;
diff --git a/services/mobileid/tests/xpcshell/test_mobileid_manager.js b/services/mobileid/tests/xpcshell/test_mobileid_manager.js
index edd3e3d5fb05..cbd8e0a9bb50 100644
--- a/services/mobileid/tests/xpcshell/test_mobileid_manager.js
+++ b/services/mobileid/tests/xpcshell/test_mobileid_manager.js
@@ -1002,19 +1002,13 @@ add_test(function() {
}
};
- MobileIdentityManager._iccService = {
- _iccs: [],
+ MobileIdentityManager._iccProvider = {
_listeners: [],
- getIccByServiceId: function(aClientId) {
- let self = this;
- this_iccs.push({
- registerListener: function(aIccListener) {
- self._listeners.push(aIccListener);
- },
- unregisterListener: function() {
- self._listeners.pop();
- }
- });
+ registerIccMsg: function(aClientId, aIccListener) {
+ this._listeners.push(aIccListener);
+ },
+ unregisterIccMsg: function() {
+ this._listeners.pop();
}
};
@@ -1033,17 +1027,17 @@ add_test(function() {
}
// We should have listeners for each valid icc.
- do_check_eq(MobileIdentityManager._iccService._listeners.length, 2);
+ do_check_eq(MobileIdentityManager._iccProvider._listeners.length, 2);
// We can mock an ICC change event at this point.
- MobileIdentityManager._iccService._listeners[0].notifyIccInfoChanged();
+ MobileIdentityManager._iccProvider._listeners[0].notifyIccInfoChanged();
// After the ICC change event the caches should be null.
do_check_null(MobileIdentityManager._iccInfo);
do_check_null(MobileIdentityManager._iccIds);
// And we should have unregistered all listeners for ICC change events.
- do_check_eq(MobileIdentityManager._iccService._listeners.length, 0);
+ do_check_eq(MobileIdentityManager._iccProvider._listeners.length, 0);
do_test_finished();
run_next_test();
@@ -1110,19 +1104,13 @@ add_test(function() {
}
};
- MobileIdentityManager._iccService = {
- _iccs: [],
+ MobileIdentityManager._iccProvider = {
_listeners: [],
- getIccByServiceId: function(aClientId) {
- let self = this;
- this_iccs.push({
- registerListener: function(aIccListener) {
- self._listeners.push(aIccListener);
- },
- unregisterListener: function() {
- self._listeners.pop();
- }
- });
+ registerIccMsg: function(aClientId, aIccListener) {
+ this._listeners.push(aIccListener);
+ },
+ unregisterIccMsg: function() {
+ this._listeners.pop();
}
};
@@ -1133,7 +1121,7 @@ add_test(function() {
do_check_eq(MobileIdentityManager._iccIds.length, 0);
// We should have listeners for each valid icc.
- do_check_eq(MobileIdentityManager._iccService._listeners.length, 0);
+ do_check_eq(MobileIdentityManager._iccProvider._listeners.length, 0);
do_test_finished();
run_next_test();
diff --git a/testing/docker/tester/Dockerfile b/testing/docker/tester/Dockerfile
index 16d347c72754..9bb828318154 100644
--- a/testing/docker/tester/Dockerfile
+++ b/testing/docker/tester/Dockerfile
@@ -5,6 +5,7 @@ MAINTAINER Jonas Finnemann Jensen
COPY b2g-desktop-config.py /home/worker/b2g-desktop-config.py
COPY dot-config /home/worker/.config
COPY dot-pulse /home/worker/.pulse
+COPY hgrc /home/worker/.hgrc
COPY bin /home/worker/bin
COPY mozharness_configs /home/worker/mozharness_configs
COPY buildprops.json /home/worker/buildprops.json
diff --git a/testing/docker/tester/VERSION b/testing/docker/tester/VERSION
index 3a4036fb450f..53a75d673557 100644
--- a/testing/docker/tester/VERSION
+++ b/testing/docker/tester/VERSION
@@ -1 +1 @@
-0.2.5
+0.2.6
diff --git a/testing/docker/tester/hgrc b/testing/docker/tester/hgrc
new file mode 100644
index 000000000000..9a0681fbf573
--- /dev/null
+++ b/testing/docker/tester/hgrc
@@ -0,0 +1,2 @@
+[extensions]
+share =
diff --git a/testing/taskcluster/tasks/test.yml b/testing/taskcluster/tasks/test.yml
index 144a37c688ef..7d9f0e50c0b8 100644
--- a/testing/taskcluster/tasks/test.yml
+++ b/testing/taskcluster/tasks/test.yml
@@ -16,12 +16,14 @@ task:
- 'queue:define-task:aws-provisioner/test-c4-2xlarge'
- 'queue:create-task:aws-provisioner/test-c4-2xlarge'
- 'docker-worker:cache:tc-vcs'
+ - 'docker-worker:cache:buildshare'
payload:
image: '{{#docker_image}}tester{{/docker_image}}'
maxRunTime: 3600
cache:
tc-vcs: '/home/worker/.tc-vcs'
+ buildshare: '/builds/'
env:
GAIA_HEAD_REPOSITORY: '{{{gaia_head_repository}}}'
GAIA_BASE_REPOSITORY: '{{{gaia_base_repository}}}'