Index: chrome/browser/apps/drive/drive_app_mapping.cc |
diff --git a/chrome/browser/apps/drive/drive_app_mapping.cc b/chrome/browser/apps/drive/drive_app_mapping.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ae9531014ab83aa6409fa40754cb1c09b85a6a66 |
--- /dev/null |
+++ b/chrome/browser/apps/drive/drive_app_mapping.cc |
@@ -0,0 +1,127 @@ |
+// Copyright 2014 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/apps/drive/drive_app_mapping.h" |
+ |
+#include "base/prefs/pref_service.h" |
+#include "base/prefs/scoped_user_pref_update.h" |
+#include "base/values.h" |
+#include "chrome/common/pref_names.h" |
+#include "components/pref_registry/pref_registry_syncable.h" |
+ |
+namespace { |
+ |
+// Key for a string value that holds the mapped chrome app id. |
+const char kKeyChromeApp[] = "chrome_app"; |
+ |
+// Key for a boolean value of whether the mapped chrome app is auto generated. |
+// Default is false. |
+const char kKeyGenerated[] = "generated"; |
+ |
+scoped_ptr<base::DictionaryValue> CreateInfoDict( |
+ const std::string& chrome_app_id, |
+ bool generated) { |
+ scoped_ptr<base::DictionaryValue> dict(new base::DictionaryValue); |
+ dict->SetStringWithoutPathExpansion(kKeyChromeApp, chrome_app_id); |
+ |
+ // Only writes non-default value. |
+ if (generated) |
+ dict->SetBooleanWithoutPathExpansion(kKeyGenerated, true); |
+ return dict.Pass(); |
+} |
+ |
+} // namespace |
+ |
+DriveAppMapping::DriveAppMapping(PrefService* prefs) : prefs_(prefs) { |
+} |
+ |
+DriveAppMapping::~DriveAppMapping() { |
+} |
+ |
+// static |
+void DriveAppMapping::RegisterProfilePrefs( |
+ user_prefs::PrefRegistrySyncable* registry) { |
+ registry->RegisterDictionaryPref( |
+ prefs::kAppLauncherDriveAppMapping, |
+ user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); |
+} |
+ |
+void DriveAppMapping::Add(const std::string& drive_app_id, |
+ const std::string& chrome_app_id, |
+ bool generated) { |
+ DictionaryPrefUpdate update(prefs_, prefs::kAppLauncherDriveAppMapping); |
+ update->SetWithoutPathExpansion( |
+ drive_app_id, CreateInfoDict(chrome_app_id, generated).release()); |
+} |
+ |
+void DriveAppMapping::Remove(const std::string& drive_app_id) { |
+ DictionaryPrefUpdate update(prefs_, prefs::kAppLauncherDriveAppMapping); |
+ update->RemoveWithoutPathExpansion(drive_app_id, NULL); |
+} |
+ |
+std::string DriveAppMapping::GetChromeApp( |
+ const std::string& drive_app_id) const { |
+ const base::DictionaryValue* mapping = |
+ prefs_->GetDictionary(prefs::kAppLauncherDriveAppMapping); |
+ const base::DictionaryValue* info_dict; |
+ std::string chrome_app_id; |
+ if (mapping->GetDictionaryWithoutPathExpansion(drive_app_id, &info_dict) && |
+ info_dict->GetStringWithoutPathExpansion(kKeyChromeApp, &chrome_app_id)) { |
+ return chrome_app_id; |
+ } |
+ |
+ return std::string(); |
+} |
+ |
+std::string DriveAppMapping::GetDriveApp( |
+ const std::string& chrome_app_id) const { |
+ const base::DictionaryValue* mapping = |
+ prefs_->GetDictionary(prefs::kAppLauncherDriveAppMapping); |
+ for (base::DictionaryValue::Iterator it(*mapping); !it.IsAtEnd(); |
+ it.Advance()) { |
+ const base::DictionaryValue* info_dict; |
+ std::string value_string; |
+ DCHECK(it.value().IsType(base::Value::TYPE_DICTIONARY)); |
+ if (it.value().GetAsDictionary(&info_dict) && |
+ info_dict->GetStringWithoutPathExpansion(kKeyChromeApp, |
+ &value_string) && |
+ value_string == chrome_app_id) { |
+ return it.key(); |
+ } |
+ } |
+ return std::string(); |
+} |
+ |
+bool DriveAppMapping::IsChromeAppGenerated( |
+ const std::string& chrome_app_id) const { |
+ const base::DictionaryValue* mapping = |
+ prefs_->GetDictionary(prefs::kAppLauncherDriveAppMapping); |
+ for (base::DictionaryValue::Iterator it(*mapping); !it.IsAtEnd(); |
+ it.Advance()) { |
+ const base::DictionaryValue* info_dict; |
+ std::string value_string; |
+ bool generated; |
+ DCHECK(it.value().IsType(base::Value::TYPE_DICTIONARY)); |
+ if (it.value().GetAsDictionary(&info_dict) && |
+ info_dict->GetStringWithoutPathExpansion(kKeyChromeApp, |
+ &value_string) && |
+ value_string == chrome_app_id && |
+ info_dict->GetBooleanWithoutPathExpansion(kKeyGenerated, &generated)) { |
+ return generated; |
+ } |
+ } |
+ |
+ return false; |
+} |
+ |
+std::set<std::string> DriveAppMapping::GetDriveAppIds() const { |
+ const base::DictionaryValue* mapping = |
+ prefs_->GetDictionary(prefs::kAppLauncherDriveAppMapping); |
+ std::set<std::string> keys; |
+ for (base::DictionaryValue::Iterator it(*mapping); !it.IsAtEnd(); |
+ it.Advance()) { |
+ keys.insert(it.key()); |
+ } |
+ return keys; |
+} |