fake_var_interface.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "fake_ppapi/fake_var_interface.h"
6#include "fake_ppapi/fake_var_manager.h"
7#include "gtest/gtest.h"
8
9FakeVarInterface::FakeVarInterface(FakeVarManager* manager)
10    : manager_(manager) {}
11
12PP_Var FakeVarInterface::VarFromUtf8(const char* data, uint32_t len) {
13  FakeVarData* var_data = manager_->CreateVarData();
14  var_data->type = PP_VARTYPE_STRING;
15  var_data->string_value.assign(data, len);
16
17  struct PP_Var result = {PP_VARTYPE_STRING, 0, {PP_FALSE}};
18  result.value.as_id = var_data->id;
19  return result;
20}
21
22void FakeVarInterface::AddRef(PP_Var var) {
23  manager_->AddRef(var);
24}
25
26void FakeVarInterface::Release(PP_Var var) {
27  manager_->Release(var);
28}
29
30const char* FakeVarInterface::VarToUtf8(PP_Var var, uint32_t* out_len) {
31  if (var.type != PP_VARTYPE_STRING) {
32    *out_len = 0;
33    return NULL;
34  }
35
36  FakeVarData* var_data = manager_->GetVarData(var);
37  if (!var_data) {
38    *out_len = 0;
39    return NULL;
40  }
41
42  EXPECT_LT(0, var_data->ref_count) << "VarToUtf8 on freed "
43                                    << manager_->Describe(*var_data);
44
45  *out_len = var_data->string_value.length();
46  return var_data->string_value.c_str();
47}
48