Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / media / encrypted-media / encrypted-media-lifetime-mediakeysession-release.html
index de02620..8cb042f 100644 (file)
@@ -1,11 +1,10 @@
 <!DOCTYPE html>
 <html>
     <head>
-        <title>Test MediaKeySession lifetime</title>
-        <script src="../w3c-media-utils.js"></script>
+        <title>MediaKeySession lifetime after release()</title>
+        <script src="encrypted-media-utils.js"></script>
         <script src="../../resources/testharness.js"></script>
         <script src="../../resources/testharnessreport.js"></script>
-        <script src="../../resources/gc.js"></script>
     </head>
     <body>
         <div id="log"></div>
             // we can determine when they are garbage collected.
             // MediaKeySessions remain as long as:
             //   JavaScript has a reference to it
-            //   OR (MediaKeys is around AND the session has not received a close() event)
+            //   OR (MediaKeys is around
+            //       AND the session has not received a close() event)
             async_test(function(test)
             {
-                var initData = new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7]);
-
-                gc();
+                var mediaKeys;
+                var mediaKeySession1;
+                var mediaKeySession2;
+                var initDataType = getInitDataType();
+                var initData = getInitData(initDataType);
                 var startingActiveDOMObjectCount = window.internals.activeDOMObjectCount(document);
 
                 function numActiveDOMObjectsCreated()
                 {
-                    gc();
                     return window.internals.activeDOMObjectCount(document) - startingActiveDOMObjectCount;
                 }
 
                 // Create 2 sessions.
-                var mediaKeys = new MediaKeys("org.w3.clearkey");
-                var mediaKeySession1 = mediaKeys.createSession('video/webm', initData);
-                assert_equals(numActiveDOMObjectsCreated(), 1);
-                var mediaKeySession2 = mediaKeys.createSession('video/webm', initData);
-                assert_equals(numActiveDOMObjectsCreated(), 2);
-                var openSessions = 2;
-
-                // Release the sessions. Once the close() event is received,
-                // only the JS reference to them keeps them around.
-                mediaKeySession1.release();
-                waitForEventAndRunStep("close", mediaKeySession1, onClose, test);
-                mediaKeySession2.release();
-                waitForEventAndRunStep("close", mediaKeySession2, onClose, test);
+                MediaKeys.create('org.w3.clearkey').then(function(result) {
+                    mediaKeys = result;
 
-                function onClose(event)
-                {
-                    --openSessions;
-                    if (openSessions > 0)
-                        return;
+                    // Verify MediaKeys are not an ActiveDOMObject.
+                    assert_equals(numActiveDOMObjectsCreated(), 0, 'MediaKeys.create()');
 
-                    // Delay to give time for close to complete since
-                    // event.target is a reference to the MediaKeySession.
-                    setTimeout(finish, 1);
-                }
+                    return mediaKeys.createSession(initDataType, initData);
+                }).then(function(result) {
+                    mediaKeySession1 = result;
+                    // Should be 1 MediaKeySession.
+                    assert_equals(numActiveDOMObjectsCreated(), 1, 'mediaKeys.createSession(1)');
+                    return mediaKeys.createSession(initDataType, initData);
+                }).then(function(result) {
+                    mediaKeySession2 = result;
+                    // Should be 2 MediaKeySessions.
+                    assert_equals(numActiveDOMObjectsCreated(), 2, 'mediaKeys.createSession(2)');
 
-                function finish()
-                {
+                    // Release the sessions. Once completed, only the JS
+                    // reference to them keeps them around.
+                    return mediaKeySession1.release();
+                }).then(function(result) {
+                    return mediaKeySession2.release();
+                }).then(function(result) {
                     // Since both sessions have been closed, dropping the
                     // reference to them from JS will result in the session
                     // being garbage-collected.
-                    assert_equals(openSessions, 0);
-                    assert_not_equals(mediaKeys, null);
+                    // Should be 2 MediaKeySessions.
                     assert_equals(numActiveDOMObjectsCreated(), 2);
 
                     mediaKeySession1 = null;
-                    gc();
-                    assert_equals(numActiveDOMObjectsCreated(), 1, "mediaKeySession1 not collected");
+                    return createGCPromise();
+                }).then(function(result) {
+                    // Only mediaKeySession2 should remain.
+                    assert_equals(numActiveDOMObjectsCreated(), 1, 'mediaKeySession1 not collected');
 
                     mediaKeySession2 = null;
-                    gc();
-                    assert_equals(numActiveDOMObjectsCreated(), 0, "mediaKeySession2 not collected");
-
+                    return createGCPromise();
+                }).then(function(result) {
+                    assert_equals(numActiveDOMObjectsCreated(), 0, 'mediaKeySession2 not collected');
                     test.done();
-                }
-            }, "MediaKeySession lifetime after release()");
+                }).catch(function(error) {
+                    forceTestFailureFromPromise(test, error);
+                });
+            }, 'MediaKeySession lifetime after release()');
         </script>
     </body>
 </html>