Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(248)

Unified Diff: chrome/browser/chromeos/extensions/default_app_order.cc

Issue 216763004: OEM folder name support for apps installed from rootfs (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/extensions/default_app_order.cc
diff --git a/chrome/browser/chromeos/extensions/default_app_order.cc b/chrome/browser/chromeos/extensions/default_app_order.cc
index 3f8f4ff8c372c2fe9680946dc159d9a4892a127f..6db233677bf9b1071a3287d0c9cd404f11a1c508 100644
--- a/chrome/browser/chromeos/extensions/default_app_order.cc
+++ b/chrome/browser/chromeos/extensions/default_app_order.cc
@@ -11,6 +11,7 @@
#include "base/json/json_file_value_serializer.h"
#include "base/path_service.h"
#include "base/time/time.h"
+#include "chrome/browser/browser_process.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chromeos/chromeos_paths.h"
#include "content/public/browser/browser_thread.h"
@@ -23,6 +24,12 @@ namespace {
// The single ExternalLoader instance.
ExternalLoader* loader_instance = NULL;
+// Names used in JSON file.
+const char kOemAppsFolderAttr[] = "oem_apps_folder";
+const char kLocalizedContentAttr[] = "localized_content";
+const char kDefaultAttr[] = "default";
+const char kNameAttr[] = "name";
+
// Reads external ordinal json file and returned the parsed value. Returns NULL
// if the file does not exist or could not be parsed properly. Caller takes
// ownership of the returned value.
@@ -47,6 +54,32 @@ base::ListValue* ReadExternalOrdinalFile(const base::FilePath& path) {
return NULL;
}
+std::string GetLocaleSpecificStringImpl(
+ const base::DictionaryValue* root,
+ const std::string& locale,
+ const std::string& dictionary_name,
+ const std::string& entry_name) {
+ const base::DictionaryValue* dictionary_content = NULL;
+ if (!root || !root->GetDictionary(dictionary_name, &dictionary_content))
+ return std::string();
+
+ const base::DictionaryValue* locale_dictionary = NULL;
+ if (dictionary_content->GetDictionary(locale, &locale_dictionary)) {
+ std::string result;
+ if (locale_dictionary->GetString(entry_name, &result))
+ return result;
+ }
+
+ const base::DictionaryValue* default_dictionary = NULL;
+ if (dictionary_content->GetDictionary(kDefaultAttr, &default_dictionary)) {
+ std::string result;
+ if (default_dictionary->GetString(entry_name, &result))
+ return result;
+ }
+
+ return std::string();
+}
+
// Gets built-in default app order.
void GetDefault(std::vector<std::string>* app_ids) {
DCHECK(app_ids && app_ids->empty());
@@ -107,6 +140,12 @@ const std::vector<std::string>& ExternalLoader::GetAppIds() {
return app_ids_;
}
+const std::string& ExternalLoader::GetOemAppsFolderName() {
+ if (!loaded_.IsSignaled())
+ LOG(ERROR) << "GetOemAppsFolderName() called before loaded.";
+ return oem_apps_folder_name_;
+}
+
void ExternalLoader::Load() {
base::FilePath ordinals_file;
CHECK(PathService::Get(chromeos::FILE_DEFAULT_APP_ORDER, &ordinals_file));
@@ -114,10 +153,21 @@ void ExternalLoader::Load() {
scoped_ptr<base::ListValue> ordinals_value(
ReadExternalOrdinalFile(ordinals_file));
if (ordinals_value) {
+ std::string locale = g_browser_process->GetApplicationLocale();
for (size_t i = 0; i < ordinals_value->GetSize(); ++i) {
std::string app_id;
- CHECK(ordinals_value->GetString(i, &app_id));
- app_ids_.push_back(app_id);
+ base::DictionaryValue* dict = NULL;
+ if (ordinals_value->GetString(i, &app_id)) {
+ app_ids_.push_back(app_id);
+ } else if (ordinals_value->GetDictionary(i, &dict)) {
+ bool is_oem_apps_folder = false;
+ if (!dict->GetBoolean(kOemAppsFolderAttr, &is_oem_apps_folder) ||
+ !is_oem_apps_folder) {
+ LOG(ERROR) << "Invalid syntax in default_app_order.json";
+ }
+ oem_apps_folder_name_ = GetLocaleSpecificStringImpl(
+ dict, locale, kLocalizedContentAttr, kNameAttr);
+ }
}
} else {
GetDefault(&app_ids_);
@@ -136,5 +186,13 @@ void Get(std::vector<std::string>* app_ids) {
*app_ids = loader_instance->GetAppIds();
}
+std::string GetOemAppsFolderName() {
+ // |loader_instance| could be NULL for test.
+ if (!loader_instance)
+ return std::string();
+ else
+ return loader_instance->GetOemAppsFolderName();
+}
+
} // namespace default_app_order
} // namespace chromeos

Powered by Google App Engine
This is Rietveld 408576698