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

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

Issue 22893058: IndexedDB: Replace IDL operation overloading with ScriptValue handling (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Remove assert, per review feedback Created 7 years, 3 months 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/IDBIndex.h ('k') | Source/modules/indexeddb/IDBIndex.idl » ('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) 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 ASSERT(m_objectStore); 49 ASSERT(m_objectStore);
50 ASSERT(m_transaction); 50 ASSERT(m_transaction);
51 ASSERT(m_metadata.id != IDBIndexMetadata::InvalidId); 51 ASSERT(m_metadata.id != IDBIndexMetadata::InvalidId);
52 ScriptWrappable::init(this); 52 ScriptWrappable::init(this);
53 } 53 }
54 54
55 IDBIndex::~IDBIndex() 55 IDBIndex::~IDBIndex()
56 { 56 {
57 } 57 }
58 58
59 PassRefPtr<IDBRequest> IDBIndex::openCursor(ScriptExecutionContext* context, Pas sRefPtr<IDBKeyRange> keyRange, const String& directionString, ExceptionState& es ) 59 PassRefPtr<IDBRequest> IDBIndex::openCursor(ScriptExecutionContext* context, con st ScriptValue& range, const String& directionString, ExceptionState& es)
60 { 60 {
61 IDB_TRACE("IDBIndex::openCursor"); 61 IDB_TRACE("IDBIndex::openCursor");
62 if (isDeleted()) { 62 if (isDeleted()) {
63 es.throwDOMException(InvalidStateError, IDBDatabase::indexDeletedErrorMe ssage); 63 es.throwDOMException(InvalidStateError, IDBDatabase::indexDeletedErrorMe ssage);
64 return 0; 64 return 0;
65 } 65 }
66 if (m_transaction->isFinished()) { 66 if (m_transaction->isFinished()) {
67 es.throwDOMException(TransactionInactiveError, IDBDatabase::transactionF inishedErrorMessage); 67 es.throwDOMException(TransactionInactiveError, IDBDatabase::transactionF inishedErrorMessage);
68 return 0; 68 return 0;
69 } 69 }
70 if (!m_transaction->isActive()) { 70 if (!m_transaction->isActive()) {
71 es.throwDOMException(TransactionInactiveError, IDBDatabase::transactionI nactiveErrorMessage); 71 es.throwDOMException(TransactionInactiveError, IDBDatabase::transactionI nactiveErrorMessage);
72 return 0; 72 return 0;
73 } 73 }
74 IndexedDB::CursorDirection direction = IDBCursor::stringToDirection(directio nString, es); 74 IndexedDB::CursorDirection direction = IDBCursor::stringToDirection(directio nString, es);
75 if (es.hadException()) 75 if (es.hadException())
76 return 0; 76 return 0;
77 77
78 RefPtr<IDBKeyRange> keyRange = IDBKeyRange::fromScriptValue(context, range, es);
79 if (es.hadException())
80 return 0;
81
82 return openCursor(context, keyRange, direction);
83 }
84
85 PassRefPtr<IDBRequest> IDBIndex::openCursor(ScriptExecutionContext* context, Pas sRefPtr<IDBKeyRange> keyRange, IndexedDB::CursorDirection direction)
86 {
78 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this ), m_transaction.get()); 87 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this ), m_transaction.get());
79 request->setCursorDetails(IndexedDB::CursorKeyAndValue, direction); 88 request->setCursorDetails(IndexedDB::CursorKeyAndValue, direction);
80 backendDB()->openCursor(m_transaction->id(), m_objectStore->id(), m_metadata .id, keyRange, direction, false, IDBDatabaseBackendInterface::NormalTask, reques t); 89 backendDB()->openCursor(m_transaction->id(), m_objectStore->id(), m_metadata .id, keyRange, direction, false, IDBDatabaseBackendInterface::NormalTask, reques t);
81 return request; 90 return request;
82 } 91 }
83 92
84 PassRefPtr<IDBRequest> IDBIndex::openCursor(ScriptExecutionContext* context, con st ScriptValue& key, const String& direction, ExceptionState& es) 93 PassRefPtr<IDBRequest> IDBIndex::count(ScriptExecutionContext* context, const Sc riptValue& range, ExceptionState& es)
85 {
86 IDB_TRACE("IDBIndex::openCursor");
87 RefPtr<IDBKeyRange> keyRange = IDBKeyRange::only(context, key, es);
88 if (es.hadException())
89 return 0;
90 return openCursor(context, keyRange.release(), direction, es);
91 }
92
93 PassRefPtr<IDBRequest> IDBIndex::count(ScriptExecutionContext* context, PassRefP tr<IDBKeyRange> keyRange, ExceptionState& es)
94 { 94 {
95 IDB_TRACE("IDBIndex::count"); 95 IDB_TRACE("IDBIndex::count");
96 if (isDeleted()) { 96 if (isDeleted()) {
97 es.throwDOMException(InvalidStateError, IDBDatabase::indexDeletedErrorMe ssage); 97 es.throwDOMException(InvalidStateError, IDBDatabase::indexDeletedErrorMe ssage);
98 return 0; 98 return 0;
99 } 99 }
100 if (m_transaction->isFinished()) { 100 if (m_transaction->isFinished()) {
101 es.throwDOMException(TransactionInactiveError, IDBDatabase::transactionF inishedErrorMessage); 101 es.throwDOMException(TransactionInactiveError, IDBDatabase::transactionF inishedErrorMessage);
102 return 0; 102 return 0;
103 } 103 }
104 if (!m_transaction->isActive()) { 104 if (!m_transaction->isActive()) {
105 es.throwDOMException(TransactionInactiveError, IDBDatabase::transactionI nactiveErrorMessage); 105 es.throwDOMException(TransactionInactiveError, IDBDatabase::transactionI nactiveErrorMessage);
106 return 0; 106 return 0;
107 } 107 }
108
109 RefPtr<IDBKeyRange> keyRange = IDBKeyRange::fromScriptValue(context, range, es);
110 if (es.hadException())
111 return 0;
112
108 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this ), m_transaction.get()); 113 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this ), m_transaction.get());
109 backendDB()->count(m_transaction->id(), m_objectStore->id(), m_metadata.id, keyRange, request); 114 backendDB()->count(m_transaction->id(), m_objectStore->id(), m_metadata.id, keyRange, request);
110 return request; 115 return request;
111 } 116 }
112 117
113 PassRefPtr<IDBRequest> IDBIndex::count(ScriptExecutionContext* context, const Sc riptValue& key, ExceptionState& es) 118 PassRefPtr<IDBRequest> IDBIndex::openKeyCursor(ScriptExecutionContext* context, const ScriptValue& range, const String& directionString, ExceptionState& es)
114 {
115 IDB_TRACE("IDBIndex::count");
116 RefPtr<IDBKeyRange> keyRange = IDBKeyRange::only(context, key, es);
117 if (es.hadException())
118 return 0;
119 return count(context, keyRange.release(), es);
120 }
121
122 PassRefPtr<IDBRequest> IDBIndex::openKeyCursor(ScriptExecutionContext* context, PassRefPtr<IDBKeyRange> keyRange, const String& directionString, ExceptionState& es)
123 { 119 {
124 IDB_TRACE("IDBIndex::openKeyCursor"); 120 IDB_TRACE("IDBIndex::openKeyCursor");
125 if (isDeleted()) { 121 if (isDeleted()) {
126 es.throwDOMException(InvalidStateError, IDBDatabase::indexDeletedErrorMe ssage); 122 es.throwDOMException(InvalidStateError, IDBDatabase::indexDeletedErrorMe ssage);
127 return 0; 123 return 0;
128 } 124 }
129 if (m_transaction->isFinished()) { 125 if (m_transaction->isFinished()) {
130 es.throwDOMException(TransactionInactiveError, IDBDatabase::transactionF inishedErrorMessage); 126 es.throwDOMException(TransactionInactiveError, IDBDatabase::transactionF inishedErrorMessage);
131 return 0; 127 return 0;
132 } 128 }
133 if (!m_transaction->isActive()) { 129 if (!m_transaction->isActive()) {
134 es.throwDOMException(TransactionInactiveError, IDBDatabase::transactionI nactiveErrorMessage); 130 es.throwDOMException(TransactionInactiveError, IDBDatabase::transactionI nactiveErrorMessage);
135 return 0; 131 return 0;
136 } 132 }
137 IndexedDB::CursorDirection direction = IDBCursor::stringToDirection(directio nString, es); 133 IndexedDB::CursorDirection direction = IDBCursor::stringToDirection(directio nString, es);
138 if (es.hadException()) 134 if (es.hadException())
139 return 0; 135 return 0;
140 136
137 RefPtr<IDBKeyRange> keyRange = IDBKeyRange::fromScriptValue(context, range, es);
138 if (es.hadException())
139 return 0;
140
141 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this ), m_transaction.get()); 141 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this ), m_transaction.get());
142 request->setCursorDetails(IndexedDB::CursorKeyOnly, direction); 142 request->setCursorDetails(IndexedDB::CursorKeyOnly, direction);
143 backendDB()->openCursor(m_transaction->id(), m_objectStore->id(), m_metadata .id, keyRange, direction, true, IDBDatabaseBackendInterface::NormalTask, request ); 143 backendDB()->openCursor(m_transaction->id(), m_objectStore->id(), m_metadata .id, keyRange, direction, true, IDBDatabaseBackendInterface::NormalTask, request );
144 return request; 144 return request;
145 } 145 }
146 146
147 PassRefPtr<IDBRequest> IDBIndex::openKeyCursor(ScriptExecutionContext* context, const ScriptValue& key, const String& direction, ExceptionState& es)
148 {
149 IDB_TRACE("IDBIndex::openKeyCursor");
150 RefPtr<IDBKeyRange> keyRange = IDBKeyRange::only(context, key, es);
151 if (es.hadException())
152 return 0;
153 return openKeyCursor(context, keyRange.release(), direction, es);
154 }
155
156 PassRefPtr<IDBRequest> IDBIndex::get(ScriptExecutionContext* context, const Scri ptValue& key, ExceptionState& es) 147 PassRefPtr<IDBRequest> IDBIndex::get(ScriptExecutionContext* context, const Scri ptValue& key, ExceptionState& es)
157 { 148 {
158 IDB_TRACE("IDBIndex::get"); 149 IDB_TRACE("IDBIndex::get");
159 RefPtr<IDBKeyRange> keyRange = IDBKeyRange::only(context, key, es);
160 if (es.hadException())
161 return 0;
162 return get(context, keyRange.release(), es);
163 }
164
165 PassRefPtr<IDBRequest> IDBIndex::get(ScriptExecutionContext* context, PassRefPtr <IDBKeyRange> keyRange, ExceptionState& es)
166 {
167 IDB_TRACE("IDBIndex::get");
168 if (isDeleted()) { 150 if (isDeleted()) {
169 es.throwDOMException(InvalidStateError, IDBDatabase::indexDeletedErrorMe ssage); 151 es.throwDOMException(InvalidStateError, IDBDatabase::indexDeletedErrorMe ssage);
170 return 0; 152 return 0;
171 } 153 }
172 if (m_transaction->isFinished()) { 154 if (m_transaction->isFinished()) {
173 es.throwDOMException(TransactionInactiveError, IDBDatabase::transactionF inishedErrorMessage); 155 es.throwDOMException(TransactionInactiveError, IDBDatabase::transactionF inishedErrorMessage);
174 return 0; 156 return 0;
175 } 157 }
176 if (!m_transaction->isActive()) { 158 if (!m_transaction->isActive()) {
177 es.throwDOMException(TransactionInactiveError, IDBDatabase::transactionI nactiveErrorMessage); 159 es.throwDOMException(TransactionInactiveError, IDBDatabase::transactionI nactiveErrorMessage);
178 return 0; 160 return 0;
179 } 161 }
162
163 RefPtr<IDBKeyRange> keyRange = IDBKeyRange::fromScriptValue(context, key, es );
164 if (es.hadException())
165 return 0;
180 if (!keyRange) { 166 if (!keyRange) {
181 es.throwDOMException(DataError, IDBDatabase::noKeyOrKeyRangeErrorMessage ); 167 es.throwDOMException(DataError, IDBDatabase::noKeyOrKeyRangeErrorMessage );
182 return 0; 168 return 0;
183 } 169 }
184 170
185 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this ), m_transaction.get()); 171 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this ), m_transaction.get());
186 backendDB()->get(m_transaction->id(), m_objectStore->id(), m_metadata.id, ke yRange, false, request); 172 backendDB()->get(m_transaction->id(), m_objectStore->id(), m_metadata.id, ke yRange, false, request);
187 return request; 173 return request;
188 } 174 }
189 175
190 PassRefPtr<IDBRequest> IDBIndex::getKey(ScriptExecutionContext* context, const S criptValue& key, ExceptionState& es) 176 PassRefPtr<IDBRequest> IDBIndex::getKey(ScriptExecutionContext* context, const S criptValue& key, ExceptionState& es)
191 { 177 {
192 IDB_TRACE("IDBIndex::getKey"); 178 IDB_TRACE("IDBIndex::getKey");
193 RefPtr<IDBKeyRange> keyRange = IDBKeyRange::only(context, key, es);
194 if (es.hadException())
195 return 0;
196
197 return getKey(context, keyRange.release(), es);
198 }
199
200 PassRefPtr<IDBRequest> IDBIndex::getKey(ScriptExecutionContext* context, PassRef Ptr<IDBKeyRange> keyRange, ExceptionState& es)
201 {
202 IDB_TRACE("IDBIndex::getKey");
203 if (isDeleted()) { 179 if (isDeleted()) {
204 es.throwDOMException(InvalidStateError, IDBDatabase::indexDeletedErrorMe ssage); 180 es.throwDOMException(InvalidStateError, IDBDatabase::indexDeletedErrorMe ssage);
205 return 0; 181 return 0;
206 } 182 }
207 if (m_transaction->isFinished()) { 183 if (m_transaction->isFinished()) {
208 es.throwDOMException(TransactionInactiveError, IDBDatabase::transactionF inishedErrorMessage); 184 es.throwDOMException(TransactionInactiveError, IDBDatabase::transactionF inishedErrorMessage);
209 return 0; 185 return 0;
210 } 186 }
211 if (!m_transaction->isActive()) { 187 if (!m_transaction->isActive()) {
212 es.throwDOMException(TransactionInactiveError, IDBDatabase::transactionI nactiveErrorMessage); 188 es.throwDOMException(TransactionInactiveError, IDBDatabase::transactionI nactiveErrorMessage);
213 return 0; 189 return 0;
214 } 190 }
191
192 RefPtr<IDBKeyRange> keyRange = IDBKeyRange::fromScriptValue(context, key, es );
193 if (es.hadException())
194 return 0;
215 if (!keyRange) { 195 if (!keyRange) {
216 es.throwDOMException(DataError, IDBDatabase::noKeyOrKeyRangeErrorMessage ); 196 es.throwDOMException(DataError, IDBDatabase::noKeyOrKeyRangeErrorMessage );
217 return 0; 197 return 0;
218 } 198 }
219 199
220 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this ), m_transaction.get()); 200 RefPtr<IDBRequest> request = IDBRequest::create(context, IDBAny::create(this ), m_transaction.get());
221 backendDB()->get(m_transaction->id(), m_objectStore->id(), m_metadata.id, ke yRange, true, request); 201 backendDB()->get(m_transaction->id(), m_objectStore->id(), m_metadata.id, ke yRange, true, request);
222 return request; 202 return request;
223 } 203 }
224 204
225 IDBDatabaseBackendInterface* IDBIndex::backendDB() const 205 IDBDatabaseBackendInterface* IDBIndex::backendDB() const
226 { 206 {
227 return m_transaction->backendDB(); 207 return m_transaction->backendDB();
228 } 208 }
229 209
230 bool IDBIndex::isDeleted() const 210 bool IDBIndex::isDeleted() const
231 { 211 {
232 return m_deleted || m_objectStore->isDeleted(); 212 return m_deleted || m_objectStore->isDeleted();
233 } 213 }
234 214
235 } // namespace WebCore 215 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/modules/indexeddb/IDBIndex.h ('k') | Source/modules/indexeddb/IDBIndex.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698