Chromium Code Reviews| Index: Source/web/WebDragData.cpp |
| diff --git a/Source/web/WebDragData.cpp b/Source/web/WebDragData.cpp |
| index adff6b448e1cd6aa3050a75f0f83a037629bab71..50635239f0aa5be603f1e6bafde117182ecf0e6f 100644 |
| --- a/Source/web/WebDragData.cpp |
| +++ b/Source/web/WebDragData.cpp |
| @@ -32,6 +32,7 @@ |
| #include "core/clipboard/DataObject.h" |
| #include "core/clipboard/DataTransferItem.h" |
| +#include "heap/Handle.h" |
| #include "modules/filesystem/DraggedIsolatedFileSystem.h" |
| #include "platform/clipboard/ClipboardMimeTypes.h" |
| #include "public/platform/WebData.h" |
| @@ -46,32 +47,68 @@ using namespace WebCore; |
| namespace blink { |
| -class WebDragDataPrivate : public DataObject { |
| -}; |
| +WebDragData::WebDragData(const WebDragData& object) |
| +{ |
| + assign(object); |
| +} |
| + |
| +WebDragData::~WebDragData() |
| +{ |
| + reset(); |
| +} |
| + |
| +WebDragData& WebDragData::operator=(const WebDragData& object) |
| +{ |
| + assign(object); |
| + return *this; |
| +} |
| + |
| +bool WebDragData::isNull() const |
| +{ |
| + return m_private.isNull(); |
| +} |
| void WebDragData::initialize() |
| { |
| - assign(static_cast<WebDragDataPrivate*>(DataObject::create().leakRef())); |
| + m_private = DataObject::create(); |
| } |
| void WebDragData::reset() |
| { |
| - assign(0); |
| + m_private.reset(); |
| } |
| void WebDragData::assign(const WebDragData& other) |
| { |
| - WebDragDataPrivate* p = const_cast<WebDragDataPrivate*>(other.m_private); |
| - if (p) |
| - p->ref(); |
| - assign(p); |
| + m_private = other.m_private; |
| +} |
| + |
| +WebDragData::WebDragData(const PassRefPtrWillBeRawPtr<WebCore::DataObject>& object) |
| +{ |
| + assign(object); |
| +} |
| + |
| +WebDragData& WebDragData::operator=(const PassRefPtrWillBeRawPtr<WebCore::DataObject>& object) |
| +{ |
| + assign(object); |
| + return *this; |
| +} |
| + |
| +DataObject* WebDragData::getValue() const |
|
sof
2014/02/19 08:30:24
I'm not sure getValue() is worth having in this se
haraken
2014/02/19 08:37:12
Yeah, this might be unnecessary.
In the experimen
|
| +{ |
| + return m_private.get(); |
| +} |
| + |
| +void WebDragData::ensureMutable() |
| +{ |
| + ASSERT(!isNull()); |
| } |
| WebVector<WebDragData::Item> WebDragData::items() const |
| { |
| Vector<Item> itemList; |
| - for (size_t i = 0; i < m_private->length(); ++i) { |
| - DataObjectItem* originalItem = m_private->item(i).get(); |
| + for (size_t i = 0; i < getValue()->length(); ++i) { |
| + DataObjectItem* originalItem = getValue()->item(i).get(); |
| WebDragData::Item item; |
| if (originalItem->kind() == DataObjectItem::StringKind) { |
| item.storageType = Item::StorageTypeString; |
| @@ -103,7 +140,7 @@ WebVector<WebDragData::Item> WebDragData::items() const |
| void WebDragData::setItems(const WebVector<Item>& itemList) |
| { |
| - m_private->clearAll(); |
| + getValue()->clearAll(); |
| for (size_t i = 0; i < itemList.size(); ++i) |
| addItem(itemList[i]); |
| } |
| @@ -114,14 +151,14 @@ void WebDragData::addItem(const Item& item) |
| switch (item.storageType) { |
| case Item::StorageTypeString: |
| if (String(item.stringType) == mimeTypeTextURIList) |
| - m_private->setURLAndTitle(item.stringData, item.title); |
| + getValue()->setURLAndTitle(item.stringData, item.title); |
| else if (String(item.stringType) == mimeTypeTextHTML) |
| - m_private->setHTMLAndBaseURL(item.stringData, item.baseURL); |
| + getValue()->setHTMLAndBaseURL(item.stringData, item.baseURL); |
| else |
| - m_private->setData(item.stringType, item.stringData); |
| + getValue()->setData(item.stringType, item.stringData); |
| return; |
| case Item::StorageTypeFilename: |
| - m_private->addFilename(item.filenameData, item.displayNameData); |
| + getValue()->addFilename(item.filenameData, item.displayNameData); |
| return; |
| case Item::StorageTypeBinaryData: |
| // This should never happen when dragging in. |
| @@ -132,7 +169,7 @@ void WebDragData::addItem(const Item& item) |
| WebString WebDragData::filesystemId() const |
| { |
| ASSERT(!isNull()); |
| - DraggedIsolatedFileSystem* filesystem = DraggedIsolatedFileSystem::from(m_private); |
| + DraggedIsolatedFileSystem* filesystem = DraggedIsolatedFileSystem::from(getValue()); |
| if (filesystem) |
| return filesystem->filesystemId(); |
| return WebString(); |
| @@ -142,37 +179,7 @@ void WebDragData::setFilesystemId(const WebString& filesystemId) |
| { |
| // The ID is an opaque string, given by and validated by chromium port. |
| ensureMutable(); |
| - DraggedIsolatedFileSystem::provideTo(m_private, DraggedIsolatedFileSystem::supplementName(), DraggedIsolatedFileSystem::create(filesystemId)); |
| -} |
| - |
| -WebDragData::WebDragData(const WTF::PassRefPtr<WebCore::DataObject>& data) |
| - : m_private(static_cast<WebDragDataPrivate*>(data.leakRef())) |
| -{ |
| -} |
| - |
| -WebDragData& WebDragData::operator=(const WTF::PassRefPtr<WebCore::DataObject>& data) |
| -{ |
| - assign(static_cast<WebDragDataPrivate*>(data.leakRef())); |
| - return *this; |
| -} |
| - |
| -WebDragData::operator WTF::PassRefPtr<WebCore::DataObject>() const |
| -{ |
| - return PassRefPtr<DataObject>(const_cast<WebDragDataPrivate*>(m_private)); |
| -} |
| - |
| -void WebDragData::assign(WebDragDataPrivate* p) |
| -{ |
| - // p is already ref'd for us by the caller |
| - if (m_private) |
| - m_private->deref(); |
| - m_private = p; |
| -} |
| - |
| -void WebDragData::ensureMutable() |
| -{ |
| - ASSERT(!isNull()); |
| - ASSERT(m_private->hasOneRef()); |
| + DraggedIsolatedFileSystem::provideTo(getValue(), DraggedIsolatedFileSystem::supplementName(), DraggedIsolatedFileSystem::create(filesystemId)); |
| } |
| } // namespace blink |