Changeset 220782 in webkit
- Timestamp:
- Aug 15, 2017 7:23:41 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 5 added
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r220779 r220782 1 2017-08-15 Ryosuke Niwa <rniwa@webkit.org> 2 3 Make DataTransferItemList work with plain text entries 4 https://bugs.webkit.org/show_bug.cgi?id=175596 5 6 Reviewed by Wenson Hsieh. 7 8 Rebaselined the tests and added two regression tests for pasting plain text and dropping a plain text file. 9 10 Unfortunately, dropping a file is only supported by DumpRenderTree on Mac :( so it's disabled elsewhere. 11 12 * editing/pasteboard/datatransfer-idl-expected.txt: Rebaselined now that NoInterfaceObject has been dropped from 13 DataTransferItem.idl and DataTransferItemList.idl as expected. 14 * editing/pasteboard/datatransfer-idl.html: Fixed the bug that it wasn't testing IDL for DataTransferItem. 15 * editing/pasteboard/datatransfer-items-drop-plaintext-file-expected.txt: Added. 16 * editing/pasteboard/datatransfer-items-drop-plaintext-file.html: Added. 17 * editing/pasteboard/datatransfer-items-paste-plaintext-expected.txt: Added. 18 * editing/pasteboard/datatransfer-items-paste-plaintext.html: Added. 19 * editing/resources/text-pasteboard-data.txt: Added. 20 * platform/gtk/js/dom/global-constructors-attributes-expected.txt: 21 * platform/ios/TestExpectations: 22 * platform/mac-elcapitan-wk2/js/dom/global-constructors-attributes-expected.txt: 23 * platform/mac-elcapitan/js/dom/global-constructors-attributes-expected.txt: 24 * platform/mac-highsierra-wk1/js/dom/global-constructors-attributes-expected.txt: 25 * platform/mac-highsierra/js/dom/global-constructors-attributes-expected.txt: 26 * platform/mac/js/dom/global-constructors-attributes-expected.txt: 27 * platform/win/TestExpectations: 28 * platform/wk2/TestExpectations: 29 * platform/wpe/js/dom/global-constructors-attributes-expected.txt: 30 1 31 2017-08-15 Chris Dumez <cdumez@apple.com> 2 32 -
trunk/LayoutTests/editing/pasteboard/datatransfer-idl-expected.txt
r220627 r220782 1 CONSOLE MESSAGE: line 251: callback not yet supported 1 2 2 3 PASS DataTransfer interface: existence and properties of interface object … … 14 15 PASS DataTransfer interface: operation clearData(DOMString) 15 16 PASS DataTransfer interface: attribute files 16 FAIL DataTransferItemList interface: existence and properties of interface object assert_own_property: self does not have own property "DataTransferItemList" expected property "DataTransferItemList" missing 17 FAIL DataTransferItemList interface object length assert_own_property: self does not have own property "DataTransferItemList" expected property "DataTransferItemList" missing 18 FAIL DataTransferItemList interface object name assert_own_property: self does not have own property "DataTransferItemList" expected property "DataTransferItemList" missing 19 FAIL DataTransferItemList interface: existence and properties of interface prototype object assert_own_property: self does not have own property "DataTransferItemList" expected property "DataTransferItemList" missing 20 FAIL DataTransferItemList interface: existence and properties of interface prototype object's "constructor" property assert_own_property: self does not have own property "DataTransferItemList" expected property "DataTransferItemList" missing 21 FAIL DataTransferItemList interface: attribute length assert_own_property: self does not have own property "DataTransferItemList" expected property "DataTransferItemList" missing 22 FAIL DataTransferItemList interface: operation add(DOMString,DOMString) assert_own_property: self does not have own property "DataTransferItemList" expected property "DataTransferItemList" missing 23 FAIL DataTransferItemList interface: operation add(File) assert_own_property: self does not have own property "DataTransferItemList" expected property "DataTransferItemList" missing 24 FAIL DataTransferItemList interface: operation remove(unsigned long) assert_own_property: self does not have own property "DataTransferItemList" expected property "DataTransferItemList" missing 25 FAIL DataTransferItemList interface: operation clear() assert_own_property: self does not have own property "DataTransferItemList" expected property "DataTransferItemList" missing 17 PASS DataTransferItemList interface: existence and properties of interface object 18 PASS DataTransferItemList interface object length 19 PASS DataTransferItemList interface object name 20 PASS DataTransferItemList interface: existence and properties of interface prototype object 21 PASS DataTransferItemList interface: existence and properties of interface prototype object's "constructor" property 22 PASS DataTransferItemList interface: attribute length 23 FAIL DataTransferItemList interface: operation add(DOMString,DOMString) assert_equals: property has wrong .length expected 1 but got 0 24 FAIL DataTransferItemList interface: operation add(File) assert_equals: property has wrong .length expected 1 but got 0 25 PASS DataTransferItemList interface: operation remove(unsigned long) 26 PASS DataTransferItemList interface: operation clear() 27 PASS DataTransferItem interface: existence and properties of interface object 28 PASS DataTransferItem interface object length 29 PASS DataTransferItem interface object name 30 PASS DataTransferItem interface: existence and properties of interface prototype object 31 PASS DataTransferItem interface: existence and properties of interface prototype object's "constructor" property 32 PASS DataTransferItem interface: attribute kind 33 PASS DataTransferItem interface: attribute type 34 PASS DataTransferItem interface: operation getAsString(FunctionStringCallback) 35 PASS DataTransferItem interface: operation getAsFile() 26 36 -
trunk/LayoutTests/editing/pasteboard/datatransfer-idl.html
r220627 r220782 40 40 readonly attribute DOMString kind; 41 41 readonly attribute DOMString type; 42 void getAsString(FunctionStringCallback? _callback);42 void getAsString(FunctionStringCallback? callback); 43 43 File? getAsFile(); 44 44 }; … … 49 49 var idlsArray = new IdlArray(); 50 50 var idl = document.getElementById("datatransfer-idl").textContent 51 + document.getElementById("datatransferitemlist-idl").textContent ;51 + document.getElementById("datatransferitemlist-idl").textContent 52 52 + document.getElementById("datatransferitem-idl").textContent; 53 53 54 54 idlsArray.add_idls(idl); 55 55 idlsArray.add_untested_idls("interface Element {};"); 56 //idlsArray.add_untested_idls("interface ReadableStream {};");57 //idlsArray.add_objects({ Response: ['new Response()'] });58 56 idlsArray.test(); 59 57 </script> -
trunk/LayoutTests/platform/gtk/js/dom/global-constructors-attributes-expected.txt
r220450 r220782 399 399 PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').enumerable is false 400 400 PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').configurable is true 401 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').value is DataTransferItem 402 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').hasOwnProperty('get') is false 403 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').hasOwnProperty('set') is false 404 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').enumerable is false 405 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').configurable is true 406 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').value is DataTransferItemList 407 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').hasOwnProperty('get') is false 408 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').hasOwnProperty('set') is false 409 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').enumerable is false 410 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').configurable is true 401 411 PASS Object.getOwnPropertyDescriptor(global, 'DataView').value is DataView 402 412 PASS Object.getOwnPropertyDescriptor(global, 'DataView').hasOwnProperty('get') is false -
trunk/LayoutTests/platform/ios/TestExpectations
r220747 r220782 236 236 237 237 # Drag-and-drop is not supported: 238 editing/pasteboard/datatransfer-items-drop-plaintext-file.html 239 editing/pasteboard/datatransfer-items-paste-plaintext.html 238 240 editing/pasteboard/drag-link-with-data-transfer-adds-trusted-link-to-pasteboard.html 239 241 fast/events/bogus-dropEffect-effectAllowed.html -
trunk/LayoutTests/platform/mac-elcapitan-wk2/js/dom/global-constructors-attributes-expected.txt
r220409 r220782 399 399 PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').enumerable is false 400 400 PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').configurable is true 401 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').value is DataTransferItem 402 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').hasOwnProperty('get') is false 403 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').hasOwnProperty('set') is false 404 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').enumerable is false 405 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').configurable is true 406 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').value is DataTransferItemList 407 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').hasOwnProperty('get') is false 408 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').hasOwnProperty('set') is false 409 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').enumerable is false 410 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').configurable is true 401 411 PASS Object.getOwnPropertyDescriptor(global, 'DataView').value is DataView 402 412 PASS Object.getOwnPropertyDescriptor(global, 'DataView').hasOwnProperty('get') is false -
trunk/LayoutTests/platform/mac-elcapitan/js/dom/global-constructors-attributes-expected.txt
r220343 r220782 389 389 PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').enumerable is false 390 390 PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').configurable is true 391 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').value is DataTransferItem 392 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').hasOwnProperty('get') is false 393 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').hasOwnProperty('set') is false 394 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').enumerable is false 395 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').configurable is true 396 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').value is DataTransferItemList 397 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').hasOwnProperty('get') is false 398 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').hasOwnProperty('set') is false 399 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').enumerable is false 400 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').configurable is true 391 401 PASS Object.getOwnPropertyDescriptor(global, 'DataView').value is DataView 392 402 PASS Object.getOwnPropertyDescriptor(global, 'DataView').hasOwnProperty('get') is false -
trunk/LayoutTests/platform/mac-highsierra-wk1/js/dom/global-constructors-attributes-expected.txt
r219729 r220782 394 394 PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').enumerable is false 395 395 PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').configurable is true 396 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').value is DataTransferItem 397 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').hasOwnProperty('get') is false 398 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').hasOwnProperty('set') is false 399 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').enumerable is false 400 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').configurable is true 401 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').value is DataTransferItemList 402 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').hasOwnProperty('get') is false 403 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').hasOwnProperty('set') is false 404 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').enumerable is false 405 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').configurable is true 396 406 PASS Object.getOwnPropertyDescriptor(global, 'DataView').value is DataView 397 407 PASS Object.getOwnPropertyDescriptor(global, 'DataView').hasOwnProperty('get') is false -
trunk/LayoutTests/platform/mac-highsierra/js/dom/global-constructors-attributes-expected.txt
r220311 r220782 409 409 PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').enumerable is false 410 410 PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').configurable is true 411 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').value is DataTransferItem 412 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').hasOwnProperty('get') is false 413 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').hasOwnProperty('set') is false 414 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').enumerable is false 415 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').configurable is true 416 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').value is DataTransferItemList 417 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').hasOwnProperty('get') is false 418 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').hasOwnProperty('set') is false 419 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').enumerable is false 420 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').configurable is true 411 421 PASS Object.getOwnPropertyDescriptor(global, 'DataView').value is DataView 412 422 PASS Object.getOwnPropertyDescriptor(global, 'DataView').hasOwnProperty('get') is false -
trunk/LayoutTests/platform/mac/js/dom/global-constructors-attributes-expected.txt
r220343 r220782 404 404 PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').enumerable is false 405 405 PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').configurable is true 406 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').value is DataTransferItem 407 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').hasOwnProperty('get') is false 408 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').hasOwnProperty('set') is false 409 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').enumerable is false 410 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').configurable is true 411 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').value is DataTransferItemList 412 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').hasOwnProperty('get') is false 413 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').hasOwnProperty('set') is false 414 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').enumerable is false 415 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').configurable is true 406 416 PASS Object.getOwnPropertyDescriptor(global, 'DataView').value is DataView 407 417 PASS Object.getOwnPropertyDescriptor(global, 'DataView').hasOwnProperty('get') is false -
trunk/LayoutTests/platform/win/TestExpectations
r220734 r220782 122 122 123 123 # TODO Drag & Drop doesn't work correctly in DRT <rdar://5621244> 124 editing/pasteboard/datatransfer-items-drop-plaintext-file.html 124 125 fast/events/drop-handler-should-not-stop-navigate.html [ Skip ] 125 126 fast/events/drag-in-frames.html [ Skip ] -
trunk/LayoutTests/platform/wk2/TestExpectations
r220767 r220782 564 564 # WebKitTestRunner needs an implementation of eventSender.beginDragWithFiles 565 565 # https://bugs.webkit.org/show_bug.cgi?id=64285 566 editing/pasteboard/datatransfer-items-drop-plaintext-file.html 566 567 editing/pasteboard/file-drag-to-editable.html [ Skip ] 567 568 editing/pasteboard/file-input-files-access.html -
trunk/LayoutTests/platform/wpe/js/dom/global-constructors-attributes-expected.txt
r220450 r220782 394 394 PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').enumerable is false 395 395 PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').configurable is true 396 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').value is DataTransferItem 397 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').hasOwnProperty('get') is false 398 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').hasOwnProperty('set') is false 399 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').enumerable is false 400 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItem').configurable is true 401 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').value is DataTransferItemList 402 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').hasOwnProperty('get') is false 403 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').hasOwnProperty('set') is false 404 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').enumerable is false 405 PASS Object.getOwnPropertyDescriptor(global, 'DataTransferItemList').configurable is true 396 406 PASS Object.getOwnPropertyDescriptor(global, 'DataView').value is DataView 397 407 PASS Object.getOwnPropertyDescriptor(global, 'DataView').hasOwnProperty('get') is false -
trunk/Source/JavaScriptCore/ChangeLog
r220778 r220782 1 2017-08-15 Ryosuke Niwa <rniwa@webkit.org> 2 3 Make DataTransferItemList work with plain text entries 4 https://bugs.webkit.org/show_bug.cgi?id=175596 5 6 Reviewed by Wenson Hsieh. 7 8 Added DataTransferItem as a common identifier since it's a runtime enabled feature. 9 10 * runtime/CommonIdentifiers.h: 11 1 12 2017-08-15 Robin Morisset <rmorisset@apple.com> 2 13 -
trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h
r220627 r220782 44 44 macro(Date) \ 45 45 macro(DateTimeFormat) \ 46 macro(DataTransferItem) \ 46 47 macro(DataTransferItemList) \ 47 48 macro(DocumentTimeline) \ -
trunk/Source/WebCore/ChangeLog
r220781 r220782 1 2017-08-15 Ryosuke Niwa <rniwa@webkit.org> 2 3 Make DataTransferItemList work with plain text entries 4 https://bugs.webkit.org/show_bug.cgi?id=175596 5 6 Reviewed by Wenson Hsieh. 7 8 Added the basic machinery to get the list of plain text items to DataTransferItemList and DataTransferItem. 9 10 Each DataTransferItem now depends on DataTransfer so it does ref-forwarding like DataTransferItemList to make 11 DataTransfer alive as long as any DataTransferItem is alive. 12 13 Specifications: https://html.spec.whatwg.org/multipage/dnd.html#the-datatransferitem-interface 14 https://html.spec.whatwg.org/multipage/dnd.html#the-datatransferitemlist-interface 15 16 Tests: editing/pasteboard/datatransfer-items-drop-plaintext-file.html 17 editing/pasteboard/datatransfer-items-paste-plaintext.html 18 19 * dom/DataTransferItem.cpp: 20 (WebCore::DataTransferItem::DataTransferItem): Added two variants one for plain text and another one for a file. 21 (WebCore::DataTransferItem::kind const): Rewritten. 22 (WebCore::DataTransferItem::getAsString const): Implemented. 23 (WebCore::DataTransferItem::getAsFile const): Implemented. 24 * dom/DataTransferItem.h: 25 (WebCore::DataTransferItem::ref): Added. 26 (WebCore::DataTransferItem::deref): Added. 27 (WebCore::DataTransferItem::type const): Returns String instead of AtomicString. 28 (WebCore::DataTransferItem::kind const): Moved to cpp. 29 * dom/DataTransferItem.idl: Removed NoInterfaceObject since the interface object should exist on DOMWindow. 30 * dom/DataTransferItemList.cpp: 31 (WebCore::DataTransferItemList::length): Implemented. 32 (WebCore::DataTransferItemList::item): Ditto. 33 (WebCore::isSupportedType): Added. For now, we only support text/plain. 34 (WebCore::DataTransferItemList::ensureItems): Added. Constructs the list of DataTransferItems. 35 * dom/DataTransferItemList.h: 36 (DataTransferItemList): Added m_items. The list is filled lazily by ensureItems. 37 * dom/DataTransferItemList.idl: Removed NoInterfaceObject since the interface object should exist on DOMWindow. 38 1 39 2017-08-15 Simon Fraser <simon.fraser@apple.com> 2 40 -
trunk/Source/WebCore/dom/DataTransferItem.cpp
r220627 r220782 33 33 #include "DataTransferItem.h" 34 34 35 #include "Blob.h" 35 #include "File.h" 36 #include "ScriptExecutionContext.h" 36 37 #include "StringCallback.h" 37 38 38 39 namespace WebCore { 39 40 40 DataTransferItem::DataTransferItem() 41 DataTransferItem::DataTransferItem(DataTransfer& dataTransfer, const String& type) 42 : m_dataTransfer(dataTransfer) 43 , m_type(type) 44 { 45 } 46 47 DataTransferItem::DataTransferItem(DataTransfer& dataTransfer, const String& type, Ref<File>&& file) 48 : m_dataTransfer(dataTransfer) 49 , m_type(type) 50 , m_file(WTFMove(file)) 41 51 { 42 52 } … … 46 56 } 47 57 48 void DataTransferItem::getAsString(RefPtr<StringCallback>&&) const58 String DataTransferItem::kind() const 49 59 { 60 return m_file ? ASCIILiteral("file") : ASCIILiteral("string"); 50 61 } 51 62 52 RefPtr<Blob> DataTransferItem::getAsFile() const63 void DataTransferItem::getAsString(ScriptExecutionContext& context, RefPtr<StringCallback>&& callback) const 53 64 { 54 return nullptr; 65 if (!callback || !m_dataTransfer.canReadData() || m_file) 66 return; 67 68 // FIXME: Make this async. 69 callback->scheduleCallback(context, m_dataTransfer.getData(m_type)); 70 } 71 72 RefPtr<File> DataTransferItem::getAsFile() const 73 { 74 if (!m_dataTransfer.canReadData()) 75 return nullptr; 76 return m_file.copyRef(); 55 77 } 56 78 -
trunk/Source/WebCore/dom/DataTransferItem.h
r220627 r220782 32 32 #pragma once 33 33 34 #include "DataTransfer.h" 35 #include "ScriptWrappable.h" 34 36 #include <wtf/Forward.h> 35 37 #include <wtf/RefCounted.h> … … 38 40 namespace WebCore { 39 41 40 class Blob; 42 class File; 43 class ScriptExecutionContext; 41 44 class StringCallback; 42 45 43 class DataTransferItem : public RefCounted<DataTransferItem> { 46 class DataTransferItem : public ScriptWrappable { 47 WTF_MAKE_NONCOPYABLE(DataTransferItem); WTF_MAKE_FAST_ALLOCATED; 44 48 public: 45 DataTransferItem(); 49 DataTransferItem(DataTransfer&, const String&); 50 DataTransferItem(DataTransfer&, const String&, Ref<File>&&); 46 51 ~DataTransferItem(); 47 52 48 const AtomicString& kind() const { return m_kind; } 49 const AtomicString& type() const { return m_type; } 50 void getAsString(RefPtr<StringCallback>&&) const; 51 RefPtr<Blob> getAsFile() const; 53 // DataTransfer owns DataTransferItem, and DataTransfer is kept alive as long as DataTransferItem is alive. 54 void ref() { m_dataTransfer.ref(); } 55 void deref() { m_dataTransfer.deref(); } 56 57 String kind() const; 58 const String& type() const { return m_type; } 59 void getAsString(ScriptExecutionContext&, RefPtr<StringCallback>&&) const; 60 RefPtr<File> getAsFile() const; 52 61 53 62 private: 54 AtomicString m_kind; 55 AtomicString m_type; 63 DataTransfer& m_dataTransfer; 64 const String m_type; 65 RefPtr<File> m_file; 56 66 }; 57 67 -
trunk/Source/WebCore/dom/DataTransferItem.idl
r220627 r220782 31 31 32 32 [ 33 NoInterfaceObject,34 33 EnabledAtRuntime=DataTransferItems, 35 34 ImplementationLacksVTable, … … 38 37 readonly attribute DOMString type; 39 38 40 void getAsString(optionalStringCallback? callback);41 BlobgetAsFile();39 [CallWith=ScriptExecutionContext] void getAsString(StringCallback? callback); 40 File getAsFile(); 42 41 }; 43 42 -
trunk/Source/WebCore/dom/DataTransferItemList.cpp
r220627 r220782 28 28 29 29 #include "DataTransferItem.h" 30 #include "FileList.h" 30 31 31 32 namespace WebCore { … … 33 34 unsigned DataTransferItemList::length() const 34 35 { 35 return 0;36 return ensureItems().size(); 36 37 } 37 38 38 RefPtr<DataTransferItem> DataTransferItemList::item(unsigned )39 RefPtr<DataTransferItem> DataTransferItemList::item(unsigned index) 39 40 { 40 return nullptr; 41 auto& items = ensureItems(); 42 if (items.size() <= index) 43 return nullptr; 44 return items[index].get(); 41 45 } 42 46 … … 58 62 } 59 63 64 // FIXME: DataTransfer should filter types itself. 65 static bool isSupportedType(const String& type) 66 { 67 return equalIgnoringASCIICase(type, "text/plain"); 60 68 } 61 69 70 Vector<std::unique_ptr<DataTransferItem>>& DataTransferItemList::ensureItems() const 71 { 72 if (m_items) 73 return *m_items; 74 75 Vector<std::unique_ptr<DataTransferItem>> items; 76 for (String& type : m_dataTransfer.types()) { 77 if (isSupportedType(type)) 78 items.append(std::make_unique<DataTransferItem>(m_dataTransfer, type)); 79 } 80 81 FileList& files = m_dataTransfer.files(); 82 for (unsigned i = 0, length = files.length(); i < length; ++i) { 83 File& file = *files.item(i); 84 String type = File::contentTypeForFile(file.path()); 85 if (isSupportedType(type)) 86 items.append(std::make_unique<DataTransferItem>(m_dataTransfer, type, file)); 87 } 88 89 90 m_items = WTFMove(items); 91 92 return *m_items; 93 } 94 95 } 96 -
trunk/Source/WebCore/dom/DataTransferItemList.h
r220627 r220782 33 33 34 34 #include "DataTransfer.h" 35 #include "DataTransferItem.h" 35 36 #include "ExceptionOr.h" 37 #include "ScriptWrappable.h" 36 38 #include <wtf/Forward.h> 37 39 #include <wtf/RefCounted.h> … … 39 41 namespace WebCore { 40 42 41 class DataTransferItem;42 43 class File; 43 44 44 class DataTransferItemList {45 class DataTransferItemList : public ScriptWrappable { 45 46 WTF_MAKE_NONCOPYABLE(DataTransferItemList); WTF_MAKE_FAST_ALLOCATED; 46 47 public: … … 62 63 63 64 private: 65 Vector<std::unique_ptr<DataTransferItem>>& ensureItems() const; 66 64 67 DataTransfer& m_dataTransfer; 68 mutable std::optional<Vector<std::unique_ptr<DataTransferItem>>> m_items; 65 69 }; 66 70 -
trunk/Source/WebCore/dom/DataTransferItemList.idl
r220627 r220782 31 31 32 32 [ 33 NoInterfaceObject,34 33 EnabledAtRuntime=DataTransferItems, 35 34 JSGenerateToNativeObject,
Note: See TracChangeset
for help on using the changeset viewer.