Commit de2b2888 authored by John Lee's avatar John Lee Committed by Commit Bot

Copy Link to Text: Hide menu item on Extension files, such as PDF viewer

Fixed: 1145715
Change-Id: I2b5a6660b2dd09a05c24e252df384f01fe3ee49d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2541746
Commit-Queue: John Lee <johntlee@chromium.org>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Cr-Commit-Position: refs/heads/master@{#828862}
parent 4b90c9dd
......@@ -14,6 +14,7 @@
#include "content/public/browser/context_menu_params.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/web_contents.h"
#include "extensions/browser/process_manager.h"
#include "ui/base/clipboard/scoped_clipboard_writer.h"
#include "ui/base/data_transfer_policy/data_transfer_endpoint.h"
#include "ui/base/l10n/l10n_util.h"
......@@ -22,6 +23,21 @@ namespace {
constexpr char kTextFragmentUrlClassifier[] = "#:~:text=";
}
// static
std::unique_ptr<CopyLinkToTextMenuObserver> CopyLinkToTextMenuObserver::Create(
RenderViewContextMenuProxy* proxy) {
// WebContents can be null in tests.
content::WebContents* web_contents = proxy->GetWebContents();
if (web_contents && extensions::ProcessManager::Get(
proxy->GetWebContents()->GetBrowserContext())
->GetExtensionForWebContents(web_contents)) {
// Do not show menu item for extensions, such as the PDF viewer.
return nullptr;
}
return base::WrapUnique(new CopyLinkToTextMenuObserver(proxy));
}
CopyLinkToTextMenuObserver::CopyLinkToTextMenuObserver(
RenderViewContextMenuProxy* proxy)
: proxy_(proxy) {}
......
......@@ -19,7 +19,9 @@ class DataTransferEndpoint;
// to the selected text to the user's clipboard.
class CopyLinkToTextMenuObserver : public RenderViewContextMenuObserver {
public:
explicit CopyLinkToTextMenuObserver(RenderViewContextMenuProxy* proxy);
static std::unique_ptr<CopyLinkToTextMenuObserver> Create(
RenderViewContextMenuProxy* proxy);
CopyLinkToTextMenuObserver(const CopyLinkToTextMenuObserver&) = delete;
CopyLinkToTextMenuObserver& operator=(const CopyLinkToTextMenuObserver&) =
delete;
......@@ -38,6 +40,7 @@ class CopyLinkToTextMenuObserver : public RenderViewContextMenuObserver {
void OverrideGeneratedSelectorForTesting(const std::string& selector);
private:
explicit CopyLinkToTextMenuObserver(RenderViewContextMenuProxy* proxy);
mojo::Remote<blink::mojom::TextFragmentSelectorProducer> remote_;
RenderViewContextMenuProxy* proxy_;
GURL url_;
......
......@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/extensions/extension_browsertest.h"
#include "chrome/browser/renderer_context_menu/copy_link_to_text_menu_observer.h"
#include "base/macros.h"
......@@ -20,12 +21,13 @@
namespace {
class CopyLinkToTextMenuObserverTest : public InProcessBrowserTest {
class CopyLinkToTextMenuObserverTest : public extensions::ExtensionBrowserTest {
public:
CopyLinkToTextMenuObserverTest();
void SetUp() override { InProcessBrowserTest::SetUp(); }
void SetUpOnMainThread() override {
extensions::ExtensionBrowserTest::SetUpOnMainThread();
Reset(false);
host_resolver()->AddRule("*", "127.0.0.1");
......@@ -42,7 +44,7 @@ class CopyLinkToTextMenuObserverTest : public InProcessBrowserTest {
void Reset(bool incognito) {
menu_ = std::make_unique<MockRenderViewContextMenu>(incognito);
observer_ = std::make_unique<CopyLinkToTextMenuObserver>(menu_.get());
observer_ = CopyLinkToTextMenuObserver::Create(menu_.get());
menu_->SetObserver(observer_.get());
}
......@@ -155,3 +157,17 @@ IN_PROC_BROWSER_TEST_F(CopyLinkToTextMenuObserverTest,
clipboard->ReadText(ui::ClipboardBuffer::kCopyPaste, nullptr, &text);
EXPECT_EQ(base::UTF8ToUTF16("\"hello world\"\n" + main_url.spec()), text);
}
IN_PROC_BROWSER_TEST_F(CopyLinkToTextMenuObserverTest, HiddenForExtensions) {
const extensions::Extension* extension =
LoadExtension(test_data_dir_.AppendASCII("simple_with_file"));
ui_test_utils::NavigateToURL(browser(),
extension->GetResourceURL("file.html"));
content::WebContents* web_contents =
browser()->tab_strip_model()->GetActiveWebContents();
menu()->set_web_contents(web_contents);
std::unique_ptr<CopyLinkToTextMenuObserver> observer =
CopyLinkToTextMenuObserver::Create(menu());
EXPECT_EQ(nullptr, observer);
}
......@@ -1578,9 +1578,11 @@ void RenderViewContextMenu::AppendCopyItem() {
}
void RenderViewContextMenu::AppendCopyLinkToTextItem() {
if (!copy_link_to_text_menu_observer_) {
copy_link_to_text_menu_observer_ =
std::make_unique<CopyLinkToTextMenuObserver>(this);
if (copy_link_to_text_menu_observer_)
return;
copy_link_to_text_menu_observer_ = CopyLinkToTextMenuObserver::Create(this);
if (copy_link_to_text_menu_observer_) {
observers_.AddObserver(copy_link_to_text_menu_observer_.get());
copy_link_to_text_menu_observer_->InitMenu(params_);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment