Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / clipboard / Clipboard.h
1 /*
2  * Copyright (C) 2001 Peter Kelly (pmk@post.com)
3  * Copyright (C) 2001 Tobias Anton (anton@stud.fbi.fh-darmstadt.de)
4  * Copyright (C) 2006 Samuel Weinig (sam.weinig@gmail.com)
5  * Copyright (C) 2003, 2004, 2005, 2006, 2008 Apple Inc. All rights reserved.
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public License
18  * along with this library; see the file COPYING.LIB.  If not, write to
19  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  * Boston, MA 02110-1301, USA.
21  *
22  */
23
24 #ifndef Clipboard_h
25 #define Clipboard_h
26
27 #include "bindings/v8/ScriptWrappable.h"
28 #include "core/clipboard/ClipboardAccessPolicy.h"
29 #include "core/fetch/ResourcePtr.h"
30 #include "core/page/DragActions.h"
31 #include "platform/geometry/IntPoint.h"
32 #include "wtf/Forward.h"
33 #include "wtf/RefCounted.h"
34 #include "wtf/RefPtr.h"
35 #include "wtf/Vector.h"
36
37 namespace WebCore {
38
39 class DataObject;
40 class DataTransferItemList;
41 class DragImage;
42 class Element;
43 class ExceptionState;
44 class FileList;
45 class Frame;
46 class ImageResource;
47 class Node;
48 class Range;
49
50 // State available during IE's events for drag and drop and copy/paste
51 class Clipboard : public RefCounted<Clipboard>, public ScriptWrappable {
52 public:
53     // Whether this clipboard is serving a drag-drop or copy-paste request.
54     enum ClipboardType {
55         CopyAndPaste,
56         DragAndDrop,
57     };
58
59     static PassRefPtr<Clipboard> create(ClipboardType, ClipboardAccessPolicy, PassRefPtr<DataObject>);
60     ~Clipboard();
61
62     bool isForCopyAndPaste() const { return m_clipboardType == CopyAndPaste; }
63     bool isForDragAndDrop() const { return m_clipboardType == DragAndDrop; }
64
65     String dropEffect() const { return dropEffectIsUninitialized() ? "none" : m_dropEffect; }
66     void setDropEffect(const String&);
67     bool dropEffectIsUninitialized() const { return m_dropEffect == "uninitialized"; }
68     String effectAllowed() const { return m_effectAllowed; }
69     void setEffectAllowed(const String&);
70
71     void clearData(const String& type = String());
72     String getData(const String& type) const;
73     bool setData(const String& type, const String& data);
74
75     // extensions beyond IE's API
76     Vector<String> types() const;
77     PassRefPtr<FileList> files() const;
78
79     IntPoint dragLocation() const { return m_dragLoc; }
80     void setDragImage(Element*, int x, int y, ExceptionState&);
81     ImageResource* dragImageResource() const { return m_dragImage.get(); }
82     void setDragImageResource(ImageResource*, const IntPoint&);
83     Node* dragImageElement() const { return m_dragImageElement.get(); }
84     void setDragImageElement(Node*, const IntPoint&);
85
86     PassOwnPtr<DragImage> createDragImage(IntPoint& dragLocation, Frame*) const;
87     void declareAndWriteDragImage(Element*, const KURL&, const String& title);
88     void writeURL(const KURL&, const String&);
89     void writeRange(Range*, Frame*);
90     void writePlainText(const String&);
91
92     bool hasData();
93
94     void setAccessPolicy(ClipboardAccessPolicy);
95     bool canReadTypes() const;
96     bool canReadData() const;
97     bool canWriteData() const;
98     // Note that the spec doesn't actually allow drag image modification outside the dragstart
99     // event. This capability is maintained for backwards compatiblity for ports that have
100     // supported this in the past. On many ports, attempting to set a drag image outside the
101     // dragstart operation is a no-op anyway.
102     bool canSetDragImage() const;
103
104     DragOperation sourceOperation() const;
105     DragOperation destinationOperation() const;
106     void setSourceOperation(DragOperation);
107     void setDestinationOperation(DragOperation);
108
109     bool hasDropZoneType(const String&);
110
111     PassRefPtr<DataTransferItemList> items();
112
113     PassRefPtr<DataObject> dataObject() const;
114
115 private:
116     Clipboard(ClipboardType, ClipboardAccessPolicy, PassRefPtr<DataObject>);
117
118     void setDragImage(ImageResource*, Node*, const IntPoint&);
119
120     bool hasFileOfType(const String&) const;
121     bool hasStringOfType(const String&) const;
122
123     // Instead of using this member directly, prefer to use the can*() methods above.
124     ClipboardAccessPolicy m_policy;
125     String m_dropEffect;
126     String m_effectAllowed;
127     ClipboardType m_clipboardType;
128     RefPtr<DataObject> m_dataObject;
129
130     IntPoint m_dragLoc;
131     ResourcePtr<ImageResource> m_dragImage;
132     RefPtr<Node> m_dragImageElement;
133 };
134
135 DragOperation convertDropZoneOperationToDragOperation(const String& dragOperation);
136 String convertDragOperationToDropZoneOperation(DragOperation);
137
138 } // namespace WebCore
139
140 #endif // Clipboard_h