// Copyright 2017 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 "ui/base/class_property.h" #include #include namespace ui { PropertyHandler::PropertyHandler() {} PropertyHandler::~PropertyHandler() { ClearProperties(); } int64_t PropertyHandler::SetPropertyInternal(const void* key, const char* name, PropertyDeallocator deallocator, int64_t value, int64_t default_value) { // This code may be called before |port_| has been created. std::unique_ptr data = BeforePropertyChange(key); int64_t old = GetPropertyInternal(key, default_value); if (value == default_value) { prop_map_.erase(key); } else { Value prop_value; prop_value.name = name; prop_value.value = value; prop_value.deallocator = deallocator; prop_map_[key] = prop_value; } AfterPropertyChange(key, old, std::move(data)); return old; } std::unique_ptr PropertyHandler::BeforePropertyChange( const void* key) { return nullptr; } void PropertyHandler::ClearProperties() { // Clear properties. for (std::map::const_iterator iter = prop_map_.begin(); iter != prop_map_.end(); ++iter) { if (iter->second.deallocator) (*iter->second.deallocator)(iter->second.value); } prop_map_.clear(); } int64_t PropertyHandler::GetPropertyInternal(const void* key, int64_t default_value) const { std::map::const_iterator iter = prop_map_.find(key); if (iter == prop_map_.end()) return default_value; return iter->second.value; } std::set PropertyHandler::GetAllPropertyKeys() const { std::set keys; for (auto& pair : prop_map_) keys.insert(pair.first); return keys; } } // namespace ui