summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordcheng@chromium.org <dcheng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-13 13:04:16 +0000
committerdcheng@chromium.org <dcheng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-13 13:04:16 +0000
commitbc25c4d71b8838e5959ea4bdebcafbde36686a8a (patch)
tree31eb1d8841fb2c091e321d95c4c037bb02bcebe8
parent7ec1a03f4e2a0b3f52d9f4a93d7afbf9aa65c04a (diff)
downloadchromium_src-bc25c4d71b8838e5959ea4bdebcafbde36686a8a.zip
chromium_src-bc25c4d71b8838e5959ea4bdebcafbde36686a8a.tar.gz
chromium_src-bc25c4d71b8838e5959ea4bdebcafbde36686a8a.tar.bz2
Allow link-related context menu items in panels.
BUG=155610 Review URL: https://chromiumcodereview.appspot.com/12457020 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@187841 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/tab_contents/render_view_context_menu.cc2
-rw-r--r--chrome/browser/ui/panels/panel_extension_browsertest.cc111
2 files changed, 80 insertions, 33 deletions
diff --git a/chrome/browser/tab_contents/render_view_context_menu.cc b/chrome/browser/tab_contents/render_view_context_menu.cc
index 0ff2463..87b5b3f 100644
--- a/chrome/browser/tab_contents/render_view_context_menu.cc
+++ b/chrome/browser/tab_contents/render_view_context_menu.cc
@@ -596,6 +596,8 @@ void RenderViewContextMenu::AppendPanelItems() {
AppendEditableItems();
else if (has_selection)
AppendCopyItem();
+ else if (params_.unfiltered_link_url.is_valid())
+ AppendLinkItems();
// Only add extension items from this extension.
int index = 0;
diff --git a/chrome/browser/ui/panels/panel_extension_browsertest.cc b/chrome/browser/ui/panels/panel_extension_browsertest.cc
index 4d65c0f..4644f498 100644
--- a/chrome/browser/ui/panels/panel_extension_browsertest.cc
+++ b/chrome/browser/ui/panels/panel_extension_browsertest.cc
@@ -153,47 +153,91 @@ IN_PROC_BROWSER_TEST_F(PanelExtensionBrowserTest, BasicContextMenu) {
ASSERT_TRUE(web_contents);
WebKit::WebContextMenuData data;
- content::ContextMenuParams params(data);
- params.page_url = web_contents->GetURL();
-
- // Ensure context menu isn't swallowed by WebContentsDelegate (the panel).
- EXPECT_FALSE(web_contents->GetDelegate()->HandleContextMenu(params));
// Verify basic menu contents. The basic extension does not add any
// context menu items so the panel's menu should include only the
// developer tools.
- scoped_ptr<PanelContextMenu> menu;
- menu.reset(new PanelContextMenu(web_contents, params));
- menu->Init();
- EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTELEMENT));
- EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_UNDO));
- EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_PASTE));
- EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_COPY));
- EXPECT_FALSE(menu->HasCommandWithId(IDC_BACK));
- EXPECT_FALSE(menu->HasCommandWithId(IDC_SAVE_PAGE));
+ {
+ content::ContextMenuParams params(data);
+ params.page_url = web_contents->GetURL();
+ // Ensure context menu isn't swallowed by WebContentsDelegate (the panel).
+ EXPECT_FALSE(web_contents->GetDelegate()->HandleContextMenu(params));
+
+ scoped_ptr<PanelContextMenu> menu(
+ new PanelContextMenu(web_contents, params));
+ menu->Init();
+
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTELEMENT));
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_UNDO));
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_PASTE));
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_COPY));
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_BACK));
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_SAVE_PAGE));
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_COPYLINKLOCATION));
+ }
// Verify expected menu contents for editable item.
- params.is_editable = true;
- menu.reset(new PanelContextMenu(web_contents, params));
- menu->Init();
- EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTELEMENT));
- EXPECT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_UNDO));
- EXPECT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_PASTE));
- EXPECT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_COPY));
- EXPECT_FALSE(menu->HasCommandWithId(IDC_BACK));
- EXPECT_FALSE(menu->HasCommandWithId(IDC_SAVE_PAGE));
+ {
+ content::ContextMenuParams params(data);
+ params.is_editable = true;
+ params.page_url = web_contents->GetURL();
+ // Ensure context menu isn't swallowed by WebContentsDelegate (the panel).
+ EXPECT_FALSE(web_contents->GetDelegate()->HandleContextMenu(params));
+
+ scoped_ptr<PanelContextMenu> menu(
+ new PanelContextMenu(web_contents, params));
+ menu->Init();
+
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTELEMENT));
+ EXPECT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_UNDO));
+ EXPECT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_PASTE));
+ EXPECT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_COPY));
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_BACK));
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_SAVE_PAGE));
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_COPYLINKLOCATION));
+ }
// Verify expected menu contents for text selection.
- params.is_editable = false;
- params.selection_text = ASCIIToUTF16("Select me");
- menu.reset(new PanelContextMenu(web_contents, params));
- menu->Init();
- EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTELEMENT));
- EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_UNDO));
- EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_PASTE));
- EXPECT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_COPY));
- EXPECT_FALSE(menu->HasCommandWithId(IDC_BACK));
- EXPECT_FALSE(menu->HasCommandWithId(IDC_SAVE_PAGE));
+ {
+ content::ContextMenuParams params(data);
+ params.page_url = web_contents->GetURL();
+ params.selection_text = ASCIIToUTF16("Select me");
+ // Ensure context menu isn't swallowed by WebContentsDelegate (the panel).
+ EXPECT_FALSE(web_contents->GetDelegate()->HandleContextMenu(params));
+
+ scoped_ptr<PanelContextMenu> menu(
+ new PanelContextMenu(web_contents, params));
+ menu->Init();
+
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTELEMENT));
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_UNDO));
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_PASTE));
+ EXPECT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_COPY));
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_BACK));
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_SAVE_PAGE));
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_COPYLINKLOCATION));
+ }
+
+ // Verify expected menu contexts for a link.
+ {
+ content::ContextMenuParams params(data);
+ params.page_url = web_contents->GetURL();
+ params.unfiltered_link_url = GURL("http://google.com/");
+ // Ensure context menu isn't swallowed by WebContentsDelegate (the panel).
+ EXPECT_FALSE(web_contents->GetDelegate()->HandleContextMenu(params));
+
+ scoped_ptr<PanelContextMenu> menu(
+ new PanelContextMenu(web_contents, params));
+ menu->Init();
+
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_INSPECTELEMENT));
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_UNDO));
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_PASTE));
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_COPY));
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_BACK));
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_SAVE_PAGE));
+ EXPECT_TRUE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_COPYLINKLOCATION));
+ }
}
IN_PROC_BROWSER_TEST_F(PanelExtensionBrowserTest, CustomContextMenu) {
@@ -232,6 +276,7 @@ IN_PROC_BROWSER_TEST_F(PanelExtensionBrowserTest, CustomContextMenu) {
EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_COPY));
EXPECT_FALSE(menu->HasCommandWithId(IDC_BACK));
EXPECT_FALSE(menu->HasCommandWithId(IDC_SAVE_PAGE));
+ EXPECT_FALSE(menu->HasCommandWithId(IDC_CONTENT_CONTEXT_COPYLINKLOCATION));
// Execute the extension's custom menu item and wait for the extension's
// script to tell us its onclick fired.