From 842cd6d33ffcfb38ec864cc6e9fd94f01529c8fb Mon Sep 17 00:00:00 2001 From: Martijn Wargers Date: Wed, 17 Feb 2016 18:47:14 +0100 Subject: [PATCH] Bug 1160342 - Implement marquee using mutation observers, r=smaug --- dom/tests/mochitest/bugs/mochitest.ini | 1 + .../bugs/test_bug1160342_marquee.html | 228 ++++++++++++++++++ layout/reftests/marquee/1160342-1.html | 10 + layout/reftests/marquee/1160342-2.html | 10 + layout/reftests/marquee/1160342-ref.html | 10 + layout/reftests/marquee/reftest.list | 2 + layout/style/xbl-marquee/xbl-marquee.xml | 184 +++++++------- 7 files changed, 352 insertions(+), 93 deletions(-) create mode 100644 dom/tests/mochitest/bugs/test_bug1160342_marquee.html create mode 100644 layout/reftests/marquee/1160342-1.html create mode 100644 layout/reftests/marquee/1160342-2.html create mode 100644 layout/reftests/marquee/1160342-ref.html diff --git a/dom/tests/mochitest/bugs/mochitest.ini b/dom/tests/mochitest/bugs/mochitest.ini index 059788ef4fd9..ac4b17ae2b96 100644 --- a/dom/tests/mochitest/bugs/mochitest.ini +++ b/dom/tests/mochitest/bugs/mochitest.ini @@ -168,4 +168,5 @@ skip-if = buildapp == 'mulet' || buildapp == 'b2g' || toolkit == 'android' || e1 skip-if = buildapp == 'mulet' || buildapp == 'b2g' || toolkit == 'android' || e10s [test_bug1022869.html] [test_bug1112040.html] +[test_bug1160342_marquee.html] [test_bug1171215.html] diff --git a/dom/tests/mochitest/bugs/test_bug1160342_marquee.html b/dom/tests/mochitest/bugs/test_bug1160342_marquee.html new file mode 100644 index 000000000000..760d98b0b59c --- /dev/null +++ b/dom/tests/mochitest/bugs/test_bug1160342_marquee.html @@ -0,0 +1,228 @@ + + + + + Test for Bug 411103 + + + + +Mozilla Bug 1160342 +

+
+marquee +
+ +
+
+
+ + diff --git a/layout/reftests/marquee/1160342-1.html b/layout/reftests/marquee/1160342-1.html new file mode 100644 index 000000000000..85e7215fbbab --- /dev/null +++ b/layout/reftests/marquee/1160342-1.html @@ -0,0 +1,10 @@ + + +Bug 1160342 - Implement marquee using mutation observers + + + +This text should be visible + + + diff --git a/layout/reftests/marquee/1160342-2.html b/layout/reftests/marquee/1160342-2.html new file mode 100644 index 000000000000..99b288568bac --- /dev/null +++ b/layout/reftests/marquee/1160342-2.html @@ -0,0 +1,10 @@ + + +Bug 1160342 - Implement marquee using mutation observers + + + +This text should be visible + + + diff --git a/layout/reftests/marquee/1160342-ref.html b/layout/reftests/marquee/1160342-ref.html new file mode 100644 index 000000000000..d56c90642aad --- /dev/null +++ b/layout/reftests/marquee/1160342-ref.html @@ -0,0 +1,10 @@ + + +Bug 1160342 - Implement marquee using mutation observers + + + +This text should be visible + + + diff --git a/layout/reftests/marquee/reftest.list b/layout/reftests/marquee/reftest.list index 298a02b0b5d8..932298a272c7 100644 --- a/layout/reftests/marquee/reftest.list +++ b/layout/reftests/marquee/reftest.list @@ -7,3 +7,5 @@ fuzzy-if(Android&&AndroidVersion>=15,8,220) == 413027-4.html 413027-4-ref.html fuzzy-if(Android&&AndroidVersion>=15,8,30) == 425247-1.html 425247-1-ref.html fuzzy-if(Android&&AndroidVersion>=15,8,30) == 425247-2.html 425247-2-ref.html random == 429849-1.html 429849-1-ref.html # bug 432288 +== 1160342-1.html 1160342-ref.html +== 1160342-2.html 1160342-ref.html diff --git a/layout/style/xbl-marquee/xbl-marquee.xml b/layout/style/xbl-marquee/xbl-marquee.xml index 4951553fe3b4..1b5b71a256ef 100644 --- a/layout/style/xbl-marquee/xbl-marquee.xml +++ b/layout/style/xbl-marquee/xbl-marquee.xml @@ -20,6 +20,7 @@ + this._mutationActor(this._mutationObserver.takeRecords()); return this._behavior; @@ -90,6 +93,7 @@ + + + + 0) { + var mutation = aMutations.shift(); + var attrName = mutation.attributeName.toLowerCase(); + var oldValue = mutation.oldValue; + var target = mutation.target; + var newValue = target.getAttribute(attrName); + + if (oldValue != newValue) { + switch (attrName) { + case "loop": + if (!target._set_loop(newValue)) { + if (!newValue) { + target._loop = -1; + if (target.runId == 0) + target.start(); + } + } + if (target.rundId == 0) + target.start(); + break; + case "scrollamount": + if (!newValue) + target._scrollAmount = 6; + else + target._set_scrollAmount(newValue); + break; + case "scrolldelay": + if (!newValue) + target._scrollDelay = 85; + else + target._set_scrollDelay(newValue); + target.stop(); + target.start(); + break; + case "truespeed": + //needed to update target._scrollDelay + var myThis = target; + var lambda = function() {myThis._set_scrollDelay(myThis.getAttribute('scrolldelay'));} + window.setTimeout(lambda, 0); + break; + case "behavior": + if (!newValue) + target._behavior = "scroll"; + else + target._set_behavior(newValue); + target.startNewDirection = true; + if ((oldValue == "slide" && target.newPosition == target.stopAt) || + newValue == "alternate" || newValue == "slide") { + target.stop(); + target._doMove(true); + } + break; + case "direction": + if (!newValue) + target._direction = "left"; + else + target._set_direction(newValue); + break; + case "width": + case "height": + target.startNewDirection = true; + break; + case "onstart": + target._setEventListener("start", newValue); + break; + case "onfinish": + target._setEventListener("finish", newValue); + break; + case "onbounce": + target._setEventListener("bounce", newValue); + break; + } + } + } + ]]> + + + - - - - - -