Index: chrome/browser/ui/zoom/chrome_zoom_prefs_helper.cc |
diff --git a/chrome/browser/ui/zoom/chrome_zoom_prefs_helper.cc b/chrome/browser/ui/zoom/chrome_zoom_prefs_helper.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4676b0d1b29c519738c084563f92c926f9ba2fe0 |
--- /dev/null |
+++ b/chrome/browser/ui/zoom/chrome_zoom_prefs_helper.cc |
@@ -0,0 +1,90 @@ |
+// 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 "chrome/browser/ui/zoom/chrome_zoom_prefs_helper.h" |
+ |
+#include "base/files/file_path.h" |
+#include "base/memory/ptr_util.h" |
+#include "base/strings/string_number_conversions.h" |
+#include "base/values.h" |
+#include "components/prefs/pref_service.h" |
+ |
+namespace { |
+ |
+std::string GetHash(const base::FilePath& relative_path) { |
+ size_t int_key = BASE_HASH_NAMESPACE::hash<base::FilePath>()(relative_path); |
+ return base::SizeTToString(int_key); |
+} |
+ |
+} // namespace |
+ |
+ChromeZoomPrefsHelper::ChromeZoomPrefsHelper( |
+ PrefService* pref_service, |
+ const base::FilePath& profile_path, |
+ const base::FilePath& partition_path) |
+ : pref_service_(pref_service) { |
+ DCHECK(pref_service_); |
+ |
+ DCHECK(!partition_path.empty()); |
+ DCHECK((partition_path == profile_path) || |
+ profile_path.IsParent(partition_path)); |
+ // Create a partition_key string with no '.'s in it. For the default |
+ // StoragePartition, this string will always be "0". |
+ base::FilePath partition_relative_path; |
+ profile_path.AppendRelativePath(partition_path, &partition_relative_path); |
+ partition_key_ = GetHash(partition_relative_path); |
+} |
+ |
+std::string ChromeZoomPrefsHelper::GetHashForTesting( |
+ const base::FilePath& relative_path) { |
+ return GetHash(relative_path); |
+} |
+ |
+bool ChromeZoomPrefsHelper::GetBoolean(const char* pref_name, |
+ bool* value) const { |
+ return pref_service_->GetDictionary(pref_name)->GetBoolean(partition_key_, |
+ value); |
+} |
+ |
+void ChromeZoomPrefsHelper::SetBoolean(const char* pref_name, bool value) { |
+ DictionaryPrefUpdate update(pref_service_, pref_name); |
+ update->SetBoolean(partition_key_, value); |
+} |
+ |
+bool ChromeZoomPrefsHelper::GetDouble(const char* pref_name, |
+ double* value) const { |
+ return pref_service_->GetDictionary(pref_name)->GetDouble(partition_key_, |
+ value); |
+} |
+ |
+void ChromeZoomPrefsHelper::SetDouble(const char* pref_name, double value) { |
+ DictionaryPrefUpdate update(pref_service_, pref_name); |
+ update->SetDouble(partition_key_, value); |
+} |
+ |
+bool ChromeZoomPrefsHelper::GetDictionary( |
+ const char* pref_name, |
+ const base::DictionaryValue** value) const { |
+ return pref_service_->GetDictionary(pref_name)->GetDictionary(partition_key_, |
+ value); |
+} |
+ |
+std::unique_ptr<DictionaryPrefUpdate> ChromeZoomPrefsHelper::GetUpdate( |
+ const char* pref_name) { |
+ return base::MakeUnique<DictionaryPrefUpdate>(pref_service_, pref_name); |
+} |
+ |
+base::DictionaryValue* ChromeZoomPrefsHelper::GetMutableDictionary( |
+ DictionaryPrefUpdate* update) const { |
+ base::DictionaryValue* dictionaries = update->Get(); |
+ DCHECK(dictionaries); |
+ |
+ base::DictionaryValue* dictionary = nullptr; |
+ if (!dictionaries->GetDictionary(partition_key_, &dictionary)) { |
+ dictionary = new base::DictionaryValue(); |
+ dictionaries->Set(partition_key_, base::WrapUnique(dictionary)); |
+ } |
+ |
+ return dictionary; |
+} |