Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "fake_ppapi/fake_pepper_interface_url_loader.h" | 5 #include "fake_ppapi/fake_pepper_interface_url_loader.h" |
| 6 | 6 |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 #include <strings.h> | 8 #include <strings.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| 11 #include <sstream> | 11 #include <sstream> |
| 12 | 12 |
| 13 #include "gtest/gtest.h" | 13 #include "gtest/gtest.h" |
| 14 | 14 |
| 15 #include "nacl_io/osinttypes.h" | 15 #include "nacl_io/osinttypes.h" |
| 16 | 16 |
| 17 #include "fake_ppapi/fake_filesystem.h" | |
| 18 #include "fake_ppapi/fake_util.h" | |
| 19 | |
| 17 namespace { | 20 namespace { |
| 18 | 21 |
| 19 bool GetHeaderValue(const std::string& headers, | 22 bool GetHeaderValue(const std::string& headers, |
| 20 const std::string& key, | 23 const std::string& key, |
| 21 std::string* out_value) { | 24 std::string* out_value) { |
| 22 out_value->clear(); | 25 out_value->clear(); |
| 23 | 26 |
| 24 size_t offset = 0; | 27 size_t offset = 0; |
| 25 while (offset != std::string::npos) { | 28 while (offset != std::string::npos) { |
| 26 // Find the next colon; this separates the key from the value. | 29 // Find the next colon; this separates the key from the value. |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 69 EXPECT_TRUE(manager != NULL); | 72 EXPECT_TRUE(manager != NULL); |
| 70 if (response != 0) | 73 if (response != 0) |
| 71 manager->Release(response); | 74 manager->Release(response); |
| 72 delete server; | 75 delete server; |
| 73 } | 76 } |
| 74 | 77 |
| 75 static const char* classname() { return "FakeURLLoaderResource"; } | 78 static const char* classname() { return "FakeURLLoaderResource"; } |
| 76 | 79 |
| 77 FakeResourceManager* manager; // Weak reference. | 80 FakeResourceManager* manager; // Weak reference. |
| 78 FakeURLLoaderServer* server; | 81 FakeURLLoaderServer* server; |
| 79 FakeURLLoaderEntity* entity; // Weak reference. | 82 FakeURLLoaderEntity* entity; // Weak reference. |
| 80 PP_Resource response; | 83 PP_Resource response; |
| 81 off_t read_offset; | 84 off_t read_offset; |
| 82 off_t read_end; | 85 off_t read_end; |
| 83 }; | 86 }; |
| 84 | 87 |
| 85 class FakeURLRequestInfoResource : public FakeResource { | |
| 86 public: | |
| 87 FakeURLRequestInfoResource() {} | |
| 88 static const char* classname() { return "FakeURLRequestInfoResource"; } | |
| 89 | |
| 90 std::string url; | |
| 91 std::string method; | |
| 92 std::string headers; | |
| 93 }; | |
| 94 | |
| 95 class FakeURLResponseInfoResource : public FakeResource { | |
| 96 public: | |
| 97 FakeURLResponseInfoResource() : status_code(0) {} | |
| 98 static const char* classname() { return "FakeURLResponseInfoResource"; } | |
| 99 | |
| 100 int status_code; | |
| 101 std::string url; | |
| 102 std::string headers; | |
| 103 }; | |
| 104 | |
| 105 // Helper function to call the completion callback if it is defined (an | |
| 106 // asynchronous call), or return the result directly if it isn't (a synchronous | |
| 107 // call). | |
| 108 // | |
| 109 // Use like this: | |
| 110 // if (<some error condition>) | |
| 111 // return RunCompletionCallback(callback, PP_ERROR_FUBAR); | |
| 112 // | |
| 113 // /* Everything worked OK */ | |
| 114 // return RunCompletionCallback(callback, PP_OK); | |
| 115 int32_t RunCompletionCallback(PP_CompletionCallback* callback, int32_t result) { | |
| 116 if (callback->func) { | |
| 117 PP_RunCompletionCallback(callback, result); | |
| 118 return PP_OK_COMPLETIONPENDING; | |
| 119 } | |
| 120 return result; | |
| 121 } | |
| 122 | |
| 123 void HandleContentLength(FakeURLLoaderResource* loader, | 88 void HandleContentLength(FakeURLLoaderResource* loader, |
| 124 FakeURLResponseInfoResource* response, | 89 FakeURLResponseInfoResource* response, |
| 125 FakeURLLoaderEntity* entity) { | 90 FakeURLLoaderEntity* entity) { |
| 126 off_t content_length = entity->size(); | 91 off_t content_length = entity->size(); |
| 127 if (!loader->server->send_content_length()) | 92 if (!loader->server->send_content_length()) |
| 128 return; | 93 return; |
| 129 | 94 |
| 130 std::ostringstream ss; | 95 std::ostringstream ss; |
| 131 ss << "Content-Length: " << content_length << "\n"; | 96 ss << "Content-Length: " << content_length << "\n"; |
| 132 response->headers += ss.str(); | 97 response->headers += ss.str(); |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 147 | 112 |
| 148 // We don't support all range requests, just bytes=<num>-<num> | 113 // We don't support all range requests, just bytes=<num>-<num> |
| 149 off_t lo; | 114 off_t lo; |
| 150 off_t hi; | 115 off_t hi; |
| 151 if (sscanf(range.c_str(), "bytes=%" SCNi64 "-%" SCNi64, &lo, &hi) != 2) { | 116 if (sscanf(range.c_str(), "bytes=%" SCNi64 "-%" SCNi64, &lo, &hi) != 2) { |
| 152 // Couldn't parse the range value. | 117 // Couldn't parse the range value. |
| 153 return; | 118 return; |
| 154 } | 119 } |
| 155 | 120 |
| 156 off_t content_length = entity->size(); | 121 off_t content_length = entity->size(); |
| 157 if (lo > content_length) { | 122 if (lo >= content_length) { |
| 158 // Trying to start reading past the end of the entity is | 123 // Trying to start reading past the end of the entity is |
| 159 // unsatisfiable. | 124 // unsatisfiable. |
| 160 response->status_code = 416; // Request range not satisfiable. | 125 response->status_code = 416; // Request range not satisfiable. |
| 161 return; | 126 return; |
| 162 } | 127 } |
| 163 | 128 |
| 164 // Clamp the hi value to the content length. | 129 // Clamp the hi value to the content length. |
| 165 if (hi >= content_length) | 130 if (hi >= content_length) |
| 166 hi = content_length - 1; | 131 hi = content_length - 1; |
| 167 | 132 |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 181 ss << "Content-Range: bytes " << lo << "-" << hi << "/" << content_length | 146 ss << "Content-Range: bytes " << lo << "-" << hi << "/" << content_length |
| 182 << "\n"; | 147 << "\n"; |
| 183 response->headers += ss.str(); | 148 response->headers += ss.str(); |
| 184 | 149 |
| 185 response->status_code = 206; // Partial content | 150 response->status_code = 206; // Partial content |
| 186 } | 151 } |
| 187 | 152 |
| 188 } // namespace | 153 } // namespace |
| 189 | 154 |
| 190 FakeURLLoaderEntity::FakeURLLoaderEntity(const std::string& body) | 155 FakeURLLoaderEntity::FakeURLLoaderEntity(const std::string& body) |
| 191 : body_(body), size_(body_.size()), repeat_(false) { | 156 : body_(body), size_(body_.size()), repeat_(false) {} |
| 192 } | |
| 193 | 157 |
| 194 // Rather than specifying the entire file, specify a string to repeat, and the | 158 // Rather than specifying the entire file, specify a string to repeat, and the |
| 195 // full length. This lets us test extremely large files without having to store | 159 // full length. This lets us test extremely large files without having to store |
| 196 // them in memory. | 160 // them in memory. |
| 197 FakeURLLoaderEntity::FakeURLLoaderEntity(const std::string& to_repeat, | 161 FakeURLLoaderEntity::FakeURLLoaderEntity(const std::string& to_repeat, |
| 198 off_t size) | 162 off_t size) |
| 199 : body_(to_repeat), size_(size), repeat_(true) { | 163 : body_(to_repeat), size_(size), repeat_(true) {} |
| 200 } | |
| 201 | 164 |
| 202 size_t FakeURLLoaderEntity::Read(void* buffer, size_t count, off_t offset) { | 165 size_t FakeURLLoaderEntity::Read(void* buffer, size_t count, off_t offset) { |
| 203 off_t max_read_count = | 166 off_t max_read_count = |
| 204 std::max<off_t>(std::min<off_t>(size_ - offset, 0xffffffff), 0); | 167 std::max<off_t>(std::min<off_t>(size_ - offset, 0xffffffff), 0); |
| 205 size_t bytes_to_read = std::min(count, static_cast<size_t>(max_read_count)); | 168 size_t bytes_to_read = std::min(count, static_cast<size_t>(max_read_count)); |
| 206 | 169 |
| 207 if (repeat_) { | 170 if (repeat_) { |
| 208 size_t src_size = body_.size(); | 171 size_t src_size = body_.size(); |
| 209 char* dst = static_cast<char*>(buffer); | 172 char* dst = static_cast<char*>(buffer); |
| 210 const char* src = body_.data(); | 173 const char* src = body_.data(); |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 235 memcpy(buffer, &body_.data()[offset], bytes_to_read); | 198 memcpy(buffer, &body_.data()[offset], bytes_to_read); |
| 236 } | 199 } |
| 237 | 200 |
| 238 return bytes_to_read; | 201 return bytes_to_read; |
| 239 } | 202 } |
| 240 | 203 |
| 241 FakeURLLoaderServer::FakeURLLoaderServer() | 204 FakeURLLoaderServer::FakeURLLoaderServer() |
| 242 : max_read_size_(0), | 205 : max_read_size_(0), |
| 243 send_content_length_(false), | 206 send_content_length_(false), |
| 244 allow_partial_(false), | 207 allow_partial_(false), |
| 245 allow_head_(true) { | 208 allow_head_(true) {} |
| 246 } | |
| 247 | 209 |
| 248 void FakeURLLoaderServer::Clear() { | 210 void FakeURLLoaderServer::Clear() { |
| 249 entity_map_.clear(); | 211 entity_map_.clear(); |
| 250 } | 212 } |
| 251 | 213 |
| 252 bool FakeURLLoaderServer::AddEntity(const std::string& url, | 214 bool FakeURLLoaderServer::AddEntity(const std::string& url, |
| 253 const std::string& body, | 215 const std::string& body, |
| 254 FakeURLLoaderEntity** out_entity) { | 216 FakeURLLoaderEntity** out_entity) { |
| 255 EntityMap::iterator iter = entity_map_.find(url); | 217 EntityMap::iterator iter = entity_map_.find(url); |
| 256 if (iter != entity_map_.end()) { | 218 if (iter != entity_map_.end()) { |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 317 | 279 |
| 318 int FakeURLLoaderServer::GetError(const std::string& url) { | 280 int FakeURLLoaderServer::GetError(const std::string& url) { |
| 319 ErrorMap::iterator iter = error_map_.find(url); | 281 ErrorMap::iterator iter = error_map_.find(url); |
| 320 if (iter == error_map_.end()) | 282 if (iter == error_map_.end()) |
| 321 return 0; | 283 return 0; |
| 322 return iter->second; | 284 return iter->second; |
| 323 } | 285 } |
| 324 | 286 |
| 325 FakeURLLoaderInterface::FakeURLLoaderInterface( | 287 FakeURLLoaderInterface::FakeURLLoaderInterface( |
| 326 FakeCoreInterface* core_interface) | 288 FakeCoreInterface* core_interface) |
| 327 : core_interface_(core_interface) { | 289 : core_interface_(core_interface) {} |
| 328 } | |
| 329 | 290 |
| 330 PP_Resource FakeURLLoaderInterface::Create(PP_Instance instance) { | 291 PP_Resource FakeURLLoaderInterface::Create(PP_Instance instance) { |
| 331 FakeInstanceResource* instance_resource = | 292 FakeInstanceResource* instance_resource = |
| 332 core_interface_->resource_manager()->Get<FakeInstanceResource>(instance); | 293 core_interface_->resource_manager()->Get<FakeInstanceResource>(instance); |
| 333 if (instance_resource == NULL) | 294 if (instance_resource == NULL) |
| 334 return PP_ERROR_BADRESOURCE; | 295 return PP_ERROR_BADRESOURCE; |
| 335 | 296 |
| 336 FakeURLLoaderResource* loader_resource = new FakeURLLoaderResource; | 297 FakeURLLoaderResource* loader_resource = new FakeURLLoaderResource; |
| 337 loader_resource->manager = core_interface_->resource_manager(); | 298 loader_resource->manager = core_interface_->resource_manager(); |
| 338 loader_resource->server = | 299 loader_resource->server = |
| 339 new FakeURLLoaderServer(*instance_resource->server_template); | 300 new FakeURLLoaderServer(*instance_resource->server_template); |
| 340 | 301 |
| 341 return CREATE_RESOURCE(core_interface_->resource_manager(), | 302 return CREATE_RESOURCE(core_interface_->resource_manager(), |
| 342 FakeURLLoaderResource, | 303 FakeURLLoaderResource, loader_resource); |
| 343 loader_resource); | |
| 344 } | 304 } |
| 345 | 305 |
| 346 int32_t FakeURLLoaderInterface::Open(PP_Resource loader, | 306 int32_t FakeURLLoaderInterface::Open(PP_Resource loader, |
| 347 PP_Resource request, | 307 PP_Resource request, |
| 348 PP_CompletionCallback callback) { | 308 PP_CompletionCallback callback) { |
| 349 FakeURLLoaderResource* loader_resource = | 309 FakeURLLoaderResource* loader_resource = |
| 350 core_interface_->resource_manager()->Get<FakeURLLoaderResource>(loader); | 310 core_interface_->resource_manager()->Get<FakeURLLoaderResource>(loader); |
| 351 if (loader_resource == NULL) | 311 if (loader_resource == NULL) |
| 352 return PP_ERROR_BADRESOURCE; | 312 return PP_ERROR_BADRESOURCE; |
| 353 | 313 |
| 354 FakeURLRequestInfoResource* request_resource = | 314 FakeURLRequestInfoResource* request_resource = |
| 355 core_interface_->resource_manager()->Get<FakeURLRequestInfoResource>( | 315 core_interface_->resource_manager()->Get<FakeURLRequestInfoResource>( |
| 356 request); | 316 request); |
| 357 if (request_resource == NULL) | 317 if (request_resource == NULL) |
| 358 return PP_ERROR_BADRESOURCE; | 318 return PP_ERROR_BADRESOURCE; |
| 359 | 319 |
| 360 // Create a response resource. | 320 // Create a response resource. |
| 361 FakeURLResponseInfoResource* response_resource = | 321 FakeURLResponseInfoResource* response_resource = |
| 362 new FakeURLResponseInfoResource; | 322 new FakeURLResponseInfoResource; |
| 363 loader_resource->response = | 323 loader_resource->response = |
| 364 CREATE_RESOURCE(core_interface_->resource_manager(), | 324 CREATE_RESOURCE(core_interface_->resource_manager(), |
| 365 FakeURLResponseInfoResource, | 325 FakeURLResponseInfoResource, response_resource); |
| 366 response_resource); | |
| 367 | 326 |
| 368 loader_resource->entity = NULL; | 327 loader_resource->entity = NULL; |
| 369 loader_resource->read_offset = 0; | 328 loader_resource->read_offset = 0; |
| 370 loader_resource->read_end = 0; | 329 loader_resource->read_end = 0; |
| 371 | 330 |
| 372 // Get the URL from the request info. | 331 // Get the URL from the request info. |
| 373 std::string url = request_resource->url; | 332 std::string url = request_resource->url; |
| 374 std::string method = request_resource->method; | 333 std::string method = request_resource->method; |
| 375 | 334 |
| 376 response_resource->url = url; | 335 response_resource->url = url; |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 440 if (server_max_read_size != 0) | 399 if (server_max_read_size != 0) |
| 441 bytes_to_read = std::min<int32_t>(bytes_to_read, server_max_read_size); | 400 bytes_to_read = std::min<int32_t>(bytes_to_read, server_max_read_size); |
| 442 | 401 |
| 443 size_t bytes_read = loader_resource->entity->Read( | 402 size_t bytes_read = loader_resource->entity->Read( |
| 444 buffer, bytes_to_read, loader_resource->read_offset); | 403 buffer, bytes_to_read, loader_resource->read_offset); |
| 445 loader_resource->read_offset += bytes_read; | 404 loader_resource->read_offset += bytes_read; |
| 446 | 405 |
| 447 return RunCompletionCallback(&callback, bytes_read); | 406 return RunCompletionCallback(&callback, bytes_read); |
| 448 } | 407 } |
| 449 | 408 |
| 409 int32_t FakeURLLoaderInterface::FinishStreamingToFile( | |
| 410 PP_Resource loader, | |
| 411 PP_CompletionCallback callback) { | |
| 412 return PP_ERROR_NOTSUPPORTED; | |
| 413 } | |
| 414 | |
| 450 void FakeURLLoaderInterface::Close(PP_Resource loader) { | 415 void FakeURLLoaderInterface::Close(PP_Resource loader) { |
| 451 FakeURLLoaderResource* loader_resource = | 416 FakeURLLoaderResource* loader_resource = |
| 452 core_interface_->resource_manager()->Get<FakeURLLoaderResource>(loader); | 417 core_interface_->resource_manager()->Get<FakeURLLoaderResource>(loader); |
| 453 if (loader_resource == NULL) | 418 if (loader_resource == NULL) |
| 454 return; | 419 return; |
| 455 | 420 |
| 456 core_interface_->resource_manager()->Release(loader_resource->response); | 421 core_interface_->resource_manager()->Release(loader_resource->response); |
| 457 | 422 |
| 458 loader_resource->server = NULL; | 423 loader_resource->server = NULL; |
| 459 loader_resource->entity = NULL; | 424 loader_resource->entity = NULL; |
| 460 loader_resource->response = 0; | 425 loader_resource->response = 0; |
| 461 loader_resource->read_offset = 0; | 426 loader_resource->read_offset = 0; |
| 462 } | 427 } |
| 463 | 428 |
| 464 FakeURLRequestInfoInterface::FakeURLRequestInfoInterface( | 429 FakeURLRequestInfoInterface::FakeURLRequestInfoInterface( |
| 465 FakeCoreInterface* core_interface, | 430 FakeCoreInterface* core_interface, |
| 466 FakeVarInterface* var_interface) | 431 FakeVarInterface* var_interface) |
| 467 : core_interface_(core_interface), var_interface_(var_interface) { | 432 : core_interface_(core_interface), var_interface_(var_interface) {} |
| 468 } | |
| 469 | 433 |
| 470 PP_Resource FakeURLRequestInfoInterface::Create(PP_Instance instance) { | 434 PP_Resource FakeURLRequestInfoInterface::Create(PP_Instance instance) { |
| 471 FakeInstanceResource* instance_resource = | |
| 472 core_interface_->resource_manager()->Get<FakeInstanceResource>(instance); | |
| 473 if (instance_resource == NULL) | |
| 474 return PP_ERROR_BADRESOURCE; | |
| 475 | |
| 476 return CREATE_RESOURCE(core_interface_->resource_manager(), | 435 return CREATE_RESOURCE(core_interface_->resource_manager(), |
| 477 FakeURLRequestInfoResource, | 436 FakeURLRequestInfoResource, |
| 478 new FakeURLRequestInfoResource); | 437 new FakeURLRequestInfoResource); |
| 479 } | 438 } |
| 480 | 439 |
| 481 PP_Bool FakeURLRequestInfoInterface::SetProperty(PP_Resource request, | 440 PP_Bool FakeURLRequestInfoInterface::SetProperty(PP_Resource request, |
| 482 PP_URLRequestProperty property, | 441 PP_URLRequestProperty property, |
| 483 PP_Var value) { | 442 PP_Var value) { |
| 484 FakeURLRequestInfoResource* request_resource = | 443 FakeURLRequestInfoResource* request_resource = |
| 485 core_interface_->resource_manager()->Get<FakeURLRequestInfoResource>( | 444 core_interface_->resource_manager()->Get<FakeURLRequestInfoResource>( |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 532 return PP_FALSE; | 491 return PP_FALSE; |
| 533 // Throw the value away for now. TODO(binji): add tests for this. | 492 // Throw the value away for now. TODO(binji): add tests for this. |
| 534 return PP_TRUE; | 493 return PP_TRUE; |
| 535 } | 494 } |
| 536 case PP_URLREQUESTPROPERTY_ALLOWCREDENTIALS: { | 495 case PP_URLREQUESTPROPERTY_ALLOWCREDENTIALS: { |
| 537 if (value.type != PP_VARTYPE_BOOL) | 496 if (value.type != PP_VARTYPE_BOOL) |
| 538 return PP_FALSE; | 497 return PP_FALSE; |
| 539 // Throw the value away for now. TODO(binji): add tests for this. | 498 // Throw the value away for now. TODO(binji): add tests for this. |
| 540 return PP_TRUE; | 499 return PP_TRUE; |
| 541 } | 500 } |
| 501 case PP_URLREQUESTPROPERTY_STREAMTOFILE: { | |
| 502 if (value.type != PP_VARTYPE_BOOL) | |
| 503 return PP_FALSE; | |
| 504 // Throw the value away for now. TODO: add tests for this. | |
|
chanpatorikku
2016/08/07 02:41:03
Another TODO, FYI.
| |
| 505 return PP_TRUE; | |
| 506 } | |
| 542 default: | 507 default: |
| 543 EXPECT_TRUE(false) << "Unimplemented property " << property | 508 EXPECT_TRUE(false) << "Unimplemented property " << property |
| 544 << " in " | 509 << " in " |
| 545 "FakeURLRequestInfoInterface::SetProperty"; | 510 "FakeURLRequestInfoInterface::SetProperty"; |
| 546 return PP_FALSE; | 511 return PP_FALSE; |
| 547 } | 512 } |
| 548 } | 513 } |
| 549 | 514 |
| 515 PP_Bool FakeURLRequestInfoInterface::AppendDataToBody(PP_Resource request, | |
| 516 const void* data, | |
| 517 uint32_t len) { | |
| 518 FakeURLRequestInfoResource* request_resource = | |
| 519 core_interface_->resource_manager()->Get<FakeURLRequestInfoResource>( | |
| 520 request); | |
| 521 if (request_resource == NULL) | |
| 522 return PP_FALSE; | |
| 523 | |
| 524 request_resource->body = std::string((char*)data, len); | |
| 525 | |
| 526 return PP_TRUE; | |
| 527 } | |
| 528 | |
| 550 FakeURLResponseInfoInterface::FakeURLResponseInfoInterface( | 529 FakeURLResponseInfoInterface::FakeURLResponseInfoInterface( |
| 551 FakeCoreInterface* core_interface, | 530 FakeCoreInterface* core_interface, |
| 552 FakeVarInterface* var_interface) | 531 FakeVarInterface* var_interface, |
| 553 : core_interface_(core_interface), var_interface_(var_interface) { | 532 FakeFileRefInterface* file_ref_interface) |
| 533 : core_interface_(core_interface), | |
| 534 var_interface_(var_interface), | |
| 535 file_ref_interface_(file_ref_interface) { | |
| 536 FakeFileSystemResource* file_system_resource = new FakeFileSystemResource; | |
| 537 file_system_resource->filesystem = new FakeFilesystem(); | |
| 538 | |
| 539 filesystem_resource_ = | |
| 540 CREATE_RESOURCE(core_interface_->resource_manager(), | |
| 541 FakeFileSystemResource, file_system_resource); | |
| 542 } | |
| 543 | |
| 544 FakeURLResponseInfoInterface::~FakeURLResponseInfoInterface() { | |
| 545 core_interface_->ReleaseResource(filesystem_resource_); | |
| 554 } | 546 } |
| 555 | 547 |
| 556 PP_Var FakeURLResponseInfoInterface::GetProperty( | 548 PP_Var FakeURLResponseInfoInterface::GetProperty( |
| 557 PP_Resource response, | 549 PP_Resource response, |
| 558 PP_URLResponseProperty property) { | 550 PP_URLResponseProperty property) { |
| 559 FakeURLResponseInfoResource* response_resource = | 551 FakeURLResponseInfoResource* response_resource = |
| 560 core_interface_->resource_manager()->Get<FakeURLResponseInfoResource>( | 552 core_interface_->resource_manager()->Get<FakeURLResponseInfoResource>( |
| 561 response); | 553 response); |
| 562 if (response_resource == NULL) | 554 if (response_resource == NULL) |
| 563 return PP_Var(); | 555 return PP_Var(); |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 574 return var_interface_->VarFromUtf8(response_resource->headers.data(), | 566 return var_interface_->VarFromUtf8(response_resource->headers.data(), |
| 575 response_resource->headers.size()); | 567 response_resource->headers.size()); |
| 576 default: | 568 default: |
| 577 EXPECT_TRUE(false) << "Unimplemented property " << property | 569 EXPECT_TRUE(false) << "Unimplemented property " << property |
| 578 << " in " | 570 << " in " |
| 579 "FakeURLResponseInfoInterface::GetProperty"; | 571 "FakeURLResponseInfoInterface::GetProperty"; |
| 580 return PP_Var(); | 572 return PP_Var(); |
| 581 } | 573 } |
| 582 } | 574 } |
| 583 | 575 |
| 576 PP_Resource FakeURLResponseInfoInterface::GetBodyAsFileRef( | |
| 577 PP_Resource response) { | |
| 578 FakeURLResponseInfoResource* response_resource = | |
| 579 core_interface_->resource_manager()->Get<FakeURLResponseInfoResource>( | |
| 580 response); | |
| 581 if (response_resource == NULL) | |
| 582 return PP_ERROR_BADRESOURCE; | |
| 583 | |
| 584 FakeFileSystemResource* file_system_resource = | |
| 585 core_interface_->resource_manager()->Get<FakeFileSystemResource>( | |
| 586 filesystem_resource_); | |
| 587 | |
| 588 if (file_system_resource == NULL) | |
| 589 return PP_ERROR_BADRESOURCE; | |
| 590 | |
| 591 char path_buffer[1024]; | |
| 592 int char_written = sprintf(path_buffer, "%i", response); | |
| 593 if (char_written < 0) { | |
| 594 return PP_ERROR_FAILED; | |
| 595 } | |
| 596 | |
| 597 FakeNode* fake_node; | |
| 598 if (!file_system_resource->filesystem->AddFile( | |
| 599 std::string(path_buffer), response_resource->body, &fake_node)) { | |
| 600 return PP_ERROR_FAILED; | |
| 601 } | |
| 602 | |
| 603 file_system_resource->opened = true; | |
| 604 | |
| 605 return file_ref_interface_->Create(filesystem_resource_, path_buffer); | |
| 606 } | |
| 607 | |
| 584 FakePepperInterfaceURLLoader::FakePepperInterfaceURLLoader() | 608 FakePepperInterfaceURLLoader::FakePepperInterfaceURLLoader() |
| 585 : core_interface_(&resource_manager_), | 609 : core_interface_(&resource_manager_), |
| 586 var_interface_(&var_manager_), | 610 var_interface_(&var_manager_), |
| 611 file_ref_interface_(&core_interface_, &var_interface_), | |
| 587 url_loader_interface_(&core_interface_), | 612 url_loader_interface_(&core_interface_), |
| 588 url_request_info_interface_(&core_interface_, &var_interface_), | 613 url_request_info_interface_(&core_interface_, &var_interface_), |
| 589 url_response_info_interface_(&core_interface_, &var_interface_) { | 614 url_response_info_interface_(&core_interface_, |
| 615 &var_interface_, | |
| 616 &file_ref_interface_) { | |
| 590 FakeInstanceResource* instance_resource = new FakeInstanceResource; | 617 FakeInstanceResource* instance_resource = new FakeInstanceResource; |
| 591 instance_resource->server_template = &server_template_; | 618 instance_resource->server_template = &server_template_; |
| 592 instance_ = CREATE_RESOURCE(core_interface_.resource_manager(), | 619 instance_ = CREATE_RESOURCE(core_interface_.resource_manager(), |
| 593 FakeInstanceResource, | 620 FakeInstanceResource, instance_resource); |
| 594 instance_resource); | |
| 595 } | 621 } |
| 596 | 622 |
| 597 FakePepperInterfaceURLLoader::~FakePepperInterfaceURLLoader() { | 623 FakePepperInterfaceURLLoader::~FakePepperInterfaceURLLoader() { |
| 598 core_interface_.ReleaseResource(instance_); | 624 core_interface_.ReleaseResource(instance_); |
| 599 } | 625 } |
| 600 | 626 |
| 601 nacl_io::CoreInterface* FakePepperInterfaceURLLoader::GetCoreInterface() { | 627 nacl_io::CoreInterface* FakePepperInterfaceURLLoader::GetCoreInterface() { |
| 602 return &core_interface_; | 628 return &core_interface_; |
| 603 } | 629 } |
| 604 | 630 |
| 605 nacl_io::VarInterface* FakePepperInterfaceURLLoader::GetVarInterface() { | 631 nacl_io::VarInterface* FakePepperInterfaceURLLoader::GetVarInterface() { |
| 606 return &var_interface_; | 632 return &var_interface_; |
| 607 } | 633 } |
| 608 | 634 |
| 635 nacl_io::FileRefInterface* FakePepperInterfaceURLLoader::GetFileRefInterface() { | |
| 636 return &file_ref_interface_; | |
| 637 } | |
| 638 | |
| 609 nacl_io::URLLoaderInterface* | 639 nacl_io::URLLoaderInterface* |
| 610 FakePepperInterfaceURLLoader::GetURLLoaderInterface() { | 640 FakePepperInterfaceURLLoader::GetURLLoaderInterface() { |
| 611 return &url_loader_interface_; | 641 return &url_loader_interface_; |
| 612 } | 642 } |
| 613 | 643 |
| 614 nacl_io::URLRequestInfoInterface* | 644 nacl_io::URLRequestInfoInterface* |
| 615 FakePepperInterfaceURLLoader::GetURLRequestInfoInterface() { | 645 FakePepperInterfaceURLLoader::GetURLRequestInfoInterface() { |
| 616 return &url_request_info_interface_; | 646 return &url_request_info_interface_; |
| 617 } | 647 } |
| 618 | 648 |
| 619 nacl_io::URLResponseInfoInterface* | 649 nacl_io::URLResponseInfoInterface* |
| 620 FakePepperInterfaceURLLoader::GetURLResponseInfoInterface() { | 650 FakePepperInterfaceURLLoader::GetURLResponseInfoInterface() { |
| 621 return &url_response_info_interface_; | 651 return &url_response_info_interface_; |
| 622 } | 652 } |
| OLD | NEW |