// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "gpu/np_utils/dynamic_np_object.h"

namespace np_utils {

DynamicNPObject::DynamicNPObject(NPP npp) {
}

void DynamicNPObject::Invalidate() {
  for (PropertyMap::iterator it = properties_.begin();
       it != properties_.end();
       ++it) {
    it->second.Invalidate();
  }
}

bool DynamicNPObject::HasProperty(NPIdentifier name) {
  PropertyMap::iterator it = properties_.find(name);
  return it != properties_.end();
}

bool DynamicNPObject::GetProperty(NPIdentifier name, NPVariant* result) {
  PropertyMap::iterator it = properties_.find(name);
  if (it == properties_.end())
    return false;

  it->second.CopyTo(result);
  return true;
}

bool DynamicNPObject::SetProperty(NPIdentifier name, const NPVariant* value) {
  properties_[name] = *value;
  return true;
}

bool DynamicNPObject::RemoveProperty(NPIdentifier name) {
  properties_.erase(name);
  return false;
}

bool DynamicNPObject::Enumerate(NPIdentifier** names, uint32_t* count) {
  *names = static_cast<NPIdentifier*>(
      NPBrowser::get()->MemAlloc(properties_.size() * sizeof(*names)));
  *count = properties_.size();

  int i = 0;
  for (PropertyMap::iterator it = properties_.begin();
       it != properties_.end();
       ++it) {
    (*names)[i] = it->first;
    ++i;
  }

  return true;
}
}  // namespace np_utils
