Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (c) 2008, 2009, 2012 Google Inc. All rights reserved. | 2 * Copyright (c) 2008, 2009, 2012 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 99 if (!internalAddStringItem(item)) | 99 if (!internalAddStringItem(item)) |
| 100 return nullptr; | 100 return nullptr; |
| 101 return item; | 101 return item; |
| 102 } | 102 } |
| 103 | 103 |
| 104 DataObjectItem* DataObject::add(File* file) { | 104 DataObjectItem* DataObject::add(File* file) { |
| 105 if (!file) | 105 if (!file) |
| 106 return nullptr; | 106 return nullptr; |
| 107 | 107 |
| 108 DataObjectItem* item = DataObjectItem::createFromFile(file); | 108 DataObjectItem* item = DataObjectItem::createFromFile(file); |
| 109 m_itemList.append(item); | 109 internalAddFileItem(item); |
| 110 return item; | 110 return item; |
| 111 } | 111 } |
| 112 | 112 |
| 113 DataObjectItem* DataObject::add(File* file, const String& fileSystemId) { | |
| 114 if (!file) | |
| 115 return nullptr; | |
| 116 | |
| 117 DataObjectItem* item = | |
| 118 DataObjectItem::createFromFileWithFileSystemId(file, fileSystemId); | |
| 119 internalAddFileItem(item); | |
| 120 return item; | |
| 121 } | |
| 122 | |
| 113 void DataObject::clearData(const String& type) { | 123 void DataObject::clearData(const String& type) { |
| 114 for (size_t i = 0; i < m_itemList.size(); ++i) { | 124 for (size_t i = 0; i < m_itemList.size(); ++i) { |
| 115 if (m_itemList[i]->kind() == DataObjectItem::StringKind && | 125 if (m_itemList[i]->kind() == DataObjectItem::StringKind && |
| 116 m_itemList[i]->type() == type) { | 126 m_itemList[i]->type() == type) { |
| 117 // Per the spec, type must be unique among all items of kind 'string'. | 127 // Per the spec, type must be unique among all items of kind 'string'. |
| 118 m_itemList.remove(i); | 128 m_itemList.remove(i); |
| 119 return; | 129 return; |
| 120 } | 130 } |
| 121 } | 131 } |
| 122 } | 132 } |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 199 Vector<String> DataObject::filenames() const { | 209 Vector<String> DataObject::filenames() const { |
| 200 Vector<String> results; | 210 Vector<String> results; |
| 201 for (size_t i = 0; i < m_itemList.size(); ++i) { | 211 for (size_t i = 0; i < m_itemList.size(); ++i) { |
| 202 if (m_itemList[i]->isFilename()) | 212 if (m_itemList[i]->isFilename()) |
| 203 results.append(toFile(m_itemList[i]->getAsFile())->path()); | 213 results.append(toFile(m_itemList[i]->getAsFile())->path()); |
| 204 } | 214 } |
| 205 return results; | 215 return results; |
| 206 } | 216 } |
| 207 | 217 |
| 208 void DataObject::addFilename(const String& filename, | 218 void DataObject::addFilename(const String& filename, |
| 209 const String& displayName) { | 219 const String& displayName, |
| 210 internalAddFileItem(DataObjectItem::createFromFile( | 220 const String& fileSystemId) { |
| 211 File::createForUserProvidedFile(filename, displayName))); | 221 internalAddFileItem(DataObjectItem::createFromFileWithFileSystemId( |
| 222 File::createForUserProvidedFile(filename, displayName), fileSystemId)); | |
| 212 } | 223 } |
| 213 | 224 |
| 214 void DataObject::addSharedBuffer(const String& name, | 225 void DataObject::addSharedBuffer(const String& name, |
| 215 PassRefPtr<SharedBuffer> buffer) { | 226 PassRefPtr<SharedBuffer> buffer) { |
| 216 internalAddFileItem( | 227 internalAddFileItem( |
| 217 DataObjectItem::createFromSharedBuffer(name, std::move(buffer))); | 228 DataObjectItem::createFromSharedBuffer(name, std::move(buffer))); |
| 218 } | 229 } |
| 219 | 230 |
| 220 DataObject::DataObject() : m_modifiers(0) {} | 231 DataObject::DataObject() : m_modifiers(0) {} |
| 221 | 232 |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 245 m_itemList.append(item); | 256 m_itemList.append(item); |
| 246 } | 257 } |
| 247 | 258 |
| 248 DEFINE_TRACE(DataObject) { | 259 DEFINE_TRACE(DataObject) { |
| 249 visitor->trace(m_itemList); | 260 visitor->trace(m_itemList); |
| 250 Supplementable<DataObject>::trace(visitor); | 261 Supplementable<DataObject>::trace(visitor); |
| 251 } | 262 } |
| 252 | 263 |
| 253 DataObject* DataObject::create(WebDragData data) { | 264 DataObject* DataObject::create(WebDragData data) { |
| 254 DataObject* dataObject = create(); | 265 DataObject* dataObject = create(); |
| 266 bool hasFileSystem = false; | |
| 255 | 267 |
| 256 WebVector<WebDragData::Item> items = data.items(); | 268 WebVector<WebDragData::Item> items = data.items(); |
| 257 for (unsigned i = 0; i < items.size(); ++i) { | 269 for (unsigned i = 0; i < items.size(); ++i) { |
| 258 WebDragData::Item item = items[i]; | 270 WebDragData::Item item = items[i]; |
| 259 | 271 |
| 260 switch (item.storageType) { | 272 switch (item.storageType) { |
| 261 case WebDragData::Item::StorageTypeString: | 273 case WebDragData::Item::StorageTypeString: |
| 262 if (String(item.stringType) == mimeTypeTextURIList) | 274 if (String(item.stringType) == mimeTypeTextURIList) |
| 263 dataObject->setURLAndTitle(item.stringData, item.title); | 275 dataObject->setURLAndTitle(item.stringData, item.title); |
| 264 else if (String(item.stringType) == mimeTypeTextHTML) | 276 else if (String(item.stringType) == mimeTypeTextHTML) |
| 265 dataObject->setHTMLAndBaseURL(item.stringData, item.baseURL); | 277 dataObject->setHTMLAndBaseURL(item.stringData, item.baseURL); |
| 266 else | 278 else |
| 267 dataObject->setData(item.stringType, item.stringData); | 279 dataObject->setData(item.stringType, item.stringData); |
| 268 break; | 280 break; |
| 269 case WebDragData::Item::StorageTypeFilename: | 281 case WebDragData::Item::StorageTypeFilename: |
| 270 dataObject->addFilename(item.filenameData, item.displayNameData); | 282 hasFileSystem = true; |
| 283 dataObject->addFilename(item.filenameData, item.displayNameData, | |
| 284 data.filesystemId()); | |
| 271 break; | 285 break; |
| 272 case WebDragData::Item::StorageTypeBinaryData: | 286 case WebDragData::Item::StorageTypeBinaryData: |
| 273 // This should never happen when dragging in. | 287 // This should never happen when dragging in. |
| 274 break; | 288 break; |
| 275 case WebDragData::Item::StorageTypeFileSystemFile: { | 289 case WebDragData::Item::StorageTypeFileSystemFile: { |
| 276 // FIXME: The file system URL may refer a user visible file, see | 290 // FIXME: The file system URL may refer a user visible file, see |
| 277 // http://crbug.com/429077 | 291 // http://crbug.com/429077 |
| 292 hasFileSystem = true; | |
| 278 FileMetadata fileMetadata; | 293 FileMetadata fileMetadata; |
| 279 fileMetadata.length = item.fileSystemFileSize; | 294 fileMetadata.length = item.fileSystemFileSize; |
| 280 dataObject->add(File::createForFileSystemFile( | 295 |
| 281 item.fileSystemURL, fileMetadata, File::IsNotUserVisible)); | 296 dataObject->add( |
| 297 File::createForFileSystemFile(item.fileSystemURL, fileMetadata, | |
| 298 File::IsNotUserVisible), | |
| 299 item.fileSystemId); | |
| 282 } break; | 300 } break; |
| 283 } | 301 } |
| 284 } | 302 } |
| 285 | 303 |
| 286 if (!data.filesystemId().isNull()) | 304 dataObject->setFilesystemId(data.filesystemId()); |
| 287 DraggedIsolatedFileSystem::prepareForDataObject(dataObject, | 305 |
| 288 data.filesystemId()); | 306 if (hasFileSystem) { |
| 307 DraggedIsolatedFileSystem::prepareForDataObject(dataObject); | |
| 308 } | |
|
kinuko
2016/12/13 14:45:10
nit: no need of { } for single-line body)
hirono
2016/12/14 04:54:55
Done.
| |
| 309 | |
| 289 return dataObject; | 310 return dataObject; |
| 290 } | 311 } |
| 291 | 312 |
| 292 WebDragData DataObject::toWebDragData() { | 313 WebDragData DataObject::toWebDragData() { |
| 293 WebDragData data; | 314 WebDragData data; |
| 294 data.initialize(); | 315 data.initialize(); |
| 295 data.setModifierKeyState(m_modifiers); | 316 data.setModifierKeyState(m_modifiers); |
| 296 WebVector<WebDragData::Item> itemList(length()); | 317 WebVector<WebDragData::Item> itemList(length()); |
| 297 | 318 |
| 298 for (size_t i = 0; i < length(); ++i) { | 319 for (size_t i = 0; i < length(); ++i) { |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 311 if (blob->isFile()) { | 332 if (blob->isFile()) { |
| 312 File* file = toFile(blob); | 333 File* file = toFile(blob); |
| 313 if (file->hasBackingFile()) { | 334 if (file->hasBackingFile()) { |
| 314 item.storageType = WebDragData::Item::StorageTypeFilename; | 335 item.storageType = WebDragData::Item::StorageTypeFilename; |
| 315 item.filenameData = file->path(); | 336 item.filenameData = file->path(); |
| 316 item.displayNameData = file->name(); | 337 item.displayNameData = file->name(); |
| 317 } else if (!file->fileSystemURL().isEmpty()) { | 338 } else if (!file->fileSystemURL().isEmpty()) { |
| 318 item.storageType = WebDragData::Item::StorageTypeFileSystemFile; | 339 item.storageType = WebDragData::Item::StorageTypeFileSystemFile; |
| 319 item.fileSystemURL = file->fileSystemURL(); | 340 item.fileSystemURL = file->fileSystemURL(); |
| 320 item.fileSystemFileSize = file->size(); | 341 item.fileSystemFileSize = file->size(); |
| 342 item.fileSystemId = originalItem->fileSystemId(); | |
| 321 } else { | 343 } else { |
| 322 // FIXME: support dragging constructed Files across renderers, see | 344 // FIXME: support dragging constructed Files across renderers, see |
| 323 // http://crbug.com/394955 | 345 // http://crbug.com/394955 |
| 324 item.storageType = WebDragData::Item::StorageTypeString; | 346 item.storageType = WebDragData::Item::StorageTypeString; |
| 325 item.stringType = "text/plain"; | 347 item.stringType = "text/plain"; |
| 326 item.stringData = file->name(); | 348 item.stringData = file->name(); |
| 327 } | 349 } |
| 328 } else { | 350 } else { |
| 329 ASSERT_NOT_REACHED(); | 351 ASSERT_NOT_REACHED(); |
| 330 } | 352 } |
| 331 } else { | 353 } else { |
| 332 ASSERT_NOT_REACHED(); | 354 ASSERT_NOT_REACHED(); |
| 333 } | 355 } |
| 334 } else { | 356 } else { |
| 335 ASSERT_NOT_REACHED(); | 357 ASSERT_NOT_REACHED(); |
| 336 } | 358 } |
| 337 item.title = originalItem->title(); | 359 item.title = originalItem->title(); |
| 338 item.baseURL = originalItem->baseURL(); | 360 item.baseURL = originalItem->baseURL(); |
| 339 itemList[i] = item; | 361 itemList[i] = item; |
| 340 } | 362 } |
| 341 data.swapItems(itemList); | 363 data.swapItems(itemList); |
| 342 return data; | 364 return data; |
| 343 } | 365 } |
| 344 | 366 |
| 345 } // namespace blink | 367 } // namespace blink |
| OLD | NEW |