Diff
Modified: trunk/Source/WebCore/CMakeLists.txt (105647 => 105648)
--- trunk/Source/WebCore/CMakeLists.txt 2012-01-23 23:32:40 UTC (rev 105647)
+++ trunk/Source/WebCore/CMakeLists.txt 2012-01-23 23:35:44 UTC (rev 105648)
@@ -1498,7 +1498,6 @@
)
LIST(APPEND WebCore_SOURCES
dom/DataTransferItem.cpp
- dom/DataTransferItemList.cpp
dom/StringCallback.cpp
)
ENDIF ()
Modified: trunk/Source/WebCore/ChangeLog (105647 => 105648)
--- trunk/Source/WebCore/ChangeLog 2012-01-23 23:32:40 UTC (rev 105647)
+++ trunk/Source/WebCore/ChangeLog 2012-01-23 23:35:44 UTC (rev 105648)
@@ -1,3 +1,58 @@
+2012-01-23 Daniel Cheng <[email protected]>
+
+ Convert DataTransferItem/DataTransferItemList back into an interface class
+ https://bugs.webkit.org/show_bug.cgi?id=76856
+
+ When Qt implemented the DataTransferItemList, a lot of logic was moved into the shared
+ classes since Chromium/Qt happened to implement it the same way. Now that I want to do some
+ refactoring/cleanup work to better implement DataTransferItemList in Chromium, we won't
+ share the same data anymore so it doesn't make sense to keep that code in a common location.
+
+ Reviewed by David Levin.
+
+ Covered by existing tests.
+
+ * CMakeLists.txt:
+ * GNUmakefile.list.am:
+ * Target.pri:
+ * WebCore.gypi:
+ * WebCore.vcproj/WebCore.vcproj:
+ * WebCore.xcodeproj/project.pbxproj:
+ * dom/DataTransferItem.cpp:
+ * dom/DataTransferItem.h:
+ * dom/DataTransferItemList.cpp: Removed.
+ * dom/DataTransferItemList.h:
+ * platform/chromium/ClipboardChromium.cpp:
+ (WebCore::ClipboardChromium::mayUpdateItems):
+ * platform/chromium/DataTransferItemChromium.cpp:
+ (WebCore::DataTransferItemChromium::create):
+ (WebCore::DataTransferItemChromium::DataTransferItemChromium):
+ (WebCore::DataTransferItemChromium::getAsString):
+ (WebCore::DataTransferItemChromium::getAsFile):
+ (WebCore::DataTransferItemChromium::clipboardChromium):
+ * platform/chromium/DataTransferItemChromium.h:
+ (WebCore::DataTransferItemChromium::kind):
+ (WebCore::DataTransferItemChromium::type):
+ * platform/chromium/DataTransferItemListChromium.cpp:
+ (WebCore::DataTransferItemListChromium::DataTransferItemListChromium):
+ * platform/chromium/DataTransferItemListChromium.h:
+ * platform/qt/DataTransferItemListQt.cpp:
+ (WebCore::DataTransferItemListQt::DataTransferItemListQt):
+ (WebCore::DataTransferItemListQt::length):
+ (WebCore::DataTransferItemListQt::item):
+ (WebCore::DataTransferItemListQt::deleteItem):
+ (WebCore::DataTransferItemListQt::clear):
+ (WebCore::DataTransferItemListQt::add):
+ * platform/qt/DataTransferItemListQt.h:
+ * platform/qt/DataTransferItemQt.cpp:
+ (WebCore::DataTransferItemQt::create):
+ (WebCore::DataTransferItemQt::DataTransferItemQt):
+ (WebCore::DataTransferItemQt::getAsString):
+ (WebCore::DataTransferItemQt::getAsFile):
+ * platform/qt/DataTransferItemQt.h:
+ (WebCore::DataTransferItemQt::kind):
+ (WebCore::DataTransferItemQt::type):
+
2012-01-23 Andreas Kling <[email protected]>
Unreviewed buildfix for ENABLE(MUTATION_OBSERVERS) following r105642.
Modified: trunk/Source/WebCore/GNUmakefile.list.am (105647 => 105648)
--- trunk/Source/WebCore/GNUmakefile.list.am 2012-01-23 23:32:40 UTC (rev 105647)
+++ trunk/Source/WebCore/GNUmakefile.list.am 2012-01-23 23:35:44 UTC (rev 105648)
@@ -4662,7 +4662,6 @@
webcore_sources += \
Source/WebCore/dom/DataTransferItem.cpp \
Source/WebCore/dom/DataTransferItem.h \
- Source/WebCore/dom/DataTransferItemList.cpp \
Source/WebCore/dom/DataTransferItemList.h \
Source/WebCore/dom/StringCallback.cpp \
Source/WebCore/dom/StringCallback.h
Modified: trunk/Source/WebCore/Target.pri (105647 => 105648)
--- trunk/Source/WebCore/Target.pri 2012-01-23 23:32:40 UTC (rev 105647)
+++ trunk/Source/WebCore/Target.pri 2012-01-23 23:35:44 UTC (rev 105648)
@@ -3014,7 +3014,6 @@
platform/qt/DataTransferItemListQt.h
SOURCES += \
dom/DataTransferItem.cpp \
- dom/DataTransferItemList.cpp \
dom/StringCallback.cpp \
platform/qt/DataTransferItemQt.cpp \
platform/qt/DataTransferItemListQt.cpp
Modified: trunk/Source/WebCore/WebCore.gypi (105647 => 105648)
--- trunk/Source/WebCore/WebCore.gypi 2012-01-23 23:32:40 UTC (rev 105647)
+++ trunk/Source/WebCore/WebCore.gypi 2012-01-23 23:35:44 UTC (rev 105648)
@@ -5356,7 +5356,6 @@
'dom/DOMStringMap.h',
'dom/DataTransferItem.cpp',
'dom/DataTransferItem.h',
- 'dom/DataTransferItemList.cpp',
'dom/DataTransferItemList.h',
'dom/DatasetDOMStringMap.cpp',
'dom/DatasetDOMStringMap.h',
Modified: trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj (105647 => 105648)
--- trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj 2012-01-23 23:32:40 UTC (rev 105647)
+++ trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj 2012-01-23 23:35:44 UTC (rev 105648)
@@ -46798,58 +46798,6 @@
>
</File>
<File
- RelativePath="..\dom\DataTransferItemList.cpp"
- >
- <FileConfiguration
- Name="Debug|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug_Cairo_CFLite|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release_Cairo_CFLite|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug_All|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Production|Win32"
- ExcludedFromBuild="true"
- >
- <Tool
- Name="VCCLCompilerTool"
- />
- </FileConfiguration>
- </File>
- <File
RelativePath="..\dom\DataTransferItemList.h"
>
</File>
Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (105647 => 105648)
--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2012-01-23 23:32:40 UTC (rev 105647)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj 2012-01-23 23:35:44 UTC (rev 105648)
@@ -1846,7 +1846,6 @@
77A17AA712F28B2A004E02F6 /* JSOESVertexArrayObject.h in Headers */ = {isa = PBXBuildFile; fileRef = 77A17AA312F28B2A004E02F6 /* JSOESVertexArrayObject.h */; };
77EF62F312F9DB7400C77BD2 /* JSWebGLVertexArrayObjectOES.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 77EF62F112F9DB7400C77BD2 /* JSWebGLVertexArrayObjectOES.cpp */; };
77EF62F412F9DB7400C77BD2 /* JSWebGLVertexArrayObjectOES.h in Headers */ = {isa = PBXBuildFile; fileRef = 77EF62F212F9DB7400C77BD2 /* JSWebGLVertexArrayObjectOES.h */; };
- 781755861365A1B00093BE2E /* DataTransferItemList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 781755851365A1B00093BE2E /* DataTransferItemList.cpp */; };
79AC9218109945C80021266E /* JSCompositionEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 79AC9216109945C80021266E /* JSCompositionEvent.cpp */; };
79AC9219109945C80021266E /* JSCompositionEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 79AC9217109945C80021266E /* JSCompositionEvent.h */; };
79F2F5A11091939A000D87CB /* CompositionEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 79F2F59E1091939A000D87CB /* CompositionEvent.cpp */; };
@@ -8706,7 +8705,6 @@
77A17AA312F28B2A004E02F6 /* JSOESVertexArrayObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSOESVertexArrayObject.h; sourceTree = "<group>"; };
77EF62F112F9DB7400C77BD2 /* JSWebGLVertexArrayObjectOES.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSWebGLVertexArrayObjectOES.cpp; sourceTree = "<group>"; };
77EF62F212F9DB7400C77BD2 /* JSWebGLVertexArrayObjectOES.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWebGLVertexArrayObjectOES.h; sourceTree = "<group>"; };
- 781755851365A1B00093BE2E /* DataTransferItemList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DataTransferItemList.cpp; sourceTree = "<group>"; };
79AC9216109945C80021266E /* JSCompositionEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCompositionEvent.cpp; sourceTree = "<group>"; };
79AC9217109945C80021266E /* JSCompositionEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCompositionEvent.h; sourceTree = "<group>"; };
79F2F59E1091939A000D87CB /* CompositionEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CompositionEvent.cpp; sourceTree = "<group>"; };
@@ -20359,7 +20357,6 @@
815E6166132587AA00B622B0 /* DataTransferItem.cpp */,
81AC5997131636E60009A7E0 /* DataTransferItem.h */,
81AC5AE81316392E0009A7E0 /* DataTransferItem.idl */,
- 781755851365A1B00093BE2E /* DataTransferItemList.cpp */,
81AC5998131636E60009A7E0 /* DataTransferItemList.h */,
81AC5AE91316392E0009A7E0 /* DataTransferItemList.idl */,
A8C228A011D5722E00D5A7D3 /* DecodedDataDocumentParser.cpp */,
@@ -24670,7 +24667,6 @@
1AD51A150CB59CD300953D11 /* DatabaseTracker.cpp in Sources */,
BC64641D11D7F416006455B0 /* DatasetDOMStringMap.cpp in Sources */,
815E6167132587AA00B622B0 /* DataTransferItem.cpp in Sources */,
- 781755861365A1B00093BE2E /* DataTransferItemList.cpp in Sources */,
2E97CCEA12939CB800C5C8FF /* DataView.cpp in Sources */,
A5732B0A136A161D005C8D7C /* DateComponents.cpp in Sources */,
F55B3DB51251F12D003EF269 /* DateInputType.cpp in Sources */,
Modified: trunk/Source/WebCore/dom/DataTransferItem.cpp (105647 => 105648)
--- trunk/Source/WebCore/dom/DataTransferItem.cpp 2012-01-23 23:32:40 UTC (rev 105647)
+++ trunk/Source/WebCore/dom/DataTransferItem.cpp 2012-01-23 23:35:44 UTC (rev 105648)
@@ -31,8 +31,6 @@
#include "config.h"
#include "DataTransferItem.h"
-#include "Clipboard.h"
-
#if ENABLE(DATA_TRANSFER_ITEMS)
namespace WebCore {
@@ -40,35 +38,6 @@
const char DataTransferItem::kindString[] = "string";
const char DataTransferItem::kindFile[] = "file";
-DataTransferItem::DataTransferItem(PassRefPtr<Clipboard> owner, const String& kind, const String& type)
- : m_owner(owner)
- , m_kind(kind)
- , m_type(type)
-{
-}
-
-Clipboard* DataTransferItem::owner()
-{
- return m_owner.get();
-}
-
-String DataTransferItem::kind() const
-{
- if (m_owner->policy() == ClipboardNumb)
- return String();
-
- return m_kind;
-}
-
-String DataTransferItem::type() const
-{
- if (m_owner->policy() == ClipboardNumb)
- return String();
-
- return m_type;
-}
-
-
} // namespace WebCore
#endif // ENABLE(DATA_TRANSFER_ITEMS)
Modified: trunk/Source/WebCore/dom/DataTransferItem.h (105647 => 105648)
--- trunk/Source/WebCore/dom/DataTransferItem.h 2012-01-23 23:32:40 UTC (rev 105647)
+++ trunk/Source/WebCore/dom/DataTransferItem.h 2012-01-23 23:35:44 UTC (rev 105648)
@@ -49,28 +49,14 @@
public:
virtual ~DataTransferItem() { }
- static PassRefPtr<DataTransferItem> create(PassRefPtr<Clipboard> owner, ScriptExecutionContext*, const String& data, const String& type);
- static PassRefPtr<DataTransferItem> create(PassRefPtr<Clipboard> owner, ScriptExecutionContext*, PassRefPtr<File>);
-
static const char kindString[];
static const char kindFile[];
- String kind() const;
- String type() const;
+ virtual String kind() const = 0;
+ virtual String type() const = 0;
- virtual void getAsString(PassRefPtr<StringCallback>) = 0;
- virtual PassRefPtr<Blob> getAsFile() = 0;
-
-protected:
- DataTransferItem(PassRefPtr<Clipboard> owner, const String& kind, const String& type);
- Clipboard* owner();
-
-private:
- friend class DataTransferItemList;
-
- const RefPtr<Clipboard> m_owner;
- const String m_kind;
- const String m_type;
+ virtual void getAsString(PassRefPtr<StringCallback>) const = 0;
+ virtual PassRefPtr<Blob> getAsFile() const = 0;
};
} // namespace WebCore
Deleted: trunk/Source/WebCore/dom/DataTransferItemList.cpp (105647 => 105648)
--- trunk/Source/WebCore/dom/DataTransferItemList.cpp 2012-01-23 23:32:40 UTC (rev 105647)
+++ trunk/Source/WebCore/dom/DataTransferItemList.cpp 2012-01-23 23:35:44 UTC (rev 105648)
@@ -1,112 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc. All rights reserved.
- * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies)
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "DataTransferItemList.h"
-
-#include "DataTransferItem.h"
-#include "ExceptionCode.h"
-
-#if ENABLE(DATA_TRANSFER_ITEMS)
-
-namespace WebCore {
-
-DataTransferItemList::DataTransferItemList(PassRefPtr<Clipboard> clipboard, ScriptExecutionContext* context)
- : m_owner(clipboard)
- , m_context(context)
-{
-}
-
-size_t DataTransferItemList::length()
-{
- if (m_owner->policy() == ClipboardNumb)
- return 0;
-
- return m_items.size();
-}
-
-PassRefPtr<DataTransferItem> DataTransferItemList::item(unsigned long index)
-{
- if (m_owner->policy() == ClipboardNumb || index >= length())
- return 0;
-
- return m_items[index];
-}
-
-void DataTransferItemList::deleteItem(unsigned long index, ExceptionCode& ec)
-{
- if (m_owner->policy() != ClipboardWritable) {
- ec = INVALID_STATE_ERR;
- return;
- }
-
- if (index >= length())
- return;
-
- m_items.remove(index);
-}
-
-void DataTransferItemList::clear()
-{
- if (m_owner->policy() != ClipboardWritable)
- return;
-
- m_items.clear();
-
-}
-
-void DataTransferItemList::add(const String& data, const String& type, ExceptionCode& ec)
-{
- if (m_owner->policy() != ClipboardWritable)
- return;
-
- // Only one 'string' item with a given type is allowed in the collection.
- for (size_t i = 0; i < m_items.size(); ++i) {
- if (m_items[i]->type() == type && m_items[i]->kind() == DataTransferItem::kindString) {
- ec = NOT_SUPPORTED_ERR;
- return;
- }
- }
-
- m_items.append(DataTransferItem::create(m_owner, m_context, data, type));
-}
-
-void DataTransferItemList::add(PassRefPtr<File> file)
-{
- if (m_owner->policy() != ClipboardWritable || !file)
- return;
-
- m_items.append(DataTransferItem::create(m_owner, m_context, file));
-}
-
-}
-
-#endif
Modified: trunk/Source/WebCore/dom/DataTransferItemList.h (105647 => 105648)
--- trunk/Source/WebCore/dom/DataTransferItemList.h 2012-01-23 23:32:40 UTC (rev 105647)
+++ trunk/Source/WebCore/dom/DataTransferItemList.h 2012-01-23 23:35:44 UTC (rev 105648)
@@ -48,23 +48,12 @@
public:
virtual ~DataTransferItemList() { }
- virtual size_t length();
- virtual PassRefPtr<DataTransferItem> item(unsigned long index);
- // FIXME: Implement V8DataTransferItemList::indexedPropertyDeleter to get this called.
- virtual void deleteItem(unsigned long index, ExceptionCode&);
- virtual void clear();
- virtual void add(const String& data, const String& type, ExceptionCode&);
- virtual void add(PassRefPtr<File>);
-
-protected:
- DataTransferItemList(PassRefPtr<Clipboard>, ScriptExecutionContext*);
-
-protected:
- RefPtr<Clipboard> m_owner;
- // Indirectly owned by our parent.
- ScriptExecutionContext* m_context;
- Vector<RefPtr<DataTransferItem> > m_items;
-
+ virtual size_t length() = 0;
+ virtual PassRefPtr<DataTransferItem> item(unsigned long index) = 0;
+ virtual void deleteItem(unsigned long index, ExceptionCode&) = 0;
+ virtual void clear() = 0;
+ virtual void add(const String& data, const String& type, ExceptionCode&) = 0;
+ virtual void add(PassRefPtr<File>) = 0;
};
} // namespace WebCore
Modified: trunk/Source/WebCore/platform/chromium/ClipboardChromium.cpp (105647 => 105648)
--- trunk/Source/WebCore/platform/chromium/ClipboardChromium.cpp 2012-01-23 23:32:40 UTC (rev 105647)
+++ trunk/Source/WebCore/platform/chromium/ClipboardChromium.cpp 2012-01-23 23:35:44 UTC (rev 105648)
@@ -375,17 +375,17 @@
bool success = false;
String plainText = m_dataObject->getData(mimeTypeTextPlain, success);
if (success)
- items.append(DataTransferItem::create(this, scriptExecutionContext, plainText, mimeTypeTextPlain));
+ items.append(DataTransferItemChromium::create(this, scriptExecutionContext, plainText, mimeTypeTextPlain));
success = false;
String htmlText = m_dataObject->getData(mimeTypeTextHTML, success);
if (success)
- items.append(DataTransferItem::create(this, scriptExecutionContext, htmlText, mimeTypeTextHTML));
+ items.append(DataTransferItemChromium::create(this, scriptExecutionContext, htmlText, mimeTypeTextHTML));
if (m_dataObject->containsFilenames()) {
const Vector<String>& filenames = m_dataObject->filenames();
for (Vector<String>::const_iterator it = filenames.begin(); it != filenames.end(); ++it)
- items.append(DataTransferItem::create(this, scriptExecutionContext, File::create(*it)));
+ items.append(DataTransferItemChromium::create(this, scriptExecutionContext, File::create(*it)));
}
m_dragStorageUpdated = false;
}
Modified: trunk/Source/WebCore/platform/chromium/DataTransferItemChromium.cpp (105647 => 105648)
--- trunk/Source/WebCore/platform/chromium/DataTransferItemChromium.cpp 2012-01-23 23:32:40 UTC (rev 105647)
+++ trunk/Source/WebCore/platform/chromium/DataTransferItemChromium.cpp 2012-01-23 23:35:44 UTC (rev 105648)
@@ -53,40 +53,44 @@
return adoptRef(new DataTransferItemChromium(owner, context, PasteboardSource, DataTransferItem::kindFile, type, ""));
}
-PassRefPtr<DataTransferItem> DataTransferItem::create(PassRefPtr<Clipboard> owner,
- ScriptExecutionContext* context,
- const String& data,
- const String& type)
+PassRefPtr<DataTransferItemChromium> DataTransferItemChromium::create(PassRefPtr<Clipboard> owner,
+ ScriptExecutionContext* context,
+ const String& data,
+ const String& type)
{
return adoptRef(new DataTransferItemChromium(owner, context, DataTransferItemChromium::InternalSource, kindString, type, data));
}
-PassRefPtr<DataTransferItem> DataTransferItem::create(PassRefPtr<Clipboard> owner,
- ScriptExecutionContext* context,
- PassRefPtr<File> file)
+PassRefPtr<DataTransferItemChromium> DataTransferItemChromium::create(PassRefPtr<Clipboard> owner,
+ ScriptExecutionContext* context,
+ PassRefPtr<File> file)
{
return adoptRef(new DataTransferItemChromium(owner, context, DataTransferItemChromium::InternalSource, file));
}
DataTransferItemChromium::DataTransferItemChromium(PassRefPtr<Clipboard> owner, ScriptExecutionContext* context, DataSource source, const String& kind, const String& type, const String& data)
- : DataTransferItem(owner, kind, type)
- , m_context(context)
+ : m_context(context)
+ , m_owner(owner)
+ , m_kind(kind)
+ , m_type(type)
, m_source(source)
, m_data(data)
{
}
DataTransferItemChromium::DataTransferItemChromium(PassRefPtr<Clipboard> owner, ScriptExecutionContext* context, DataSource source, PassRefPtr<File> file)
- : DataTransferItem(owner, DataTransferItem::kindFile, file.get() ? file->type() : String())
- , m_context(context)
+ : m_context(context)
+ , m_owner(owner)
+ , m_kind(kindFile)
+ , m_type(file.get() ? file->type() : String())
, m_source(source)
, m_file(file)
{
}
-void DataTransferItemChromium::getAsString(PassRefPtr<StringCallback> callback)
+void DataTransferItemChromium::getAsString(PassRefPtr<StringCallback> callback) const
{
- if ((owner()->policy() != ClipboardReadable && owner()->policy() != ClipboardWritable)
+ if ((m_owner->policy() != ClipboardReadable && m_owner->policy() != ClipboardWritable)
|| kind() != kindString)
return;
@@ -116,7 +120,7 @@
ASSERT_NOT_REACHED();
}
-PassRefPtr<Blob> DataTransferItemChromium::getAsFile()
+PassRefPtr<Blob> DataTransferItemChromium::getAsFile() const
{
if (kind() != kindFile || clipboardChromium()->storageHasUpdated())
return 0;
@@ -146,9 +150,9 @@
return 0;
}
-ClipboardChromium* DataTransferItemChromium::clipboardChromium()
+ClipboardChromium* DataTransferItemChromium::clipboardChromium() const
{
- return static_cast<ClipboardChromium*>(owner());
+ return static_cast<ClipboardChromium*>(m_owner.get());
}
} // namespace WebCore
Modified: trunk/Source/WebCore/platform/chromium/DataTransferItemChromium.h (105647 => 105648)
--- trunk/Source/WebCore/platform/chromium/DataTransferItemChromium.h 2012-01-23 23:32:40 UTC (rev 105647)
+++ trunk/Source/WebCore/platform/chromium/DataTransferItemChromium.h 2012-01-23 23:35:44 UTC (rev 105648)
@@ -46,25 +46,32 @@
class DataTransferItemChromium : public DataTransferItem {
public:
+ static PassRefPtr<DataTransferItemChromium> create(PassRefPtr<Clipboard> owner, ScriptExecutionContext*, const String& data, const String& type);
+ static PassRefPtr<DataTransferItemChromium> create(PassRefPtr<Clipboard> owner, ScriptExecutionContext*, PassRefPtr<File>);
static PassRefPtr<DataTransferItemChromium> createFromPasteboard(PassRefPtr<Clipboard> owner, ScriptExecutionContext*, const String& type);
- virtual void getAsString(PassRefPtr<StringCallback>);
- virtual PassRefPtr<Blob> getAsFile();
+ virtual String kind() const { return m_kind; }
+ virtual String type() const { return m_type; }
+ virtual void getAsString(PassRefPtr<StringCallback>) const;
+ virtual PassRefPtr<Blob> getAsFile() const;
private:
+ friend class DataTransferItemListChromium;
+
enum DataSource {
PasteboardSource,
InternalSource,
};
- friend class DataTransferItem;
-
DataTransferItemChromium(PassRefPtr<Clipboard> owner, ScriptExecutionContext*, DataSource, const String& kind, const String& type, const String& data);
DataTransferItemChromium(PassRefPtr<Clipboard> owner, ScriptExecutionContext*, DataSource, PassRefPtr<File>);
- ClipboardChromium* clipboardChromium();
+ ClipboardChromium* clipboardChromium() const;
ScriptExecutionContext* m_context;
+ const RefPtr<Clipboard> m_owner;
+ const String m_kind;
+ const String m_type;
const DataSource m_source;
const String m_data;
RefPtr<File> m_file;
Modified: trunk/Source/WebCore/platform/chromium/DataTransferItemListChromium.cpp (105647 => 105648)
--- trunk/Source/WebCore/platform/chromium/DataTransferItemListChromium.cpp 2012-01-23 23:32:40 UTC (rev 105647)
+++ trunk/Source/WebCore/platform/chromium/DataTransferItemListChromium.cpp 2012-01-23 23:35:44 UTC (rev 105648)
@@ -53,7 +53,8 @@
}
DataTransferItemListChromium::DataTransferItemListChromium(PassRefPtr<Clipboard> owner, ScriptExecutionContext* context)
- : DataTransferItemList(owner, context)
+ : m_owner(owner)
+ , m_context(context)
{
}
Modified: trunk/Source/WebCore/platform/chromium/DataTransferItemListChromium.h (105647 => 105648)
--- trunk/Source/WebCore/platform/chromium/DataTransferItemListChromium.h 2012-01-23 23:32:40 UTC (rev 105647)
+++ trunk/Source/WebCore/platform/chromium/DataTransferItemListChromium.h 2012-01-23 23:35:44 UTC (rev 105648)
@@ -50,9 +50,9 @@
public:
static PassRefPtr<DataTransferItemListChromium> create(PassRefPtr<Clipboard>, ScriptExecutionContext*);
- // DataTransferItemList overrides.
virtual size_t length();
virtual PassRefPtr<DataTransferItem> item(unsigned long index);
+ // FIXME: Implement V8DataTransferItemList::indexedPropertyDeleter to get this called.
virtual void deleteItem(unsigned long index, ExceptionCode&);
virtual void clear();
virtual void add(const String& data, const String& type, ExceptionCode&);
@@ -61,6 +61,11 @@
private:
DataTransferItemListChromium(PassRefPtr<Clipboard>, ScriptExecutionContext*);
ClipboardChromium* clipboardChromium() const;
+
+ RefPtr<Clipboard> m_owner;
+ // Indirectly owned by our parent.
+ ScriptExecutionContext* m_context;
+ Vector<RefPtr<DataTransferItem> > m_items;
};
} // namespace WebCore
Modified: trunk/Source/WebCore/platform/qt/DataTransferItemListQt.cpp (105647 => 105648)
--- trunk/Source/WebCore/platform/qt/DataTransferItemListQt.cpp 2012-01-23 23:32:40 UTC (rev 105647)
+++ trunk/Source/WebCore/platform/qt/DataTransferItemListQt.cpp 2012-01-23 23:35:44 UTC (rev 105648)
@@ -40,10 +40,73 @@
}
DataTransferItemListQt::DataTransferItemListQt(PassRefPtr<Clipboard> owner, ScriptExecutionContext* context)
- : DataTransferItemList(owner, context)
+ : m_owner(clipboard)
+ , m_context(context)
{
}
+size_t DataTransferItemListQt::length()
+{
+ if (m_owner->policy() == ClipboardNumb)
+ return 0;
+
+ return m_items.size();
+}
+
+PassRefPtr<DataTransferItem> DataTransferItemListQt::item(unsigned long index)
+{
+ if (m_owner->policy() == ClipboardNumb || index >= length())
+ return 0;
+
+ return m_items[index];
+}
+
+void DataTransferItemListQt::deleteItem(unsigned long index, ExceptionCode& ec)
+{
+ if (m_owner->policy() != ClipboardWritable) {
+ ec = INVALID_STATE_ERR;
+ return;
+ }
+
+ if (index >= length())
+ return;
+
+ m_items.remove(index);
+}
+
+void DataTransferItemListQt::clear()
+{
+ if (m_owner->policy() != ClipboardWritable)
+ return;
+
+ m_items.clear();
+
+}
+
+void DataTransferItemListQt::add(const String& data, const String& type, ExceptionCode& ec)
+{
+ if (m_owner->policy() != ClipboardWritable)
+ return;
+
+ // Only one 'string' item with a given type is allowed in the collection.
+ for (size_t i = 0; i < m_items.size(); ++i) {
+ if (m_items[i]->type() == type && m_items[i]->kind() == DataTransferItem::kindString) {
+ ec = NOT_SUPPORTED_ERR;
+ return;
+ }
+ }
+
+ m_items.append(DataTransferItem::create(m_owner, m_context, data, type));
+}
+
+void DataTransferItemListQt::add(PassRefPtr<File> file)
+{
+ if (m_owner->policy() != ClipboardWritable || !file)
+ return;
+
+ m_items.append(DataTransferItem::create(m_owner, m_context, file));
+}
+
void DataTransferItemListQt::addPasteboardItem(const String& type)
{
m_items.append(DataTransferItemQt::createFromPasteboard(m_owner, m_context, type));
Modified: trunk/Source/WebCore/platform/qt/DataTransferItemListQt.h (105647 => 105648)
--- trunk/Source/WebCore/platform/qt/DataTransferItemListQt.h 2012-01-23 23:32:40 UTC (rev 105647)
+++ trunk/Source/WebCore/platform/qt/DataTransferItemListQt.h 2012-01-23 23:35:44 UTC (rev 105648)
@@ -42,11 +42,24 @@
public:
static PassRefPtr<DataTransferItemListQt> create(PassRefPtr<Clipboard>, ScriptExecutionContext*);
+ virtual size_t length();
+ virtual PassRefPtr<DataTransferItem> item(unsigned long index);
+ virtual void deleteItem(unsigned long index, ExceptionCode&);
+ virtual void clear();
+ virtual void add(const String& data, const String& type, ExceptionCode&);
+ virtual void add(PassRefPtr<File>);
+
+
friend class ClipboardQt;
private:
DataTransferItemListQt(PassRefPtr<Clipboard>, ScriptExecutionContext*);
virtual void addPasteboardItem(const String& type);
+
+ RefPtr<Clipboard> m_owner;
+ // Indirectly owned by our parent.
+ ScriptExecutionContext* m_context;
+ Vector<RefPtr<DataTransferItem> > m_items;
};
}
Modified: trunk/Source/WebCore/platform/qt/DataTransferItemQt.cpp (105647 => 105648)
--- trunk/Source/WebCore/platform/qt/DataTransferItemQt.cpp 2012-01-23 23:32:40 UTC (rev 105647)
+++ trunk/Source/WebCore/platform/qt/DataTransferItemQt.cpp 2012-01-23 23:35:44 UTC (rev 105648)
@@ -41,17 +41,17 @@
namespace WebCore {
-PassRefPtr<DataTransferItem> DataTransferItem::create(PassRefPtr<Clipboard> owner,
- ScriptExecutionContext* context,
- const String& data,
- const String& type)
+PassRefPtr<DataTransferItemQt> DataTransferItemQt::create(PassRefPtr<Clipboard> owner,
+ ScriptExecutionContext* context,
+ const String& data,
+ const String& type)
{
return adoptRef(new DataTransferItemQt(owner, context, DataTransferItemQt::InternalSource, kindString, type, data));
}
-PassRefPtr<DataTransferItem> DataTransferItem::create(PassRefPtr<Clipboard> owner,
- ScriptExecutionContext* context,
- PassRefPtr<File> file)
+PassRefPtr<DataTransferItemQt> DataTransferItemQt::create(PassRefPtr<Clipboard> owner,
+ ScriptExecutionContext* context,
+ PassRefPtr<File> file)
{
return adoptRef(new DataTransferItemQt(owner, context, DataTransferItemQt::InternalSource, file));
}
@@ -71,8 +71,10 @@
DataSource source,
const String& kind, const String& type,
const String& data)
- : DataTransferItem(owner, kind, type)
+ : m_owner(owner)
, m_context(context)
+ , m_kind(kind)
+ , m_type(type)
, m_dataSource(source)
, m_data(data)
{
@@ -82,14 +84,16 @@
ScriptExecutionContext* context,
DataSource source,
PassRefPtr<File> file)
- : DataTransferItem(owner, DataTransferItem::kindFile, file.get() ? file->type() : "")
+ : m_owner(owner)
, m_context(context)
+ , m_kind(kindFile)
+ , m_type(file.get() ? file->type() : "");
, m_source(source)
, m_file(file)
{
}
-void DataTransferItemQt::getAsString(PassRefPtr<StringCallback> callback)
+void DataTransferItemQt::getAsString(PassRefPtr<StringCallback> callback) const
{
if ((owner()->policy() != ClipboardReadable && owner()->policy() != ClipboardWritable)
|| kind() != kindString)
@@ -117,7 +121,7 @@
callback->scheduleCallback(m_context, data);
}
-PassRefPtr<Blob> DataTransferItemQt::getAsFile()
+PassRefPtr<Blob> DataTransferItemQt::getAsFile() const
{
if (kind() == kindFile && m_dataSource == InternalSource)
return m_file;
Modified: trunk/Source/WebCore/platform/qt/DataTransferItemQt.h (105647 => 105648)
--- trunk/Source/WebCore/platform/qt/DataTransferItemQt.h 2012-01-23 23:32:40 UTC (rev 105647)
+++ trunk/Source/WebCore/platform/qt/DataTransferItemQt.h 2012-01-23 23:35:44 UTC (rev 105648)
@@ -39,20 +39,25 @@
class DataTransferItemQt : public DataTransferItem {
public:
+ static PassRefPtr<DataTransferItemQt> create(PassRefPtr<Clipboard> owner, ScriptExecutionContext*, const String& data, const String& type);
+ static PassRefPtr<DataTransferItemQt> create(PassRefPtr<Clipboard> owner, ScriptExecutionContext*, PassRefPtr<File>);
static PassRefPtr<DataTransferItemQt> createFromPasteboard(PassRefPtr<Clipboard> owner,
ScriptExecutionContext*,
const String&);
- virtual void getAsString(PassRefPtr<StringCallback>);
- virtual PassRefPtr<Blob> getAsFile();
+ virtual String kind() const { return m_kind; }
+ virtual String type() const { return m_type; }
+ virtual void getAsString(PassRefPtr<StringCallback>) const;
+ virtual PassRefPtr<Blob> getAsFile() const;
+
private:
+ friend class DataTransferItemListQt;
+
enum DataSource {
PasteboardSource,
InternalSource
};
- friend class DataTransferItem;
-
DataTransferItemQt(PassRefPtr<Clipboard> owner,
ScriptExecutionContext*,
DataSource,
@@ -62,7 +67,10 @@
DataSource,
PassRefPtr<File>);
+ const RefPtr<Clipboard> m_owner;
ScriptExecutionContext* m_context;
+ const String m_kind;
+ const String m_type;
const DataSource m_dataSource;
const String m_data;
RefPtr<File> m_file;