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 |