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

Side by Side Diff: third_party/WebKit/Source/modules/indexeddb/IDBTransaction.cpp

Issue 2583093002: Reduce SuspendableObjects (Closed)
Patch Set: 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 /* 1 /*
2 * Copyright (C) 2010 Google Inc. All rights reserved. 2 * Copyright (C) 2010 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright 10 * 2. Redistributions in binary form must reproduce the above copyright
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 49
50 IDBTransaction* IDBTransaction::createNonVersionChange( 50 IDBTransaction* IDBTransaction::createNonVersionChange(
51 ScriptState* scriptState, 51 ScriptState* scriptState,
52 int64_t id, 52 int64_t id,
53 const HashSet<String>& scope, 53 const HashSet<String>& scope,
54 WebIDBTransactionMode mode, 54 WebIDBTransactionMode mode,
55 IDBDatabase* db) { 55 IDBDatabase* db) {
56 DCHECK_NE(mode, WebIDBTransactionModeVersionChange); 56 DCHECK_NE(mode, WebIDBTransactionModeVersionChange);
57 DCHECK(!scope.isEmpty()) << "Non-version transactions should operate on a " 57 DCHECK(!scope.isEmpty()) << "Non-version transactions should operate on a "
58 "well-defined set of stores"; 58 "well-defined set of stores";
59 IDBTransaction* transaction = 59 return new IDBTransaction(scriptState, id, scope, mode, db);
60 new IDBTransaction(scriptState, id, scope, mode, db);
61 transaction->suspendIfNeeded();
62 return transaction;
63 } 60 }
64 61
65 IDBTransaction* IDBTransaction::createVersionChange( 62 IDBTransaction* IDBTransaction::createVersionChange(
66 ExecutionContext* executionContext, 63 ExecutionContext* executionContext,
67 int64_t id, 64 int64_t id,
68 IDBDatabase* db, 65 IDBDatabase* db,
69 IDBOpenDBRequest* openDBRequest, 66 IDBOpenDBRequest* openDBRequest,
70 const IDBDatabaseMetadata& oldMetadata) { 67 const IDBDatabaseMetadata& oldMetadata) {
71 IDBTransaction* transaction = 68 return new IDBTransaction(executionContext, id, db, openDBRequest,
72 new IDBTransaction(executionContext, id, db, openDBRequest, oldMetadata); 69 oldMetadata);
73 transaction->suspendIfNeeded();
74 return transaction;
75 } 70 }
76 71
77 namespace { 72 namespace {
78 73
79 class DeactivateTransactionTask : public V8PerIsolateData::EndOfScopeTask { 74 class DeactivateTransactionTask : public V8PerIsolateData::EndOfScopeTask {
80 public: 75 public:
81 static std::unique_ptr<DeactivateTransactionTask> create( 76 static std::unique_ptr<DeactivateTransactionTask> create(
82 IDBTransaction* transaction) { 77 IDBTransaction* transaction) {
83 return WTF::wrapUnique(new DeactivateTransactionTask(transaction)); 78 return WTF::wrapUnique(new DeactivateTransactionTask(transaction));
84 } 79 }
(...skipping 10 matching lines...) Expand all
95 Persistent<IDBTransaction> m_transaction; 90 Persistent<IDBTransaction> m_transaction;
96 }; 91 };
97 92
98 } // namespace 93 } // namespace
99 94
100 IDBTransaction::IDBTransaction(ScriptState* scriptState, 95 IDBTransaction::IDBTransaction(ScriptState* scriptState,
101 int64_t id, 96 int64_t id,
102 const HashSet<String>& scope, 97 const HashSet<String>& scope,
103 WebIDBTransactionMode mode, 98 WebIDBTransactionMode mode,
104 IDBDatabase* db) 99 IDBDatabase* db)
105 : SuspendableObject(scriptState->getExecutionContext()), 100 : ContextLifecycleObserver(scriptState->getExecutionContext()),
106 m_id(id), 101 m_id(id),
107 m_database(db), 102 m_database(db),
108 m_mode(mode), 103 m_mode(mode),
109 m_scope(scope) { 104 m_scope(scope) {
110 DCHECK(m_database); 105 DCHECK(m_database);
111 DCHECK(!m_scope.isEmpty()) << "Non-versionchange transactions must operate " 106 DCHECK(!m_scope.isEmpty()) << "Non-versionchange transactions must operate "
112 "on a well-defined set of stores"; 107 "on a well-defined set of stores";
113 DCHECK(m_mode == WebIDBTransactionModeReadOnly || 108 DCHECK(m_mode == WebIDBTransactionModeReadOnly ||
114 m_mode == WebIDBTransactionModeReadWrite) 109 m_mode == WebIDBTransactionModeReadWrite)
115 << "Invalid transaction mode"; 110 << "Invalid transaction mode";
116 111
117 DCHECK_EQ(m_state, Active); 112 DCHECK_EQ(m_state, Active);
118 V8PerIsolateData::from(scriptState->isolate()) 113 V8PerIsolateData::from(scriptState->isolate())
119 ->addEndOfScopeTask(DeactivateTransactionTask::create(this)); 114 ->addEndOfScopeTask(DeactivateTransactionTask::create(this));
120 115
121 m_database->transactionCreated(this); 116 m_database->transactionCreated(this);
122 } 117 }
123 118
124 IDBTransaction::IDBTransaction(ExecutionContext* executionContext, 119 IDBTransaction::IDBTransaction(ExecutionContext* executionContext,
125 int64_t id, 120 int64_t id,
126 IDBDatabase* db, 121 IDBDatabase* db,
127 IDBOpenDBRequest* openDBRequest, 122 IDBOpenDBRequest* openDBRequest,
128 const IDBDatabaseMetadata& oldMetadata) 123 const IDBDatabaseMetadata& oldMetadata)
129 : SuspendableObject(executionContext), 124 : ContextLifecycleObserver(executionContext),
130 m_id(id), 125 m_id(id),
131 m_database(db), 126 m_database(db),
132 m_openDBRequest(openDBRequest), 127 m_openDBRequest(openDBRequest),
133 m_mode(WebIDBTransactionModeVersionChange), 128 m_mode(WebIDBTransactionModeVersionChange),
134 m_state(Inactive), 129 m_state(Inactive),
135 m_oldDatabaseMetadata(oldMetadata) { 130 m_oldDatabaseMetadata(oldMetadata) {
136 DCHECK(m_database); 131 DCHECK(m_database);
137 DCHECK(m_openDBRequest); 132 DCHECK(m_openDBRequest);
138 DCHECK(m_scope.isEmpty()); 133 DCHECK(m_scope.isEmpty());
139 134
140 m_database->transactionCreated(this); 135 m_database->transactionCreated(this);
141 } 136 }
142 137
143 IDBTransaction::~IDBTransaction() { 138 IDBTransaction::~IDBTransaction() {
144 DCHECK(m_state == Finished || !getExecutionContext()); 139 DCHECK(m_state == Finished || !getExecutionContext());
145 DCHECK(m_requestList.isEmpty() || !getExecutionContext()); 140 DCHECK(m_requestList.isEmpty() || !getExecutionContext());
146 } 141 }
147 142
148 DEFINE_TRACE(IDBTransaction) { 143 DEFINE_TRACE(IDBTransaction) {
149 visitor->trace(m_database); 144 visitor->trace(m_database);
150 visitor->trace(m_openDBRequest); 145 visitor->trace(m_openDBRequest);
151 visitor->trace(m_error); 146 visitor->trace(m_error);
152 visitor->trace(m_requestList); 147 visitor->trace(m_requestList);
153 visitor->trace(m_objectStoreMap); 148 visitor->trace(m_objectStoreMap);
154 visitor->trace(m_oldStoreMetadata); 149 visitor->trace(m_oldStoreMetadata);
155 visitor->trace(m_deletedIndexes); 150 visitor->trace(m_deletedIndexes);
156 EventTargetWithInlineData::trace(visitor); 151 EventTargetWithInlineData::trace(visitor);
157 SuspendableObject::trace(visitor); 152 ContextLifecycleObserver::trace(visitor);
158 } 153 }
159 154
160 void IDBTransaction::setError(DOMException* error) { 155 void IDBTransaction::setError(DOMException* error) {
161 DCHECK_NE(m_state, Finished); 156 DCHECK_NE(m_state, Finished);
162 DCHECK(error); 157 DCHECK(error);
163 158
164 // The first error to be set is the true cause of the 159 // The first error to be set is the true cause of the
165 // transaction abort. 160 // transaction abort.
166 if (!m_error) 161 if (!m_error)
167 m_error = error; 162 m_error = error;
(...skipping 282 matching lines...) Expand 10 before | Expand all | Expand 10 after
450 objectStoreNames->append(objectStoreName); 445 objectStoreNames->append(objectStoreName);
451 objectStoreNames->sort(); 446 objectStoreNames->sort();
452 return objectStoreNames; 447 return objectStoreNames;
453 } 448 }
454 449
455 const AtomicString& IDBTransaction::interfaceName() const { 450 const AtomicString& IDBTransaction::interfaceName() const {
456 return EventTargetNames::IDBTransaction; 451 return EventTargetNames::IDBTransaction;
457 } 452 }
458 453
459 ExecutionContext* IDBTransaction::getExecutionContext() const { 454 ExecutionContext* IDBTransaction::getExecutionContext() const {
460 return SuspendableObject::getExecutionContext(); 455 return ContextLifecycleObserver::getExecutionContext();
461 } 456 }
462 457
463 DispatchEventResult IDBTransaction::dispatchEventInternal(Event* event) { 458 DispatchEventResult IDBTransaction::dispatchEventInternal(Event* event) {
464 IDB_TRACE("IDBTransaction::dispatchEvent"); 459 IDB_TRACE("IDBTransaction::dispatchEvent");
465 if (!getExecutionContext()) { 460 if (!getExecutionContext()) {
466 m_state = Finished; 461 m_state = Finished;
467 return DispatchEventResult::CanceledBeforeDispatch; 462 return DispatchEventResult::CanceledBeforeDispatch;
468 } 463 }
469 DCHECK_NE(m_state, Finished); 464 DCHECK_NE(m_state, Finished);
470 DCHECK(m_hasPendingActivity); 465 DCHECK(m_hasPendingActivity);
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
573 IDBObjectStore* objectStore = it.key; 568 IDBObjectStore* objectStore = it.key;
574 objectStore->clearIndexCache(); 569 objectStore->clearIndexCache();
575 } 570 }
576 m_oldStoreMetadata.clear(); 571 m_oldStoreMetadata.clear();
577 572
578 m_deletedIndexes.clear(); 573 m_deletedIndexes.clear();
579 m_deletedObjectStores.clear(); 574 m_deletedObjectStores.clear();
580 } 575 }
581 576
582 } // namespace blink 577 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698