15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file declares the ScopedClipboardWriter class, a wrapper around 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the Clipboard class which simplifies writing data to the system clipboard. 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Upon deletion the class atomically writes all data to the clipboard, 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// avoiding any potential race condition with other processes that are also 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// writing to the system clipboard. 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef UI_BASE_CLIPBOARD_SCOPED_CLIPBOARD_WRITER_H_ 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_BASE_CLIPBOARD_SCOPED_CLIPBOARD_WRITER_H_ 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string16.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/clipboard/clipboard.h" 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/base/ui_base_export.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Pickle; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class is a wrapper for |Clipboard| that handles packing data 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// into a Clipboard::ObjectMap. 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class UI_BASE_EXPORT ScopedClipboardWriter { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Create an instance that is a simple wrapper around the clipboard of the 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // given type. 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci explicit ScopedClipboardWriter(ClipboardType type); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~ScopedClipboardWriter(); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Converts |text| to UTF-8 and adds it to the clipboard. 35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void WriteText(const base::string16& text); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Converts the text of the URL to UTF-8 and adds it to the clipboard, then 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // notifies the Clipboard that we just wrote a URL. 39a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void WriteURL(const base::string16& text); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds HTML to the clipboard. The url parameter is optional, but especially 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // useful if the HTML fragment contains relative links. 43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void WriteHTML(const base::string16& markup, const std::string& source_url); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds RTF to the clipboard. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void WriteRTF(const std::string& rtf_data); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds a bookmark to the clipboard. 49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void WriteBookmark(const base::string16& bookmark_title, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& url); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Adds an html hyperlink (<a href>) to the clipboard. |anchor_text| and 5368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // |url| will be escaped as needed. 54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void WriteHyperlink(const base::string16& anchor_text, 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const std::string& url); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used by WebKit to determine whether WebKit wrote the clipboard last 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void WriteWebSmartPaste(); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds arbitrary pickled data to clipboard. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void WritePickledData(const Pickle& pickle, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Clipboard::FormatType& format); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Removes all objects that would be written to the clipboard. 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Reset(); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Converts |text| to UTF-8 and adds it to the clipboard. If it's a URL, we 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // also notify the clipboard of that fact. 70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void WriteTextOrURL(const base::string16& text, bool is_url); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We accumulate the data passed to the various targets in the |objects_| 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // vector, and pass it to Clipboard::WriteObjects() during object destruction. 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Clipboard::ObjectMap objects_; 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const ClipboardType type_; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We keep around the UTF-8 text of the URL in order to pass it to 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clipboard::DidWriteURL(). 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string url_text_; 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(ScopedClipboardWriter); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ui 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // UI_BASE_CLIPBOARD_SCOPED_CLIPBOARD_WRITER_H_ 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 89