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

Unified Diff: chrome/browser/chromeos/customization_document.cc

Issue 2101021: Adding initial implementation of the PartnerCustomization classes.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 years, 7 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/customization_document.cc
===================================================================
--- chrome/browser/chromeos/customization_document.cc (revision 0)
+++ chrome/browser/chromeos/customization_document.cc (revision 0)
@@ -0,0 +1,135 @@
+// Copyright (c) 2010 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/chromeos/customization_document.h"
+
+#include <string>
+
+#include "base/file_path.h"
+#include "base/file_util.h"
+#include "base/json/json_reader.h"
+#include "base/logging.h"
+#include "base/string_util.h"
+#include "base/values.h"
+
+// Manifest attributes names.
+
+namespace {
+
+const wchar_t kVersionAttr[] = L"version";
+const wchar_t kProductSkuAttr[] = L"product_sku";
+const wchar_t kInitialLocaleAttr[] = L"initial_locale";
+const wchar_t kBackgroundColorAttr[] = L"background_color";
+const wchar_t kRegistrationUrlAttr[] = L"registration_url";
+const wchar_t kSetupContentAttr[] = L"setup_content";
+const wchar_t kContentLocaleAttr[] = L"content_locale";
+const wchar_t kHelpPageAttr[] = L"help_page";
+const wchar_t kEulaPageAttr[] = L"eula_page";
+const wchar_t kAppMenuAttr[] = L"app_menu";
+const wchar_t kInitialStartPageAttr[] = L"initial_start_page";
+const wchar_t kSectionTitleAttr[] = L"section_title";
+const wchar_t kWebAppsAttr[] = L"web_apps";
+const wchar_t kSupportPageAttr[] = L"support_page";
+const wchar_t kExtensionsAttr[] = L"extensions";
+
+const char kAcceptedManifestVersion[] = "1.0";
+
+} // anonymous namespace
+
+namespace chromeos {
+
+// CustomizationDocument implementation.
+
+bool CustomizationDocument::LoadManifestFromFile(
+ const FilePath& manifest_path) {
+ std::string manifest;
+ bool read_success = file_util::ReadFileToString(manifest_path, &manifest);
+ if (!read_success) {
+ return false;
+ }
+ return LoadManifestFromString(manifest);
+}
+
+bool CustomizationDocument::LoadManifestFromString(
+ const std::string& manifest) {
+ scoped_ptr<Value> root(base::JSONReader::Read(manifest, true));
+ DCHECK(root.get() != NULL);
+ if (root.get() == NULL)
+ return false;
+ DCHECK(root->GetType() == Value::TYPE_DICTIONARY);
+ return ParseFromJsonValue(static_cast<DictionaryValue*>(root.get()));
+}
+
+bool CustomizationDocument::ParseFromJsonValue(const DictionaryValue* root) {
+ // Partner customization manifests share only one required field -
+ // version string.
+ bool result = root->GetString(kVersionAttr, &version_);
+ return result && version_ == kAcceptedManifestVersion;
+}
+
+// StartupCustomizationDocument implementation.
+
+bool StartupCustomizationDocument::ParseFromJsonValue(
+ const DictionaryValue* root) {
+ if (!CustomizationDocument::ParseFromJsonValue(root))
+ return false;
+ // Rquired fields.
+ if (!root->GetString(kProductSkuAttr, &product_sku_))
+ return false;
+ // Optional fields.
+ root->GetString(kInitialLocaleAttr, &initial_locale_);
+ std::string background_color_string;
+ root->GetString(kBackgroundColorAttr, &background_color_string);
+ if (!background_color_string.empty()) {
+ if (background_color_string[0] == '#') {
+ background_color_ = static_cast<SkColor>(
+ 0xff000000 | HexStringToInt(background_color_string.substr(1)));
+ } else {
+ // Literal color constants are not supported yet.
+ return false;
+ }
+ }
+ root->GetString(kRegistrationUrlAttr, &registration_url_);
+ ListValue* setup_content_value = NULL;
+ root->GetList(kSetupContentAttr, &setup_content_value);
+ if (setup_content_value != NULL) {
+ for (ListValue::const_iterator iter = setup_content_value->begin();
+ iter != setup_content_value->end();
+ ++iter) {
+ const DictionaryValue* dict = NULL;
+ dict = static_cast<const DictionaryValue*>(*iter);
+ DCHECK(dict->GetType() == Value::TYPE_DICTIONARY);
+ std::string content_locale;
+ if (!dict->GetString(kContentLocaleAttr, &content_locale))
+ return false;
+ SetupContent content;
+ if (!dict->GetString(kHelpPageAttr, &content.help_page_path))
+ return false;
+ if (!dict->GetString(kEulaPageAttr, &content.eula_page_path))
+ return false;
+ setup_content_[content_locale] = content;
+ }
+ }
+ return true;
+}
+
+const StartupCustomizationDocument::SetupContent*
+ StartupCustomizationDocument::GetSetupContent(
+ const std::string& locale) const {
+ SetupContentMap::const_iterator content_iter = setup_content_.find(locale);
+ if (content_iter != setup_content_.end()) {
+ return &content_iter->second;
+ }
+ return NULL;
+}
+
+// ServicesCustomizationDocument implementation.
+
+bool ServicesCustomizationDocument::ParseFromJsonValue(
+ const DictionaryValue* root) {
+ return CustomizationDocument::ParseFromJsonValue(root);
+ // TODO(denisromanov): implement.
+}
+
+} // namespace chromeos
Property changes on: chrome/browser/chromeos/customization_document.cc
___________________________________________________________________
Added: svn:eol-style
+ LF
« no previous file with comments | « chrome/browser/chromeos/customization_document.h ('k') | chrome/browser/chromeos/customization_document_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698