Home | History | Annotate | Download | only in clipboard
      1 // Copyright (c) 2012 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 // Some helper functions for working with the clipboard and IDataObjects.
      6 
      7 #ifndef UI_BASE_CLIPBOARD_CLIPBOARD_UTIL_WIN_H_
      8 #define UI_BASE_CLIPBOARD_CLIPBOARD_UTIL_WIN_H_
      9 
     10 #include <shlobj.h>
     11 #include <map>
     12 #include <string>
     13 #include <vector>
     14 
     15 #include "base/strings/string16.h"
     16 #include "ui/base/ui_export.h"
     17 
     18 namespace ui {
     19 
     20 class UI_EXPORT ClipboardUtil {
     21  public:
     22   /////////////////////////////////////////////////////////////////////////////
     23   // These methods check to see if |data_object| has the requested type.
     24   // Returns true if it does.
     25   static bool HasUrl(IDataObject* data_object);
     26   static bool HasFilenames(IDataObject* data_object);
     27   static bool HasPlainText(IDataObject* data_object);
     28   static bool HasFileContents(IDataObject* data_object);
     29   static bool HasHtml(IDataObject* data_object);
     30 
     31   /////////////////////////////////////////////////////////////////////////////
     32   // Helper methods to extract information from an IDataObject.  These methods
     33   // return true if the requested data type is found in |data_object|.
     34   static bool GetUrl(IDataObject* data_object,
     35                      string16* url,
     36                      string16* title,
     37                      bool convert_filenames);
     38   static bool GetFilenames(IDataObject* data_object,
     39                            std::vector<string16>* filenames);
     40   static bool GetPlainText(IDataObject* data_object, string16* plain_text);
     41   static bool GetHtml(IDataObject* data_object,
     42                       string16* text_html,
     43                       std::string* base_url);
     44   static bool GetFileContents(IDataObject* data_object,
     45                               string16* filename,
     46                               std::string* file_contents);
     47   // This represents custom MIME types a web page might set to transport its
     48   // own types of data for drag and drop. It is sandboxed in its own CLIPFORMAT
     49   // to avoid polluting the ::RegisterClipboardFormat() namespace with random
     50   // strings from web content.
     51   static bool GetWebCustomData(IDataObject* data_object,
     52                                std::map<string16, string16>* custom_data);
     53 
     54   // Helper method for converting between MS CF_HTML format and plain
     55   // text/html.
     56   static std::string HtmlToCFHtml(const std::string& html,
     57                                   const std::string& base_url);
     58   static void CFHtmlToHtml(const std::string& cf_html,
     59                            std::string* html,
     60                            std::string* base_url);
     61   static void CFHtmlExtractMetadata(const std::string& cf_html,
     62                                     std::string* base_url,
     63                                     size_t* html_start,
     64                                     size_t* fragment_start,
     65                                     size_t* fragment_end);
     66 };
     67 
     68 }
     69 
     70 #endif  // UI_BASE_CLIPBOARD_CLIPBOARD_UTIL_WIN_H_
     71