| 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..0f661658fd2d204eaf9f9d753acf99534c818bf8 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,9 +17,10 @@ namespace context_menus_api_helpers {
|
|
|
| namespace {
|
|
|
| -template<typename PropertyWithEnumT>
|
| +template <typename PropertyWithEnumT>
|
| scoped_ptr<extensions::MenuItem::Id> GetParentId(
|
| const PropertyWithEnumT& property,
|
| + int webview_instance_id,
|
| bool is_off_the_record,
|
| std::string extension_id) {
|
| if (!property.parent_id)
|
| @@ -33,6 +34,10 @@ scoped_ptr<extensions::MenuItem::Id> GetParentId(
|
| parent_id->string_uid = *property.parent_id->as_string;
|
| else
|
| NOTREACHED();
|
| +
|
| + if (webview_instance_id)
|
| + parent_id->webview_instance_id = webview_instance_id;
|
| +
|
| return parent_id.Pass();
|
| }
|
|
|
| @@ -86,6 +91,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 +126,7 @@ bool CreateMenuItem(const PropertyWithEnumT& create_properties,
|
| const Extension* extension,
|
| const MenuItem::Id& item_id,
|
| std::string* error) {
|
| + bool is_webview = item_id.webview_instance_id != 0;
|
| MenuManager* menu_manager = MenuManager::Get(profile);
|
|
|
| if (menu_manager->GetItemById(item_id)) {
|
| @@ -128,7 +135,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 +148,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.
|
| @@ -181,6 +191,7 @@ bool CreateMenuItem(const PropertyWithEnumT& create_properties,
|
| // Parent id.
|
| bool success = true;
|
| scoped_ptr<MenuItem::Id> parent_id(GetParentId(create_properties,
|
| + item_id.webview_instance_id,
|
| profile->IsOffTheRecord(),
|
| extension->id()));
|
| if (parent_id.get()) {
|
| @@ -207,6 +218,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.webview_instance_id != 0;
|
| MenuManager* menu_manager = MenuManager::Get(profile);
|
|
|
| MenuItem* item = menu_manager->GetItemById(item_id);
|
| @@ -262,10 +274,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())
|
| @@ -275,6 +289,7 @@ bool UpdateMenuItem(const PropertyWithEnumT& update_properties,
|
| // Parent id.
|
| MenuItem* parent = NULL;
|
| scoped_ptr<MenuItem::Id> parent_id(GetParentId(update_properties,
|
| + item_id.webview_instance_id,
|
| profile->IsOffTheRecord(),
|
| extension->id()));
|
| if (parent_id.get()) {
|
|
|