18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef ClipboardWin_h
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define ClipboardWin_h
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
29967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch#include "COMPtr.h"
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CachedResourceClient.h"
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Clipboard.h"
322fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "DragData.h"
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct IDataObject;
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
38967717af5423377c967781471ee106e2bb4e11c8Ben Murdochclass CachedImage;
390617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenclass Frame;
40967717af5423377c967781471ee106e2bb4e11c8Ben Murdochclass IntPoint;
41967717af5423377c967781471ee106e2bb4e11c8Ben Murdochclass WCDataObject;
42967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
43967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch// State available during IE's events for drag and drop and copy/paste
44967717af5423377c967781471ee106e2bb4e11c8Ben Murdochclass ClipboardWin : public Clipboard, public CachedResourceClient {
45ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    WTF_MAKE_FAST_ALLOCATED;
46967717af5423377c967781471ee106e2bb4e11c8Ben Murdochpublic:
47bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    static PassRefPtr<ClipboardWin> create(ClipboardType clipboardType, IDataObject* dataObject, ClipboardAccessPolicy policy, Frame* frame)
48967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    {
49bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        return adoptRef(new ClipboardWin(clipboardType, dataObject, policy, frame));
50967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    }
51bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    static PassRefPtr<ClipboardWin> create(ClipboardType clipboardType, WCDataObject* dataObject, ClipboardAccessPolicy policy, Frame* frame)
52967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    {
53bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen        return adoptRef(new ClipboardWin(clipboardType, dataObject, policy, frame));
54967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    }
552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    static PassRefPtr<ClipboardWin> create(ClipboardType clipboardType, const DragDataMap& dataMap, ClipboardAccessPolicy policy, Frame* frame)
562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    {
572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        return adoptRef(new ClipboardWin(clipboardType, dataMap, policy, frame));
582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    }
59967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    ~ClipboardWin();
60967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
61967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    void clearData(const String& type);
62967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    void clearAllData();
63967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    String getData(const String& type, bool& success) const;
64967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    bool setData(const String& type, const String& data);
65967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
66967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    // extensions beyond IE's API
67967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    virtual HashSet<String> types() const;
68967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    virtual PassRefPtr<FileList> files() const;
69967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
70967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    void setDragImage(CachedImage*, const IntPoint&);
71967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    void setDragImageElement(Node*, const IntPoint&);
72967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
73967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    virtual DragImageRef createDragImage(IntPoint& dragLoc) const;
74967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    virtual void declareAndWriteDragImage(Element*, const KURL&, const String& title, Frame*);
75967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    virtual void writeURL(const KURL&, const String&, Frame*);
76967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    virtual void writeRange(Range*, Frame*);
77967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    virtual void writePlainText(const String&);
78967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
79967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    virtual bool hasData();
80967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
81967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    COMPtr<IDataObject> dataObject() { return m_dataObject; }
82967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
83967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    void setExternalDataObject(IDataObject *dataObject);
84967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
85967717af5423377c967781471ee106e2bb4e11c8Ben Murdochprivate:
86bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    ClipboardWin(ClipboardType, IDataObject*, ClipboardAccessPolicy, Frame*);
87bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen    ClipboardWin(ClipboardType, WCDataObject*, ClipboardAccessPolicy, Frame*);
882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    ClipboardWin(ClipboardType, const DragDataMap&, ClipboardAccessPolicy, Frame*);
89967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
90967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    void resetFromClipboard();
91967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    void setDragImage(CachedImage*, Node*, const IntPoint&);
92967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch
93967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    COMPtr<IDataObject> m_dataObject;
94967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    COMPtr<WCDataObject> m_writableDataObject;
952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    DragDataMap m_dragDataMap;
96967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    Frame* m_frame;
97967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch};
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // ClipboardWin_h
102