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}}}'