Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(236)

Unified Diff: third_party/WebKit/Source/core/clipboard/DataObject.cpp

Issue 2565283002: Fix webkitGetEntry for non-native files. (Closed)
Patch Set: . Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698