// Copyright 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.
#ifndef EXTENSIONS_COMMON_MANIFEST_HANDLERS_BACKGROUND_INFO_H_
#define EXTENSIONS_COMMON_MANIFEST_HANDLERS_BACKGROUND_INFO_H_
#include <string>
#include <vector>
#include "base/values.h"
#include "extensions/common/extension.h"
#include "extensions/common/manifest_handler.h"
#include "url/gurl.h"
namespace extensions {
class BackgroundInfo : public Extension::ManifestData {
public:
BackgroundInfo();
virtual ~BackgroundInfo();
static GURL GetBackgroundURL(const Extension* extension);
static const std::vector<std::string>& GetBackgroundScripts(
const Extension* extension);
static bool HasBackgroundPage(const Extension* extension);
static bool HasPersistentBackgroundPage(const Extension* extension);
static bool HasLazyBackgroundPage(const Extension* extension);
static bool HasGeneratedBackgroundPage(const Extension* extension);
static bool AllowJSAccess(const Extension* extension);
bool has_background_page() const {
return background_url_.is_valid() || !background_scripts_.empty();
}
bool has_persistent_background_page() const {
return has_background_page() && is_persistent_;
}
bool has_lazy_background_page() const {
return has_background_page() && !is_persistent_;
}
bool Parse(const Extension* extension, base::string16* error);
private:
bool LoadBackgroundScripts(const Extension* extension,
const std::string& key,
base::string16* error);
bool LoadBackgroundPage(const Extension* extension,
const std::string& key,
base::string16* error);
bool LoadBackgroundPage(const Extension* extension, base::string16* error);
bool LoadBackgroundPersistent(const Extension* extension,
base::string16* error);
bool LoadAllowJSAccess(const Extension* extension, base::string16* error);
// Optional URL to a master page of which a single instance should be always
// loaded in the background.
GURL background_url_;
// Optional list of scripts to use to generate a background page. If this is
// present, background_url_ will be empty and generated by GetBackgroundURL().
std::vector<std::string> background_scripts_;
// True if the background page should stay loaded forever; false if it should
// load on-demand (when it needs to handle an event). Defaults to true.
bool is_persistent_;
// True if the background page can be scripted by pages of the app or
// extension, in which case all such pages must run in the same process.
// False if such pages are not permitted to script the background page,
// allowing them to run in different processes.
// Defaults to true.
bool allow_js_access_;
DISALLOW_COPY_AND_ASSIGN(BackgroundInfo);
};
// Parses all background/event page-related keys in the manifest.
class BackgroundManifestHandler : public ManifestHandler {
public:
BackgroundManifestHandler();
virtual ~BackgroundManifestHandler();
virtual bool Parse(Extension* extension, base::string16* error) OVERRIDE;
virtual bool Validate(const Extension* extension,
std::string* error,
std::vector<InstallWarning>* warnings) const OVERRIDE;
virtual bool AlwaysParseForType(Manifest::Type type) const OVERRIDE;
private:
virtual const std::vector<std::string> Keys() const OVERRIDE;
DISALLOW_COPY_AND_ASSIGN(BackgroundManifestHandler);
};
} // namespace extensions
#endif // EXTENSIONS_COMMON_MANIFEST_HANDLERS_BACKGROUND_INFO_H_