Chromium Code Reviews| 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..eb642bd1e26d269dfe6273098e49a66c63190316 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,22 +17,26 @@ namespace context_menus_api_helpers { |
| namespace { |
| -template<typename PropertyWithEnumT> |
| +template <typename PropertyWithEnumT> |
|
Fady Samuel
2014/03/05 17:54:10
Why add this space?
lazyboy
2014/03/05 18:27:59
git cl format did this.
|
| 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.extension_id)); |
|
Fady Samuel
2014/03/05 17:54:10
As before, this really should take in an extension
lazyboy
2014/03/05 18:27:59
Done.
|
| if (property.parent_id->as_integer) |
| parent_id->uid = *property.parent_id->as_integer; |
| else if (property.parent_id->as_string) |
| parent_id->string_uid = *property.parent_id->as_string; |
| else |
| NOTREACHED(); |
| + |
| + if (key.webview_instance_id) |
| + parent_id->extension_key.webview_instance_id = key.webview_instance_id; |
|
Fady Samuel
2014/03/05 17:54:10
If MenuItem::Id took in an extension_key instead,
lazyboy
2014/03/05 18:27:59
Done.
|
| + |
| return parent_id.Pass(); |
| } |
| @@ -86,6 +90,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 +125,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 +134,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 +147,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 +189,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 +203,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 +215,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 +271,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 +285,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 +305,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; |
| } |