diff options
author | hansmuller <hansmuller@chromium.org> | 2014-09-12 11:53:57 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-09-12 19:00:00 +0000 |
commit | b2cf607c2035b942e36ceed49cc770cf15fb1db2 (patch) | |
tree | ea3f513881335b3d7136653b255dd2dbc0daca19 /mojo/common | |
parent | 56f97b71a4a88d7d016fcf4b1b3d37bc56691e35 (diff) | |
download | chromium_src-b2cf607c2035b942e36ceed49cc770cf15fb1db2.zip chromium_src-b2cf607c2035b942e36ceed49cc770cf15fb1db2.tar.gz chromium_src-b2cf607c2035b942e36ceed49cc770cf15fb1db2.tar.bz2 |
JavaScript Content Handler Version 0.0
BUG=403645
Review URL: https://codereview.chromium.org/467263006
Cr-Commit-Position: refs/heads/master@{#294621}
Diffstat (limited to 'mojo/common')
-rw-r--r-- | mojo/common/data_pipe_utils.cc | 47 | ||||
-rw-r--r-- | mojo/common/data_pipe_utils.h | 9 |
2 files changed, 44 insertions, 12 deletions
diff --git a/mojo/common/data_pipe_utils.cc b/mojo/common/data_pipe_utils.cc index e486c31..428a589 100644 --- a/mojo/common/data_pipe_utils.cc +++ b/mojo/common/data_pipe_utils.cc @@ -14,20 +14,17 @@ namespace mojo { namespace common { +namespace { -bool BlockingCopyToFile(ScopedDataPipeConsumerHandle source, - const base::FilePath& destination) { - base::ScopedFILE fp(base::OpenFile(destination, "wb")); - if (!fp) - return false; - +bool BlockingCopyHelper(ScopedDataPipeConsumerHandle source, + const base::Callback<size_t(const void*, uint32_t)>& write_bytes) { for (;;) { const void* buffer; uint32_t num_bytes; - MojoResult result = BeginReadDataRaw(source.get(), &buffer, &num_bytes, - MOJO_READ_DATA_FLAG_NONE); + MojoResult result = BeginReadDataRaw( + source.get(), &buffer, &num_bytes, MOJO_READ_DATA_FLAG_NONE); if (result == MOJO_RESULT_OK) { - size_t bytes_written = fwrite(buffer, 1, num_bytes, fp.get()); + size_t bytes_written = write_bytes.Run(buffer, num_bytes); result = EndReadDataRaw(source.get(), num_bytes); if (bytes_written < num_bytes || result != MOJO_RESULT_OK) return false; @@ -51,9 +48,35 @@ bool BlockingCopyToFile(ScopedDataPipeConsumerHandle source, return false; } -void CompleteBlockingCopyToFile(const base::Callback<void(bool)>& callback, - bool result) { - callback.Run(result); +size_t CopyToStringHelper( + std::string* result, const void* buffer, uint32_t num_bytes) { + result->append(static_cast<const char*>(buffer), num_bytes); + return num_bytes; +} + +size_t CopyToFileHelper(FILE* fp, const void* buffer, uint32_t num_bytes) { + return fwrite(buffer, 1, num_bytes, fp); +} + +} // namespace + + +// TODO(hansmuller): Add a max_size parameter. +bool BlockingCopyToString(ScopedDataPipeConsumerHandle source, + std::string* result) { + CHECK(result); + result->clear(); + return BlockingCopyHelper( + source.Pass(), base::Bind(&CopyToStringHelper, result)); +} + +bool BlockingCopyToFile(ScopedDataPipeConsumerHandle source, + const base::FilePath& destination) { + base::ScopedFILE fp(base::OpenFile(destination, "wb")); + if (!fp) + return false; + return BlockingCopyHelper( + source.Pass(), base::Bind(&CopyToFileHelper, fp.get())); } void CopyToFile(ScopedDataPipeConsumerHandle source, diff --git a/mojo/common/data_pipe_utils.h b/mojo/common/data_pipe_utils.h index dc2f66a..dc2197b 100644 --- a/mojo/common/data_pipe_utils.h +++ b/mojo/common/data_pipe_utils.h @@ -5,6 +5,8 @@ #ifndef MOJO_SHELL_DATA_PIPE_UTILS_H_ #define MOJO_SHELL_DATA_PIPE_UTILS_H_ +#include <string> + #include "base/callback_forward.h" #include "mojo/common/mojo_common_export.h" #include "mojo/public/cpp/system/core.h" @@ -26,6 +28,13 @@ void MOJO_COMMON_EXPORT CopyToFile( base::TaskRunner* task_runner, const base::Callback<void(bool /*success*/)>& callback); +// Copies the data from |source| into |contents| and returns true on success and +// false on error. In case of I/O error, |contents| holds the data that could +// be read from source before the error occurred. +bool MOJO_COMMON_EXPORT BlockingCopyToString( + ScopedDataPipeConsumerHandle source, + std::string* contents); + } // namespace common } // namespace mojo |