Commit 5c1c9729 authored by dcheng@chromium.org's avatar dcheng@chromium.org

Clipboard::getData should return an empty string instead of undefined

https://bugs.webkit.org/show_bug.cgi?id=79712

Reviewed by Tony Chang.

Source/WebCore:

Per the spec, an empty string should be returned when there is no data for the given typestring.

Test: fast/events/dataTransfer-getData-returns-empty-string.html

* bindings/js/JSClipboardCustom.cpp:
* bindings/v8/custom/V8ClipboardCustom.cpp:
* dom/Clipboard.h:
(Clipboard):
* dom/Clipboard.idl:
* platform/blackberry/ClipboardBlackBerry.cpp:
(WebCore::ClipboardBlackBerry::getData):
* platform/blackberry/ClipboardBlackBerry.h:
(ClipboardBlackBerry):
* platform/chromium/ClipboardChromium.cpp:
(WebCore::ClipboardChromium::getData):
* platform/chromium/ClipboardChromium.h:
(ClipboardChromium):
* platform/efl/ClipboardEfl.cpp:
(WebCore::ClipboardEfl::getData):
* platform/efl/ClipboardEfl.h:
(ClipboardEfl):
* platform/gtk/ClipboardGtk.cpp:
(WebCore::ClipboardGtk::getData):
* platform/gtk/ClipboardGtk.h:
(ClipboardGtk):
* platform/mac/ClipboardMac.h:
(ClipboardMac):
* platform/mac/ClipboardMac.mm:
(WebCore::ClipboardMac::getData):
* platform/qt/ClipboardQt.cpp:
(WebCore::ClipboardQt::getData):
* platform/qt/ClipboardQt.h:
(ClipboardQt):
* platform/win/ClipboardUtilitiesWin.cpp:
(WebCore::getFullCFHTML):
(WebCore::getURL):
(WebCore::getPlainText):
(WebCore::getTextHTML):
(WebCore::getCFHTML):
(WebCore::fragmentFromHTML):
* platform/win/ClipboardUtilitiesWin.h:
(WebCore):
* platform/win/ClipboardWin.cpp:
(WebCore::ClipboardWin::getData):
* platform/win/ClipboardWin.h:
(ClipboardWin):
* platform/wx/ClipboardWx.cpp:
(WebCore::ClipboardWx::getData):
* platform/wx/ClipboardWx.h:
(ClipboardWx):

LayoutTests:

* fast/events/dataTransfer-getData-returns-empty-string-expected.txt: Added.
* fast/events/dataTransfer-getData-returns-empty-string.html: Added.
* http/tests/local/drag-over-remote-content-expected.txt:
* http/tests/security/drag-over-remote-content-iframe-expected.txt:
* http/tests/security/drag-over-remote-content-iframe.html:

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@109176 268f45cc-cd09-0410-ab3c-d52691b4dbfc
parent d0f24939
2012-02-28 Daniel Cheng <dcheng@chromium.org>
Clipboard::getData should return an empty string instead of undefined
https://bugs.webkit.org/show_bug.cgi?id=79712
Reviewed by Tony Chang.
* fast/events/dataTransfer-getData-returns-empty-string-expected.txt: Added.
* fast/events/dataTransfer-getData-returns-empty-string.html: Added.
* http/tests/local/drag-over-remote-content-expected.txt:
* http/tests/security/drag-over-remote-content-iframe-expected.txt:
* http/tests/security/drag-over-remote-content-iframe.html:
2012-02-28 Adam Klein <adamk@chromium.org>
Unreviewed gardening, mark another compositing test as flaky.
......@@ -7,5 +7,5 @@ https://bugs.webkit.org/show_bug.cgi?id=25907 | rdar://problem/6910832.
To test, drag Abe's image into this light blue div.
PASS: ondragover saw a URL of 'undefined'
PASS: ondragover saw a URL of ''
......@@ -4,5 +4,5 @@ https://bugs.webkit.org/show_bug.cgi?id=25907 | rdar://problem/6910832.
To test, drag Abe's image into this light blue div.
PASS: ondragover saw a URL of 'undefined'
PASS: ondragover saw a URL of ''
......@@ -17,8 +17,8 @@ window.onload = function () {
dragTarget.ondragover = function() {
var url = event.dataTransfer.getData('URL');
var result = url === undefined
? "PASS: ondragover saw a URL of 'undefined'"
var result = url === ''
? "PASS: ondragover saw a URL of ''"
: "FAIL: ondragover saw a URL of '" + url + "'";
log(result);
event.preventDefault();
......
2012-02-28 Daniel Cheng <dcheng@chromium.org>
Clipboard::getData should return an empty string instead of undefined
https://bugs.webkit.org/show_bug.cgi?id=79712
Reviewed by Tony Chang.
Per the spec, an empty string should be returned when there is no data for the given typestring.
Test: fast/events/dataTransfer-getData-returns-empty-string.html
* bindings/js/JSClipboardCustom.cpp:
* bindings/v8/custom/V8ClipboardCustom.cpp:
* dom/Clipboard.h:
(Clipboard):
* dom/Clipboard.idl:
* platform/blackberry/ClipboardBlackBerry.cpp:
(WebCore::ClipboardBlackBerry::getData):
* platform/blackberry/ClipboardBlackBerry.h:
(ClipboardBlackBerry):
* platform/chromium/ClipboardChromium.cpp:
(WebCore::ClipboardChromium::getData):
* platform/chromium/ClipboardChromium.h:
(ClipboardChromium):
* platform/efl/ClipboardEfl.cpp:
(WebCore::ClipboardEfl::getData):
* platform/efl/ClipboardEfl.h:
(ClipboardEfl):
* platform/gtk/ClipboardGtk.cpp:
(WebCore::ClipboardGtk::getData):
* platform/gtk/ClipboardGtk.h:
(ClipboardGtk):
* platform/mac/ClipboardMac.h:
(ClipboardMac):
* platform/mac/ClipboardMac.mm:
(WebCore::ClipboardMac::getData):
* platform/qt/ClipboardQt.cpp:
(WebCore::ClipboardQt::getData):
* platform/qt/ClipboardQt.h:
(ClipboardQt):
* platform/win/ClipboardUtilitiesWin.cpp:
(WebCore::getFullCFHTML):
(WebCore::getURL):
(WebCore::getPlainText):
(WebCore::getTextHTML):
(WebCore::getCFHTML):
(WebCore::fragmentFromHTML):
* platform/win/ClipboardUtilitiesWin.h:
(WebCore):
* platform/win/ClipboardWin.cpp:
(WebCore::ClipboardWin::getData):
* platform/win/ClipboardWin.h:
(ClipboardWin):
* platform/wx/ClipboardWx.cpp:
(WebCore::ClipboardWx::getData):
* platform/wx/ClipboardWx.h:
(ClipboardWx):
2012-02-28 Kenichi Ishibashi <bashi@chromium.org>
[Chromium] Uninitialized value in LocaleToScriptCodeForFontSelection
......@@ -66,22 +66,6 @@ JSValue JSClipboard::clearData(ExecState* exec)
return throwError(exec, createSyntaxError(exec, "clearData: Invalid number of arguments"));
}
JSValue JSClipboard::getData(ExecState* exec)
{
// FIXME: It does not match the rest of the JS bindings to throw on invalid number of arguments.
if (exec->argumentCount() != 1)
return throwError(exec, createSyntaxError(exec, "getData: Invalid number of arguments"));
Clipboard* clipboard = impl();
bool success;
String result = clipboard->getData(ustringToString(exec->argument(0).toString(exec)->value(exec)), success);
if (!success)
return jsUndefined();
return jsString(exec, result);
}
JSValue JSClipboard::setDragImage(ExecState* exec)
{
Clipboard* clipboard = impl();
......
......@@ -62,22 +62,6 @@ v8::Handle<v8::Value> V8Clipboard::clearDataCallback(const v8::Arguments& args)
return v8::Undefined();
}
v8::Handle<v8::Value> V8Clipboard::getDataCallback(const v8::Arguments& args)
{
INC_STATS("DOM.Clipboard.getData()");
Clipboard* clipboard = V8Clipboard::toNative(args.Holder());
if (args.Length() != 1)
return throwError("getData: Invalid number of arguments", V8Proxy::SyntaxError);
bool success;
String result = clipboard->getData(toWebCoreString(args[0]), success);
if (success)
return v8String(result);
return v8::Undefined();
}
v8::Handle<v8::Value> V8Clipboard::setDragImageCallback(const v8::Arguments& args)
{
INC_STATS("DOM.Clipboard.setDragImage()");
......
......@@ -63,7 +63,7 @@ namespace WebCore {
virtual void clearData(const String& type) = 0;
virtual void clearAllData() = 0;
virtual String getData(const String& type, bool& success) const = 0;
virtual String getData(const String& type) const = 0;
virtual bool setData(const String& type, const String& data) = 0;
// extensions beyond IE's API
......
......@@ -36,8 +36,7 @@ module core {
[Custom] void clearData(in [Optional] DOMString type)
raises(DOMException);
[Custom] void getData(in DOMString type)
raises(DOMException);
DOMString getData(in DOMString type);
boolean setData(in DOMString type, in DOMString data);
[Custom] void setDragImage(in HTMLImageElement image, in long x, in long y)
raises(DOMException);
......
......@@ -56,9 +56,8 @@ void ClipboardBlackBerry::clearAllData()
BlackBerry::Platform::Clipboard::clearClipboard();
}
String ClipboardBlackBerry::getData(const String& type, bool& success) const
String ClipboardBlackBerry::getData(const String& type) const
{
success = true;
return String::fromUTF8(BlackBerry::Platform::Clipboard::readClipboardByType(type.utf8().data()).c_str());
}
......
......@@ -32,7 +32,7 @@ public:
void clearData(const String& type);
void clearAllData();
String getData(const String& type, bool& success) const;
String getData(const String& type) const;
bool setData(const String& type, const String& data);
// extensions beyond IE's API
......
......@@ -263,16 +263,16 @@ void ClipboardChromium::clearAllData()
m_dataObject->clearAll();
}
String ClipboardChromium::getData(const String& type, bool& success) const
String ClipboardChromium::getData(const String& type) const
{
success = false;
bool ignoredSuccess = false;
if (policy() != ClipboardReadable || !m_dataObject)
return String();
if (isForCopyAndPaste() && platformClipboardChanged())
return String();
return m_dataObject->getData(normalizeType(type), success);
return m_dataObject->getData(normalizeType(type), ignoredSuccess);
}
bool ClipboardChromium::setData(const String& type, const String& data)
......
......@@ -58,7 +58,7 @@ namespace WebCore {
virtual void clearData(const String& type);
void clearAllData();
String getData(const String& type, bool& success) const;
String getData(const String& type) const;
bool setData(const String& type, const String& data);
bool platformClipboardChanged() const;
......
......@@ -65,10 +65,9 @@ void ClipboardEfl::clearAllData()
notImplemented();
}
String ClipboardEfl::getData(const String&, bool &success) const
String ClipboardEfl::getData(const String&) const
{
notImplemented();
success = false;
return String();
}
......
......@@ -36,7 +36,7 @@ public:
void clearData(const String&);
void clearAllData();
String getData(const String&, bool&) const;
String getData(const String&) const;
bool setData(const String&, const String&);
PassRefPtr<DOMStringList> types() const;
......
......@@ -143,13 +143,8 @@ void ClipboardGtk::clearAllData()
PasteboardHelper::defaultPasteboardHelper()->writeClipboardContents(m_clipboard);
}
String ClipboardGtk::getData(const String& typeString, bool& success) const
String ClipboardGtk::getData(const String& typeString) const
{
success = true; // According to http://www.whatwg.org/specs/web-apps/current-work/multipage/dnd.html
// "The getData(format) method must return the data that is associated with the type format converted
// to ASCII lowercase, if any, and must return the empty string otherwise." Since success == false
// results in an 'undefined' return value, we always want to return success == true. This parameter
// should eventually be removed.
if (policy() != ClipboardReadable || !m_dataObject)
return String();
......
......@@ -54,7 +54,7 @@ namespace WebCore {
void clearData(const String&);
void clearAllData();
String getData(const String&, bool&) const;
String getData(const String&) const;
bool setData(const String&, const String&);
virtual PassRefPtr<DOMStringList> types() const;
......
......@@ -49,7 +49,7 @@ public:
void clearData(const String& type);
void clearAllData();
String getData(const String& type, bool& success) const;
String getData(const String& type) const;
bool setData(const String& type, const String& data);
virtual bool hasData();
......
......@@ -212,9 +212,8 @@ static Vector<String> absoluteURLsFromPasteboard(const String& pasteboardName, b
return Vector<String>();
}
String ClipboardMac::getData(const String& type, bool& success) const
String ClipboardMac::getData(const String& type) const
{
success = false;
if (policy() != ClipboardReadable)
return String();
......@@ -236,7 +235,6 @@ String ClipboardMac::getData(const String& type, bool& success) const
// Enforce changeCount ourselves for security. We check after reading instead of before to be
// sure it doesn't change between our testing the change count and accessing the data.
if (!cocoaValue.isEmpty() && m_changeCount == platformStrategies()->pasteboardStrategy()->changeCount(m_pasteboardName)) {
success = true;
return cocoaValue;
}
......
......@@ -144,28 +144,21 @@ void ClipboardQt::clearAllData()
m_writableData = 0;
}
String ClipboardQt::getData(const String& type, bool& success) const
String ClipboardQt::getData(const String& type) const
{
if (policy() != ClipboardReadable) {
success = false;
if (policy() != ClipboardReadable)
return String();
}
if (isHtmlMimeType(type) && m_readableData->hasHtml()) {
success = true;
if (isHtmlMimeType(type) && m_readableData->hasHtml())
return m_readableData->html();
}
if (isTextMimeType(type) && m_readableData->hasText()) {
success = true;
if (isTextMimeType(type) && m_readableData->hasText())
return m_readableData->text();
}
ASSERT(m_readableData);
QByteArray rawData = m_readableData->data(type);
QString data = QTextCodec::codecForName("UTF-16")->toUnicode(rawData);
success = !data.isEmpty();
return data;
}
......
......@@ -53,7 +53,7 @@ public:
void clearData(const String& type);
void clearAllData();
String getData(const String& type, bool& success) const;
String getData(const String& type) const;
bool setData(const String& type, const String& data);
// extensions beyond IE's API
......
......@@ -208,7 +208,7 @@ HGLOBAL createGlobalData(const Vector<char>& vector)
return globalData;
}
static String getFullCFHTML(IDataObject* data, bool& success)
static String getFullCFHTML(IDataObject* data)
{
STGMEDIUM store;
if (SUCCEEDED(data->GetData(htmlFormat(), &store))) {
......@@ -218,10 +218,8 @@ static String getFullCFHTML(IDataObject* data, bool& success)
String cfhtml(UTF8Encoding().decode(data, dataSize));
GlobalUnlock(store.hGlobal);
ReleaseStgMedium(&store);
success = true;
return cfhtml;
}
success = false;
return String();
}
......@@ -447,27 +445,25 @@ void setFileContentData(IDataObject* dataObject, int size, void* dataBlob)
dataObject->SetData(fileContentFormatZero(), &medium, TRUE);
}
String getURL(IDataObject* dataObject, DragData::FilenameConversionPolicy filenamePolicy, bool& success, String* title)
String getURL(IDataObject* dataObject, DragData::FilenameConversionPolicy filenamePolicy, String* title)
{
STGMEDIUM store;
String url;
success = false;
if (getWebLocData(dataObject, url, title))
success = true;
else if (SUCCEEDED(dataObject->GetData(urlWFormat(), &store))) {
return url;
if (SUCCEEDED(dataObject->GetData(urlWFormat(), &store))) {
// URL using Unicode
UChar* data = static_cast<UChar*>(GlobalLock(store.hGlobal));
url = extractURL(String(data), title);
GlobalUnlock(store.hGlobal);
ReleaseStgMedium(&store);
success = true;
} else if (SUCCEEDED(dataObject->GetData(urlFormat(), &store))) {
// URL using ASCII
char* data = static_cast<char*>(GlobalLock(store.hGlobal));
url = extractURL(String(data), title);
GlobalUnlock(store.hGlobal);
ReleaseStgMedium(&store);
success = true;
}
#if USE(CF)
else if (filenamePolicy == DragData::ConvertFilenames) {
......@@ -476,11 +472,8 @@ String getURL(IDataObject* dataObject, DragData::FilenameConversionPolicy filena
wchar_t* data = static_cast<wchar_t*>(GlobalLock(store.hGlobal));
if (data && data[0] && (PathFileExists(data) || PathIsUNC(data))) {
RetainPtr<CFStringRef> pathAsCFString(AdoptCF, CFStringCreateWithCharacters(kCFAllocatorDefault, (const UniChar*)data, wcslen(data)));
if (urlFromPath(pathAsCFString.get(), url)) {
if (title)
*title = url;
success = true;
}
if (urlFromPath(pathAsCFString.get(), url) && title)
*title = url;
}
GlobalUnlock(store.hGlobal);
ReleaseStgMedium(&store);
......@@ -489,11 +482,8 @@ String getURL(IDataObject* dataObject, DragData::FilenameConversionPolicy filena
char* data = static_cast<char*>(GlobalLock(store.hGlobal));
if (data && data[0] && (PathFileExistsA(data) || PathIsUNCA(data))) {
RetainPtr<CFStringRef> pathAsCFString(AdoptCF, CFStringCreateWithCString(kCFAllocatorDefault, data, kCFStringEncodingASCII));
if (urlFromPath(pathAsCFString.get(), url)) {
if (title)
*title = url;
success = true;
}
if (urlFromPath(pathAsCFString.get(), url) && title)
*title = url;
}
GlobalUnlock(store.hGlobal);
ReleaseStgMedium(&store);
......@@ -530,31 +520,27 @@ String getURL(const DragDataMap* data, DragData::FilenameConversionPolicy filena
return url;
}
String getPlainText(IDataObject* dataObject, bool& success)
String getPlainText(IDataObject* dataObject)
{
STGMEDIUM store;
String text;
success = false;
if (SUCCEEDED(dataObject->GetData(plainTextWFormat(), &store))) {
// Unicode text
UChar* data = static_cast<UChar*>(GlobalLock(store.hGlobal));
text = String(data);
GlobalUnlock(store.hGlobal);
ReleaseStgMedium(&store);
success = true;
} else if (SUCCEEDED(dataObject->GetData(plainTextFormat(), &store))) {
// ASCII text
char* data = static_cast<char*>(GlobalLock(store.hGlobal));
text = String(data);
GlobalUnlock(store.hGlobal);
ReleaseStgMedium(&store);
success = true;
} else {
// FIXME: Originally, we called getURL() here because dragging and dropping files doesn't
// populate the drag with text data. Per https://bugs.webkit.org/show_bug.cgi?id=38826, this
// is undesirable, so maybe this line can be removed.
text = getURL(dataObject, DragData::DoNotConvertFilenames, success);
success = true;
text = getURL(dataObject, DragData::DoNotConvertFilenames);
}
return text;
}
......@@ -570,17 +556,15 @@ String getPlainText(const DragDataMap* data)
return getURL(data, DragData::DoNotConvertFilenames);
}
String getTextHTML(IDataObject* data, bool& success)
String getTextHTML(IDataObject* data)
{
STGMEDIUM store;
String html;
success = false;
if (SUCCEEDED(data->GetData(texthtmlFormat(), &store))) {
UChar* data = static_cast<UChar*>(GlobalLock(store.hGlobal));
html = String(data);
GlobalUnlock(store.hGlobal);
ReleaseStgMedium(&store);
success = true;
}
return html;
}
......@@ -592,10 +576,10 @@ String getTextHTML(const DragDataMap* data)
return text;
}
String getCFHTML(IDataObject* data, bool& success)
String getCFHTML(IDataObject* data)
{
String cfhtml = getFullCFHTML(data, success);
if (success)
String cfhtml = getFullCFHTML(data);
if (!cfhtml.isEmpty())
return extractMarkupFromCFHTML(cfhtml);
return String();
}
......@@ -655,16 +639,15 @@ PassRefPtr<DocumentFragment> fragmentFromHTML(Document* doc, IDataObject* data)
if (!doc || !data)
return 0;
bool success = false;
String cfhtml = getFullCFHTML(data, success);
if (success) {
String cfhtml = getFullCFHTML(data);
if (!cfhtml.isEmpty()) {
if (RefPtr<DocumentFragment> fragment = fragmentFromCFHTML(doc, cfhtml))
return fragment.release();
}
String html = getTextHTML(data, success);
String html = getTextHTML(data);
String srcURL;
if (success)
if (!html.isEmpty())
return createFragmentFromMarkup(doc, html, srcURL, FragmentScriptingNotAllowed);
return 0;
......
......@@ -67,13 +67,13 @@ PassRefPtr<DocumentFragment> fragmentFromHTML(Document*, IDataObject*);
PassRefPtr<DocumentFragment> fragmentFromHTML(Document*, const DragDataMap*);
PassRefPtr<DocumentFragment> fragmentFromCFHTML(Document*, const String& cfhtml);
String getURL(IDataObject*, DragData::FilenameConversionPolicy, bool& success, String* title = 0);
String getURL(IDataObject*, DragData::FilenameConversionPolicy, String* title = 0);
String getURL(const DragDataMap*, DragData::FilenameConversionPolicy, String* title = 0);
String getPlainText(IDataObject*, bool& success);
String getPlainText(IDataObject*);
String getPlainText(const DragDataMap*);
String getTextHTML(IDataObject*, bool& success);
String getTextHTML(IDataObject*);
String getTextHTML(const DragDataMap*);
String getCFHTML(IDataObject*, bool& success);
String getCFHTML(IDataObject*);
String getCFHTML(const DragDataMap*);
void getClipboardData(IDataObject*, FORMATETC* fetc, Vector<String>& dataStrings);
......
......@@ -436,22 +436,21 @@ void ClipboardWin::clearAllData()
m_dataObject = m_writableDataObject;
}
String ClipboardWin::getData(const String& type, bool& success) const
String ClipboardWin::getData(const String& type) const
{
success = false;
if (policy() != ClipboardReadable || (!m_dataObject && m_dragDataMap.isEmpty()))
return "";
ClipboardDataType dataType = clipboardTypeFromMIMEType(type);
if (dataType == ClipboardDataTypeText)
return m_dataObject ? getPlainText(m_dataObject.get(), success) : getPlainText(&m_dragDataMap);
return m_dataObject ? getPlainText(m_dataObject.get()) : getPlainText(&m_dragDataMap);
if (dataType == ClipboardDataTypeURL)
return m_dataObject ? getURL(m_dataObject.get(), DragData::DoNotConvertFilenames, success) : getURL(&m_dragDataMap, DragData::DoNotConvertFilenames);
return m_dataObject ? getURL(m_dataObject.get(), DragData::DoNotConvertFilenames) : getURL(&m_dragDataMap, DragData::DoNotConvertFilenames);
else if (dataType == ClipboardDataTypeTextHTML) {
String data = m_dataObject ? getTextHTML(m_dataObject.get(), success) : getTextHTML(&m_dragDataMap);
if (success)
String data = m_dataObject ? getTextHTML(m_dataObject.get()) : getTextHTML(&m_dragDataMap);
if (!data.isEmpty())
return data;
return m_dataObject ? getCFHTML(m_dataObject.get(), success) : getCFHTML(&m_dragDataMap);
return m_dataObject ? getCFHTML(m_dataObject.get()) : getCFHTML(&m_dragDataMap);
}
return "";
......
......@@ -60,7 +60,7 @@ public:
void clearData(const String& type);
void clearAllData();
String getData(const String& type, bool& success) const;
String getData(const String& type) const;
bool setData(const String& type, const String& data);
// extensions beyond IE's API
......
......@@ -101,8 +101,7 @@ void DragData::getDragFileContentData(int size, void* dataBlob)
String DragData::asURL(Frame*, FilenameConversionPolicy filenamePolicy, String* title) const
{
bool success;
return (m_platformDragData) ? getURL(m_platformDragData, filenamePolicy, success, title) : getURL(&m_dragDataMap, filenamePolicy, title);
return (m_platformDragData) ? getURL(m_platformDragData, filenamePolicy, title) : getURL(&m_dragDataMap, filenamePolicy, title);
}
bool DragData::containsFiles() const
......@@ -155,8 +154,7 @@ bool DragData::containsPlainText() const
String DragData::asPlainText(Frame*) const
{
bool success;
return (m_platformDragData) ? getPlainText(m_platformDragData, success) : getPlainText(&m_dragDataMap);
return (m_platformDragData) ? getPlainText(m_platformDragData) : getPlainText(&m_dragDataMap);
}
bool DragData::containsColor() const
......
......@@ -58,7 +58,7 @@ void ClipboardWx::clearAllData()
Pasteboard::generalPasteboard()->clear();
}
String ClipboardWx::getData(const String& type, bool& success) const
String ClipboardWx::getData(const String& type) const
{
notImplemented();
return "";
......
......@@ -42,7 +42,7 @@ namespace WebCore {
void clearData(const String& type);
void clearAllData();
String getData(const String& type, bool& success) const;
String getData(const String& type) const;
bool setData(const String& type, const String& data);
// extensions beyond IE's API
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment