| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "content/browser/loader/upload_data_stream_builder.h" | 5 #include "content/browser/loader/upload_data_stream_builder.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
| 10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 const uint64 kFileOffset = 10U; | 64 const uint64 kFileOffset = 10U; |
| 65 const uint64 kFileLength = 100U; | 65 const uint64 kFileLength = 100U; |
| 66 const base::Time kFileTime = base::Time::FromDoubleT(999); | 66 const base::Time kFileTime = base::Time::FromDoubleT(999); |
| 67 const int64 kIdentifier = 12345; | 67 const int64 kIdentifier = 12345; |
| 68 | 68 |
| 69 request_body->AppendBytes(kData, arraysize(kData) - 1); | 69 request_body->AppendBytes(kData, arraysize(kData) - 1); |
| 70 request_body->AppendFileRange(base::FilePath(kFilePath), | 70 request_body->AppendFileRange(base::FilePath(kFilePath), |
| 71 kFileOffset, kFileLength, kFileTime); | 71 kFileOffset, kFileLength, kFileTime); |
| 72 request_body->set_identifier(kIdentifier); | 72 request_body->set_identifier(kIdentifier); |
| 73 | 73 |
| 74 scoped_ptr<net::UploadDataStream> upload( | 74 scoped_ptr<net::UploadDataStream> upload(UploadDataStreamBuilder::Build( |
| 75 UploadDataStreamBuilder::Build( | 75 request_body.get(), NULL, NULL, base::MessageLoopProxy::current().get())); |
| 76 request_body, NULL, NULL, base::MessageLoopProxy::current().get())); | |
| 77 | 76 |
| 78 EXPECT_EQ(kIdentifier, upload->identifier()); | 77 EXPECT_EQ(kIdentifier, upload->identifier()); |
| 79 ASSERT_EQ(request_body->elements()->size(), upload->element_readers().size()); | 78 ASSERT_EQ(request_body->elements()->size(), upload->element_readers().size()); |
| 80 | 79 |
| 81 const net::UploadBytesElementReader* r1 = | 80 const net::UploadBytesElementReader* r1 = |
| 82 upload->element_readers()[0]->AsBytesReader(); | 81 upload->element_readers()[0]->AsBytesReader(); |
| 83 ASSERT_TRUE(r1); | 82 ASSERT_TRUE(r1); |
| 84 EXPECT_EQ(kData, std::string(r1->bytes(), r1->length())); | 83 EXPECT_EQ(kData, std::string(r1->bytes(), r1->length())); |
| 85 | 84 |
| 86 const net::UploadFileElementReader* r2 = | 85 const net::UploadFileElementReader* r2 = |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 137 | 136 |
| 138 // Test no blob reference. | 137 // Test no blob reference. |
| 139 scoped_refptr<ResourceRequestBody> request_body(new ResourceRequestBody()); | 138 scoped_refptr<ResourceRequestBody> request_body(new ResourceRequestBody()); |
| 140 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length()); | 139 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length()); |
| 141 request_body->AppendFileRange(upload_element2.path(), | 140 request_body->AppendFileRange(upload_element2.path(), |
| 142 upload_element2.offset(), | 141 upload_element2.offset(), |
| 143 upload_element2.length(), | 142 upload_element2.length(), |
| 144 upload_element2.expected_modification_time()); | 143 upload_element2.expected_modification_time()); |
| 145 | 144 |
| 146 scoped_ptr<net::UploadDataStream> upload( | 145 scoped_ptr<net::UploadDataStream> upload( |
| 147 UploadDataStreamBuilder::Build( | 146 UploadDataStreamBuilder::Build(request_body.get(), |
| 148 request_body, | 147 &blob_storage_controller, |
| 149 &blob_storage_controller, | 148 NULL, |
| 150 NULL, | 149 base::MessageLoopProxy::current().get())); |
| 151 base::MessageLoopProxy::current().get())); | |
| 152 | 150 |
| 153 ASSERT_EQ(2U, upload->element_readers().size()); | 151 ASSERT_EQ(2U, upload->element_readers().size()); |
| 154 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1)); | 152 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1)); |
| 155 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], upload_element2)); | 153 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], upload_element2)); |
| 156 | 154 |
| 157 // Test having only one blob reference that refers to empty blob data. | 155 // Test having only one blob reference that refers to empty blob data. |
| 158 request_body = new ResourceRequestBody(); | 156 request_body = new ResourceRequestBody(); |
| 159 request_body->AppendBlob(blob_url0); | 157 request_body->AppendBlob(blob_url0); |
| 160 | 158 |
| 161 upload = UploadDataStreamBuilder::Build( | 159 upload = |
| 162 request_body, | 160 UploadDataStreamBuilder::Build(request_body.get(), |
| 163 &blob_storage_controller, | 161 &blob_storage_controller, |
| 164 NULL, | 162 NULL, |
| 165 base::MessageLoopProxy::current().get()); | 163 base::MessageLoopProxy::current().get()); |
| 166 ASSERT_EQ(0U, upload->element_readers().size()); | 164 ASSERT_EQ(0U, upload->element_readers().size()); |
| 167 | 165 |
| 168 // Test having only one blob reference. | 166 // Test having only one blob reference. |
| 169 request_body = new ResourceRequestBody(); | 167 request_body = new ResourceRequestBody(); |
| 170 request_body->AppendBlob(blob_url1); | 168 request_body->AppendBlob(blob_url1); |
| 171 | 169 |
| 172 upload = UploadDataStreamBuilder::Build( | 170 upload = |
| 173 request_body, | 171 UploadDataStreamBuilder::Build(request_body.get(), |
| 174 &blob_storage_controller, | 172 &blob_storage_controller, |
| 175 NULL, | 173 NULL, |
| 176 base::MessageLoopProxy::current().get()); | 174 base::MessageLoopProxy::current().get()); |
| 177 ASSERT_EQ(2U, upload->element_readers().size()); | 175 ASSERT_EQ(2U, upload->element_readers().size()); |
| 178 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1)); | 176 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1)); |
| 179 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2)); | 177 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2)); |
| 180 | 178 |
| 181 // Test having one blob reference at the beginning. | 179 // Test having one blob reference at the beginning. |
| 182 request_body = new ResourceRequestBody(); | 180 request_body = new ResourceRequestBody(); |
| 183 request_body->AppendBlob(blob_url1); | 181 request_body->AppendBlob(blob_url1); |
| 184 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length()); | 182 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length()); |
| 185 request_body->AppendFileRange(upload_element2.path(), | 183 request_body->AppendFileRange(upload_element2.path(), |
| 186 upload_element2.offset(), | 184 upload_element2.offset(), |
| 187 upload_element2.length(), | 185 upload_element2.length(), |
| 188 upload_element2.expected_modification_time()); | 186 upload_element2.expected_modification_time()); |
| 189 | 187 |
| 190 upload = UploadDataStreamBuilder::Build( | 188 upload = |
| 191 request_body, | 189 UploadDataStreamBuilder::Build(request_body.get(), |
| 192 &blob_storage_controller, | 190 &blob_storage_controller, |
| 193 NULL, | 191 NULL, |
| 194 base::MessageLoopProxy::current().get()); | 192 base::MessageLoopProxy::current().get()); |
| 195 ASSERT_EQ(4U, upload->element_readers().size()); | 193 ASSERT_EQ(4U, upload->element_readers().size()); |
| 196 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1)); | 194 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1)); |
| 197 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2)); | 195 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2)); |
| 198 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], upload_element1)); | 196 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], upload_element1)); |
| 199 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], upload_element2)); | 197 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], upload_element2)); |
| 200 | 198 |
| 201 // Test having one blob reference at the end. | 199 // Test having one blob reference at the end. |
| 202 request_body = new ResourceRequestBody(); | 200 request_body = new ResourceRequestBody(); |
| 203 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length()); | 201 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length()); |
| 204 request_body->AppendFileRange(upload_element2.path(), | 202 request_body->AppendFileRange(upload_element2.path(), |
| 205 upload_element2.offset(), | 203 upload_element2.offset(), |
| 206 upload_element2.length(), | 204 upload_element2.length(), |
| 207 upload_element2.expected_modification_time()); | 205 upload_element2.expected_modification_time()); |
| 208 request_body->AppendBlob(blob_url1); | 206 request_body->AppendBlob(blob_url1); |
| 209 | 207 |
| 210 upload = UploadDataStreamBuilder::Build( | 208 upload = |
| 211 request_body, | 209 UploadDataStreamBuilder::Build(request_body.get(), |
| 212 &blob_storage_controller, | 210 &blob_storage_controller, |
| 213 NULL, | 211 NULL, |
| 214 base::MessageLoopProxy::current().get()); | 212 base::MessageLoopProxy::current().get()); |
| 215 ASSERT_EQ(4U, upload->element_readers().size()); | 213 ASSERT_EQ(4U, upload->element_readers().size()); |
| 216 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1)); | 214 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1)); |
| 217 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], upload_element2)); | 215 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], upload_element2)); |
| 218 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], blob_element1)); | 216 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], blob_element1)); |
| 219 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], blob_element2)); | 217 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], blob_element2)); |
| 220 | 218 |
| 221 // Test having one blob reference in the middle. | 219 // Test having one blob reference in the middle. |
| 222 request_body = new ResourceRequestBody(); | 220 request_body = new ResourceRequestBody(); |
| 223 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length()); | 221 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length()); |
| 224 request_body->AppendBlob(blob_url1); | 222 request_body->AppendBlob(blob_url1); |
| 225 request_body->AppendFileRange(upload_element2.path(), | 223 request_body->AppendFileRange(upload_element2.path(), |
| 226 upload_element2.offset(), | 224 upload_element2.offset(), |
| 227 upload_element2.length(), | 225 upload_element2.length(), |
| 228 upload_element2.expected_modification_time()); | 226 upload_element2.expected_modification_time()); |
| 229 | 227 |
| 230 upload = UploadDataStreamBuilder::Build( | 228 upload = |
| 231 request_body, | 229 UploadDataStreamBuilder::Build(request_body.get(), |
| 232 &blob_storage_controller, | 230 &blob_storage_controller, |
| 233 NULL, | 231 NULL, |
| 234 base::MessageLoopProxy::current().get()); | 232 base::MessageLoopProxy::current().get()); |
| 235 ASSERT_EQ(4U, upload->element_readers().size()); | 233 ASSERT_EQ(4U, upload->element_readers().size()); |
| 236 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1)); | 234 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], upload_element1)); |
| 237 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element1)); | 235 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element1)); |
| 238 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], blob_element2)); | 236 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], blob_element2)); |
| 239 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], upload_element2)); | 237 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], upload_element2)); |
| 240 | 238 |
| 241 // Test having multiple blob references. | 239 // Test having multiple blob references. |
| 242 request_body = new ResourceRequestBody(); | 240 request_body = new ResourceRequestBody(); |
| 243 request_body->AppendBlob(blob_url1); | 241 request_body->AppendBlob(blob_url1); |
| 244 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length()); | 242 request_body->AppendBytes(upload_element1.bytes(), upload_element1.length()); |
| 245 request_body->AppendBlob(blob_url2); | 243 request_body->AppendBlob(blob_url2); |
| 246 request_body->AppendBlob(blob_url3); | 244 request_body->AppendBlob(blob_url3); |
| 247 request_body->AppendFileRange(upload_element2.path(), | 245 request_body->AppendFileRange(upload_element2.path(), |
| 248 upload_element2.offset(), | 246 upload_element2.offset(), |
| 249 upload_element2.length(), | 247 upload_element2.length(), |
| 250 upload_element2.expected_modification_time()); | 248 upload_element2.expected_modification_time()); |
| 251 | 249 |
| 252 upload = UploadDataStreamBuilder::Build( | 250 upload = |
| 253 request_body, | 251 UploadDataStreamBuilder::Build(request_body.get(), |
| 254 &blob_storage_controller, | 252 &blob_storage_controller, |
| 255 NULL, | 253 NULL, |
| 256 base::MessageLoopProxy::current().get()); | 254 base::MessageLoopProxy::current().get()); |
| 257 ASSERT_EQ(8U, upload->element_readers().size()); | 255 ASSERT_EQ(8U, upload->element_readers().size()); |
| 258 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1)); | 256 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[0], blob_element1)); |
| 259 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2)); | 257 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[1], blob_element2)); |
| 260 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], upload_element1)); | 258 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[2], upload_element1)); |
| 261 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], blob_element1)); | 259 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[3], blob_element1)); |
| 262 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[4], blob_element2)); | 260 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[4], blob_element2)); |
| 263 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[5], blob_element1)); | 261 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[5], blob_element1)); |
| 264 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[6], blob_element2)); | 262 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[6], blob_element2)); |
| 265 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[7], upload_element2)); | 263 EXPECT_TRUE(AreElementsEqual(*upload->element_readers()[7], upload_element2)); |
| 266 } | 264 } |
| 267 | 265 |
| 268 } // namespace content | 266 } // namespace content |
| OLD | NEW |