From 82d99fe6260a79cdf91866b0bd1cdc5a206042aa Mon Sep 17 00:00:00 2001 From: Vicamo Yang Date: Fri, 26 Sep 2014 13:00:25 +0800 Subject: [PATCH] Bug 833229 - 3.f/4: voicemail factory class. r=smaug --- dom/voicemail/Voicemail.cpp | 25 +++++++++++++++++++ .../gonk/nsIGonkVoicemailService.idl | 5 ++++ dom/voicemail/nsIVoicemailService.idl | 7 ++++++ layout/build/nsLayoutModule.cpp | 6 +++++ 4 files changed, 43 insertions(+) diff --git a/dom/voicemail/Voicemail.cpp b/dom/voicemail/Voicemail.cpp index 83a1836fe3d..bf79591cd64 100644 --- a/dom/voicemail/Voicemail.cpp +++ b/dom/voicemail/Voicemail.cpp @@ -15,6 +15,13 @@ #include "nsContentUtils.h" #include "nsServiceManagerUtils.h" +// Service instantiation +#include "ipc/VoicemailIPCService.h" +#if defined(MOZ_WIDGET_GONK) && defined(MOZ_B2G_RIL) +#include "nsIGonkVoicemailService.h" +#endif +#include "nsXULAppAPI.h" // For XRE_GetProcessType() + using namespace mozilla::dom; using mozilla::ErrorResult; @@ -237,3 +244,21 @@ Voicemail::NotifyStatusChanged(nsIVoicemailProvider* aProvider) MozVoicemailEvent::Constructor(this, NS_LITERAL_STRING("statuschanged"), init); return DispatchTrustedEvent(event); } + +already_AddRefed +NS_CreateVoicemailService() +{ + nsCOMPtr service; + + if (XRE_GetProcessType() == GeckoProcessType_Content) { + service = new mozilla::dom::voicemail::VoicemailIPCService(); + } else { +#if defined(MOZ_B2G_RIL) +#if defined(MOZ_WIDGET_GONK) + service = do_GetService(GONK_VOICEMAIL_SERVICE_CONTRACTID); +#endif // MOZ_WIDGET_GONK +#endif // MOZ_B2G_RIL + } + + return service.forget(); +} diff --git a/dom/voicemail/gonk/nsIGonkVoicemailService.idl b/dom/voicemail/gonk/nsIGonkVoicemailService.idl index f5e35c59da8..1f24997c273 100644 --- a/dom/voicemail/gonk/nsIGonkVoicemailService.idl +++ b/dom/voicemail/gonk/nsIGonkVoicemailService.idl @@ -4,6 +4,11 @@ #include "nsIVoicemailService.idl" +%{C++ +#define GONK_VOICEMAIL_SERVICE_CONTRACTID \ + "@mozilla.org/voicemail/gonkvoicemailservice;1" +%} + [scriptable, uuid(d21dbc55-f540-417d-aa3e-9e890764e957)] interface nsIGonkVoicemailService : nsIVoicemailService { diff --git a/dom/voicemail/nsIVoicemailService.idl b/dom/voicemail/nsIVoicemailService.idl index bb922200ef3..844a41f5677 100644 --- a/dom/voicemail/nsIVoicemailService.idl +++ b/dom/voicemail/nsIVoicemailService.idl @@ -49,6 +49,13 @@ interface nsIVoicemailService : nsISupports void unregisterListener(in nsIVoicemailListener listener); }; +%{C++ +template struct already_AddRefed; + +already_AddRefed +NS_CreateVoicemailService(); +%} + [scriptable, uuid(a0bc19a2-3216-4f3f-89d3-8976a48cb829)] interface nsIVoicemailProvider : nsISupports { diff --git a/layout/build/nsLayoutModule.cpp b/layout/build/nsLayoutModule.cpp index 09e2e3dda38..c8f163caa79 100644 --- a/layout/build/nsLayoutModule.cpp +++ b/layout/build/nsLayoutModule.cpp @@ -234,6 +234,7 @@ static void Shutdown(); #include "StreamingProtocolService.h" #include "nsITelephonyService.h" +#include "nsIVoicemailService.h" #ifdef MOZ_WIDGET_GONK #include "GonkGPSGeolocationProvider.h" @@ -352,6 +353,8 @@ NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIMobileConnectionService, NS_CreateMobileConnectionService) NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsITelephonyService, NS_CreateTelephonyService) +NS_GENERIC_FACTORY_SINGLETON_CONSTRUCTOR(nsIVoicemailService, + NS_CreateVoicemailService) //----------------------------------------------------------------------------- @@ -790,6 +793,7 @@ NS_DEFINE_NAMED_CID(NS_SYNTHVOICEREGISTRY_CID); NS_DEFINE_NAMED_CID(NS_ACCESSIBILITY_SERVICE_CID); #endif NS_DEFINE_NAMED_CID(TELEPHONY_SERVICE_CID); +NS_DEFINE_NAMED_CID(NS_VOICEMAIL_SERVICE_CID); NS_DEFINE_NAMED_CID(GECKO_MEDIA_PLUGIN_SERVICE_CID); @@ -1079,6 +1083,7 @@ static const mozilla::Module::CIDEntry kLayoutCIDs[] = { #endif { &kTELEPHONY_SERVICE_CID, false, nullptr, nsITelephonyServiceConstructor }, { &kNS_MOBILE_CONNECTION_SERVICE_CID, false, NULL, nsIMobileConnectionServiceConstructor }, + { &kNS_VOICEMAIL_SERVICE_CID, false, nullptr, nsIVoicemailServiceConstructor }, { nullptr } }; @@ -1237,6 +1242,7 @@ static const mozilla::Module::ContractIDEntry kLayoutContracts[] = { { TELEPHONY_SERVICE_CONTRACTID, &kTELEPHONY_SERVICE_CID }, { "@mozilla.org/gecko-media-plugin-service;1", &kGECKO_MEDIA_PLUGIN_SERVICE_CID }, { NS_MOBILE_CONNECTION_SERVICE_CONTRACTID, &kNS_MOBILE_CONNECTION_SERVICE_CID }, + { NS_VOICEMAIL_SERVICE_CONTRACTID, &kNS_VOICEMAIL_SERVICE_CID }, { nullptr } };