| // Copyright 2016 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 "content/shell/test_runner/tracked_dictionary.h" |
| |
| #include <utility> |
| |
| |
| namespace test_runner { |
| |
| TrackedDictionary::TrackedDictionary() {} |
| |
| void TrackedDictionary::ResetChangeTracking() { |
| changed_values_.Clear(); |
| } |
| |
| void TrackedDictionary::ApplyUntrackedChanges( |
| const base::DictionaryValue& new_changes) { |
| current_values_.MergeDictionary(&new_changes); |
| |
| for (base::DictionaryValue::Iterator it(new_changes); !it.IsAtEnd(); |
| it.Advance()) { |
| changed_values_.Remove(it.key(), nullptr); |
| } |
| } |
| |
| void TrackedDictionary::Set(const std::string& path, |
| std::unique_ptr<base::Value> new_value) { |
| // Is this truly a *new* value? |
| const base::Value* old_value; |
| if (current_values_.Get(path, &old_value)) { |
| if (*old_value == *new_value) |
| return; |
| } |
| |
| changed_values_.Set(path, new_value->CreateDeepCopy()); |
| current_values_.Set(path, std::move(new_value)); |
| } |
| |
| void TrackedDictionary::SetBoolean(const std::string& path, bool new_value) { |
| Set(path, std::make_unique<base::Value>(new_value)); |
| } |
| |
| void TrackedDictionary::SetString(const std::string& path, |
| const std::string& new_value) { |
| Set(path, std::make_unique<base::Value>(new_value)); |
| } |
| |
| } // namespace test_runner |