diff --git a/atom/common/api/atom_api_clipboard.cc b/atom/common/api/atom_api_clipboard.cc index d2de0f5166ef..5ae318510e05 100644 --- a/atom/common/api/atom_api_clipboard.cc +++ b/atom/common/api/atom_api_clipboard.cc @@ -37,8 +37,7 @@ bool Clipboard::Has(const std::string& format_string, mate::Arguments* args) { return clipboard->IsFormatAvailable(format, GetClipboardType(args)); } -std::string Clipboard::Read(const std::string& format_string, - mate::Arguments* args) { +std::string Clipboard::Read(const std::string& format_string) { ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread(); ui::Clipboard::FormatType format(ui::Clipboard::GetFormatType(format_string)); @@ -47,6 +46,13 @@ std::string Clipboard::Read(const std::string& format_string, return data; } +v8::Local Clipboard::ReadBuffer(const std::string& format_string, + mate::Arguments* args) { + std::string data = Read(format_string); + return node::Buffer::Copy( + args->isolate(), data.data(), data.length()).ToLocalChecked(); +} + void Clipboard::Write(const mate::Dictionary& data, mate::Arguments* args) { ui::ScopedClipboardWriter writer(GetClipboardType(args)); base::string16 text, html, bookmark; @@ -184,6 +190,7 @@ void Initialize(v8::Local exports, v8::Local unused, dict.SetMethod("writeImage", &atom::api::Clipboard::WriteImage); dict.SetMethod("readFindText", &atom::api::Clipboard::ReadFindText); dict.SetMethod("writeFindText", &atom::api::Clipboard::WriteFindText); + dict.SetMethod("readBuffer", &atom::api::Clipboard::ReadBuffer); dict.SetMethod("clear", &atom::api::Clipboard::Clear); // TODO(kevinsawicki): Remove in 2.0, deprecate before then with warnings diff --git a/atom/common/api/atom_api_clipboard.h b/atom/common/api/atom_api_clipboard.h index e46e035b31c3..d7cbe7a42a6d 100644 --- a/atom/common/api/atom_api_clipboard.h +++ b/atom/common/api/atom_api_clipboard.h @@ -24,8 +24,7 @@ class Clipboard { static bool Has(const std::string& format_string, mate::Arguments* args); static void Clear(mate::Arguments* args); - static std::string Read(const std::string& format_string, - mate::Arguments* args); + static std::string Read(const std::string& format_string); static void Write(const mate::Dictionary& data, mate::Arguments* args); static base::string16 ReadText(mate::Arguments* args); @@ -48,6 +47,9 @@ class Clipboard { static base::string16 ReadFindText(); static void WriteFindText(const base::string16& text); + static v8::Local ReadBuffer(const std::string& format_string, + mate::Arguments* args); + private: DISALLOW_COPY_AND_ASSIGN(Clipboard); }; diff --git a/docs/api/clipboard.md b/docs/api/clipboard.md index e0fdd4243811..559fc01a90d4 100644 --- a/docs/api/clipboard.md +++ b/docs/api/clipboard.md @@ -133,24 +133,29 @@ Clears the clipboard content. Returns `String[]` - An array of supported formats for the clipboard `type`. -### `clipboard.has(data[, type])` _Experimental_ +### `clipboard.has(format[, type])` _Experimental_ -* `data` String +* `format` String * `type` String (optional) -Returns `Boolean` - Whether the clipboard supports the format of specified `data`. +Returns `Boolean` - Whether the clipboard supports the specified `format`. ```javascript const {clipboard} = require('electron') console.log(clipboard.has('

selection

')) ``` -### `clipboard.read(data[, type])` _Experimental_ +### `clipboard.read(format)` _Experimental_ -* `data` String -* `type` String (optional) +* `format` String -Returns `String` - Reads `data` from the clipboard. +Returns `String` - Reads `format` type from the clipboard. + +### `clipboard.readBuffer(format)` _Experimental_ + +* `format` String + +Returns `Buffer` - Reads `format` type from the clipboard. ### `clipboard.write(data[, type])` diff --git a/spec/api-clipboard-spec.js b/spec/api-clipboard-spec.js index fdd5711d118b..a4a0e964304e 100644 --- a/spec/api-clipboard-spec.js +++ b/spec/api-clipboard-spec.js @@ -1,8 +1,8 @@ const assert = require('assert') const path = require('path') +const {Buffer} = require('buffer') -const clipboard = require('electron').clipboard -const nativeImage = require('electron').nativeImage +const {clipboard, nativeImage} = require('electron') describe('clipboard module', function () { var fixtures = path.resolve(__dirname, 'fixtures') @@ -93,4 +93,14 @@ describe('clipboard module', function () { assert.equal(clipboard.readFindText(), 'find this') }) }) + + describe('clipboard.readBuffer(format)', function () { + it('returns a Buffer of the content for the specified format', function () { + if (process.platform !== 'darwin') return + + const buffer = Buffer.from('this is binary', 'utf8') + clipboard.writeText(buffer.toString()) + assert(buffer.equals(clipboard.readBuffer('public.utf8-plain-text'))) + }) + }) })