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 |