| Index: chrome/browser/extensions/api/context_menus/context_menus_api_helpers.h
|
| diff --git a/chrome/browser/extensions/api/context_menus/context_menus_api_helpers.h b/chrome/browser/extensions/api/context_menus/context_menus_api_helpers.h
|
| index a2c09d8457b1ec47a5b73ad566d7198be6d69559..773bd6249014a07855af73cdd2f518564e0e2e9c 100644
|
| --- a/chrome/browser/extensions/api/context_menus/context_menus_api_helpers.h
|
| +++ b/chrome/browser/extensions/api/context_menus/context_menus_api_helpers.h
|
| @@ -17,16 +17,16 @@ namespace context_menus_api_helpers {
|
|
|
| namespace {
|
|
|
| -template<typename PropertyWithEnumT>
|
| +template <typename PropertyWithEnumT>
|
| scoped_ptr<extensions::MenuItem::Id> GetParentId(
|
| const PropertyWithEnumT& property,
|
| bool is_off_the_record,
|
| - std::string extension_id) {
|
| + const MenuItem::ExtensionKey& key) {
|
| if (!property.parent_id)
|
| return scoped_ptr<extensions::MenuItem::Id>();
|
|
|
| scoped_ptr<extensions::MenuItem::Id> parent_id(
|
| - new extensions::MenuItem::Id(is_off_the_record, extension_id));
|
| + new extensions::MenuItem::Id(is_off_the_record, key));
|
| if (property.parent_id->as_integer)
|
| parent_id->uid = *property.parent_id->as_integer;
|
| else if (property.parent_id->as_string)
|
| @@ -86,6 +86,7 @@ MenuItem::ContextList GetContexts(const PropertyWithEnumT& property) {
|
| contexts.Add(extensions::MenuItem::FRAME);
|
| break;
|
| case PropertyWithEnumT::CONTEXTS_TYPE_LAUNCHER:
|
| + // Not available for <webview>.
|
| contexts.Add(extensions::MenuItem::LAUNCHER);
|
| break;
|
| case PropertyWithEnumT::CONTEXTS_TYPE_NONE:
|
| @@ -120,6 +121,7 @@ bool CreateMenuItem(const PropertyWithEnumT& create_properties,
|
| const Extension* extension,
|
| const MenuItem::Id& item_id,
|
| std::string* error) {
|
| + bool is_webview = item_id.extension_key.webview_instance_id != 0;
|
| MenuManager* menu_manager = MenuManager::Get(profile);
|
|
|
| if (menu_manager->GetItemById(item_id)) {
|
| @@ -128,7 +130,7 @@ bool CreateMenuItem(const PropertyWithEnumT& create_properties,
|
| return false;
|
| }
|
|
|
| - if (BackgroundInfo::HasLazyBackgroundPage(extension) &&
|
| + if (!is_webview && BackgroundInfo::HasLazyBackgroundPage(extension) &&
|
| create_properties.onclick.get()) {
|
| *error = kOnclickDisallowedError;
|
| return false;
|
| @@ -141,9 +143,12 @@ bool CreateMenuItem(const PropertyWithEnumT& create_properties,
|
| else
|
| contexts.Add(MenuItem::PAGE);
|
|
|
| - if (contexts.Contains(MenuItem::LAUNCHER) && !extension->is_platform_app()) {
|
| - *error = kLauncherNotAllowedError;
|
| - return false;
|
| + if (contexts.Contains(MenuItem::LAUNCHER)) {
|
| + // Launcher item is not allowed for <webview>.
|
| + if (!extension->is_platform_app() || is_webview) {
|
| + *error = kLauncherNotAllowedError;
|
| + return false;
|
| + }
|
| }
|
|
|
| // Title.
|
| @@ -180,9 +185,8 @@ bool CreateMenuItem(const PropertyWithEnumT& create_properties,
|
|
|
| // Parent id.
|
| bool success = true;
|
| - scoped_ptr<MenuItem::Id> parent_id(GetParentId(create_properties,
|
| - profile->IsOffTheRecord(),
|
| - extension->id()));
|
| + scoped_ptr<MenuItem::Id> parent_id(GetParentId(
|
| + create_properties, profile->IsOffTheRecord(), item_id.extension_key));
|
| if (parent_id.get()) {
|
| MenuItem* parent = GetParent(*parent_id, menu_manager, error);
|
| if (!parent)
|
| @@ -195,7 +199,7 @@ bool CreateMenuItem(const PropertyWithEnumT& create_properties,
|
| if (!success)
|
| return false;
|
|
|
| - menu_manager->WriteToStorage(extension);
|
| + menu_manager->WriteToStorage(extension, item_id.extension_key);
|
| return true;
|
| }
|
|
|
| @@ -207,6 +211,7 @@ bool UpdateMenuItem(const PropertyWithEnumT& update_properties,
|
| const MenuItem::Id& item_id,
|
| std::string* error) {
|
| bool radio_item_updated = false;
|
| + bool is_webview = item_id.extension_key.webview_instance_id != 0;
|
| MenuManager* menu_manager = MenuManager::Get(profile);
|
|
|
| MenuItem* item = menu_manager->GetItemById(item_id);
|
| @@ -262,10 +267,12 @@ bool UpdateMenuItem(const PropertyWithEnumT& update_properties,
|
| if (update_properties.contexts.get()) {
|
| contexts = GetContexts(update_properties);
|
|
|
| - if (contexts.Contains(MenuItem::LAUNCHER) &&
|
| - !extension->is_platform_app()) {
|
| - *error = kLauncherNotAllowedError;
|
| - return false;
|
| + if (contexts.Contains(MenuItem::LAUNCHER)) {
|
| + // Launcher item is not allowed for <webview>.
|
| + if (!extension->is_platform_app() || is_webview) {
|
| + *error = kLauncherNotAllowedError;
|
| + return false;
|
| + }
|
| }
|
|
|
| if (contexts != item->contexts())
|
| @@ -274,9 +281,8 @@ bool UpdateMenuItem(const PropertyWithEnumT& update_properties,
|
|
|
| // Parent id.
|
| MenuItem* parent = NULL;
|
| - scoped_ptr<MenuItem::Id> parent_id(GetParentId(update_properties,
|
| - profile->IsOffTheRecord(),
|
| - extension->id()));
|
| + scoped_ptr<MenuItem::Id> parent_id(GetParentId(
|
| + update_properties, profile->IsOffTheRecord(), item_id.extension_key));
|
| if (parent_id.get()) {
|
| MenuItem* parent = GetParent(*parent_id, menu_manager, error);
|
| if (!parent || !menu_manager->ChangeParent(item->id(), &parent->id()))
|
| @@ -295,7 +301,7 @@ bool UpdateMenuItem(const PropertyWithEnumT& update_properties,
|
| if (!parent && radio_item_updated && !menu_manager->ItemUpdated(item->id()))
|
| return false;
|
|
|
| - menu_manager->WriteToStorage(extension);
|
| + menu_manager->WriteToStorage(extension, item_id.extension_key);
|
| return true;
|
| }
|
|
|
|
|