109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)/* 209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * Copyright (c) 2008, 2009, 2012 Google Inc. All rights reserved. 309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * 409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * modification, are permitted provided that the following conditions are 609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * met: 709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * 809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 1009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 1109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 1209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * in the documentation and/or other materials provided with the 1309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * distribution. 1409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 1509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 1609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * this software without specific prior written permission. 1709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * 1809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */ 3009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 3109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "config.h" 3209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/clipboard/DataObject.h" 3309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 3409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/clipboard/Pasteboard.h" 3509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/clipboard/ClipboardMimeTypes.h" 3609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/clipboard/ClipboardUtilities.h" 3709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "public/platform/Platform.h" 3809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "public/platform/WebClipboard.h" 3909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 40c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 4109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 42d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)PassRefPtrWillBeRawPtr<DataObject> DataObject::createFromPasteboard(PasteMode pasteMode) 4309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 44d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) RefPtrWillBeRawPtr<DataObject> dataObject = create(); 4509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) blink::WebClipboard::Buffer buffer = Pasteboard::generalPasteboard()->buffer(); 4609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) uint64_t sequenceNumber = blink::Platform::current()->clipboard()->sequenceNumber(buffer); 4709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) bool ignored; 4809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) blink::WebVector<blink::WebString> webTypes = blink::Platform::current()->clipboard()->readAvailableTypes(buffer, &ignored); 4909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) ListHashSet<String> types; 5009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) for (size_t i = 0; i < webTypes.size(); ++i) 5109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) types.add(webTypes[i]); 5209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) for (ListHashSet<String>::const_iterator it = types.begin(); it != types.end(); ++it) { 5309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (pasteMode == PlainTextOnly && *it != mimeTypeTextPlain) 5409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) continue; 5509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) dataObject->m_itemList.append(DataObjectItem::createFromPasteboard(*it, sequenceNumber)); 5609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 5709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return dataObject.release(); 5809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 5909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 60d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)PassRefPtrWillBeRawPtr<DataObject> DataObject::create() 6109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 62d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return adoptRefWillBeNoop(new DataObject()); 6309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 6409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 65d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)PassRefPtrWillBeRawPtr<DataObject> DataObject::copy() const 6609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 67d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return adoptRefWillBeNoop(new DataObject(*this)); 6809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 6909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 706f543c786fc42989f552b4daa774ca5ff32fa697Ben MurdochDataObject::~DataObject() 716f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch{ 726f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch} 736f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 7409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)size_t DataObject::length() const 7509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 7609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return m_itemList.size(); 7709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 7809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 79d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)PassRefPtrWillBeRawPtr<DataObjectItem> DataObject::item(unsigned long index) 8009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 8109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (index >= length()) 82d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return nullptr; 8309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return m_itemList[index]; 8409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 8509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 8609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void DataObject::deleteItem(unsigned long index) 8709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 8809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (index >= length()) 8909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return; 9009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_itemList.remove(index); 9109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 9209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 9309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void DataObject::clearAll() 9409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 9509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_itemList.clear(); 9609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 9709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 98d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)PassRefPtrWillBeRawPtr<DataObjectItem> DataObject::add(const String& data, const String& type) 9909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 100d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) RefPtrWillBeRawPtr<DataObjectItem> item = DataObjectItem::createFromString(type, data); 10109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!internalAddStringItem(item)) 102d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return nullptr; 10309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return item; 10409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 10509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 106d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)PassRefPtrWillBeRawPtr<DataObjectItem> DataObject::add(PassRefPtrWillBeRawPtr<File> file) 10709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 10809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!file) 109d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return nullptr; 11009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 111d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) RefPtrWillBeRawPtr<DataObjectItem> item = DataObjectItem::createFromFile(file); 11209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_itemList.append(item); 11309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return item; 11409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 11509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 11609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void DataObject::clearData(const String& type) 11709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 11809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) for (size_t i = 0; i < m_itemList.size(); ++i) { 11909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (m_itemList[i]->kind() == DataObjectItem::StringKind && m_itemList[i]->type() == type) { 12009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // Per the spec, type must be unique among all items of kind 'string'. 12109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_itemList.remove(i); 12209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return; 12309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 12409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 12509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 12609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 12709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)ListHashSet<String> DataObject::types() const 12809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 12909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) ListHashSet<String> results; 13009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) bool containsFiles = false; 13109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) for (size_t i = 0; i < m_itemList.size(); ++i) { 13209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) switch (m_itemList[i]->kind()) { 13309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case DataObjectItem::StringKind: 13409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) results.add(m_itemList[i]->type()); 13509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 13609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) case DataObjectItem::FileKind: 13709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) containsFiles = true; 13809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) break; 13909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 14009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 14109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (containsFiles) 14209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) results.add(mimeTypeFiles); 14309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return results; 14409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 14509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 14609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)String DataObject::getData(const String& type) const 14709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 14809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) for (size_t i = 0; i < m_itemList.size(); ++i) { 14909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (m_itemList[i]->kind() == DataObjectItem::StringKind && m_itemList[i]->type() == type) 15009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return m_itemList[i]->getAsString(); 15109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 15209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return String(); 15309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 15409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 155197021e6b966cfb06891637935ef33fff06433d1Ben Murdochvoid DataObject::setData(const String& type, const String& data) 15609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 15709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) clearData(type); 15809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!add(data, type)) 15909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) ASSERT_NOT_REACHED(); 16009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 16109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 16209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void DataObject::urlAndTitle(String& url, String* title) const 16309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 164d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) RefPtrWillBeRawPtr<DataObjectItem> item = findStringItem(mimeTypeTextURIList); 16509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!item) 16609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return; 16709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) url = convertURIListToURL(item->getAsString()); 16809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (title) 16909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) *title = item->title(); 17009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 17109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 17209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void DataObject::setURLAndTitle(const String& url, const String& title) 17309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 17409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) clearData(mimeTypeTextURIList); 17509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) internalAddStringItem(DataObjectItem::createFromURL(url, title)); 17609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 17709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 17809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void DataObject::htmlAndBaseURL(String& html, KURL& baseURL) const 17909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 180d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) RefPtrWillBeRawPtr<DataObjectItem> item = findStringItem(mimeTypeTextHTML); 18109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!item) 18209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return; 18309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) html = item->getAsString(); 18409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) baseURL = item->baseURL(); 18509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 18609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 18709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void DataObject::setHTMLAndBaseURL(const String& html, const KURL& baseURL) 18809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 18909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) clearData(mimeTypeTextHTML); 19009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) internalAddStringItem(DataObjectItem::createFromHTML(html, baseURL)); 19109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 19209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 19309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)bool DataObject::containsFilenames() const 19409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 19509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) for (size_t i = 0; i < m_itemList.size(); ++i) { 19609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (m_itemList[i]->isFilename()) 19709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return true; 19809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 19909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return false; 20009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 20109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 20209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)Vector<String> DataObject::filenames() const 20309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 20409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) Vector<String> results; 20509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) for (size_t i = 0; i < m_itemList.size(); ++i) { 20609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (m_itemList[i]->isFilename()) 20709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) results.append(static_cast<File*>(m_itemList[i]->getAsFile().get())->path()); 20809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 20909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return results; 21009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 21109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 21209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void DataObject::addFilename(const String& filename, const String& displayName) 21309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 214c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) internalAddFileItem(DataObjectItem::createFromFile(File::createForUserProvidedFile(filename, displayName))); 21509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 21609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 21709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void DataObject::addSharedBuffer(const String& name, PassRefPtr<SharedBuffer> buffer) 21809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 21909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) internalAddFileItem(DataObjectItem::createFromSharedBuffer(name, buffer)); 22009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 22109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 22209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)DataObject::DataObject() 22309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) : m_modifierKeyState(0) 22409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 22509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 22609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 22709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)DataObject::DataObject(const DataObject& other) 228d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) : m_itemList(other.m_itemList) 22909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) , m_modifierKeyState(0) 23009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 23109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 23209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 233d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)PassRefPtrWillBeRawPtr<DataObjectItem> DataObject::findStringItem(const String& type) const 23409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 23509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) for (size_t i = 0; i < m_itemList.size(); ++i) { 23609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (m_itemList[i]->kind() == DataObjectItem::StringKind && m_itemList[i]->type() == type) 23709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return m_itemList[i]; 23809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 239d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return nullptr; 24009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 24109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 242d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)bool DataObject::internalAddStringItem(PassRefPtrWillBeRawPtr<DataObjectItem> item) 24309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 24409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) ASSERT(item->kind() == DataObjectItem::StringKind); 24509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) for (size_t i = 0; i < m_itemList.size(); ++i) { 24609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (m_itemList[i]->kind() == DataObjectItem::StringKind && m_itemList[i]->type() == item->type()) 24709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return false; 24809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 24909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 25009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_itemList.append(item); 25109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return true; 25209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 25309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 254d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void DataObject::internalAddFileItem(PassRefPtrWillBeRawPtr<DataObjectItem> item) 25509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 25609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) ASSERT(item->kind() == DataObjectItem::FileKind); 25709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_itemList.append(item); 25809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 25909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 260d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void DataObject::trace(Visitor* visitor) 261d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 2627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#if ENABLE(OILPAN) 263d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) visitor->trace(m_itemList); 2647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci HeapSupplementable<DataObject>::trace(visitor); 2657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#endif 266d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 267d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 268c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 269