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