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

Side by Side Diff: chrome/browser/extensions/api/context_menus/context_menus_api.cc

Issue 11827026: Overhaul JSON Schema Compiler to support a number of features required to (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/browser/extensions/api/context_menus/context_menus_api.h" 5 #include "chrome/browser/extensions/api/context_menus/context_menus_api.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/string_number_conversions.h" 9 #include "base/string_number_conversions.h"
10 #include "base/string_util.h" 10 #include "base/string_util.h"
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 else 45 else
46 return base::IntToString(id.uid); 46 return base::IntToString(id.uid);
47 } 47 }
48 48
49 template<typename PropertyWithEnumT> 49 template<typename PropertyWithEnumT>
50 extensions::MenuItem::ContextList GetContexts( 50 extensions::MenuItem::ContextList GetContexts(
51 const PropertyWithEnumT& property) { 51 const PropertyWithEnumT& property) {
52 extensions::MenuItem::ContextList contexts; 52 extensions::MenuItem::ContextList contexts;
53 for (size_t i = 0; i < property.contexts->size(); ++i) { 53 for (size_t i = 0; i < property.contexts->size(); ++i) {
54 switch (property.contexts->at(i)) { 54 switch (property.contexts->at(i)) {
55 case PropertyWithEnumT::CONTEXTS_ELEMENT_ALL: 55 case PropertyWithEnumT::CONTEXTS_TYPE_ALL:
56 contexts.Add(extensions::MenuItem::ALL); 56 contexts.Add(extensions::MenuItem::ALL);
57 break; 57 break;
58 case PropertyWithEnumT::CONTEXTS_ELEMENT_PAGE: 58 case PropertyWithEnumT::CONTEXTS_TYPE_PAGE:
59 contexts.Add(extensions::MenuItem::PAGE); 59 contexts.Add(extensions::MenuItem::PAGE);
60 break; 60 break;
61 case PropertyWithEnumT::CONTEXTS_ELEMENT_SELECTION: 61 case PropertyWithEnumT::CONTEXTS_TYPE_SELECTION:
62 contexts.Add(extensions::MenuItem::SELECTION); 62 contexts.Add(extensions::MenuItem::SELECTION);
63 break; 63 break;
64 case PropertyWithEnumT::CONTEXTS_ELEMENT_LINK: 64 case PropertyWithEnumT::CONTEXTS_TYPE_LINK:
65 contexts.Add(extensions::MenuItem::LINK); 65 contexts.Add(extensions::MenuItem::LINK);
66 break; 66 break;
67 case PropertyWithEnumT::CONTEXTS_ELEMENT_EDITABLE: 67 case PropertyWithEnumT::CONTEXTS_TYPE_EDITABLE:
68 contexts.Add(extensions::MenuItem::EDITABLE); 68 contexts.Add(extensions::MenuItem::EDITABLE);
69 break; 69 break;
70 case PropertyWithEnumT::CONTEXTS_ELEMENT_IMAGE: 70 case PropertyWithEnumT::CONTEXTS_TYPE_IMAGE:
71 contexts.Add(extensions::MenuItem::IMAGE); 71 contexts.Add(extensions::MenuItem::IMAGE);
72 break; 72 break;
73 case PropertyWithEnumT::CONTEXTS_ELEMENT_VIDEO: 73 case PropertyWithEnumT::CONTEXTS_TYPE_VIDEO:
74 contexts.Add(extensions::MenuItem::VIDEO); 74 contexts.Add(extensions::MenuItem::VIDEO);
75 break; 75 break;
76 case PropertyWithEnumT::CONTEXTS_ELEMENT_AUDIO: 76 case PropertyWithEnumT::CONTEXTS_TYPE_AUDIO:
77 contexts.Add(extensions::MenuItem::AUDIO); 77 contexts.Add(extensions::MenuItem::AUDIO);
78 break; 78 break;
79 case PropertyWithEnumT::CONTEXTS_ELEMENT_FRAME: 79 case PropertyWithEnumT::CONTEXTS_TYPE_FRAME:
80 contexts.Add(extensions::MenuItem::FRAME); 80 contexts.Add(extensions::MenuItem::FRAME);
81 break; 81 break;
82 case PropertyWithEnumT::CONTEXTS_ELEMENT_LAUNCHER: 82 case PropertyWithEnumT::CONTEXTS_TYPE_LAUNCHER:
83 contexts.Add(extensions::MenuItem::LAUNCHER); 83 contexts.Add(extensions::MenuItem::LAUNCHER);
84 break; 84 break;
85 case PropertyWithEnumT::CONTEXTS_ELEMENT_NONE: 85 case PropertyWithEnumT::CONTEXTS_TYPE_NONE:
86 NOTREACHED(); 86 NOTREACHED();
87 } 87 }
88 } 88 }
89 return contexts; 89 return contexts;
90 } 90 }
91 91
92 template<typename PropertyWithEnumT> 92 template<typename PropertyWithEnumT>
93 extensions::MenuItem::Type GetType(const PropertyWithEnumT& property) { 93 extensions::MenuItem::Type GetType(const PropertyWithEnumT& property) {
94 switch (property.type) { 94 switch (property.type) {
95 case PropertyWithEnumT::TYPE_NONE: 95 case PropertyWithEnumT::TYPE_NONE:
96 case PropertyWithEnumT::TYPE_NORMAL: 96 case PropertyWithEnumT::TYPE_NORMAL:
97 return extensions::MenuItem::NORMAL; 97 return extensions::MenuItem::NORMAL;
98 case PropertyWithEnumT::TYPE_CHECKBOX: 98 case PropertyWithEnumT::TYPE_CHECKBOX:
99 return extensions::MenuItem::CHECKBOX; 99 return extensions::MenuItem::CHECKBOX;
100 case PropertyWithEnumT::TYPE_RADIO: 100 case PropertyWithEnumT::TYPE_RADIO:
101 return extensions::MenuItem::RADIO; 101 return extensions::MenuItem::RADIO;
102 case PropertyWithEnumT::TYPE_SEPARATOR: 102 case PropertyWithEnumT::TYPE_SEPARATOR:
103 return extensions::MenuItem::SEPARATOR; 103 return extensions::MenuItem::SEPARATOR;
104 } 104 }
105 return extensions::MenuItem::NORMAL; 105 return extensions::MenuItem::NORMAL;
106 } 106 }
107 107
108 template<typename PropertyWithEnumT> 108 template<typename PropertyWithEnumT>
109 scoped_ptr<extensions::MenuItem::Id> GetParentId( 109 scoped_ptr<extensions::MenuItem::Id> GetParentId(
110 const PropertyWithEnumT& property, 110 const PropertyWithEnumT& property,
111 bool is_off_the_record, 111 bool is_off_the_record,
112 std::string extension_id) { 112 std::string extension_id) {
113 if (!property.parent_id)
114 return scoped_ptr<extensions::MenuItem::Id>();
115
113 scoped_ptr<extensions::MenuItem::Id> parent_id( 116 scoped_ptr<extensions::MenuItem::Id> parent_id(
114 new extensions::MenuItem::Id(is_off_the_record, extension_id)); 117 new extensions::MenuItem::Id(is_off_the_record, extension_id));
115 switch (property.parent_id_type) { 118 if (property.parent_id->as_integer)
116 case PropertyWithEnumT::PARENT_ID_NONE: 119 parent_id->uid = *property.parent_id->as_integer;
117 return scoped_ptr<extensions::MenuItem::Id>().Pass(); 120 else if (property.parent_id->as_string)
118 case PropertyWithEnumT::PARENT_ID_INTEGER: 121 parent_id->string_uid = *property.parent_id->as_string;
119 parent_id->uid = *property.parent_id_integer; 122 else
120 break; 123 NOTREACHED();
121 case PropertyWithEnumT::PARENT_ID_STRING:
122 parent_id->string_uid = *property.parent_id_string;
123 break;
124 }
125 return parent_id.Pass(); 124 return parent_id.Pass();
126 } 125 }
127 126
128 extensions::MenuItem* GetParent(extensions::MenuItem::Id parent_id, 127 extensions::MenuItem* GetParent(extensions::MenuItem::Id parent_id,
129 const extensions::MenuManager* menu_manager, 128 const extensions::MenuManager* menu_manager,
130 std::string* error) { 129 std::string* error) {
131 extensions::MenuItem* parent = menu_manager->GetItemById(parent_id); 130 extensions::MenuItem* parent = menu_manager->GetItemById(parent_id);
132 if (!parent) { 131 if (!parent) {
133 *error = ErrorUtils::FormatErrorMessage( 132 *error = ErrorUtils::FormatErrorMessage(
134 kCannotFindItemError, GetIDString(parent_id)); 133 kCannotFindItemError, GetIDString(parent_id));
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 menu_manager->WriteToStorage(GetExtension()); 243 menu_manager->WriteToStorage(GetExtension());
245 return true; 244 return true;
246 } 245 }
247 246
248 bool ContextMenusUpdateFunction::RunImpl() { 247 bool ContextMenusUpdateFunction::RunImpl() {
249 bool radio_item_updated = false; 248 bool radio_item_updated = false;
250 MenuItem::Id item_id(profile()->IsOffTheRecord(), extension_id()); 249 MenuItem::Id item_id(profile()->IsOffTheRecord(), extension_id());
251 scoped_ptr<Update::Params> params(Update::Params::Create(*args_)); 250 scoped_ptr<Update::Params> params(Update::Params::Create(*args_));
252 251
253 EXTENSION_FUNCTION_VALIDATE(params.get()); 252 EXTENSION_FUNCTION_VALIDATE(params.get());
254 switch (params->id_type) { 253 if (params->id.as_string)
255 case Update::Params::ID_STRING: 254 item_id.string_uid = *params->id.as_string;
256 item_id.string_uid = *params->id_string; 255 else if (params->id.as_integer)
257 break; 256 item_id.uid = *params->id.as_integer;
258 case Update::Params::ID_INTEGER: 257 else
259 item_id.uid = *params->id_integer; 258 NOTREACHED();
260 break;
261 case Update::Params::ID_NONE:
262 NOTREACHED();
263 }
264 259
265 ExtensionService* service = profile()->GetExtensionService(); 260 ExtensionService* service = profile()->GetExtensionService();
266 MenuManager* manager = service->menu_manager(); 261 MenuManager* manager = service->menu_manager();
267 MenuItem* item = manager->GetItemById(item_id); 262 MenuItem* item = manager->GetItemById(item_id);
268 if (!item || item->extension_id() != extension_id()) { 263 if (!item || item->extension_id() != extension_id()) {
269 error_ = ErrorUtils::FormatErrorMessage( 264 error_ = ErrorUtils::FormatErrorMessage(
270 kCannotFindItemError, GetIDString(item_id)); 265 kCannotFindItemError, GetIDString(item_id));
271 return false; 266 return false;
272 } 267 }
273 268
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 } 350 }
356 351
357 bool ContextMenusRemoveFunction::RunImpl() { 352 bool ContextMenusRemoveFunction::RunImpl() {
358 scoped_ptr<Remove::Params> params(Remove::Params::Create(*args_)); 353 scoped_ptr<Remove::Params> params(Remove::Params::Create(*args_));
359 EXTENSION_FUNCTION_VALIDATE(params.get()); 354 EXTENSION_FUNCTION_VALIDATE(params.get());
360 355
361 ExtensionService* service = profile()->GetExtensionService(); 356 ExtensionService* service = profile()->GetExtensionService();
362 MenuManager* manager = service->menu_manager(); 357 MenuManager* manager = service->menu_manager();
363 358
364 MenuItem::Id id(profile()->IsOffTheRecord(), extension_id()); 359 MenuItem::Id id(profile()->IsOffTheRecord(), extension_id());
365 switch (params->menu_item_id_type) { 360 if (params->menu_item_id.as_string)
366 case Remove::Params::MENU_ITEM_ID_STRING: 361 id.string_uid = *params->menu_item_id.as_string;
367 id.string_uid = *params->menu_item_id_string; 362 else if (params->menu_item_id.as_integer)
368 break; 363 id.uid = *params->menu_item_id.as_integer;
369 case Remove::Params::MENU_ITEM_ID_INTEGER: 364 else
370 id.uid = *params->menu_item_id_integer; 365 NOTREACHED();
371 break;
372 case Remove::Params::MENU_ITEM_ID_NONE:
373 NOTREACHED();
374 }
375 366
376 MenuItem* item = manager->GetItemById(id); 367 MenuItem* item = manager->GetItemById(id);
377 // Ensure one extension can't remove another's menu items. 368 // Ensure one extension can't remove another's menu items.
378 if (!item || item->extension_id() != extension_id()) { 369 if (!item || item->extension_id() != extension_id()) {
379 error_ = ErrorUtils::FormatErrorMessage( 370 error_ = ErrorUtils::FormatErrorMessage(
380 kCannotFindItemError, GetIDString(id)); 371 kCannotFindItemError, GetIDString(id));
381 return false; 372 return false;
382 } 373 }
383 374
384 if (!manager->RemoveContextMenuItem(id)) 375 if (!manager->RemoveContextMenuItem(id))
385 return false; 376 return false;
386 manager->WriteToStorage(GetExtension()); 377 manager->WriteToStorage(GetExtension());
387 return true; 378 return true;
388 } 379 }
389 380
390 bool ContextMenusRemoveAllFunction::RunImpl() { 381 bool ContextMenusRemoveAllFunction::RunImpl() {
391 ExtensionService* service = profile()->GetExtensionService(); 382 ExtensionService* service = profile()->GetExtensionService();
392 MenuManager* manager = service->menu_manager(); 383 MenuManager* manager = service->menu_manager();
393 manager->RemoveAllContextItems(GetExtension()->id()); 384 manager->RemoveAllContextItems(GetExtension()->id());
394 manager->WriteToStorage(GetExtension()); 385 manager->WriteToStorage(GetExtension());
395 return true; 386 return true;
396 } 387 }
397 388
398 } // namespace extensions 389 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698