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

Unified Diff: ppapi/shared_impl/array_writer.cc

Issue 9728001: Make the file chooser use PP_ArrayOutput (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 9 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: ppapi/shared_impl/array_writer.cc
diff --git a/ppapi/shared_impl/array_writer.cc b/ppapi/shared_impl/array_writer.cc
new file mode 100644
index 0000000000000000000000000000000000000000..8fb357111cd9d10235051b0aa73961a97f66900f
--- /dev/null
+++ b/ppapi/shared_impl/array_writer.cc
@@ -0,0 +1,77 @@
+// 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/shared_impl/array_writer.h"
+
+#include "ppapi/shared_impl/ppapi_globals.h"
+#include "ppapi/shared_impl/resource.h"
+#include "ppapi/shared_impl/resource_tracker.h"
+
+namespace ppapi {
+
+ArrayWriter::ArrayWriter() {
+ Reset();
+}
+
+ArrayWriter::ArrayWriter(const PP_ArrayOutput& output)
+ : pp_array_output_(output) {
+}
+
+ArrayWriter::~ArrayWriter() {
+}
+
+void ArrayWriter::Reset() {
+ pp_array_output_.GetDataBuffer = NULL;
+ pp_array_output_.user_data = NULL;
+}
+
+bool ArrayWriter::StoreResourceVector(
+ const std::vector< scoped_refptr<Resource> >& input) {
+ // Always call the alloc function, even on 0 array size.
+ void* dest = pp_array_output_.GetDataBuffer(
+ pp_array_output_.user_data,
+ static_cast<uint32_t>(input.size()),
+ sizeof(PP_Resource));
+
+ // Regardless of success, we clear the output to prevent future calls on
+ // this same output object.
+ Reset();
+
+ if (input.empty())
+ return true; // Allow plugin to return NULL on 0 elements.
+ if (!dest)
+ return false;
+
+ // Convert to PP_Resources.
+ PP_Resource* dest_resources = static_cast<PP_Resource*>(dest);
+ for (size_t i = 0; i < input.size(); i++)
+ dest_resources[i] = input[i]->GetReference();
+ return true;
+}
+
+bool ArrayWriter::StoreResourceVector(const std::vector<PP_Resource>& input) {
+ // Always call the alloc function, even on 0 array size.
+ void* dest = pp_array_output_.GetDataBuffer(
+ pp_array_output_.user_data,
+ static_cast<uint32_t>(input.size()),
+ sizeof(PP_Resource));
+
+ // Regardless of success, we clear the output to prevent future calls on
+ // this same output object.
+ Reset();
+
+ if (input.empty())
+ return true; // Allow plugin to return NULL on 0 elements.
+ if (!dest) {
+ // Free the resources.
+ for (size_t i = 0; i < input.size(); i++)
+ PpapiGlobals::Get()->GetResourceTracker()->ReleaseResource(input[i]);
+ return false;
+ }
+
+ std::copy(input.begin(), input.end(), static_cast<PP_Resource*>(dest));
viettrungluu 2012/03/26 16:55:19 You need to include <algorithm>.
+ return true;
+}
+
+} // namespace ppapi

Powered by Google App Engine
This is Rietveld 408576698