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)#ifndef UI_BASE_DRAGDROP_OS_EXCHANGE_DATA_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define UI_BASE_DRAGDROP_OS_EXCHANGE_DATA_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "build/build_config.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <objidl.h> 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ui/base/clipboard/clipboard.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/dragdrop/download_file_interface.h" 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/base/ui_base_export.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Pickle; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace gfx { 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ImageSkia; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Vector2d; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochstruct FileInfo; 35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// OSExchangeData 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// An object that holds interchange data to be sent out to OS services like 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// clipboard, drag and drop, etc. This object exposes an API that clients can 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// use to specify raw data and its high level type. This object takes care of 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// translating that into something the OS can understand. 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/////////////////////////////////////////////////////////////////////////////// 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// NOTE: Support for html and file contents is required by TabContentViewWin. 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TabContentsViewGtk uses a different class to handle drag support that does 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// not use OSExchangeData. As such, file contents and html support is only 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// compiled on windows. 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class UI_BASE_EXPORT OSExchangeData { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // CustomFormats are used for non-standard data types. For example, bookmark 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // nodes are written using a CustomFormat. 5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // TODO(dcheng): Remove this completely and just use Clipboard::FormatType. 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef Clipboard::FormatType CustomFormat; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Enumeration of the known formats. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum Format { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STRING = 1 << 0, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) URL = 1 << 1, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_NAME = 1 << 2, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PICKLED_DATA = 1 << 3, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FILE_CONTENTS = 1 << 4, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 66a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(USE_AURA) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HTML = 1 << 5, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Controls whether or not filenames should be converted to file: URLs when 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // getting a URL. 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) enum FilenameToURLPolicy { CONVERT_FILENAMES, DO_NOT_CONVERT_FILENAMES, }; 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Encapsulates the info about a file to be downloaded. 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) struct UI_BASE_EXPORT DownloadFileInfo { 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DownloadFileInfo(const base::FilePath& filename, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadFileProvider* downloader); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~DownloadFileInfo(); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath filename; 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<DownloadFileProvider> downloader; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Provider defines the platform specific part of OSExchangeData that 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // interacts with the native system. 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) class UI_BASE_EXPORT Provider { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Provider() {} 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~Provider() {} 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual Provider* Clone() const = 0; 93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 94effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual void MarkOriginatedFromRenderer() = 0; 95effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch virtual bool DidOriginateFromRenderer() const = 0; 96effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void SetString(const base::string16& data) = 0; 98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void SetURL(const GURL& url, const base::string16& title) = 0; 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetFilename(const base::FilePath& path) = 0; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetFilenames( 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<FileInfo>& file_names) = 0; 10290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void SetPickledData(const CustomFormat& format, 10390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const Pickle& data) = 0; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual bool GetString(base::string16* data) const = 0; 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual bool GetURLAndTitle(FilenameToURLPolicy policy, 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GURL* url, 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16* title) const = 0; 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool GetFilename(base::FilePath* path) const = 0; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool GetFilenames( 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FileInfo>* file_names) const = 0; 11290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual bool GetPickledData(const CustomFormat& format, 11390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) Pickle* data) const = 0; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HasString() const = 0; 116a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) virtual bool HasURL(FilenameToURLPolicy policy) const = 0; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HasFile() const = 0; 11890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual bool HasCustomFormat(const CustomFormat& format) const = 0; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 120effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if (!defined(OS_CHROMEOS) && defined(USE_X11)) || defined(OS_WIN) 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetFileContents(const base::FilePath& filename, 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& file_contents) = 0; 123effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#endif 124effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#if defined(OS_WIN) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool GetFileContents(base::FilePath* filename, 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* file_contents) const = 0; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HasFileContents() const = 0; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetDownloadFileInfo(const DownloadFileInfo& download) = 0; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 131a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(USE_AURA) 132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void SetHtml(const base::string16& html, const GURL& base_url) = 0; 133eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual bool GetHtml(base::string16* html, GURL* base_url) const = 0; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool HasHtml() const = 0; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(USE_AURA) 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetDragImage(const gfx::ImageSkia& image, 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Vector2d& cursor_offset) = 0; 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual const gfx::ImageSkia& GetDragImage() const = 0; 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual const gfx::Vector2d& GetDragImageOffset() const = 0; 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Creates the platform specific Provider. 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static Provider* CreateProvider(); 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OSExchangeData(); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates an OSExchangeData with the specified provider. OSExchangeData 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // takes ownership of the supplied provider. 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit OSExchangeData(Provider* provider); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~OSExchangeData(); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the Provider, which actually stores and manages the data. 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Provider& provider() const { return *provider_; } 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Provider& provider() { return *provider_; } 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 159effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Marks drag data as tainted if it originates from the renderer. This is used 160effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // to avoid granting privileges to a renderer when dragging in tainted data, 161effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // since it could allow potential escalation of privileges. 162effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch void MarkOriginatedFromRenderer(); 163effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch bool DidOriginateFromRenderer() const; 164effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These functions add data to the OSExchangeData object of various Chrome 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // types. The OSExchangeData object takes care of translating the data into 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // a format suitable for exchange with the OS. 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NOTE WELL: Typically, a data object like this will contain only one of the 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // following types of data. In cases where more data is held, the 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // order in which these functions are called is _important_! 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ---> The order types are added to an OSExchangeData object controls 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the order of enumeration in our IEnumFORMATETC implementation! 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This comes into play when selecting the best (most preferable) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // data type for insertion into a DropTarget. 175eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void SetString(const base::string16& data); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A URL can have an optional title in some exchange formats. 177eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void SetURL(const GURL& url, const base::string16& title); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A full path to a file. 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetFilename(const base::FilePath& path); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Full path to one or more files. See also SetFilenames() in Provider. 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetFilenames( 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<FileInfo>& file_names); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds pickled data of the specified format. 18490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void SetPickledData(const CustomFormat& format, const Pickle& data); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These functions retrieve data of the specified type. If data exists, the 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // functions return and the result is in the out parameter. If the data does 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // not exist, the out parameter is not touched. The out parameter cannot be 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // NULL. 190eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool GetString(base::string16* data) const; 1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) bool GetURLAndTitle(FilenameToURLPolicy policy, 1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GURL* url, 1935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16* title) const; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Return the path of a file, if available. 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool GetFilename(base::FilePath* path) const; 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool GetFilenames( 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FileInfo>* file_names) const; 19890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool GetPickledData(const CustomFormat& format, Pickle* data) const; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test whether or not data of certain types is present, without actually 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // returning anything. 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasString() const; 203a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool HasURL(FilenameToURLPolicy policy) const; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasFile() const; 20590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool HasCustomFormat(const CustomFormat& format) const; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns true if this OSExchangeData has data in any of the formats in 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |formats| or any custom format in |custom_formats|. 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasAnyFormat(int formats, 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::set<CustomFormat>& custom_formats) const; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 213effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Adds the bytes of a file (CFSTR_FILECONTENTS and CFSTR_FILEDESCRIPTOR on 214effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // Windows). 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetFileContents(const base::FilePath& filename, 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& file_contents); 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool GetFileContents(base::FilePath* filename, 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* file_contents) const; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds a download file with full path (CF_HDROP). 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetDownloadFileInfo(const DownloadFileInfo& download); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 224a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(USE_AURA) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Adds a snippet of HTML. |html| is just raw html but this sets both 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // text/html and CF_HTML. 227eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void SetHtml(const base::string16& html, const GURL& base_url); 228eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool GetHtml(base::string16* html, GURL* base_url) const; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Provides the actual data. 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Provider> provider_; 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(OSExchangeData); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ui 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // UI_BASE_DRAGDROP_OS_EXCHANGE_DATA_H_ 241