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

Side by Side Diff: Source/modules/indexeddb/IDBOpenDBRequest.cpp

Issue 78053006: [oilpan] Move IDBDatabase, IDBDatabaseCallbacks, IDBDatabaseBackendInterface and other related clas… (Closed) Base URL: svn://svn.chromium.org/blink/branches/oilpan
Patch Set: Created 7 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 | Annotate | Revision Log
« no previous file with comments | « Source/modules/indexeddb/IDBOpenDBRequest.h ('k') | Source/modules/indexeddb/IDBRequest.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 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 17 matching lines...) Expand all
28 28
29 #include "core/dom/ScriptExecutionContext.h" 29 #include "core/dom/ScriptExecutionContext.h"
30 #include "modules/indexeddb/IDBDatabase.h" 30 #include "modules/indexeddb/IDBDatabase.h"
31 #include "modules/indexeddb/IDBDatabaseCallbacksImpl.h" 31 #include "modules/indexeddb/IDBDatabaseCallbacksImpl.h"
32 #include "modules/indexeddb/IDBPendingTransactionMonitor.h" 32 #include "modules/indexeddb/IDBPendingTransactionMonitor.h"
33 #include "modules/indexeddb/IDBTracing.h" 33 #include "modules/indexeddb/IDBTracing.h"
34 #include "modules/indexeddb/IDBVersionChangeEvent.h" 34 #include "modules/indexeddb/IDBVersionChangeEvent.h"
35 35
36 namespace WebCore { 36 namespace WebCore {
37 37
38 PassRefPtr<IDBOpenDBRequest> IDBOpenDBRequest::create(ScriptExecutionContext* co ntext, PassRefPtr<IDBDatabaseCallbacksImpl> callbacks, int64_t transactionId, in t64_t version) 38 IDBOpenDBRequest* IDBOpenDBRequest::create(ScriptExecutionContext* context, IDBD atabaseCallbacksImpl* callbacks, int64_t transactionId, int64_t version)
39 { 39 {
40 RefPtr<IDBOpenDBRequest> request(adoptRef(new IDBOpenDBRequest(context, call backs, transactionId, version))); 40 IDBOpenDBRequest* request = new IDBOpenDBRequest(context, callbacks, transac tionId, version);
41 request->suspendIfNeeded(); 41 request->suspendIfNeeded();
42 return request.release(); 42 return request;
43 } 43 }
44 44
45 IDBOpenDBRequest::IDBOpenDBRequest(ScriptExecutionContext* context, PassRefPtr<I DBDatabaseCallbacksImpl> callbacks, int64_t transactionId, int64_t version) 45 IDBOpenDBRequest::IDBOpenDBRequest(ScriptExecutionContext* context, IDBDatabaseC allbacksImpl* callbacks, int64_t transactionId, int64_t version)
46 : IDBRequest(context, IDBAny::createNull(), IDBDatabaseBackendInterface::Nor malTask, 0) 46 : IDBRequest(context, IDBAny::createNull(), IDBDatabaseBackendInterface::Nor malTask, 0)
47 , m_databaseCallbacks(callbacks) 47 , m_databaseCallbacks(callbacks)
48 , m_transactionId(transactionId) 48 , m_transactionId(transactionId)
49 , m_version(version) 49 , m_version(version)
50 { 50 {
51 ASSERT(!m_result); 51 ASSERT(!m_result);
52 ScriptWrappable::init(this); 52 ScriptWrappable::init(this);
53 } 53 }
54 54
55 IDBOpenDBRequest::~IDBOpenDBRequest() 55 IDBOpenDBRequest::~IDBOpenDBRequest()
56 { 56 {
57 } 57 }
58 58
59 const AtomicString& IDBOpenDBRequest::interfaceName() const 59 const AtomicString& IDBOpenDBRequest::interfaceName() const
60 { 60 {
61 return eventNames().interfaceForIDBOpenDBRequest; 61 return eventNames().interfaceForIDBOpenDBRequest;
62 } 62 }
63 63
64 void IDBOpenDBRequest::onBlocked(int64_t oldVersion) 64 void IDBOpenDBRequest::onBlocked(int64_t oldVersion)
65 { 65 {
66 IDB_TRACE("IDBOpenDBRequest::onBlocked()"); 66 IDB_TRACE("IDBOpenDBRequest::onBlocked()");
67 if (!shouldEnqueueEvent()) 67 if (!shouldEnqueueEvent())
68 return; 68 return;
69 RefPtr<IDBAny> newVersionAny = (m_version == IDBDatabaseMetadata::DefaultInt Version) ? IDBAny::createNull() : IDBAny::create(m_version); 69 RefPtr<IDBAny> newVersionAny = (m_version == IDBDatabaseMetadata::DefaultInt Version) ? IDBAny::createNull() : IDBAny::create(m_version);
70 enqueueEvent(IDBVersionChangeEvent::create(IDBAny::create(oldVersion), newVe rsionAny.release(), eventNames().blockedEvent)); 70 enqueueEvent(IDBVersionChangeEvent::create(IDBAny::create(oldVersion), newVe rsionAny.release(), eventNames().blockedEvent));
71 } 71 }
72 72
73 void IDBOpenDBRequest::onUpgradeNeeded(int64_t oldVersion, PassRefPtr<IDBDatabas eBackendInterface> prpDatabaseBackend, const IDBDatabaseMetadata& metadata) 73 void IDBOpenDBRequest::onUpgradeNeeded(int64_t oldVersion, IDBDatabaseBackendInt erface* databaseBackend, const IDBDatabaseMetadata& metadata)
74 { 74 {
75 IDB_TRACE("IDBOpenDBRequest::onUpgradeNeeded()"); 75 IDB_TRACE("IDBOpenDBRequest::onUpgradeNeeded()");
76 if (m_contextStopped || !scriptExecutionContext()) { 76 if (m_contextStopped || !scriptExecutionContext()) {
77 RefPtr<IDBDatabaseBackendInterface> db = prpDatabaseBackend; 77 databaseBackend->abort(m_transactionId);
78 db->abort(m_transactionId); 78 databaseBackend->close(m_databaseCallbacks);
79 db->close(m_databaseCallbacks);
80 return; 79 return;
81 } 80 }
82 if (!shouldEnqueueEvent()) 81 if (!shouldEnqueueEvent())
83 return; 82 return;
84 83
85 ASSERT(m_databaseCallbacks); 84 ASSERT(m_databaseCallbacks);
86 85
87 RefPtr<IDBDatabaseBackendInterface> databaseBackend = prpDatabaseBackend; 86 IDBDatabase* idbDatabase = IDBDatabase::create(scriptExecutionContext(), dat abaseBackend, m_databaseCallbacks);
88
89 RefPtr<IDBDatabase> idbDatabase = IDBDatabase::create(scriptExecutionContext (), databaseBackend, m_databaseCallbacks);
90 idbDatabase->setMetadata(metadata); 87 idbDatabase->setMetadata(metadata);
91 m_databaseCallbacks->connect(idbDatabase.get()); 88 m_databaseCallbacks->connect(idbDatabase);
92 m_databaseCallbacks = 0; 89 m_databaseCallbacks = 0;
93 90
94 if (oldVersion == IDBDatabaseMetadata::NoIntVersion) { 91 if (oldVersion == IDBDatabaseMetadata::NoIntVersion) {
95 // This database hasn't had an integer version before. 92 // This database hasn't had an integer version before.
96 oldVersion = IDBDatabaseMetadata::DefaultIntVersion; 93 oldVersion = IDBDatabaseMetadata::DefaultIntVersion;
97 } 94 }
98 IDBDatabaseMetadata oldMetadata(metadata); 95 IDBDatabaseMetadata oldMetadata(metadata);
99 oldMetadata.intVersion = oldVersion; 96 oldMetadata.intVersion = oldVersion;
100 97
101 m_transaction = IDBTransaction::create(scriptExecutionContext(), m_transacti onId, idbDatabase.get(), this, oldMetadata); 98 m_transaction = IDBTransaction::create(scriptExecutionContext(), m_transacti onId, idbDatabase, this, oldMetadata);
102 m_result = IDBAny::create(idbDatabase.release()); 99 m_result = IDBAny::create(idbDatabase);
103 100
104 if (m_version == IDBDatabaseMetadata::NoIntVersion) 101 if (m_version == IDBDatabaseMetadata::NoIntVersion)
105 m_version = 1; 102 m_version = 1;
106 enqueueEvent(IDBVersionChangeEvent::create(IDBAny::create(oldVersion), IDBAn y::create(m_version), eventNames().upgradeneededEvent)); 103 enqueueEvent(IDBVersionChangeEvent::create(IDBAny::create(oldVersion), IDBAn y::create(m_version), eventNames().upgradeneededEvent));
107 } 104 }
108 105
109 void IDBOpenDBRequest::onSuccess(PassRefPtr<IDBDatabaseBackendInterface> prpBack end, const IDBDatabaseMetadata& metadata) 106 void IDBOpenDBRequest::onSuccess(IDBDatabaseBackendInterface* backend, const IDB DatabaseMetadata& metadata)
110 { 107 {
111 IDB_TRACE("IDBOpenDBRequest::onSuccess()"); 108 IDB_TRACE("IDBOpenDBRequest::onSuccess()");
112 if (m_contextStopped || !scriptExecutionContext()) { 109 if (m_contextStopped || !scriptExecutionContext()) {
113 RefPtr<IDBDatabaseBackendInterface> db = prpBackend; 110 backend->close(m_databaseCallbacks);
114 db->close(m_databaseCallbacks);
115 return; 111 return;
116 } 112 }
117 if (!shouldEnqueueEvent()) 113 if (!shouldEnqueueEvent())
118 return; 114 return;
119 115
120 RefPtr<IDBDatabaseBackendInterface> backend = prpBackend; 116 IDBDatabase* idbDatabase;
121 RefPtr<IDBDatabase> idbDatabase;
122 if (m_result) { 117 if (m_result) {
123 idbDatabase = m_result->idbDatabase(); 118 idbDatabase = m_result->idbDatabase();
124 ASSERT(idbDatabase); 119 ASSERT(idbDatabase);
125 ASSERT(!m_databaseCallbacks); 120 ASSERT(!m_databaseCallbacks);
126 } else { 121 } else {
127 ASSERT(m_databaseCallbacks); 122 ASSERT(m_databaseCallbacks);
128 idbDatabase = IDBDatabase::create(scriptExecutionContext(), backend.rele ase(), m_databaseCallbacks); 123 idbDatabase = IDBDatabase::create(scriptExecutionContext(), backend, m_d atabaseCallbacks);
129 m_databaseCallbacks->connect(idbDatabase.get()); 124 m_databaseCallbacks->connect(idbDatabase);
130 m_databaseCallbacks = 0; 125 m_databaseCallbacks = 0;
131 m_result = IDBAny::create(idbDatabase.get()); 126 m_result = IDBAny::create(idbDatabase);
132 } 127 }
133 idbDatabase->setMetadata(metadata); 128 idbDatabase->setMetadata(metadata);
134 enqueueEvent(Event::create(eventNames().successEvent, false, false)); 129 enqueueEvent(Event::create(eventNames().successEvent, false, false));
135 } 130 }
136 131
137 bool IDBOpenDBRequest::shouldEnqueueEvent() const 132 bool IDBOpenDBRequest::shouldEnqueueEvent() const
138 { 133 {
139 if (m_contextStopped || !scriptExecutionContext()) 134 if (m_contextStopped || !scriptExecutionContext())
140 return false; 135 return false;
141 ASSERT(m_readyState == PENDING || m_readyState == DONE); 136 ASSERT(m_readyState == PENDING || m_readyState == DONE);
142 if (m_requestAborted) 137 if (m_requestAborted)
143 return false; 138 return false;
144 return true; 139 return true;
145 } 140 }
146 141
147 bool IDBOpenDBRequest::dispatchEvent(PassRefPtr<Event> event) 142 bool IDBOpenDBRequest::dispatchEvent(PassRefPtr<Event> event)
148 { 143 {
149 // If the connection closed between onUpgradeNeeded and the delivery of the "success" event, 144 // If the connection closed between onUpgradeNeeded and the delivery of the "success" event,
150 // an "error" event should be fired instead. 145 // an "error" event should be fired instead.
151 if (event->type() == eventNames().successEvent && m_result->type() == IDBAny ::IDBDatabaseType && m_result->idbDatabase()->isClosePending()) { 146 if (event->type() == eventNames().successEvent && m_result->type() == IDBAny ::IDBDatabaseType && m_result->idbDatabase()->isClosePending()) {
152 m_result.clear(); 147 m_result.clear();
153 onError(IDBDatabaseError::create(IDBDatabaseException::AbortError, "The connection was closed.")); 148 onError(IDBDatabaseError::create(IDBDatabaseException::AbortError, "The connection was closed."));
154 return false; 149 return false;
155 } 150 }
156 151
157 return IDBRequest::dispatchEvent(event); 152 return IDBRequest::dispatchEvent(event);
158 } 153 }
159 154
155 void IDBOpenDBRequest::trace(Visitor* visitor)
156 {
157 visitor->trace(m_databaseCallbacks);
158 IDBRequest::trace(visitor);
159 }
160
160 } // namespace WebCore 161 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/modules/indexeddb/IDBOpenDBRequest.h ('k') | Source/modules/indexeddb/IDBRequest.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698