| OLD | NEW |
| 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_menu/context_menu_api.h" | 5 #include "chrome/browser/extensions/api/context_menu/context_menu_api.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/values.h" | |
| 10 #include "base/string_number_conversions.h" | 9 #include "base/string_number_conversions.h" |
| 11 #include "base/string_util.h" | 10 #include "base/string_util.h" |
| 11 #include "base/values.h" |
| 12 #include "chrome/browser/extensions/extension_service.h" | 12 #include "chrome/browser/extensions/extension_service.h" |
| 13 #include "chrome/browser/extensions/menu_manager.h" | 13 #include "chrome/browser/extensions/menu_manager.h" |
| 14 #include "chrome/browser/profiles/profile.h" | 14 #include "chrome/browser/profiles/profile.h" |
| 15 #include "chrome/common/extensions/api/context_menus.h" | 15 #include "chrome/common/extensions/api/context_menus.h" |
| 16 #include "chrome/common/extensions/extension_error_utils.h" | 16 #include "extensions/common/extension_error_utils.h" |
| 17 #include "chrome/common/extensions/url_pattern_set.h" | 17 #include "extensions/common/url_pattern_set.h" |
| 18 |
| 19 using extensions::ErrorUtils; |
| 18 | 20 |
| 19 namespace { | 21 namespace { |
| 20 | 22 |
| 21 const char kGeneratedIdKey[] = "generatedId"; | 23 const char kGeneratedIdKey[] = "generatedId"; |
| 22 | 24 |
| 23 const char kCannotFindItemError[] = "Cannot find menu item with id *"; | 25 const char kCannotFindItemError[] = "Cannot find menu item with id *"; |
| 24 const char kOnclickDisallowedError[] = "Extensions using event pages cannot " | 26 const char kOnclickDisallowedError[] = "Extensions using event pages cannot " |
| 25 "pass an onclick parameter to chrome.contextMenus.create. Instead, use " | 27 "pass an onclick parameter to chrome.contextMenus.create. Instead, use " |
| 26 "the chrome.contextMenus.onClicked event."; | 28 "the chrome.contextMenus.onClicked event."; |
| 27 const char kCheckedError[] = | 29 const char kCheckedError[] = |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 121 break; | 123 break; |
| 122 } | 124 } |
| 123 return parent_id.Pass(); | 125 return parent_id.Pass(); |
| 124 } | 126 } |
| 125 | 127 |
| 126 extensions::MenuItem* GetParent(extensions::MenuItem::Id parent_id, | 128 extensions::MenuItem* GetParent(extensions::MenuItem::Id parent_id, |
| 127 const extensions::MenuManager* menu_manager, | 129 const extensions::MenuManager* menu_manager, |
| 128 std::string* error) { | 130 std::string* error) { |
| 129 extensions::MenuItem* parent = menu_manager->GetItemById(parent_id); | 131 extensions::MenuItem* parent = menu_manager->GetItemById(parent_id); |
| 130 if (!parent) { | 132 if (!parent) { |
| 131 *error = ExtensionErrorUtils::FormatErrorMessage( | 133 *error = ErrorUtils::FormatErrorMessage( |
| 132 kCannotFindItemError, GetIDString(parent_id)); | 134 kCannotFindItemError, GetIDString(parent_id)); |
| 133 return NULL; | 135 return NULL; |
| 134 } | 136 } |
| 135 if (parent->type() != extensions::MenuItem::NORMAL) { | 137 if (parent->type() != extensions::MenuItem::NORMAL) { |
| 136 *error = kParentsMustBeNormalError; | 138 *error = kParentsMustBeNormalError; |
| 137 return NULL; | 139 return NULL; |
| 138 } | 140 } |
| 139 | 141 |
| 140 return parent; | 142 return parent; |
| 141 } | 143 } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 168 &id.uid)); | 170 &id.uid)); |
| 169 } | 171 } |
| 170 | 172 |
| 171 std::string title; | 173 std::string title; |
| 172 if (params->create_properties.title.get()) | 174 if (params->create_properties.title.get()) |
| 173 title = *params->create_properties.title; | 175 title = *params->create_properties.title; |
| 174 | 176 |
| 175 MenuManager* menu_manager = profile()->GetExtensionService()->menu_manager(); | 177 MenuManager* menu_manager = profile()->GetExtensionService()->menu_manager(); |
| 176 | 178 |
| 177 if (menu_manager->GetItemById(id)) { | 179 if (menu_manager->GetItemById(id)) { |
| 178 error_ = ExtensionErrorUtils::FormatErrorMessage(kDuplicateIDError, | 180 error_ = ErrorUtils::FormatErrorMessage(kDuplicateIDError, |
| 179 GetIDString(id)); | 181 GetIDString(id)); |
| 180 return false; | 182 return false; |
| 181 } | 183 } |
| 182 | 184 |
| 183 if (GetExtension()->has_lazy_background_page() && | 185 if (GetExtension()->has_lazy_background_page() && |
| 184 params->create_properties.onclick.get()) { | 186 params->create_properties.onclick.get()) { |
| 185 error_ = kOnclickDisallowedError; | 187 error_ = kOnclickDisallowedError; |
| 186 return false; | 188 return false; |
| 187 } | 189 } |
| 188 | 190 |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 item_id.uid = *params->id_integer; | 259 item_id.uid = *params->id_integer; |
| 258 break; | 260 break; |
| 259 case Update::Params::ID_NONE: | 261 case Update::Params::ID_NONE: |
| 260 NOTREACHED(); | 262 NOTREACHED(); |
| 261 } | 263 } |
| 262 | 264 |
| 263 ExtensionService* service = profile()->GetExtensionService(); | 265 ExtensionService* service = profile()->GetExtensionService(); |
| 264 MenuManager* manager = service->menu_manager(); | 266 MenuManager* manager = service->menu_manager(); |
| 265 MenuItem* item = manager->GetItemById(item_id); | 267 MenuItem* item = manager->GetItemById(item_id); |
| 266 if (!item || item->extension_id() != extension_id()) { | 268 if (!item || item->extension_id() != extension_id()) { |
| 267 error_ = ExtensionErrorUtils::FormatErrorMessage( | 269 error_ = ErrorUtils::FormatErrorMessage( |
| 268 kCannotFindItemError, GetIDString(item_id)); | 270 kCannotFindItemError, GetIDString(item_id)); |
| 269 return false; | 271 return false; |
| 270 } | 272 } |
| 271 | 273 |
| 272 // Type. | 274 // Type. |
| 273 MenuItem::Type type = GetType(params->update_properties); | 275 MenuItem::Type type = GetType(params->update_properties); |
| 274 | 276 |
| 275 if (type != item->type()) { | 277 if (type != item->type()) { |
| 276 if (type == MenuItem::RADIO || item->type() == MenuItem::RADIO) | 278 if (type == MenuItem::RADIO || item->type() == MenuItem::RADIO) |
| 277 radio_item_updated = true; | 279 radio_item_updated = true; |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 367 case Remove::Params::MENU_ITEM_ID_INTEGER: | 369 case Remove::Params::MENU_ITEM_ID_INTEGER: |
| 368 id.uid = *params->menu_item_id_integer; | 370 id.uid = *params->menu_item_id_integer; |
| 369 break; | 371 break; |
| 370 case Remove::Params::MENU_ITEM_ID_NONE: | 372 case Remove::Params::MENU_ITEM_ID_NONE: |
| 371 NOTREACHED(); | 373 NOTREACHED(); |
| 372 } | 374 } |
| 373 | 375 |
| 374 MenuItem* item = manager->GetItemById(id); | 376 MenuItem* item = manager->GetItemById(id); |
| 375 // Ensure one extension can't remove another's menu items. | 377 // Ensure one extension can't remove another's menu items. |
| 376 if (!item || item->extension_id() != extension_id()) { | 378 if (!item || item->extension_id() != extension_id()) { |
| 377 error_ = ExtensionErrorUtils::FormatErrorMessage( | 379 error_ = ErrorUtils::FormatErrorMessage( |
| 378 kCannotFindItemError, GetIDString(id)); | 380 kCannotFindItemError, GetIDString(id)); |
| 379 return false; | 381 return false; |
| 380 } | 382 } |
| 381 | 383 |
| 382 if (!manager->RemoveContextMenuItem(id)) | 384 if (!manager->RemoveContextMenuItem(id)) |
| 383 return false; | 385 return false; |
| 384 manager->WriteToStorage(GetExtension()); | 386 manager->WriteToStorage(GetExtension()); |
| 385 return true; | 387 return true; |
| 386 } | 388 } |
| 387 | 389 |
| 388 bool RemoveAllContextMenusFunction::RunImpl() { | 390 bool RemoveAllContextMenusFunction::RunImpl() { |
| 389 ExtensionService* service = profile()->GetExtensionService(); | 391 ExtensionService* service = profile()->GetExtensionService(); |
| 390 MenuManager* manager = service->menu_manager(); | 392 MenuManager* manager = service->menu_manager(); |
| 391 manager->RemoveAllContextItems(GetExtension()->id()); | 393 manager->RemoveAllContextItems(GetExtension()->id()); |
| 392 manager->WriteToStorage(GetExtension()); | 394 manager->WriteToStorage(GetExtension()); |
| 393 return true; | 395 return true; |
| 394 } | 396 } |
| 395 | 397 |
| 396 } // namespace extensions | 398 } // namespace extensions |
| OLD | NEW |