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

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

Issue 18590006: Blob support for IDB [Blink] (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: small cleanup 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
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 23 matching lines...) Expand all
34 #include "core/dom/ExceptionCode.h" 34 #include "core/dom/ExceptionCode.h"
35 #include "core/dom/ExecutionContext.h" 35 #include "core/dom/ExecutionContext.h"
36 #include "modules/indexeddb/IDBAny.h" 36 #include "modules/indexeddb/IDBAny.h"
37 #include "modules/indexeddb/IDBCursorWithValue.h" 37 #include "modules/indexeddb/IDBCursorWithValue.h"
38 #include "modules/indexeddb/IDBDatabase.h" 38 #include "modules/indexeddb/IDBDatabase.h"
39 #include "modules/indexeddb/IDBKeyPath.h" 39 #include "modules/indexeddb/IDBKeyPath.h"
40 #include "modules/indexeddb/IDBTracing.h" 40 #include "modules/indexeddb/IDBTracing.h"
41 #include "modules/indexeddb/IDBTransaction.h" 41 #include "modules/indexeddb/IDBTransaction.h"
42 #include "modules/indexeddb/WebIDBCallbacksImpl.h" 42 #include "modules/indexeddb/WebIDBCallbacksImpl.h"
43 #include "platform/SharedBuffer.h" 43 #include "platform/SharedBuffer.h"
44 #include "platform/blob/BlobInfo.h"
45 #include "public/platform/WebBlobInfo.h"
44 #include "public/platform/WebData.h" 46 #include "public/platform/WebData.h"
45 #include "public/platform/WebIDBKey.h" 47 #include "public/platform/WebIDBKey.h"
46 #include "public/platform/WebIDBKeyRange.h" 48 #include "public/platform/WebIDBKeyRange.h"
49 #include "public/platform/WebVector.h"
47 50
51 using blink::WebBlobInfo;
48 using blink::WebIDBDatabase; 52 using blink::WebIDBDatabase;
49 using blink::WebIDBCallbacks; 53 using blink::WebIDBCallbacks;
54 using blink::WebVector;
50 55
51 namespace WebCore { 56 namespace WebCore {
52 57
53 IDBObjectStore::IDBObjectStore(const IDBObjectStoreMetadata& metadata, IDBTransa ction* transaction) 58 IDBObjectStore::IDBObjectStore(const IDBObjectStoreMetadata& metadata, IDBTransa ction* transaction)
54 : m_metadata(metadata) 59 : m_metadata(metadata)
55 , m_transaction(transaction) 60 , m_transaction(transaction)
56 , m_deleted(false) 61 , m_deleted(false)
57 { 62 {
58 ASSERT(m_transaction); 63 ASSERT(m_transaction);
59 // We pass a reference to this object before it can be adopted. 64 // We pass a reference to this object before it can be adopted.
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionInactiveErrorMessage); 162 exceptionState.throwDOMException(TransactionInactiveError, IDBDatabase:: transactionInactiveErrorMessage);
158 return 0; 163 return 0;
159 } 164 }
160 if (m_transaction->isReadOnly()) { 165 if (m_transaction->isReadOnly()) {
161 exceptionState.throwUninformativeAndGenericDOMException(ReadOnlyError); 166 exceptionState.throwUninformativeAndGenericDOMException(ReadOnlyError);
162 return 0; 167 return 0;
163 } 168 }
164 169
165 // FIXME: Make SerializedScriptValue::create etc take an ExceptionState or u se ScriptState::setDOMException. 170 // FIXME: Make SerializedScriptValue::create etc take an ExceptionState or u se ScriptState::setDOMException.
166 bool didThrow = false; 171 bool didThrow = false;
167 RefPtr<SerializedScriptValue> serializedValue = SerializedScriptValue::creat e(value, didThrow, state); 172 Vector<BlobInfo> blobInfo;
173 RefPtr<SerializedScriptValue> serializedValue = SerializedScriptValue::creat e(value, &blobInfo, didThrow, state);
168 if (didThrow) 174 if (didThrow)
169 return 0; 175 return 0;
170 176
171 if (serializedValue->containsBlobs()) {
172 // FIXME: Add Blob/File/FileList support
173 exceptionState.throwUninformativeAndGenericDOMException(DataCloneError);
174 return 0;
175 }
176
177 const IDBKeyPath& keyPath = m_metadata.keyPath; 177 const IDBKeyPath& keyPath = m_metadata.keyPath;
178 const bool usesInLineKeys = !keyPath.isNull(); 178 const bool usesInLineKeys = !keyPath.isNull();
179 const bool hasKeyGenerator = autoIncrement(); 179 const bool hasKeyGenerator = autoIncrement();
180 180
181 ExecutionContext* context = state->executionContext(); 181 ExecutionContext* context = state->executionContext();
182 DOMRequestState requestState(context); 182 DOMRequestState requestState(context);
183 183
184 if (putMode != WebIDBDatabase::CursorUpdate && usesInLineKeys && key) { 184 if (putMode != WebIDBDatabase::CursorUpdate && usesInLineKeys && key) {
185 exceptionState.throwDOMException(DataError, "The object store uses in-li ne keys and the key parameter was provided."); 185 exceptionState.throwDOMException(DataError, "The object store uses in-li ne keys and the key parameter was provided.");
186 return 0; 186 return 0;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 IndexKeys keys; 219 IndexKeys keys;
220 generateIndexKeysForValue(&requestState, it->value, value, &keys); 220 generateIndexKeysForValue(&requestState, it->value, value, &keys);
221 indexIds.append(it->key); 221 indexIds.append(it->key);
222 indexKeys.append(keys); 222 indexKeys.append(keys);
223 } 223 }
224 224
225 RefPtr<IDBRequest> request = IDBRequest::create(context, source, m_transacti on.get()); 225 RefPtr<IDBRequest> request = IDBRequest::create(context, source, m_transacti on.get());
226 Vector<char> wireBytes; 226 Vector<char> wireBytes;
227 serializedValue->toWireBytes(wireBytes); 227 serializedValue->toWireBytes(wireBytes);
228 RefPtr<SharedBuffer> valueBuffer = SharedBuffer::adoptVector(wireBytes); 228 RefPtr<SharedBuffer> valueBuffer = SharedBuffer::adoptVector(wireBytes);
229 backendDB()->put(m_transaction->id(), id(), blink::WebData(valueBuffer), key .release(), static_cast<WebIDBDatabase::PutMode>(putMode), WebIDBCallbacksImpl:: create(request).leakPtr(), indexIds, indexKeys); 229
230 WebVector<WebBlobInfo> webBlobInfo(blobInfo.size());
231 for (size_t i = 0; i < blobInfo.size(); ++i) {
232 const WebCore::BlobInfo& info = blobInfo[i];
233 if (info.isFile())
234 webBlobInfo[i] = WebBlobInfo(info.uuid(), info.filePath(), info.file Name(), info.type());
235 else
236 webBlobInfo[i] = WebBlobInfo(info.uuid(), info.type(), info.size());
237 }
238
239 backendDB()->put(m_transaction->id(), id(), blink::WebData(valueBuffer), web BlobInfo, key.release(), static_cast<WebIDBDatabase::PutMode>(putMode), WebIDBCa llbacksImpl::create(request).leakPtr(), indexIds, indexKeys);
230 return request.release(); 240 return request.release();
231 } 241 }
232 242
233 PassRefPtr<IDBRequest> IDBObjectStore::deleteFunction(ExecutionContext* context, const ScriptValue& key, ExceptionState& exceptionState) 243 PassRefPtr<IDBRequest> IDBObjectStore::deleteFunction(ExecutionContext* context, const ScriptValue& key, ExceptionState& exceptionState)
234 { 244 {
235 IDB_TRACE("IDBObjectStore::delete"); 245 IDB_TRACE("IDBObjectStore::delete");
236 if (isDeleted()) { 246 if (isDeleted()) {
237 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage); 247 exceptionState.throwDOMException(InvalidStateError, IDBDatabase::objectS toreDeletedErrorMessage);
238 return 0; 248 return 0;
239 } 249 }
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 } 624 }
615 return IDBIndexMetadata::InvalidId; 625 return IDBIndexMetadata::InvalidId;
616 } 626 }
617 627
618 WebIDBDatabase* IDBObjectStore::backendDB() const 628 WebIDBDatabase* IDBObjectStore::backendDB() const
619 { 629 {
620 return m_transaction->backendDB(); 630 return m_transaction->backendDB();
621 } 631 }
622 632
623 } // namespace WebCore 633 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698