diff options
author | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-21 05:36:49 +0000 |
---|---|---|
committer | aa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-21 05:36:49 +0000 |
commit | d5cef1bb6d1edc220740a4f42888bebfdcc950bf (patch) | |
tree | c6328af81908c8de88e7b34e88e92d22f598bbdb /chrome | |
parent | 89ceba9a484f853964e5504f14927a8cf7e72449 (diff) | |
download | chromium_src-d5cef1bb6d1edc220740a4f42888bebfdcc950bf.zip chromium_src-d5cef1bb6d1edc220740a4f42888bebfdcc950bf.tar.gz chromium_src-d5cef1bb6d1edc220740a4f42888bebfdcc950bf.tar.bz2 |
Allow multiple toolstrips in an extension.
Review URL: http://codereview.chromium.org/42439
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@12244 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/extensions/extension.cc | 26 | ||||
-rw-r--r-- | chrome/browser/extensions/extension.h | 9 | ||||
-rwxr-xr-x | chrome/browser/extensions/extension_view_unittest.cc | 2 | ||||
-rw-r--r-- | chrome/browser/extensions/extensions_service_unittest.cc | 4 | ||||
-rw-r--r-- | chrome/browser/views/bookmark_bar_view.cc | 9 | ||||
-rw-r--r-- | chrome/test/data/extensions/good/extension1/1/manifest.json | 5 | ||||
-rw-r--r-- | chrome/test/data/extensions/good/extension1/1/toolstrip1.html (renamed from chrome/test/data/extensions/good/extension1/1/toolstrip.html) | 0 | ||||
-rw-r--r-- | chrome/test/data/extensions/good/extension1/1/toolstrip2.html | 21 |
8 files changed, 59 insertions, 17 deletions
diff --git a/chrome/browser/extensions/extension.cc b/chrome/browser/extensions/extension.cc index bb5ec23..794b943 100644 --- a/chrome/browser/extensions/extension.cc +++ b/chrome/browser/extensions/extension.cc @@ -27,7 +27,7 @@ const wchar_t* Extension::kVersionKey = L"version"; const wchar_t* Extension::kZipHashKey = L"zip_hash"; const wchar_t* Extension::kPluginsDirKey = L"plugins_dir"; const wchar_t* Extension::kThemeKey = L"theme"; -const wchar_t* Extension::kToolstripKey = L"toolstrip"; +const wchar_t* Extension::kToolstripsKey = L"toolstrips"; const char* Extension::kRunAtDocumentStartValue = "document_start"; const char* Extension::kRunAtDocumentEndValue = "document_end"; @@ -70,7 +70,9 @@ const char* Extension::kInvalidPluginsDirError = const char* Extension::kInvalidRunAtError = "Invalid value for 'content_scripts[*].run_at'."; const char* Extension::kInvalidToolstripError = - "Invalid value for 'toolstrip'."; + "Invalid value for 'toolstrips[*]'"; +const char* Extension::kInvalidToolstripsError = + "Invalid value for 'toolstrips'."; const char* Extension::kInvalidVersionError = "Required value 'version' is missing or invalid."; const char* Extension::kInvalidZipHashError = @@ -388,14 +390,22 @@ bool Extension::InitFromValue(const DictionaryValue& source, plugins_dir_ = path_.AppendASCII(plugins_dir); } - // Initialize toolstrip (optional). - if (source.HasKey(kToolstripKey)) { - std::string toolstrip_path; - if (!source.GetString(kToolstripKey, &toolstrip_path)) { - *error = kInvalidToolstripError; + // Initialize toolstrips (optional). + if (source.HasKey(kToolstripsKey)) { + ListValue* list_value; + if (!source.GetList(kToolstripsKey, &list_value)) { + *error = kInvalidToolstripsError; return false; } - toolstrip_url_ = GetResourceURL(extension_url_, toolstrip_path); + + for (size_t i = 0; i < list_value->GetSize(); ++i) { + std::string toolstrip; + if (!list_value->GetString(i, &toolstrip)) { + *error = FormatErrorMessage(kInvalidToolstripError, IntToString(i)); + return false; + } + toolstrips_.push_back(toolstrip); + } } if (source.HasKey(kThemeKey)) { diff --git a/chrome/browser/extensions/extension.h b/chrome/browser/extensions/extension.h index 7a7d8ae..fadea2d 100644 --- a/chrome/browser/extensions/extension.h +++ b/chrome/browser/extensions/extension.h @@ -43,7 +43,7 @@ class Extension { static const wchar_t* kZipHashKey; static const wchar_t* kPluginsDirKey; static const wchar_t* kThemeKey; - static const wchar_t* kToolstripKey; + static const wchar_t* kToolstripsKey; // Some values expected in manifests. static const char* kRunAtDocumentStartValue; @@ -67,6 +67,7 @@ class Extension { static const char* kInvalidPluginsDirError; static const char* kInvalidRunAtError; static const char* kInvalidToolstripError; + static const char* kInvalidToolstripsError; static const char* kInvalidVersionError; static const char* kInvalidZipHashError; static const char* kMissingFileError; @@ -116,7 +117,7 @@ class Extension { const std::string& description() const { return description_; } const UserScriptList& content_scripts() const { return content_scripts_; } const FilePath& plugins_dir() const { return plugins_dir_; } - const GURL& toolstrip_url() const { return toolstrip_url_; } + const std::vector<std::string>& toolstrips() const { return toolstrips_; } private: // Helper method that loads a UserScript object from a @@ -155,8 +156,8 @@ class Extension { // contains. FilePath plugins_dir_; - // Optional URL of an HTML file to be displayed in the toolbar. - GURL toolstrip_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 diff --git a/chrome/browser/extensions/extension_view_unittest.cc b/chrome/browser/extensions/extension_view_unittest.cc index b446920..c23cdf7 100755 --- a/chrome/browser/extensions/extension_view_unittest.cc +++ b/chrome/browser/extensions/extension_view_unittest.cc @@ -133,7 +133,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionViewTest, Index) { // Now wait for it to load, and grab a pointer to it. Extension* extension = observer.WaitForExtension(); ASSERT_TRUE(extension); - GURL url = Extension::GetResourceURL(extension->url(), "toolstrip.html"); + GURL url = Extension::GetResourceURL(extension->url(), "toolstrip1.html"); // Start the extension process and wait for it to show a javascript alert. MockExtensionView view(url, profile); diff --git a/chrome/browser/extensions/extensions_service_unittest.cc b/chrome/browser/extensions/extensions_service_unittest.cc index c253848..b3328d3 100644 --- a/chrome/browser/extensions/extensions_service_unittest.cc +++ b/chrome/browser/extensions/extensions_service_unittest.cc @@ -169,6 +169,7 @@ TEST_F(ExtensionsServiceTest, LoadAllExtensionsFromDirectorySuccess) { Extension* extension = frontend->extensions()->at(0); const UserScriptList& scripts = extension->content_scripts(); + const std::vector<std::string>& toolstrips = extension->toolstrips(); ASSERT_EQ(2u, scripts.size()); EXPECT_EQ(2u, scripts[0].url_patterns().size()); EXPECT_EQ("http://*.google.com/*", @@ -184,6 +185,9 @@ TEST_F(ExtensionsServiceTest, LoadAllExtensionsFromDirectorySuccess) { EXPECT_EQ("http://*.news.com/*", scripts[1].url_patterns()[0].GetAsString()); EXPECT_EQ(extension->path().AppendASCII("js_files").AppendASCII("script3.js") .value(), scripts[1].js_scripts()[0].path().value()); + ASSERT_EQ(2u, toolstrips.size()); + EXPECT_EQ("toolstrip1.html", toolstrips[0]); + EXPECT_EQ("toolstrip2.html", toolstrips[1]); EXPECT_EQ(std::string("10123456789abcdef0123456789abcdef0123456"), frontend->extensions()->at(1)->id()); diff --git a/chrome/browser/views/bookmark_bar_view.cc b/chrome/browser/views/bookmark_bar_view.cc index 8cdfc26..ae6a0de 100644 --- a/chrome/browser/views/bookmark_bar_view.cc +++ b/chrome/browser/views/bookmark_bar_view.cc @@ -1369,9 +1369,12 @@ bool BookmarkBarView::AddExtensionToolstrips(const ExtensionList* extensions) { bool added_toolstrip = false; for (ExtensionList::const_iterator extension = extensions->begin(); extension != extensions->end(); ++extension) { - if (!(*extension)->toolstrip_url().is_empty()) { - ExtensionToolstrip* view = - new ExtensionToolstrip((*extension)->toolstrip_url(), profile_); + for (std::vector<std::string>::const_iterator toolstrip = + (*extension)->toolstrips().begin(); + toolstrip != (*extension)->toolstrips().end(); ++toolstrip) { + ExtensionToolstrip* view = + new ExtensionToolstrip((*extension)->GetResourceURL(*toolstrip), + profile_); int index = GetBookmarkButtonCount() + num_extension_toolstrips_; AddChildView(index, view); added_toolstrip = true; diff --git a/chrome/test/data/extensions/good/extension1/1/manifest.json b/chrome/test/data/extensions/good/extension1/1/manifest.json index 16f7d6b..63d9789 100644 --- a/chrome/test/data/extensions/good/extension1/1/manifest.json +++ b/chrome/test/data/extensions/good/extension1/1/manifest.json @@ -4,7 +4,10 @@ "version": "1.0.0.0", "name": "My extension 1", "description": "The first extension that I made.", - "toolstrip": "toolstrip.html", + "toolstrips": [ + "toolstrip1.html", + "toolstrip2.html" + ], "content_scripts": [ { "matches": ["http://*.google.com/*", "https://*.google.com/*"], diff --git a/chrome/test/data/extensions/good/extension1/1/toolstrip.html b/chrome/test/data/extensions/good/extension1/1/toolstrip1.html index 0171859..0171859 100644 --- a/chrome/test/data/extensions/good/extension1/1/toolstrip.html +++ b/chrome/test/data/extensions/good/extension1/1/toolstrip1.html diff --git a/chrome/test/data/extensions/good/extension1/1/toolstrip2.html b/chrome/test/data/extensions/good/extension1/1/toolstrip2.html new file mode 100644 index 0000000..0171859 --- /dev/null +++ b/chrome/test/data/extensions/good/extension1/1/toolstrip2.html @@ -0,0 +1,21 @@ +<style> +body { + overflow: hidden; + margin: 0 0 0 0; +} + +/* TODO: put the background style into body when + https://bugs.webkit.org/show_bug.cgi?id=18445 is fixed. */ +.content { + background: -webkit-gradient(linear, left top, left bottom, from(rgb(222, 234, 248)), to(rgb(237, 244, 252))); + padding: 1; +} +</style> +<body> +<div class="content"> +<script> + alert(window.extension.getTestString()); +</script> +<button onclick="alert('clicked')">HTML button</button> +</div> +</body> |