Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / storage / indexeddb / pending-version-change-stuck-works-with-terminate.html
1 <html>
2 <head>
3 <script src="../../resources/js-test.js"></script>
4 <script src="resources/shared.js"></script>
5 </head>
6 <body>
7 <script>
8
9 description("Explicitly terminating worker with blocked call should allow later open calls to proceed");
10
11 function test()
12 {
13     removeVendorPrefixes();
14     setDBNameFromPath();
15     if (self.location.search !== "?second") {
16         firstOpen();
17     } else {
18         secondOpen();
19     }
20 }
21
22 function firstOpen() {
23     request = evalAndLog("indexedDB.deleteDatabase(dbname)");
24     request.onblocked = unexpectedBlockedCallback;
25     request.onerror = unexpectedErrorCallback;
26     request.onsuccess = function() {
27         request = evalAndLog("indexedDB.open(dbname)");
28         request.onblocked = unexpectedBlockedCallback;
29         request.onerror = unexpectedErrorCallback;
30         request.onsuccess = startTheWorker;
31     };
32 }
33
34 function secondOpen() {
35     request = evalAndLog("indexedDB.open(dbname)");
36     request.onblocked = unexpectedBlockedCallback;
37     request.onerror = unexpectedErrorCallback;
38     request.onupgradeneeded = unexpectedUpgradeNeededCallback;
39     request.onsuccess = function() {
40         testPassed("Open worked after page reload.");
41         finishJSTest();
42     };
43 }
44
45 function startTheWorker()
46 {
47     worker = startWorker("resources/pending-version-change-stuck.js?" + encodeURIComponent(dbname));
48     worker.onerror = function(e) {
49         testFailed(e.message);
50         finishJSTest();
51     };
52     originalOnMessage = worker.onmessage;
53     worker.onmessage = function(event) {
54         if (event.data == "gotblocked") {
55             worker.terminate();
56             self.location = self.location + "?second";
57             return;
58         }
59
60         originalOnMessage(event);
61     };
62 }
63
64 test();
65
66 </script>
67 </body>
68 </html>