| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |