Bug 1278151 - Fix CompareCuesByTime for the web-platform/meta/html/semantics/embedded-content/media-elements/interfaces/TextTrack/cues.html. r=rillian draft
authorbechen <bechen@mozilla.com>
Tue, 21 Jun 2016 16:26:35 +0800
changeset 380530 d9ff2cb2843094e13be2cb17c92c99ffd1d4ba90
parent 380354 51377a64158941f89ed73f388ae437cfa494c030
child 380531 82ab267917ffaba159f3a18fe09435bda2b75591
push id21241
push userbechen@mozilla.com
push dateWed, 22 Jun 2016 08:04:26 +0000
reviewersrillian
bugs1278151
milestone50.0a1
Bug 1278151 - Fix CompareCuesByTime for the web-platform/meta/html/semantics/embedded-content/media-elements/interfaces/TextTrack/cues.html. r=rillian MozReview-Commit-ID: KLGqF55DnhI
dom/media/TextTrackCueList.cpp
dom/media/TextTrackList.cpp
dom/media/test/test_bug883173.html
testing/web-platform/meta/html/semantics/embedded-content/media-elements/interfaces/TextTrack/cues.html.ini
--- a/dom/media/TextTrackCueList.cpp
+++ b/dom/media/TextTrackCueList.cpp
@@ -9,23 +9,22 @@
 
 namespace mozilla {
 namespace dom {
 
 class CompareCuesByTime
 {
 public:
   bool Equals(TextTrackCue* aOne, TextTrackCue* aTwo) const {
-    return aOne->StartTime() == aTwo->StartTime() &&
-           aOne->EndTime() == aTwo->EndTime();
+    return false;
   }
   bool LessThan(TextTrackCue* aOne, TextTrackCue* aTwo) const {
     return aOne->StartTime() < aTwo->StartTime() ||
            (aOne->StartTime() == aTwo->StartTime() &&
-            aOne->EndTime() < aTwo->EndTime());
+            aOne->EndTime() >= aTwo->EndTime());
   }
 };
 
 NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(TextTrackCueList, mParent, mList)
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(TextTrackCueList)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(TextTrackCueList)
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(TextTrackCueList)
--- a/dom/media/TextTrackList.cpp
+++ b/dom/media/TextTrackList.cpp
@@ -96,16 +96,19 @@ TextTrackList::AddTextTrack(TextTrackKin
   AddTextTrack(track, aCompareTT);
   return track.forget();
 }
 
 void
 TextTrackList::AddTextTrack(TextTrack* aTextTrack,
                             const CompareTextTracks& aCompareTT)
 {
+  if (mTextTracks.Contains(aTextTrack)) {
+    return;
+  }
   if (mTextTracks.InsertElementSorted(aTextTrack, aCompareTT)) {
     aTextTrack->SetTextTrackList(this);
     CreateAndDispatchTrackEventRunner(aTextTrack, NS_LITERAL_STRING("addtrack"));
   }
 }
 
 TextTrack*
 TextTrackList::GetTrackById(const nsAString& aId)
--- a/dom/media/test/test_bug883173.html
+++ b/dom/media/test/test_bug883173.html
@@ -36,17 +36,17 @@ video.addEventListener("loadedmetadata",
       setTimeout(run_tests, 0);
       return;
     }
     is(trackElement.readyState, 2, "Track::ReadyState should be set to LOADED.");
 
     // Set mode to hidden so that the active cue lists are being updated.
     trackElement.track.mode = "hidden";
 
-    var expected = [[1, 2], [1, 3], [2, 3], [2, 4], [3, 4]];
+    var expected = [[1, 3], [1, 2], [2, 4], [2, 3], [3, 4]];
     var cueList = trackElement.track.cues;
     is(cueList.length, expected.length, "Cue list length should be 5.");
 
     for (var i = 0; i < expected.length; i++) {
       is(cueList[i].startTime, expected[i][0], "Cue's start time should be " + expected[i][0]);
       is(cueList[i].endTime, expected[i][1], "Cue's end time should be " + expected[i][1]);
     }
 
--- a/testing/web-platform/meta/html/semantics/embedded-content/media-elements/interfaces/TextTrack/cues.html.ini
+++ b/testing/web-platform/meta/html/semantics/embedded-content/media-elements/interfaces/TextTrack/cues.html.ini
@@ -1,8 +1,5 @@
 [cues.html]
   type: testharness
-  [TextTrack.cues, changing order]
-    expected: FAIL
-
   [TextTrack.cues, default attribute]
     expected: FAIL