void DispatchStatusChangedEvent(const nsAString& aType, const nsAString& aAddress, bool aStatus) { MOZ_ASSERT(NS_IsMainThread()); InfallibleTArray<BluetoothNamedValue> data; BT_APPEND_NAMED_VALUE(data, "address", nsString(aAddress)); BT_APPEND_NAMED_VALUE(data, "status", aStatus); BluetoothService* bs = BluetoothService::Get(); NS_ENSURE_TRUE_VOID(bs); bs->DistributeSignal(aType, NS_LITERAL_STRING(KEY_ADAPTER), data); }
void GMPCDMProxy::Init(PromiseId aPromiseId, const nsAString& aOrigin, const nsAString& aTopLevelOrigin, const nsAString& aGMPName) { MOZ_ASSERT(NS_IsMainThread()); NS_ENSURE_TRUE_VOID(!mKeys.IsNull()); EME_LOG("GMPCDMProxy::Init (%s, %s)", NS_ConvertUTF16toUTF8(aOrigin).get(), NS_ConvertUTF16toUTF8(aTopLevelOrigin).get()); nsCString pluginVersion; if (!mOwnerThread) { nsCOMPtr<mozIGeckoMediaPluginService> mps = do_GetService("@mozilla.org/gecko-media-plugin-service;1"); if (!mps) { RejectPromise(aPromiseId, NS_ERROR_DOM_INVALID_STATE_ERR, NS_LITERAL_CSTRING("Couldn't get MediaPluginService in GMPCDMProxy::Init")); return; } mps->GetThread(getter_AddRefs(mOwnerThread)); if (!mOwnerThread) { RejectPromise(aPromiseId, NS_ERROR_DOM_INVALID_STATE_ERR, NS_LITERAL_CSTRING("Couldn't get GMP thread GMPCDMProxy::Init")); return; } } if (aGMPName.IsEmpty()) { RejectPromise(aPromiseId, NS_ERROR_DOM_INVALID_STATE_ERR, nsPrintfCString("Unknown GMP for keysystem '%s'", NS_ConvertUTF16toUTF8(mKeySystem).get())); return; } UniquePtr<InitData> data(new InitData()); data->mPromiseId = aPromiseId; data->mOrigin = aOrigin; data->mTopLevelOrigin = aTopLevelOrigin; data->mGMPName = aGMPName; data->mCrashHelper = mCrashHelper; nsCOMPtr<nsIRunnable> task( NewRunnableMethod<UniquePtr<InitData>&&>(this, &GMPCDMProxy::gmp_Init, Move(data))); mOwnerThread->Dispatch(task, NS_DISPATCH_NORMAL); }
void KeyboardEvent::InitKeyEvent(const nsAString& aType, bool aCanBubble, bool aCancelable, nsGlobalWindowInner* aView, bool aCtrlKey, bool aAltKey, bool aShiftKey, bool aMetaKey, uint32_t aKeyCode, uint32_t aCharCode) { NS_ENSURE_TRUE_VOID(!mEvent->mFlags.mIsBeingDispatched); UIEvent::InitUIEvent(aType, aCanBubble, aCancelable, aView, 0); WidgetKeyboardEvent* keyEvent = mEvent->AsKeyboardEvent(); keyEvent->InitBasicModifiers(aCtrlKey, aAltKey, aShiftKey, aMetaKey); keyEvent->mKeyCode = aKeyCode; keyEvent->mCharCode = aCharCode; }
void VideoTrackEncoder::CreateMutedFrame(nsTArray<uint8_t>* aOutputBuffer) { NS_ENSURE_TRUE_VOID(aOutputBuffer); // Supports YUV420 image format only. int yPlaneLen = mFrameWidth * mFrameHeight; int cbcrPlaneLen = yPlaneLen / 2; int frameLen = yPlaneLen + cbcrPlaneLen; aOutputBuffer->SetLength(frameLen); // Fill Y plane. memset(aOutputBuffer->Elements(), 0x10, yPlaneLen); // Fill Cb/Cr planes. memset(aOutputBuffer->Elements() + yPlaneLen, 0x80, cbcrPlaneLen); }
void nsBrowserElement::RemoveNextPaintListener(BrowserElementNextPaintEventCallback& aListener, ErrorResult& aRv) { NS_ENSURE_TRUE_VOID(IsBrowserElementOrThrow(aRv)); CallbackObjectHolder<BrowserElementNextPaintEventCallback, nsIBrowserElementNextPaintListener> holder(&aListener); nsCOMPtr<nsIBrowserElementNextPaintListener> listener = holder.ToXPCOMCallback(); nsresult rv = mBrowserElementAPI->RemoveNextPaintListener(listener); if (NS_WARN_IF(NS_FAILED(rv))) { aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); } }
void ThreadStackHelper::GetNativeStack(Stack& aStack) { #ifdef MOZ_THREADSTACKHELPER_NATIVE ThreadContext context; context.mStack = MakeUnique<uint8_t[]>(ThreadContext::kMaxStackSize); ScopedSetPtr<ThreadContext> contextPtr(mContextToFill, &context); // Get pseudostack first and fill the thread context. GetStack(aStack); NS_ENSURE_TRUE_VOID(context.mValid); // TODO: walk the saved stack frames. #endif // MOZ_THREADSTACKHELPER_NATIVE }
void GMPCDMProxy::RemoveSession(const nsAString& aSessionId, PromiseId aPromiseId) { MOZ_ASSERT(NS_IsMainThread()); NS_ENSURE_TRUE_VOID(!mKeys.IsNull()); UniquePtr<SessionOpData> data(new SessionOpData()); data->mPromiseId = aPromiseId; data->mSessionId = NS_ConvertUTF16toUTF8(aSessionId); nsCOMPtr<nsIRunnable> task( NewRunnableMethod<UniquePtr<SessionOpData>&&>(this, &GMPCDMProxy::gmp_RemoveSession, Move(data))); mOwnerThread->Dispatch(task, NS_DISPATCH_NORMAL); }
void CDMProxy::UpdateSession(const nsAString& aSessionId, PromiseId aPromiseId, nsTArray<uint8_t>& aResponse) { MOZ_ASSERT(NS_IsMainThread()); MOZ_ASSERT(mGMPThread); NS_ENSURE_TRUE_VOID(!mKeys.IsNull()); nsAutoPtr<UpdateSessionData> data(new UpdateSessionData()); data->mPromiseId = aPromiseId; data->mSessionId = NS_ConvertUTF16toUTF8(aSessionId); data->mResponse = Move(aResponse); nsCOMPtr<nsIRunnable> task( NewRunnableMethod<nsAutoPtr<UpdateSessionData>>(this, &CDMProxy::gmp_UpdateSession, data)); mGMPThread->Dispatch(task, NS_DISPATCH_NORMAL); }
void StorageEvent::InitStorageEvent(const nsAString& aType, bool aCanBubble, bool aCancelable, const nsAString& aKey, const nsAString& aOldValue, const nsAString& aNewValue, const nsAString& aURL, DOMStorage* aStorageArea) { NS_ENSURE_TRUE_VOID(!mEvent->mFlags.mIsBeingDispatched); InitEvent(aType, aCanBubble, aCancelable); mKey = aKey; mOldValue = aOldValue; mNewValue = aNewValue; mUrl = aURL; mStorageArea = aStorageArea; }
void CDMProxy::UpdateSession(const nsAString& aSessionId, PromiseId aPromiseId, const Uint8Array& aResponse) { MOZ_ASSERT(NS_IsMainThread()); MOZ_ASSERT(mGMPThread); NS_ENSURE_TRUE_VOID(!mKeys.IsNull()); nsAutoPtr<UpdateSessionData> data(new UpdateSessionData()); data->mPromiseId = aPromiseId; data->mSessionId = NS_ConvertUTF16toUTF8(aSessionId); data->mResponse.AppendElements(aResponse.Data(), aResponse.Length()); nsRefPtr<nsIRunnable> task( NS_NewRunnableMethodWithArg<nsAutoPtr<UpdateSessionData>>(this, &CDMProxy::gmp_UpdateSession, data)); mGMPThread->Dispatch(task, NS_DISPATCH_NORMAL); }
void BluetoothProfileController::SetupProfiles(bool aAssignServiceClass) { MOZ_ASSERT(NS_IsMainThread()); /** * When a service class is assigned, only its corresponding profile is put * into array. */ if (aAssignServiceClass) { AddProfileWithServiceClass(mTarget.service); return; } // For a disconnect request, all connected profiles are put into array. if (!mConnect) { AddProfile(BluetoothHidManager::Get(), true); AddProfile(BluetoothA2dpManager::Get(), true); AddProfile(BluetoothHfpManager::Get(), true); return; } /** * For a connect request, put multiple profiles into array and connect to * all of them sequencely. */ bool hasAudio = HAS_AUDIO(mTarget.cod); bool hasRendering = HAS_RENDERING(mTarget.cod); bool isPeripheral = IS_PERIPHERAL(mTarget.cod); NS_ENSURE_TRUE_VOID(hasAudio || hasRendering || isPeripheral); /** * Connect to HFP/HSP first. Then, connect A2DP if Rendering bit is set. */ if (hasAudio) { AddProfile(BluetoothHfpManager::Get()); } if (hasRendering) { AddProfile(BluetoothA2dpManager::Get()); } if (isPeripheral) { AddProfile(BluetoothHidManager::Get()); } }
void nsBrowserElement::InitBrowserElementAPI() { RefPtr<nsFrameLoader> frameLoader = GetFrameLoader(); NS_ENSURE_TRUE_VOID(frameLoader); if (!frameLoader->OwnerIsMozBrowserFrame()) { return; } if (!mBrowserElementAPI) { mBrowserElementAPI = do_CreateInstance("@mozilla.org/dom/browser-element-api;1"); if (NS_WARN_IF(!mBrowserElementAPI)) { return; } } mBrowserElementAPI->SetFrameLoader(frameLoader); }
void CDMProxy::RemoveSession(const nsAString& aSessionId, PromiseId aPromiseId) { MOZ_ASSERT(NS_IsMainThread()); NS_ENSURE_TRUE_VOID(!mKeys.IsNull()); { CDMCaps::AutoLock caps(Capabilites()); caps.DropKeysForSession(aSessionId); } nsAutoPtr<SessionOpData> data(new SessionOpData()); data->mPromiseId = aPromiseId; data->mSessionId = NS_ConvertUTF16toUTF8(aSessionId); nsRefPtr<nsIRunnable> task( NS_NewRunnableMethodWithArg<nsAutoPtr<SessionOpData>>(this, &CDMProxy::gmp_RemoveSession, data)); mGMPThread->Dispatch(task, NS_DISPATCH_NORMAL); }
void CDMProxy::UpdateSession(const nsAString& aSessionId, PromiseId aPromiseId, const Uint8Array& aResponse) { MOZ_ASSERT(NS_IsMainThread()); MOZ_ASSERT(mGMPThread); NS_ENSURE_TRUE_VOID(!mKeys.IsNull()); // TODO: Dispatch task to GMPThread to call CDM UpdateSession via IPC. nsRefPtr<dom::MediaKeySession> session(mKeys->GetSession(aSessionId)); nsAutoCString str(NS_LITERAL_CSTRING("Update_")); str.AppendInt(sUpdateCount++); nsTArray<uint8_t> msg; msg.AppendElements(str.get(), str.Length()); session->DispatchKeyMessage(msg, NS_LITERAL_STRING("http://bogus.url")); ResolvePromise(aPromiseId); }
void nsBrowserElement::FindNext(BrowserFindDirection aDirection, ErrorResult& aRv) { NS_ENSURE_TRUE_VOID(IsBrowserElementOrThrow(aRv)); uint32_t direction; if (aDirection == BrowserFindDirection::Backward) { direction = nsIBrowserElementAPI::FIND_BACKWARD; } else { direction = nsIBrowserElementAPI::FIND_FORWARD; } nsresult rv = mBrowserElementAPI->FindNext(direction); if (NS_FAILED(rv)) { aRv.Throw(rv); } }
void CDMProxy::CloseSession(const nsAString& aSessionId, PromiseId aPromiseId) { MOZ_ASSERT(NS_IsMainThread()); NS_ENSURE_TRUE_VOID(!mKeys.IsNull()); // TODO: Dispatch task to GMPThread to call CDM CloseSession via IPC. nsRefPtr<dom::MediaKeySession> session(mKeys->GetSession(aSessionId)); // Pretend that the CDM actually does close the session... // "...the [MediaKeySession's] closed attribute promise is resolved // when the session is closed." session->OnClosed(); // "The promise is resolved when the request has been processed." ResolvePromise(aPromiseId); }
void DispatchStatusChangedEvent(const nsAString& aType, const nsAString& aAddress, bool aStatus) { MOZ_ASSERT(NS_IsMainThread()); InfallibleTArray<BluetoothNamedValue> data; data.AppendElement( BluetoothNamedValue(NS_LITERAL_STRING("address"), nsString(aAddress))); data.AppendElement( BluetoothNamedValue(NS_LITERAL_STRING("status"), aStatus)); BluetoothSignal signal(nsString(aType), NS_LITERAL_STRING(KEY_ADAPTER), data); BluetoothService* bs = BluetoothService::Get(); NS_ENSURE_TRUE_VOID(bs); bs->DistributeSignal(signal); }
void MediaOmxReader::NotifyDataArrivedInternal() { MOZ_ASSERT(OnTaskQueue()); RefPtr<AbstractMediaDecoder> decoder = SafeGetDecoder(); if (!decoder) { // reader has shut down return; } if (HasVideo()) { return; } if (!mMP3FrameParser.NeedsData()) { return; } AutoPinned<MediaResource> resource(mDecoder->GetResource()); MediaByteRangeSet byteRanges; nsresult rv = resource->GetCachedRanges(byteRanges); if (NS_FAILED(rv)) { return; } if (byteRanges == mLastCachedRanges) { return; } MediaByteRangeSet intervals = byteRanges - mLastCachedRanges; mLastCachedRanges = byteRanges; for (const auto& interval : intervals) { RefPtr<MediaByteBuffer> bytes = resource->MediaReadAt(interval.mStart, interval.Length()); NS_ENSURE_TRUE_VOID(bytes); mMP3FrameParser.Parse(bytes->Elements(), interval.Length(), interval.mStart); if (!mMP3FrameParser.IsMP3()) { return; } } int64_t duration = mMP3FrameParser.GetDuration(); if (duration != mLastParserDuration) { mLastParserDuration = duration; decoder->DispatchUpdateEstimatedMediaDuration(mLastParserDuration); } }
void IDBTransaction::RollbackSavepoint() { NS_PRECONDITION(!NS_IsMainThread(), "Wrong thread!"); NS_PRECONDITION(mConnection, "No connection!"); NS_ASSERTION(mSavepointCount == 1, "Mismatch!"); mSavepointCount = 0; nsCOMPtr<mozIStorageStatement> stmt = GetCachedStatement(NS_LITERAL_CSTRING( "ROLLBACK TO SAVEPOINT " SAVEPOINT_NAME )); NS_ENSURE_TRUE_VOID(stmt); mozStorageStatementScoper scoper(stmt); nsresult rv = stmt->Execute(); NS_ENSURE_SUCCESS_VOID(rv); }
BluetoothDevice::BluetoothDevice(nsPIDOMWindow* aWindow, const BluetoothValue& aValue) : DOMEventTargetHelper(aWindow) , mJsUuids(nullptr) , mJsServices(nullptr) , mIsRooted(false) { MOZ_ASSERT(aWindow); MOZ_ASSERT(IsDOMBinding()); const InfallibleTArray<BluetoothNamedValue>& values = aValue.get_ArrayOfBluetoothNamedValue(); for (uint32_t i = 0; i < values.Length(); ++i) { SetPropertyByValue(values[i]); } BluetoothService* bs = BluetoothService::Get(); NS_ENSURE_TRUE_VOID(bs); bs->RegisterBluetoothSignalHandler(mAddress, this); }
void nsBrowserElement::FindAll(const nsAString& aSearchString, BrowserFindCaseSensitivity aCaseSensitivity, ErrorResult& aRv) { NS_ENSURE_TRUE_VOID(IsBrowserElementOrThrow(aRv)); uint32_t caseSensitivity; if (aCaseSensitivity == BrowserFindCaseSensitivity::Case_insensitive) { caseSensitivity = nsIBrowserElementAPI::FIND_CASE_INSENSITIVE; } else { caseSensitivity = nsIBrowserElementAPI::FIND_CASE_SENSITIVE; } nsresult rv = mBrowserElementAPI->FindAll(aSearchString, caseSensitivity); if (NS_FAILED(rv)) { aRv.Throw(rv); } }
void TextEditRules::WillInsert(Selection& aSelection, bool* aCancel) { MOZ_ASSERT(aCancel); if (IsReadonly() || IsDisabled()) { *aCancel = true; return; } // initialize out param *aCancel = false; // check for the magic content node and delete it if it exists if (mBogusNode) { NS_ENSURE_TRUE_VOID(mTextEditor); mTextEditor->DeleteNode(mBogusNode); mBogusNode = nullptr; } }
void nsBrowserElement::SendTouchEvent(const nsAString& aType, const Sequence<uint32_t>& aIdentifiers, const Sequence<int32_t>& aXs, const Sequence<int32_t>& aYs, const Sequence<uint32_t>& aRxs, const Sequence<uint32_t>& aRys, const Sequence<float>& aRotationAngles, const Sequence<float>& aForces, uint32_t aCount, uint32_t aModifiers, ErrorResult& aRv) { NS_ENSURE_TRUE_VOID(IsBrowserElementOrThrow(aRv)); if (aIdentifiers.Length() != aCount || aXs.Length() != aCount || aYs.Length() != aCount || aRxs.Length() != aCount || aRys.Length() != aCount || aRotationAngles.Length() != aCount || aForces.Length() != aCount) { aRv.Throw(NS_ERROR_DOM_INVALID_ACCESS_ERR); return; } nsresult rv = mBrowserElementAPI->SendTouchEvent(aType, aIdentifiers.Elements(), aXs.Elements(), aYs.Elements(), aRxs.Elements(), aRys.Elements(), aRotationAngles.Elements(), aForces.Elements(), aCount, aModifiers); if (NS_WARN_IF(NS_FAILED(rv))) { aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); } }
TextTrackManager::TextTrackManager(HTMLMediaElement *aMediaElement) : mMediaElement(aMediaElement) , performedTrackSelection(false) { nsISupports* parentObject = mMediaElement->OwnerDoc()->GetParentObject(); NS_ENSURE_TRUE_VOID(parentObject); nsCOMPtr<nsPIDOMWindow> window = do_QueryInterface(parentObject); mNewCues = new TextTrackCueList(window); mTextTracks = new TextTrackList(window, this); mPendingTextTracks = new TextTrackList(window, this); if (!sParserWrapper) { nsCOMPtr<nsIWebVTTParserWrapper> parserWrapper = do_CreateInstance(NS_WEBVTTPARSERWRAPPER_CONTRACTID); sParserWrapper = parserWrapper; ClearOnShutdown(&sParserWrapper); } }
void HTMLVideoElement::WakeLockUpdate() { bool hidden = OwnerDoc()->Hidden(); if (mScreenWakeLock && (mPaused || hidden)) { mScreenWakeLock->Unlock(); mScreenWakeLock = nullptr; return; } if (!mScreenWakeLock && !mPaused && !hidden) { nsCOMPtr<nsIPowerManagerService> pmService = do_GetService(POWERMANAGERSERVICE_CONTRACTID); NS_ENSURE_TRUE_VOID(pmService); pmService->NewWakeLock(NS_LITERAL_STRING("screen"), OwnerDoc()->GetWindow(), getter_AddRefs(mScreenWakeLock)); } }
BluetoothDevice::BluetoothDevice(nsPIDOMWindow* aWindow, const nsAString& aAdapterPath, const BluetoothValue& aValue) : DOMEventTargetHelper(aWindow) , BluetoothPropertyContainer(BluetoothObjectType::TYPE_DEVICE) , mJsUuids(nullptr) , mJsServices(nullptr) , mAdapterPath(aAdapterPath) , mIsRooted(false) { MOZ_ASSERT(aWindow); const InfallibleTArray<BluetoothNamedValue>& values = aValue.get_ArrayOfBluetoothNamedValue(); for (uint32_t i = 0; i < values.Length(); ++i) { SetPropertyByValue(values[i]); } BluetoothService* bs = BluetoothService::Get(); NS_ENSURE_TRUE_VOID(bs); bs->RegisterBluetoothSignalHandler(mAddress, this); }
/** * BluetoothRilListener */ BluetoothRilListener::BluetoothRilListener() { nsCOMPtr<nsIMobileConnectionService> service = do_GetService(NS_MOBILE_CONNECTION_SERVICE_CONTRACTID); NS_ENSURE_TRUE_VOID(service); // Query number of total clients (sim slots) uint32_t numItems = 0; if (NS_SUCCEEDED(service->GetNumItems(&numItems))) { // Init MobileConnectionListener array and IccInfoListener for (uint32_t i = 0; i < numItems; i++) { mMobileConnListeners.AppendElement(new MobileConnectionListener(i)); } } mTelephonyListener = new TelephonyListener(); mIccListener = new IccListener(); mIccListener->SetOwner(this); // Probe for available client SelectClient(); }
void nsBrowserElement::SendMouseEvent(const nsAString& aType, uint32_t aX, uint32_t aY, uint32_t aButton, uint32_t aClickCount, uint32_t aModifiers, ErrorResult& aRv) { NS_ENSURE_TRUE_VOID(IsBrowserElementOrThrow(aRv)); nsresult rv = mBrowserElementAPI->SendMouseEvent(aType, aX, aY, aButton, aClickCount, aModifiers); if (NS_WARN_IF(NS_FAILED(rv))) { aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); } }
/** * BluetoothRilListener */ BluetoothRilListener::BluetoothRilListener() { // Query number of total clients (sim slots) uint32_t numOfClients; nsCOMPtr<nsIRadioInterfaceLayer> radioInterfaceLayer = do_GetService(NS_RADIOINTERFACELAYER_CONTRACTID); NS_ENSURE_TRUE_VOID(radioInterfaceLayer); radioInterfaceLayer->GetNumRadioInterfaces(&numOfClients); // Init MobileConnectionListener array and IccInfoListener for (uint32_t i = 0; i < numOfClients; i++) { mMobileConnListeners.AppendElement(new MobileConnectionListener(i)); } mTelephonyListener = new TelephonyListener(); mIccListener = new IccListener(); mIccListener->SetOwner(this); // Probe for available client SelectClient(); }
void MouseEvent::InitMouseEvent(const nsAString& aType, bool aCanBubble, bool aCancelable, nsGlobalWindow* aView, int32_t aDetail, int32_t aScreenX, int32_t aScreenY, int32_t aClientX, int32_t aClientY, int16_t aButton, EventTarget* aRelatedTarget, const nsAString& aModifiersList) { NS_ENSURE_TRUE_VOID(!mEvent->mFlags.mIsBeingDispatched); Modifiers modifiers = ComputeModifierState(aModifiersList); InitMouseEvent(aType, aCanBubble, aCancelable, aView, aDetail, aScreenX, aScreenY, aClientX, aClientY, (modifiers & MODIFIER_CONTROL) != 0, (modifiers & MODIFIER_ALT) != 0, (modifiers & MODIFIER_SHIFT) != 0, (modifiers & MODIFIER_META) != 0, aButton, aRelatedTarget); switch(mEvent->mClass) { case eMouseEventClass: case eMouseScrollEventClass: case eWheelEventClass: case eDragEventClass: case ePointerEventClass: case eSimpleGestureEventClass: mEvent->AsInputEvent()->mModifiers = modifiers; return; default: MOZ_CRASH("There is no space to store the modifiers"); } }