mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-22 10:27:03 +00:00
Bug 792471 - Fix crash in navigator.mozSms when child process doesn't have 'sms' permission. r=mounir
This commit is contained in:
parent
16a62a6605
commit
cb4376662b
@ -1113,36 +1113,16 @@ Navigator::RequestWakeLock(const nsAString &aTopic, nsIDOMMozWakeLock **aWakeLoc
|
||||
// Navigator::nsIDOMNavigatorSms
|
||||
//*****************************************************************************
|
||||
|
||||
bool
|
||||
Navigator::IsSmsSupported() const
|
||||
{
|
||||
#ifdef MOZ_WEBSMS_BACKEND
|
||||
nsCOMPtr<nsISmsService> smsService = do_GetService(SMS_SERVICE_CONTRACTID);
|
||||
NS_ENSURE_TRUE(smsService, false);
|
||||
|
||||
bool result = false;
|
||||
smsService->HasSupport(&result);
|
||||
|
||||
return result;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
Navigator::GetMozSms(nsIDOMMozSmsManager** aSmsManager)
|
||||
{
|
||||
*aSmsManager = nullptr;
|
||||
|
||||
if (!mSmsManager) {
|
||||
if (!IsSmsSupported()) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsPIDOMWindow> window = do_QueryReferent(mWindow);
|
||||
NS_ENSURE_TRUE(window && window->GetDocShell(), NS_OK);
|
||||
|
||||
mSmsManager = SmsManager::CheckPermissionAndCreateInstance(window);
|
||||
mSmsManager = SmsManager::CreateInstanceIfAllowed(window);
|
||||
NS_ENSURE_TRUE(mSmsManager, NS_OK);
|
||||
}
|
||||
|
||||
|
@ -162,8 +162,6 @@ public:
|
||||
NS_DECL_NSIDOMNAVIGATORCAMERA
|
||||
|
||||
private:
|
||||
bool IsSmsSupported() const;
|
||||
|
||||
nsRefPtr<nsMimeTypeArray> mMimeTypes;
|
||||
nsRefPtr<nsPluginArray> mPlugins;
|
||||
nsRefPtr<nsGeolocation> mGeolocation;
|
||||
|
@ -60,10 +60,14 @@ NS_IMPL_EVENT_HANDLER(SmsManager, sent)
|
||||
NS_IMPL_EVENT_HANDLER(SmsManager, delivered)
|
||||
|
||||
/* static */already_AddRefed<SmsManager>
|
||||
SmsManager::CheckPermissionAndCreateInstance(nsPIDOMWindow* aWindow)
|
||||
SmsManager::CreateInstanceIfAllowed(nsPIDOMWindow* aWindow)
|
||||
{
|
||||
NS_ASSERTION(aWindow, "Null pointer!");
|
||||
|
||||
#ifndef MOZ_WEBSMS_BACKEND
|
||||
return nullptr;
|
||||
#endif
|
||||
|
||||
// First of all, the general pref has to be turned on.
|
||||
bool enabled = false;
|
||||
Preferences::GetBool("dom.sms.enabled", &enabled);
|
||||
@ -80,6 +84,16 @@ SmsManager::CheckPermissionAndCreateInstance(nsPIDOMWindow* aWindow)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// Check the Sms Service:
|
||||
nsCOMPtr<nsISmsService> smsService = do_GetService(SMS_SERVICE_CONTRACTID);
|
||||
NS_ENSURE_TRUE(smsService, nullptr);
|
||||
|
||||
bool result = false;
|
||||
smsService->HasSupport(&result);
|
||||
if (!result) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
nsRefPtr<SmsManager> smsMgr = new SmsManager();
|
||||
smsMgr->Init(aWindow);
|
||||
|
||||
|
@ -31,7 +31,7 @@ public:
|
||||
nsDOMEventTargetHelper)
|
||||
|
||||
static already_AddRefed<SmsManager>
|
||||
CheckPermissionAndCreateInstance(nsPIDOMWindow *aWindow);
|
||||
CreateInstanceIfAllowed(nsPIDOMWindow *aWindow);
|
||||
|
||||
void Init(nsPIDOMWindow *aWindow);
|
||||
void Shutdown();
|
||||
|
Loading…
x
Reference in New Issue
Block a user