Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(14)

Unified Diff: native_client_sdk/src/examples/api/url_loader/geturl_handler.cc

Issue 14607005: [NaCl SDK] Cleanup examples. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: feedback Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: native_client_sdk/src/examples/api/url_loader/geturl_handler.cc
diff --git a/native_client_sdk/src/examples/api/url_loader/geturl_handler.cc b/native_client_sdk/src/examples/api/url_loader/geturl_handler.cc
deleted file mode 100644
index e13ca1f5e1c685b56ccae2c87c589e0193858e8b..0000000000000000000000000000000000000000
--- a/native_client_sdk/src/examples/api/url_loader/geturl_handler.cc
+++ /dev/null
@@ -1,161 +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 <stdio.h>
-#include <stdlib.h>
-#include "ppapi/c/pp_errors.h"
-#include "ppapi/c/ppb_instance.h"
-#include "ppapi/cpp/module.h"
-#include "ppapi/cpp/var.h"
-
-#include "geturl_handler.h"
-
-#ifdef WIN32
-#undef min
-#undef max
-#undef PostMessage
-
-// Allow 'this' in initializer list
-#pragma warning(disable : 4355)
-#endif
-
-GetURLHandler* GetURLHandler::Create(pp::Instance* instance,
- const std::string& url) {
- return new GetURLHandler(instance, url);
-}
-
-GetURLHandler::GetURLHandler(pp::Instance* instance, const std::string& url)
- : instance_(instance),
- url_(url),
- url_request_(instance),
- url_loader_(instance),
- buffer_(new char[READ_BUFFER_SIZE]),
- cc_factory_(this) {
- url_request_.SetURL(url);
- url_request_.SetMethod("GET");
- url_request_.SetRecordDownloadProgress(true);
-}
-
-GetURLHandler::~GetURLHandler() {
- delete[] buffer_;
- buffer_ = NULL;
-}
-
-void GetURLHandler::Start() {
- pp::CompletionCallback cc = cc_factory_.NewCallback(&GetURLHandler::OnOpen);
- url_loader_.Open(url_request_, cc);
-}
-
-void GetURLHandler::OnOpen(int32_t result) {
- if (result != PP_OK) {
- ReportResultAndDie(url_, "pp::URLLoader::Open() failed", false);
- return;
- }
- // Here you would process the headers. A real program would want to at least
- // check the HTTP code and potentially cancel the request.
- // pp::URLResponseInfo response = loader_.GetResponseInfo();
-
- // Try to figure out how many bytes of data are going to be downloaded in
- // order to allocate memory for the response body in advance (this will
- // reduce heap traffic and also the amount of memory allocated).
- // It is not a problem if this fails, it just means that the
- // url_response_body_.insert() call in GetURLHandler::AppendDataBytes()
- // will allocate the memory later on.
- int64_t bytes_received = 0;
- int64_t total_bytes_to_be_received = 0;
- if (url_loader_.GetDownloadProgress(&bytes_received,
- &total_bytes_to_be_received)) {
- if (total_bytes_to_be_received > 0) {
- url_response_body_.reserve(total_bytes_to_be_received);
- }
- }
- // We will not use the download progress anymore, so just disable it.
- url_request_.SetRecordDownloadProgress(false);
-
- // Start streaming.
- ReadBody();
-}
-
-void GetURLHandler::AppendDataBytes(const char* buffer, int32_t num_bytes) {
- if (num_bytes <= 0)
- return;
- // Make sure we don't get a buffer overrun.
- num_bytes = std::min(READ_BUFFER_SIZE, num_bytes);
- // Note that we do *not* try to minimally increase the amount of allocated
- // memory here by calling url_response_body_.reserve(). Doing so causes a
- // lot of string reallocations that kills performance for large files.
- url_response_body_.insert(
- url_response_body_.end(), buffer, buffer + num_bytes);
-}
-
-void GetURLHandler::OnRead(int32_t result) {
- if (result == PP_OK) {
- // Streaming the file is complete, delete the read buffer since it is
- // no longer needed.
- delete[] buffer_;
- buffer_ = NULL;
- ReportResultAndDie(url_, url_response_body_, true);
- } else if (result > 0) {
- // The URLLoader just filled "result" number of bytes into our buffer.
- // Save them and perform another read.
- AppendDataBytes(buffer_, result);
- ReadBody();
- } else {
- // A read error occurred.
- ReportResultAndDie(
- url_, "pp::URLLoader::ReadResponseBody() result<0", false);
- }
-}
-
-void GetURLHandler::ReadBody() {
- // Note that you specifically want an "optional" callback here. This will
- // allow ReadBody() to return synchronously, ignoring your completion
- // callback, if data is available. For fast connections and large files,
- // reading as fast as we can will make a large performance difference
- // However, in the case of a synchronous return, we need to be sure to run
- // the callback we created since the loader won't do anything with it.
- pp::CompletionCallback cc =
- cc_factory_.NewOptionalCallback(&GetURLHandler::OnRead);
- int32_t result = PP_OK;
- do {
- result = url_loader_.ReadResponseBody(buffer_, READ_BUFFER_SIZE, cc);
- // Handle streaming data directly. Note that we *don't* want to call
- // OnRead here, since in the case of result > 0 it will schedule
- // another call to this function. If the network is very fast, we could
- // end up with a deeply recursive stack.
- if (result > 0) {
- AppendDataBytes(buffer_, result);
- }
- } while (result > 0);
-
- if (result != PP_OK_COMPLETIONPENDING) {
- // Either we reached the end of the stream (result == PP_OK) or there was
- // an error. We want OnRead to get called no matter what to handle
- // that case, whether the error is synchronous or asynchronous. If the
- // result code *is* COMPLETIONPENDING, our callback will be called
- // asynchronously.
- cc.Run(result);
- }
-}
-
-void GetURLHandler::ReportResultAndDie(const std::string& fname,
- const std::string& text,
- bool success) {
- ReportResult(fname, text, success);
- delete this;
-}
-
-void GetURLHandler::ReportResult(const std::string& fname,
- const std::string& text,
- bool success) {
- if (success)
- printf("GetURLHandler::ReportResult(Ok).\n");
- else
- printf("GetURLHandler::ReportResult(Err). %s\n", text.c_str());
- fflush(stdout);
- if (instance_) {
- pp::Var var_result(fname + "\n" + text);
- instance_->PostMessage(var_result);
- }
-}

Powered by Google App Engine
This is Rietveld 408576698