diff options
author | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-22 22:31:42 +0000 |
---|---|---|
committer | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-04-22 22:31:42 +0000 |
commit | e6c798140918c7f2dac77528fb13ed94b14979f4 (patch) | |
tree | ccb440c0ffc62c526e5f1cc62932f4af8ab66f1e | |
parent | 03b1575eb9349ad2c7563ea0caef88da0906537e (diff) | |
download | chromium_src-e6c798140918c7f2dac77528fb13ed94b14979f4.zip chromium_src-e6c798140918c7f2dac77528fb13ed94b14979f4.tar.gz chromium_src-e6c798140918c7f2dac77528fb13ed94b14979f4.tar.bz2 |
Always enable copy-link-address in context menu.
Added a new field into ContextMenuParam only for this purpose. The new field
won't be validated in frontend processes. In this way, even if renderer
processes are going to mad, the frontend would be OK if the frontend uses this
new field only for copying into the clipboard.
Fix checked in for Shinichiro Hamaji
Original code review: http://codereview.chromium.org/91002
BUG=2725
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14256 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/renderer_host/render_view_host.cc | 2 | ||||
-rw-r--r-- | chrome/browser/tab_contents/render_view_context_menu.cc | 6 | ||||
-rw-r--r-- | chrome/common/render_messages.h | 2 | ||||
-rw-r--r-- | chrome/renderer/render_view.cc | 1 | ||||
-rw-r--r-- | webkit/glue/context_menu.h | 4 |
5 files changed, 13 insertions, 2 deletions
diff --git a/chrome/browser/renderer_host/render_view_host.cc b/chrome/browser/renderer_host/render_view_host.cc index e50c032..aa1b78c 100644 --- a/chrome/browser/renderer_host/render_view_host.cc +++ b/chrome/browser/renderer_host/render_view_host.cc @@ -1048,6 +1048,8 @@ void RenderViewHost::OnMsgContextMenu(const ContextMenuParams& params) { const int renderer_id = process()->pid(); RendererSecurityPolicy* policy = RendererSecurityPolicy::GetInstance(); + // We don't validate |unfiltered_link_url| so that this field can be used + // when users want to copy the original link URL. FilterURL(policy, renderer_id, &validated_params.link_url); FilterURL(policy, renderer_id, &validated_params.image_url); FilterURL(policy, renderer_id, &validated_params.page_url); diff --git a/chrome/browser/tab_contents/render_view_context_menu.cc b/chrome/browser/tab_contents/render_view_context_menu.cc index 698a65a..c75653c 100644 --- a/chrome/browser/tab_contents/render_view_context_menu.cc +++ b/chrome/browser/tab_contents/render_view_context_menu.cc @@ -220,9 +220,11 @@ bool RenderViewContextMenu::IsItemCommandEnabled(int id) const { case IDS_CONTENT_CONTEXT_OPENLINKNEWTAB: case IDS_CONTENT_CONTEXT_OPENLINKNEWWINDOW: - case IDS_CONTENT_CONTEXT_COPYLINKLOCATION: return params_.link_url.is_valid(); + case IDS_CONTENT_CONTEXT_COPYLINKLOCATION: + return params_.unfiltered_link_url.is_valid(); + case IDS_CONTENT_CONTEXT_SAVELINKAS: return params_.link_url.is_valid() && URLRequest::IsHandledURL(params_.link_url); @@ -377,7 +379,7 @@ void RenderViewContextMenu::ExecuteItemCommand(int id) { } case IDS_CONTENT_CONTEXT_COPYLINKLOCATION: - WriteURLToClipboard(params_.link_url); + WriteURLToClipboard(params_.unfiltered_link_url); break; case IDS_CONTENT_CONTEXT_COPYIMAGELOCATION: diff --git a/chrome/common/render_messages.h b/chrome/common/render_messages.h index e4743a0..624dc0b 100644 --- a/chrome/common/render_messages.h +++ b/chrome/common/render_messages.h @@ -855,6 +855,7 @@ struct ParamTraits<ContextMenuParams> { WriteParam(m, p.x); WriteParam(m, p.y); WriteParam(m, p.link_url); + WriteParam(m, p.unfiltered_link_url); WriteParam(m, p.image_url); WriteParam(m, p.page_url); WriteParam(m, p.frame_url); @@ -871,6 +872,7 @@ struct ParamTraits<ContextMenuParams> { ReadParam(m, iter, &p->x) && ReadParam(m, iter, &p->y) && ReadParam(m, iter, &p->link_url) && + ReadParam(m, iter, &p->unfiltered_link_url) && ReadParam(m, iter, &p->image_url) && ReadParam(m, iter, &p->page_url) && ReadParam(m, iter, &p->frame_url) && diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc index 56528e4..3cc2189 100644 --- a/chrome/renderer/render_view.cc +++ b/chrome/renderer/render_view.cc @@ -2034,6 +2034,7 @@ void RenderView::ShowContextMenu(WebView* webview, params.y = y; params.image_url = image_url; params.link_url = link_url; + params.unfiltered_link_url = link_url; params.page_url = page_url; params.frame_url = frame_url; params.selection_text = selection_text; diff --git a/webkit/glue/context_menu.h b/webkit/glue/context_menu.h index 099938c..32a6925 100644 --- a/webkit/glue/context_menu.h +++ b/webkit/glue/context_menu.h @@ -74,6 +74,10 @@ struct ContextMenuParams { // invoked on. GURL link_url; + // The link URL to be used ONLY for "copy link address". We don't validate + // this field in the frontend process. + GURL unfiltered_link_url; + // This is the URL of the image the context menu was invoked on. GURL image_url; |