summaryrefslogtreecommitdiffstats
path: root/mojo/common
diff options
context:
space:
mode:
authorhansmuller <hansmuller@chromium.org>2014-09-12 11:53:57 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-12 19:00:00 +0000
commitb2cf607c2035b942e36ceed49cc770cf15fb1db2 (patch)
treeea3f513881335b3d7136653b255dd2dbc0daca19 /mojo/common
parent56f97b71a4a88d7d016fcf4b1b3d37bc56691e35 (diff)
downloadchromium_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.cc47
-rw-r--r--mojo/common/data_pipe_utils.h9
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