1 // Copyright 2017 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef HEADLESS_LIB_BROWSER_HEADLESS_CLIPBOARD_H_ 6 #define HEADLESS_LIB_BROWSER_HEADLESS_CLIPBOARD_H_ 7 8 #include <stddef.h> 9 #include <stdint.h> 10 11 #include <map> 12 13 #include "base/macros.h" 14 #include "third_party/skia/include/core/SkBitmap.h" 15 #include "ui/base/clipboard/clipboard.h" 16 17 namespace headless { 18 19 class HeadlessClipboard : public ui::Clipboard { 20 public: 21 HeadlessClipboard(); 22 ~HeadlessClipboard() override; 23 24 private: 25 // Clipboard overrides. 26 void OnPreShutdown() override; 27 uint64_t GetSequenceNumber(ui::ClipboardBuffer buffer) const override; 28 bool IsFormatAvailable(const ui::ClipboardFormatType& format, 29 ui::ClipboardBuffer buffer) const override; 30 void Clear(ui::ClipboardBuffer buffer) override; 31 void ReadAvailableTypes(ui::ClipboardBuffer buffer, 32 std::vector<base::string16>* types, 33 bool* contains_filenames) const override; 34 std::vector<base::string16> ReadAvailablePlatformSpecificFormatNames( 35 ui::ClipboardBuffer buffer) const override; 36 void ReadText(ui::ClipboardBuffer buffer, 37 base::string16* result) const override; 38 void ReadAsciiText(ui::ClipboardBuffer buffer, 39 std::string* result) const override; 40 void ReadHTML(ui::ClipboardBuffer buffer, 41 base::string16* markup, 42 std::string* src_url, 43 uint32_t* fragment_start, 44 uint32_t* fragment_end) const override; 45 void ReadRTF(ui::ClipboardBuffer buffer, std::string* result) const override; 46 void ReadImage(ui::ClipboardBuffer buffer, 47 ReadImageCallback callback) const override; 48 void ReadCustomData(ui::ClipboardBuffer clipboard_buffer, 49 const base::string16& type, 50 base::string16* result) const override; 51 void ReadBookmark(base::string16* title, std::string* url) const override; 52 void ReadData(const ui::ClipboardFormatType& format, 53 std::string* result) const override; 54 void WritePortableRepresentations(ui::ClipboardBuffer buffer, 55 const ObjectMap& objects) override; 56 void WritePlatformRepresentations( 57 ui::ClipboardBuffer buffer, 58 std::vector<Clipboard::PlatformRepresentation> platform_representations) 59 override; 60 void WriteText(const char* text_data, size_t text_len) override; 61 void WriteHTML(const char* markup_data, 62 size_t markup_len, 63 const char* url_data, 64 size_t url_len) override; 65 void WriteRTF(const char* rtf_data, size_t data_len) override; 66 void WriteBookmark(const char* title_data, 67 size_t title_len, 68 const char* url_data, 69 size_t url_len) override; 70 void WriteWebSmartPaste() override; 71 void WriteBitmap(const SkBitmap& bitmap) override; 72 void WriteData(const ui::ClipboardFormatType& format, 73 const char* data_data, 74 size_t data_len) override; 75 76 struct DataStore { 77 DataStore(); 78 DataStore(const DataStore& other); 79 ~DataStore(); 80 void Clear(); 81 uint64_t sequence_number; 82 std::map<ui::ClipboardFormatType, std::string> data; 83 std::string url_title; 84 std::string html_src_url; 85 SkBitmap image; 86 }; 87 88 // The non-const versions increment the sequence number as a side effect. 89 const DataStore& GetStore(ui::ClipboardBuffer buffer) const; 90 const DataStore& GetDefaultStore() const; 91 DataStore& GetStore(ui::ClipboardBuffer buffer); 92 DataStore& GetDefaultStore(); 93 94 ui::ClipboardBuffer default_store_buffer_; 95 mutable std::map<ui::ClipboardBuffer, DataStore> stores_; 96 97 DISALLOW_COPY_AND_ASSIGN(HeadlessClipboard); 98 }; 99 100 } // namespace headless 101 102 #endif // HEADLESS_LIB_BROWSER_HEADLESS_CLIPBOARD_H_ 103