Home | History | Annotate | Download | only in manifest_handlers
      1 // Copyright 2014 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "extensions/common/manifest_handlers/launcher_page_info.h"
      6 
      7 #include "base/files/file_util.h"
      8 #include "base/strings/utf_string_conversions.h"
      9 #include "extensions/common/manifest.h"
     10 #include "extensions/common/manifest_constants.h"
     11 #include "grit/extensions_strings.h"
     12 #include "ui/base/l10n/l10n_util.h"
     13 
     14 namespace extensions {
     15 
     16 LauncherPageHandler::LauncherPageHandler() {
     17 }
     18 
     19 LauncherPageHandler::~LauncherPageHandler() {
     20 }
     21 
     22 // static
     23 LauncherPageInfo* LauncherPageHandler::GetInfo(const Extension* extension) {
     24   return static_cast<LauncherPageInfo*>(
     25       extension->GetManifestData(manifest_keys::kLauncherPage));
     26 }
     27 
     28 bool LauncherPageHandler::Parse(Extension* extension, base::string16* error) {
     29   const extensions::Manifest* manifest = extension->manifest();
     30   scoped_ptr<LauncherPageInfo> launcher_page_info(new LauncherPageInfo);
     31   const base::DictionaryValue* launcher_page_dict = NULL;
     32   if (!manifest->GetDictionary(manifest_keys::kLauncherPage,
     33                                &launcher_page_dict)) {
     34     *error = base::ASCIIToUTF16(manifest_errors::kInvalidLauncherPage);
     35     return false;
     36   }
     37 
     38   if (!manifest->HasPath(extensions::manifest_keys::kLauncherPagePage)) {
     39     *error = base::ASCIIToUTF16(manifest_errors::kLauncherPagePageRequired);
     40     return false;
     41   }
     42 
     43   std::string launcher_page_page;
     44   if (!manifest->GetString(extensions::manifest_keys::kLauncherPagePage,
     45                            &launcher_page_page)) {
     46     *error = base::ASCIIToUTF16(manifest_errors::kInvalidLauncherPagePage);
     47     return false;
     48   }
     49 
     50   launcher_page_info->page = launcher_page_page;
     51 
     52   extension->SetManifestData(manifest_keys::kLauncherPage,
     53                              launcher_page_info.release());
     54   return true;
     55 }
     56 
     57 bool LauncherPageHandler::Validate(
     58     const Extension* extension,
     59     std::string* error,
     60     std::vector<InstallWarning>* warnings) const {
     61   LauncherPageInfo* info = GetInfo(extension);
     62   const base::FilePath path = extension->GetResource(info->page).GetFilePath();
     63   if (!base::PathExists(path)) {
     64     *error = l10n_util::GetStringFUTF8(IDS_EXTENSION_LOAD_LAUNCHER_PAGE_FAILED,
     65                                        base::UTF8ToUTF16(info->page));
     66     return false;
     67   }
     68 
     69   return true;
     70 }
     71 
     72 const std::vector<std::string> LauncherPageHandler::Keys() const {
     73   return SingleKey(manifest_keys::kLauncherPage);
     74 }
     75 
     76 }  // namespace extensions
     77