Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / http / tests / serviceworker / postmessage.html
index 3c7a4e3..e477754 100644 (file)
@@ -6,12 +6,16 @@
 <script>
 async_test(function(t) {
     var scope = 'resources/blank.html';
+    var registration;
+    var worker;
     service_worker_unregister_and_register(
         t, 'resources/postmessage-worker.js', scope)
-      .then(function(registration) {
-          return wait_for_update(t, registration);
+      .then(function(r) {
+          registration = r;
+          return get_newest_worker(registration);
         })
       .then(function(sw) {
+          worker = sw;
           var messageChannel = new MessageChannel();
           messageChannel.port1.onmessage = t.step_func(onMessage);
           sw.postMessage({port: messageChannel.port2}, [messageChannel.port2]);
@@ -32,10 +36,27 @@ async_test(function(t) {
       if (message === 'quit') {
         assert_array_equals(result, expected,
                             'Worker should post back expected values.');
-        service_worker_unregister_and_done(t, scope);
+        postMessageToRedundantWorker();
       } else {
         result.push(message);
       }
     };
+
+    function postMessageToRedundantWorker() {
+      registration.unregister(scope)
+        .then(function() {
+            return wait_for_state(t, worker, 'redundant');
+          })
+        .then(function() {
+            assert_equals(worker.state, 'redundant');
+            assert_throws(
+              {name:'InvalidStateError'},
+              function() { worker.postMessage(''); },
+              'Calling postMessage on a redundant ServiceWorker should ' +
+                  'throw InvalidStateError.');
+            t.done();
+          })
+        .catch(unreached_rejection(t));
+    }
   }, 'postMessage to a ServiceWorker (and back via MessagePort)');
 </script>