bool SmsRequestParent::DoRequest(const SendMessageRequest& aRequest) { switch(aRequest.type()) { case SendMessageRequest::TSendSmsMessageRequest: { nsCOMPtr<nsISmsService> smsService = do_GetService(SMS_SERVICE_CONTRACTID); NS_ENSURE_TRUE(smsService, true); const SendSmsMessageRequest &req = aRequest.get_SendSmsMessageRequest(); smsService->Send(req.serviceId(), req.number(), req.message(), req.silent(), this); } break; case SendMessageRequest::TSendMmsMessageRequest: { nsCOMPtr<nsIMmsService> mmsService = do_GetService(MMS_SERVICE_CONTRACTID); NS_ENSURE_TRUE(mmsService, true); AutoJSContext cx; JS::Rooted<JS::Value> params(cx); const SendMmsMessageRequest &req = aRequest.get_SendMmsMessageRequest(); if (!GetParamsFromSendMmsMessageRequest(cx, req, params.address())) { NS_WARNING("SmsRequestParent: Fail to build MMS params."); return true; } mmsService->Send(req.serviceId(), params, this); } break; default: MOZ_CRASH("Unknown type of SendMessageRequest!"); } return true; }
bool SmsRequestParent::DoRequest(const SendMessageRequest& aRequest) { switch(aRequest.type()) { case SendMessageRequest::TSendSmsMessageRequest: { nsCOMPtr<nsISmsService> smsService = do_GetService(SMS_SERVICE_CONTRACTID); NS_ENSURE_TRUE(smsService, true); const SendSmsMessageRequest &data = aRequest.get_SendSmsMessageRequest(); smsService->Send(data.number(), data.message(), this); } break; case SendMessageRequest::TSendMmsMessageRequest: { nsCOMPtr<nsIMmsService> mmsService = do_GetService(MMS_SERVICE_CONTRACTID); NS_ENSURE_TRUE(mmsService, true); JS::Value params; JSContext* cx = nsContentUtils::GetSafeJSContext(); if (!GetParamsFromSendMmsMessageRequest( cx, aRequest.get_SendMmsMessageRequest(), ¶ms)) { NS_WARNING("SmsRequestParent: Fail to build MMS params."); return true; } mmsService->Send(params, this); } break; default: MOZ_NOT_REACHED("Unknown type of SendMessageRequest!"); return false; } return true; }
bool SmsRequestParent::DoRequest(const SendMessageRequest& aRequest) { switch(aRequest.type()) { case SendMessageRequest::TSendSmsMessageRequest: { nsCOMPtr<nsISmsService> smsService = do_GetService(SMS_SERVICE_CONTRACTID); NS_ENSURE_TRUE(smsService, true); const SendSmsMessageRequest &req = aRequest.get_SendSmsMessageRequest(); smsService->Send(req.serviceId(), req.number(), req.message(), req.silent(), this); } break; case SendMessageRequest::TSendMmsMessageRequest: { nsCOMPtr<nsIMmsService> mmsService = do_GetService(MMS_SERVICE_CONTRACTID); NS_ENSURE_TRUE(mmsService, true); // There are cases (see bug 981202) where this is called with no JS on the // stack. And since mmsService might be JS-Implemented, we need to pass a // jsval to ::Send. Only system code should be looking at the result here, // so we just create it in the System-Principaled Junk Scope. AutoJSContext cx; JSAutoCompartment ac(cx, xpc::GetJunkScope()); JS::Rooted<JS::Value> params(cx); const SendMmsMessageRequest &req = aRequest.get_SendMmsMessageRequest(); if (!GetParamsFromSendMmsMessageRequest(cx, req, params.address())) { NS_WARNING("SmsRequestParent: Fail to build MMS params."); return true; } mmsService->Send(req.serviceId(), params, this); } break; default: MOZ_CRASH("Unknown type of SendMessageRequest!"); } return true; }