Bug 489631 - HTML5 <video>/<audio> elements should not inherit document direction; r=dolske,mconnor
authorEhsan Akhgari <ehsan.akhgari@gmail.com>
Tue, 19 May 2009 14:12:29 +0430
changeset 28565 b16fcc7f20316e088f143e5eb61a03afe21684ac
parent 28564 637b111b1e55194af6a15dc78e70e739343936af
child 28566 d1abfc97c14095aa5a1651458e0f2955696e7b02
push id7116
push userehsan.akhgari@gmail.com
push dateTue, 19 May 2009 09:43:55 +0000
treeherdermozilla-central@b16fcc7f2031 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersdolske, mconnor
bugs489631
milestone1.9.2a1pre
Bug 489631 - HTML5 <video>/<audio> elements should not inherit document direction; r=dolske,mconnor
toolkit/content/tests/widgets/Makefile.in
toolkit/content/tests/widgets/audio.oga
toolkit/content/tests/widgets/black.ogv
toolkit/content/tests/widgets/test_videocontrols.html
toolkit/content/tests/widgets/test_videocontrols_audio_direction.html
toolkit/content/tests/widgets/test_videocontrols_video_direction.html
toolkit/content/tests/widgets/use_large_cache.js
toolkit/content/tests/widgets/videocontrols_direction-1-ref.html
toolkit/content/tests/widgets/videocontrols_direction-1a.html
toolkit/content/tests/widgets/videocontrols_direction-1b.html
toolkit/content/tests/widgets/videocontrols_direction-1c.html
toolkit/content/tests/widgets/videocontrols_direction-1d.html
toolkit/content/tests/widgets/videocontrols_direction-1e.html
toolkit/content/tests/widgets/videocontrols_direction-2-ref.html
toolkit/content/tests/widgets/videocontrols_direction-2a.html
toolkit/content/tests/widgets/videocontrols_direction-2b.html
toolkit/content/tests/widgets/videocontrols_direction-2c.html
toolkit/content/tests/widgets/videocontrols_direction-2d.html
toolkit/content/tests/widgets/videocontrols_direction-2e.html
toolkit/content/tests/widgets/videocontrols_direction_test.js
toolkit/content/tests/widgets/videomask.css
toolkit/content/widgets/videocontrols.css
toolkit/content/widgets/videocontrols.xml
--- a/toolkit/content/tests/widgets/Makefile.in
+++ b/toolkit/content/tests/widgets/Makefile.in
@@ -104,17 +104,36 @@ include $(topsrcdir)/config/rules.mk
 		test_menu_hide.xul \
 		test_focus.xul \
 		test_tabindex.xul \
  		test_mousescroll.xul \
 		test_scrollbar.xul \
 		test_sorttemplate.xul \
 		test_contextmenu_list.xul \
 		test_videocontrols.html \
+		test_videocontrols_video_direction.html \
+		test_videocontrols_audio_direction.html \
+		videocontrols_direction-1-ref.html \
+		videocontrols_direction-1a.html \
+		videocontrols_direction-1b.html \
+		videocontrols_direction-1c.html \
+		videocontrols_direction-1d.html \
+		videocontrols_direction-1e.html \
+		videocontrols_direction-2-ref.html \
+		videocontrols_direction-2a.html \
+		videocontrols_direction-2b.html \
+		videocontrols_direction-2c.html \
+		videocontrols_direction-2d.html \
+		videocontrols_direction-2e.html \
+		videocontrols_direction_test.js \
+		use_large_cache.js \
+		audio.oga \
+		black.ogv \
 		video.ogg \
+		videomask.css \
 		$(NULL)
 
 ifeq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT)))
 _TEST_FILES += test_menubar.xul \
                window_menubar.xul
 endif
 
 libs:: $(_TEST_FILES)
new file mode 100644
index 0000000000000000000000000000000000000000..93f42c6a3668e9aff9a37a53a93e6ef72b34032e
GIT binary patch
literal 13709
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
J9J(U`{~yliQ-=Tm
new file mode 100644
index 0000000000000000000000000000000000000000..ab146ebe285f56fb04cf1affc3f2fd7dc8bc11b9
GIT binary patch
literal 2871
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
--- a/toolkit/content/tests/widgets/test_videocontrols.html
+++ b/toolkit/content/tests/widgets/test_videocontrols.html
@@ -10,35 +10,19 @@
 <body>
 <p id="display"></p>
 
 <div id="content">
   <video width="320" height="240" id="video" src="video.ogg" controls mozNoDynamicControls autobuffer></video>
 </div>
 
 <pre id="test">
+<script type="text/javascript" src="use_large_cache.js"></script>
 <script class="testbody" type="text/javascript">
 
-// Use a large cache for this test, to stop it hanging due to the cache
-// filling up
-(function() {
-  netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
-  // Set cache size to something large
-  var prefService = Components.classes["@mozilla.org/preferences-service;1"]
-                               .getService(Components.interfaces.nsIPrefService);
-  var branch = prefService.getBranch("media.");
-  var oldSize = branch.getIntPref("cache_size");
-  branch.setIntPref("cache_size", 40000);
-
-  window.addEventListener("unload", function() {
-    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
-    branch.setIntPref("cache_size", oldSize);
-  }, false);
- })();
-
 /*
  * Positions of the  UI elements, relative to the upper-left corner of the
  * <video> box.
  */
 const videoWidth = 320;
 const videoHeight = 240;
 const videoDuration = 3.8329999446868896;
 
new file mode 100644
--- /dev/null
+++ b/toolkit/content/tests/widgets/test_videocontrols_audio_direction.html
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <title>Video controls directionality test</title>
+  <script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
+  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>  
+  <script type="text/javascript" src="/tests/SimpleTest/WindowSnapshot.js"></script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
+</head>
+<body>
+<p id="display"></p>
+
+<div id="content">
+</div>
+
+<pre id="test">
+<script class="testbody" type="text/javascript">
+
+var tests = [
+  {op: "==", test: "videocontrols_direction-2a.html", ref: "videocontrols_direction-2-ref.html"},
+  {op: "==", test: "videocontrols_direction-2b.html", ref: "videocontrols_direction-2-ref.html"},
+  {op: "==", test: "videocontrols_direction-2c.html", ref: "videocontrols_direction-2-ref.html"},
+  {op: "==", test: "videocontrols_direction-2d.html", ref: "videocontrols_direction-2-ref.html"},
+  {op: "==", test: "videocontrols_direction-2e.html", ref: "videocontrols_direction-2-ref.html"}
+];
+
+</script>
+<script type="text/javascript" src="use_large_cache.js"></script>
+<script type="text/javascript" src="videocontrols_direction_test.js"></script>
+</pre>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/toolkit/content/tests/widgets/test_videocontrols_video_direction.html
@@ -0,0 +1,32 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <title>Video controls directionality test</title>
+  <script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
+  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>  
+  <script type="text/javascript" src="/tests/SimpleTest/WindowSnapshot.js"></script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
+</head>
+<body>
+<p id="display"></p>
+
+<div id="content">
+</div>
+
+<pre id="test">
+<script class="testbody" type="text/javascript">
+
+var tests = [
+  {op: "==", test: "videocontrols_direction-1a.html", ref: "videocontrols_direction-1-ref.html"},
+  {op: "==", test: "videocontrols_direction-1b.html", ref: "videocontrols_direction-1-ref.html"},
+  {op: "==", test: "videocontrols_direction-1c.html", ref: "videocontrols_direction-1-ref.html"},
+  {op: "==", test: "videocontrols_direction-1d.html", ref: "videocontrols_direction-1-ref.html"},
+  {op: "==", test: "videocontrols_direction-1e.html", ref: "videocontrols_direction-1-ref.html"},
+];
+
+</script>
+<script type="text/javascript" src="use_large_cache.js"></script>
+<script type="text/javascript" src="videocontrols_direction_test.js"></script>
+</pre>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/toolkit/content/tests/widgets/use_large_cache.js
@@ -0,0 +1,14 @@
+(function() {
+  netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+  // Set cache size to something large
+  var prefService = Components.classes["@mozilla.org/preferences-service;1"]
+                               .getService(Components.interfaces.nsIPrefService);
+  var branch = prefService.getBranch("media.");
+  var oldSize = branch.getIntPref("cache_size");
+  branch.setIntPref("cache_size", 40000);
+
+  window.addEventListener("unload", function() {
+    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+    branch.setIntPref("cache_size", oldSize);
+  }, false);
+ })();
new file mode 100644
--- /dev/null
+++ b/toolkit/content/tests/widgets/videocontrols_direction-1-ref.html
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<link rel="stylesheet" type="text/css" href="videomask.css">
+</head>
+<body style="text-align: right;">
+<video controls id="av" src="black.ogv"></video>
+<div id="mask"></div>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/toolkit/content/tests/widgets/videocontrols_direction-1a.html
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML>
+<html dir="rtl">
+<head>
+<link rel="stylesheet" type="text/css" href="videomask.css">
+</head>
+<body>
+<video controls id="av" src="black.ogv"></video>
+<div id="mask"></div>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/toolkit/content/tests/widgets/videocontrols_direction-1b.html
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML>
+<html style="direction: rtl">
+<head>
+<link rel="stylesheet" type="text/css" href="videomask.css">
+</head>
+<body>
+<video controls id="av" src="black.ogv"></video>
+<div id="mask"></div>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/toolkit/content/tests/widgets/videocontrols_direction-1c.html
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<link rel="stylesheet" type="text/css" href="videomask.css">
+</head>
+<body style="direction: rtl">
+<video controls id="av" src="black.ogv"></video>
+<div id="mask"></div>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/toolkit/content/tests/widgets/videocontrols_direction-1d.html
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<link rel="stylesheet" type="text/css" href="videomask.css">
+</head>
+<body style="text-align: right;">
+<video controls id="av" src="black.ogv" dir="rtl"></video>
+<div id="mask"></div>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/toolkit/content/tests/widgets/videocontrols_direction-1e.html
@@ -0,0 +1,10 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<link rel="stylesheet" type="text/css" href="videomask.css">
+</head>
+<body style="text-align: right;">
+<video controls id="av" src="black.ogv" style="direction: rtl;"></video>
+<div id="mask"></div>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/toolkit/content/tests/widgets/videocontrols_direction-2-ref.html
@@ -0,0 +1,9 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<link rel="stylesheet" type="text/css" href="videomask.css">
+</head>
+<body style="text-align: right;">
+<audio controls id="av" src="audio.oga"></audio>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/toolkit/content/tests/widgets/videocontrols_direction-2a.html
@@ -0,0 +1,9 @@
+<!DOCTYPE HTML>
+<html dir="rtl">
+<head>
+<link rel="stylesheet" type="text/css" href="videomask.css">
+</head>
+<body>
+<audio controls id="av" src="audio.oga"></audio>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/toolkit/content/tests/widgets/videocontrols_direction-2b.html
@@ -0,0 +1,9 @@
+<!DOCTYPE HTML>
+<html style="direction: rtl">
+<head>
+<link rel="stylesheet" type="text/css" href="videomask.css">
+</head>
+<body>
+<audio controls id="av" src="audio.oga"></audio>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/toolkit/content/tests/widgets/videocontrols_direction-2c.html
@@ -0,0 +1,9 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<link rel="stylesheet" type="text/css" href="videomask.css">
+</head>
+<body style="direction: rtl">
+<audio controls id="av" src="audio.oga"></audio>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/toolkit/content/tests/widgets/videocontrols_direction-2d.html
@@ -0,0 +1,9 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<link rel="stylesheet" type="text/css" href="videomask.css">
+</head>
+<body style="text-align: right;">
+<audio controls id="av" src="audio.oga" dir="rtl"></audio>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/toolkit/content/tests/widgets/videocontrols_direction-2e.html
@@ -0,0 +1,9 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<link rel="stylesheet" type="text/css" href="videomask.css">
+</head>
+<body style="text-align: right;">
+<audio controls id="av" src="audio.oga" style="direction: rtl;"></audio>
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/toolkit/content/tests/widgets/videocontrols_direction_test.js
@@ -0,0 +1,75 @@
+var RemoteCanvas = function(url, id) {
+  this.url = url;
+  this.id = id;
+  this.snapshot = null;
+};
+
+RemoteCanvas.CANVAS_WIDTH = 200;
+RemoteCanvas.CANVAS_HEIGHT = 200;
+
+RemoteCanvas.prototype.compare = function(otherCanvas, expected) {
+  return compareSnapshots(this.snapshot, otherCanvas.snapshot, expected)[0];
+}
+
+RemoteCanvas.prototype.load = function(callback) {
+  var iframe = document.createElement("iframe");
+  iframe.id = this.id + "-iframe";
+  iframe.width = RemoteCanvas.CANVAS_WIDTH + "px";
+  iframe.height = RemoteCanvas.CANVAS_HEIGHT + "px";
+  iframe.src = this.url;
+  var me = this;
+  iframe.addEventListener("load", function() {
+    me.remotePageLoaded(callback);
+  }, false);
+  window.document.body.appendChild(iframe);
+};
+
+RemoteCanvas.prototype.remotePageLoaded = function(callback) {
+  var ldrFrame = document.getElementById(this.id + "-iframe");
+  this.snapshot = snapshotWindow(ldrFrame.contentWindow);
+  this.snapshot.id = this.id + "-canvas";
+  window.document.body.appendChild(this.snapshot);
+  callback(this);
+};
+
+RemoteCanvas.prototype.cleanup = function() {
+  var iframe = document.getElementById(this.id + "-iframe");
+  iframe.parentNode.removeChild(iframe);
+  var canvas = document.getElementById(this.id + "-canvas");
+  canvas.parentNode.removeChild(canvas);
+};
+
+function runTest(index) {
+  var canvases = [];
+  function testCallback(canvas) {
+    canvases.push(canvas);
+
+    if (canvases.length == 2) { // when both canvases are loaded
+      var expectedEqual = currentTest.op == "==";
+      var result = canvases[0].compare(canvases[1], expectedEqual);
+      ok(result, "Rendering of reftest " + currentTest.test + " should " +
+        (expectedEqual ? "not " : "") + "be different to the reference");
+
+      if (result) {
+        canvases[0].cleanup();
+        canvases[1].cleanup();
+      }
+
+      if (index < tests.length - 1)
+        runTest(index + 1);
+      else
+        SimpleTest.finish();
+    }
+  }
+
+  var currentTest = tests[index];
+  var testCanvas = new RemoteCanvas(currentTest.test, "test-" + index);
+  testCanvas.load(testCallback);
+
+  var refCanvas = new RemoteCanvas(currentTest.ref, "ref-" + index);
+  refCanvas.load(testCallback);
+}
+
+SimpleTest.waitForExplicitFinish();
+
+window.addEventListener("load", function() { runTest(0); }, true);
new file mode 100644
--- /dev/null
+++ b/toolkit/content/tests/widgets/videomask.css
@@ -0,0 +1,28 @@
+html, body {
+  margin: 0;
+  padding: 0;
+}
+
+video {
+  width: 140px;
+  height: 100px;
+}
+
+audio {
+  width: 140px;
+  height: 28px;
+  background-color: black;
+}
+
+/**
+ * Create a mask for the video direction tests which covers up the throbber.
+ */
+#mask {
+  position: absolute;
+  z-index: 3;
+  width: 50px;
+  height: 50px;
+  background-color: green;
+  top: 11px;
+  right: 45px;
+}
--- a/toolkit/content/widgets/videocontrols.css
+++ b/toolkit/content/widgets/videocontrols.css
@@ -2,8 +2,12 @@
 
 .scrubber, .volumeControl {
     -moz-binding: url("chrome://global/content/bindings/videocontrols.xml#suppressChangeEvent");
 }
 
 .scrubber .scale-thumb {
     -moz-binding: url("chrome://global/content/bindings/videocontrols.xml#timeThumb");
 }
+
+.mediaControlsFrame {
+    direction: ltr;
+}
--- a/toolkit/content/widgets/videocontrols.xml
+++ b/toolkit/content/widgets/videocontrols.xml
@@ -152,17 +152,18 @@
 
   <binding id="videoControls">
 
     <resources>
         <stylesheet src="chrome://global/content/bindings/videocontrols.css"/>
         <stylesheet src="chrome://global/skin/media/videocontrols.css"/>
     </resources>
 
-    <xbl:content xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+    <xbl:content xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+                 class="mediaControlsFrame">
         <stack flex="1">
             <vbox class="statusOverlay" hidden="true">
                 <box class="statusIcon" flex="1"/>
             </vbox>
 
             <vbox>
                 <spacer flex="1"/>
                 <hbox class="controlBar" hidden="true">