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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/common/extensions/extension.h ('k') | chrome/common/extensions/extension_constants.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/common/extensions/extension.h" 5 #include "chrome/common/extensions/extension.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "app/l10n_util.h" 9 #include "app/l10n_util.h"
10 #include "base/base64.h" 10 #include "base/base64.h"
11 #include "base/basictypes.h" 11 #include "base/basictypes.h"
12 #include "base/command_line.h" 12 #include "base/command_line.h"
13 #include "base/file_path.h" 13 #include "base/file_path.h"
14 #include "base/file_util.h" 14 #include "base/file_util.h"
15 #include "base/i18n/rtl.h" 15 #include "base/i18n/rtl.h"
16 #include "base/logging.h" 16 #include "base/logging.h"
17 #include "base/sha2.h" 17 #include "base/sha2.h"
18 #include "base/singleton.h" 18 #include "base/singleton.h"
19 #include "base/stl_util-inl.h" 19 #include "base/stl_util-inl.h"
20 #include "base/third_party/nss/blapi.h" 20 #include "base/third_party/nss/blapi.h"
21 #include "base/string16.h"
21 #include "base/string_number_conversions.h" 22 #include "base/string_number_conversions.h"
22 #include "base/utf_string_conversions.h" 23 #include "base/utf_string_conversions.h"
23 #include "base/values.h" 24 #include "base/values.h"
24 #include "base/version.h" 25 #include "base/version.h"
25 #include "chrome/common/chrome_constants.h" 26 #include "chrome/common/chrome_constants.h"
26 #include "chrome/common/chrome_switches.h" 27 #include "chrome/common/chrome_switches.h"
27 #include "chrome/common/chrome_version_info.h" 28 #include "chrome/common/chrome_version_info.h"
28 #include "chrome/common/extensions/extension_action.h" 29 #include "chrome/common/extensions/extension_action.h"
29 #include "chrome/common/extensions/extension_constants.h" 30 #include "chrome/common/extensions/extension_constants.h"
30 #include "chrome/common/extensions/extension_error_utils.h" 31 #include "chrome/common/extensions/extension_error_utils.h"
31 #include "chrome/common/extensions/extension_l10n_util.h" 32 #include "chrome/common/extensions/extension_l10n_util.h"
32 #include "chrome/common/extensions/extension_resource.h" 33 #include "chrome/common/extensions/extension_resource.h"
34 #include "chrome/common/extensions/extension_sidebar_defaults.h"
35 #include "chrome/common/extensions/extension_sidebar_utils.h"
33 #include "chrome/common/extensions/user_script.h" 36 #include "chrome/common/extensions/user_script.h"
34 #include "chrome/common/url_constants.h" 37 #include "chrome/common/url_constants.h"
35 #include "googleurl/src/url_util.h" 38 #include "googleurl/src/url_util.h"
36 #include "grit/chromium_strings.h" 39 #include "grit/chromium_strings.h"
37 #include "grit/generated_resources.h" 40 #include "grit/generated_resources.h"
38 #include "net/base/registry_controlled_domain.h" 41 #include "net/base/registry_controlled_domain.h"
39 #include "third_party/skia/include/core/SkBitmap.h" 42 #include "third_party/skia/include/core/SkBitmap.h"
40 #include "webkit/glue/image_decoder.h" 43 #include "webkit/glue/image_decoder.h"
41 44
42 namespace keys = extension_manifest_keys; 45 namespace keys = extension_manifest_keys;
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 const int Extension::kIconSizes[] = { 190 const int Extension::kIconSizes[] = {
188 EXTENSION_ICON_LARGE, 191 EXTENSION_ICON_LARGE,
189 EXTENSION_ICON_MEDIUM, 192 EXTENSION_ICON_MEDIUM,
190 EXTENSION_ICON_SMALL, 193 EXTENSION_ICON_SMALL,
191 EXTENSION_ICON_SMALLISH, 194 EXTENSION_ICON_SMALLISH,
192 EXTENSION_ICON_BITTY 195 EXTENSION_ICON_BITTY
193 }; 196 };
194 197
195 const int Extension::kPageActionIconMaxSize = 19; 198 const int Extension::kPageActionIconMaxSize = 19;
196 const int Extension::kBrowserActionIconMaxSize = 19; 199 const int Extension::kBrowserActionIconMaxSize = 19;
200 const int Extension::kSidebarIconMaxSize = 16;
197 201
198 // Explicit permissions -- permission declaration required. 202 // Explicit permissions -- permission declaration required.
199 const char Extension::kBackgroundPermission[] = "background"; 203 const char Extension::kBackgroundPermission[] = "background";
200 const char Extension::kContextMenusPermission[] = "contextMenus"; 204 const char Extension::kContextMenusPermission[] = "contextMenus";
201 const char Extension::kBookmarkPermission[] = "bookmarks"; 205 const char Extension::kBookmarkPermission[] = "bookmarks";
202 const char Extension::kCookiePermission[] = "cookies"; 206 const char Extension::kCookiePermission[] = "cookies";
203 const char Extension::kExperimentalPermission[] = "experimental"; 207 const char Extension::kExperimentalPermission[] = "experimental";
204 const char Extension::kGeolocationPermission[] = "geolocation"; 208 const char Extension::kGeolocationPermission[] = "geolocation";
205 const char Extension::kHistoryPermission[] = "history"; 209 const char Extension::kHistoryPermission[] = "history";
206 const char Extension::kIdlePermission[] = "idle"; 210 const char Extension::kIdlePermission[] = "idle";
(...skipping 590 matching lines...) Expand 10 before | Expand all | Expand 10 after
797 result->SetPopupUrl(ExtensionAction::kDefaultTabId, url); 801 result->SetPopupUrl(ExtensionAction::kDefaultTabId, url);
798 } else { 802 } else {
799 DCHECK(!result->HasPopup(ExtensionAction::kDefaultTabId)) 803 DCHECK(!result->HasPopup(ExtensionAction::kDefaultTabId))
800 << "Shouldn't be posible for the popup to be set."; 804 << "Shouldn't be posible for the popup to be set.";
801 } 805 }
802 } 806 }
803 807
804 return result.release(); 808 return result.release();
805 } 809 }
806 810
811 ExtensionSidebarDefaults* Extension::LoadExtensionSidebarDefaults(
812 const DictionaryValue* extension_sidebar, std::string* error) {
813 scoped_ptr<ExtensionSidebarDefaults> result(new ExtensionSidebarDefaults());
814
815 std::string default_icon;
816 // Read sidebar's |default_icon| (optional).
817 if (extension_sidebar->HasKey(keys::kSidebarDefaultIcon)) {
818 if (!extension_sidebar->GetString(keys::kSidebarDefaultIcon,
819 &default_icon) ||
820 default_icon.empty()) {
821 *error = errors::kInvalidSidebarDefaultIconPath;
822 return NULL;
823 }
824 result->set_default_icon_path(default_icon);
825 }
826
827 // Read sidebar's |default_title| (optional).
828 string16 default_title;
829 if (extension_sidebar->HasKey(keys::kSidebarDefaultTitle)) {
830 if (!extension_sidebar->GetString(keys::kSidebarDefaultTitle,
831 &default_title)) {
832 *error = errors::kInvalidSidebarDefaultTitle;
833 return NULL;
834 }
835 }
836 result->set_default_title(default_title);
837
838 // Read sidebar's |default_url| (optional).
839 std::string default_url;
840 if (extension_sidebar->HasKey(keys::kSidebarDefaultUrl)) {
841 if (!extension_sidebar->GetString(keys::kSidebarDefaultUrl, &default_url) ||
842 default_url.empty()) {
843 *error = errors::kInvalidSidebarDefaultUrl;
844 return NULL;
845 }
846 GURL resolved_url = extension_sidebar_utils::ResolveAndVerifyUrl(
847 default_url, this, error);
848 if (!resolved_url.is_valid())
849 return NULL;
850 result->set_default_url(resolved_url);
851 }
852
853 return result.release();
854 }
855
807 bool Extension::ContainsNonThemeKeys(const DictionaryValue& source) const { 856 bool Extension::ContainsNonThemeKeys(const DictionaryValue& source) const {
808 for (DictionaryValue::key_iterator key = source.begin_keys(); 857 for (DictionaryValue::key_iterator key = source.begin_keys();
809 key != source.end_keys(); ++key) { 858 key != source.end_keys(); ++key) {
810 if (!IsBaseCrxKey(*key) && *key != keys::kTheme) 859 if (!IsBaseCrxKey(*key) && *key != keys::kTheme)
811 return true; 860 return true;
812 } 861 }
813 return false; 862 return false;
814 } 863 }
815 864
816 bool Extension::LoadIsApp(const DictionaryValue* manifest, 865 bool Extension::LoadIsApp(const DictionaryValue* manifest,
(...skipping 1103 matching lines...) Expand 10 before | Expand all | Expand 10 after
1920 } 1969 }
1921 } 1970 }
1922 1971
1923 if (HasMultipleUISurfaces()) { 1972 if (HasMultipleUISurfaces()) {
1924 *error = errors::kOneUISurfaceOnly; 1973 *error = errors::kOneUISurfaceOnly;
1925 return false; 1974 return false;
1926 } 1975 }
1927 1976
1928 InitEffectiveHostPermissions(); 1977 InitEffectiveHostPermissions();
1929 1978
1979 // Initialize sidebar action (optional). It has to be done after host
1980 // permissions are initialized to verify default sidebar url.
1981 if (source.HasKey(keys::kSidebar)) {
1982 DictionaryValue* sidebar_value;
1983 if (!source.GetDictionary(keys::kSidebar, &sidebar_value)) {
1984 *error = errors::kInvalidSidebar;
1985 return false;
1986 }
1987 if (!HasApiPermission(Extension::kExperimentalPermission)) {
1988 *error = errors::kSidebarExperimental;
1989 return false;
1990 }
1991 sidebar_defaults_.reset(LoadExtensionSidebarDefaults(sidebar_value, error));
1992 if (!sidebar_defaults_.get())
1993 return false; // Failed to parse sidebar definition.
1994 }
1995
1930 // Although |source| is passed in as a const, it's still possible to modify 1996 // Although |source| is passed in as a const, it's still possible to modify
1931 // it. This is dangerous since the utility process re-uses |source| after 1997 // it. This is dangerous since the utility process re-uses |source| after
1932 // it calls InitFromValue, passing it up to the browser process which calls 1998 // it calls InitFromValue, passing it up to the browser process which calls
1933 // InitFromValue again. As a result, we need to make sure that nobody 1999 // InitFromValue again. As a result, we need to make sure that nobody
1934 // accidentally modifies it. 2000 // accidentally modifies it.
1935 DCHECK(source.Equals(manifest_value_.get())); 2001 DCHECK(source.Equals(manifest_value_.get()));
1936 2002
1937 return true; 2003 return true;
1938 } 2004 }
1939 2005
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
2306 2372
2307 UninstalledExtensionInfo::~UninstalledExtensionInfo() {} 2373 UninstalledExtensionInfo::~UninstalledExtensionInfo() {}
2308 2374
2309 2375
2310 UnloadedExtensionInfo::UnloadedExtensionInfo( 2376 UnloadedExtensionInfo::UnloadedExtensionInfo(
2311 const Extension* extension, 2377 const Extension* extension,
2312 Reason reason) 2378 Reason reason)
2313 : reason(reason), 2379 : reason(reason),
2314 already_disabled(false), 2380 already_disabled(false),
2315 extension(extension) {} 2381 extension(extension) {}
OLDNEW
« no previous file with comments | « chrome/common/extensions/extension.h ('k') | chrome/common/extensions/extension_constants.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698