ReadableDataObject.cpp [plain text]
#include "config.h"
#include "ReadableDataObject.h"
#include "ClipboardMimeTypes.h"
#include "Pasteboard.h"
#include "PasteboardPrivate.h"
#include "PlatformBridge.h"
namespace WebCore {
static PasteboardPrivate::ClipboardBuffer clipboardBuffer(Clipboard::ClipboardType clipboardType)
{
return clipboardType == Clipboard::DragAndDrop ? PasteboardPrivate::DragBuffer : PasteboardPrivate::StandardBuffer;
}
PassRefPtr<ReadableDataObject> ReadableDataObject::create(Clipboard::ClipboardType clipboardType)
{
return adoptRef(new ReadableDataObject(clipboardType));
}
ReadableDataObject::ReadableDataObject(Clipboard::ClipboardType clipboardType)
: m_clipboardType(clipboardType)
, m_containsFilenames(false)
, m_isTypeCacheInitialized(false)
{
}
bool ReadableDataObject::hasData() const
{
ensureTypeCacheInitialized();
return !m_types.isEmpty() || m_containsFilenames;
}
HashSet<String> ReadableDataObject::types() const
{
ensureTypeCacheInitialized();
return m_types;
}
String ReadableDataObject::getData(const String& type, bool& succeeded) const
{
String data;
String ignoredMetadata;
if (m_clipboardType == Clipboard::CopyAndPaste) {
if (type == mimeTypeTextPlain) {
PasteboardPrivate::ClipboardBuffer buffer =
Pasteboard::generalPasteboard()->isSelectionMode() ?
PasteboardPrivate::SelectionBuffer :
PasteboardPrivate::StandardBuffer;
data = PlatformBridge::clipboardReadPlainText(buffer);
} else if (type == mimeTypeTextHTML) {
PasteboardPrivate::ClipboardBuffer buffer =
Pasteboard::generalPasteboard()->isSelectionMode() ?
PasteboardPrivate::SelectionBuffer :
PasteboardPrivate::StandardBuffer;
KURL ignoredSourceURL;
PlatformBridge::clipboardReadHTML(buffer, &data, &ignoredSourceURL);
}
succeeded = !data.isEmpty();
return data;
}
succeeded = PlatformBridge::clipboardReadData(
clipboardBuffer(m_clipboardType), type, data, ignoredMetadata);
return data;
}
String ReadableDataObject::urlTitle() const
{
String ignoredData;
String urlTitle;
PlatformBridge::clipboardReadData(
clipboardBuffer(m_clipboardType), mimeTypeTextURIList, ignoredData, urlTitle);
return urlTitle;
}
KURL ReadableDataObject::htmlBaseUrl() const
{
String ignoredData;
String htmlBaseUrl;
PlatformBridge::clipboardReadData(
clipboardBuffer(m_clipboardType), mimeTypeTextHTML, ignoredData, htmlBaseUrl);
return KURL(ParsedURLString, htmlBaseUrl);
}
bool ReadableDataObject::containsFilenames() const
{
ensureTypeCacheInitialized();
return m_containsFilenames;
}
Vector<String> ReadableDataObject::filenames() const
{
return PlatformBridge::clipboardReadFilenames(clipboardBuffer(m_clipboardType));
}
void ReadableDataObject::ensureTypeCacheInitialized() const
{
if (m_isTypeCacheInitialized)
return;
m_types = PlatformBridge::clipboardReadAvailableTypes(
clipboardBuffer(m_clipboardType), &m_containsFilenames);
m_isTypeCacheInitialized = true;
}
}