| Index: chrome/common/extensions/background_info.cc
|
| diff --git a/chrome/common/extensions/background_info.cc b/chrome/common/extensions/background_info.cc
|
| deleted file mode 100644
|
| index 54be0b8b49c64dfb5df335a195828b12f47a4677..0000000000000000000000000000000000000000
|
| --- a/chrome/common/extensions/background_info.cc
|
| +++ /dev/null
|
| @@ -1,319 +0,0 @@
|
| -// Copyright (c) 2013 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/common/extensions/background_info.h"
|
| -
|
| -#include "base/command_line.h"
|
| -#include "base/file_util.h"
|
| -#include "base/lazy_instance.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/strings/string_number_conversions.h"
|
| -#include "base/strings/utf_string_conversions.h"
|
| -#include "chrome/common/chrome_switches.h"
|
| -#include "chrome/common/extensions/extension_file_util.h"
|
| -#include "chrome/common/extensions/permissions/permissions_data.h"
|
| -#include "extensions/common/constants.h"
|
| -#include "extensions/common/error_utils.h"
|
| -#include "extensions/common/manifest_constants.h"
|
| -#include "extensions/common/permissions/api_permission_set.h"
|
| -#include "grit/generated_resources.h"
|
| -#include "ui/base/l10n/l10n_util.h"
|
| -
|
| -using base::DictionaryValue;
|
| -
|
| -namespace extensions {
|
| -
|
| -namespace keys = manifest_keys;
|
| -namespace values = manifest_values;
|
| -namespace errors = manifest_errors;
|
| -
|
| -namespace {
|
| -
|
| -const char kBackground[] = "background";
|
| -
|
| -static base::LazyInstance<BackgroundInfo> g_empty_background_info =
|
| - LAZY_INSTANCE_INITIALIZER;
|
| -
|
| -const BackgroundInfo& GetBackgroundInfo(const Extension* extension) {
|
| - BackgroundInfo* info = static_cast<BackgroundInfo*>(
|
| - extension->GetManifestData(kBackground));
|
| - if (!info)
|
| - return g_empty_background_info.Get();
|
| - return *info;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -BackgroundInfo::BackgroundInfo()
|
| - : is_persistent_(true),
|
| - allow_js_access_(true) {
|
| -}
|
| -
|
| -BackgroundInfo::~BackgroundInfo() {
|
| -}
|
| -
|
| -// static
|
| -GURL BackgroundInfo::GetBackgroundURL(const Extension* extension) {
|
| - const BackgroundInfo& info = GetBackgroundInfo(extension);
|
| - if (info.background_scripts_.empty())
|
| - return info.background_url_;
|
| - return extension->GetResourceURL(kGeneratedBackgroundPageFilename);
|
| -}
|
| -
|
| -// static
|
| -bool BackgroundInfo::HasGeneratedBackgroundPage(const Extension* extension) {
|
| - const BackgroundInfo& info = GetBackgroundInfo(extension);
|
| - return !info.background_scripts_.empty();
|
| -}
|
| -
|
| -// static
|
| -const std::vector<std::string>& BackgroundInfo::GetBackgroundScripts(
|
| - const Extension* extension) {
|
| - return GetBackgroundInfo(extension).background_scripts_;
|
| -}
|
| -
|
| -// static
|
| -bool BackgroundInfo::HasBackgroundPage(const Extension* extension) {
|
| - return GetBackgroundInfo(extension).has_background_page();
|
| -}
|
| -
|
| -// static
|
| -bool BackgroundInfo::AllowJSAccess(const Extension* extension) {
|
| - return GetBackgroundInfo(extension).allow_js_access_;
|
| -}
|
| -
|
| -// static
|
| -bool BackgroundInfo::HasPersistentBackgroundPage(const Extension* extension) {
|
| - return GetBackgroundInfo(extension).has_persistent_background_page();
|
| -}
|
| -
|
| -// static
|
| -bool BackgroundInfo::HasLazyBackgroundPage(const Extension* extension) {
|
| - return GetBackgroundInfo(extension).has_lazy_background_page();
|
| -}
|
| -
|
| -bool BackgroundInfo::Parse(const Extension* extension, string16* error) {
|
| - const std::string& bg_scripts_key = extension->is_platform_app() ?
|
| - keys::kPlatformAppBackgroundScripts : keys::kBackgroundScripts;
|
| - if (!LoadBackgroundScripts(extension, bg_scripts_key, error) ||
|
| - !LoadBackgroundPage(extension, error) ||
|
| - !LoadBackgroundPersistent(extension, error) ||
|
| - !LoadAllowJSAccess(extension, error)) {
|
| - return false;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool BackgroundInfo::LoadBackgroundScripts(const Extension* extension,
|
| - const std::string& key,
|
| - string16* error) {
|
| - const base::Value* background_scripts_value = NULL;
|
| - if (!extension->manifest()->Get(key, &background_scripts_value))
|
| - return true;
|
| -
|
| - CHECK(background_scripts_value);
|
| - if (background_scripts_value->GetType() != base::Value::TYPE_LIST) {
|
| - *error = ASCIIToUTF16(errors::kInvalidBackgroundScripts);
|
| - return false;
|
| - }
|
| -
|
| - const base::ListValue* background_scripts = NULL;
|
| - background_scripts_value->GetAsList(&background_scripts);
|
| - for (size_t i = 0; i < background_scripts->GetSize(); ++i) {
|
| - std::string script;
|
| - if (!background_scripts->GetString(i, &script)) {
|
| - *error = ErrorUtils::FormatErrorMessageUTF16(
|
| - errors::kInvalidBackgroundScript, base::IntToString(i));
|
| - return false;
|
| - }
|
| - background_scripts_.push_back(script);
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -bool BackgroundInfo::LoadBackgroundPage(const Extension* extension,
|
| - const std::string& key,
|
| - string16* error) {
|
| - const base::Value* background_page_value = NULL;
|
| - if (!extension->manifest()->Get(key, &background_page_value))
|
| - return true;
|
| -
|
| - if (!background_scripts_.empty()) {
|
| - *error = ASCIIToUTF16(errors::kInvalidBackgroundCombination);
|
| - return false;
|
| - }
|
| -
|
| - std::string background_str;
|
| - if (!background_page_value->GetAsString(&background_str)) {
|
| - *error = ASCIIToUTF16(errors::kInvalidBackground);
|
| - return false;
|
| - }
|
| -
|
| - if (extension->is_hosted_app()) {
|
| - background_url_ = GURL(background_str);
|
| -
|
| - if (!PermissionsData::GetInitialAPIPermissions(extension)->count(
|
| - APIPermission::kBackground)) {
|
| - *error = ASCIIToUTF16(errors::kBackgroundPermissionNeeded);
|
| - return false;
|
| - }
|
| - // Hosted apps require an absolute URL.
|
| - if (!background_url_.is_valid()) {
|
| - *error = ASCIIToUTF16(errors::kInvalidBackgroundInHostedApp);
|
| - return false;
|
| - }
|
| -
|
| - if (!(background_url_.SchemeIs("https") ||
|
| - (CommandLine::ForCurrentProcess()->HasSwitch(
|
| - switches::kAllowHTTPBackgroundPage) &&
|
| - background_url_.SchemeIs("http")))) {
|
| - *error = ASCIIToUTF16(errors::kInvalidBackgroundInHostedApp);
|
| - return false;
|
| - }
|
| - } else {
|
| - background_url_ = extension->GetResourceURL(background_str);
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -bool BackgroundInfo::LoadBackgroundPage(const Extension* extension,
|
| - string16* error) {
|
| - if (extension->is_platform_app()) {
|
| - return LoadBackgroundPage(
|
| - extension, keys::kPlatformAppBackgroundPage, error);
|
| - }
|
| -
|
| - if (!LoadBackgroundPage(extension, keys::kBackgroundPage, error))
|
| - return false;
|
| - if (background_url_.is_empty())
|
| - return LoadBackgroundPage(extension, keys::kBackgroundPageLegacy, error);
|
| - return true;
|
| -}
|
| -
|
| -bool BackgroundInfo::LoadBackgroundPersistent(const Extension* extension,
|
| - string16* error) {
|
| - if (extension->is_platform_app()) {
|
| - is_persistent_ = false;
|
| - return true;
|
| - }
|
| -
|
| - const base::Value* background_persistent = NULL;
|
| - if (!extension->manifest()->Get(keys::kBackgroundPersistent,
|
| - &background_persistent))
|
| - return true;
|
| -
|
| - if (!background_persistent->GetAsBoolean(&is_persistent_)) {
|
| - *error = ASCIIToUTF16(errors::kInvalidBackgroundPersistent);
|
| - return false;
|
| - }
|
| -
|
| - if (!has_background_page()) {
|
| - *error = ASCIIToUTF16(errors::kInvalidBackgroundPersistentNoPage);
|
| - return false;
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -bool BackgroundInfo::LoadAllowJSAccess(const Extension* extension,
|
| - string16* error) {
|
| - const base::Value* allow_js_access = NULL;
|
| - if (!extension->manifest()->Get(keys::kBackgroundAllowJsAccess,
|
| - &allow_js_access))
|
| - return true;
|
| -
|
| - if (!allow_js_access->IsType(base::Value::TYPE_BOOLEAN) ||
|
| - !allow_js_access->GetAsBoolean(&allow_js_access_)) {
|
| - *error = ASCIIToUTF16(errors::kInvalidBackgroundAllowJsAccess);
|
| - return false;
|
| - }
|
| -
|
| - return true;
|
| -}
|
| -
|
| -BackgroundManifestHandler::BackgroundManifestHandler() {
|
| -}
|
| -
|
| -BackgroundManifestHandler::~BackgroundManifestHandler() {
|
| -}
|
| -
|
| -bool BackgroundManifestHandler::Parse(Extension* extension, string16* error) {
|
| - scoped_ptr<BackgroundInfo> info(new BackgroundInfo);
|
| - if (!info->Parse(extension, error))
|
| - return false;
|
| -
|
| - // Platform apps must have background pages.
|
| - if (extension->is_platform_app() && !info->has_background_page()) {
|
| - *error = ASCIIToUTF16(errors::kBackgroundRequiredForPlatformApps);
|
| - return false;
|
| - }
|
| - // Lazy background pages are incompatible with the webRequest API.
|
| - if (info->has_lazy_background_page() &&
|
| - PermissionsData::GetInitialAPIPermissions(extension)->count(
|
| - APIPermission::kWebRequest)) {
|
| - *error = ASCIIToUTF16(errors::kWebRequestConflictsWithLazyBackground);
|
| - return false;
|
| - }
|
| -
|
| - extension->SetManifestData(kBackground, info.release());
|
| - return true;
|
| -}
|
| -
|
| -bool BackgroundManifestHandler::Validate(
|
| - const Extension* extension,
|
| - std::string* error,
|
| - std::vector<InstallWarning>* warnings) const {
|
| - // Validate that background scripts exist.
|
| - const std::vector<std::string>& background_scripts =
|
| - extensions::BackgroundInfo::GetBackgroundScripts(extension);
|
| - for (size_t i = 0; i < background_scripts.size(); ++i) {
|
| - if (!base::PathExists(
|
| - extension->GetResource(background_scripts[i]).GetFilePath())) {
|
| - *error = l10n_util::GetStringFUTF8(
|
| - IDS_EXTENSION_LOAD_BACKGROUND_SCRIPT_FAILED,
|
| - UTF8ToUTF16(background_scripts[i]));
|
| - return false;
|
| - }
|
| - }
|
| -
|
| - // Validate background page location, except for hosted apps, which should use
|
| - // an external URL. Background page for hosted apps are verified when the
|
| - // extension is created (in Extension::InitFromValue)
|
| - if (extensions::BackgroundInfo::HasBackgroundPage(extension) &&
|
| - !extension->is_hosted_app() && background_scripts.empty()) {
|
| - base::FilePath page_path =
|
| - extension_file_util::ExtensionURLToRelativeFilePath(
|
| - extensions::BackgroundInfo::GetBackgroundURL(extension));
|
| - const base::FilePath path = extension->GetResource(page_path).GetFilePath();
|
| - if (path.empty() || !base::PathExists(path)) {
|
| - *error =
|
| - l10n_util::GetStringFUTF8(
|
| - IDS_EXTENSION_LOAD_BACKGROUND_PAGE_FAILED,
|
| - page_path.LossyDisplayName());
|
| - return false;
|
| - }
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -bool BackgroundManifestHandler::AlwaysParseForType(Manifest::Type type) const {
|
| - return type == Manifest::TYPE_PLATFORM_APP;
|
| -}
|
| -
|
| -const std::vector<std::string> BackgroundManifestHandler::Keys() const {
|
| - static const char* keys[] = {
|
| - keys::kBackgroundAllowJsAccess,
|
| - keys::kBackgroundPage,
|
| - keys::kBackgroundPageLegacy,
|
| - keys::kBackgroundPersistent,
|
| - keys::kBackgroundScripts,
|
| - keys::kPlatformAppBackgroundPage,
|
| - keys::kPlatformAppBackgroundScripts
|
| - };
|
| - return std::vector<std::string>(keys, keys + arraysize(keys));
|
| -}
|
| -
|
| -} // namespace extensions
|
|
|