| Index: webkit/glue/plugins/pepper_url_loader.cc
|
| ===================================================================
|
| --- webkit/glue/plugins/pepper_url_loader.cc (revision 53911)
|
| +++ webkit/glue/plugins/pepper_url_loader.cc (working copy)
|
| @@ -122,6 +122,15 @@
|
| return loader->ReadResponseBody(buffer, bytes_to_read, callback);
|
| }
|
|
|
| +int32_t FinishStreamingToFile(PP_Resource loader_id,
|
| + PP_CompletionCallback callback) {
|
| + scoped_refptr<URLLoader> loader(Resource::GetAs<URLLoader>(loader_id));
|
| + if (!loader)
|
| + return PP_ERROR_BADRESOURCE;
|
| +
|
| + return loader->FinishStreamingToFile(callback);
|
| +}
|
| +
|
| void Close(PP_Resource loader_id) {
|
| scoped_refptr<URLLoader> loader(Resource::GetAs<URLLoader>(loader_id));
|
| if (!loader)
|
| @@ -139,6 +148,7 @@
|
| &GetDownloadProgress,
|
| &GetResponseInfo,
|
| &ReadResponseBody,
|
| + &FinishStreamingToFile,
|
| &Close
|
| };
|
|
|
| @@ -154,7 +164,7 @@
|
| total_bytes_to_be_received_(-1),
|
| user_buffer_(NULL),
|
| user_buffer_size_(0),
|
| - done_(false) {
|
| + done_status_(PP_ERROR_WOULDBLOCK) {
|
| }
|
|
|
| URLLoader::~URLLoader() {
|
| @@ -200,6 +210,8 @@
|
|
|
| int32_t URLLoader::ReadResponseBody(char* buffer, int32_t bytes_to_read,
|
| PP_CompletionCallback callback) {
|
| + if (!response_info_ || response_info_->body())
|
| + return PP_ERROR_FAILED;
|
| if (bytes_to_read <= 0 || !buffer)
|
| return PP_ERROR_BADARGUMENT;
|
| if (pending_callback_.func)
|
| @@ -215,16 +227,32 @@
|
| if (!buffer_.empty())
|
| return FillUserBuffer();
|
|
|
| - if (done_) {
|
| + // We may have already reached EOF.
|
| + if (done_status_ != PP_ERROR_WOULDBLOCK) {
|
| user_buffer_ = NULL;
|
| user_buffer_size_ = 0;
|
| - return 0;
|
| + return done_status_;
|
| }
|
|
|
| pending_callback_ = callback;
|
| return PP_ERROR_WOULDBLOCK;
|
| }
|
|
|
| +int32_t URLLoader::FinishStreamingToFile(PP_CompletionCallback callback) {
|
| + if (!response_info_ || !response_info_->body())
|
| + return PP_ERROR_FAILED;
|
| + if (pending_callback_.func)
|
| + return PP_ERROR_INPROGRESS;
|
| +
|
| + // We may have already reached EOF.
|
| + if (done_status_ != PP_ERROR_WOULDBLOCK)
|
| + return done_status_;
|
| +
|
| + // Wait for didFinishLoading / didFail.
|
| + pending_callback_ = callback;
|
| + return PP_ERROR_WOULDBLOCK;
|
| +}
|
| +
|
| void URLLoader::Close() {
|
| NOTIMPLEMENTED(); // TODO(darin): Implement me.
|
| }
|
| @@ -274,14 +302,14 @@
|
| }
|
|
|
| void URLLoader::didFinishLoading(WebURLLoader* loader) {
|
| - done_ = true;
|
| - RunCallback(PP_OK);
|
| + done_status_ = PP_OK;
|
| + RunCallback(done_status_);
|
| }
|
|
|
| void URLLoader::didFail(WebURLLoader* loader, const WebURLError& error) {
|
| - done_ = true;
|
| // TODO(darin): Provide more detailed error information.
|
| - RunCallback(PP_ERROR_FAILED);
|
| + done_status_ = PP_ERROR_FAILED;
|
| + RunCallback(done_status_);
|
| }
|
|
|
| void URLLoader::RunCallback(int32_t result) {
|
|
|