Skip to content

Commit

Permalink
[headless] Use ClipboardNonBacked instead of a HeadlessClipboard
Browse files Browse the repository at this point in the history
HeadlessClipboard used a custom implementation of ui::Clipboard that essentially did what ui::ClipboardNonBacked does now. It was created before ui::ClipboardNonBacked became available.

This CL changes HeadlessClipboard to derive from ui::ClipboardNonBacked.

Also the original HeadlessClipboard implementation was only used on Aura platforms (so no Mac), whereas the new ui::ClipboardNonBacked derived one is used consistently on all platforms.

Drive by: IWYU in h/l/b/headless_browser_impl_aura.cc

Bug: 1213221
Change-Id: I902bc389653704d868aba94f663d9308866f3d6d
Cq-Include-Trybots: luci.chromium.try:linux-headless-shell-rel
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4220477
Reviewed-by: Austin Sullivan <asully@chromium.org>
Commit-Queue: Peter Kvitek <kvitekp@chromium.org>
Reviewed-by: Andrey Kosyakov <caseq@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1101104}
  • Loading branch information
Peter Kvitek authored and Chromium LUCI CQ committed Feb 3, 2023
1 parent 9ca7593 commit 8985308
Show file tree
Hide file tree
Showing 7 changed files with 35 additions and 462 deletions.
3 changes: 0 additions & 3 deletions headless/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -386,8 +386,6 @@ component("headless_non_renderer") {
if (use_aura) {
sources += [
"lib/browser/headless_browser_impl_aura.cc",
"lib/browser/headless_clipboard.cc",
"lib/browser/headless_clipboard.h",
"lib/browser/headless_focus_client.cc",
"lib/browser/headless_focus_client.h",
"lib/browser/headless_screen.cc",
Expand Down Expand Up @@ -467,7 +465,6 @@ component("headless_non_renderer") {
"//ui/base",
"//ui/base/clipboard",
"//ui/compositor",
"//ui/compositor",
"//ui/display",
"//ui/events/devices",
"//ui/events/devices:devices",
Expand Down
8 changes: 1 addition & 7 deletions headless/lib/browser/headless_browser_impl_aura.cc
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,21 @@

#include "content/public/browser/render_widget_host_view.h"
#include "content/public/browser/web_contents.h"
#include "headless/lib/browser/headless_clipboard.h"
#include "headless/lib/browser/headless_screen.h"
#include "headless/lib/browser/headless_web_contents_impl.h"
#include "headless/lib/browser/headless_window_tree_host.h"
#include "ui/aura/env.h"
#include "ui/aura/window.h"
#include "ui/base/clipboard/clipboard.h"
#include "ui/display/screen.h"
#include "ui/events/devices/device_data_manager.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/native_widget_types.h"

namespace headless {

void HeadlessBrowserImpl::PlatformInitialize() {
HeadlessScreen* screen = HeadlessScreen::Create(options()->window_size);
display::Screen::SetScreenInstance(screen);

// TODO(eseckler): We shouldn't share clipboard contents across WebContents
// (or at least BrowserContexts).
ui::Clipboard::SetClipboardForCurrentThread(
std::make_unique<HeadlessClipboard>());
}

void HeadlessBrowserImpl::PlatformStart() {
Expand Down
21 changes: 21 additions & 0 deletions headless/lib/browser/headless_browser_main_parts.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

#include "headless/lib/browser/headless_browser_main_parts.h"

#include <memory.h>
#include <stdio.h>

#include "base/debug/alias.h"
Expand All @@ -16,6 +17,8 @@
#include "headless/lib/browser/headless_screen.h"
#include "headless/lib/browser/headless_select_file_dialog_factory.h"
#include "headless/public/switches.h"
#include "ui/base/clipboard/clipboard.h"
#include "ui/base/clipboard/clipboard_non_backed.h"

#if defined(HEADLESS_USE_PREFS)
#include "components/os_crypt/os_crypt.h" // nogncheck
Expand Down Expand Up @@ -50,6 +53,21 @@ const base::FilePath::CharType kLocalStateFilename[] =

} // namespace

// Headless clipboard that is independent of any platform clipboard.
class HeadlessClipboard : public ui::ClipboardNonBacked {
public:
HeadlessClipboard() = default;

HeadlessClipboard(const HeadlessClipboard&) = delete;
HeadlessClipboard& operator=(const HeadlessClipboard&) = delete;

~HeadlessClipboard() override = default;

static std::unique_ptr<HeadlessClipboard> Create() {
return std::make_unique<HeadlessClipboard>();
}
};

HeadlessBrowserMainParts::HeadlessBrowserMainParts(HeadlessBrowserImpl* browser)
: browser_(browser) {}

Expand All @@ -60,6 +78,9 @@ int HeadlessBrowserMainParts::PreMainMessageLoopRun() {
CreatePrefService();
#endif
MaybeStartLocalDevToolsHttpHandler();

ui::Clipboard::SetClipboardForCurrentThread(HeadlessClipboard::Create());

browser_->PlatformInitialize();
browser_->RunOnStartCallback();
HeadlessSelectFileDialogFactory::SetUp();
Expand Down

0 comments on commit 8985308

Please sign in to comment.