Clipboard::getData should return an empty string instead of undefined
authordcheng@chromium.org <dcheng@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 29 Feb 2012 01:31:55 +0000 (01:31 +0000)
committerdcheng@chromium.org <dcheng@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 29 Feb 2012 01:31:55 +0000 (01:31 +0000)
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: https://svn.webkit.org/repository/webkit/trunk@109176 268f45cc-cd09-0410-ab3c-d52691b4dbfc

28 files changed:
LayoutTests/ChangeLog
LayoutTests/http/tests/local/drag-over-remote-content-expected.txt
LayoutTests/http/tests/security/drag-over-remote-content-iframe-expected.txt
LayoutTests/http/tests/security/drag-over-remote-content-iframe.html
Source/WebCore/ChangeLog
Source/WebCore/bindings/js/JSClipboardCustom.cpp
Source/WebCore/bindings/v8/custom/V8ClipboardCustom.cpp
Source/WebCore/dom/Clipboard.h
Source/WebCore/dom/Clipboard.idl
Source/WebCore/platform/blackberry/ClipboardBlackBerry.cpp
Source/WebCore/platform/blackberry/ClipboardBlackBerry.h
Source/WebCore/platform/chromium/ClipboardChromium.cpp
Source/WebCore/platform/chromium/ClipboardChromium.h
Source/WebCore/platform/efl/ClipboardEfl.cpp
Source/WebCore/platform/efl/ClipboardEfl.h
Source/WebCore/platform/gtk/ClipboardGtk.cpp
Source/WebCore/platform/gtk/ClipboardGtk.h
Source/WebCore/platform/mac/ClipboardMac.h
Source/WebCore/platform/mac/ClipboardMac.mm
Source/WebCore/platform/qt/ClipboardQt.cpp
Source/WebCore/platform/qt/ClipboardQt.h
Source/WebCore/platform/win/ClipboardUtilitiesWin.cpp
Source/WebCore/platform/win/ClipboardUtilitiesWin.h
Source/WebCore/platform/win/ClipboardWin.cpp
Source/WebCore/platform/win/ClipboardWin.h
Source/WebCore/platform/win/DragDataWin.cpp
Source/WebCore/platform/wx/ClipboardWx.cpp
Source/WebCore/platform/wx/ClipboardWx.h

index 186573d..245a546 100644 (file)
@@ -1,3 +1,16 @@
+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.
 2012-02-28  Adam Klein  <adamk@chromium.org>
 
         Unreviewed gardening, mark another compositing test as flaky.
index 67454b2..d880172 100644 (file)
@@ -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.
 
 
 To test, drag Abe's image into this light blue div.
 
-PASS: ondragover saw a URL of 'undefined'
+PASS: ondragover saw a URL of ''
 
 
index 1b6c9d4..eb12e04 100644 (file)
@@ -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.
 
 
 To test, drag Abe's image into this light blue div.
 
-PASS: ondragover saw a URL of 'undefined'
+PASS: ondragover saw a URL of ''
 
 
index 7942866..639abf3 100644 (file)
@@ -17,8 +17,8 @@ window.onload = function () {
 
     dragTarget.ondragover = function() {
         var url = event.dataTransfer.getData('URL');
 
     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();
             : "FAIL: ondragover saw a URL of '" + url + "'";
         log(result);
         event.preventDefault();
index 69147ab..c764917 100644 (file)
@@ -1,3 +1,61 @@
+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
 2012-02-28  Kenichi Ishibashi  <bashi@chromium.org>
 
         [Chromium] Uninitialized value in LocaleToScriptCodeForFontSelection
index 3532c78..6c1217e 100644 (file)
@@ -66,22 +66,6 @@ JSValue JSClipboard::clearData(ExecState* exec)
     return throwError(exec, createSyntaxError(exec, "clearData: Invalid number of arguments"));
 }
 
     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();
 JSValue JSClipboard::setDragImage(ExecState* exec)
 {
     Clipboard* clipboard = impl();
index 51d6f2c..665270c 100644 (file)
@@ -62,22 +62,6 @@ v8::Handle<v8::Value> V8Clipboard::clearDataCallback(const v8::Arguments& args)
     return v8::Undefined();
 }
 
     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()");
 v8::Handle<v8::Value> V8Clipboard::setDragImageCallback(const v8::Arguments& args)
 {
     INC_STATS("DOM.Clipboard.setDragImage()");
index d33829a..f46502d 100644 (file)
@@ -63,7 +63,7 @@ namespace WebCore {
     
         virtual void clearData(const String& type) = 0;
         virtual void clearAllData() = 0;
     
         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
         virtual bool setData(const String& type, const String& data) = 0;
     
         // extensions beyond IE's API
index c1c5850..7de91ca 100644 (file)
@@ -36,8 +36,7 @@ module core {
 
         [Custom] void clearData(in [Optional] DOMString type)
             raises(DOMException);
 
         [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);
         boolean setData(in DOMString type, in DOMString data);
         [Custom] void setDragImage(in HTMLImageElement image, in long x, in long y)
             raises(DOMException);
index b224d5c..1423278 100644 (file)
@@ -56,9 +56,8 @@ void ClipboardBlackBerry::clearAllData()
     BlackBerry::Platform::Clipboard::clearClipboard();
 }
 
     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());
 }
 
     return String::fromUTF8(BlackBerry::Platform::Clipboard::readClipboardByType(type.utf8().data()).c_str());
 }
 
index 255d6aa..0113e01 100644 (file)
@@ -32,7 +32,7 @@ public:
 
     void clearData(const String& type);
     void clearAllData();
 
     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
     bool setData(const String& type, const String& data);
 
     // extensions beyond IE's API
index 1b1536e..18cdb9d 100644 (file)
@@ -263,16 +263,16 @@ void ClipboardChromium::clearAllData()
     m_dataObject->clearAll();
 }
 
     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();
 
     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)
 }
 
 bool ClipboardChromium::setData(const String& type, const String& data)
index ae9eb71..805975a 100644 (file)
@@ -58,7 +58,7 @@ namespace WebCore {
 
         virtual void clearData(const String& type);
         void clearAllData();
 
         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;
 
         bool setData(const String& type, const String& data);
         bool platformClipboardChanged() const;
 
index 6015272..63e5615 100644 (file)
@@ -65,10 +65,9 @@ void ClipboardEfl::clearAllData()
     notImplemented();
 }
 
     notImplemented();
 }
 
-String ClipboardEfl::getData(const String&, bool &success) const
+String ClipboardEfl::getData(const String&) const
 {
     notImplemented();
 {
     notImplemented();
-    success = false;
     return String();
 }
 
     return String();
 }
 
index 5645519..02bb528 100644 (file)
@@ -36,7 +36,7 @@ public:
 
     void clearData(const String&);
     void clearAllData();
 
     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;
     bool setData(const String&, const String&);
 
     PassRefPtr<DOMStringList> types() const;
index b202167..ac97622 100644 (file)
@@ -143,13 +143,8 @@ void ClipboardGtk::clearAllData()
         PasteboardHelper::defaultPasteboardHelper()->writeClipboardContents(m_clipboard);
 }
 
         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();
 
     if (policy() != ClipboardReadable || !m_dataObject)
         return String();
 
index b72e1c8..6ad14b7 100644 (file)
@@ -54,7 +54,7 @@ namespace WebCore {
 
         void clearData(const String&);
         void clearAllData();
 
         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;
         bool setData(const String&, const String&);
 
         virtual PassRefPtr<DOMStringList> types() const;
index 61a20bf..f0285ac 100644 (file)
@@ -49,7 +49,7 @@ public:
     
     void clearData(const String& type);
     void clearAllData();
     
     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();
     bool setData(const String& type, const String& data);
     
     virtual bool hasData();
index 88eefcb..0ccff00 100644 (file)
@@ -212,9 +212,8 @@ static Vector<String> absoluteURLsFromPasteboard(const String& pasteboardName, b
     return Vector<String>();
 }
 
     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();
 
     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)) {
     // 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;
     }
 
         return cocoaValue;
     }
 
index 3d8bab1..dff1bb7 100644 (file)
@@ -144,28 +144,21 @@ void ClipboardQt::clearAllData()
     m_writableData = 0;
 }
 
     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();
         return String();
-    }
 
 
-    if (isHtmlMimeType(type) && m_readableData->hasHtml()) {
-        success = true;
+    if (isHtmlMimeType(type) && m_readableData->hasHtml())
         return m_readableData->html();
         return m_readableData->html();
-    }
 
 
-    if (isTextMimeType(type) && m_readableData->hasText()) {
-        success = true;
+    if (isTextMimeType(type) && m_readableData->hasText())
         return m_readableData->text();
         return m_readableData->text();
-    }
 
     ASSERT(m_readableData);
     QByteArray rawData = m_readableData->data(type);
     QString data = QTextCodec::codecForName("UTF-16")->toUnicode(rawData);
 
     ASSERT(m_readableData);
     QByteArray rawData = m_readableData->data(type);
     QString data = QTextCodec::codecForName("UTF-16")->toUnicode(rawData);
-    success = !data.isEmpty();
     return data;
 }
 
     return data;
 }
 
index a840bec..e93f41f 100644 (file)
@@ -53,7 +53,7 @@ public:
 
     void clearData(const String& type);
     void clearAllData();
 
     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
     bool setData(const String& type, const String& data);
 
     // extensions beyond IE's API
index 827e358..d61c014 100644 (file)
@@ -208,7 +208,7 @@ HGLOBAL createGlobalData(const Vector<char>& vector)
     return globalData;
 }
 
     return globalData;
 }
 
-static String getFullCFHTML(IDataObject* data, bool& success)
+static String getFullCFHTML(IDataObject* data)
 {
     STGMEDIUM store;
     if (SUCCEEDED(data->GetData(htmlFormat(), &store))) {
 {
     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);
         String cfhtml(UTF8Encoding().decode(data, dataSize));
         GlobalUnlock(store.hGlobal);
         ReleaseStgMedium(&store);
-        success = true;
         return cfhtml;
     }
         return cfhtml;
     }
-    success = false;
     return String();
 }
 
     return String();
 }
 
@@ -447,27 +445,25 @@ void setFileContentData(IDataObject* dataObject, int size, void* dataBlob)
     dataObject->SetData(fileContentFormatZero(), &medium, TRUE);
 }
 
     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;
 {
     STGMEDIUM store;
     String url;
-    success = false;
     if (getWebLocData(dataObject, url, title))
     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);
         // 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);
     } 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) {
     }
 #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)));
             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);
             }
             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));
             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);
             }
             GlobalUnlock(store.hGlobal);
             ReleaseStgMedium(&store);
@@ -530,31 +520,27 @@ String getURL(const DragDataMap* data, DragData::FilenameConversionPolicy filena
     return url;
 }
 
     return url;
 }
 
-String getPlainText(IDataObject* dataObject, bool& success)
+String getPlainText(IDataObject* dataObject)
 {
     STGMEDIUM store;
     String text;
 {
     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);
     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);
     } 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.
     } 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;
 }
     }
     return text;
 }
@@ -570,17 +556,15 @@ String getPlainText(const DragDataMap* data)
     return getURL(data, DragData::DoNotConvertFilenames);
 }
 
     return getURL(data, DragData::DoNotConvertFilenames);
 }
 
-String getTextHTML(IDataObject* data, bool& success)
+String getTextHTML(IDataObject* data)
 {
     STGMEDIUM store;
     String html;
 {
     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);
     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;
 }
     }
     return html;
 }
@@ -592,10 +576,10 @@ String getTextHTML(const DragDataMap* data)
     return text;
 }
 
     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();
 }
         return extractMarkupFromCFHTML(cfhtml);
     return String();
 }
@@ -655,16 +639,15 @@ PassRefPtr<DocumentFragment> fragmentFromHTML(Document* doc, IDataObject* data)
     if (!doc || !data)
         return 0;
 
     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();
     }
 
         if (RefPtr<DocumentFragment> fragment = fragmentFromCFHTML(doc, cfhtml))
             return fragment.release();
     }
 
-    String html = getTextHTML(data, success);
+    String html = getTextHTML(data);
     String srcURL;
     String srcURL;
-    if (success)
+    if (!html.isEmpty())
         return createFragmentFromMarkup(doc, html, srcURL, FragmentScriptingNotAllowed);
 
     return 0;
         return createFragmentFromMarkup(doc, html, srcURL, FragmentScriptingNotAllowed);
 
     return 0;
index 7501d56..e8d4755 100644 (file)
@@ -67,13 +67,13 @@ PassRefPtr<DocumentFragment> fragmentFromHTML(Document*, IDataObject*);
 PassRefPtr<DocumentFragment> fragmentFromHTML(Document*, const DragDataMap*);
 PassRefPtr<DocumentFragment> fragmentFromCFHTML(Document*, const String& cfhtml);
 
 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 getURL(const DragDataMap*, DragData::FilenameConversionPolicy, String* title = 0);
-String getPlainText(IDataObject*, bool& success);
+String getPlainText(IDataObject*);
 String getPlainText(const DragDataMap*);
 String getPlainText(const DragDataMap*);
-String getTextHTML(IDataObject*, bool& success);
+String getTextHTML(IDataObject*);
 String getTextHTML(const DragDataMap*);
 String getTextHTML(const DragDataMap*);
-String getCFHTML(IDataObject*, bool& success);
+String getCFHTML(IDataObject*);
 String getCFHTML(const DragDataMap*);
 
 void getClipboardData(IDataObject*, FORMATETC* fetc, Vector<String>& dataStrings);
 String getCFHTML(const DragDataMap*);
 
 void getClipboardData(IDataObject*, FORMATETC* fetc, Vector<String>& dataStrings);
index 89cacb3..0801f29 100644 (file)
@@ -436,22 +436,21 @@ void ClipboardWin::clearAllData()
     m_dataObject = m_writableDataObject;
 }
 
     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)
     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)
     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) {
     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 data;
-        return m_dataObject ? getCFHTML(m_dataObject.get(), success) : getCFHTML(&m_dragDataMap);
+        return m_dataObject ? getCFHTML(m_dataObject.get()) : getCFHTML(&m_dragDataMap);
     }
     
     return "";
     }
     
     return "";
index 8c22c0a..59245c9 100644 (file)
@@ -60,7 +60,7 @@ public:
 
     void clearData(const String& type);
     void clearAllData();
 
     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
     bool setData(const String& type, const String& data);
 
     // extensions beyond IE's API
index 9ab62b9..46a9073 100644 (file)
@@ -101,8 +101,7 @@ void DragData::getDragFileContentData(int size, void* dataBlob)
 
 String DragData::asURL(Frame*, FilenameConversionPolicy filenamePolicy, String* title) const
 {
 
 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
 }
 
 bool DragData::containsFiles() const
@@ -155,8 +154,7 @@ bool DragData::containsPlainText() const
 
 String DragData::asPlainText(Frame*) 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
 }
 
 bool DragData::containsColor() const
index 161bce8..8bb9707 100644 (file)
@@ -58,7 +58,7 @@ void ClipboardWx::clearAllData()
     Pasteboard::generalPasteboard()->clear();
 }
 
     Pasteboard::generalPasteboard()->clear();
 }
 
-String ClipboardWx::getData(const String& type, bool& success) const 
+String ClipboardWx::getData(const String& type) const 
 {
     notImplemented();
     return ""; 
 {
     notImplemented();
     return ""; 
index f92726a..0ed7baf 100644 (file)
@@ -42,7 +42,7 @@ namespace WebCore {
 
         void clearData(const String& type);
         void clearAllData();
 
         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
         bool setData(const String& type, const String& data);
     
         // extensions beyond IE's API