void ScreenOrientation::Notify(const hal::ScreenConfiguration& aConfiguration) { if (ShouldResistFingerprinting()) { return; } nsIDocument* doc = GetResponsibleDocument(); if (!doc) { return; } ScreenOrientationInternal orientation = aConfiguration.orientation(); if (orientation != eScreenOrientation_PortraitPrimary && orientation != eScreenOrientation_PortraitSecondary && orientation != eScreenOrientation_LandscapePrimary && orientation != eScreenOrientation_LandscapeSecondary) { // The platform may notify of some other values from // an orientation lock, but we only care about real // changes to screen orientation which result in one of // the values we care about. return; } OrientationType previousOrientation = mType; mAngle = aConfiguration.angle(); mType = InternalOrientationToType(orientation); DebugOnly<nsresult> rv; if (mScreen && mType != previousOrientation) { // Use of mozorientationchange is deprecated. rv = mScreen->DispatchTrustedEvent(NS_LITERAL_STRING("mozorientationchange")); NS_WARNING_ASSERTION(NS_SUCCEEDED(rv), "DispatchTrustedEvent failed"); } if (doc->Hidden() && !mVisibleListener) { mVisibleListener = new VisibleEventListener(); rv = doc->AddSystemEventListener(NS_LITERAL_STRING("visibilitychange"), mVisibleListener, /* useCapture = */ true); NS_WARNING_ASSERTION(NS_SUCCEEDED(rv), "AddSystemEventListener failed"); return; } if (mType != doc->CurrentOrientationType()) { doc->SetCurrentOrientation(mType, mAngle); Promise* pendingPromise = doc->GetOrientationPendingPromise(); if (pendingPromise) { pendingPromise->MaybeResolveWithUndefined(); doc->SetOrientationPendingPromise(nullptr); } nsCOMPtr<nsIRunnable> runnable = NewRunnableMethod(this, &ScreenOrientation::DispatchChangeEvent); rv = NS_DispatchToMainThread(runnable); NS_WARNING_ASSERTION(NS_SUCCEEDED(rv), "NS_DispatchToMainThread failed"); } }
void nsScreen::Notify(const hal::ScreenConfiguration& aConfiguration) { ScreenOrientation previousOrientation = mOrientation; mOrientation = aConfiguration.orientation(); NS_ASSERTION(mOrientation != eScreenOrientation_None && mOrientation != eScreenOrientation_EndGuard && mOrientation != eScreenOrientation_Portrait && mOrientation != eScreenOrientation_Landscape, "Invalid orientation value passed to notify method!"); if (mOrientation != previousOrientation) { // TODO: use an helper method, see bug 720768. nsRefPtr<nsDOMEvent> event = new nsDOMEvent(nullptr, nullptr); nsresult rv = event->InitEvent(NS_LITERAL_STRING("mozorientationchange"), false, false); if (NS_FAILED(rv)) { return; } rv = event->SetTrusted(true); if (NS_FAILED(rv)) { return; } bool dummy; rv = DispatchEvent(event, &dummy); if (NS_FAILED(rv)) { return; } } }
void MediaEngineWebRTCVideoSource::Notify(const hal::ScreenConfiguration& aConfiguration) { #ifdef DYNAMIC_GUM_ROTATION MonitorAutoLock enter(mMonitor); mRotation = GetRotateAmount(aConfiguration.orientation(), mCameraAngle, mBackCamera); LOG(("*** New orientation: %d (Camera %d Back %d MountAngle: %d)", mRotation, mCaptureIndex, mBackCamera, mCameraAngle)); #endif }
void MediaEngineGonkVideoSource::Notify(const hal::ScreenConfiguration& aConfiguration) { #ifdef DYNAMIC_GUM_ROTATION if (mHasDirectListeners) { // aka hooked to PeerConnection MonitorAutoLock enter(mMonitor); mRotation = GetRotateAmount(aConfiguration.orientation(), mCameraAngle, mBackCamera); LOG(("*** New orientation: %d (Camera %d Back %d MountAngle: %d)", mRotation, mCaptureIndex, mBackCamera, mCameraAngle)); } #endif mOrientationChanged = true; }
void nsScreen::Notify(const hal::ScreenConfiguration& aConfiguration) { ScreenOrientation previousOrientation = mOrientation; mOrientation = aConfiguration.orientation(); NS_ASSERTION(mOrientation == eScreenOrientation_PortraitPrimary || mOrientation == eScreenOrientation_PortraitSecondary || mOrientation == eScreenOrientation_LandscapePrimary || mOrientation == eScreenOrientation_LandscapeSecondary, "Invalid orientation value passed to notify method!"); if (mOrientation != previousOrientation) { DispatchTrustedEvent(NS_LITERAL_STRING("mozorientationchange")); } }