1// Copyright 2013 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 "ppapi/cpp/var_dictionary.h" 6 7#include "ppapi/c/ppb_var_dictionary.h" 8#include "ppapi/cpp/logging.h" 9#include "ppapi/cpp/module_impl.h" 10 11namespace pp { 12 13namespace { 14 15template <> const char* interface_name<PPB_VarDictionary_1_0>() { 16 return PPB_VAR_DICTIONARY_INTERFACE_1_0; 17} 18 19} // namespace 20 21VarDictionary::VarDictionary() : Var(Null()) { 22 if (has_interface<PPB_VarDictionary_1_0>()) 23 var_ = get_interface<PPB_VarDictionary_1_0>()->Create(); 24 else 25 PP_NOTREACHED(); 26} 27 28VarDictionary::VarDictionary(const Var& var) : Var(var) { 29 if (!var.is_dictionary()) { 30 PP_NOTREACHED(); 31 32 // This takes care of releasing the reference that this object holds. 33 Var::operator=(Var(Null())); 34 } 35} 36 37VarDictionary::VarDictionary(const PP_Var& var) : Var(var) { 38 if (var.type != PP_VARTYPE_DICTIONARY) { 39 PP_NOTREACHED(); 40 41 // This takes care of releasing the reference that this object holds. 42 Var::operator=(Var(Null())); 43 } 44} 45 46VarDictionary::VarDictionary(const VarDictionary& other) 47 : Var(other) { 48} 49 50VarDictionary::~VarDictionary() { 51} 52 53VarDictionary& VarDictionary::operator=( 54 const VarDictionary& other) { 55 Var::operator=(other); 56 return *this; 57} 58 59Var& VarDictionary::operator=(const Var& other) { 60 if (other.is_dictionary()) { 61 Var::operator=(other); 62 } else { 63 PP_NOTREACHED(); 64 Var::operator=(Var(Null())); 65 } 66 return *this; 67} 68 69Var VarDictionary::Get(const Var& key) const { 70 if (!has_interface<PPB_VarDictionary_1_0>()) 71 return Var(); 72 73 return Var( 74 PASS_REF, 75 get_interface<PPB_VarDictionary_1_0>()->Get(var_, key.pp_var())); 76} 77 78bool VarDictionary::Set(const Var& key, const Var& value) { 79 if (!has_interface<PPB_VarDictionary_1_0>()) 80 return false; 81 82 return PP_ToBool(get_interface<PPB_VarDictionary_1_0>()->Set( 83 var_, key.pp_var(), value.pp_var())); 84} 85 86void VarDictionary::Delete(const Var& key) { 87 if (has_interface<PPB_VarDictionary_1_0>()) 88 get_interface<PPB_VarDictionary_1_0>()->Delete(var_, key.pp_var()); 89} 90 91bool VarDictionary::HasKey(const Var& key) const { 92 if (!has_interface<PPB_VarDictionary_1_0>()) 93 return false; 94 95 return PP_ToBool(get_interface<PPB_VarDictionary_1_0>()->HasKey( 96 var_, key.pp_var())); 97} 98 99VarArray VarDictionary::GetKeys() const { 100 if (!has_interface<PPB_VarDictionary_1_0>()) 101 return VarArray(); 102 103 Var result(PASS_REF, 104 get_interface<PPB_VarDictionary_1_0>()->GetKeys(var_)); 105 if (result.is_array()) 106 return VarArray(result); 107 else 108 return VarArray(); 109} 110 111} // namespace pp 112