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

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: removed extra log statements Created 4 years 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 std::tie(db_, s) = IndexedDBDatabase::Create( 49 std::tie(db_, s) = IndexedDBDatabase::Create(
52 base::ASCIIToUTF16("db"), backing_store_.get(), factory_.get(), 50 base::ASCIIToUTF16("db"), backing_store_.get(), factory_.get(),
53 IndexedDBDatabase::Identifier()); 51 IndexedDBDatabase::Identifier());
54 ASSERT_TRUE(s.ok()); 52 ASSERT_TRUE(s.ok());
55 } 53 }
56 54
57 void RunPostedTasks() { base::RunLoop().RunUntilIdle(); } 55 void RunPostedTasks() { base::RunLoop().RunUntilIdle(); }
58 void DummyOperation(IndexedDBTransaction* transaction) {} 56 leveldb::Status DummyOperation(leveldb::Status result,
59 void AbortableOperation(AbortObserver* observer, 57 IndexedDBTransaction* transaction) {
60 IndexedDBTransaction* transaction) { 58 return result;
59 }
60 leveldb::Status AbortableOperation(AbortObserver* observer,
61 IndexedDBTransaction* transaction) {
61 transaction->ScheduleAbortTask( 62 transaction->ScheduleAbortTask(
62 base::Bind(&AbortObserver::AbortTask, base::Unretained(observer))); 63 base::Bind(&AbortObserver::AbortTask, base::Unretained(observer)));
64 return leveldb::Status::OK();
63 } 65 }
64 66
65 protected: 67 protected:
66 scoped_refptr<IndexedDBFakeBackingStore> backing_store_; 68 scoped_refptr<IndexedDBFakeBackingStore> backing_store_;
67 scoped_refptr<IndexedDBDatabase> db_; 69 scoped_refptr<IndexedDBDatabase> db_;
70 scoped_refptr<MockIndexedDBFactory> factory_;
68 71
69 private: 72 private:
70 scoped_refptr<MockIndexedDBFactory> factory_;
71 TestBrowserThreadBundle thread_bundle_; 73 TestBrowserThreadBundle thread_bundle_;
72 74
73 DISALLOW_COPY_AND_ASSIGN(IndexedDBTransactionTest); 75 DISALLOW_COPY_AND_ASSIGN(IndexedDBTransactionTest);
74 }; 76 };
75 77
76 class IndexedDBTransactionTestMode 78 class IndexedDBTransactionTestMode
77 : public IndexedDBTransactionTest, 79 : public IndexedDBTransactionTest,
78 public testing::WithParamInterface<blink::WebIDBTransactionMode> { 80 public testing::WithParamInterface<blink::WebIDBTransactionMode> {
79 public: 81 public:
80 IndexedDBTransactionTestMode() {} 82 IndexedDBTransactionTestMode() {}
(...skipping 14 matching lines...) Expand all
95 new IndexedDBFakeBackingStore::FakeTransaction(commit_success)); 97 new IndexedDBFakeBackingStore::FakeTransaction(commit_success));
96 db_->TransactionCreated(transaction.get()); 98 db_->TransactionCreated(transaction.get());
97 99
98 // No conflicting transactions, so coordinator will start it immediately: 100 // No conflicting transactions, so coordinator will start it immediately:
99 EXPECT_EQ(IndexedDBTransaction::STARTED, transaction->state()); 101 EXPECT_EQ(IndexedDBTransaction::STARTED, transaction->state());
100 EXPECT_FALSE(transaction->IsTimeoutTimerRunning()); 102 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
101 EXPECT_EQ(0, transaction->diagnostics().tasks_scheduled); 103 EXPECT_EQ(0, transaction->diagnostics().tasks_scheduled);
102 EXPECT_EQ(0, transaction->diagnostics().tasks_completed); 104 EXPECT_EQ(0, transaction->diagnostics().tasks_completed);
103 105
104 // Schedule a task - timer won't be started until it's processed. 106 // Schedule a task - timer won't be started until it's processed.
105 transaction->ScheduleTask(base::Bind( 107 transaction->ScheduleTask(
106 &IndexedDBTransactionTest::DummyOperation, base::Unretained(this))); 108 base::Bind(&IndexedDBTransactionTest::DummyOperation,
109 base::Unretained(this), leveldb::Status::OK()));
107 EXPECT_FALSE(transaction->IsTimeoutTimerRunning()); 110 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
108 EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled); 111 EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled);
109 EXPECT_EQ(0, transaction->diagnostics().tasks_completed); 112 EXPECT_EQ(0, transaction->diagnostics().tasks_completed);
110 113
111 RunPostedTasks(); 114 RunPostedTasks();
112 EXPECT_TRUE(transaction->IsTimeoutTimerRunning()); 115 EXPECT_TRUE(transaction->IsTimeoutTimerRunning());
113 116
114 transaction->Timeout(); 117 transaction->Timeout();
115 EXPECT_EQ(IndexedDBTransaction::FINISHED, transaction->state()); 118 EXPECT_EQ(IndexedDBTransaction::FINISHED, transaction->state());
116 EXPECT_FALSE(transaction->IsTimeoutTimerRunning()); 119 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
117 EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled); 120 EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled);
118 EXPECT_EQ(1, transaction->diagnostics().tasks_completed); 121 EXPECT_EQ(1, transaction->diagnostics().tasks_completed);
119 122
120 // This task will be ignored. 123 // This task will be ignored.
121 transaction->ScheduleTask(base::Bind( 124 transaction->ScheduleTask(
122 &IndexedDBTransactionTest::DummyOperation, base::Unretained(this))); 125 base::Bind(&IndexedDBTransactionTest::DummyOperation,
126 base::Unretained(this), leveldb::Status::OK()));
123 EXPECT_EQ(IndexedDBTransaction::FINISHED, transaction->state()); 127 EXPECT_EQ(IndexedDBTransaction::FINISHED, transaction->state());
124 EXPECT_FALSE(transaction->IsTimeoutTimerRunning()); 128 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
125 EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled); 129 EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled);
126 EXPECT_EQ(1, transaction->diagnostics().tasks_completed); 130 EXPECT_EQ(1, transaction->diagnostics().tasks_completed);
127 } 131 }
128 132
129 TEST_F(IndexedDBTransactionTest, NoTimeoutReadOnly) { 133 TEST_F(IndexedDBTransactionTest, NoTimeoutReadOnly) {
130 const int64_t id = 0; 134 const int64_t id = 0;
131 const std::set<int64_t> scope; 135 const std::set<int64_t> scope;
132 const leveldb::Status commit_success = leveldb::Status::OK(); 136 const leveldb::Status commit_success = leveldb::Status::OK();
133 std::unique_ptr<IndexedDBConnection> connection( 137 std::unique_ptr<IndexedDBConnection> connection(
134 base::MakeUnique<IndexedDBConnection>( 138 base::MakeUnique<IndexedDBConnection>(
135 db_, new MockIndexedDBDatabaseCallbacks())); 139 db_, new MockIndexedDBDatabaseCallbacks()));
136 scoped_refptr<IndexedDBTransaction> transaction = new IndexedDBTransaction( 140 scoped_refptr<IndexedDBTransaction> transaction = new IndexedDBTransaction(
137 id, connection->GetWeakPtr(), scope, blink::WebIDBTransactionModeReadOnly, 141 id, connection->GetWeakPtr(), scope, blink::WebIDBTransactionModeReadOnly,
138 new IndexedDBFakeBackingStore::FakeTransaction(commit_success)); 142 new IndexedDBFakeBackingStore::FakeTransaction(commit_success));
139 db_->TransactionCreated(transaction.get()); 143 db_->TransactionCreated(transaction.get());
140 144
141 // No conflicting transactions, so coordinator will start it immediately: 145 // No conflicting transactions, so coordinator will start it immediately:
142 EXPECT_EQ(IndexedDBTransaction::STARTED, transaction->state()); 146 EXPECT_EQ(IndexedDBTransaction::STARTED, transaction->state());
143 EXPECT_FALSE(transaction->IsTimeoutTimerRunning()); 147 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
144 148
145 // Schedule a task - timer won't be started until it's processed. 149 // Schedule a task - timer won't be started until it's processed.
146 transaction->ScheduleTask(base::Bind( 150 transaction->ScheduleTask(
147 &IndexedDBTransactionTest::DummyOperation, base::Unretained(this))); 151 base::Bind(&IndexedDBTransactionTest::DummyOperation,
152 base::Unretained(this), leveldb::Status::OK()));
148 EXPECT_FALSE(transaction->IsTimeoutTimerRunning()); 153 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
149 154
150 // Transaction is read-only, so no need to time it out. 155 // Transaction is read-only, so no need to time it out.
151 RunPostedTasks(); 156 RunPostedTasks();
152 EXPECT_FALSE(transaction->IsTimeoutTimerRunning()); 157 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
153 158
154 // Clean up to avoid leaks. 159 // Clean up to avoid leaks.
155 transaction->Abort(); 160 transaction->Abort();
156 EXPECT_EQ(IndexedDBTransaction::FINISHED, transaction->state()); 161 EXPECT_EQ(IndexedDBTransaction::FINISHED, transaction->state());
157 EXPECT_FALSE(transaction->IsTimeoutTimerRunning()); 162 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
(...skipping 20 matching lines...) Expand all
178 db_->TransactionCreated(transaction.get()); 183 db_->TransactionCreated(transaction.get());
179 184
180 EXPECT_FALSE(transaction->HasPendingTasks()); 185 EXPECT_FALSE(transaction->HasPendingTasks());
181 EXPECT_TRUE(transaction->IsTaskQueueEmpty()); 186 EXPECT_TRUE(transaction->IsTaskQueueEmpty());
182 EXPECT_TRUE(transaction->task_queue_.empty()); 187 EXPECT_TRUE(transaction->task_queue_.empty());
183 EXPECT_TRUE(transaction->preemptive_task_queue_.empty()); 188 EXPECT_TRUE(transaction->preemptive_task_queue_.empty());
184 189
185 transaction->ScheduleTask( 190 transaction->ScheduleTask(
186 blink::WebIDBTaskTypeNormal, 191 blink::WebIDBTaskTypeNormal,
187 base::Bind(&IndexedDBTransactionTest::DummyOperation, 192 base::Bind(&IndexedDBTransactionTest::DummyOperation,
188 base::Unretained(this))); 193 base::Unretained(this), leveldb::Status::OK()));
189 194
190 EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled); 195 EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled);
191 EXPECT_EQ(0, transaction->diagnostics().tasks_completed); 196 EXPECT_EQ(0, transaction->diagnostics().tasks_completed);
197
198 EXPECT_TRUE(transaction->HasPendingTasks());
199 EXPECT_FALSE(transaction->IsTaskQueueEmpty());
200 EXPECT_FALSE(transaction->task_queue_.empty());
201 EXPECT_TRUE(transaction->preemptive_task_queue_.empty());
202
203 // Pump the message loop so that the transaction completes all pending tasks,
204 // otherwise it will defer the commit.
205 base::RunLoop().RunUntilIdle();
206 EXPECT_FALSE(transaction->HasPendingTasks());
207 EXPECT_TRUE(transaction->IsTaskQueueEmpty());
208 EXPECT_TRUE(transaction->task_queue_.empty());
209 EXPECT_TRUE(transaction->preemptive_task_queue_.empty());
210 EXPECT_EQ(IndexedDBTransaction::STARTED, transaction->state());
211 EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled);
212 EXPECT_EQ(1, transaction->diagnostics().tasks_completed);
213
214 transaction->Commit();
215
216 EXPECT_EQ(IndexedDBTransaction::FINISHED, transaction->state());
217 EXPECT_FALSE(transaction->HasPendingTasks());
218 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
219 EXPECT_TRUE(transaction->IsTaskQueueEmpty());
220 EXPECT_TRUE(transaction->task_queue_.empty());
221 EXPECT_TRUE(transaction->preemptive_task_queue_.empty());
222 EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled);
223 EXPECT_EQ(1, transaction->diagnostics().tasks_completed);
224 }
225
226 TEST_P(IndexedDBTransactionTestMode, TaskFails) {
227 const int64_t id = 0;
228 const std::set<int64_t> scope;
229 const leveldb::Status commit_success = leveldb::Status::OK();
230 std::unique_ptr<IndexedDBConnection> connection(
231 base::MakeUnique<IndexedDBConnection>(
232 db_, new MockIndexedDBDatabaseCallbacks()));
233 scoped_refptr<IndexedDBTransaction> transaction = new IndexedDBTransaction(
234 id, connection->GetWeakPtr(), scope, GetParam(),
235 new IndexedDBFakeBackingStore::FakeTransaction(commit_success));
236
237 EXPECT_FALSE(transaction->HasPendingTasks());
238 EXPECT_TRUE(transaction->IsTaskQueueEmpty());
239 EXPECT_TRUE(transaction->task_queue_.empty());
240 EXPECT_TRUE(transaction->preemptive_task_queue_.empty());
241 EXPECT_EQ(0, transaction->diagnostics().tasks_scheduled);
242 EXPECT_EQ(0, transaction->diagnostics().tasks_completed);
243
244 db_->TransactionCreated(transaction.get());
245
246 EXPECT_FALSE(transaction->HasPendingTasks());
247 EXPECT_TRUE(transaction->IsTaskQueueEmpty());
248 EXPECT_TRUE(transaction->task_queue_.empty());
249 EXPECT_TRUE(transaction->preemptive_task_queue_.empty());
250
251 EXPECT_CALL(*factory_, HandleBackingStoreFailure(testing::_)).Times(1);
252
253 transaction->ScheduleTask(
254 blink::WebIDBTaskTypeNormal,
255 base::Bind(&IndexedDBTransactionTest::DummyOperation,
256 base::Unretained(this), leveldb::Status::IOError("error")));
257
258 EXPECT_EQ(1, transaction->diagnostics().tasks_scheduled);
259 EXPECT_EQ(0, transaction->diagnostics().tasks_completed);
192 260
193 EXPECT_TRUE(transaction->HasPendingTasks()); 261 EXPECT_TRUE(transaction->HasPendingTasks());
194 EXPECT_FALSE(transaction->IsTaskQueueEmpty()); 262 EXPECT_FALSE(transaction->IsTaskQueueEmpty());
195 EXPECT_FALSE(transaction->task_queue_.empty()); 263 EXPECT_FALSE(transaction->task_queue_.empty());
196 EXPECT_TRUE(transaction->preemptive_task_queue_.empty()); 264 EXPECT_TRUE(transaction->preemptive_task_queue_.empty());
197 265
198 // Pump the message loop so that the transaction completes all pending tasks, 266 // Pump the message loop so that the transaction completes all pending tasks,
199 // otherwise it will defer the commit. 267 // otherwise it will defer the commit.
200 base::RunLoop().RunUntilIdle(); 268 base::RunLoop().RunUntilIdle();
201 EXPECT_FALSE(transaction->HasPendingTasks()); 269 EXPECT_FALSE(transaction->HasPendingTasks());
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 db_->TransactionCreated(transaction.get()); 308 db_->TransactionCreated(transaction.get());
241 309
242 EXPECT_FALSE(transaction->HasPendingTasks()); 310 EXPECT_FALSE(transaction->HasPendingTasks());
243 EXPECT_TRUE(transaction->IsTaskQueueEmpty()); 311 EXPECT_TRUE(transaction->IsTaskQueueEmpty());
244 EXPECT_TRUE(transaction->task_queue_.empty()); 312 EXPECT_TRUE(transaction->task_queue_.empty());
245 EXPECT_TRUE(transaction->preemptive_task_queue_.empty()); 313 EXPECT_TRUE(transaction->preemptive_task_queue_.empty());
246 314
247 transaction->ScheduleTask( 315 transaction->ScheduleTask(
248 blink::WebIDBTaskTypePreemptive, 316 blink::WebIDBTaskTypePreemptive,
249 base::Bind(&IndexedDBTransactionTest::DummyOperation, 317 base::Bind(&IndexedDBTransactionTest::DummyOperation,
250 base::Unretained(this))); 318 base::Unretained(this), leveldb::Status::OK()));
251 transaction->AddPreemptiveEvent(); 319 transaction->AddPreemptiveEvent();
252 320
253 EXPECT_TRUE(transaction->HasPendingTasks()); 321 EXPECT_TRUE(transaction->HasPendingTasks());
254 EXPECT_FALSE(transaction->IsTaskQueueEmpty()); 322 EXPECT_FALSE(transaction->IsTaskQueueEmpty());
255 EXPECT_TRUE(transaction->task_queue_.empty()); 323 EXPECT_TRUE(transaction->task_queue_.empty());
256 EXPECT_FALSE(transaction->preemptive_task_queue_.empty()); 324 EXPECT_FALSE(transaction->preemptive_task_queue_.empty());
257 325
258 // Pump the message loop so that the transaction completes all pending tasks, 326 // Pump the message loop so that the transaction completes all pending tasks,
259 // otherwise it will defer the commit. 327 // otherwise it will defer the commit.
260 base::RunLoop().RunUntilIdle(); 328 base::RunLoop().RunUntilIdle();
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 new IndexedDBFakeBackingStore::FakeTransaction(commit_success)); 388 new IndexedDBFakeBackingStore::FakeTransaction(commit_success));
321 db_->TransactionCreated(transaction.get()); 389 db_->TransactionCreated(transaction.get());
322 390
323 // No conflicting transactions, so coordinator will start it immediately: 391 // No conflicting transactions, so coordinator will start it immediately:
324 EXPECT_EQ(IndexedDBTransaction::STARTED, transaction->state()); 392 EXPECT_EQ(IndexedDBTransaction::STARTED, transaction->state());
325 EXPECT_FALSE(transaction->IsTimeoutTimerRunning()); 393 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
326 394
327 transaction->ScheduleTask( 395 transaction->ScheduleTask(
328 blink::WebIDBTaskTypePreemptive, 396 blink::WebIDBTaskTypePreemptive,
329 base::Bind(&IndexedDBTransactionTest::DummyOperation, 397 base::Bind(&IndexedDBTransactionTest::DummyOperation,
330 base::Unretained(this))); 398 base::Unretained(this), leveldb::Status::OK()));
331 EXPECT_EQ(0, transaction->pending_preemptive_events_); 399 EXPECT_EQ(0, transaction->pending_preemptive_events_);
332 transaction->AddPreemptiveEvent(); 400 transaction->AddPreemptiveEvent();
333 EXPECT_EQ(1, transaction->pending_preemptive_events_); 401 EXPECT_EQ(1, transaction->pending_preemptive_events_);
334 402
335 RunPostedTasks(); 403 RunPostedTasks();
336 404
337 transaction->Abort(); 405 transaction->Abort();
338 EXPECT_EQ(IndexedDBTransaction::FINISHED, transaction->state()); 406 EXPECT_EQ(IndexedDBTransaction::FINISHED, transaction->state());
339 EXPECT_FALSE(transaction->IsTimeoutTimerRunning()); 407 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
340 EXPECT_EQ(0, transaction->pending_preemptive_events_); 408 EXPECT_EQ(0, transaction->pending_preemptive_events_);
341 EXPECT_TRUE(transaction->preemptive_task_queue_.empty()); 409 EXPECT_TRUE(transaction->preemptive_task_queue_.empty());
342 EXPECT_TRUE(transaction->task_queue_.empty()); 410 EXPECT_TRUE(transaction->task_queue_.empty());
343 EXPECT_FALSE(transaction->HasPendingTasks()); 411 EXPECT_FALSE(transaction->HasPendingTasks());
344 EXPECT_EQ(transaction->diagnostics().tasks_completed, 412 EXPECT_EQ(transaction->diagnostics().tasks_completed,
345 transaction->diagnostics().tasks_scheduled); 413 transaction->diagnostics().tasks_scheduled);
346 EXPECT_FALSE(transaction->should_process_queue_); 414 EXPECT_FALSE(transaction->should_process_queue_);
347 EXPECT_TRUE(transaction->backing_store_transaction_begun_); 415 EXPECT_TRUE(transaction->backing_store_transaction_begun_);
348 EXPECT_TRUE(transaction->used_); 416 EXPECT_TRUE(transaction->used_);
349 EXPECT_FALSE(transaction->commit_pending_); 417 EXPECT_FALSE(transaction->commit_pending_);
350 418
351 // This task will be ignored. 419 // This task will be ignored.
352 transaction->ScheduleTask(base::Bind( 420 transaction->ScheduleTask(
353 &IndexedDBTransactionTest::DummyOperation, base::Unretained(this))); 421 base::Bind(&IndexedDBTransactionTest::DummyOperation,
422 base::Unretained(this), leveldb::Status::OK()));
354 EXPECT_EQ(IndexedDBTransaction::FINISHED, transaction->state()); 423 EXPECT_EQ(IndexedDBTransaction::FINISHED, transaction->state());
355 EXPECT_FALSE(transaction->IsTimeoutTimerRunning()); 424 EXPECT_FALSE(transaction->IsTimeoutTimerRunning());
356 EXPECT_FALSE(transaction->HasPendingTasks()); 425 EXPECT_FALSE(transaction->HasPendingTasks());
357 EXPECT_EQ(transaction->diagnostics().tasks_completed, 426 EXPECT_EQ(transaction->diagnostics().tasks_completed,
358 transaction->diagnostics().tasks_scheduled); 427 transaction->diagnostics().tasks_scheduled);
359 } 428 }
360 429
361 TEST_F(IndexedDBTransactionTest, IndexedDBObserver) { 430 TEST_F(IndexedDBTransactionTest, IndexedDBObserver) {
362 const int64_t id = 0; 431 const int64_t id = 0;
363 const std::set<int64_t> scope; 432 const std::set<int64_t> scope;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 474
406 static const blink::WebIDBTransactionMode kTestModes[] = { 475 static const blink::WebIDBTransactionMode kTestModes[] = {
407 blink::WebIDBTransactionModeReadOnly, blink::WebIDBTransactionModeReadWrite, 476 blink::WebIDBTransactionModeReadOnly, blink::WebIDBTransactionModeReadWrite,
408 blink::WebIDBTransactionModeVersionChange}; 477 blink::WebIDBTransactionModeVersionChange};
409 478
410 INSTANTIATE_TEST_CASE_P(IndexedDBTransactions, 479 INSTANTIATE_TEST_CASE_P(IndexedDBTransactions,
411 IndexedDBTransactionTestMode, 480 IndexedDBTransactionTestMode,
412 ::testing::ValuesIn(kTestModes)); 481 ::testing::ValuesIn(kTestModes));
413 482
414 } // namespace content 483 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/indexed_db/indexed_db_transaction.cc ('k') | content/browser/indexed_db/indexed_db_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698