Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(991)

Side by Side Diff: third_party/WebKit/LayoutTests/storage/indexeddb/resources/observer.js

Issue 2125213002: [IndexedDB] Propogating changes to observers : Renderer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lifetime
Patch Set: Minor typecasting Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 if (this.importScripts) { 1 if (this.importScripts) {
2 importScripts('../../../resources/testharness.js'); 2 importScripts('../../../resources/testharness.js');
3 importScripts('generic-idb-operations.js');
3 } 4 }
4 5
5 function callback(){}; 6 async_test(function(t) {
7 var dbname = location.pathname + ' - ' + 'empty transaction';
8 var openRequest = indexedDB.open(dbname);
9 var callback_count = 0;
10 var obs = new IDBObserver(t.step_func(function() { callback_count++; }), {oper ationTypes: ['put']});
11
12 openRequest.onupgradeneeded = t.step_func(function() {
13 createDatabase(openRequest.result, ['store']);
14 });
15 openRequest.onsuccess = t.step_func(function() {
16 var db = openRequest.result;
17 var tx1 = db.transaction('store', 'readwrite');
18 var tx2 = db.transaction('store', 'readwrite');
19 obs.observe(db, tx1);
20 tx2.objectStore('store').put(1, 1);
21 tx1.oncomplete = t.step_func(function() {
22 countCallbacks(callback_count, 0);
23 });
24 tx2.oncomplete = t.step_func(function() {
25 countCallbacks(callback_count, 1);
26 t.done();
27 });
28 tx1.onerror = t.unreached_func('transaction should not fail');
29 tx2.onerror = t.unreached_func('transaction should not fail');
30 });
31 }, 'Registering observe call with empty transaction');
6 32
7 async_test(function(t) { 33 async_test(function(t) {
8 var description = 'observer addition and removal test'; 34 var dbname = location.pathname + ' - ' + 'observer in version change';
9 var dbname = location.pathname + ' - ' + description;
10 var openRequest = indexedDB.open(dbname); 35 var openRequest = indexedDB.open(dbname);
11 var obs1 = new IDBObserver(callback, {transaction: true, values: true}); 36 var callback_count = 0;
12 var obs2 = new IDBObserver(callback, {transaction: true, values: true}); 37 var obs;
38 openRequest.onupgradeneeded = t.step_func(function() {
39 createDatabase(openRequest.result, ['store']);
40 obs = new IDBObserver(t.step_func(function(changes) { callback_count++; }) , { operationTypes: ['put'] });
41 });
42 openRequest.onsuccess = t.step_func(function() {
43 var db = openRequest.result;
44 var tx1 = db.transaction('store', 'readwrite');
45 var tx2 = db.transaction('store', 'readwrite');
46 tx1.objectStore('store').get(1);
47 tx2.objectStore('store').put(1, 1);
48 obs.observe(db, tx1);
49 tx1.oncomplete = t.step_func(function() {
50 countCallbacks(callback_count, 0);
51 });
52 tx2.oncomplete = t.step_func(function() {
53 countCallbacks(callback_count, 1);
54 t.done();
55 });
56 tx1.onerror = t.unreached_func('transaction should not fail');
57 tx2.onerror = t.unreached_func('transaction should not fail');
58 });
59 }, 'Create IDBObserver during version change');
13 60
61 async_test(function(t) {
62 var dbname = location.pathname + ' - ' + 'ignore observe call';
63 var openRequest = indexedDB.open(dbname);
64 var callback_count = 0;
65 var obs = new IDBObserver(t.step_func(function() { callback_count++; }), { ope rationTypes: ['put'] });
14 openRequest.onupgradeneeded = t.step_func(function() { 66 openRequest.onupgradeneeded = t.step_func(function() {
15 var db = openRequest.result; 67 var db = openRequest.result;
16 db.createObjectStore('store'); 68 db.createObjectStore('store');
69 obs.observe(db, openRequest.transaction);
17 }); 70 });
18 openRequest.onsuccess = t.step_func(function() { 71 openRequest.onsuccess = t.step_func(function() {
19 var db = openRequest.result; 72 var db = openRequest.result;
20 var tx = db.transaction('store', 'readwrite'); 73 var tx = db.transaction('store', 'readwrite');
21 var store = tx.objectStore('store'); 74 tx.objectStore('store').put(1, 1);
22 var put_request = store.put(1,1); 75 tx.oncomplete = t.step_func(function() {
23 obs1.observe(db, tx); 76 countCallbacks(callback_count, 0);
24 obs1.unobserve(db); 77 t.done();
25 obs1.observe(db, tx); 78 });
26 obs2.observe(db, tx); 79 tx.onerror = t.unreached_func('transaction should not fail');
27 tx.oncomplete = t.step_func(function(){ 80 });
28 obs1.unobserve(db); 81 }, 'Observe call during version change ignored');
29 t.done();
30 });
31 });
32 }, 'observer addition and removal test');
33 82
34 done(); 83 async_test(function(t) {
84 var dbname = location.pathname + ' - ' + 'abort associated transaction';
85 var openRequest = indexedDB.open(dbname);
86 var callback_count = 0;
87 var obs = new IDBObserver(t.step_func(function() { callback_count++; }), { ope rationTypes: ['put'] });
88 openRequest.onupgradeneeded = t.step_func(function() {
89 createDatabase(openRequest.result, ['store']);
90 });
91 openRequest.onsuccess = t.step_func(function() {
92 var db = openRequest.result;
93 var tx1 = db.transaction('store', 'readwrite');
94 var tx2 = db.transaction('store', 'readwrite');
95 tx1.objectStore('store').get(1);
96 tx2.objectStore('store').put(1, 1);
97 obs.observe(db, tx1);
98 tx1.abort();
35 99
100 tx1.onabort = t.step_func(function(){
101 countCallbacks(callback_count, 0);
102 });
103 tx1.oncomplete = t.unreached_func('transaction should not complete');
104 tx2.oncomplete = t.step_func(function() {
105 countCallbacks(callback_count, 0);
106 t.done();
107 });
108 tx2.onerror = t.unreached_func('transaction error should not fail');
109 });
110 }, 'Abort transaction associated with observer');
111
112 async_test(function(t) {
113 var dbname = location.pathname + ' - ' + 'abort transaction';
114 var openRequest = indexedDB.open(dbname);
115 var callback_count = 0;
116 var obs = new IDBObserver(t.step_func(function() { callback_count++; }), { ope rationTypes: ['put'] });
117 openRequest.onupgradeneeded = t.step_func(function() {
118 createDatabase(openRequest.result, ['store']);
119 });
120 openRequest.onsuccess = t.step_func(function() {
121 var db = openRequest.result;
122 var tx1 = db.transaction('store', 'readwrite');
123 var tx2 = db.transaction('store', 'readwrite');
124 var tx3 = db.transaction('store', 'readwrite');
125 tx1.objectStore('store').get(1);
126 tx2.objectStore('store').put(1, 1);
127 tx3.objectStore('store').put(1, 1);
128 obs.observe(db, tx1);
129 tx2.abort();
130 tx1.oncomplete = t.step_func(function() {
131 countCallbacks(callback_count, 0);
132 });
133 tx2.oncomplete = t.unreached_func('transaction should not complete');
134 tx2.onabort = t.step_func(function() {
135 countCallbacks(callback_count, 0);
136 });
137 tx3.oncomplete = t.step_func(function() {
138 countCallbacks(callback_count, 1);
139 t.done();
140 });
141 tx1.onerror = t.unreached_func('transaction should not fail');
142 tx3.onerror = t.unreached_func('transaction should not fail');
143 });
144 }, 'Abort transaction recorded by observer');
145
146 done();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698