| OLD | NEW |
| 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/browser/extensions/extension_context_menu_api.h" | 5 #include "chrome/browser/extensions/extension_context_menu_api.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/values.h" | 9 #include "base/values.h" |
| 10 #include "base/string_number_conversions.h" | 10 #include "base/string_number_conversions.h" |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 167 &target_url_patterns)) | 167 &target_url_patterns)) |
| 168 return false; | 168 return false; |
| 169 | 169 |
| 170 if (!target_url_patterns.is_empty()) { | 170 if (!target_url_patterns.is_empty()) { |
| 171 item->set_target_url_patterns(target_url_patterns); | 171 item->set_target_url_patterns(target_url_patterns); |
| 172 } | 172 } |
| 173 | 173 |
| 174 return true; | 174 return true; |
| 175 } | 175 } |
| 176 | 176 |
| 177 | |
| 178 bool ExtensionContextMenuFunction::GetParent( | 177 bool ExtensionContextMenuFunction::GetParent( |
| 179 const DictionaryValue& properties, | 178 const DictionaryValue& properties, |
| 180 const ExtensionMenuManager& manager, | 179 const ExtensionMenuManager& manager, |
| 181 ExtensionMenuItem** result) { | 180 ExtensionMenuItem** result) { |
| 182 if (!properties.HasKey(kParentIdKey)) | 181 if (!properties.HasKey(kParentIdKey)) |
| 183 return true; | 182 return true; |
| 184 ExtensionMenuItem::Id parent_id(extension_id(), 0); | 183 ExtensionMenuItem::Id parent_id(profile(), extension_id(), 0); |
| 185 if (properties.HasKey(kParentIdKey) && | 184 if (properties.HasKey(kParentIdKey) && |
| 186 !properties.GetInteger(kParentIdKey, &parent_id.second)) | 185 !properties.GetInteger(kParentIdKey, &parent_id.uid)) |
| 187 return false; | 186 return false; |
| 188 | 187 |
| 189 ExtensionMenuItem* parent = manager.GetItemById(parent_id); | 188 ExtensionMenuItem* parent = manager.GetItemById(parent_id); |
| 190 if (!parent) { | 189 if (!parent) { |
| 191 error_ = "Cannot find menu item with id " + | 190 error_ = "Cannot find menu item with id " + |
| 192 base::IntToString(parent_id.second); | 191 base::IntToString(parent_id.uid); |
| 193 return false; | 192 return false; |
| 194 } | 193 } |
| 195 if (parent->type() != ExtensionMenuItem::NORMAL) { | 194 if (parent->type() != ExtensionMenuItem::NORMAL) { |
| 196 error_ = kParentsMustBeNormalError; | 195 error_ = kParentsMustBeNormalError; |
| 197 return false; | 196 return false; |
| 198 } | 197 } |
| 199 *result = parent; | 198 *result = parent; |
| 200 return true; | 199 return true; |
| 201 } | 200 } |
| 202 | 201 |
| 203 bool CreateContextMenuFunction::RunImpl() { | 202 bool CreateContextMenuFunction::RunImpl() { |
| 204 DictionaryValue* properties; | 203 DictionaryValue* properties; |
| 205 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &properties)); | 204 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(0, &properties)); |
| 206 EXTENSION_FUNCTION_VALIDATE(properties != NULL); | 205 EXTENSION_FUNCTION_VALIDATE(properties != NULL); |
| 207 | 206 |
| 208 ExtensionMenuItem::Id id(extension_id(), 0); | 207 ExtensionMenuItem::Id id(profile(), extension_id(), 0); |
| 209 EXTENSION_FUNCTION_VALIDATE(properties->GetInteger(kGeneratedIdKey, | 208 EXTENSION_FUNCTION_VALIDATE(properties->GetInteger(kGeneratedIdKey, |
| 210 &id.second)); | 209 &id.uid)); |
| 211 std::string title; | 210 std::string title; |
| 212 if (properties->HasKey(kTitleKey) && | 211 if (properties->HasKey(kTitleKey) && |
| 213 !properties->GetString(kTitleKey, &title)) | 212 !properties->GetString(kTitleKey, &title)) |
| 214 return false; | 213 return false; |
| 215 | 214 |
| 216 ExtensionMenuManager* menu_manager = | 215 ExtensionMenuManager* menu_manager = |
| 217 profile()->GetExtensionsService()->menu_manager(); | 216 profile()->GetExtensionsService()->menu_manager(); |
| 218 | 217 |
| 219 ExtensionMenuItem::ContextList contexts(ExtensionMenuItem::PAGE); | 218 ExtensionMenuItem::ContextList contexts(ExtensionMenuItem::PAGE); |
| 220 if (!ParseContexts(*properties, kContextsKey, &contexts)) | 219 if (!ParseContexts(*properties, kContextsKey, &contexts)) |
| (...skipping 13 matching lines...) Expand all Loading... |
| 234 return false; | 233 return false; |
| 235 | 234 |
| 236 scoped_ptr<ExtensionMenuItem> item( | 235 scoped_ptr<ExtensionMenuItem> item( |
| 237 new ExtensionMenuItem(id, title, checked, type, contexts)); | 236 new ExtensionMenuItem(id, title, checked, type, contexts)); |
| 238 | 237 |
| 239 if (!SetURLPatterns(*properties, item.get())) | 238 if (!SetURLPatterns(*properties, item.get())) |
| 240 return false; | 239 return false; |
| 241 | 240 |
| 242 bool success = true; | 241 bool success = true; |
| 243 if (properties->HasKey(kParentIdKey)) { | 242 if (properties->HasKey(kParentIdKey)) { |
| 244 ExtensionMenuItem::Id parent_id(extension_id(), 0); | 243 ExtensionMenuItem::Id parent_id(profile(), extension_id(), 0); |
| 245 EXTENSION_FUNCTION_VALIDATE(properties->GetInteger(kParentIdKey, | 244 EXTENSION_FUNCTION_VALIDATE(properties->GetInteger(kParentIdKey, |
| 246 &parent_id.second)); | 245 &parent_id.uid)); |
| 247 ExtensionMenuItem* parent = menu_manager->GetItemById(parent_id); | 246 ExtensionMenuItem* parent = menu_manager->GetItemById(parent_id); |
| 248 if (!parent) { | 247 if (!parent) { |
| 249 error_ = ExtensionErrorUtils::FormatErrorMessage( | 248 error_ = ExtensionErrorUtils::FormatErrorMessage( |
| 250 kCannotFindItemError, base::IntToString(parent_id.second)); | 249 kCannotFindItemError, base::IntToString(parent_id.uid)); |
| 251 return false; | 250 return false; |
| 252 } | 251 } |
| 253 if (parent->type() != ExtensionMenuItem::NORMAL) { | 252 if (parent->type() != ExtensionMenuItem::NORMAL) { |
| 254 error_ = kParentsMustBeNormalError; | 253 error_ = kParentsMustBeNormalError; |
| 255 return false; | 254 return false; |
| 256 } | 255 } |
| 257 success = menu_manager->AddChildItem(parent_id, item.release()); | 256 success = menu_manager->AddChildItem(parent_id, item.release()); |
| 258 } else { | 257 } else { |
| 259 success = menu_manager->AddContextItem(GetExtension(), item.release()); | 258 success = menu_manager->AddContextItem(GetExtension(), item.release()); |
| 260 } | 259 } |
| 261 | 260 |
| 262 if (!success) | 261 if (!success) |
| 263 return false; | 262 return false; |
| 264 | 263 |
| 265 return true; | 264 return true; |
| 266 } | 265 } |
| 267 | 266 |
| 268 bool UpdateContextMenuFunction::RunImpl() { | 267 bool UpdateContextMenuFunction::RunImpl() { |
| 269 ExtensionMenuItem::Id item_id(extension_id(), 0); | 268 ExtensionMenuItem::Id item_id(profile(), extension_id(), 0); |
| 270 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &item_id.second)); | 269 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &item_id.uid)); |
| 271 | 270 |
| 272 ExtensionsService* service = profile()->GetExtensionsService(); | 271 ExtensionsService* service = profile()->GetExtensionsService(); |
| 273 ExtensionMenuManager* manager = service->menu_manager(); | 272 ExtensionMenuManager* manager = service->menu_manager(); |
| 274 ExtensionMenuItem* item = manager->GetItemById(item_id); | 273 ExtensionMenuItem* item = manager->GetItemById(item_id); |
| 275 if (!item || item->extension_id() != extension_id()) { | 274 if (!item || item->extension_id() != extension_id()) { |
| 276 error_ = ExtensionErrorUtils::FormatErrorMessage( | 275 error_ = ExtensionErrorUtils::FormatErrorMessage( |
| 277 kCannotFindItemError, base::IntToString(item_id.second)); | 276 kCannotFindItemError, base::IntToString(item_id.uid)); |
| 278 return false; | 277 return false; |
| 279 } | 278 } |
| 280 | 279 |
| 281 DictionaryValue *properties = NULL; | 280 DictionaryValue *properties = NULL; |
| 282 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(1, &properties)); | 281 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(1, &properties)); |
| 283 EXTENSION_FUNCTION_VALIDATE(properties != NULL); | 282 EXTENSION_FUNCTION_VALIDATE(properties != NULL); |
| 284 | 283 |
| 285 ExtensionMenuManager* menu_manager = | 284 ExtensionMenuManager* menu_manager = |
| 286 profile()->GetExtensionsService()->menu_manager(); | 285 profile()->GetExtensionsService()->menu_manager(); |
| 287 | 286 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 326 if (parent && !menu_manager->ChangeParent(item->id(), &parent->id())) | 325 if (parent && !menu_manager->ChangeParent(item->id(), &parent->id())) |
| 327 return false; | 326 return false; |
| 328 | 327 |
| 329 if (!SetURLPatterns(*properties, item)) | 328 if (!SetURLPatterns(*properties, item)) |
| 330 return false; | 329 return false; |
| 331 | 330 |
| 332 return true; | 331 return true; |
| 333 } | 332 } |
| 334 | 333 |
| 335 bool RemoveContextMenuFunction::RunImpl() { | 334 bool RemoveContextMenuFunction::RunImpl() { |
| 336 ExtensionMenuItem::Id id(extension_id(), 0); | 335 ExtensionMenuItem::Id id(profile(), extension_id(), 0); |
| 337 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &id.second)); | 336 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(0, &id.uid)); |
| 338 ExtensionsService* service = profile()->GetExtensionsService(); | 337 ExtensionsService* service = profile()->GetExtensionsService(); |
| 339 ExtensionMenuManager* manager = service->menu_manager(); | 338 ExtensionMenuManager* manager = service->menu_manager(); |
| 340 | 339 |
| 341 ExtensionMenuItem* item = manager->GetItemById(id); | 340 ExtensionMenuItem* item = manager->GetItemById(id); |
| 342 // Ensure one extension can't remove another's menu items. | 341 // Ensure one extension can't remove another's menu items. |
| 343 if (!item || item->extension_id() != extension_id()) { | 342 if (!item || item->extension_id() != extension_id()) { |
| 344 error_ = ExtensionErrorUtils::FormatErrorMessage( | 343 error_ = ExtensionErrorUtils::FormatErrorMessage( |
| 345 kCannotFindItemError, base::IntToString(id.second)); | 344 kCannotFindItemError, base::IntToString(id.uid)); |
| 346 return false; | 345 return false; |
| 347 } | 346 } |
| 348 | 347 |
| 349 return manager->RemoveContextMenuItem(id); | 348 return manager->RemoveContextMenuItem(id); |
| 350 } | 349 } |
| 351 | 350 |
| 352 bool RemoveAllContextMenusFunction::RunImpl() { | 351 bool RemoveAllContextMenusFunction::RunImpl() { |
| 353 ExtensionsService* service = profile()->GetExtensionsService(); | 352 ExtensionsService* service = profile()->GetExtensionsService(); |
| 354 ExtensionMenuManager* manager = service->menu_manager(); | 353 ExtensionMenuManager* manager = service->menu_manager(); |
| 355 manager->RemoveAllContextItems(extension_id()); | 354 manager->RemoveAllContextItems(extension_id()); |
| 356 return true; | 355 return true; |
| 357 } | 356 } |
| OLD | NEW |