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 are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * 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 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
75 | 75 |
76 std::unique_ptr<BlobData> BlobData::create() { | 76 std::unique_ptr<BlobData> BlobData::create() { |
77 return WTF::wrapUnique( | 77 return WTF::wrapUnique( |
78 new BlobData(FileCompositionStatus::NO_UNKNOWN_SIZE_FILES)); | 78 new BlobData(FileCompositionStatus::NO_UNKNOWN_SIZE_FILES)); |
79 } | 79 } |
80 | 80 |
81 std::unique_ptr<BlobData> BlobData::createForFileWithUnknownSize( | 81 std::unique_ptr<BlobData> BlobData::createForFileWithUnknownSize( |
82 const String& path) { | 82 const String& path) { |
83 std::unique_ptr<BlobData> data = WTF::wrapUnique( | 83 std::unique_ptr<BlobData> data = WTF::wrapUnique( |
84 new BlobData(FileCompositionStatus::SINGLE_UNKNOWN_SIZE_FILE)); | 84 new BlobData(FileCompositionStatus::SINGLE_UNKNOWN_SIZE_FILE)); |
85 data->m_items.append(BlobDataItem(path)); | 85 data->m_items.push_back(BlobDataItem(path)); |
86 return data; | 86 return data; |
87 } | 87 } |
88 | 88 |
89 void BlobData::detachFromCurrentThread() { | 89 void BlobData::detachFromCurrentThread() { |
90 m_contentType = m_contentType.isolatedCopy(); | 90 m_contentType = m_contentType.isolatedCopy(); |
91 for (size_t i = 0; i < m_items.size(); ++i) | 91 for (size_t i = 0; i < m_items.size(); ++i) |
92 m_items.at(i).detachFromCurrentThread(); | 92 m_items.at(i).detachFromCurrentThread(); |
93 } | 93 } |
94 | 94 |
95 void BlobData::setContentType(const String& contentType) { | 95 void BlobData::setContentType(const String& contentType) { |
96 if (isValidBlobType(contentType)) | 96 if (isValidBlobType(contentType)) |
97 m_contentType = contentType; | 97 m_contentType = contentType; |
98 else | 98 else |
99 m_contentType = ""; | 99 m_contentType = ""; |
100 } | 100 } |
101 | 101 |
102 void BlobData::appendData(PassRefPtr<RawData> data, | 102 void BlobData::appendData(PassRefPtr<RawData> data, |
103 long long offset, | 103 long long offset, |
104 long long length) { | 104 long long length) { |
105 CHECK_EQ(m_fileComposition, FileCompositionStatus::NO_UNKNOWN_SIZE_FILES) | 105 CHECK_EQ(m_fileComposition, FileCompositionStatus::NO_UNKNOWN_SIZE_FILES) |
106 << "Blobs with a unknown-size file cannot have other items."; | 106 << "Blobs with a unknown-size file cannot have other items."; |
107 m_items.append(BlobDataItem(std::move(data), offset, length)); | 107 m_items.push_back(BlobDataItem(std::move(data), offset, length)); |
108 } | 108 } |
109 | 109 |
110 void BlobData::appendFile(const String& path, | 110 void BlobData::appendFile(const String& path, |
111 long long offset, | 111 long long offset, |
112 long long length, | 112 long long length, |
113 double expectedModificationTime) { | 113 double expectedModificationTime) { |
114 CHECK_EQ(m_fileComposition, FileCompositionStatus::NO_UNKNOWN_SIZE_FILES) | 114 CHECK_EQ(m_fileComposition, FileCompositionStatus::NO_UNKNOWN_SIZE_FILES) |
115 << "Blobs with a unknown-size file cannot have other items."; | 115 << "Blobs with a unknown-size file cannot have other items."; |
116 m_items.append(BlobDataItem(path, offset, length, expectedModificationTime)); | 116 m_items.push_back( |
| 117 BlobDataItem(path, offset, length, expectedModificationTime)); |
117 } | 118 } |
118 | 119 |
119 void BlobData::appendBlob(PassRefPtr<BlobDataHandle> dataHandle, | 120 void BlobData::appendBlob(PassRefPtr<BlobDataHandle> dataHandle, |
120 long long offset, | 121 long long offset, |
121 long long length) { | 122 long long length) { |
122 CHECK_EQ(m_fileComposition, FileCompositionStatus::NO_UNKNOWN_SIZE_FILES) | 123 CHECK_EQ(m_fileComposition, FileCompositionStatus::NO_UNKNOWN_SIZE_FILES) |
123 << "Blobs with a unknown-size file cannot have other items."; | 124 << "Blobs with a unknown-size file cannot have other items."; |
124 m_items.append(BlobDataItem(std::move(dataHandle), offset, length)); | 125 m_items.push_back(BlobDataItem(std::move(dataHandle), offset, length)); |
125 } | 126 } |
126 | 127 |
127 void BlobData::appendFileSystemURL(const KURL& url, | 128 void BlobData::appendFileSystemURL(const KURL& url, |
128 long long offset, | 129 long long offset, |
129 long long length, | 130 long long length, |
130 double expectedModificationTime) { | 131 double expectedModificationTime) { |
131 CHECK_EQ(m_fileComposition, FileCompositionStatus::NO_UNKNOWN_SIZE_FILES) | 132 CHECK_EQ(m_fileComposition, FileCompositionStatus::NO_UNKNOWN_SIZE_FILES) |
132 << "Blobs with a unknown-size file cannot have other items."; | 133 << "Blobs with a unknown-size file cannot have other items."; |
133 m_items.append(BlobDataItem(url, offset, length, expectedModificationTime)); | 134 m_items.push_back( |
| 135 BlobDataItem(url, offset, length, expectedModificationTime)); |
134 } | 136 } |
135 | 137 |
136 void BlobData::appendText(const String& text, | 138 void BlobData::appendText(const String& text, |
137 bool doNormalizeLineEndingsToNative) { | 139 bool doNormalizeLineEndingsToNative) { |
138 CHECK_EQ(m_fileComposition, FileCompositionStatus::NO_UNKNOWN_SIZE_FILES) | 140 CHECK_EQ(m_fileComposition, FileCompositionStatus::NO_UNKNOWN_SIZE_FILES) |
139 << "Blobs with a unknown-size file cannot have other items."; | 141 << "Blobs with a unknown-size file cannot have other items."; |
140 CString utf8Text = UTF8Encoding().encode(text, WTF::EntitiesForUnencodables); | 142 CString utf8Text = UTF8Encoding().encode(text, WTF::EntitiesForUnencodables); |
141 RefPtr<RawData> data = nullptr; | 143 RefPtr<RawData> data = nullptr; |
142 Vector<char>* buffer; | 144 Vector<char>* buffer; |
143 if (canConsolidateData(text.length())) { | 145 if (canConsolidateData(text.length())) { |
144 buffer = m_items.back().data->mutableData(); | 146 buffer = m_items.back().data->mutableData(); |
145 } else { | 147 } else { |
146 data = RawData::create(); | 148 data = RawData::create(); |
147 buffer = data->mutableData(); | 149 buffer = data->mutableData(); |
148 } | 150 } |
149 | 151 |
150 if (doNormalizeLineEndingsToNative) { | 152 if (doNormalizeLineEndingsToNative) { |
151 normalizeLineEndingsToNative(utf8Text, *buffer); | 153 normalizeLineEndingsToNative(utf8Text, *buffer); |
152 } else { | 154 } else { |
153 buffer->append(utf8Text.data(), utf8Text.length()); | 155 buffer->append(utf8Text.data(), utf8Text.length()); |
154 } | 156 } |
155 | 157 |
156 if (data) | 158 if (data) |
157 m_items.append(BlobDataItem(data.release())); | 159 m_items.push_back(BlobDataItem(data.release())); |
158 } | 160 } |
159 | 161 |
160 void BlobData::appendBytes(const void* bytes, size_t length) { | 162 void BlobData::appendBytes(const void* bytes, size_t length) { |
161 CHECK_EQ(m_fileComposition, FileCompositionStatus::NO_UNKNOWN_SIZE_FILES) | 163 CHECK_EQ(m_fileComposition, FileCompositionStatus::NO_UNKNOWN_SIZE_FILES) |
162 << "Blobs with a unknown-size file cannot have other items."; | 164 << "Blobs with a unknown-size file cannot have other items."; |
163 if (canConsolidateData(length)) { | 165 if (canConsolidateData(length)) { |
164 m_items.back().data->mutableData()->append(static_cast<const char*>(bytes), | 166 m_items.back().data->mutableData()->append(static_cast<const char*>(bytes), |
165 length); | 167 length); |
166 return; | 168 return; |
167 } | 169 } |
168 RefPtr<RawData> data = RawData::create(); | 170 RefPtr<RawData> data = RawData::create(); |
169 Vector<char>* buffer = data->mutableData(); | 171 Vector<char>* buffer = data->mutableData(); |
170 buffer->append(static_cast<const char*>(bytes), length); | 172 buffer->append(static_cast<const char*>(bytes), length); |
171 m_items.append(BlobDataItem(data.release())); | 173 m_items.push_back(BlobDataItem(data.release())); |
172 } | 174 } |
173 | 175 |
174 long long BlobData::length() const { | 176 long long BlobData::length() const { |
175 long long length = 0; | 177 long long length = 0; |
176 | 178 |
177 for (Vector<BlobDataItem>::const_iterator it = m_items.begin(); | 179 for (Vector<BlobDataItem>::const_iterator it = m_items.begin(); |
178 it != m_items.end(); ++it) { | 180 it != m_items.end(); ++it) { |
179 const BlobDataItem& item = *it; | 181 const BlobDataItem& item = *it; |
180 if (item.length != BlobDataItem::toEndOfFile) { | 182 if (item.length != BlobDataItem::toEndOfFile) { |
181 ASSERT(item.length >= 0); | 183 ASSERT(item.length >= 0); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
226 m_type(isValidBlobType(type) ? type.isolatedCopy() : ""), | 228 m_type(isValidBlobType(type) ? type.isolatedCopy() : ""), |
227 m_size(size) { | 229 m_size(size) { |
228 BlobRegistry::addBlobDataRef(m_uuid); | 230 BlobRegistry::addBlobDataRef(m_uuid); |
229 } | 231 } |
230 | 232 |
231 BlobDataHandle::~BlobDataHandle() { | 233 BlobDataHandle::~BlobDataHandle() { |
232 BlobRegistry::removeBlobDataRef(m_uuid); | 234 BlobRegistry::removeBlobDataRef(m_uuid); |
233 } | 235 } |
234 | 236 |
235 } // namespace blink | 237 } // namespace blink |
OLD | NEW |