summaryrefslogtreecommitdiffstats
path: root/chrome/common/extensions/extension.h
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/common/extensions/extension.h')
-rw-r--r--chrome/common/extensions/extension.h247
1 files changed, 247 insertions, 0 deletions
diff --git a/chrome/common/extensions/extension.h b/chrome/common/extensions/extension.h
new file mode 100644
index 0000000..e099a7e
--- /dev/null
+++ b/chrome/common/extensions/extension.h
@@ -0,0 +1,247 @@
+// Copyright (c) 2009 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 CHROME_COMMON_EXTENSIONS_EXTENSION_H_
+#define CHROME_COMMON_EXTENSIONS_EXTENSION_H_
+
+#include <string>
+#include <vector>
+#include <map>
+
+#include "base/file_path.h"
+#include "base/scoped_ptr.h"
+#include "base/string16.h"
+#include "base/values.h"
+#include "base/version.h"
+#include "chrome/common/extensions/user_script.h"
+#include "chrome/common/extensions/url_pattern.h"
+#include "chrome/common/page_action.h"
+#include "googleurl/src/gurl.h"
+#include "third_party/skia/include/core/SkColor.h"
+
+// Represents a Chromium extension.
+class Extension {
+ public:
+ // What an extension was loaded from.
+ enum Location {
+ INVALID,
+ INTERNAL, // A crx file from the internal Extensions directory.
+ EXTERNAL, // A crx file from an external directory (via eg the registry
+ // on Windows).
+ LOAD // --load-extension.
+ };
+
+ // The name of the manifest inside an extension.
+ static const char kManifestFilename[];
+
+ // Keys used in JSON representation of extensions.
+ static const wchar_t* kContentScriptsKey;
+ static const wchar_t* kCssKey;
+ static const wchar_t* kDescriptionKey;
+ static const wchar_t* kIconPathKey;
+ static const wchar_t* kIdKey;
+ static const wchar_t* kJsKey;
+ static const wchar_t* kMatchesKey;
+ static const wchar_t* kNameKey;
+ static const wchar_t* kPageActionsKey;
+ static const wchar_t* kPermissionsKey;
+ static const wchar_t* kPluginsDirKey;
+ static const wchar_t* kBackgroundKey;
+ static const wchar_t* kRunAtKey;
+ static const wchar_t* kThemeKey;
+ static const wchar_t* kThemeImagesKey;
+ static const wchar_t* kThemeColorsKey;
+ static const wchar_t* kThemeTintsKey;
+ static const wchar_t* kToolstripsKey;
+ static const wchar_t* kTooltipKey;
+ static const wchar_t* kTypeKey;
+ static const wchar_t* kVersionKey;
+ static const wchar_t* kZipHashKey;
+
+ // Some values expected in manifests.
+ static const char* kRunAtDocumentStartValue;
+ static const char* kRunAtDocumentEndValue;
+ static const char* kPageActionTypeTab;
+ static const char* kPageActionTypePermanent;
+
+ // Error messages returned from InitFromValue().
+ static const char* kInvalidContentScriptError;
+ static const char* kInvalidContentScriptsListError;
+ static const char* kInvalidCssError;
+ static const char* kInvalidCssListError;
+ static const char* kInvalidDescriptionError;
+ static const char* kInvalidIdError;
+ static const char* kInvalidJsError;
+ static const char* kInvalidJsListError;
+ static const char* kInvalidManifestError;
+ static const char* kInvalidMatchCountError;
+ static const char* kInvalidMatchError;
+ static const char* kInvalidMatchesError;
+ static const char* kInvalidNameError;
+ static const char* kInvalidPluginsDirError;
+ static const char* kInvalidBackgroundError;
+ static const char* kInvalidRunAtError;
+ static const char* kInvalidToolstripError;
+ static const char* kInvalidToolstripsError;
+ static const char* kInvalidVersionError;
+ static const char* kInvalidPageActionError;
+ static const char* kInvalidPageActionsListError;
+ static const char* kInvalidPageActionIconPathError;
+ static const char* kInvalidPageActionTooltipError;
+ static const char* kInvalidPageActionTypeValueError;
+ static const char* kInvalidPermissionsError;
+ static const char* kInvalidPermissionCountWarning;
+ static const char* kInvalidPermissionError;
+ static const char* kInvalidPermissionSchemeError;
+ static const char* kInvalidZipHashError;
+ static const char* kInvalidThemeError;
+ static const char* kInvalidThemeImagesMissingError;
+ static const char* kInvalidThemeImagesError;
+ static const char* kInvalidThemeColorsError;
+ static const char* kInvalidThemeTintsError;
+ static const char* kMissingFileError;
+
+ // The number of bytes in a legal id.
+ static const size_t kIdSize;
+
+ Extension() : location_(INVALID) {}
+ explicit Extension(const FilePath& path);
+ virtual ~Extension();
+
+ // Returns an absolute url to a resource inside of an extension. The
+ // |extension_url| argument should be the url() from an Extension object. The
+ // |relative_path| can be untrusted user input. The returned URL will either
+ // be invalid() or a child of |extension_url|.
+ // NOTE: Static so that it can be used from multiple threads.
+ static GURL GetResourceURL(const GURL& extension_url,
+ const std::string& relative_path);
+ GURL GetResourceURL(const std::string& relative_path) {
+ return GetResourceURL(url(), relative_path);
+ }
+
+ // Returns an absolute path to a resource inside of an extension. The
+ // |extension_path| argument should be the path() from an Extension object.
+ // The |relative_path| can be untrusted user input. The returned path will
+ // either be empty or a child of extension_path.
+ // NOTE: Static so that it can be used from multiple threads.
+ static FilePath GetResourcePath(const FilePath& extension_path,
+ const std::string& relative_path);
+ FilePath GetResourcePath(const std::string& relative_path) {
+ return GetResourcePath(path(), relative_path);
+ }
+
+ // Initialize the extension from a parsed manifest.
+ // If |require_id| is true, will return an error if the "id" key is missing
+ // from the value.
+ bool InitFromValue(const DictionaryValue& value, bool require_id,
+ std::string* error);
+
+ const FilePath& path() const { return path_; }
+ const GURL& url() const { return extension_url_; }
+ const Location location() const { return location_; }
+ void set_location(Location location) { location_ = location; }
+ const std::string& id() const { return id_; }
+ const Version* version() const { return version_.get(); }
+ // String representation of the version number.
+ const std::string VersionString() const;
+ const std::string& name() const { return name_; }
+ const std::string& description() const { return description_; }
+ const UserScriptList& content_scripts() const { return content_scripts_; }
+ const PageActionMap& page_actions() const { return page_actions_; }
+ const FilePath& plugins_dir() const { return plugins_dir_; }
+ const GURL& background_url() const { return background_url_; }
+ const std::vector<std::string>& toolstrips() const { return toolstrips_; }
+ const std::vector<URLPattern>& permissions() const {
+ return permissions_; }
+
+ // Retrieves a page action by |id|.
+ const PageAction* GetPageAction(std::string id) const;
+
+ // Theme-related
+ DictionaryValue* GetThemeImages() const { return theme_images_.get(); }
+ DictionaryValue* GetThemeColors() const { return theme_colors_.get(); }
+ DictionaryValue* GetThemeTints() const { return theme_tints_.get(); }
+ bool IsTheme() { return is_theme_; }
+
+ private:
+ // Helper method that loads a UserScript object from a
+ // dictionary in the content_script list of the manifest.
+ bool LoadUserScriptHelper(const DictionaryValue* content_script,
+ int definition_index,
+ std::string* error,
+ UserScript* result);
+
+ // Helper method that loads a PageAction object from a
+ // dictionary in the page_action list of the manifest.
+ PageAction* LoadPageActionHelper(const DictionaryValue* page_action,
+ int definition_index,
+ std::string* error);
+
+ // The absolute path to the directory the extension is stored in.
+ FilePath path_;
+
+ // The base extension url for the extension.
+ GURL extension_url_;
+
+ // The location the extension was loaded from.
+ Location location_;
+
+ // A human-readable ID for the extension. The convention is to use something
+ // like 'com.example.myextension', but this is not currently enforced. An
+ // extension's ID is used in things like directory structures and URLs, and
+ // is expected to not change across versions. In the case of conflicts,
+ // updates will only be allowed if the extension can be validated using the
+ // previous version's update key.
+ std::string id_;
+
+ // The extension's version.
+ scoped_ptr<Version> version_;
+
+ // The extension's human-readable name.
+ std::string name_;
+
+ // An optional longer description of the extension.
+ std::string description_;
+
+ // Paths to the content scripts the extension contains.
+ UserScriptList content_scripts_;
+
+ // A list of page actions.
+ PageActionMap page_actions_;
+
+ // Optional absolute path to the directory of NPAPI plugins that the extension
+ // contains.
+ FilePath plugins_dir_;
+
+ // Optional URL to a master page of which a single instance should be always
+ // loaded in the background.
+ GURL background_url_;
+
+ // Paths to HTML files to be displayed in the toolbar.
+ std::vector<std::string> toolstrips_;
+
+ // A SHA1 hash of the contents of the zip file. Note that this key is only
+ // present in the manifest that's prepended to the zip. The inner manifest
+ // will not have this key.
+ std::string zip_hash_;
+
+ // A map of resource id's to relative file paths.
+ scoped_ptr<DictionaryValue> theme_images_;
+
+ // A map of color names to colors.
+ scoped_ptr<DictionaryValue> theme_colors_;
+
+ // A map of color names to colors.
+ scoped_ptr<DictionaryValue> theme_tints_;
+
+ // Whether the extension is a theme - if it is, certain things are disabled.
+ bool is_theme_;
+
+ // The sites this extension has permission to talk to (using XHR, etc).
+ std::vector<URLPattern> permissions_;
+
+ DISALLOW_COPY_AND_ASSIGN(Extension);
+};
+
+#endif // CHROME_COMMON_EXTENSIONS_EXTENSION_H_