Bug 842782 - p3: lock fullscreen video orientation. r?ralin
- if enabled, lock orienation when fullscreen state change
- use video aspect ratio to choose which orientation to lock
MozReview-Commit-ID: 3HP60YNbWcc
--- a/toolkit/content/widgets/videocontrols.xml
+++ b/toolkit/content/widgets/videocontrols.xml
@@ -1229,22 +1229,47 @@
if (this.isVideoInFullScreen()) {
this.fullscreenButton.setAttribute("fullscreened", "true");
} else {
this.fullscreenButton.removeAttribute("fullscreened");
}
},
onFullscreenChange() {
+ this.updateOrientationState(this.isVideoInFullScreen());
if (this.isVideoInFullScreen()) {
Utils._hideControlsTimeout = setTimeout(this._hideControlsFn, this.HIDE_CONTROLS_TIMEOUT_MS);
}
this.setFullscreenButtonState();
},
+ updateOrientationState(lock) {
+ if (!this.video.mozOrientationLockEnabled) {
+ return;
+ }
+ if (lock) {
+ if (this.video.mozIsOrientationLocked) {
+ return;
+ }
+ let dimenDiff = this.video.videoWidth - this.video.videoHeight;
+ if (dimenDiff > 0) {
+ this.video.mozIsOrientationLocked = window.screen.mozLockOrientation("landscape");
+ } else if (dimenDiff < 0) {
+ this.video.mozIsOrientationLocked = window.screen.mozLockOrientation("portrait");
+ } else {
+ this.video.mozIsOrientationLocked = window.screen.mozLockOrientation(window.screen.orientation);
+ }
+ } else {
+ if (this.video.mozIsOrientationLocked) {
+ window.screen.mozUnlockOrientation();
+ this.video.mozIsOrientationLocked = false;
+ }
+ }
+ },
+
clickToPlayClickHandler(e) {
if (e.button != 0) {
return;
}
if (this.hasError() && !this.suppressError) {
// Errors that can be dismissed should be placed here as we discover them.
if (this.video.error.code != this.video.error.MEDIA_ERR_ABORTED) {
return;
@@ -1831,16 +1856,17 @@
};
this.Utils.init(this);
]]>
</constructor>
<destructor>
<![CDATA[
this.Utils.terminateEventListeners();
+ this.Utils.updateOrientationState(false);
// randomID used to be a <field>, which meant that the XBL machinery
// undefined the property when the element was unbound. The code in
// this file actually depends on this, so now that randomID is an
// expando, we need to make sure to explicitly delete it.
delete this.randomID;
]]>
</destructor>