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, ®istration_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 |