diff --git a/docs/api/clipboard.md b/docs/api/clipboard.md index 6b742d59db..5d9f7e3f26 100644 --- a/docs/api/clipboard.md +++ b/docs/api/clipboard.md @@ -197,7 +197,7 @@ Returns `Boolean` - Whether the clipboard supports the specified `format`. ```js const { clipboard } = require('electron') -const hasFormat = clipboard.has('

selection

') +const hasFormat = clipboard.has('public/utf8-plain-text') console.log(hasFormat) // 'true' or 'false' ``` diff --git a/shell/common/api/electron_api_clipboard.cc b/shell/common/api/electron_api_clipboard.cc index 88824670e6..5240797e77 100644 --- a/shell/common/api/electron_api_clipboard.cc +++ b/shell/common/api/electron_api_clipboard.cc @@ -51,17 +51,7 @@ bool Clipboard::Has(const std::string& format_string, std::string Clipboard::Read(const std::string& format_string) { ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread(); - ui::ClipboardFormatType format( - ui::ClipboardFormatType::CustomPlatformType(format_string)); - std::string data; - clipboard->ReadData(format, /* data_dst = */ nullptr, &data); - return data; -} - -v8::Local Clipboard::ReadBuffer(const std::string& format_string, - gin_helper::Arguments* args) { - ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread(); std::map custom_format_names; custom_format_names = clipboard->ExtractCustomPlatformNames(ui::ClipboardBuffer::kCopyPaste, @@ -73,12 +63,24 @@ v8::Local Clipboard::ReadBuffer(const std::string& format_string, /* data_dst = */ nullptr); } #endif - CHECK(custom_format_names.find(format_string) != custom_format_names.end()); - ui::ClipboardFormatType format(ui::ClipboardFormatType::CustomPlatformType( - custom_format_names[format_string])); + ui::ClipboardFormatType format; + if (custom_format_names.find(format_string) != custom_format_names.end()) { + format = + ui::ClipboardFormatType(ui::ClipboardFormatType::CustomPlatformType( + custom_format_names[format_string])); + } else { + format = ui::ClipboardFormatType( + ui::ClipboardFormatType::CustomPlatformType(format_string)); + } std::string data; clipboard->ReadData(format, /* data_dst = */ nullptr, &data); + return data; +} + +v8::Local Clipboard::ReadBuffer(const std::string& format_string, + gin_helper::Arguments* args) { + std::string data = Read(format_string); return node::Buffer::Copy(args->isolate(), data.data(), data.length()) .ToLocalChecked(); } diff --git a/spec/api-clipboard-spec.js b/spec/api-clipboard-spec.js index d812d0c7c7..665fac396a 100644 --- a/spec/api-clipboard-spec.js +++ b/spec/api-clipboard-spec.js @@ -1,7 +1,7 @@ const { expect } = require('chai'); const path = require('path'); const { Buffer } = require('buffer'); -const { ifdescribe } = require('./spec-helpers'); +const { ifdescribe, ifit } = require('./spec-helpers'); const { clipboard, nativeImage } = require('electron'); @@ -62,14 +62,20 @@ ifdescribe(process.platform !== 'win32' || process.arch !== 'arm64')('clipboard }); }); - ifdescribe(process.platform !== 'linux')('clipboard.read()', () => { - it('does not crash when reading various custom clipboard types', () => { + describe('clipboard.read()', () => { + ifit(process.platform !== 'linux')('does not crash when reading various custom clipboard types', () => { const type = process.platform === 'darwin' ? 'NSFilenamesPboardType' : 'FileNameW'; expect(() => { const result = clipboard.read(type); }).to.not.throw(); }); + it('can read data written with writeBuffer', () => { + const testText = 'Testing read'; + const buffer = Buffer.from(testText, 'utf8'); + clipboard.writeBuffer('public/utf8-plain-text', buffer); + expect(clipboard.read('public/utf8-plain-text')).to.equal(testText); + }); }); describe('clipboard.write()', () => {