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

Unified Diff: ppapi/shared_impl/array_writer.cc

Issue 12560003: Add support for Var arrays to ArrayWriter. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 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
« no previous file with comments | « ppapi/shared_impl/array_writer.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/shared_impl/array_writer.cc
diff --git a/ppapi/shared_impl/array_writer.cc b/ppapi/shared_impl/array_writer.cc
index 957ff77237baa5f2fe5370acbaef777564b5a335..26ee1bd669b00d38f36ee4cb3c5cbed61edf88e0 100644
--- a/ppapi/shared_impl/array_writer.cc
+++ b/ppapi/shared_impl/array_writer.cc
@@ -9,6 +9,8 @@
#include "ppapi/shared_impl/ppapi_globals.h"
#include "ppapi/shared_impl/resource.h"
#include "ppapi/shared_impl/resource_tracker.h"
+#include "ppapi/shared_impl/var.h"
+#include "ppapi/shared_impl/var_tracker.h"
namespace ppapi {
@@ -76,4 +78,52 @@ bool ArrayWriter::StoreResourceVector(const std::vector<PP_Resource>& input) {
return true;
}
+bool ArrayWriter::StoreVarVector(
+ const std::vector< scoped_refptr<Var> >& 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_Var));
+
+ // 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_Vars.
+ PP_Var* dest_vars = static_cast<PP_Var*>(dest);
+ for (size_t i = 0; i < input.size(); i++)
+ dest_vars[i] = input[i]->GetPPVar();
+ return true;
+}
+
+bool ArrayWriter::StoreVarVector(const std::vector<PP_Var>& 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_Var));
+
+ // 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 vars.
+ for (size_t i = 0; i < input.size(); i++)
+ PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(input[i]);
+ return false;
+ }
+
+ std::copy(input.begin(), input.end(), static_cast<PP_Var*>(dest));
+ return true;
+}
+
} // namespace ppapi
« no previous file with comments | « ppapi/shared_impl/array_writer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698