diff options
author | dcheng@chromium.org <dcheng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-13 13:04:16 +0000 |
---|---|---|
committer | dcheng@chromium.org <dcheng@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-13 13:04:16 +0000 |
commit | bc25c4d71b8838e5959ea4bdebcafbde36686a8a (patch) | |
tree | 31eb1d8841fb2c091e321d95c4c037bb02bcebe8 | |
parent | 7ec1a03f4e2a0b3f52d9f4a93d7afbf9aa65c04a (diff) | |
download | chromium_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.cc | 2 | ||||
-rw-r--r-- | chrome/browser/ui/panels/panel_extension_browsertest.cc | 111 |
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. |