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

Side by Side Diff: chrome/browser/extensions/api/context_menus/context_menus_api_helpers.h

Issue 1055673002: [Extensions API] Remove inline enums (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Latest master Created 5 years, 8 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 // Definition of helper functions for the ContextMenus API. 5 // Definition of helper functions for the ContextMenus API.
6 6
7 #ifndef CHROME_BROWSER_EXTENSIONS_API_CONTEXT_MENUS_CONTEXT_MENUS_API_HELPERS_H_ 7 #ifndef CHROME_BROWSER_EXTENSIONS_API_CONTEXT_MENUS_CONTEXT_MENUS_API_HELPERS_H_
8 #define CHROME_BROWSER_EXTENSIONS_API_CONTEXT_MENUS_CONTEXT_MENUS_API_HELPERS_H_ 8 #define CHROME_BROWSER_EXTENSIONS_API_CONTEXT_MENUS_CONTEXT_MENUS_API_HELPERS_H_
9 9
10 #include "chrome/browser/extensions/menu_manager.h" 10 #include "chrome/browser/extensions/menu_manager.h"
11 #include "chrome/browser/profiles/profile.h" 11 #include "chrome/browser/profiles/profile.h"
12 #include "chrome/common/extensions/api/context_menus.h"
12 #include "extensions/common/error_utils.h" 13 #include "extensions/common/error_utils.h"
13 #include "extensions/common/manifest_handlers/background_info.h" 14 #include "extensions/common/manifest_handlers/background_info.h"
14 15
15 namespace extensions { 16 namespace extensions {
16 namespace context_menus_api_helpers { 17 namespace context_menus_api_helpers {
17 18
18 namespace { 19 namespace {
19 20
20 template <typename PropertyWithEnumT> 21 template <typename PropertyWithEnumT>
21 scoped_ptr<extensions::MenuItem::Id> GetParentId( 22 scoped_ptr<extensions::MenuItem::Id> GetParentId(
(...skipping 25 matching lines...) Expand all
47 extern const char kOnclickDisallowedError[]; 48 extern const char kOnclickDisallowedError[];
48 extern const char kParentsMustBeNormalError[]; 49 extern const char kParentsMustBeNormalError[];
49 extern const char kTitleNeededError[]; 50 extern const char kTitleNeededError[];
50 51
51 std::string GetIDString(const MenuItem::Id& id); 52 std::string GetIDString(const MenuItem::Id& id);
52 53
53 MenuItem* GetParent(MenuItem::Id parent_id, 54 MenuItem* GetParent(MenuItem::Id parent_id,
54 const MenuManager* menu_manager, 55 const MenuManager* menu_manager,
55 std::string* error); 56 std::string* error);
56 57
57 template<typename PropertyWithEnumT> 58 MenuItem::ContextList GetContexts(const std::vector<
58 MenuItem::ContextList GetContexts(const PropertyWithEnumT& property) { 59 extensions::api::context_menus::ContextType>& in_contexts);
59 MenuItem::ContextList contexts;
60 for (size_t i = 0; i < property.contexts->size(); ++i) {
61 switch (property.contexts->at(i)) {
62 case PropertyWithEnumT::CONTEXTS_TYPE_ALL:
63 contexts.Add(extensions::MenuItem::ALL);
64 break;
65 case PropertyWithEnumT::CONTEXTS_TYPE_PAGE:
66 contexts.Add(extensions::MenuItem::PAGE);
67 break;
68 case PropertyWithEnumT::CONTEXTS_TYPE_SELECTION:
69 contexts.Add(extensions::MenuItem::SELECTION);
70 break;
71 case PropertyWithEnumT::CONTEXTS_TYPE_LINK:
72 contexts.Add(extensions::MenuItem::LINK);
73 break;
74 case PropertyWithEnumT::CONTEXTS_TYPE_EDITABLE:
75 contexts.Add(extensions::MenuItem::EDITABLE);
76 break;
77 case PropertyWithEnumT::CONTEXTS_TYPE_IMAGE:
78 contexts.Add(extensions::MenuItem::IMAGE);
79 break;
80 case PropertyWithEnumT::CONTEXTS_TYPE_VIDEO:
81 contexts.Add(extensions::MenuItem::VIDEO);
82 break;
83 case PropertyWithEnumT::CONTEXTS_TYPE_AUDIO:
84 contexts.Add(extensions::MenuItem::AUDIO);
85 break;
86 case PropertyWithEnumT::CONTEXTS_TYPE_FRAME:
87 contexts.Add(extensions::MenuItem::FRAME);
88 break;
89 case PropertyWithEnumT::CONTEXTS_TYPE_LAUNCHER:
90 // Not available for <webview>.
91 contexts.Add(extensions::MenuItem::LAUNCHER);
92 break;
93 case PropertyWithEnumT::CONTEXTS_TYPE_BROWSER_ACTION:
94 // Not available for <webview>.
95 contexts.Add(extensions::MenuItem::BROWSER_ACTION);
96 break;
97 case PropertyWithEnumT::CONTEXTS_TYPE_PAGE_ACTION:
98 // Not available for <webview>.
99 contexts.Add(extensions::MenuItem::PAGE_ACTION);
100 break;
101 case PropertyWithEnumT::CONTEXTS_TYPE_NONE:
102 NOTREACHED();
103 }
104 }
105 return contexts;
106 }
107 60
108 template<typename PropertyWithEnumT> 61 MenuItem::Type GetType(extensions::api::context_menus::ItemType type,
109 MenuItem::Type GetType(const PropertyWithEnumT& property, 62 MenuItem::Type default_type);
110 MenuItem::Type default_type) {
111 switch (property.type) {
112 case PropertyWithEnumT::TYPE_NONE:
113 return default_type;
114 case PropertyWithEnumT::TYPE_NORMAL:
115 return extensions::MenuItem::NORMAL;
116 case PropertyWithEnumT::TYPE_CHECKBOX:
117 return extensions::MenuItem::CHECKBOX;
118 case PropertyWithEnumT::TYPE_RADIO:
119 return extensions::MenuItem::RADIO;
120 case PropertyWithEnumT::TYPE_SEPARATOR:
121 return extensions::MenuItem::SEPARATOR;
122 }
123 return extensions::MenuItem::NORMAL;
124 }
125 63
126 // Creates and adds a menu item from |create_properties|. 64 // Creates and adds a menu item from |create_properties|.
127 template<typename PropertyWithEnumT> 65 template<typename PropertyWithEnumT>
128 bool CreateMenuItem(const PropertyWithEnumT& create_properties, 66 bool CreateMenuItem(const PropertyWithEnumT& create_properties,
129 Profile* profile, 67 Profile* profile,
130 const Extension* extension, 68 const Extension* extension,
131 const MenuItem::Id& item_id, 69 const MenuItem::Id& item_id,
132 std::string* error) { 70 std::string* error) {
133 bool is_webview = item_id.extension_key.webview_instance_id != 0; 71 bool is_webview = item_id.extension_key.webview_instance_id != 0;
134 MenuManager* menu_manager = MenuManager::Get(profile); 72 MenuManager* menu_manager = MenuManager::Get(profile);
135 73
136 if (menu_manager->GetItemById(item_id)) { 74 if (menu_manager->GetItemById(item_id)) {
137 *error = ErrorUtils::FormatErrorMessage(kDuplicateIDError, 75 *error = ErrorUtils::FormatErrorMessage(kDuplicateIDError,
138 GetIDString(item_id)); 76 GetIDString(item_id));
139 return false; 77 return false;
140 } 78 }
141 79
142 if (!is_webview && BackgroundInfo::HasLazyBackgroundPage(extension) && 80 if (!is_webview && BackgroundInfo::HasLazyBackgroundPage(extension) &&
143 create_properties.onclick.get()) { 81 create_properties.onclick.get()) {
144 *error = kOnclickDisallowedError; 82 *error = kOnclickDisallowedError;
145 return false; 83 return false;
146 } 84 }
147 85
148 // Contexts. 86 // Contexts.
149 MenuItem::ContextList contexts; 87 MenuItem::ContextList contexts;
150 if (create_properties.contexts.get()) 88 if (create_properties.contexts.get())
151 contexts = GetContexts(create_properties); 89 contexts = GetContexts(*create_properties.contexts);
152 else 90 else
153 contexts.Add(MenuItem::PAGE); 91 contexts.Add(MenuItem::PAGE);
154 92
155 if (contexts.Contains(MenuItem::LAUNCHER)) { 93 if (contexts.Contains(MenuItem::LAUNCHER)) {
156 // Launcher item is not allowed for <webview>. 94 // Launcher item is not allowed for <webview>.
157 if (!extension->is_platform_app() || is_webview) { 95 if (!extension->is_platform_app() || is_webview) {
158 *error = kLauncherNotAllowedError; 96 *error = kLauncherNotAllowedError;
159 return false; 97 return false;
160 } 98 }
161 } 99 }
162 100
163 if (contexts.Contains(MenuItem::BROWSER_ACTION) || 101 if (contexts.Contains(MenuItem::BROWSER_ACTION) ||
164 contexts.Contains(MenuItem::PAGE_ACTION)) { 102 contexts.Contains(MenuItem::PAGE_ACTION)) {
165 // Action items are not allowed for <webview>. 103 // Action items are not allowed for <webview>.
166 if (!extension->is_extension() || is_webview) { 104 if (!extension->is_extension() || is_webview) {
167 *error = kActionNotAllowedError; 105 *error = kActionNotAllowedError;
168 return false; 106 return false;
169 } 107 }
170 } 108 }
171 109
172 // Title. 110 // Title.
173 std::string title; 111 std::string title;
174 if (create_properties.title.get()) 112 if (create_properties.title.get())
175 title = *create_properties.title; 113 title = *create_properties.title;
176 114
177 MenuItem::Type type = GetType(create_properties, MenuItem::NORMAL); 115 MenuItem::Type type = GetType(create_properties.type, MenuItem::NORMAL);
178 if (title.empty() && type != MenuItem::SEPARATOR) { 116 if (title.empty() && type != MenuItem::SEPARATOR) {
179 *error = kTitleNeededError; 117 *error = kTitleNeededError;
180 return false; 118 return false;
181 } 119 }
182 120
183 // Checked state. 121 // Checked state.
184 bool checked = false; 122 bool checked = false;
185 if (create_properties.checked.get()) 123 if (create_properties.checked.get())
186 checked = *create_properties.checked; 124 checked = *create_properties.checked;
187 125
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 MenuManager* menu_manager = MenuManager::Get(profile); 171 MenuManager* menu_manager = MenuManager::Get(profile);
234 172
235 MenuItem* item = menu_manager->GetItemById(item_id); 173 MenuItem* item = menu_manager->GetItemById(item_id);
236 if (!item || item->extension_id() != extension->id()){ 174 if (!item || item->extension_id() != extension->id()){
237 *error = ErrorUtils::FormatErrorMessage( 175 *error = ErrorUtils::FormatErrorMessage(
238 kCannotFindItemError, GetIDString(item_id)); 176 kCannotFindItemError, GetIDString(item_id));
239 return false; 177 return false;
240 } 178 }
241 179
242 // Type. 180 // Type.
243 MenuItem::Type type = GetType(update_properties, item->type()); 181 MenuItem::Type type = GetType(update_properties.type, item->type());
244 182
245 if (type != item->type()) { 183 if (type != item->type()) {
246 if (type == MenuItem::RADIO || item->type() == MenuItem::RADIO) 184 if (type == MenuItem::RADIO || item->type() == MenuItem::RADIO)
247 radio_item_updated = true; 185 radio_item_updated = true;
248 item->set_type(type); 186 item->set_type(type);
249 } 187 }
250 188
251 // Title. 189 // Title.
252 if (update_properties.title.get()) { 190 if (update_properties.title.get()) {
253 std::string title(*update_properties.title); 191 std::string title(*update_properties.title);
(...skipping 22 matching lines...) Expand all
276 } 214 }
277 } 215 }
278 216
279 // Enabled. 217 // Enabled.
280 if (update_properties.enabled.get()) 218 if (update_properties.enabled.get())
281 item->set_enabled(*update_properties.enabled); 219 item->set_enabled(*update_properties.enabled);
282 220
283 // Contexts. 221 // Contexts.
284 MenuItem::ContextList contexts; 222 MenuItem::ContextList contexts;
285 if (update_properties.contexts.get()) { 223 if (update_properties.contexts.get()) {
286 contexts = GetContexts(update_properties); 224 contexts = GetContexts(*update_properties.contexts);
287 225
288 if (contexts.Contains(MenuItem::LAUNCHER)) { 226 if (contexts.Contains(MenuItem::LAUNCHER)) {
289 // Launcher item is not allowed for <webview>. 227 // Launcher item is not allowed for <webview>.
290 if (!extension->is_platform_app() || is_webview) { 228 if (!extension->is_platform_app() || is_webview) {
291 *error = kLauncherNotAllowedError; 229 *error = kLauncherNotAllowedError;
292 return false; 230 return false;
293 } 231 }
294 } 232 }
295 233
296 if (contexts != item->contexts()) 234 if (contexts != item->contexts())
(...skipping 23 matching lines...) Expand all
320 return false; 258 return false;
321 259
322 menu_manager->WriteToStorage(extension, item_id.extension_key); 260 menu_manager->WriteToStorage(extension, item_id.extension_key);
323 return true; 261 return true;
324 } 262 }
325 263
326 } // namespace context_menus_api_helpers 264 } // namespace context_menus_api_helpers
327 } // namespace extensions 265 } // namespace extensions
328 266
329 #endif // CHROME_BROWSER_EXTENSIONS_API_CONTEXT_MENUS_CONTEXT_MENUS_API_HELPERS _H_ 267 #endif // CHROME_BROWSER_EXTENSIONS_API_CONTEXT_MENUS_CONTEXT_MENUS_API_HELPERS _H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698