diff options
author | loislo@chromium.org <loislo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-06 11:44:57 +0000 |
---|---|---|
committer | loislo@chromium.org <loislo@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-06 11:44:57 +0000 |
commit | c082105e638a213cae0ea99b2508e0810a19c644 (patch) | |
tree | 11f0ccca1678354d38f8d2bcee05caee6e2378f4 /chrome/common | |
parent | a2f3b6f16f1bdea5e95be1d6e1d0e1b3b94a5df3 (diff) | |
download | chromium_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.cc | 14 | ||||
-rw-r--r-- | chrome/common/extensions/extension.h | 4 | ||||
-rw-r--r-- | chrome/common/extensions/extension_constants.cc | 149 | ||||
-rw-r--r-- | chrome/common/extensions/extension_constants.h | 107 | ||||
-rw-r--r-- | chrome/common/extensions/extension_manifests_unittest.cc | 19 |
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; +} |