Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4939)

Unified Diff: chrome/common/extensions/extension.cc

Issue 6321006: Add "sidebar" section to extension manifest:... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/common/extensions/extension.cc
===================================================================
--- chrome/common/extensions/extension.cc (revision 71703)
+++ chrome/common/extensions/extension.cc (working copy)
@@ -18,6 +18,7 @@
#include "base/singleton.h"
#include "base/stl_util-inl.h"
#include "base/third_party/nss/blapi.h"
+#include "base/string16.h"
#include "base/string_number_conversions.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
@@ -30,6 +31,8 @@
#include "chrome/common/extensions/extension_error_utils.h"
#include "chrome/common/extensions/extension_l10n_util.h"
#include "chrome/common/extensions/extension_resource.h"
+#include "chrome/common/extensions/extension_sidebar_defaults.h"
+#include "chrome/common/extensions/extension_sidebar_utils.h"
#include "chrome/common/extensions/user_script.h"
#include "chrome/common/url_constants.h"
#include "googleurl/src/url_util.h"
@@ -194,6 +197,7 @@
const int Extension::kPageActionIconMaxSize = 19;
const int Extension::kBrowserActionIconMaxSize = 19;
+const int Extension::kSidebarIconMaxSize = 16;
// Explicit permissions -- permission declaration required.
const char Extension::kBackgroundPermission[] = "background";
@@ -804,6 +808,51 @@
return result.release();
}
+ExtensionSidebarDefaults* Extension::LoadExtensionSidebarDefaults(
+ const DictionaryValue* extension_sidebar, std::string* error) {
+ scoped_ptr<ExtensionSidebarDefaults> result(new ExtensionSidebarDefaults());
+
+ std::string default_icon;
+ // Read sidebar's |default_icon| (optional).
+ if (extension_sidebar->HasKey(keys::kSidebarDefaultIcon)) {
+ if (!extension_sidebar->GetString(keys::kSidebarDefaultIcon,
+ &default_icon) ||
+ default_icon.empty()) {
+ *error = errors::kInvalidSidebarDefaultIconPath;
+ return NULL;
+ }
+ result->set_default_icon_path(default_icon);
+ }
+
+ // Read sidebar's |default_title| (optional).
+ string16 default_title;
+ if (extension_sidebar->HasKey(keys::kSidebarDefaultTitle)) {
+ if (!extension_sidebar->GetString(keys::kSidebarDefaultTitle,
+ &default_title)) {
+ *error = errors::kInvalidSidebarDefaultTitle;
+ return NULL;
+ }
+ }
+ result->set_default_title(default_title);
+
+ // Read sidebar's |default_url| (optional).
+ std::string default_url;
+ if (extension_sidebar->HasKey(keys::kSidebarDefaultUrl)) {
+ if (!extension_sidebar->GetString(keys::kSidebarDefaultUrl, &default_url) ||
+ default_url.empty()) {
+ *error = errors::kInvalidSidebarDefaultUrl;
+ return NULL;
+ }
+ GURL resolved_url = extension_sidebar_utils::ResolveAndVerifyUrl(
+ default_url, this, error);
+ if (!resolved_url.is_valid())
+ return NULL;
+ result->set_default_url(resolved_url);
+ }
+
+ return result.release();
+}
+
bool Extension::ContainsNonThemeKeys(const DictionaryValue& source) const {
for (DictionaryValue::key_iterator key = source.begin_keys();
key != source.end_keys(); ++key) {
@@ -1927,6 +1976,23 @@
InitEffectiveHostPermissions();
+ // Initialize sidebar action (optional). It has to be done after host
+ // permissions are initialized to verify default sidebar url.
+ if (source.HasKey(keys::kSidebar)) {
+ DictionaryValue* sidebar_value;
+ if (!source.GetDictionary(keys::kSidebar, &sidebar_value)) {
+ *error = errors::kInvalidSidebar;
+ return false;
+ }
+ if (!HasApiPermission(Extension::kExperimentalPermission)) {
+ *error = errors::kSidebarExperimental;
+ return false;
+ }
+ sidebar_defaults_.reset(LoadExtensionSidebarDefaults(sidebar_value, error));
+ if (!sidebar_defaults_.get())
+ return false; // Failed to parse sidebar definition.
+ }
+
// Although |source| is passed in as a const, it's still possible to modify
// it. This is dangerous since the utility process re-uses |source| after
// it calls InitFromValue, passing it up to the browser process which calls

Powered by Google App Engine
This is Rietveld 408576698