OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "modules/indexeddb/IDBValue.h" | 5 #include "modules/indexeddb/IDBValue.h" |
6 | 6 |
| 7 #include "modules/indexeddb/IDBMojoUtil.h" |
7 #include "platform/blob/BlobData.h" | 8 #include "platform/blob/BlobData.h" |
8 #include "public/platform/WebBlobInfo.h" | 9 #include "public/platform/WebBlobInfo.h" |
9 #include "public/platform/modules/indexeddb/WebIDBValue.h" | |
10 #include "wtf/PtrUtil.h" | 10 #include "wtf/PtrUtil.h" |
11 | 11 |
12 namespace blink { | 12 namespace blink { |
13 | 13 |
14 IDBValue::IDBValue() = default; | 14 IDBValue::IDBValue() = default; |
15 | 15 |
16 IDBValue::IDBValue(const WebIDBValue& value) | 16 IDBValue::IDBValue(indexed_db::mojom::blink::ValuePtr value) |
17 : IDBValue(value.data, value.webBlobInfo, value.primaryKey, value.keyPath) | 17 : m_data(createData(value->data)) |
| 18 , m_blobData(new Vector<RefPtr<BlobDataHandle>>()) |
| 19 , m_blobInfo(new Vector<WebBlobInfo>(value->data.size())) |
| 20 , m_primaryKey(createKey(value->primary_key)) |
| 21 , m_keyPath(createKeyPath(value->key_path)) |
18 { | 22 { |
| 23 WebIDBValue webValue = createValue(value); |
| 24 setBlobData(webValue.webBlobInfo); |
19 } | 25 } |
20 | 26 |
21 IDBValue::IDBValue(PassRefPtr<SharedBuffer> data, const WebVector<WebBlobInfo>&
webBlobInfo, IDBKey* primaryKey, const IDBKeyPath& keyPath) | 27 IDBValue::IDBValue(PassRefPtr<SharedBuffer> data, const WebVector<WebBlobInfo>&
webBlobInfo, IDBKey* primaryKey, const IDBKeyPath& keyPath) |
22 : m_data(data) | 28 : m_data(data) |
23 , m_blobData(wrapUnique(new Vector<RefPtr<BlobDataHandle>>())) | 29 , m_blobData(wrapUnique(new Vector<RefPtr<BlobDataHandle>>())) |
24 , m_blobInfo(wrapUnique(new Vector<WebBlobInfo>(webBlobInfo.size()))) | 30 , m_blobInfo(wrapUnique(new Vector<WebBlobInfo>(webBlobInfo.size()))) |
25 , m_primaryKey(primaryKey && primaryKey->isValid() ? primaryKey : nullptr) | 31 , m_primaryKey(primaryKey && primaryKey->isValid() ? primaryKey : nullptr) |
26 , m_keyPath(keyPath) | 32 , m_keyPath(keyPath) |
27 { | 33 { |
28 for (size_t i = 0; i < webBlobInfo.size(); ++i) { | 34 setBlobData(webBlobInfo); |
29 const WebBlobInfo& info = (*m_blobInfo)[i] = webBlobInfo[i]; | |
30 m_blobData->append(BlobDataHandle::create(info.uuid(), info.type(), info
.size())); | |
31 } | |
32 } | 35 } |
33 | 36 |
34 IDBValue::IDBValue(const IDBValue* value, IDBKey* primaryKey, const IDBKeyPath&
keyPath) | 37 IDBValue::IDBValue(const IDBValue* value, IDBKey* primaryKey, const IDBKeyPath&
keyPath) |
35 : m_data(value->m_data) | 38 : m_data(value->m_data) |
36 , m_blobData(wrapUnique(new Vector<RefPtr<BlobDataHandle>>())) | 39 , m_blobData(wrapUnique(new Vector<RefPtr<BlobDataHandle>>())) |
37 , m_blobInfo(wrapUnique(new Vector<WebBlobInfo>(value->m_blobInfo->size()))) | 40 , m_blobInfo(wrapUnique(new Vector<WebBlobInfo>(value->m_blobInfo->size()))) |
38 , m_primaryKey(primaryKey) | 41 , m_primaryKey(primaryKey) |
39 , m_keyPath(keyPath) | 42 , m_keyPath(keyPath) |
40 { | 43 { |
41 for (size_t i = 0; i < value->m_blobInfo->size(); ++i) { | 44 for (size_t i = 0; i < value->m_blobInfo->size(); ++i) { |
42 const WebBlobInfo& info = (*m_blobInfo)[i] = value->m_blobInfo->at(i); | 45 const WebBlobInfo& info = (*m_blobInfo)[i] = value->m_blobInfo->at(i); |
43 m_blobData->append(BlobDataHandle::create(info.uuid(), info.type(), info
.size())); | 46 m_blobData->append(BlobDataHandle::create(info.uuid(), info.type(), info
.size())); |
44 } | 47 } |
45 } | 48 } |
46 | 49 |
47 IDBValue::~IDBValue() {} | 50 IDBValue::~IDBValue() {} |
48 | 51 |
| 52 void IDBValue::setBlobData(const WebVector<WebBlobInfo>& webBlobInfo) |
| 53 { |
| 54 for (size_t i = 0; i < webBlobInfo.size(); ++i) { |
| 55 const WebBlobInfo& info = (*m_blobInfo)[i] = webBlobInfo[i]; |
| 56 m_blobData->append(BlobDataHandle::create(info.uuid(), info.type(), info
.size())); |
| 57 } |
| 58 } |
| 59 |
49 PassRefPtr<IDBValue> IDBValue::create() | 60 PassRefPtr<IDBValue> IDBValue::create() |
50 { | 61 { |
51 return adoptRef(new IDBValue()); | 62 return adoptRef(new IDBValue()); |
52 } | 63 } |
53 | 64 |
54 PassRefPtr<IDBValue> IDBValue::create(const WebIDBValue& value) | 65 PassRefPtr<IDBValue> IDBValue::create(indexed_db::mojom::blink::ValuePtr value) |
55 { | 66 { |
56 return adoptRef(new IDBValue(value)); | 67 return adoptRef(new IDBValue(std::move(value))); |
57 } | 68 } |
58 | 69 |
59 PassRefPtr<IDBValue> IDBValue::create(const IDBValue* value, IDBKey* primaryKey,
const IDBKeyPath& keyPath) | 70 PassRefPtr<IDBValue> IDBValue::create(const IDBValue* value, IDBKey* primaryKey,
const IDBKeyPath& keyPath) |
60 { | 71 { |
61 return adoptRef(new IDBValue(value, primaryKey, keyPath)); | 72 return adoptRef(new IDBValue(value, primaryKey, keyPath)); |
62 } | 73 } |
63 | 74 |
64 Vector<String> IDBValue::getUUIDs() const | 75 Vector<String> IDBValue::getUUIDs() const |
65 { | 76 { |
66 Vector<String> uuids; | 77 Vector<String> uuids; |
67 uuids.reserveCapacity(m_blobInfo->size()); | 78 uuids.reserveCapacity(m_blobInfo->size()); |
68 for (const auto& info : *m_blobInfo) | 79 for (const auto& info : *m_blobInfo) |
69 uuids.append(info.uuid()); | 80 uuids.append(info.uuid()); |
70 return uuids; | 81 return uuids; |
71 } | 82 } |
72 | 83 |
73 const SharedBuffer* IDBValue::data() const | 84 const SharedBuffer* IDBValue::data() const |
74 { | 85 { |
75 return m_data.get(); | 86 return m_data.get(); |
76 } | 87 } |
77 | 88 |
78 bool IDBValue::isNull() const | 89 bool IDBValue::isNull() const |
79 { | 90 { |
80 return !m_data.get(); | 91 return !m_data.get(); |
81 } | 92 } |
82 | 93 |
83 } // namespace blink | 94 } // namespace blink |
OLD | NEW |