<!DOCTYPE HTML>
<html>
 <head>
  <title>WebStorage Test: sessionStorage event - StorageEventInit</title>
  <script src="/resources/testharness.js"></script>
  <script src="/resources/testharnessreport.js"></script>
 </head>
 <body>
    <h1>event_session_StorageEventInit</h1>
    <div id="log"></div>
    <script>
        async_test(function(t) {
            function onStorageEvent(event) {
                assert_equals(event.key, 'key');
                assert_equals(event.oldValue, 'oldValue');
                assert_equals(event.newValue, 'newValue');
                assert_equals(event.url, window.location.href);
                assert_equals(event.storageArea, window.sessionStorage);
                t.done();
            }

            window.addEventListener('storage', t.step_func(onStorageEvent), false);

            var event = new StorageEvent('storage', {
                key: 'key',
                oldValue: 'oldValue',
                newValue: 'newValue',
                url: window.location.href,
                storageArea: window.sessionStorage
            });

            window.dispatchEvent(event);
        }, "storageeventinit test - Storage event is fired due to set values for StorageEventInit.");
    </script>
 </body>
</html>
