<webview>: Context menu API implementation CL.
Very Similar to chrome.contextMenus API, only applies to the <webview> that it is called upon.
var w = document.querySelector('webview');
w.contextMenus.OnClicked.addListener(function() { .. });
w.contextMenus.create({id: '1', title: 'one'});
w.contextMenus.update({id: '2', title: 'new', onclick: ...});
w.contextMenus.remove('1');
w.contextMenus.removeAll('1');
This CL adds the actual implementation to the previously exposed skeleton API.
Docs/snippets here:
https://docs.google.com/a/chromium.org/document/d/1AoMD6kF8ui1dikzTrwK-weVHegSqQaLV2zx4xJSh_fQ/edit
[email protected]
BUG=140315
Test=Can be tested inside a chrome apps <webview>.
<webview>.contextMenus.create(...) to create custom context menu items.
The API is similar to chrome.contextMenus API. Similarly .update,
.remove, .removeAll is also supported.
Click event handler can be specified as
<webview>.contextMenus.onClick.addListener(...).
Review URL: https://codereview.chromium.org/186213003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@255917 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/chrome/browser/extensions/context_menu_matcher.cc b/chrome/browser/extensions/context_menu_matcher.cc
index 396352af..0e7adbd 100644
--- a/chrome/browser/extensions/context_menu_matcher.cc
+++ b/chrome/browser/extensions/context_menu_matcher.cc
@@ -28,7 +28,7 @@
}
void ContextMenuMatcher::AppendExtensionItems(
- const std::string& extension_id,
+ const MenuItem::ExtensionKey& extension_key,
const base::string16& selection_text,
int* index) {
DCHECK_GE(*index, 0);
@@ -40,8 +40,8 @@
const Extension* extension = NULL;
MenuItem::List items;
bool can_cross_incognito;
- if (!GetRelevantExtensionTopLevelItems(extension_id, &extension,
- &can_cross_incognito, items))
+ if (!GetRelevantExtensionTopLevelItems(
+ extension_key, &extension, &can_cross_incognito, items))
return;
if (items.empty())
@@ -86,7 +86,7 @@
RecursivelyAppendExtensionItems(submenu_items, can_cross_incognito,
selection_text, submenu, index);
}
- SetExtensionIcon(extension_id);
+ SetExtensionIcon(extension_key.extension_id);
}
}
@@ -96,13 +96,13 @@
}
base::string16 ContextMenuMatcher::GetTopLevelContextMenuTitle(
- const std::string& extension_id,
+ const MenuItem::ExtensionKey& extension_key,
const base::string16& selection_text) {
const Extension* extension = NULL;
MenuItem::List items;
bool can_cross_incognito;
- GetRelevantExtensionTopLevelItems(extension_id, &extension,
- &can_cross_incognito, items);
+ GetRelevantExtensionTopLevelItems(
+ extension_key, &extension, &can_cross_incognito, items);
base::string16 title;
@@ -144,20 +144,20 @@
}
bool ContextMenuMatcher::GetRelevantExtensionTopLevelItems(
- const std::string& extension_id,
+ const MenuItem::ExtensionKey& extension_key,
const Extension** extension,
bool* can_cross_incognito,
MenuItem::List& items) {
ExtensionService* service =
extensions::ExtensionSystem::Get(profile_)->extension_service();
- *extension = service->GetExtensionById(extension_id, false);
+ *extension = service->GetExtensionById(extension_key.extension_id, false);
if (!*extension)
return false;
// Find matching items.
MenuManager* manager = MenuManager::Get(profile_);
- const MenuItem::List* all_items = manager->MenuItems(extension_id);
+ const MenuItem::List* all_items = manager->MenuItems(extension_key);
if (!all_items || all_items->empty())
return false;