⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 105648 in webkit


Ignore:
Timestamp:
Jan 23, 2012, 3:35:44 PM (15 years ago)
Author:
dcheng@chromium.org
Message:

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):

Location:
trunk/Source/WebCore
Files:
1 deleted
19 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/CMakeLists.txt

    r105642 r105648  
    14991499    LIST(APPEND WebCore_SOURCES
    15001500        dom/DataTransferItem.cpp
    1501         dom/DataTransferItemList.cpp
    15021501        dom/StringCallback.cpp
    15031502    )
  • trunk/Source/WebCore/ChangeLog

    r105645 r105648  
     12012-01-23  Daniel Cheng  <dcheng@chromium.org>
     2
     3        Convert DataTransferItem/DataTransferItemList back into an interface class
     4        https://bugs.webkit.org/show_bug.cgi?id=76856
     5
     6        When Qt implemented the DataTransferItemList, a lot of logic was moved into the shared
     7        classes since Chromium/Qt happened to implement it the same way. Now that I want to do some
     8        refactoring/cleanup work to better implement DataTransferItemList in Chromium, we won't
     9        share the same data anymore so it doesn't make sense to keep that code in a common location.
     10
     11        Reviewed by David Levin.
     12
     13        Covered by existing tests.
     14
     15        * CMakeLists.txt:
     16        * GNUmakefile.list.am:
     17        * Target.pri:
     18        * WebCore.gypi:
     19        * WebCore.vcproj/WebCore.vcproj:
     20        * WebCore.xcodeproj/project.pbxproj:
     21        * dom/DataTransferItem.cpp:
     22        * dom/DataTransferItem.h:
     23        * dom/DataTransferItemList.cpp: Removed.
     24        * dom/DataTransferItemList.h:
     25        * platform/chromium/ClipboardChromium.cpp:
     26        (WebCore::ClipboardChromium::mayUpdateItems):
     27        * platform/chromium/DataTransferItemChromium.cpp:
     28        (WebCore::DataTransferItemChromium::create):
     29        (WebCore::DataTransferItemChromium::DataTransferItemChromium):
     30        (WebCore::DataTransferItemChromium::getAsString):
     31        (WebCore::DataTransferItemChromium::getAsFile):
     32        (WebCore::DataTransferItemChromium::clipboardChromium):
     33        * platform/chromium/DataTransferItemChromium.h:
     34        (WebCore::DataTransferItemChromium::kind):
     35        (WebCore::DataTransferItemChromium::type):
     36        * platform/chromium/DataTransferItemListChromium.cpp:
     37        (WebCore::DataTransferItemListChromium::DataTransferItemListChromium):
     38        * platform/chromium/DataTransferItemListChromium.h:
     39        * platform/qt/DataTransferItemListQt.cpp:
     40        (WebCore::DataTransferItemListQt::DataTransferItemListQt):
     41        (WebCore::DataTransferItemListQt::length):
     42        (WebCore::DataTransferItemListQt::item):
     43        (WebCore::DataTransferItemListQt::deleteItem):
     44        (WebCore::DataTransferItemListQt::clear):
     45        (WebCore::DataTransferItemListQt::add):
     46        * platform/qt/DataTransferItemListQt.h:
     47        * platform/qt/DataTransferItemQt.cpp:
     48        (WebCore::DataTransferItemQt::create):
     49        (WebCore::DataTransferItemQt::DataTransferItemQt):
     50        (WebCore::DataTransferItemQt::getAsString):
     51        (WebCore::DataTransferItemQt::getAsFile):
     52        * platform/qt/DataTransferItemQt.h:
     53        (WebCore::DataTransferItemQt::kind):
     54        (WebCore::DataTransferItemQt::type):
     55
    1562012-01-23  Andreas Kling  <awesomekling@apple.com>
    257
  • trunk/Source/WebCore/GNUmakefile.list.am

    r105642 r105648  
    46634663        Source/WebCore/dom/DataTransferItem.cpp \
    46644664        Source/WebCore/dom/DataTransferItem.h \
    4665         Source/WebCore/dom/DataTransferItemList.cpp \
    46664665        Source/WebCore/dom/DataTransferItemList.h \
    46674666        Source/WebCore/dom/StringCallback.cpp \
  • trunk/Source/WebCore/Target.pri

    r105642 r105648  
    30153015    SOURCES += \
    30163016        dom/DataTransferItem.cpp \
    3017         dom/DataTransferItemList.cpp \
    30183017        dom/StringCallback.cpp \
    30193018        platform/qt/DataTransferItemQt.cpp \
  • trunk/Source/WebCore/WebCore.gypi

    r105642 r105648  
    53575357            'dom/DataTransferItem.cpp',
    53585358            'dom/DataTransferItem.h',
    5359             'dom/DataTransferItemList.cpp',
    53605359            'dom/DataTransferItemList.h',
    53615360            'dom/DatasetDOMStringMap.cpp',
  • trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj

    r105642 r105648  
    4679946799                        </File>
    4680046800                        <File
    46801                                 RelativePath="..\dom\DataTransferItemList.cpp"
    46802                                 >
    46803                                 <FileConfiguration
    46804                                         Name="Debug|Win32"
    46805                                         ExcludedFromBuild="true"
    46806                                         >
    46807                                         <Tool
    46808                                                 Name="VCCLCompilerTool"
    46809                                         />
    46810                                 </FileConfiguration>
    46811                                 <FileConfiguration
    46812                                         Name="Release|Win32"
    46813                                         ExcludedFromBuild="true"
    46814                                         >
    46815                                         <Tool
    46816                                                 Name="VCCLCompilerTool"
    46817                                         />
    46818                                 </FileConfiguration>
    46819                                 <FileConfiguration
    46820                                         Name="Debug_Cairo_CFLite|Win32"
    46821                                         ExcludedFromBuild="true"
    46822                                         >
    46823                                         <Tool
    46824                                                 Name="VCCLCompilerTool"
    46825                                         />
    46826                                 </FileConfiguration>
    46827                                 <FileConfiguration
    46828                                         Name="Release_Cairo_CFLite|Win32"
    46829                                         ExcludedFromBuild="true"
    46830                                         >
    46831                                         <Tool
    46832                                                 Name="VCCLCompilerTool"
    46833                                         />
    46834                                 </FileConfiguration>
    46835                                 <FileConfiguration
    46836                                         Name="Debug_All|Win32"
    46837                                         ExcludedFromBuild="true"
    46838                                         >
    46839                                         <Tool
    46840                                                 Name="VCCLCompilerTool"
    46841                                         />
    46842                                 </FileConfiguration>
    46843                                 <FileConfiguration
    46844                                         Name="Production|Win32"
    46845                                         ExcludedFromBuild="true"
    46846                                         >
    46847                                         <Tool
    46848                                                 Name="VCCLCompilerTool"
    46849                                         />
    46850                                 </FileConfiguration>
    46851                         </File>
    46852                         <File
    4685346801                                RelativePath="..\dom\DataTransferItemList.h"
    4685446802                                >
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r105642 r105648  
    18471847                77EF62F312F9DB7400C77BD2 /* JSWebGLVertexArrayObjectOES.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 77EF62F112F9DB7400C77BD2 /* JSWebGLVertexArrayObjectOES.cpp */; };
    18481848                77EF62F412F9DB7400C77BD2 /* JSWebGLVertexArrayObjectOES.h in Headers */ = {isa = PBXBuildFile; fileRef = 77EF62F212F9DB7400C77BD2 /* JSWebGLVertexArrayObjectOES.h */; };
    1849                 781755861365A1B00093BE2E /* DataTransferItemList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 781755851365A1B00093BE2E /* DataTransferItemList.cpp */; };
    18501849                79AC9218109945C80021266E /* JSCompositionEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 79AC9216109945C80021266E /* JSCompositionEvent.cpp */; };
    18511850                79AC9219109945C80021266E /* JSCompositionEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 79AC9217109945C80021266E /* JSCompositionEvent.h */; };
     
    87078706                77EF62F112F9DB7400C77BD2 /* JSWebGLVertexArrayObjectOES.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSWebGLVertexArrayObjectOES.cpp; sourceTree = "<group>"; };
    87088707                77EF62F212F9DB7400C77BD2 /* JSWebGLVertexArrayObjectOES.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWebGLVertexArrayObjectOES.h; sourceTree = "<group>"; };
    8709                 781755851365A1B00093BE2E /* DataTransferItemList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DataTransferItemList.cpp; sourceTree = "<group>"; };
    87108708                79AC9216109945C80021266E /* JSCompositionEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSCompositionEvent.cpp; sourceTree = "<group>"; };
    87118709                79AC9217109945C80021266E /* JSCompositionEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSCompositionEvent.h; sourceTree = "<group>"; };
     
    2036020358                                81AC5997131636E60009A7E0 /* DataTransferItem.h */,
    2036120359                                81AC5AE81316392E0009A7E0 /* DataTransferItem.idl */,
    20362                                 781755851365A1B00093BE2E /* DataTransferItemList.cpp */,
    2036320360                                81AC5998131636E60009A7E0 /* DataTransferItemList.h */,
    2036420361                                81AC5AE91316392E0009A7E0 /* DataTransferItemList.idl */,
     
    2467124668                                BC64641D11D7F416006455B0 /* DatasetDOMStringMap.cpp in Sources */,
    2467224669                                815E6167132587AA00B622B0 /* DataTransferItem.cpp in Sources */,
    24673                                 781755861365A1B00093BE2E /* DataTransferItemList.cpp in Sources */,
    2467424670                                2E97CCEA12939CB800C5C8FF /* DataView.cpp in Sources */,
    2467524671                                A5732B0A136A161D005C8D7C /* DateComponents.cpp in Sources */,
  • trunk/Source/WebCore/dom/DataTransferItem.cpp

    r95901 r105648  
    3232#include "DataTransferItem.h"
    3333
    34 #include "Clipboard.h"
    35 
    3634#if ENABLE(DATA_TRANSFER_ITEMS)
    3735
     
    4139const char DataTransferItem::kindFile[] = "file";
    4240
    43 DataTransferItem::DataTransferItem(PassRefPtr<Clipboard> owner, const String& kind, const String& type)
    44     : m_owner(owner)
    45     , m_kind(kind)
    46     , m_type(type)
    47 {
    48 }
    49 
    50 Clipboard* DataTransferItem::owner()
    51 {
    52     return m_owner.get();
    53 }
    54 
    55 String DataTransferItem::kind() const
    56 {
    57     if (m_owner->policy() == ClipboardNumb)
    58         return String();
    59 
    60     return m_kind;
    61 }
    62 
    63 String DataTransferItem::type() const
    64 {
    65     if (m_owner->policy() == ClipboardNumb)
    66         return String();
    67 
    68     return m_type;
    69 }
    70 
    71 
    7241} // namespace WebCore
    7342
  • trunk/Source/WebCore/dom/DataTransferItem.h

    r105506 r105648  
    5050    virtual ~DataTransferItem() { }
    5151
    52     static PassRefPtr<DataTransferItem> create(PassRefPtr<Clipboard> owner, ScriptExecutionContext*, const String& data, const String& type);
    53     static PassRefPtr<DataTransferItem> create(PassRefPtr<Clipboard> owner, ScriptExecutionContext*, PassRefPtr<File>);
    54 
    5552    static const char kindString[];
    5653    static const char kindFile[];
    5754
    58     String kind() const;
    59     String type() const;
     55    virtual String kind() const = 0;
     56    virtual String type() const = 0;
    6057
    61     virtual void getAsString(PassRefPtr<StringCallback>) = 0;
    62     virtual PassRefPtr<Blob> getAsFile() = 0;
    63 
    64 protected:
    65     DataTransferItem(PassRefPtr<Clipboard> owner, const String& kind, const String& type);
    66     Clipboard* owner();
    67 
    68 private:
    69     friend class DataTransferItemList;
    70 
    71     const RefPtr<Clipboard> m_owner;
    72     const String m_kind;
    73     const String m_type;
     58    virtual void getAsString(PassRefPtr<StringCallback>) const = 0;
     59    virtual PassRefPtr<Blob> getAsFile() const = 0;
    7460};
    7561
  • trunk/Source/WebCore/dom/DataTransferItemList.h

    r105506 r105648  
    4949    virtual ~DataTransferItemList() { }
    5050
    51     virtual size_t length();
    52     virtual PassRefPtr<DataTransferItem> item(unsigned long index);
    53     // FIXME: Implement V8DataTransferItemList::indexedPropertyDeleter to get this called.
    54     virtual void deleteItem(unsigned long index, ExceptionCode&);
    55     virtual void clear();
    56     virtual void add(const String& data, const String& type, ExceptionCode&);
    57     virtual void add(PassRefPtr<File>);
    58 
    59 protected:
    60     DataTransferItemList(PassRefPtr<Clipboard>, ScriptExecutionContext*);
    61 
    62 protected:
    63     RefPtr<Clipboard> m_owner;
    64     // Indirectly owned by our parent.
    65     ScriptExecutionContext* m_context;
    66     Vector<RefPtr<DataTransferItem> > m_items;
    67 
     51    virtual size_t length() = 0;
     52    virtual PassRefPtr<DataTransferItem> item(unsigned long index) = 0;
     53    virtual void deleteItem(unsigned long index, ExceptionCode&) = 0;
     54    virtual void clear() = 0;
     55    virtual void add(const String& data, const String& type, ExceptionCode&) = 0;
     56    virtual void add(PassRefPtr<File>) = 0;
    6857};
    6958
  • trunk/Source/WebCore/platform/chromium/ClipboardChromium.cpp

    r105506 r105648  
    376376    String plainText = m_dataObject->getData(mimeTypeTextPlain, success);
    377377    if (success)
    378         items.append(DataTransferItem::create(this, scriptExecutionContext, plainText, mimeTypeTextPlain));
     378        items.append(DataTransferItemChromium::create(this, scriptExecutionContext, plainText, mimeTypeTextPlain));
    379379
    380380    success = false;
    381381    String htmlText = m_dataObject->getData(mimeTypeTextHTML, success);
    382382    if (success)
    383         items.append(DataTransferItem::create(this, scriptExecutionContext, htmlText, mimeTypeTextHTML));
     383        items.append(DataTransferItemChromium::create(this, scriptExecutionContext, htmlText, mimeTypeTextHTML));
    384384
    385385    if (m_dataObject->containsFilenames()) {
    386386        const Vector<String>& filenames = m_dataObject->filenames();
    387387        for (Vector<String>::const_iterator it = filenames.begin(); it != filenames.end(); ++it)
    388             items.append(DataTransferItem::create(this, scriptExecutionContext, File::create(*it)));
     388            items.append(DataTransferItemChromium::create(this, scriptExecutionContext, File::create(*it)));
    389389    }
    390390    m_dragStorageUpdated = false;
  • trunk/Source/WebCore/platform/chromium/DataTransferItemChromium.cpp

    r105506 r105648  
    5454}
    5555
    56 PassRefPtr<DataTransferItem> DataTransferItem::create(PassRefPtr<Clipboard> owner,
    57                                                       ScriptExecutionContext* context,
    58                                                       const String& data,
    59                                                       const String& type)
     56PassRefPtr<DataTransferItemChromium> DataTransferItemChromium::create(PassRefPtr<Clipboard> owner,
     57                                                                      ScriptExecutionContext* context,
     58                                                                      const String& data,
     59                                                                      const String& type)
    6060{
    6161    return adoptRef(new DataTransferItemChromium(owner, context, DataTransferItemChromium::InternalSource, kindString, type, data));
    6262}
    6363
    64 PassRefPtr<DataTransferItem> DataTransferItem::create(PassRefPtr<Clipboard> owner,
    65                                                       ScriptExecutionContext* context,
    66                                                       PassRefPtr<File> file)
     64PassRefPtr<DataTransferItemChromium> DataTransferItemChromium::create(PassRefPtr<Clipboard> owner,
     65                                                                      ScriptExecutionContext* context,
     66                                                                      PassRefPtr<File> file)
    6767{
    6868    return adoptRef(new DataTransferItemChromium(owner, context, DataTransferItemChromium::InternalSource, file));
     
    7070
    7171DataTransferItemChromium::DataTransferItemChromium(PassRefPtr<Clipboard> owner, ScriptExecutionContext* context, DataSource source, const String& kind, const String& type, const String& data)
    72     : DataTransferItem(owner, kind, type)
    73     , m_context(context)
     72    : m_context(context)
     73    , m_owner(owner)
     74    , m_kind(kind)
     75    , m_type(type)
    7476    , m_source(source)
    7577    , m_data(data)
     
    7880
    7981DataTransferItemChromium::DataTransferItemChromium(PassRefPtr<Clipboard> owner, ScriptExecutionContext* context, DataSource source, PassRefPtr<File> file)
    80     : DataTransferItem(owner, DataTransferItem::kindFile, file.get() ? file->type() : String())
    81     , m_context(context)
     82    : m_context(context)
     83    , m_owner(owner)
     84    , m_kind(kindFile)
     85    , m_type(file.get() ? file->type() : String())
    8286    , m_source(source)
    8387    , m_file(file)
     
    8589}
    8690
    87 void DataTransferItemChromium::getAsString(PassRefPtr<StringCallback> callback)
     91void DataTransferItemChromium::getAsString(PassRefPtr<StringCallback> callback) const
    8892{
    89     if ((owner()->policy() != ClipboardReadable && owner()->policy() != ClipboardWritable)
     93    if ((m_owner->policy() != ClipboardReadable && m_owner->policy() != ClipboardWritable)
    9094        || kind() != kindString)
    9195        return;
     
    117121}
    118122
    119 PassRefPtr<Blob> DataTransferItemChromium::getAsFile()
     123PassRefPtr<Blob> DataTransferItemChromium::getAsFile() const
    120124{
    121125    if (kind() != kindFile || clipboardChromium()->storageHasUpdated())
     
    147151}
    148152
    149 ClipboardChromium* DataTransferItemChromium::clipboardChromium()
     153ClipboardChromium* DataTransferItemChromium::clipboardChromium() const
    150154{
    151     return static_cast<ClipboardChromium*>(owner());
     155    return static_cast<ClipboardChromium*>(m_owner.get());
    152156}
    153157
  • trunk/Source/WebCore/platform/chromium/DataTransferItemChromium.h

    r105506 r105648  
    4747class DataTransferItemChromium : public DataTransferItem {
    4848public:
     49    static PassRefPtr<DataTransferItemChromium> create(PassRefPtr<Clipboard> owner, ScriptExecutionContext*, const String& data, const String& type);
     50    static PassRefPtr<DataTransferItemChromium> create(PassRefPtr<Clipboard> owner, ScriptExecutionContext*, PassRefPtr<File>);
    4951    static PassRefPtr<DataTransferItemChromium> createFromPasteboard(PassRefPtr<Clipboard> owner, ScriptExecutionContext*, const String& type);
    5052
    51     virtual void getAsString(PassRefPtr<StringCallback>);
    52     virtual PassRefPtr<Blob> getAsFile();
     53    virtual String kind() const { return m_kind; }
     54    virtual String type() const { return m_type; }
     55    virtual void getAsString(PassRefPtr<StringCallback>) const;
     56    virtual PassRefPtr<Blob> getAsFile() const;
    5357
    5458private:
     59    friend class DataTransferItemListChromium;
     60
    5561    enum DataSource {
    5662        PasteboardSource,
     
    5864    };
    5965
    60     friend class DataTransferItem;
    61 
    6266    DataTransferItemChromium(PassRefPtr<Clipboard> owner, ScriptExecutionContext*, DataSource, const String& kind, const String& type, const String& data);
    6367    DataTransferItemChromium(PassRefPtr<Clipboard> owner, ScriptExecutionContext*, DataSource, PassRefPtr<File>);
    6468
    65     ClipboardChromium* clipboardChromium();
     69    ClipboardChromium* clipboardChromium() const;
    6670
    6771    ScriptExecutionContext* m_context;
     72    const RefPtr<Clipboard> m_owner;
     73    const String m_kind;
     74    const String m_type;
    6875    const DataSource m_source;
    6976    const String m_data;
  • trunk/Source/WebCore/platform/chromium/DataTransferItemListChromium.cpp

    r105506 r105648  
    5454
    5555DataTransferItemListChromium::DataTransferItemListChromium(PassRefPtr<Clipboard> owner, ScriptExecutionContext* context)
    56     : DataTransferItemList(owner, context)
     56    : m_owner(owner)
     57    , m_context(context)
    5758{
    5859}
  • trunk/Source/WebCore/platform/chromium/DataTransferItemListChromium.h

    r105506 r105648  
    5151    static PassRefPtr<DataTransferItemListChromium> create(PassRefPtr<Clipboard>, ScriptExecutionContext*);
    5252
    53     // DataTransferItemList overrides.
    5453    virtual size_t length();
    5554    virtual PassRefPtr<DataTransferItem> item(unsigned long index);
     55    // FIXME: Implement V8DataTransferItemList::indexedPropertyDeleter to get this called.
    5656    virtual void deleteItem(unsigned long index, ExceptionCode&);
    5757    virtual void clear();
     
    6262    DataTransferItemListChromium(PassRefPtr<Clipboard>, ScriptExecutionContext*);
    6363    ClipboardChromium* clipboardChromium() const;
     64
     65    RefPtr<Clipboard> m_owner;
     66    // Indirectly owned by our parent.
     67    ScriptExecutionContext* m_context;
     68    Vector<RefPtr<DataTransferItem> > m_items;
    6469};
    6570
  • trunk/Source/WebCore/platform/qt/DataTransferItemListQt.cpp

    r98821 r105648  
    4141
    4242DataTransferItemListQt::DataTransferItemListQt(PassRefPtr<Clipboard> owner, ScriptExecutionContext* context)
    43     : DataTransferItemList(owner,  context)
     43    : m_owner(clipboard)
     44    , m_context(context)
    4445{
     46}
     47
     48size_t DataTransferItemListQt::length()
     49{
     50    if (m_owner->policy() == ClipboardNumb)
     51        return 0;
     52
     53    return m_items.size();
     54}
     55
     56PassRefPtr<DataTransferItem> DataTransferItemListQt::item(unsigned long index)
     57{
     58    if (m_owner->policy() == ClipboardNumb || index >= length())
     59        return 0;
     60
     61    return m_items[index];
     62}
     63
     64void DataTransferItemListQt::deleteItem(unsigned long index, ExceptionCode& ec)
     65{
     66    if (m_owner->policy() != ClipboardWritable) {
     67        ec = INVALID_STATE_ERR;
     68        return;
     69    }
     70
     71    if (index >= length())
     72        return;
     73
     74    m_items.remove(index);
     75}
     76
     77void DataTransferItemListQt::clear()
     78{
     79    if (m_owner->policy() != ClipboardWritable)
     80        return;
     81
     82    m_items.clear();
     83
     84}
     85
     86void DataTransferItemListQt::add(const String& data, const String& type, ExceptionCode& ec)
     87{
     88    if (m_owner->policy() != ClipboardWritable)
     89        return;
     90
     91    // Only one 'string' item with a given type is allowed in the collection.
     92    for (size_t i = 0; i < m_items.size(); ++i) {
     93        if (m_items[i]->type() == type && m_items[i]->kind() == DataTransferItem::kindString) {
     94            ec = NOT_SUPPORTED_ERR;
     95            return;
     96        }
     97    }
     98
     99    m_items.append(DataTransferItem::create(m_owner, m_context, data, type));
     100}
     101
     102void DataTransferItemListQt::add(PassRefPtr<File> file)
     103{
     104    if (m_owner->policy() != ClipboardWritable || !file)
     105        return;
     106
     107    m_items.append(DataTransferItem::create(m_owner, m_context, file));
    45108}
    46109
  • trunk/Source/WebCore/platform/qt/DataTransferItemListQt.h

    r98821 r105648  
    4343    static PassRefPtr<DataTransferItemListQt> create(PassRefPtr<Clipboard>, ScriptExecutionContext*);
    4444
     45    virtual size_t length();
     46    virtual PassRefPtr<DataTransferItem> item(unsigned long index);
     47    virtual void deleteItem(unsigned long index, ExceptionCode&);
     48    virtual void clear();
     49    virtual void add(const String& data, const String& type, ExceptionCode&);
     50    virtual void add(PassRefPtr<File>);
     51
     52
    4553    friend class ClipboardQt;
    4654private:
     
    4856
    4957    virtual void addPasteboardItem(const String& type);
     58
     59    RefPtr<Clipboard> m_owner;
     60    // Indirectly owned by our parent.
     61    ScriptExecutionContext* m_context;
     62    Vector<RefPtr<DataTransferItem> > m_items;
    5063};
    5164
  • trunk/Source/WebCore/platform/qt/DataTransferItemQt.cpp

    r105506 r105648  
    4242namespace WebCore {
    4343
    44 PassRefPtr<DataTransferItem> DataTransferItem::create(PassRefPtr<Clipboard> owner,
    45                                                       ScriptExecutionContext* context,
    46                                                       const String& data,
    47                                                       const String& type)
     44PassRefPtr<DataTransferItemQt> DataTransferItemQt::create(PassRefPtr<Clipboard> owner,
     45                                                          ScriptExecutionContext* context,
     46                                                          const String& data,
     47                                                          const String& type)
    4848{
    4949    return adoptRef(new DataTransferItemQt(owner, context, DataTransferItemQt::InternalSource, kindString, type, data));
    5050}
    5151
    52 PassRefPtr<DataTransferItem> DataTransferItem::create(PassRefPtr<Clipboard> owner,
    53                                                       ScriptExecutionContext* context,
    54                                                       PassRefPtr<File> file)
     52PassRefPtr<DataTransferItemQt> DataTransferItemQt::create(PassRefPtr<Clipboard> owner,
     53                                                          ScriptExecutionContext* context,
     54                                                          PassRefPtr<File> file)
    5555{
    5656    return adoptRef(new DataTransferItemQt(owner, context, DataTransferItemQt::InternalSource, file));
     
    7272                                       const String& kind, const String& type,
    7373                                       const String& data)
    74     : DataTransferItem(owner, kind, type)
     74    : m_owner(owner)
    7575    , m_context(context)
     76    , m_kind(kind)
     77    , m_type(type)
    7678    , m_dataSource(source)
    7779    , m_data(data)
     
    8385                                       DataSource source,
    8486                                       PassRefPtr<File> file)
    85     : DataTransferItem(owner, DataTransferItem::kindFile, file.get() ? file->type() : "")
     87    : m_owner(owner)
    8688    , m_context(context)
     89    , m_kind(kindFile)
     90    , m_type(file.get() ? file->type() : "");
    8791    , m_source(source)
    8892    , m_file(file)
     
    9094}
    9195
    92 void DataTransferItemQt::getAsString(PassRefPtr<StringCallback> callback)
     96void DataTransferItemQt::getAsString(PassRefPtr<StringCallback> callback) const
    9397{
    9498    if ((owner()->policy() != ClipboardReadable && owner()->policy() != ClipboardWritable)
     
    118122}
    119123
    120 PassRefPtr<Blob> DataTransferItemQt::getAsFile()
     124PassRefPtr<Blob> DataTransferItemQt::getAsFile() const
    121125{
    122126    if (kind() == kindFile && m_dataSource == InternalSource)
  • trunk/Source/WebCore/platform/qt/DataTransferItemQt.h

    r105506 r105648  
    4040class DataTransferItemQt : public DataTransferItem {
    4141public:
     42    static PassRefPtr<DataTransferItemQt> create(PassRefPtr<Clipboard> owner, ScriptExecutionContext*, const String& data, const String& type);
     43    static PassRefPtr<DataTransferItemQt> create(PassRefPtr<Clipboard> owner, ScriptExecutionContext*, PassRefPtr<File>);
    4244    static PassRefPtr<DataTransferItemQt> createFromPasteboard(PassRefPtr<Clipboard> owner,
    4345                                                               ScriptExecutionContext*,
    4446                                                               const String&);
    45     virtual void getAsString(PassRefPtr<StringCallback>);
    46     virtual PassRefPtr<Blob> getAsFile();
     47
     48    virtual String kind() const { return m_kind; }
     49    virtual String type() const { return m_type; }
     50    virtual void getAsString(PassRefPtr<StringCallback>) const;
     51    virtual PassRefPtr<Blob> getAsFile() const;
    4752
    4853private:
     54    friend class DataTransferItemListQt;
     55
    4956    enum DataSource {
    5057        PasteboardSource,
    5158        InternalSource
    5259    };
    53 
    54     friend class DataTransferItem;
    5560
    5661    DataTransferItemQt(PassRefPtr<Clipboard> owner,
     
    6368                       PassRefPtr<File>);
    6469
     70    const RefPtr<Clipboard> m_owner;
    6571    ScriptExecutionContext* m_context;
     72    const String m_kind;
     73    const String m_type;
    6674    const DataSource m_dataSource;
    6775    const String m_data;
Note: See TracChangeset for help on using the changeset viewer.