OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // This file simulates a typical foreground process of an offline-capable | 5 // This file simulates a typical foreground process of an offline-capable |
6 // authoring application. When in an "offline" state, simulated user actions | 6 // authoring application. When in an "offline" state, simulated user actions |
7 // are recorded for later playback in an IDB data store. When in an "online" | 7 // are recorded for later playback in an IDB data store. When in an "online" |
8 // state, the recorded actions are drained from the store (as if being sent | 8 // state, the recorded actions are drained from the store (as if being sent |
9 // to the server). | 9 // to the server). |
10 | 10 |
11 self.indexedDB = self.indexedDB || self.webkitIndexedDB || | |
12 self.mozIndexedDB; | |
13 self.IDBKeyRange = self.IDBKeyRange || self.webkitIDBKeyRange; | |
14 | |
15 var $ = function(s) { | 11 var $ = function(s) { |
16 return document.querySelector(s); | 12 return document.querySelector(s); |
17 }; | 13 }; |
18 | 14 |
19 function status(message) { | 15 function status(message) { |
20 var elem = $('#status'); | 16 var elem = $('#status'); |
21 while (elem.firstChild) | 17 while (elem.firstChild) |
22 elem.removeChild(elem.firstChild); | 18 elem.removeChild(elem.firstChild); |
23 elem.appendChild(document.createTextNode(message)); | 19 elem.appendChild(document.createTextNode(message)); |
24 } | 20 } |
25 | 21 |
26 function log(message) { | 22 function log(message) { |
27 status(message); | 23 status(message); |
28 } | 24 } |
29 | 25 |
30 function error(message) { | 26 function error(message) { |
31 status(message); | 27 status(message); |
32 console.error(message); | 28 console.error(message); |
33 } | 29 } |
34 | 30 |
35 function unexpectedErrorCallback(e) { | 31 function unexpectedErrorCallback(e) { |
36 error("Unexpected error callback: (" + e.target.error.name + ") " + | 32 error("Unexpected error callback: (" + e.target.error.name + ") " + |
37 e.target.webkitErrorMessage); | 33 e.target.error.message); |
38 } | 34 } |
39 | 35 |
40 function unexpectedAbortCallback(e) { | 36 function unexpectedAbortCallback(e) { |
41 error("Unexpected abort callback: (" + e.target.error.name + ") " + | 37 error("Unexpected abort callback: (" + e.target.error.name + ") " + |
42 e.target.webkitErrorMessage); | 38 e.target.error.message); |
43 } | 39 } |
44 | 40 |
45 function unexpectedBlockedCallback(e) { | 41 function unexpectedBlockedCallback(e) { |
46 error("Unexpected blocked callback!"); | 42 error("Unexpected blocked callback!"); |
47 } | 43 } |
48 | 44 |
49 var DBNAME = 'endurance-db'; | 45 var DBNAME = 'endurance-db'; |
50 var DBVERSION = 1; | 46 var DBVERSION = 1; |
51 var MAX_DOC_ID = 25; | 47 var MAX_DOC_ID = 25; |
52 | 48 |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 }; | 80 }; |
85 }; | 81 }; |
86 } | 82 } |
87 | 83 |
88 var offline = true; | 84 var offline = true; |
89 var worker = new Worker('indexeddb_app_worker.js?cachebust'); | 85 var worker = new Worker('indexeddb_app_worker.js?cachebust'); |
90 worker.onmessage = function (event) { | 86 worker.onmessage = function (event) { |
91 var data = event.data; | 87 var data = event.data; |
92 switch (data.type) { | 88 switch (data.type) { |
93 case 'ABORT': | 89 case 'ABORT': |
94 unexpectedAbortCallback( | 90 unexpectedAbortCallback({target: {error: data.error}}); |
95 {target:{ | |
96 error: data.error, | |
97 webkitErrorMessage: data.webkitErrorMessage}}); | |
98 break; | 91 break; |
99 case 'ERROR': | 92 case 'ERROR': |
100 unexpectedErrorCallback( | 93 unexpectedErrorCallback({target: {error: data.error}}); |
101 {target:{ | |
102 error: data.error, | |
103 webkitErrorMessage: data.webkitErrorMessage}}); | |
104 break; | 94 break; |
105 case 'BLOCKED': | 95 case 'BLOCKED': |
106 unexpectedBlockedCallback( | 96 unexpectedBlockedCallback({target: {error: data.error}}); |
107 {target:{ | |
108 error: data.error, | |
109 webkitErrorMessage: data.webkitErrorMessage}}); | |
110 break; | 97 break; |
111 case 'LOG': | 98 case 'LOG': |
112 log('WORKER: ' + data.message); | 99 log('WORKER: ' + data.message); |
113 break; | 100 break; |
114 case 'ERROR': | 101 case 'ERROR': |
115 error('WORKER: ' + data.message); | 102 error('WORKER: ' + data.message); |
116 break; | 103 break; |
117 } | 104 } |
118 }; | 105 }; |
119 worker.onerror = function (event) { | 106 worker.onerror = function (event) { |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
277 function randomString(len) { | 264 function randomString(len) { |
278 var s = ''; | 265 var s = ''; |
279 while (len--) | 266 while (len--) |
280 s += Math.floor((Math.random() * 36)).toString(36); | 267 s += Math.floor((Math.random() * 36)).toString(36); |
281 return s; | 268 return s; |
282 } | 269 } |
283 | 270 |
284 window.onload = function () { | 271 window.onload = function () { |
285 log("initializing..."); | 272 log("initializing..."); |
286 initdb(); | 273 initdb(); |
287 }; | 274 }; |
OLD | NEW |