summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-22 22:31:42 +0000
committerbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-22 22:31:42 +0000
commite6c798140918c7f2dac77528fb13ed94b14979f4 (patch)
treeccb440c0ffc62c526e5f1cc62932f4af8ab66f1e
parent03b1575eb9349ad2c7563ea0caef88da0906537e (diff)
downloadchromium_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.cc2
-rw-r--r--chrome/browser/tab_contents/render_view_context_menu.cc6
-rw-r--r--chrome/common/render_messages.h2
-rw-r--r--chrome/renderer/render_view.cc1
-rw-r--r--webkit/glue/context_menu.h4
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;