| Index: ppapi/native_client/src/trusted/plugin/file_downloader.cc
|
| diff --git a/ppapi/native_client/src/trusted/plugin/file_downloader.cc b/ppapi/native_client/src/trusted/plugin/file_downloader.cc
|
| deleted file mode 100644
|
| index ccddfe8f693fc20462f31bc67067b8cd7399101c..0000000000000000000000000000000000000000
|
| --- a/ppapi/native_client/src/trusted/plugin/file_downloader.cc
|
| +++ /dev/null
|
| @@ -1,179 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "ppapi/native_client/src/trusted/plugin/file_downloader.h"
|
| -
|
| -#include <stdio.h>
|
| -#include <string.h>
|
| -#include <string>
|
| -
|
| -#include "native_client/src/include/portability_io.h"
|
| -#include "native_client/src/shared/platform/nacl_check.h"
|
| -#include "native_client/src/shared/platform/nacl_time.h"
|
| -#include "ppapi/c/pp_errors.h"
|
| -#include "ppapi/cpp/url_request_info.h"
|
| -#include "ppapi/cpp/url_response_info.h"
|
| -#include "ppapi/native_client/src/trusted/plugin/callback_source.h"
|
| -#include "ppapi/native_client/src/trusted/plugin/plugin.h"
|
| -#include "ppapi/native_client/src/trusted/plugin/utility.h"
|
| -
|
| -namespace plugin {
|
| -
|
| -FileDownloader::FileDownloader(Plugin* instance)
|
| - : instance_(instance),
|
| - file_open_notify_callback_(pp::BlockUntilComplete()),
|
| - stream_finish_callback_(pp::BlockUntilComplete()),
|
| - mode_(DOWNLOAD_NONE),
|
| - data_stream_callback_source_(NULL) {
|
| - callback_factory_.Initialize(this);
|
| - temp_buffer_.resize(kTempBufferSize);
|
| -}
|
| -
|
| -bool FileDownloader::OpenStream(
|
| - const nacl::string& url,
|
| - const pp::CompletionCallback& callback,
|
| - StreamCallbackSource* stream_callback_source) {
|
| - data_stream_callback_source_ = stream_callback_source;
|
| - PLUGIN_PRINTF(("FileDownloader::Open (url=%s)\n", url.c_str()));
|
| - if (callback.pp_completion_callback().func == NULL || instance_ == NULL)
|
| - return false;
|
| -
|
| - status_code_ = -1;
|
| - file_open_notify_callback_ = callback;
|
| - mode_ = DOWNLOAD_TO_BUFFER_AND_STREAM;
|
| - pp::URLRequestInfo url_request(instance_);
|
| -
|
| - // Allow CORS.
|
| - // Note that "SetAllowCrossOriginRequests" (currently) has the side effect of
|
| - // preventing credentials from being sent on same-origin requests. We
|
| - // therefore avoid setting this flag unless we know for sure it is a
|
| - // cross-origin request, resulting in behavior similar to XMLHttpRequest.
|
| - if (!instance_->DocumentCanRequest(url))
|
| - url_request.SetAllowCrossOriginRequests(true);
|
| -
|
| - if (!extra_request_headers_.empty())
|
| - url_request.SetHeaders(extra_request_headers_);
|
| -
|
| - // Reset the url loader and file reader.
|
| - // Note that we have the only reference to the underlying objects, so
|
| - // this will implicitly close any pending IO and destroy them.
|
| - url_loader_ = pp::URLLoader(instance_);
|
| - url_request.SetRecordDownloadProgress(true);
|
| -
|
| - // Prepare the url request.
|
| - url_request.SetURL(url);
|
| -
|
| - // Request asynchronous download of the url providing an on-load callback.
|
| - // As long as this step is guaranteed to be asynchronous, we can call
|
| - // synchronously all other internal callbacks that eventually result in the
|
| - // invocation of the user callback. The user code will not be reentered.
|
| - pp::CompletionCallback onload_callback =
|
| - callback_factory_.NewCallback(&FileDownloader::URLLoadStartNotify);
|
| - int32_t pp_error = url_loader_.Open(url_request, onload_callback);
|
| - PLUGIN_PRINTF(("FileDownloader::Open (pp_error=%" NACL_PRId32 ")\n",
|
| - pp_error));
|
| - CHECK(pp_error == PP_OK_COMPLETIONPENDING);
|
| - return true;
|
| -}
|
| -
|
| -bool FileDownloader::InitialResponseIsValid() {
|
| - // Process the response, validating the headers to confirm successful loading.
|
| - url_response_ = url_loader_.GetResponseInfo();
|
| - if (url_response_.is_null()) {
|
| - PLUGIN_PRINTF((
|
| - "FileDownloader::InitialResponseIsValid (url_response_=NULL)\n"));
|
| - return false;
|
| - }
|
| -
|
| - pp::Var full_url = url_response_.GetURL();
|
| - if (!full_url.is_string()) {
|
| - PLUGIN_PRINTF((
|
| - "FileDownloader::InitialResponseIsValid (url is not a string)\n"));
|
| - return false;
|
| - }
|
| - full_url_ = full_url.AsString();
|
| -
|
| - status_code_ = url_response_.GetStatusCode();
|
| - PLUGIN_PRINTF(("FileDownloader::InitialResponseIsValid ("
|
| - "response status_code=%" NACL_PRId32 ")\n", status_code_));
|
| - return status_code_ == NACL_HTTP_STATUS_OK;
|
| -}
|
| -
|
| -void FileDownloader::URLLoadStartNotify(int32_t pp_error) {
|
| - PLUGIN_PRINTF(("FileDownloader::URLLoadStartNotify (pp_error=%"
|
| - NACL_PRId32")\n", pp_error));
|
| - if (pp_error != PP_OK) {
|
| - file_open_notify_callback_.RunAndClear(pp_error);
|
| - return;
|
| - }
|
| -
|
| - if (!InitialResponseIsValid()) {
|
| - file_open_notify_callback_.RunAndClear(PP_ERROR_FAILED);
|
| - return;
|
| - }
|
| -
|
| - file_open_notify_callback_.RunAndClear(PP_OK);
|
| -}
|
| -
|
| -void FileDownloader::BeginStreaming(
|
| - const pp::CompletionCallback& callback) {
|
| - stream_finish_callback_ = callback;
|
| -
|
| - // Finish streaming the body providing an optional callback.
|
| - pp::CompletionCallback onread_callback =
|
| - callback_factory_.NewOptionalCallback(
|
| - &FileDownloader::URLReadBodyNotify);
|
| - int32_t temp_size = static_cast<int32_t>(temp_buffer_.size());
|
| - int32_t pp_error = url_loader_.ReadResponseBody(&temp_buffer_[0],
|
| - temp_size,
|
| - onread_callback);
|
| - if (pp_error != PP_OK_COMPLETIONPENDING)
|
| - onread_callback.RunAndClear(pp_error);
|
| -}
|
| -
|
| -void FileDownloader::URLReadBodyNotify(int32_t pp_error) {
|
| - PLUGIN_PRINTF(("FileDownloader::URLReadBodyNotify (pp_error=%"
|
| - NACL_PRId32")\n", pp_error));
|
| - if (pp_error < PP_OK) {
|
| - stream_finish_callback_.RunAndClear(pp_error);
|
| - } else if (pp_error == PP_OK) {
|
| - data_stream_callback_source_->GetCallback().RunAndClear(PP_OK);
|
| - stream_finish_callback_.RunAndClear(PP_OK);
|
| - } else {
|
| - PLUGIN_PRINTF(("Running data_stream_callback, temp_buffer_=%p\n",
|
| - &temp_buffer_[0]));
|
| - StreamCallback cb = data_stream_callback_source_->GetCallback();
|
| - *(cb.output()) = &temp_buffer_;
|
| - cb.RunAndClear(pp_error);
|
| -
|
| - pp::CompletionCallback onread_callback =
|
| - callback_factory_.NewOptionalCallback(
|
| - &FileDownloader::URLReadBodyNotify);
|
| - int32_t temp_size = static_cast<int32_t>(temp_buffer_.size());
|
| - pp_error = url_loader_.ReadResponseBody(&temp_buffer_[0],
|
| - temp_size,
|
| - onread_callback);
|
| - if (pp_error != PP_OK_COMPLETIONPENDING)
|
| - onread_callback.RunAndClear(pp_error);
|
| - }
|
| -}
|
| -
|
| -bool FileDownloader::GetDownloadProgress(
|
| - int64_t* bytes_received,
|
| - int64_t* total_bytes_to_be_received) const {
|
| - return url_loader_.GetDownloadProgress(bytes_received,
|
| - total_bytes_to_be_received);
|
| -}
|
| -
|
| -nacl::string FileDownloader::GetResponseHeaders() const {
|
| - pp::Var headers = url_response_.GetHeaders();
|
| - if (!headers.is_string()) {
|
| - PLUGIN_PRINTF((
|
| - "FileDownloader::GetResponseHeaders (headers are not a string)\n"));
|
| - return nacl::string();
|
| - }
|
| - return headers.AsString();
|
| -}
|
| -
|
| -} // namespace plugin
|
|
|