• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2009 Google Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are
6  * met:
7  *
8  *     * Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  *     * Redistributions in binary form must reproduce the above
11  * copyright notice, this list of conditions and the following disclaimer
12  * in the documentation and/or other materials provided with the
13  * distribution.
14  *     * Neither the name of Google Inc. nor the names of its
15  * contributors may be used to endorse or promote products derived from
16  * this software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30 
31 #include "config.h"
32 #include "WebDragData.h"
33 
34 #include "ChromiumDataObject.h"
35 #include "ChromiumDataObjectLegacy.h"
36 #include "ClipboardMimeTypes.h"
37 #include "WebData.h"
38 #include "WebString.h"
39 #include "WebURL.h"
40 #include "WebVector.h"
41 
42 #include <wtf/PassRefPtr.h>
43 
44 using namespace WebCore;
45 
46 namespace WebKit {
47 
48 class WebDragDataPrivate : public ChromiumDataObject {
49 };
50 
initialize()51 void WebDragData::initialize()
52 {
53     assign(static_cast<WebDragDataPrivate*>(ChromiumDataObject::create(Clipboard::DragAndDrop).releaseRef()));
54 }
55 
reset()56 void WebDragData::reset()
57 {
58     assign(0);
59 }
60 
assign(const WebDragData & other)61 void WebDragData::assign(const WebDragData& other)
62 {
63     WebDragDataPrivate* p = const_cast<WebDragDataPrivate*>(other.m_private);
64     if (p)
65         p->ref();
66     assign(p);
67 }
68 
url() const69 WebString WebDragData::url() const
70 {
71     ASSERT(!isNull());
72     bool ignoredSuccess;
73     return m_private->getData(mimeTypeURL, ignoredSuccess);
74 }
75 
setURL(const WebURL & url)76 void WebDragData::setURL(const WebURL& url)
77 {
78     ensureMutable();
79     m_private->setData(mimeTypeURL, KURL(url).string());
80 }
81 
urlTitle() const82 WebString WebDragData::urlTitle() const
83 {
84     ASSERT(!isNull());
85     return m_private->urlTitle();
86 }
87 
setURLTitle(const WebString & urlTitle)88 void WebDragData::setURLTitle(const WebString& urlTitle)
89 {
90     ensureMutable();
91     m_private->setUrlTitle(urlTitle);
92 }
93 
downloadMetadata() const94 WebString WebDragData::downloadMetadata() const
95 {
96     ASSERT(!isNull());
97     bool ignoredSuccess;
98     return m_private->getData(mimeTypeDownloadURL, ignoredSuccess);
99 }
100 
setDownloadMetadata(const WebString & downloadMetadata)101 void WebDragData::setDownloadMetadata(const WebString& downloadMetadata)
102 {
103     ensureMutable();
104     m_private->setData(mimeTypeDownloadURL, downloadMetadata);
105 }
106 
fileExtension() const107 WebString WebDragData::fileExtension() const
108 {
109     ASSERT(!isNull());
110     return m_private->fileExtension();
111 }
112 
setFileExtension(const WebString & fileExtension)113 void WebDragData::setFileExtension(const WebString& fileExtension)
114 {
115     ensureMutable();
116     m_private->setFileExtension(fileExtension);
117 }
118 
containsFilenames() const119 bool WebDragData::containsFilenames() const
120 {
121     ASSERT(!isNull());
122     return m_private->containsFilenames();
123 }
124 
filenames(WebVector<WebString> & filenames) const125 void WebDragData::filenames(WebVector<WebString>& filenames) const
126 {
127     ASSERT(!isNull());
128     filenames = m_private->filenames();
129 }
130 
setFilenames(const WebVector<WebString> & filenames)131 void WebDragData::setFilenames(const WebVector<WebString>& filenames)
132 {
133     ensureMutable();
134     Vector<String> filenamesCopy;
135     filenamesCopy.append(filenames.data(), filenames.size());
136     m_private->setFilenames(filenamesCopy);
137 }
138 
appendToFilenames(const WebString & filename)139 void WebDragData::appendToFilenames(const WebString& filename)
140 {
141     ensureMutable();
142     Vector<String> filenames = m_private->filenames();
143     filenames.append(filename);
144     m_private->setFilenames(filenames);
145 }
146 
plainText() const147 WebString WebDragData::plainText() const
148 {
149     ASSERT(!isNull());
150     bool ignoredSuccess;
151     return m_private->getData(mimeTypeTextPlain, ignoredSuccess);
152 }
153 
setPlainText(const WebString & plainText)154 void WebDragData::setPlainText(const WebString& plainText)
155 {
156     ensureMutable();
157     m_private->setData(mimeTypeTextPlain, plainText);
158 }
159 
htmlText() const160 WebString WebDragData::htmlText() const
161 {
162     ASSERT(!isNull());
163     bool ignoredSuccess;
164     return m_private->getData(mimeTypeTextHTML, ignoredSuccess);
165 }
166 
setHTMLText(const WebString & htmlText)167 void WebDragData::setHTMLText(const WebString& htmlText)
168 {
169     ensureMutable();
170     m_private->setData(mimeTypeTextHTML, htmlText);
171 }
172 
htmlBaseURL() const173 WebURL WebDragData::htmlBaseURL() const
174 {
175     ASSERT(!isNull());
176     return m_private->htmlBaseUrl();
177 }
178 
setHTMLBaseURL(const WebURL & htmlBaseURL)179 void WebDragData::setHTMLBaseURL(const WebURL& htmlBaseURL)
180 {
181     ensureMutable();
182     m_private->setHtmlBaseUrl(htmlBaseURL);
183 }
184 
fileContentFilename() const185 WebString WebDragData::fileContentFilename() const
186 {
187     ASSERT(!isNull());
188     return m_private->fileContentFilename();
189 }
190 
setFileContentFilename(const WebString & filename)191 void WebDragData::setFileContentFilename(const WebString& filename)
192 {
193     ensureMutable();
194     m_private->setFileContentFilename(filename);
195 }
196 
fileContent() const197 WebData WebDragData::fileContent() const
198 {
199     ASSERT(!isNull());
200     return WebData(m_private->fileContent());
201 }
202 
setFileContent(const WebData & fileContent)203 void WebDragData::setFileContent(const WebData& fileContent)
204 {
205     ensureMutable();
206     m_private->setFileContent(fileContent);
207 }
208 
WebDragData(const WTF::PassRefPtr<WebCore::ChromiumDataObject> & data)209 WebDragData::WebDragData(const WTF::PassRefPtr<WebCore::ChromiumDataObject>& data)
210     : m_private(static_cast<WebDragDataPrivate*>(data.releaseRef()))
211 {
212 }
213 
operator =(const WTF::PassRefPtr<WebCore::ChromiumDataObject> & data)214 WebDragData& WebDragData::operator=(const WTF::PassRefPtr<WebCore::ChromiumDataObject>& data)
215 {
216     assign(static_cast<WebDragDataPrivate*>(data.releaseRef()));
217     return *this;
218 }
219 
operator WTF::PassRefPtr<WebCore::ChromiumDataObject>() const220 WebDragData::operator WTF::PassRefPtr<WebCore::ChromiumDataObject>() const
221 {
222     return PassRefPtr<ChromiumDataObject>(const_cast<WebDragDataPrivate*>(m_private));
223 }
224 
assign(WebDragDataPrivate * p)225 void WebDragData::assign(WebDragDataPrivate* p)
226 {
227     // p is already ref'd for us by the caller
228     if (m_private)
229         m_private->deref();
230     m_private = p;
231 }
232 
ensureMutable()233 void WebDragData::ensureMutable()
234 {
235     ASSERT(!isNull());
236     ASSERT(m_private->hasOneRef());
237 }
238 
239 } // namespace WebKit
240