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);
+}