Diff
Modified: trunk/Source/WebCore/ChangeLog (222024 => 222025)
--- trunk/Source/WebCore/ChangeLog 2017-09-14 16:15:35 UTC (rev 222024)
+++ trunk/Source/WebCore/ChangeLog 2017-09-14 16:22:07 UTC (rev 222025)
@@ -1,3 +1,84 @@
+2017-09-14 Sam Weinig <[email protected]>
+
+ [Cleanup] Cleanup uses of the FileList class
+ https://bugs.webkit.org/show_bug.cgi?id=176800
+
+ Reviewed by Alex Christensen.
+
+ * fileapi/FileList.cpp:
+ * fileapi/FileList.h:
+
+ Store list of files as Refs, rather than RefPtrs.
+ Add direct accessor to the underlying Vector for faster iteration.
+ Add file(unsigned) function to allow direct indexing, rather than using
+ the DOM exposed item function which always does a length check.
+
+ * Modules/entriesapi/HTMLInputElementEntriesAPI.cpp:
+
+ Remove unused RuntimeEnabledFeatures.h #include.
+ Use modern for loop and the new direct file vector access.
+
+ * bindings/js/SerializedScriptValue.cpp:
+ (WebCore::CloneSerializer::dumpIfTerminal):
+ (WebCore::CloneSerializer::write):
+ (WebCore::CloneDeserializer::readFile):
+ (WebCore::CloneDeserializer::readTerminal):
+
+ Remove unnecessary #includes, adopt auto, and use modern for-loop
+ for FileList.
+
+ * dom/DataTransfer.cpp:
+ (WebCore::DataTransfer::files const):
+ (WebCore::DataTransfer::hasFileOfType):
+
+ Use auto.
+
+ (WebCore::DataTransfer::createForInputEvent):
+
+ Use initializer list for the typeToStringMap.
+
+ * dom/DataTransferItemList.cpp:
+ (WebCore::DataTransferItemList::ensureItems const):
+
+ Use auto and modern for-loop for FileList.
+
+ * html/FileInputType.cpp:
+ (WebCore::FileInputType::filesFromFormControlState):
+ (WebCore::FileInputType::saveFormControlState const):
+ (WebCore::FileInputType::appendFormData const):
+ (WebCore::FileInputType::handleDOMActivateEvent):
+ (WebCore::FileInputType::getTypeSpecificValue):
+ (WebCore::FileInputType::disabledAttributeChanged):
+ (WebCore::FileInputType::multipleAttributeChanged):
+ (WebCore::FileInputType::setFiles):
+ (WebCore::FileInputType::receiveDroppedFiles):
+ (WebCore::FileInputType::defaultToolTip const):
+
+ Adopt auto, brace-initialization, and modern for-loops.
+
+ * html/FileListCreator.cpp:
+ (WebCore::appendDirectoryFiles):
+ (WebCore::FileListCreator::createFileList):
+
+ Update to work in terms of Vector<Ref<File>>.
+
+ * html/FormController.h:
+ (WebCore::FormControlState::FormControlState):
+
+ Re-format existing constructors and add one that takes an r-value
+ Vector<String> to allow construction from a pre-created list (used
+ in FileInputType::saveFormControlState)
+
+ * platform/DragData.h:
+ * platform/gtk/DragDataGtk.cpp:
+ (WebCore::DragData::asFilenames const):
+ * platform/mac/DragDataMac.mm:
+ (WebCore::DragData::asFilenames const):
+ * platform/win/DragDataWin.cpp:
+ (WebCore::DragData::asFilenames const):
+
+ Convert asFilenames to return, rather than take, a Vector<String>.
+
2017-09-14 Carlos Garcia Campos <[email protected]>
[Harfbuzz] Wrong offset returned by HarfBuzzShaper::offsetForPosition() when target point is at the middle of a character
Modified: trunk/Source/WebCore/Modules/entriesapi/HTMLInputElementEntriesAPI.cpp (222024 => 222025)
--- trunk/Source/WebCore/Modules/entriesapi/HTMLInputElementEntriesAPI.cpp 2017-09-14 16:15:35 UTC (rev 222024)
+++ trunk/Source/WebCore/Modules/entriesapi/HTMLInputElementEntriesAPI.cpp 2017-09-14 16:22:07 UTC (rev 222025)
@@ -29,7 +29,6 @@
#include "DOMFileSystem.h"
#include "FileList.h"
#include "HTMLInputElement.h"
-#include "RuntimeEnabledFeatures.h"
namespace WebCore {
@@ -42,15 +41,14 @@
if (input.hasAttributeWithoutSynchronization(webkitdirectoryAttr))
return { };
- auto* files = input.files();
- if (!files)
+ auto* fileList = input.files();
+ if (!fileList)
return { };
- unsigned length = files->length();
Vector<Ref<FileSystemEntry>> entries;
- entries.reserveInitialCapacity(length);
- for (unsigned i = 0; i < length; ++i)
- entries.uncheckedAppend(DOMFileSystem::createEntryForFile(context, *files->item(i)));
+ entries.reserveInitialCapacity(fileList->files().size());
+ for (auto& file : fileList->files())
+ entries.uncheckedAppend(DOMFileSystem::createEntryForFile(context, file.copyRef()));
return entries;
}
Modified: trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp (222024 => 222025)
--- trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp 2017-09-14 16:15:35 UTC (rev 222024)
+++ trunk/Source/WebCore/bindings/js/SerializedScriptValue.cpp 2017-09-14 16:22:07 UTC (rev 222025)
@@ -27,7 +27,6 @@
#include "config.h"
#include "SerializedScriptValue.h"
-#include "Blob.h"
#include "BlobRegistry.h"
#include "CryptoKeyAES.h"
#include "CryptoKeyEC.h"
@@ -35,10 +34,7 @@
#include "CryptoKeyRSA.h"
#include "CryptoKeyRSAComponents.h"
#include "CryptoKeyRaw.h"
-#include "File.h"
-#include "FileList.h"
#include "IDBValue.h"
-#include "ImageData.h"
#include "JSBlob.h"
#include "JSCryptoKey.h"
#include "JSDOMBinding.h"
@@ -929,7 +925,7 @@
return false;
if (value.isObject()) {
- JSObject* obj = asObject(value);
+ auto* obj = asObject(value);
if (obj->inherits(vm, BooleanObject::info())) {
if (!startObjectInternal(obj)) // handle duplicates
return true;
@@ -951,20 +947,19 @@
write(obj->internalValue().asNumber());
return true;
}
- if (File* file = JSFile::toWrapped(vm, obj)) {
+ if (auto* file = JSFile::toWrapped(vm, obj)) {
write(FileTag);
- write(file);
+ write(*file);
return true;
}
- if (FileList* list = JSFileList::toWrapped(vm, obj)) {
+ if (auto* list = JSFileList::toWrapped(vm, obj)) {
write(FileListTag);
- unsigned length = list->length();
- write(length);
- for (unsigned i = 0; i < length; i++)
- write(list->item(i));
+ write(list->length());
+ for (auto& file : list->files())
+ write(file.get());
return true;
}
- if (Blob* blob = JSBlob::toWrapped(vm, obj)) {
+ if (auto* blob = JSBlob::toWrapped(vm, obj)) {
write(BlobTag);
m_blobURLs.append(blob->url());
write(blob->url());
@@ -972,7 +967,7 @@
write(blob->size());
return true;
}
- if (ImageData* data = "" obj)) {
+ if (auto* data = "" obj)) {
write(ImageDataTag);
write(data->width());
write(data->height());
@@ -981,7 +976,7 @@
return true;
}
if (obj->inherits(vm, RegExpObject::info())) {
- RegExpObject* regExp = asRegExpObject(obj);
+ auto* regExp = asRegExpObject(obj);
char flags[3];
int flagCount = 0;
if (regExp->regExp()->global())
@@ -996,7 +991,7 @@
return true;
}
if (obj->inherits(vm, JSMessagePort::info())) {
- ObjectPool::iterator index = m_transferredMessagePorts.find(obj);
+ auto index = m_transferredMessagePorts.find(obj);
if (index != m_transferredMessagePorts.end()) {
write(MessagePortReferenceTag);
write(index->value);
@@ -1006,12 +1001,12 @@
code = SerializationReturnCode::ValidationError;
return true;
}
- if (ArrayBuffer* arrayBuffer = toPossiblySharedArrayBuffer(vm, obj)) {
+ if (auto* arrayBuffer = toPossiblySharedArrayBuffer(vm, obj)) {
if (arrayBuffer->isNeutered()) {
code = SerializationReturnCode::ValidationError;
return true;
}
- ObjectPool::iterator index = m_transferredArrayBuffers.find(obj);
+ auto index = m_transferredArrayBuffers.find(obj);
if (index != m_transferredArrayBuffers.end()) {
write(ArrayBufferTransferTag);
write(index->value);
@@ -1020,8 +1015,7 @@
if (!startObjectInternal(obj)) // handle duplicates
return true;
- if (arrayBuffer->isShared()
- && m_context == SerializationContext::WorkerPostMessage) {
+ if (arrayBuffer->isShared() && m_context == SerializationContext::WorkerPostMessage) {
uint32_t index = m_sharedBuffers.size();
ArrayBufferContents contents;
if (arrayBuffer->shareWith(contents)) {
@@ -1045,7 +1039,7 @@
return success;
}
#if ENABLE(SUBTLE_CRYPTO)
- if (CryptoKey* key = JSCryptoKey::toWrapped(vm, obj)) {
+ if (auto* key = JSCryptoKey::toWrapped(vm, obj)) {
write(CryptoKeyTag);
Vector<uint8_t> serializedKey;
Vector<String> dummyBlobURLs;
@@ -1241,13 +1235,13 @@
writeLittleEndian(m_buffer, vector.data(), size);
}
- void write(const File* file)
+ void write(const File& file)
{
- m_blobURLs.append(file->url());
- write(file->path());
- write(file->url());
- write(file->type());
- write(file->name());
+ m_blobURLs.append(file.url());
+ write(file.path());
+ write(file.url());
+ write(file.type());
+ write(file.name());
}
#if ENABLE(SUBTLE_CRYPTO)
@@ -2033,16 +2027,16 @@
{
CachedStringRef path;
if (!readStringData(path))
- return 0;
+ return false;
CachedStringRef url;
if (!readStringData(url))
- return 0;
+ return false;
CachedStringRef type;
if (!readStringData(type))
- return 0;
+ return false;
CachedStringRef name;
if (!readStringData(name))
- return 0;
+ return false;
// If the blob URL for this file has an associated blob file path, prefer that one over the "built-in" path.
String filePath = blobFilePathForBlobURL(url->string());
@@ -2697,13 +2691,13 @@
unsigned length = 0;
if (!read(length))
return JSValue();
- Vector<RefPtr<File>> files;
+ Vector<Ref<File>> files;
for (unsigned i = 0; i < length; i++) {
RefPtr<File> file;
if (!readFile(file))
return JSValue();
if (m_isDOMGlobalObject)
- files.append(WTFMove(file));
+ files.append(file.releaseNonNull());
}
if (!m_isDOMGlobalObject)
return jsNull();
Modified: trunk/Source/WebCore/dom/DataTransfer.cpp (222024 => 222025)
--- trunk/Source/WebCore/dom/DataTransfer.cpp 2017-09-14 16:15:35 UTC (rev 222024)
+++ trunk/Source/WebCore/dom/DataTransfer.cpp 2017-09-14 16:22:07 UTC (rev 222025)
@@ -193,7 +193,7 @@
#endif
if (newlyCreatedFileList) {
- for (const String& filename : m_pasteboard->readFilenames())
+ for (auto& filename : m_pasteboard->readFilenames())
m_fileList->append(File::create(filename));
}
return *m_fileList;
@@ -203,7 +203,7 @@
{
ASSERT_WITH_SECURITY_IMPLICATION(canReadTypes());
- for (const String& path : m_pasteboard->readFilenames()) {
+ for (auto& path : m_pasteboard->readFilenames()) {
if (equalIgnoringASCIICase(File::contentTypeForFile(path), type))
return true;
}
@@ -220,9 +220,7 @@
Ref<DataTransfer> DataTransfer::createForInputEvent(const String& plainText, const String& htmlText)
{
- TypeToStringMap typeToStringMap;
- typeToStringMap.set(ASCIILiteral("text/plain"), plainText);
- typeToStringMap.set(ASCIILiteral("text/html"), htmlText);
+ TypeToStringMap typeToStringMap { { ASCIILiteral("text/plain"), plainText }, { ASCIILiteral("text/html"), htmlText } };
return adoptRef(*new DataTransfer(StoreMode::Readonly, StaticPasteboard::create(WTFMove(typeToStringMap)), Type::InputEvent));
}
Modified: trunk/Source/WebCore/dom/DataTransferItemList.cpp (222024 => 222025)
--- trunk/Source/WebCore/dom/DataTransferItemList.cpp 2017-09-14 16:15:35 UTC (rev 222024)
+++ trunk/Source/WebCore/dom/DataTransferItemList.cpp 2017-09-14 16:22:07 UTC (rev 222025)
@@ -124,18 +124,16 @@
return *m_items;
Vector<Ref<DataTransferItem>> items;
- for (String& type : m_dataTransfer.types()) {
- String lowercasedType = type.convertToASCIILowercase();
+ for (auto& type : m_dataTransfer.types()) {
+ auto lowercasedType = type.convertToASCIILowercase();
if (isSupportedType(lowercasedType))
items.append(DataTransferItem::create(m_weakPtrFactory.createWeakPtr(), lowercasedType));
}
- FileList& files = m_dataTransfer.files();
- for (unsigned i = 0, length = files.length(); i < length; ++i) {
- File& file = *files.item(i);
- String type = File::contentTypeForFile(file.path()).convertToASCIILowercase();
- if (isSupportedType(type) || file.isDirectory())
- items.append(DataTransferItem::create(m_weakPtrFactory.createWeakPtr(), type, file));
+ for (auto& file : m_dataTransfer.files().files()) {
+ auto type = File::contentTypeForFile(file->path()).convertToASCIILowercase();
+ if (isSupportedType(type) || file->isDirectory())
+ items.append(DataTransferItem::create(m_weakPtrFactory.createWeakPtr(), type, file.copyRef()));
}
m_items = WTFMove(items);
Modified: trunk/Source/WebCore/fileapi/FileList.cpp (222024 => 222025)
--- trunk/Source/WebCore/fileapi/FileList.cpp 2017-09-14 16:15:35 UTC (rev 222024)
+++ trunk/Source/WebCore/fileapi/FileList.cpp 2017-09-14 16:22:07 UTC (rev 222025)
@@ -26,27 +26,21 @@
#include "config.h"
#include "FileList.h"
-#include "File.h"
-
namespace WebCore {
-FileList::FileList()
-{
-}
-
File* FileList::item(unsigned index) const
{
if (index >= m_files.size())
- return 0;
- return m_files[index].get();
+ return nullptr;
+ return m_files[index].ptr();
}
Vector<String> FileList::paths() const
{
Vector<String> paths;
- for (unsigned i = 0; i < m_files.size(); ++i)
- paths.append(m_files[i]->path());
-
+ paths.reserveInitialCapacity(m_files.size());
+ for (auto& file : m_files)
+ paths.uncheckedAppend(file->path());
return paths;
}
Modified: trunk/Source/WebCore/fileapi/FileList.h (222024 => 222025)
--- trunk/Source/WebCore/fileapi/FileList.h 2017-09-14 16:15:35 UTC (rev 222024)
+++ trunk/Source/WebCore/fileapi/FileList.h 2017-09-14 16:22:07 UTC (rev 222025)
@@ -40,7 +40,7 @@
return adoptRef(*new FileList);
}
- static Ref<FileList> create(Vector<RefPtr<File>>&& files)
+ static Ref<FileList> create(Vector<Ref<File>>&& files)
{
return adoptRef(*new FileList(WTFMove(files)));
}
@@ -51,19 +51,23 @@
bool isEmpty() const { return m_files.isEmpty(); }
Vector<String> paths() const;
+ const Vector<Ref<File>>& files() const { return m_files; }
+ const File& file(unsigned index) const { return m_files[index].get(); }
+
private:
- FileList();
- FileList(Vector<RefPtr<File>>&& files)
+ FileList() = default;
+ FileList(Vector<Ref<File>>&& files)
: m_files(WTFMove(files))
- { }
+ {
+ }
// FileLists can only be changed by their owners.
friend class DataTransfer;
friend class FileInputType;
- void append(RefPtr<File>&& file) { m_files.append(WTFMove(file)); }
+ void append(Ref<File>&& file) { m_files.append(WTFMove(file)); }
void clear() { m_files.clear(); }
- Vector<RefPtr<File>> m_files;
+ Vector<Ref<File>> m_files;
};
} // namespace WebCore
Modified: trunk/Source/WebCore/html/FileInputType.cpp (222024 => 222025)
--- trunk/Source/WebCore/html/FileInputType.cpp 2017-09-14 16:15:35 UTC (rev 222024)
+++ trunk/Source/WebCore/html/FileInputType.cpp 2017-09-14 16:22:07 UTC (rev 222025)
@@ -115,9 +115,9 @@
Vector<FileChooserFileInfo> files;
for (size_t i = 0; i < state.valueSize(); i += 2) {
if (!state[i + 1].isEmpty())
- files.append(FileChooserFileInfo(state[i], state[i + 1]));
+ files.append({ state[i], state[i + 1] });
else
- files.append(FileChooserFileInfo(state[i]));
+ files.append({ state[i] });
}
return files;
}
@@ -130,14 +130,17 @@
FormControlState FileInputType::saveFormControlState() const
{
if (m_fileList->isEmpty())
- return FormControlState();
- FormControlState state;
- unsigned numFiles = m_fileList->length();
- for (unsigned i = 0; i < numFiles; ++i) {
- state.append(m_fileList->item(i)->path());
- state.append(m_fileList->item(i)->name());
+ return { };
+
+ auto length = Checked<size_t>(m_fileList->files().size()) * Checked<size_t>(2);
+
+ Vector<String> stateVector;
+ stateVector.reserveInitialCapacity(length.unsafeGet());
+ for (auto& file : m_fileList->files()) {
+ stateVector.uncheckedAppend(file->path());
+ stateVector.uncheckedAppend(file->name());
}
- return state;
+ return FormControlState { WTFMove(stateVector) };
}
void FileInputType::restoreFormControlState(const FormControlState& state)
@@ -149,10 +152,11 @@
bool FileInputType::appendFormData(DOMFormData& formData, bool multipart) const
{
+ auto* fileList = element().files();
+ ASSERT(fileList);
+
auto name = element().name();
- auto* fileList = element().files();
- unsigned numFiles = fileList->length();
if (!multipart) {
// Send only the basenames.
// 4.10.16.4 and 4.10.16.6 sections in HTML5.
@@ -161,20 +165,21 @@
// fileList because Netscape doesn't support for non-multipart
// submission of file inputs, and Firefox doesn't add "name=" query
// parameter.
- for (unsigned i = 0; i < numFiles; ++i)
- formData.append(name, fileList->item(i)->name());
+ for (auto& file : fileList->files())
+ formData.append(name, file->name());
return true;
}
// If no filename at all is entered, return successful but empty.
// Null would be more logical, but Netscape posts an empty file. Argh.
- if (!numFiles) {
+ if (fileList->isEmpty()) {
formData.append(name, File::create(emptyString()));
return true;
}
- for (unsigned i = 0; i < numFiles; ++i)
- formData.append(name, *fileList->item(i));
+
+ for (auto& file : fileList->files())
+ formData.append(name, file.get());
return true;
}
@@ -190,7 +195,9 @@
void FileInputType::handleDOMActivateEvent(Event& event)
{
- if (element().isDisabledFormControl())
+ auto& input = element();
+
+ if (input.isDisabledFormControl())
return;
if (!ScriptController::processingUserGesture())
@@ -198,7 +205,6 @@
if (auto* chrome = this->chrome()) {
FileChooserSettings settings;
- HTMLInputElement& input = element();
settings.allowsDirectories = allowsDirectories();
settings.allowsMultipleFiles = input.hasAttributeWithoutSynchronization(multipleAttr);
settings.acceptMIMETypes = input.acceptMIMETypes();
@@ -241,7 +247,7 @@
bool FileInputType::getTypeSpecificValue(String& value)
{
if (m_fileList->isEmpty()) {
- value = String();
+ value = { };
return true;
}
@@ -251,7 +257,7 @@
// decided to try to parse the value by looking for backslashes
// (because that's what Windows file paths use). To be compatible
// with that code, we make up a fake path for the file.
- value = "C:\\fakepath\\" + m_fileList->item(0)->name();
+ value = makeString("C:\\fakepath\\", m_fileList->file(0).name());
return true;
}
@@ -278,7 +284,7 @@
{
ASSERT(element().shadowRoot());
- ShadowRoot* root = element().userAgentShadowRoot();
+ auto* root = element().userAgentShadowRoot();
if (!root)
return;
@@ -290,7 +296,7 @@
{
ASSERT(element().shadowRoot());
- ShadowRoot* root = element().userAgentShadowRoot();
+ auto* root = element().userAgentShadowRoot();
if (!root)
return;
@@ -354,7 +360,7 @@
pathsChanged = true;
else {
for (unsigned i = 0; i < length; ++i) {
- if (files->item(i)->path() != m_fileList->item(i)->path()) {
+ if (files->file(i).path() != m_fileList->file(i).path()) {
pathsChanged = true;
break;
}
@@ -369,8 +375,8 @@
if (shouldRequestIcon == RequestIcon::Yes) {
Vector<String> paths;
paths.reserveInitialCapacity(length);
- for (unsigned i = 0; i < length; ++i)
- paths.uncheckedAppend(m_fileList->item(i)->path());
+ for (auto& file : m_fileList->files())
+ paths.uncheckedAppend(file->path());
requestIcon(paths);
}
@@ -422,24 +428,20 @@
#if ENABLE(DRAG_SUPPORT)
bool FileInputType::receiveDroppedFiles(const DragData& dragData)
{
- Vector<String> paths;
- dragData.asFilenames(paths);
+ auto paths = dragData.asFilenames();
if (paths.isEmpty())
return false;
- HTMLInputElement* input = &element();
+ if (element().hasAttributeWithoutSynchronization(multipleAttr)) {
+ Vector<FileChooserFileInfo> files;
+ files.reserveInitialCapacity(paths.size());
+ for (auto& path : paths)
+ files.uncheckedAppend({ path });
- Vector<FileChooserFileInfo> files;
- for (auto& path : paths)
- files.append(FileChooserFileInfo(path));
+ filesChosen(files);
+ } else
+ filesChosen({ FileChooserFileInfo { paths[0] } });
- if (input->hasAttributeWithoutSynchronization(multipleAttr))
- filesChosen(files);
- else {
- Vector<FileChooserFileInfo> firstFileOnly;
- firstFileOnly.append(files[0]);
- filesChosen(firstFileOnly);
- }
return true;
}
#endif // ENABLE(DRAG_SUPPORT)
@@ -460,7 +462,7 @@
StringBuilder names;
for (unsigned i = 0; i < listSize; ++i) {
- names.append(m_fileList->item(i)->name());
+ names.append(m_fileList->file(i).name());
if (i != listSize - 1)
names.append('\n');
}
Modified: trunk/Source/WebCore/html/FileListCreator.cpp (222024 => 222025)
--- trunk/Source/WebCore/html/FileListCreator.cpp 2017-09-14 16:15:35 UTC (rev 222024)
+++ trunk/Source/WebCore/html/FileListCreator.cpp 2017-09-14 16:22:07 UTC (rev 222025)
@@ -39,7 +39,7 @@
ASSERT(!m_completionHander);
}
-static void appendDirectoryFiles(const String& directory, const String& relativePath, Vector<RefPtr<File>>& fileObjects)
+static void appendDirectoryFiles(const String& directory, const String& relativePath, Vector<Ref<File>>& fileObjects)
{
for (auto& childPath : listDirectory(directory, "*")) {
auto metadata = fileMetadata(childPath);
@@ -78,7 +78,7 @@
template<FileListCreator::ShouldResolveDirectories shouldResolveDirectories>
Ref<FileList> FileListCreator::createFileList(const Vector<FileChooserFileInfo>& paths)
{
- Vector<RefPtr<File>> fileObjects;
+ Vector<Ref<File>> fileObjects;
for (auto& info : paths) {
if (shouldResolveDirectories == ShouldResolveDirectories::Yes && fileIsDirectory(info.path, ShouldFollowSymbolicLinks::No))
appendDirectoryFiles(info.path, pathGetFileName(info.path), fileObjects);
Modified: trunk/Source/WebCore/html/FormController.h (222024 => 222025)
--- trunk/Source/WebCore/html/FormController.h 2017-09-14 16:15:35 UTC (rev 222024)
+++ trunk/Source/WebCore/html/FormController.h 2017-09-14 16:22:07 UTC (rev 222025)
@@ -37,8 +37,23 @@
class FormControlState {
public:
- FormControlState() : m_type(TypeSkip) { }
- explicit FormControlState(const String& value) : m_type(TypeRestore) { m_values.append(value); }
+ FormControlState()
+ : m_type(TypeSkip)
+ {
+ }
+
+ explicit FormControlState(const String& value)
+ : m_type(TypeRestore)
+ {
+ m_values.append(value);
+ }
+
+ explicit FormControlState(Vector<String>&& values)
+ : m_type(TypeSkip)
+ , m_values(WTFMove(values))
+ {
+ }
+
static FormControlState deserialize(const Vector<String>& stateVector, size_t& index);
FormControlState(const FormControlState& another) : m_type(another.m_type), m_values(another.m_values) { }
FormControlState& operator=(const FormControlState&);
Modified: trunk/Source/WebCore/platform/DragData.h (222024 => 222025)
--- trunk/Source/WebCore/platform/DragData.h 2017-09-14 16:15:35 UTC (rev 222024)
+++ trunk/Source/WebCore/platform/DragData.h 2017-09-14 16:22:07 UTC (rev 222025)
@@ -100,7 +100,7 @@
bool containsCompatibleContent(DraggingPurpose = DraggingPurpose::ForEditing) const;
String asURL(FilenameConversionPolicy = ConvertFilenames, String* title = nullptr) const;
String asPlainText() const;
- void asFilenames(Vector<String>&) const;
+ Vector<String> asFilenames() const;
Color asColor() const;
bool canSmartReplace() const;
bool containsColor() const;
Modified: trunk/Source/WebCore/platform/gtk/DragDataGtk.cpp (222024 => 222025)
--- trunk/Source/WebCore/platform/gtk/DragDataGtk.cpp 2017-09-14 16:15:35 UTC (rev 222024)
+++ trunk/Source/WebCore/platform/gtk/DragDataGtk.cpp 2017-09-14 16:22:07 UTC (rev 222025)
@@ -41,9 +41,9 @@
return m_platformDragData->filenames().size();
}
-void DragData::asFilenames(Vector<String>& result) const
+Vector<String> DragData::asFilenames() const
{
- result = m_platformDragData->filenames();
+ return m_platformDragData->filenames();
}
bool DragData::containsPlainText() const
Modified: trunk/Source/WebCore/platform/mac/DragDataMac.mm (222024 => 222025)
--- trunk/Source/WebCore/platform/mac/DragDataMac.mm 2017-09-14 16:15:35 UTC (rev 222024)
+++ trunk/Source/WebCore/platform/mac/DragDataMac.mm 2017-09-14 16:22:07 UTC (rev 222025)
@@ -168,13 +168,15 @@
return platformStrategies()->pasteboardStrategy()->getNumberOfFiles(m_pasteboardName);
}
-void DragData::asFilenames(Vector<String>& result) const
+Vector<String> DragData::asFilenames() const
{
#if PLATFORM(MAC)
- platformStrategies()->pasteboardStrategy()->getPathnamesForType(result, String(NSFilenamesPboardType), m_pasteboardName);
+ Vector<String> results;
+ platformStrategies()->pasteboardStrategy()->getPathnamesForType(results, String(NSFilenamesPboardType), m_pasteboardName);
+ if (!results.isEmpty())
+ return results;
#endif
- if (!result.size())
- result = fileNames();
+ return fileNames();
}
bool DragData::containsPlainText() const
Modified: trunk/Source/WebCore/platform/win/DragDataWin.cpp (222024 => 222025)
--- trunk/Source/WebCore/platform/win/DragDataWin.cpp 2017-09-14 16:15:35 UTC (rev 222024)
+++ trunk/Source/WebCore/platform/win/DragDataWin.cpp 2017-09-14 16:22:07 UTC (rev 222025)
@@ -136,8 +136,10 @@
#endif
}
-void DragData::asFilenames(Vector<String>& result) const
+Vector<String> DragData::asFilenames() const
{
+ Vector<String> result;
+
#if USE(CF)
if (m_platformDragData) {
WCHAR filename[MAX_PATH];
@@ -144,12 +146,12 @@
STGMEDIUM medium;
if (FAILED(m_platformDragData->GetData(cfHDropFormat(), &medium)))
- return;
+ return result;
HDROP hdrop = reinterpret_cast<HDROP>(GlobalLock(medium.hGlobal));
if (!hdrop)
- return;
+ return result;
const unsigned numFiles = DragQueryFileW(hdrop, 0xFFFFFFFF, 0, 0);
for (unsigned i = 0; i < numFiles; i++) {
@@ -162,10 +164,12 @@
DragFinish(hdrop);
GlobalUnlock(medium.hGlobal);
- return;
+ return result;
}
result = m_dragDataMap.get(cfHDropFormat()->cfFormat);
#endif
+
+ return result;
}
bool DragData::containsPlainText() const