summaryrefslogtreecommitdiffstats
path: root/chrome/common
diff options
context:
space:
mode:
authorloislo@chromium.org <loislo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-06 11:44:57 +0000
committerloislo@chromium.org <loislo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-06 11:44:57 +0000
commitc082105e638a213cae0ea99b2508e0810a19c644 (patch)
tree11f0ccca1678354d38f8d2bcee05caee6e2378f4 /chrome/common
parenta2f3b6f16f1bdea5e95be1d6e1d0e1b3b94a5df3 (diff)
downloadchromium_src-c082105e638a213cae0ea99b2508e0810a19c644.zip
chromium_src-c082105e638a213cae0ea99b2508e0810a19c644.tar.gz
chromium_src-c082105e638a213cae0ea99b2508e0810a19c644.tar.bz2
Added devtools_page field to extension manifest to specify a page loaded into devtools front-end.
Added support for enumerating devtools extensions in devtools' DOM UI. BUG=none TEST=none Review URL: http://codereview.chromium.org/3074025 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@55217 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/common')
-rw-r--r--chrome/common/extensions/extension.cc14
-rw-r--r--chrome/common/extensions/extension.h4
-rw-r--r--chrome/common/extensions/extension_constants.cc149
-rw-r--r--chrome/common/extensions/extension_constants.h107
-rw-r--r--chrome/common/extensions/extension_manifests_unittest.cc19
5 files changed, 171 insertions, 122 deletions
diff --git a/chrome/common/extensions/extension.cc b/chrome/common/extensions/extension.cc
index e3aad5a..902eab4 100644
--- a/chrome/common/extensions/extension.cc
+++ b/chrome/common/extensions/extension.cc
@@ -1486,6 +1486,20 @@ bool Extension::InitFromValue(const DictionaryValue& source, bool require_key,
}
}
+ // Initialize devtools page url (optional).
+ if (source.HasKey(keys::kDevToolsPage)) {
+ std::string devtools_str;
+ if (!source.GetString(keys::kDevToolsPage, &devtools_str)) {
+ *error = errors::kInvalidDevToolsPage;
+ return false;
+ }
+ if (!HasApiPermission(Extension::kExperimentalPermission)) {
+ *error = errors::kDevToolsExperimental;
+ return false;
+ }
+ devtools_url_ = GetResourceURL(devtools_str);
+ }
+
if (!LoadIsApp(manifest_value_.get(), error) ||
!LoadExtent(manifest_value_.get(), keys::kWebURLs, &web_extent_,
errors::kInvalidWebURLs, errors::kInvalidWebURL, error) ||
diff --git a/chrome/common/extensions/extension.h b/chrome/common/extensions/extension.h
index 5621c12..9f3ca6c 100644
--- a/chrome/common/extensions/extension.h
+++ b/chrome/common/extensions/extension.h
@@ -264,6 +264,7 @@ class Extension {
const std::vector<PluginInfo>& plugins() const { return plugins_; }
const GURL& background_url() const { return background_url_; }
const GURL& options_url() const { return options_url_; }
+ const GURL& devtools_url() const { return devtools_url_; }
const std::vector<ToolstripInfo>& toolstrips() const { return toolstrips_; }
const std::vector<std::string>& api_permissions() const {
return api_permissions_;
@@ -489,6 +490,9 @@ class Extension {
// Optional URL to a page for setting options/preferences.
GURL options_url_;
+ // Optional URL to a devtools extension page.
+ GURL devtools_url_;
+
// Optional list of toolstrips_ and associated properties.
std::vector<ToolstripInfo> toolstrips_;
diff --git a/chrome/common/extensions/extension_constants.cc b/chrome/common/extensions/extension_constants.cc
index 989d449..4001c9b 100644
--- a/chrome/common/extensions/extension_constants.cc
+++ b/chrome/common/extensions/extension_constants.cc
@@ -9,8 +9,8 @@ namespace extension_manifest_keys {
const wchar_t* kAllFrames = L"all_frames";
const wchar_t* kApp = L"app";
const wchar_t* kBackground = L"background_page";
-const wchar_t* kBrowseURLs = L"app.browse_urls";
const wchar_t* kBrowserAction = L"browser_action";
+const wchar_t* kBrowseURLs = L"app.browse_urls";
const wchar_t* kChromeURLOverrides = L"chrome_url_overrides";
const wchar_t* kContentScripts = L"content_scripts";
const wchar_t* kConvertedFromUserScript = L"converted_from_user_script";
@@ -18,6 +18,7 @@ const wchar_t* kCss = L"css";
const wchar_t* kCurrentLocale = L"current_locale";
const wchar_t* kDefaultLocale = L"default_locale";
const wchar_t* kDescription = L"description";
+const wchar_t* kDevToolsPage = L"devtools_page";
const wchar_t* kExcludeGlobs = L"exclude_globs";
const wchar_t* kIcons = L"icons";
const wchar_t* kIncludeGlobs = L"include_globs";
@@ -33,16 +34,17 @@ const wchar_t* kMatches = L"matches";
const wchar_t* kMinimumChromeVersion = L"minimum_chrome_version";
const wchar_t* kName = L"name";
const wchar_t* kOmniboxKeyword = L"omnibox_keyword";
-const wchar_t* kPageActionId = L"id";
+const wchar_t* kOptionsPage = L"options_page";
const wchar_t* kPageAction = L"page_action";
-const wchar_t* kPageActions = L"page_actions";
-const wchar_t* kPageActionIcons = L"icons";
const wchar_t* kPageActionDefaultIcon = L"default_icon";
const wchar_t* kPageActionDefaultPopup = L"default_popup";
const wchar_t* kPageActionDefaultTitle = L"default_title";
+const wchar_t* kPageActionIcons = L"icons";
+const wchar_t* kPageActionId = L"id";
const wchar_t* kPageActionPopup = L"popup";
const wchar_t* kPageActionPopupHeight = L"height";
const wchar_t* kPageActionPopupPath = L"path";
+const wchar_t* kPageActions = L"page_actions";
const wchar_t* kPermissions = L"permissions";
const wchar_t* kPlugins = L"plugins";
const wchar_t* kPluginsPath = L"path";
@@ -51,18 +53,17 @@ const wchar_t* kPublicKey = L"key";
const wchar_t* kRunAt = L"run_at";
const wchar_t* kSignature = L"signature";
const wchar_t* kTheme = L"theme";
-const wchar_t* kThemeImages = L"images";
const wchar_t* kThemeColors = L"colors";
-const wchar_t* kThemeTints = L"tints";
const wchar_t* kThemeDisplayProperties = L"properties";
+const wchar_t* kThemeImages = L"images";
+const wchar_t* kThemeTints = L"tints";
const wchar_t* kToolstripMoleHeight = L"mole_height";
const wchar_t* kToolstripMolePath = L"mole";
const wchar_t* kToolstripPath = L"path";
const wchar_t* kToolstrips = L"toolstrips";
const wchar_t* kType = L"type";
-const wchar_t* kVersion = L"version";
const wchar_t* kUpdateURL = L"update_url";
-const wchar_t* kOptionsPage = L"options_page";
+const wchar_t* kVersion = L"version";
const wchar_t* kWebURLs = L"app.urls";
} // namespace extension_manifest_keys
@@ -82,17 +83,28 @@ const char* kLaunchContainerWindow = "window";
// printf because we want to unit test them and scanf is hard to make
// cross-platform.
namespace extension_manifest_errors {
-const char* kAppsNotEnabled = "Apps are not enabled.";
+const char* kAppsNotEnabled =
+ "Apps are not enabled.";
+const char* kCannotAccessPage =
+ "Cannot access contents of url \"*\". "
+ "Extension manifest must request permission to access this host.";
+const char* kCannotScriptGallery =
+ "The extensions gallery cannot be scripted.";
const char* kChromeVersionTooLow =
"This extension requires * version * or greater.";
+const char* kDevToolsExperimental =
+ "You must request the 'experimental' permission in order to use the"
+ " DevTools API.";
const char* kInvalidAllFrames =
"Invalid value for 'content_scripts[*].all_frames'.";
+const char* kInvalidBackground =
+ "Invalid value for 'background_page'.";
+const char* kInvalidBrowserAction =
+ "Invalid value for 'browser_action'.";
const char* kInvalidBrowseURL =
"Invalid value for 'app.browse_urls[*]'.";
const char* kInvalidBrowseURLs =
"Invalid value for 'app.browse_urls'.";
-const char* kInvalidBrowserAction =
- "Invalid value for 'browser_action'.";
const char* kInvalidChromeURLOverrides =
"Invalid value for 'chrome_url_overrides'.";
const char* kInvalidContentScript =
@@ -103,20 +115,26 @@ const char* kInvalidCss =
"Invalid value for 'content_scripts[*].css[*]'.";
const char* kInvalidCssList =
"Required value 'content_scripts[*].css' is invalid.";
+const char* kInvalidDefaultLocale =
+ "Invalid value for default locale - locale name must be a string.";
const char* kInvalidDescription =
"Invalid value for 'description'.";
-const char* kInvalidGlobList =
- "Invalid value for 'content_scripts[*].*'.";
+const char* kInvalidDevToolsPage =
+ "Invalid value for 'devtools_page'.";
const char* kInvalidGlob =
"Invalid value for 'content_scripts[*].*[*]'.";
-const char* kInvalidIcons =
- "Invalid value for 'icons'.";
+const char* kInvalidGlobList =
+ "Invalid value for 'content_scripts[*].*'.";
const char* kInvalidIconPath =
"Invalid value for 'icons[\"*\"]'.";
+const char* kInvalidIcons =
+ "Invalid value for 'icons'.";
const char* kInvalidJs =
"Invalid value for 'content_scripts[*].js[*]'.";
const char* kInvalidJsList =
"Required value 'content_scripts[*].js' is invalid.";
+const char* kInvalidKey =
+ "Value 'key' is missing or invalid.";
const char* kInvalidLaunchContainer =
"Invalid value for 'app.launch.container'.";
const char* kInvalidLaunchFullscreen =
@@ -133,35 +151,33 @@ const char* kInvalidLaunchWidth =
"Invalid value for 'app.launch.width'.";
const char* kInvalidLaunchWidthContainer =
"Invalid container type for 'app.launch.width'.";
-const char* kInvalidKey =
- "Value 'key' is missing or invalid.";
const char* kInvalidManifest =
"Manifest file is invalid.";
+const char* kInvalidMatch =
+ "Invalid value for 'content_scripts[*].matches[*]'.";
const char* kInvalidMatchCount =
"Invalid value for 'content_scripts[*].matches'. There must be at least"
"one match specified.";
-const char* kInvalidMatch =
- "Invalid value for 'content_scripts[*].matches[*]'.";
const char* kInvalidMatches =
"Required value 'content_scripts[*].matches' is missing or invalid.";
const char* kInvalidMinimumChromeVersion =
"Invalid value for 'minimum_chrome_version'.";
const char* kInvalidName =
"Required value 'name' is missing or invalid.";
+const char* kInvalidOmniboxKeyword =
+ "Invalid value for 'omnibox_keyword'.";
+const char* kInvalidOptionsPage =
+ "Invalid value for 'options_page'.";
const char* kInvalidPageAction =
"Invalid value for 'page_action'.";
-const char* kInvalidPageActionName =
- "Invalid value for 'page_action.name'.";
+const char* kInvalidPageActionDefaultTitle =
+ "Invalid value for 'default_title'.";
const char* kInvalidPageActionIconPath =
"Invalid value for 'page_action.default_icon'.";
-const char* kInvalidPageActionsList =
- "Invalid value for 'page_actions'.";
-const char* kInvalidPageActionsListSize =
- "Invalid value for 'page_actions'. There can be at most one page action.";
const char* kInvalidPageActionId =
"Required value 'id' is missing or invalid.";
-const char* kInvalidPageActionDefaultTitle =
- "Invalid value for 'default_title'.";
+const char* kInvalidPageActionName =
+ "Invalid value for 'page_action.name'.";
const char* kInvalidPageActionOldAndNewKeys =
"Key \"*\" is deprecated. Key \"*\" has the same meaning. You can not "
"use both.";
@@ -171,12 +187,16 @@ const char* kInvalidPageActionPopupHeight =
"Invalid value for page action popup height [*].";
const char* kInvalidPageActionPopupPath =
"Invalid value for page action popup path [*].";
+const char* kInvalidPageActionsList =
+ "Invalid value for 'page_actions'.";
+const char* kInvalidPageActionsListSize =
+ "Invalid value for 'page_actions'. There can be at most one page action.";
const char* kInvalidPageActionTypeValue =
"Invalid value for 'page_actions[*].type', expected 'tab' or 'permanent'.";
-const char* kInvalidPermissions =
- "Required value 'permissions' is missing or invalid.";
const char* kInvalidPermission =
"Invalid value for 'permissions[*]'.";
+const char* kInvalidPermissions =
+ "Required value 'permissions' is missing or invalid.";
const char* kInvalidPermissionScheme =
"Invalid scheme for 'permissions[*]'. Only 'http' and 'https' are "
"allowed.";
@@ -186,55 +206,41 @@ const char* kInvalidPluginsPath =
"Invalid value for 'plugins[*].path'.";
const char* kInvalidPluginsPublic =
"Invalid value for 'plugins[*].public'.";
-const char* kInvalidBackground =
- "Invalid value for 'background_page'.";
const char* kInvalidRunAt =
"Invalid value for 'content_scripts[*].run_at'.";
const char* kInvalidSignature =
"Value 'signature' is missing or invalid.";
-const char* kInvalidToolstrip =
- "Invalid value for 'toolstrips[*]'";
-const char* kInvalidToolstrips =
- "Invalid value for 'toolstrips'.";
-const char* kInvalidVersion =
- "Required value 'version' is missing or invalid. It must be between 1-4 "
- "dot-separated integers each between 0 and 65536.";
-const char* kInvalidZipHash =
- "Required key 'zip_hash' is missing or invalid.";
-const char* kManifestParseError =
- "Manifest is not valid JSON.";
-const char* kManifestUnreadable =
- "Manifest file is missing or unreadable.";
-const char* kMissingFile =
- "At least one js or css file is required for 'content_scripts[*]'.";
-const char* kMultipleOverrides =
- "An extension cannot override more than one page.";
const char* kInvalidTheme =
"Invalid value for 'theme'.";
+const char* kInvalidThemeColors =
+ "Invalid value for theme colors - colors must be integers";
const char* kInvalidThemeImages =
"Invalid value for theme images - images must be strings.";
const char* kInvalidThemeImagesMissing =
- "Am image specified in the theme is missing.";
-const char* kInvalidThemeColors =
- "Invalid value for theme colors - colors must be integers";
+ "An image specified in the theme is missing.";
const char* kInvalidThemeTints =
"Invalid value for theme images - tints must be decimal numbers.";
+const char* kInvalidToolstrip =
+ "Invalid value for 'toolstrips[*]'";
+const char* kInvalidToolstrips =
+ "Invalid value for 'toolstrips'.";
const char* kInvalidUpdateURL =
"Invalid value for update url: '[*]'.";
-const char* kInvalidWebURLs =
- "Invalid value for 'app.urls'.";
+const char* kInvalidVersion =
+ "Required value 'version' is missing or invalid. It must be between 1-4 "
+ "dot-separated integers each between 0 and 65536.";
const char* kInvalidWebURL =
"Invalid value for 'app.urls[*]'.";
-const char* kInvalidDefaultLocale =
- "Invalid value for default locale - locale name must be a string.";
-const char* kOneUISurfaceOnly =
- "An extension cannot have both a page action and a browser action.";
-const char* kThemesCannotContainExtensions =
- "A theme cannot contain extensions code.";
+const char* kInvalidWebURLs =
+ "Invalid value for 'app.urls'.";
+const char* kInvalidZipHash =
+ "Required key 'zip_hash' is missing or invalid.";
const char* kLaunchPathAndURLAreExclusive =
"The 'app.launch.local_path' and 'launch.web_url' keys cannot both be set.";
const char* kLaunchURLRequired =
"Either 'app.launch.local_path' or 'app.launch.web_url' is required.";
+const char* kLocalesMessagesFileMissing =
+ "Messages file is missing for locale.";
const char* kLocalesNoDefaultLocaleSpecified =
"Localization used, but default_locale wasn't specified in the manifest.";
const char* kLocalesNoDefaultMessages =
@@ -243,20 +249,23 @@ const char* kLocalesNoValidLocaleNamesListed =
"No valid locale name could be found in _locales directory.";
const char* kLocalesTreeMissing =
"Default locale was specified, but _locales subtree is missing.";
-const char* kLocalesMessagesFileMissing =
- "Messages file is missing for locale.";
-const char* kInvalidOptionsPage =
- "Invalid value for 'options_page'.";
-const char* kReservedMessageFound =
- "Reserved key * found in message catalog.";
-const char* kCannotAccessPage = "Cannot access contents of url \"*\". "
- "Extension manifest must request permission to access this host.";
-const char* kCannotScriptGallery = "The extensions gallery cannot be scripted.";
-const char* kInvalidOmniboxKeyword =
- "Invalid value for 'omnibox_keyword'.";
+const char* kManifestParseError =
+ "Manifest is not valid JSON.";
+const char* kManifestUnreadable =
+ "Manifest file is missing or unreadable.";
+const char* kMissingFile =
+ "At least one js or css file is required for 'content_scripts[*]'.";
+const char* kMultipleOverrides =
+ "An extension cannot override more than one page.";
const char* kOmniboxExperimental =
"You must request the 'experimental' permission in order to use the"
" omnibox API.";
+const char* kOneUISurfaceOnly =
+ "An extension cannot have both a page action and a browser action.";
+const char* kReservedMessageFound =
+ "Reserved key * found in message catalog.";
+const char* kThemesCannotContainExtensions =
+ "A theme cannot contain extensions code.";
} // namespace extension_manifest_errors
namespace extension_urls {
diff --git a/chrome/common/extensions/extension_constants.h b/chrome/common/extensions/extension_constants.h
index 96cb848..4cd9779 100644
--- a/chrome/common/extensions/extension_constants.h
+++ b/chrome/common/extensions/extension_constants.h
@@ -13,7 +13,6 @@ namespace extension_manifest_keys {
extern const wchar_t* kBackground;
extern const wchar_t* kBrowserAction;
extern const wchar_t* kBrowseURLs;
- extern const wchar_t* kMinimumChromeVersion;
extern const wchar_t* kChromeURLOverrides;
extern const wchar_t* kContentScripts;
extern const wchar_t* kConvertedFromUserScript;
@@ -21,85 +20,92 @@ namespace extension_manifest_keys {
extern const wchar_t* kCurrentLocale;
extern const wchar_t* kDefaultLocale;
extern const wchar_t* kDescription;
+ extern const wchar_t* kDevToolsPage;
extern const wchar_t* kExcludeGlobs;
extern const wchar_t* kIcons;
extern const wchar_t* kIncludeGlobs;
+ extern const wchar_t* kJs;
extern const wchar_t* kLaunch;
extern const wchar_t* kLaunchContainer;
extern const wchar_t* kLaunchFullscreen;
extern const wchar_t* kLaunchHeight;
extern const wchar_t* kLaunchLocalPath;
- extern const wchar_t* kLaunchWidth;
extern const wchar_t* kLaunchWebURL;
- extern const wchar_t* kJs;
+ extern const wchar_t* kLaunchWidth;
extern const wchar_t* kMatches;
+ extern const wchar_t* kMinimumChromeVersion;
extern const wchar_t* kName;
extern const wchar_t* kOmniboxKeyword;
- extern const wchar_t* kPageActionId;
+ extern const wchar_t* kOptionsPage;
extern const wchar_t* kPageAction;
- extern const wchar_t* kPageActions;
- extern const wchar_t* kPageActionIcons;
extern const wchar_t* kPageActionDefaultIcon;
extern const wchar_t* kPageActionDefaultPopup;
extern const wchar_t* kPageActionDefaultTitle;
+ extern const wchar_t* kPageActionIcons;
+ extern const wchar_t* kPageActionId;
extern const wchar_t* kPageActionPopup;
extern const wchar_t* kPageActionPopupHeight;
extern const wchar_t* kPageActionPopupPath;
+ extern const wchar_t* kPageActions;
extern const wchar_t* kPermissions;
extern const wchar_t* kPlugins;
extern const wchar_t* kPluginsPath;
extern const wchar_t* kPluginsPublic;
extern const wchar_t* kPublicKey;
- extern const wchar_t* kSignature;
extern const wchar_t* kRunAt;
+ extern const wchar_t* kSignature;
extern const wchar_t* kTheme;
- extern const wchar_t* kThemeImages;
extern const wchar_t* kThemeColors;
- extern const wchar_t* kThemeTints;
extern const wchar_t* kThemeDisplayProperties;
+ extern const wchar_t* kThemeImages;
+ extern const wchar_t* kThemeTints;
extern const wchar_t* kToolstripMoleHeight;
extern const wchar_t* kToolstripMolePath;
extern const wchar_t* kToolstripPath;
extern const wchar_t* kToolstrips;
extern const wchar_t* kType;
- extern const wchar_t* kVersion;
extern const wchar_t* kUpdateURL;
- extern const wchar_t* kOptionsPage;
+ extern const wchar_t* kVersion;
extern const wchar_t* kWebLaunchUrl;
extern const wchar_t* kWebURLs;
} // namespace extension_manifest_keys
// Some values expected in manifests.
namespace extension_manifest_values {
- extern const char* kRunAtDocumentStart;
- extern const char* kRunAtDocumentEnd;
- extern const char* kRunAtDocumentIdle;
- extern const char* kPageActionTypeTab;
- extern const char* kPageActionTypePermanent;
extern const char* kLaunchContainerPanel;
extern const char* kLaunchContainerTab;
extern const char* kLaunchContainerWindow;
+ extern const char* kPageActionTypePermanent;
+ extern const char* kPageActionTypeTab;
+ extern const char* kRunAtDocumentEnd;
+ extern const char* kRunAtDocumentIdle;
+ extern const char* kRunAtDocumentStart;
} // namespace extension_manifest_values
// Error messages returned from Extension::InitFromValue().
namespace extension_manifest_errors {
extern const char* kAppsNotEnabled;
+ extern const char* kCannotAccessPage;
+ extern const char* kCannotScriptGallery;
extern const char* kChromeVersionTooLow;
+ extern const char* kDevToolsExperimental;
extern const char* kInvalidAllFrames;
extern const char* kInvalidBackground;
+ extern const char* kInvalidBrowserAction;
extern const char* kInvalidBrowseURL;
extern const char* kInvalidBrowseURLs;
- extern const char* kInvalidBrowserAction;
extern const char* kInvalidChromeURLOverrides;
extern const char* kInvalidContentScript;
extern const char* kInvalidContentScriptsList;
extern const char* kInvalidCss;
extern const char* kInvalidCssList;
+ extern const char* kInvalidDefaultLocale;
extern const char* kInvalidDescription;
- extern const char* kInvalidIcons;
- extern const char* kInvalidIconPath;
- extern const char* kInvalidGlobList;
+ extern const char* kInvalidDevToolsPage;
extern const char* kInvalidGlob;
+ extern const char* kInvalidGlobList;
+ extern const char* kInvalidIconPath;
+ extern const char* kInvalidIcons;
extern const char* kInvalidJs;
extern const char* kInvalidJsList;
extern const char* kInvalidKey;
@@ -112,64 +118,61 @@ namespace extension_manifest_errors {
extern const char* kInvalidLaunchWidth;
extern const char* kInvalidLaunchWidthContainer;
extern const char* kInvalidManifest;
- extern const char* kInvalidMatchCount;
extern const char* kInvalidMatch;
+ extern const char* kInvalidMatchCount;
extern const char* kInvalidMatches;
extern const char* kInvalidMinimumChromeVersion;
extern const char* kInvalidName;
- extern const char* kInvalidPlugins;
- extern const char* kInvalidPluginsPath;
- extern const char* kInvalidPluginsPublic;
- extern const char* kInvalidRunAt;
- extern const char* kInvalidSignature;
- extern const char* kInvalidToolstrip;
- extern const char* kInvalidToolstrips;
- extern const char* kInvalidVersion;
+ extern const char* kInvalidOmniboxKeyword;
+ extern const char* kInvalidOptionsPage;
extern const char* kInvalidPageAction;
- extern const char* kInvalidPageActionName;
- extern const char* kInvalidPageActionsList;
- extern const char* kInvalidPageActionsListSize;
+ extern const char* kInvalidPageActionDefaultTitle;
extern const char* kInvalidPageActionIconPath;
extern const char* kInvalidPageActionId;
- extern const char* kInvalidPageActionDefaultTitle;
+ extern const char* kInvalidPageActionName;
extern const char* kInvalidPageActionOldAndNewKeys;
extern const char* kInvalidPageActionPopup;
extern const char* kInvalidPageActionPopupHeight;
extern const char* kInvalidPageActionPopupPath;
+ extern const char* kInvalidPageActionsList;
+ extern const char* kInvalidPageActionsListSize;
extern const char* kInvalidPageActionTypeValue;
- extern const char* kInvalidPermissions;
extern const char* kInvalidPermission;
+ extern const char* kInvalidPermissions;
extern const char* kInvalidPermissionScheme;
- extern const char* kInvalidZipHash;
+ extern const char* kInvalidPlugins;
+ extern const char* kInvalidPluginsPath;
+ extern const char* kInvalidPluginsPublic;
+ extern const char* kInvalidRunAt;
+ extern const char* kInvalidSignature;
extern const char* kInvalidTheme;
- extern const char* kInvalidThemeImagesMissing;
- extern const char* kInvalidThemeImages;
extern const char* kInvalidThemeColors;
+ extern const char* kInvalidThemeImages;
+ extern const char* kInvalidThemeImagesMissing;
extern const char* kInvalidThemeTints;
- extern const char* kInvalidWebURLs;
- extern const char* kInvalidWebURL;
- extern const char* kOneUISurfaceOnly;
- extern const char* kThemesCannotContainExtensions;
- extern const char* kManifestParseError;
- extern const char* kManifestUnreadable;
- extern const char* kMissingFile;
- extern const char* kMultipleOverrides;
+ extern const char* kInvalidToolstrip;
+ extern const char* kInvalidToolstrips;
extern const char* kInvalidUpdateURL;
- extern const char* kInvalidDefaultLocale;
+ extern const char* kInvalidVersion;
+ extern const char* kInvalidWebURL;
+ extern const char* kInvalidWebURLs;
+ extern const char* kInvalidZipHash;
extern const char* kLaunchPathAndURLAreExclusive;
extern const char* kLaunchURLRequired;
+ extern const char* kLocalesMessagesFileMissing;
extern const char* kLocalesNoDefaultLocaleSpecified;
extern const char* kLocalesNoDefaultMessages;
extern const char* kLocalesNoValidLocaleNamesListed;
extern const char* kLocalesTreeMissing;
- extern const char* kLocalesMessagesFileMissing;
- extern const char* kInvalidOptionsPage;
+ extern const char* kManifestParseError;
+ extern const char* kManifestUnreadable;
+ extern const char* kMissingFile;
+ extern const char* kMultipleOverrides;
+ extern const char* kOmniboxExperimental;
+ extern const char* kOneUISurfaceOnly;
extern const char* kReservedMessageFound;
- extern const char* kCannotAccessPage;
- extern const char* kCannotScriptGallery;
+ extern const char* kThemesCannotContainExtensions;
extern const char* kWebContentMustBeEnabled;
- extern const char* kInvalidOmniboxKeyword;
- extern const char* kOmniboxExperimental;
} // namespace extension_manifest_errors
namespace extension_urls {
diff --git a/chrome/common/extensions/extension_manifests_unittest.cc b/chrome/common/extensions/extension_manifests_unittest.cc
index 8e6402c..36c4b89 100644
--- a/chrome/common/extensions/extension_manifests_unittest.cc
+++ b/chrome/common/extensions/extension_manifests_unittest.cc
@@ -2,12 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "base/command_line.h"
#include "base/file_path.h"
#include "base/file_util.h"
#include "base/path_service.h"
#include "base/scoped_ptr.h"
#include "base/string_util.h"
#include "chrome/common/chrome_paths.h"
+#include "chrome/common/chrome_switches.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/extension_error_utils.h"
@@ -244,3 +246,20 @@ TEST_F(ManifestTest, ChromeURLContentScriptInvalid) {
LoadAndExpectError("content_script_chrome_url_invalid.json",
errors::kInvalidMatch);
}
+
+TEST_F(ManifestTest, DevToolsExtensions) {
+ LoadAndExpectError("devtools_extension_no_permissions.json",
+ errors::kDevToolsExperimental);
+ LoadAndExpectError("devtools_extension_url_invalid_type.json",
+ errors::kInvalidDevToolsPage);
+
+ CommandLine old_command_line = *CommandLine::ForCurrentProcess();
+ CommandLine::ForCurrentProcess()->AppendSwitch(
+ switches::kEnableExperimentalExtensionApis);
+
+ scoped_ptr<Extension> extension;
+ extension.reset(LoadAndExpectSuccess("devtools_extension.json"));
+ EXPECT_EQ(extension->url().spec() + "devtools.html",
+ extension->devtools_url().spec());
+ *CommandLine::ForCurrentProcess() = old_command_line;
+}