| 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
|
|
|