| 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_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/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
| 10 #include "base/values.h" | 10 #include "base/values.h" |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 "id parameter to chrome.contextMenus.create"; | 25 "id parameter to chrome.contextMenus.create"; |
| 26 | 26 |
| 27 } // namespace | 27 } // namespace |
| 28 | 28 |
| 29 namespace extensions { | 29 namespace extensions { |
| 30 | 30 |
| 31 namespace Create = api::context_menus::Create; | 31 namespace Create = api::context_menus::Create; |
| 32 namespace Remove = api::context_menus::Remove; | 32 namespace Remove = api::context_menus::Remove; |
| 33 namespace Update = api::context_menus::Update; | 33 namespace Update = api::context_menus::Update; |
| 34 | 34 |
| 35 bool ContextMenusCreateFunction::RunSync() { | 35 ExtensionFunction::ResponseAction ContextMenusCreateFunction::Run() { |
| 36 MenuItem::Id id(GetProfile()->IsOffTheRecord(), | 36 MenuItem::Id id(browser_context()->IsOffTheRecord(), |
| 37 MenuItem::ExtensionKey(extension_id())); | 37 MenuItem::ExtensionKey(extension_id())); |
| 38 std::unique_ptr<Create::Params> params(Create::Params::Create(*args_)); | 38 std::unique_ptr<Create::Params> params(Create::Params::Create(*args_)); |
| 39 EXTENSION_FUNCTION_VALIDATE(params.get()); | 39 EXTENSION_FUNCTION_VALIDATE(params.get()); |
| 40 | 40 |
| 41 if (params->create_properties.id.get()) { | 41 if (params->create_properties.id.get()) { |
| 42 id.string_uid = *params->create_properties.id; | 42 id.string_uid = *params->create_properties.id; |
| 43 } else { | 43 } else { |
| 44 if (BackgroundInfo::HasLazyBackgroundPage(extension())) { | 44 if (BackgroundInfo::HasLazyBackgroundPage(extension())) |
| 45 error_ = kIdRequiredError; | 45 return RespondNow(Error(kIdRequiredError)); |
| 46 return false; | |
| 47 } | |
| 48 | 46 |
| 49 // The Generated Id is added by context_menus_custom_bindings.js. | 47 // The Generated Id is added by context_menus_custom_bindings.js. |
| 50 base::DictionaryValue* properties = NULL; | 48 base::DictionaryValue* properties = NULL; |
| 51 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &properties)); | 49 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &properties)); |
| 52 EXTENSION_FUNCTION_VALIDATE( | 50 EXTENSION_FUNCTION_VALIDATE( |
| 53 properties->GetInteger(helpers::kGeneratedIdKey, &id.uid)); | 51 properties->GetInteger(helpers::kGeneratedIdKey, &id.uid)); |
| 54 } | 52 } |
| 55 | 53 |
| 56 return helpers::CreateMenuItem( | 54 std::string error; |
| 57 params->create_properties, GetProfile(), extension(), id, &error_); | 55 if (!helpers::CreateMenuItem(params->create_properties, browser_context(), |
| 56 extension(), id, &error)) { |
| 57 return RespondNow(Error(error)); |
| 58 } |
| 59 return RespondNow(NoArguments()); |
| 58 } | 60 } |
| 59 | 61 |
| 60 bool ContextMenusUpdateFunction::RunSync() { | 62 ExtensionFunction::ResponseAction ContextMenusUpdateFunction::Run() { |
| 61 MenuItem::Id item_id(GetProfile()->IsOffTheRecord(), | 63 MenuItem::Id item_id(browser_context()->IsOffTheRecord(), |
| 62 MenuItem::ExtensionKey(extension_id())); | 64 MenuItem::ExtensionKey(extension_id())); |
| 63 std::unique_ptr<Update::Params> params(Update::Params::Create(*args_)); | 65 std::unique_ptr<Update::Params> params(Update::Params::Create(*args_)); |
| 64 | 66 |
| 65 EXTENSION_FUNCTION_VALIDATE(params.get()); | 67 EXTENSION_FUNCTION_VALIDATE(params.get()); |
| 66 if (params->id.as_string) | 68 if (params->id.as_string) |
| 67 item_id.string_uid = *params->id.as_string; | 69 item_id.string_uid = *params->id.as_string; |
| 68 else if (params->id.as_integer) | 70 else if (params->id.as_integer) |
| 69 item_id.uid = *params->id.as_integer; | 71 item_id.uid = *params->id.as_integer; |
| 70 else | 72 else |
| 71 NOTREACHED(); | 73 NOTREACHED(); |
| 72 | 74 |
| 73 return helpers::UpdateMenuItem( | 75 std::string error; |
| 74 params->update_properties, GetProfile(), extension(), item_id, &error_); | 76 if (!helpers::UpdateMenuItem(params->update_properties, browser_context(), |
| 77 extension(), item_id, &error)) { |
| 78 return RespondNow(Error(error)); |
| 79 } |
| 80 return RespondNow(NoArguments()); |
| 75 } | 81 } |
| 76 | 82 |
| 77 bool ContextMenusRemoveFunction::RunSync() { | 83 ExtensionFunction::ResponseAction ContextMenusRemoveFunction::Run() { |
| 78 std::unique_ptr<Remove::Params> params(Remove::Params::Create(*args_)); | 84 std::unique_ptr<Remove::Params> params(Remove::Params::Create(*args_)); |
| 79 EXTENSION_FUNCTION_VALIDATE(params.get()); | 85 EXTENSION_FUNCTION_VALIDATE(params.get()); |
| 80 | 86 |
| 81 MenuManager* manager = MenuManager::Get(GetProfile()); | 87 MenuManager* manager = MenuManager::Get(browser_context()); |
| 82 | 88 |
| 83 MenuItem::Id id(GetProfile()->IsOffTheRecord(), | 89 MenuItem::Id id(browser_context()->IsOffTheRecord(), |
| 84 MenuItem::ExtensionKey(extension_id())); | 90 MenuItem::ExtensionKey(extension_id())); |
| 85 if (params->menu_item_id.as_string) | 91 if (params->menu_item_id.as_string) |
| 86 id.string_uid = *params->menu_item_id.as_string; | 92 id.string_uid = *params->menu_item_id.as_string; |
| 87 else if (params->menu_item_id.as_integer) | 93 else if (params->menu_item_id.as_integer) |
| 88 id.uid = *params->menu_item_id.as_integer; | 94 id.uid = *params->menu_item_id.as_integer; |
| 89 else | 95 else |
| 90 NOTREACHED(); | 96 NOTREACHED(); |
| 91 | 97 |
| 92 MenuItem* item = manager->GetItemById(id); | 98 MenuItem* item = manager->GetItemById(id); |
| 93 // Ensure one extension can't remove another's menu items. | 99 // Ensure one extension can't remove another's menu items. |
| 94 if (!item || item->extension_id() != extension_id()) { | 100 if (!item || item->extension_id() != extension_id()) { |
| 95 error_ = ErrorUtils::FormatErrorMessage( | 101 return RespondNow( |
| 96 helpers::kCannotFindItemError, helpers::GetIDString(id)); | 102 Error(helpers::kCannotFindItemError, helpers::GetIDString(id))); |
| 97 return false; | |
| 98 } | 103 } |
| 99 | 104 |
| 100 if (!manager->RemoveContextMenuItem(id)) | 105 if (!manager->RemoveContextMenuItem(id)) |
| 101 return false; | 106 return RespondNow(Error("Cannot remove menu item.")); |
| 102 manager->WriteToStorage(extension(), id.extension_key); | 107 manager->WriteToStorage(extension(), id.extension_key); |
| 103 return true; | 108 return RespondNow(NoArguments()); |
| 104 } | 109 } |
| 105 | 110 |
| 106 bool ContextMenusRemoveAllFunction::RunSync() { | 111 ExtensionFunction::ResponseAction ContextMenusRemoveAllFunction::Run() { |
| 107 MenuManager* manager = MenuManager::Get(GetProfile()); | 112 MenuManager* manager = MenuManager::Get(browser_context()); |
| 108 manager->RemoveAllContextItems(MenuItem::ExtensionKey(extension()->id())); | 113 manager->RemoveAllContextItems(MenuItem::ExtensionKey(extension()->id())); |
| 109 manager->WriteToStorage(extension(), | 114 manager->WriteToStorage(extension(), |
| 110 MenuItem::ExtensionKey(extension()->id())); | 115 MenuItem::ExtensionKey(extension()->id())); |
| 111 return true; | 116 return RespondNow(NoArguments()); |
| 112 } | 117 } |
| 113 | 118 |
| 114 } // namespace extensions | 119 } // namespace extensions |
| OLD | NEW |