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

Side by Side Diff: content/browser/indexed_db/indexed_db_transaction_unittest.cc

Issue 2506773002: [IndexedDB] Integrating failures and corruption with transaction (Closed)
Patch Set: Created 4 years, 1 month 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 // 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 #include "content/browser/indexed_db/indexed_db_transaction.h" 5 #include "content/browser/indexed_db/indexed_db_transaction.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/macros.h" 11 #include "base/macros.h"
12 #include "base/run_loop.h" 12 #include "base/run_loop.h"
13 #include "base/strings/utf_string_conversions.h" 13 #include "base/strings/utf_string_conversions.h"
14 #include "content/browser/indexed_db/indexed_db_connection.h" 14 #include "content/browser/indexed_db/indexed_db_connection.h"
15 #include "content/browser/indexed_db/indexed_db_fake_backing_store.h" 15 #include "content/browser/indexed_db/indexed_db_fake_backing_store.h"
16 #include "content/browser/indexed_db/indexed_db_observer.h" 16 #include "content/browser/indexed_db/indexed_db_observer.h"
17 #include "content/browser/indexed_db/mock_indexed_db_database_callbacks.h" 17 #include "content/browser/indexed_db/mock_indexed_db_database_callbacks.h"
18 #include "content/browser/indexed_db/mock_indexed_db_factory.h" 18 #include "content/browser/indexed_db/mock_indexed_db_factory.h"
19 #include "content/public/test/test_browser_thread_bundle.h" 19 #include "content/public/test/test_browser_thread_bundle.h"
20 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
21 21
22 namespace content { 22 namespace content {
23 23
24 class AbortObserver { 24 class AbortObserver {
25 public: 25 public:
26 AbortObserver() : abort_task_called_(false) {} 26 AbortObserver() : abort_task_called_(false) {}
27 27
28 void AbortTask(IndexedDBTransaction* transaction) { 28 void AbortTask() { abort_task_called_ = true; }
29 abort_task_called_ = true;
30 }
31 29
32 bool abort_task_called() const { return abort_task_called_; } 30 bool abort_task_called() const { return abort_task_called_; }
33 31
34 private: 32 private:
35 bool abort_task_called_; 33 bool abort_task_called_;
36 DISALLOW_COPY_AND_ASSIGN(AbortObserver); 34 DISALLOW_COPY_AND_ASSIGN(AbortObserver);
37 }; 35 };
38 36
39 class IndexedDBTransactionTest : public testing::Test { 37 class IndexedDBTransactionTest : public testing::Test {
40 public: 38 public:
41 IndexedDBTransactionTest() : factory_(new MockIndexedDBFactory()) { 39 IndexedDBTransactionTest() : factory_(new MockIndexedDBFactory()) {
42 backing_store_ = new IndexedDBFakeBackingStore(); 40 backing_store_ = new IndexedDBFakeBackingStore();
43 CreateDB(); 41 CreateDB();
44 } 42 }
45 43
46 void CreateDB() { 44 void CreateDB() {
47 // DB is created here instead of the constructor to workaround a 45 // DB is created here instead of the constructor to workaround a
48 // "peculiarity of C++". More info at 46 // "peculiarity of C++". More info at
49 // https://github.com/google/googletest/blob/master/googletest/docs/FAQ.md#m y-compiler-complains-that-a-constructor-or-destructor-cannot-return-a-value-what s-going-on 47 // https://github.com/google/googletest/blob/master/googletest/docs/FAQ.md#m y-compiler-complains-that-a-constructor-or-destructor-cannot-return-a-value-what s-going-on
50 leveldb::Status s; 48 leveldb::Status s;
51 db_ = IndexedDBDatabase::Create(base::ASCIIToUTF16("db"), 49 db_ = IndexedDBDatabase::Create(base::ASCIIToUTF16("db"),
52 backing_store_.get(), 50 backing_store_.get(),
53 factory_.get(), 51 factory_.get(),
54 IndexedDBDatabase::Identifier(), 52 IndexedDBDatabase::Identifier(),
55 &s); 53 &s);
56 ASSERT_TRUE(s.ok()); 54 ASSERT_TRUE(s.ok());
57 } 55 }
58 56
59 void RunPostedTasks() { base::RunLoop().RunUntilIdle(); } 57 void RunPostedTasks() { base::RunLoop().RunUntilIdle(); }
60 void DummyOperation(IndexedDBTransaction* transaction) {} 58 leveldb::Status DummyOperation(leveldb::Status result,
61 void AbortableOperation(AbortObserver* observer, 59 IndexedDBTransaction* transaction) {
62 IndexedDBTransaction* transaction) { 60 return result;
61 }
62 leveldb::Status AbortableOperation(AbortObserver* observer,
63 IndexedDBTransaction* transaction) {
63 transaction->ScheduleAbortTask( 64 transaction->ScheduleAbortTask(
64 base::Bind(&AbortObserver::AbortTask, base::Unretained(observer))); 65 base::Bind(&AbortObserver::AbortTask, base::Unretained(observer)));
66 return leveldb::Status::OK();
65 } 67 }
66 68
67 protected: 69 protected:
68 scoped_refptr<IndexedDBFakeBackingStore> backing_store_; 70 scoped_refptr<IndexedDBFakeBackingStore> backing_store_;
69 scoped_refptr<IndexedDBDatabase> db_; 71 scoped_refptr<IndexedDBDatabase> db_;
72 scoped_refptr<MockIndexedDBFactory> factory_;
70 73
71 private: 74 private:
72 scoped_refptr<MockIndexedDBFactory> factory_;
73 TestBrowserThreadBundle thread_bundle_; 75 TestBrowserThreadBundle thread_bundle_;
74 76
75 DISALLOW_COPY_AND_ASSIGN(IndexedDBTransactionTest); 77 DISALLOW_COPY_AND_ASSIGN(IndexedDBTransactionTest);
76 }; 78 };
77 79
78 class IndexedDBTransactionTestMode 80 class IndexedDBTransactionTestMode
79 : public IndexedDBTransactionTest, 81 : public IndexedDBTransactionTest,
80 public testing::WithParamInterface<blink::WebIDBTransactionMode> { 82 public testing::WithParamInterface<blink::WebIDBTransactionMode> {
81 public: 83 public:
82 IndexedDBTransactionTestMode() {} 84 IndexedDBTransactionTestMode() {}
(...skipping 14 matching lines...) Expand all
97 new IndexedDBFakeBackingStore::FakeTransaction(commit_success)); 99 new IndexedDBFakeBackingStore::FakeTransaction(commit_success));
98 db_->TransactionCreated(transaction.get()); 100 db_->TransactionCreated(transaction.get());
99 101
100 // No conflicting transactions, so coordinator will start it immediately: 102 // No conflicting transactions, so coordinator will start it immediately:
101 EXPECT_EQ(IndexedDBTransaction::STARTED, transaction->state()); 103 EXPECT_EQ(IndexedDBTransaction::STARTED, transaction->state());
102 EXPECT_FALSE(transaction->IsTimeoutTimerRunning()); 104 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
103 EXPECT_EQ(0, transaction->diagnostics().tasks_scheduled); 105 EXPECT_EQ(0, transaction->diagnostics().tasks_scheduled);
104 EXPECT_EQ(0, transaction->diagnostics().tasks_completed); 106 EXPECT_EQ(0, transaction->diagnostics().tasks_completed);
105 107
106 // Schedule a task - timer won't be started until it's processed. 108 // Schedule a task - timer won't be started until it's processed.
107 transaction->ScheduleTask(base::Bind( 109 transaction->ScheduleTask(
108 &IndexedDBTransactionTest::DummyOperation, base::Unretained(this))); 110 base::Bind(&IndexedDBTransactionTest::DummyOperation,
111 base::Unretained(this), leveldb::Status::OK()));
109 EXPECT_FALSE(transaction->IsTimeoutTimerRunning()); 112 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
110 EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled); 113 EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled);
111 EXPECT_EQ(0, transaction->diagnostics().tasks_completed); 114 EXPECT_EQ(0, transaction->diagnostics().tasks_completed);
112 115
113 RunPostedTasks(); 116 RunPostedTasks();
114 EXPECT_TRUE(transaction->IsTimeoutTimerRunning()); 117 EXPECT_TRUE(transaction->IsTimeoutTimerRunning());
115 118
116 transaction->Timeout(); 119 transaction->Timeout();
117 EXPECT_EQ(IndexedDBTransaction::FINISHED, transaction->state()); 120 EXPECT_EQ(IndexedDBTransaction::FINISHED, transaction->state());
118 EXPECT_FALSE(transaction->IsTimeoutTimerRunning()); 121 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
119 EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled); 122 EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled);
120 EXPECT_EQ(1, transaction->diagnostics().tasks_completed); 123 EXPECT_EQ(1, transaction->diagnostics().tasks_completed);
121 124
122 // This task will be ignored. 125 // This task will be ignored.
123 transaction->ScheduleTask(base::Bind( 126 transaction->ScheduleTask(
124 &IndexedDBTransactionTest::DummyOperation, base::Unretained(this))); 127 base::Bind(&IndexedDBTransactionTest::DummyOperation,
128 base::Unretained(this), leveldb::Status::OK()));
125 EXPECT_EQ(IndexedDBTransaction::FINISHED, transaction->state()); 129 EXPECT_EQ(IndexedDBTransaction::FINISHED, transaction->state());
126 EXPECT_FALSE(transaction->IsTimeoutTimerRunning()); 130 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
127 EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled); 131 EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled);
128 EXPECT_EQ(1, transaction->diagnostics().tasks_completed); 132 EXPECT_EQ(1, transaction->diagnostics().tasks_completed);
129 } 133 }
130 134
131 TEST_F(IndexedDBTransactionTest, NoTimeoutReadOnly) { 135 TEST_F(IndexedDBTransactionTest, NoTimeoutReadOnly) {
132 const int64_t id = 0; 136 const int64_t id = 0;
133 const std::set<int64_t> scope; 137 const std::set<int64_t> scope;
134 const leveldb::Status commit_success = leveldb::Status::OK(); 138 const leveldb::Status commit_success = leveldb::Status::OK();
135 std::unique_ptr<IndexedDBConnection> connection( 139 std::unique_ptr<IndexedDBConnection> connection(
136 base::MakeUnique<IndexedDBConnection>( 140 base::MakeUnique<IndexedDBConnection>(
137 db_, new MockIndexedDBDatabaseCallbacks())); 141 db_, new MockIndexedDBDatabaseCallbacks()));
138 scoped_refptr<IndexedDBTransaction> transaction = new IndexedDBTransaction( 142 scoped_refptr<IndexedDBTransaction> transaction = new IndexedDBTransaction(
139 id, connection->GetWeakPtr(), scope, blink::WebIDBTransactionModeReadOnly, 143 id, connection->GetWeakPtr(), scope, blink::WebIDBTransactionModeReadOnly,
140 new IndexedDBFakeBackingStore::FakeTransaction(commit_success)); 144 new IndexedDBFakeBackingStore::FakeTransaction(commit_success));
141 db_->TransactionCreated(transaction.get()); 145 db_->TransactionCreated(transaction.get());
142 146
143 // No conflicting transactions, so coordinator will start it immediately: 147 // No conflicting transactions, so coordinator will start it immediately:
144 EXPECT_EQ(IndexedDBTransaction::STARTED, transaction->state()); 148 EXPECT_EQ(IndexedDBTransaction::STARTED, transaction->state());
145 EXPECT_FALSE(transaction->IsTimeoutTimerRunning()); 149 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
146 150
147 // Schedule a task - timer won't be started until it's processed. 151 // Schedule a task - timer won't be started until it's processed.
148 transaction->ScheduleTask(base::Bind( 152 transaction->ScheduleTask(
149 &IndexedDBTransactionTest::DummyOperation, base::Unretained(this))); 153 base::Bind(&IndexedDBTransactionTest::DummyOperation,
154 base::Unretained(this), leveldb::Status::OK()));
150 EXPECT_FALSE(transaction->IsTimeoutTimerRunning()); 155 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
151 156
152 // Transaction is read-only, so no need to time it out. 157 // Transaction is read-only, so no need to time it out.
153 RunPostedTasks(); 158 RunPostedTasks();
154 EXPECT_FALSE(transaction->IsTimeoutTimerRunning()); 159 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
155 160
156 // Clean up to avoid leaks. 161 // Clean up to avoid leaks.
157 transaction->Abort(); 162 transaction->Abort();
158 EXPECT_EQ(IndexedDBTransaction::FINISHED, transaction->state()); 163 EXPECT_EQ(IndexedDBTransaction::FINISHED, transaction->state());
159 EXPECT_FALSE(transaction->IsTimeoutTimerRunning()); 164 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
(...skipping 20 matching lines...) Expand all
180 db_->TransactionCreated(transaction.get()); 185 db_->TransactionCreated(transaction.get());
181 186
182 EXPECT_FALSE(transaction->HasPendingTasks()); 187 EXPECT_FALSE(transaction->HasPendingTasks());
183 EXPECT_TRUE(transaction->IsTaskQueueEmpty()); 188 EXPECT_TRUE(transaction->IsTaskQueueEmpty());
184 EXPECT_TRUE(transaction->task_queue_.empty()); 189 EXPECT_TRUE(transaction->task_queue_.empty());
185 EXPECT_TRUE(transaction->preemptive_task_queue_.empty()); 190 EXPECT_TRUE(transaction->preemptive_task_queue_.empty());
186 191
187 transaction->ScheduleTask( 192 transaction->ScheduleTask(
188 blink::WebIDBTaskTypeNormal, 193 blink::WebIDBTaskTypeNormal,
189 base::Bind(&IndexedDBTransactionTest::DummyOperation, 194 base::Bind(&IndexedDBTransactionTest::DummyOperation,
190 base::Unretained(this))); 195 base::Unretained(this), leveldb::Status::OK()));
191 196
192 EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled); 197 EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled);
193 EXPECT_EQ(0, transaction->diagnostics().tasks_completed); 198 EXPECT_EQ(0, transaction->diagnostics().tasks_completed);
199
200 EXPECT_TRUE(transaction->HasPendingTasks());
201 EXPECT_FALSE(transaction->IsTaskQueueEmpty());
202 EXPECT_FALSE(transaction->task_queue_.empty());
203 EXPECT_TRUE(transaction->preemptive_task_queue_.empty());
204
205 // Pump the message loop so that the transaction completes all pending tasks,
206 // otherwise it will defer the commit.
207 base::RunLoop().RunUntilIdle();
208 EXPECT_FALSE(transaction->HasPendingTasks());
209 EXPECT_TRUE(transaction->IsTaskQueueEmpty());
210 EXPECT_TRUE(transaction->task_queue_.empty());
211 EXPECT_TRUE(transaction->preemptive_task_queue_.empty());
212 EXPECT_EQ(IndexedDBTransaction::STARTED, transaction->state());
213 EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled);
214 EXPECT_EQ(1, transaction->diagnostics().tasks_completed);
215
216 transaction->Commit();
217
218 EXPECT_EQ(IndexedDBTransaction::FINISHED, transaction->state());
219 EXPECT_FALSE(transaction->HasPendingTasks());
220 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
221 EXPECT_TRUE(transaction->IsTaskQueueEmpty());
222 EXPECT_TRUE(transaction->task_queue_.empty());
223 EXPECT_TRUE(transaction->preemptive_task_queue_.empty());
224 EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled);
225 EXPECT_EQ(1, transaction->diagnostics().tasks_completed);
226 }
227
228 TEST_P(IndexedDBTransactionTestMode, TaskFails) {
229 const int64_t id = 0;
230 const std::set<int64_t> scope;
231 const leveldb::Status commit_success = leveldb::Status::OK();
232 std::unique_ptr<IndexedDBConnection> connection(
233 base::MakeUnique<IndexedDBConnection>(
234 db_, new MockIndexedDBDatabaseCallbacks()));
235 scoped_refptr<IndexedDBTransaction> transaction = new IndexedDBTransaction(
236 id, connection->GetWeakPtr(), scope, GetParam(),
237 new IndexedDBFakeBackingStore::FakeTransaction(commit_success));
238
239 EXPECT_FALSE(transaction->HasPendingTasks());
240 EXPECT_TRUE(transaction->IsTaskQueueEmpty());
241 EXPECT_TRUE(transaction->task_queue_.empty());
242 EXPECT_TRUE(transaction->preemptive_task_queue_.empty());
243 EXPECT_EQ(0, transaction->diagnostics().tasks_scheduled);
244 EXPECT_EQ(0, transaction->diagnostics().tasks_completed);
245
246 db_->TransactionCreated(transaction.get());
247
248 EXPECT_FALSE(transaction->HasPendingTasks());
249 EXPECT_TRUE(transaction->IsTaskQueueEmpty());
250 EXPECT_TRUE(transaction->task_queue_.empty());
251 EXPECT_TRUE(transaction->preemptive_task_queue_.empty());
252
253 EXPECT_CALL(*factory_, HandleBackingStoreFailure(testing::_)).Times(1);
254
255 transaction->ScheduleTask(
256 blink::WebIDBTaskTypeNormal,
257 base::Bind(&IndexedDBTransactionTest::DummyOperation,
258 base::Unretained(this), leveldb::Status::IOError("error")));
259
260 EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled);
261 EXPECT_EQ(0, transaction->diagnostics().tasks_completed);
194 262
195 EXPECT_TRUE(transaction->HasPendingTasks()); 263 EXPECT_TRUE(transaction->HasPendingTasks());
196 EXPECT_FALSE(transaction->IsTaskQueueEmpty()); 264 EXPECT_FALSE(transaction->IsTaskQueueEmpty());
197 EXPECT_FALSE(transaction->task_queue_.empty()); 265 EXPECT_FALSE(transaction->task_queue_.empty());
198 EXPECT_TRUE(transaction->preemptive_task_queue_.empty()); 266 EXPECT_TRUE(transaction->preemptive_task_queue_.empty());
199 267
200 // Pump the message loop so that the transaction completes all pending tasks, 268 // Pump the message loop so that the transaction completes all pending tasks,
201 // otherwise it will defer the commit. 269 // otherwise it will defer the commit.
202 base::RunLoop().RunUntilIdle(); 270 base::RunLoop().RunUntilIdle();
203 EXPECT_FALSE(transaction->HasPendingTasks()); 271 EXPECT_FALSE(transaction->HasPendingTasks());
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 db_->TransactionCreated(transaction.get()); 310 db_->TransactionCreated(transaction.get());
243 311
244 EXPECT_FALSE(transaction->HasPendingTasks()); 312 EXPECT_FALSE(transaction->HasPendingTasks());
245 EXPECT_TRUE(transaction->IsTaskQueueEmpty()); 313 EXPECT_TRUE(transaction->IsTaskQueueEmpty());
246 EXPECT_TRUE(transaction->task_queue_.empty()); 314 EXPECT_TRUE(transaction->task_queue_.empty());
247 EXPECT_TRUE(transaction->preemptive_task_queue_.empty()); 315 EXPECT_TRUE(transaction->preemptive_task_queue_.empty());
248 316
249 transaction->ScheduleTask( 317 transaction->ScheduleTask(
250 blink::WebIDBTaskTypePreemptive, 318 blink::WebIDBTaskTypePreemptive,
251 base::Bind(&IndexedDBTransactionTest::DummyOperation, 319 base::Bind(&IndexedDBTransactionTest::DummyOperation,
252 base::Unretained(this))); 320 base::Unretained(this), leveldb::Status::OK()));
253 transaction->AddPreemptiveEvent(); 321 transaction->AddPreemptiveEvent();
254 322
255 EXPECT_TRUE(transaction->HasPendingTasks()); 323 EXPECT_TRUE(transaction->HasPendingTasks());
256 EXPECT_FALSE(transaction->IsTaskQueueEmpty()); 324 EXPECT_FALSE(transaction->IsTaskQueueEmpty());
257 EXPECT_TRUE(transaction->task_queue_.empty()); 325 EXPECT_TRUE(transaction->task_queue_.empty());
258 EXPECT_FALSE(transaction->preemptive_task_queue_.empty()); 326 EXPECT_FALSE(transaction->preemptive_task_queue_.empty());
259 327
260 // Pump the message loop so that the transaction completes all pending tasks, 328 // Pump the message loop so that the transaction completes all pending tasks,
261 // otherwise it will defer the commit. 329 // otherwise it will defer the commit.
262 base::RunLoop().RunUntilIdle(); 330 base::RunLoop().RunUntilIdle();
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 new IndexedDBFakeBackingStore::FakeTransaction(commit_success)); 390 new IndexedDBFakeBackingStore::FakeTransaction(commit_success));
323 db_->TransactionCreated(transaction.get()); 391 db_->TransactionCreated(transaction.get());
324 392
325 // No conflicting transactions, so coordinator will start it immediately: 393 // No conflicting transactions, so coordinator will start it immediately:
326 EXPECT_EQ(IndexedDBTransaction::STARTED, transaction->state()); 394 EXPECT_EQ(IndexedDBTransaction::STARTED, transaction->state());
327 EXPECT_FALSE(transaction->IsTimeoutTimerRunning()); 395 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
328 396
329 transaction->ScheduleTask( 397 transaction->ScheduleTask(
330 blink::WebIDBTaskTypePreemptive, 398 blink::WebIDBTaskTypePreemptive,
331 base::Bind(&IndexedDBTransactionTest::DummyOperation, 399 base::Bind(&IndexedDBTransactionTest::DummyOperation,
332 base::Unretained(this))); 400 base::Unretained(this), leveldb::Status::OK()));
333 EXPECT_EQ(0, transaction->pending_preemptive_events_); 401 EXPECT_EQ(0, transaction->pending_preemptive_events_);
334 transaction->AddPreemptiveEvent(); 402 transaction->AddPreemptiveEvent();
335 EXPECT_EQ(1, transaction->pending_preemptive_events_); 403 EXPECT_EQ(1, transaction->pending_preemptive_events_);
336 404
337 RunPostedTasks(); 405 RunPostedTasks();
338 406
339 transaction->Abort(); 407 transaction->Abort();
340 EXPECT_EQ(IndexedDBTransaction::FINISHED, transaction->state()); 408 EXPECT_EQ(IndexedDBTransaction::FINISHED, transaction->state());
341 EXPECT_FALSE(transaction->IsTimeoutTimerRunning()); 409 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
342 EXPECT_EQ(0, transaction->pending_preemptive_events_); 410 EXPECT_EQ(0, transaction->pending_preemptive_events_);
343 EXPECT_TRUE(transaction->preemptive_task_queue_.empty()); 411 EXPECT_TRUE(transaction->preemptive_task_queue_.empty());
344 EXPECT_TRUE(transaction->task_queue_.empty()); 412 EXPECT_TRUE(transaction->task_queue_.empty());
345 EXPECT_FALSE(transaction->HasPendingTasks()); 413 EXPECT_FALSE(transaction->HasPendingTasks());
346 EXPECT_EQ(transaction->diagnostics().tasks_completed, 414 EXPECT_EQ(transaction->diagnostics().tasks_completed,
347 transaction->diagnostics().tasks_scheduled); 415 transaction->diagnostics().tasks_scheduled);
348 EXPECT_FALSE(transaction->should_process_queue_); 416 EXPECT_FALSE(transaction->should_process_queue_);
349 EXPECT_TRUE(transaction->backing_store_transaction_begun_); 417 EXPECT_TRUE(transaction->backing_store_transaction_begun_);
350 EXPECT_TRUE(transaction->used_); 418 EXPECT_TRUE(transaction->used_);
351 EXPECT_FALSE(transaction->commit_pending_); 419 EXPECT_FALSE(transaction->commit_pending_);
352 420
353 // This task will be ignored. 421 // This task will be ignored.
354 transaction->ScheduleTask(base::Bind( 422 transaction->ScheduleTask(
355 &IndexedDBTransactionTest::DummyOperation, base::Unretained(this))); 423 base::Bind(&IndexedDBTransactionTest::DummyOperation,
424 base::Unretained(this), leveldb::Status::OK()));
356 EXPECT_EQ(IndexedDBTransaction::FINISHED, transaction->state()); 425 EXPECT_EQ(IndexedDBTransaction::FINISHED, transaction->state());
357 EXPECT_FALSE(transaction->IsTimeoutTimerRunning()); 426 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
358 EXPECT_FALSE(transaction->HasPendingTasks()); 427 EXPECT_FALSE(transaction->HasPendingTasks());
359 EXPECT_EQ(transaction->diagnostics().tasks_completed, 428 EXPECT_EQ(transaction->diagnostics().tasks_completed,
360 transaction->diagnostics().tasks_scheduled); 429 transaction->diagnostics().tasks_scheduled);
361 } 430 }
362 431
363 TEST_F(IndexedDBTransactionTest, IndexedDBObserver) { 432 TEST_F(IndexedDBTransactionTest, IndexedDBObserver) {
364 const int64_t id = 0; 433 const int64_t id = 0;
365 const std::set<int64_t> scope; 434 const std::set<int64_t> scope;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 476
408 static const blink::WebIDBTransactionMode kTestModes[] = { 477 static const blink::WebIDBTransactionMode kTestModes[] = {
409 blink::WebIDBTransactionModeReadOnly, blink::WebIDBTransactionModeReadWrite, 478 blink::WebIDBTransactionModeReadOnly, blink::WebIDBTransactionModeReadWrite,
410 blink::WebIDBTransactionModeVersionChange}; 479 blink::WebIDBTransactionModeVersionChange};
411 480
412 INSTANTIATE_TEST_CASE_P(IndexedDBTransactions, 481 INSTANTIATE_TEST_CASE_P(IndexedDBTransactions,
413 IndexedDBTransactionTestMode, 482 IndexedDBTransactionTestMode,
414 ::testing::ValuesIn(kTestModes)); 483 ::testing::ValuesIn(kTestModes));
415 484
416 } // namespace content 485 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698