Copy Link To Text: Replace refs in current page's URL
This CL replaces everything after the '#' if it exists in a URL to
avoid chaining multiple refs such as #anchor#:~:text=selected%20text.
(cherry picked from commit 712cbe9871eef8587ec4da37792b3387085b78be)
Bug: 1136468
Change-Id: I22583af358c1169a2b97bfad12d2e75a2d8e172c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2460797
Reviewed-by: Scott Violet <[email protected]>
Commit-Queue: John Lee <[email protected]>
Cr-Original-Commit-Position: refs/heads/master@{#815427}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2468704
Reviewed-by: John Lee <[email protected]>
Cr-Commit-Position: refs/branch-heads/4280@{#327}
Cr-Branched-From: ea420fb963f9658c9969b6513c56b8f47efa1a2a-refs/heads/master@{#812852}
diff --git a/chrome/browser/renderer_context_menu/copy_link_to_text_menu_observer.cc b/chrome/browser/renderer_context_menu/copy_link_to_text_menu_observer.cc
index 470930f..52249ce 100644
--- a/chrome/browser/renderer_context_menu/copy_link_to_text_menu_observer.cc
+++ b/chrome/browser/renderer_context_menu/copy_link_to_text_menu_observer.cc
@@ -27,7 +27,13 @@
void CopyLinkToTextMenuObserver::InitMenu(
const content::ContextMenuParams& params) {
- url_ = params.page_url;
+ if (params.page_url.has_ref()) {
+ GURL::Replacements replacements;
+ replacements.ClearRef();
+ url_ = params.page_url.ReplaceComponents(replacements);
+ } else {
+ url_ = params.page_url;
+ }
selected_text_ = params.selection_text;
proxy_->AddMenuItem(
diff --git a/chrome/browser/renderer_context_menu/copy_link_to_text_menu_observer_interactive_uitest.cc b/chrome/browser/renderer_context_menu/copy_link_to_text_menu_observer_interactive_uitest.cc
index 1f2de0fc..90cce0c9 100644
--- a/chrome/browser/renderer_context_menu/copy_link_to_text_menu_observer_interactive_uitest.cc
+++ b/chrome/browser/renderer_context_menu/copy_link_to_text_menu_observer_interactive_uitest.cc
@@ -97,3 +97,19 @@
clipboard->ReadText(ui::ClipboardBuffer::kCopyPaste, nullptr, &text);
EXPECT_EQ(base::UTF8ToUTF16("\"hello world\"\nhttp://foo.com/"), text);
}
+
+IN_PROC_BROWSER_TEST_F(CopyLinkToTextMenuObserverTest, ReplacesRefInURL) {
+ content::BrowserTestClipboardScope test_clipboard_scope;
+ content::ContextMenuParams params;
+ params.page_url = GURL("http://foo.com/#:~:text=hello%20world");
+ params.selection_text = base::UTF8ToUTF16("hello world");
+ observer()->OverrideGeneratedSelectorForTesting("hello");
+ InitMenu(params);
+ menu()->ExecuteCommand(IDC_CONTENT_CONTEXT_COPYLINKTOTEXT, 0);
+
+ ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread();
+ base::string16 text;
+ clipboard->ReadText(ui::ClipboardBuffer::kCopyPaste, nullptr, &text);
+ EXPECT_EQ(base::UTF8ToUTF16("\"hello world\"\nhttp://foo.com/#:~:text=hello"),
+ text);
+}