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)#include "ui/base/dragdrop/os_exchange_data.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/pickle.h" 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui { 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OSExchangeData::DownloadFileInfo::DownloadFileInfo( 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const base::FilePath& filename, 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DownloadFileProvider* downloader) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : filename(filename), 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) downloader(downloader) { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OSExchangeData::DownloadFileInfo::~DownloadFileInfo() {} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OSExchangeData::OSExchangeData() : provider_(CreateProvider()) { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OSExchangeData::OSExchangeData(Provider* provider) : provider_(provider) { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OSExchangeData::~OSExchangeData() { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 30effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid OSExchangeData::MarkOriginatedFromRenderer() { 31effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch provider_->MarkOriginatedFromRenderer(); 32effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 33effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 34effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochbool OSExchangeData::DidOriginateFromRenderer() const { 35effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch return provider_->DidOriginateFromRenderer(); 36effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch} 37effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid OSExchangeData::SetString(const base::string16& data) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->SetString(data); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid OSExchangeData::SetURL(const GURL& url, const base::string16& title) { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->SetURL(url, title); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void OSExchangeData::SetFilename(const base::FilePath& path) { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->SetFilename(path); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OSExchangeData::SetFilenames( 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<FileInfo>& filenames) { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->SetFilenames(filenames); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void OSExchangeData::SetPickledData(const CustomFormat& format, 5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const Pickle& data) { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->SetPickledData(format, data); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool OSExchangeData::GetString(base::string16* data) const { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return provider_->GetString(data); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool OSExchangeData::GetURLAndTitle(FilenameToURLPolicy policy, 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GURL* url, 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::string16* title) const { 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return provider_->GetURLAndTitle(policy, url, title); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool OSExchangeData::GetFilename(base::FilePath* path) const { 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return provider_->GetFilename(path); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool OSExchangeData::GetFilenames( 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<FileInfo>* filenames) const { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return provider_->GetFilenames(filenames); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)bool OSExchangeData::GetPickledData(const CustomFormat& format, 8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) Pickle* data) const { 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return provider_->GetPickledData(format, data); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool OSExchangeData::HasString() const { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return provider_->HasString(); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 88a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)bool OSExchangeData::HasURL(FilenameToURLPolicy policy) const { 89a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return provider_->HasURL(policy); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool OSExchangeData::HasFile() const { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return provider_->HasFile(); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)bool OSExchangeData::HasCustomFormat(const CustomFormat& format) const { 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return provider_->HasCustomFormat(format); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool OSExchangeData::HasAnyFormat( 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int formats, 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::set<CustomFormat>& custom_formats) const { 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((formats & STRING) != 0 && HasString()) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 105a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if ((formats & URL) != 0 && HasURL(CONVERT_FILENAMES)) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((formats & FILE_CONTENTS) != 0 && provider_->HasFileContents()) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 111a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(USE_AURA) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((formats & HTML) != 0 && provider_->HasHtml()) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if ((formats & FILE_NAME) != 0 && provider_->HasFile()) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::set<CustomFormat>::const_iterator i = custom_formats.begin(); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i != custom_formats.end(); ++i) { 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (HasCustomFormat(*i)) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void OSExchangeData::SetFileContents(const base::FilePath& filename, 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& file_contents) { 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->SetFileContents(filename, file_contents); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool OSExchangeData::GetFileContents(base::FilePath* filename, 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* file_contents) const { 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return provider_->GetFileContents(filename, file_contents); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OSExchangeData::SetDownloadFileInfo(const DownloadFileInfo& download) { 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) provider_->SetDownloadFileInfo(download); 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 141a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch#if defined(USE_AURA) 142eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochvoid OSExchangeData::SetHtml(const base::string16& html, const GURL& base_url) { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) provider_->SetHtml(html, base_url); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 146eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbool OSExchangeData::GetHtml(base::string16* html, GURL* base_url) const { 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return provider_->GetHtml(html, base_url); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace ui 152