summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authoraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-21 05:36:49 +0000
committeraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-21 05:36:49 +0000
commitd5cef1bb6d1edc220740a4f42888bebfdcc950bf (patch)
treec6328af81908c8de88e7b34e88e92d22f598bbdb /chrome
parent89ceba9a484f853964e5504f14927a8cf7e72449 (diff)
downloadchromium_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.cc26
-rw-r--r--chrome/browser/extensions/extension.h9
-rwxr-xr-xchrome/browser/extensions/extension_view_unittest.cc2
-rw-r--r--chrome/browser/extensions/extensions_service_unittest.cc4
-rw-r--r--chrome/browser/views/bookmark_bar_view.cc9
-rw-r--r--chrome/test/data/extensions/good/extension1/1/manifest.json5
-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.html21
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>