Chromium Code Reviews| Index: third_party/WebKit/Source/core/clipboard/DataObject.cpp |
| diff --git a/third_party/WebKit/Source/core/clipboard/DataObject.cpp b/third_party/WebKit/Source/core/clipboard/DataObject.cpp |
| index b95399a4400df5e4e8147389a47f174a05c9a5e6..a32ba183005ccabf62663a248a8910a2d1641865 100644 |
| --- a/third_party/WebKit/Source/core/clipboard/DataObject.cpp |
| +++ b/third_party/WebKit/Source/core/clipboard/DataObject.cpp |
| @@ -106,7 +106,17 @@ DataObjectItem* DataObject::add(File* file) { |
| return nullptr; |
| DataObjectItem* item = DataObjectItem::createFromFile(file); |
| - m_itemList.append(item); |
| + internalAddFileItem(item); |
| + return item; |
| +} |
| + |
| +DataObjectItem* DataObject::add(File* file, const String& fileSystemId) { |
| + if (!file) |
| + return nullptr; |
| + |
| + DataObjectItem* item = |
| + DataObjectItem::createFromFileEntry(file, fileSystemId); |
| + internalAddFileItem(item); |
| return item; |
| } |
| @@ -206,9 +216,10 @@ Vector<String> DataObject::filenames() const { |
| } |
| void DataObject::addFilename(const String& filename, |
| - const String& displayName) { |
| - internalAddFileItem(DataObjectItem::createFromFile( |
| - File::createForUserProvidedFile(filename, displayName))); |
| + const String& displayName, |
| + const String& fileSystemId) { |
| + internalAddFileItem(DataObjectItem::createFromFileEntry( |
| + File::createForUserProvidedFile(filename, displayName), fileSystemId)); |
| } |
| void DataObject::addSharedBuffer(const String& name, |
| @@ -252,6 +263,7 @@ DEFINE_TRACE(DataObject) { |
| DataObject* DataObject::create(WebDragData data) { |
| DataObject* dataObject = create(); |
| + bool hasFileSystem = false; |
| WebVector<WebDragData::Item> items = data.items(); |
| for (unsigned i = 0; i < items.size(); ++i) { |
| @@ -267,7 +279,9 @@ DataObject* DataObject::create(WebDragData data) { |
| dataObject->setData(item.stringType, item.stringData); |
| break; |
| case WebDragData::Item::StorageTypeFilename: |
| - dataObject->addFilename(item.filenameData, item.displayNameData); |
| + hasFileSystem = true; |
| + dataObject->addFilename(item.filenameData, item.displayNameData, |
| + data.filesystemId()); |
| break; |
| case WebDragData::Item::StorageTypeBinaryData: |
| // This should never happen when dragging in. |
| @@ -275,17 +289,26 @@ DataObject* DataObject::create(WebDragData data) { |
| case WebDragData::Item::StorageTypeFileSystemFile: { |
| // FIXME: The file system URL may refer a user visible file, see |
| // http://crbug.com/429077 |
| + hasFileSystem = true; |
| FileMetadata fileMetadata; |
| fileMetadata.length = item.fileSystemFileSize; |
| - dataObject->add(File::createForFileSystemFile( |
| - item.fileSystemURL, fileMetadata, File::IsNotUserVisible)); |
| + |
| + dataObject->add( |
| + File::createForFileSystemFile(item.fileSystemURL, fileMetadata, |
| + File::IsNotUserVisible), |
| + item.fileSystemId); |
| } break; |
| } |
| } |
| - if (!data.filesystemId().isNull()) |
| - DraggedIsolatedFileSystem::prepareForDataObject(dataObject, |
| - data.filesystemId()); |
| + if (!data.filesystemId().isNull()) { |
|
kinuko
2016/12/12 08:03:35
nit: it looks we can just always call setFilesyste
hirono
2016/12/13 08:12:12
Done.
|
| + dataObject->setFilesystemId(data.filesystemId()); |
| + } |
| + |
| + if (hasFileSystem) { |
| + DraggedIsolatedFileSystem::prepareForDataObject(dataObject); |
| + } |
| + |
| return dataObject; |
| } |
| @@ -318,6 +341,7 @@ WebDragData DataObject::toWebDragData() { |
| item.storageType = WebDragData::Item::StorageTypeFileSystemFile; |
| item.fileSystemURL = file->fileSystemURL(); |
| item.fileSystemFileSize = file->size(); |
| + item.fileSystemId = originalItem->fileSystemId(); |
| } else { |
| // FIXME: support dragging constructed Files across renderers, see |
| // http://crbug.com/394955 |