Commit 514383a2 authored by Julie Jeongeun Kim's avatar Julie Jeongeun Kim Committed by Commit Bot

[ozone/wayland] Add a helper function to WaylandDataDevice to read the data from FD

It moves the code to read the data from FD to 'ReadDataFromFD' in
WaylandDataDevice to reuse it for drag-and-drop, as WaylandDataDevice
is the class to handle not only copy-and-paste but drag-and-drop and
drag-and-drop needs to read the data from FD as well.

It doesn't bring behavioral changes.

Bug: 578890, 875164
Change-Id: I460ab9df2b4d32bbdb0e71c753cb19c572df12ab
Reviewed-on: https://chromium-review.googlesource.com/1179505Reviewed-by: default avatarMaksim Sisov <msisov@igalia.com>
Reviewed-by: default avatarAntonio Gomes <tonikitoo@igalia.com>
Commit-Queue: Julie Jeongeun Kim <jkim@igalia.com>
Cr-Commit-Position: refs/heads/master@{#584047}
parent eae4f3c3
......@@ -41,20 +41,30 @@ void WaylandDataDevice::RequestSelectionData(const std::string& mime_type) {
read_from_fd_closure_ =
base::BindOnce(&WaylandDataDevice::ReadClipboardDataFromFD,
base::Unretained(this), std::move(fd), mime_type);
sync_callback_.reset(wl_display_sync(connection_->display()));
wl_callback_add_listener(sync_callback_.get(), &callback_listener_, this);
wl_display_flush(connection_->display());
RegisterSyncCallback();
}
void WaylandDataDevice::ReadClipboardDataFromFD(base::ScopedFD fd,
const std::string& mime_type) {
std::string contents;
ReadDataFromFD(std::move(fd), &contents);
connection_->SetClipboardData(contents, mime_type);
}
void WaylandDataDevice::RegisterSyncCallback() {
DCHECK(!sync_callback_);
sync_callback_.reset(wl_display_sync(connection_->display()));
wl_callback_add_listener(sync_callback_.get(), &callback_listener_, this);
wl_display_flush(connection_->display());
}
void WaylandDataDevice::ReadDataFromFD(base::ScopedFD fd,
std::string* contents) {
DCHECK(contents);
char buffer[1 << 10]; // 1 kB in bytes.
ssize_t length;
while ((length = read(fd.get(), buffer, sizeof(buffer))) > 0)
contents.append(buffer, length);
connection_->SetClipboardData(contents, mime_type);
contents->append(buffer, length);
}
std::vector<std::string> WaylandDataDevice::GetAvailableMimeTypes() {
......
......@@ -37,6 +37,12 @@ class WaylandDataDevice {
private:
void ReadClipboardDataFromFD(base::ScopedFD fd, const std::string& mime_type);
// Registers display sync callback. Once it's called, it's reset.
void RegisterSyncCallback();
// Helper function to read data from fd.
void ReadDataFromFD(base::ScopedFD fd, std::string* contents);
// wl_data_device_listener callbacks
static void OnDataOffer(void* data,
wl_data_device* data_device,
......
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