[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

commit-queue at webkit.org commit-queue at webkit.org
Wed Dec 22 13:58:18 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 223f690d7f5b1ca0e3a7e603e53e6d2b4cf3c19c
Author: commit-queue at webkit.org <commit-queue at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Sep 30 18:20:45 2010 +0000

    2010-09-30  Daniel Cheng  <dcheng at chromium.org>
    
            Reviewed by Tony Chang.
    
            [chromium] Refactor ChromiumDataObject to use getters/setters.
            https://bugs.webkit.org/show_bug.cgi?id=46559
    
            This is an intermediate step to converting ChromiumDataObject to use
            callbacks to the browser to retrieve data.
    
            This is covered by existing tests.
    
            * editing/chromium/EditorChromium.cpp:
            (WebCore::Editor::newGeneralClipboard):
            * page/chromium/EventHandlerChromium.cpp:
            (WebCore::EventHandler::createDraggingClipboard):
            * platform/chromium/ChromiumDataObject.cpp:
            (WebCore::ChromiumDataObject::clearData):
            (WebCore::ChromiumDataObject::clearAll):
            (WebCore::ChromiumDataObject::clearAllExceptFiles):
            (WebCore::ChromiumDataObject::hasData):
            (WebCore::ChromiumDataObject::types):
            (WebCore::ChromiumDataObject::getData):
            (WebCore::ChromiumDataObject::setData):
            (WebCore::ChromiumDataObject::ChromiumDataObject):
            * platform/chromium/ChromiumDataObject.h:
            (WebCore::ChromiumDataObject::create):
            (WebCore::ChromiumDataObject::urlTitle):
            (WebCore::ChromiumDataObject::setUrlTitle):
            (WebCore::ChromiumDataObject::htmlBaseUrl):
            (WebCore::ChromiumDataObject::setHtmlBaseUrl):
            (WebCore::ChromiumDataObject::containsFilenames):
            (WebCore::ChromiumDataObject::filenames):
            (WebCore::ChromiumDataObject::setFilenames):
            (WebCore::ChromiumDataObject::fileExtension):
            (WebCore::ChromiumDataObject::setFileExtension):
            (WebCore::ChromiumDataObject::fileContentFilename):
            (WebCore::ChromiumDataObject::setFileContentFilename):
            (WebCore::ChromiumDataObject::fileContent):
            (WebCore::ChromiumDataObject::setFileContent):
            * platform/chromium/ClipboardChromium.cpp:
            (WebCore::normalizeType):
            (WebCore::ClipboardChromium::clearData):
            (WebCore::ClipboardChromium::clearAllData):
            (WebCore::ClipboardChromium::getData):
            (WebCore::ClipboardChromium::setData):
            (WebCore::ClipboardChromium::types):
            (WebCore::ClipboardChromium::files):
            (WebCore::writeImageToDataObject):
            (WebCore::ClipboardChromium::declareAndWriteDragImage):
            (WebCore::ClipboardChromium::writeURL):
            (WebCore::ClipboardChromium::writeRange):
            (WebCore::ClipboardChromium::writePlainText):
            * platform/chromium/ClipboardChromiumWin.cpp:
            (WebCore::ClipboardChromium::validateFileName):
            * platform/chromium/ClipboardMimeTypes.cpp:
            * platform/chromium/ClipboardMimeTypes.h:
            * platform/chromium/DragDataChromium.cpp:
            (WebCore::containsHTML):
            (WebCore::DragData::containsURL):
            (WebCore::DragData::asURL):
            (WebCore::DragData::containsFiles):
            (WebCore::DragData::asFilenames):
            (WebCore::DragData::containsPlainText):
            (WebCore::DragData::asPlainText):
            (WebCore::DragData::canSmartReplace):
            (WebCore::DragData::asFragment):
            * platform/chromium/ReadableDataObject.cpp:
            (WebCore::ReadableDataObject::getURL):
            (WebCore::ReadableDataObject::getHTML):
            * platform/chromium/WritableDataObject.cpp:
            (WebCore::WritableDataObject::clearData):
            (WebCore::WritableDataObject::setData):
            (WebCore::WritableDataObject::setURL):
            (WebCore::WritableDataObject::setHTML):
    2010-09-30  Daniel Cheng  <dcheng at chromium.org>
    
            Reviewed by Tony Chang.
    
            [chromium] Refactor ChromiumDataObject to use getters/setters.
            https://bugs.webkit.org/show_bug.cgi?id=46559
    
            This is an intermediate step to converting ChromiumDataObject to use
            callbacks to the browser to retrieve data.
    
            * public/WebDragData.h:
            * src/WebDragData.cpp:
            (WebKit::WebDragData::initialize):
            (WebKit::WebDragData::url):
            (WebKit::WebDragData::setURL):
            (WebKit::WebDragData::urlTitle):
            (WebKit::WebDragData::setURLTitle):
            (WebKit::WebDragData::downloadMetadata):
            (WebKit::WebDragData::setDownloadMetadata):
            (WebKit::WebDragData::fileExtension):
            (WebKit::WebDragData::setFileExtension):
            (WebKit::WebDragData::hasFileNames):
            (WebKit::WebDragData::fileNames):
            (WebKit::WebDragData::setFileNames):
            (WebKit::WebDragData::appendToFileNames):
            (WebKit::WebDragData::plainText):
            (WebKit::WebDragData::setPlainText):
            (WebKit::WebDragData::htmlText):
            (WebKit::WebDragData::setHTMLText):
            (WebKit::WebDragData::htmlBaseURL):
            (WebKit::WebDragData::setHTMLBaseURL):
            (WebKit::WebDragData::fileContentFileName):
            (WebKit::WebDragData::setFileContentFileName):
            (WebKit::WebDragData::fileContent):
            (WebKit::WebDragData::setFileContent):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@68807 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index dbce275..0f9d9cc 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,79 @@
+2010-09-30  Daniel Cheng  <dcheng at chromium.org>
+
+        Reviewed by Tony Chang.
+
+        [chromium] Refactor ChromiumDataObject to use getters/setters.
+        https://bugs.webkit.org/show_bug.cgi?id=46559
+
+        This is an intermediate step to converting ChromiumDataObject to use
+        callbacks to the browser to retrieve data.
+
+        This is covered by existing tests.
+
+        * editing/chromium/EditorChromium.cpp:
+        (WebCore::Editor::newGeneralClipboard):
+        * page/chromium/EventHandlerChromium.cpp:
+        (WebCore::EventHandler::createDraggingClipboard):
+        * platform/chromium/ChromiumDataObject.cpp:
+        (WebCore::ChromiumDataObject::clearData):
+        (WebCore::ChromiumDataObject::clearAll):
+        (WebCore::ChromiumDataObject::clearAllExceptFiles):
+        (WebCore::ChromiumDataObject::hasData):
+        (WebCore::ChromiumDataObject::types):
+        (WebCore::ChromiumDataObject::getData):
+        (WebCore::ChromiumDataObject::setData):
+        (WebCore::ChromiumDataObject::ChromiumDataObject):
+        * platform/chromium/ChromiumDataObject.h:
+        (WebCore::ChromiumDataObject::create):
+        (WebCore::ChromiumDataObject::urlTitle):
+        (WebCore::ChromiumDataObject::setUrlTitle):
+        (WebCore::ChromiumDataObject::htmlBaseUrl):
+        (WebCore::ChromiumDataObject::setHtmlBaseUrl):
+        (WebCore::ChromiumDataObject::containsFilenames):
+        (WebCore::ChromiumDataObject::filenames):
+        (WebCore::ChromiumDataObject::setFilenames):
+        (WebCore::ChromiumDataObject::fileExtension):
+        (WebCore::ChromiumDataObject::setFileExtension):
+        (WebCore::ChromiumDataObject::fileContentFilename):
+        (WebCore::ChromiumDataObject::setFileContentFilename):
+        (WebCore::ChromiumDataObject::fileContent):
+        (WebCore::ChromiumDataObject::setFileContent):
+        * platform/chromium/ClipboardChromium.cpp:
+        (WebCore::normalizeType):
+        (WebCore::ClipboardChromium::clearData):
+        (WebCore::ClipboardChromium::clearAllData):
+        (WebCore::ClipboardChromium::getData):
+        (WebCore::ClipboardChromium::setData):
+        (WebCore::ClipboardChromium::types):
+        (WebCore::ClipboardChromium::files):
+        (WebCore::writeImageToDataObject):
+        (WebCore::ClipboardChromium::declareAndWriteDragImage):
+        (WebCore::ClipboardChromium::writeURL):
+        (WebCore::ClipboardChromium::writeRange):
+        (WebCore::ClipboardChromium::writePlainText):
+        * platform/chromium/ClipboardChromiumWin.cpp:
+        (WebCore::ClipboardChromium::validateFileName):
+        * platform/chromium/ClipboardMimeTypes.cpp:
+        * platform/chromium/ClipboardMimeTypes.h:
+        * platform/chromium/DragDataChromium.cpp:
+        (WebCore::containsHTML):
+        (WebCore::DragData::containsURL):
+        (WebCore::DragData::asURL):
+        (WebCore::DragData::containsFiles):
+        (WebCore::DragData::asFilenames):
+        (WebCore::DragData::containsPlainText):
+        (WebCore::DragData::asPlainText):
+        (WebCore::DragData::canSmartReplace):
+        (WebCore::DragData::asFragment):
+        * platform/chromium/ReadableDataObject.cpp:
+        (WebCore::ReadableDataObject::getURL):
+        (WebCore::ReadableDataObject::getHTML):
+        * platform/chromium/WritableDataObject.cpp:
+        (WebCore::WritableDataObject::clearData):
+        (WebCore::WritableDataObject::setData):
+        (WebCore::WritableDataObject::setURL):
+        (WebCore::WritableDataObject::setHTML):
+
 2010-09-30  Chris Marrin  <cmarrin at apple.com>
 
         Reviewed by Simon Fraser.
diff --git a/WebCore/editing/chromium/EditorChromium.cpp b/WebCore/editing/chromium/EditorChromium.cpp
index c938a7e..2bfb5af 100644
--- a/WebCore/editing/chromium/EditorChromium.cpp
+++ b/WebCore/editing/chromium/EditorChromium.cpp
@@ -39,7 +39,7 @@ namespace WebCore {
 
 PassRefPtr<Clipboard> Editor::newGeneralClipboard(ClipboardAccessPolicy policy, Frame* frame)
 {
-    return ClipboardChromium::create(Clipboard::CopyAndPaste, ChromiumDataObject::create(), policy, frame);
+    return ClipboardChromium::create(Clipboard::CopyAndPaste, ChromiumDataObject::create(Clipboard::CopyAndPaste), policy, frame);
 }
 
 } // namespace WebCore
diff --git a/WebCore/page/chromium/EventHandlerChromium.cpp b/WebCore/page/chromium/EventHandlerChromium.cpp
index 6bf907e..9138b8d 100644
--- a/WebCore/page/chromium/EventHandlerChromium.cpp
+++ b/WebCore/page/chromium/EventHandlerChromium.cpp
@@ -128,7 +128,7 @@ bool EventHandler::eventActivatedView(const PlatformMouseEvent& event) const
 
 PassRefPtr<Clipboard> EventHandler::createDraggingClipboard() const
 {
-    RefPtr<ChromiumDataObject> dataObject = ChromiumDataObject::create();
+    RefPtr<ChromiumDataObject> dataObject = ChromiumDataObject::create(Clipboard::DragAndDrop);
     return ClipboardChromium::create(Clipboard::DragAndDrop, dataObject.get(), ClipboardWritable, m_frame);
 }
 
diff --git a/WebCore/platform/chromium/ChromiumDataObject.cpp b/WebCore/platform/chromium/ChromiumDataObject.cpp
index 8352669..c579cec 100644
--- a/WebCore/platform/chromium/ChromiumDataObject.cpp
+++ b/WebCore/platform/chromium/ChromiumDataObject.cpp
@@ -31,56 +31,235 @@
 #include "config.h"
 #include "ChromiumDataObject.h"
 
+#include "ChromiumBridge.h"
+#include "ClipboardMimeTypes.h"
+#include "Pasteboard.h"
+
 namespace WebCore {
 
-void ChromiumDataObject::clear()
+// Per RFC 2483, the line separator for "text/..." MIME types is CR-LF.
+static char const* const textMIMETypeLineSeparator = "\r\n";
+
+void ChromiumDataObject::clearData(const String& type)
+{
+    if (type == mimeTypeTextPlain) {
+        m_plainText = "";
+        return;
+    }
+
+    if (type == mimeTypeURL || type == mimeTypeTextURIList) {
+        m_uriList.clear();
+        m_url = KURL();
+        m_urlTitle = "";
+        return;
+    }
+
+    if (type == mimeTypeTextHTML) {
+        m_textHtml = "";
+        m_htmlBaseUrl = KURL();
+        return;
+    }
+
+    if (type == mimeTypeDownloadURL) {
+        m_downloadMetadata = "";
+        return;
+    }
+}
+
+void ChromiumDataObject::clearAll()
 {
     clearAllExceptFiles();
-    filenames.clear();
+    m_filenames.clear();
 }
 
 void ChromiumDataObject::clearAllExceptFiles()
 {
-    url = KURL();
-    urlTitle = "";
-    uriList.clear();
-    downloadMetadata = "";
-    fileExtension = "";
-    plainText = "";
-    textHtml = "";
-    htmlBaseUrl = KURL();
-    fileContentFilename = "";
-    if (fileContent)
-        fileContent->clear();
+    m_urlTitle = "";
+    m_url = KURL();
+    m_uriList.clear();
+    m_downloadMetadata = "";
+    m_fileExtension = "";
+    m_plainText = "";
+    m_textHtml = "";
+    m_htmlBaseUrl = KURL();
+    m_fileContentFilename = "";
+    if (m_fileContent)
+        m_fileContent->clear();
 }
 
 bool ChromiumDataObject::hasData() const
 {
-    return !url.isEmpty()
-        || !uriList.isEmpty()
-        || !downloadMetadata.isEmpty()
-        || !fileExtension.isEmpty()
-        || !filenames.isEmpty()
-        || !plainText.isEmpty()
-        || !textHtml.isEmpty()
-        || fileContent;
+    return !m_url.isEmpty()
+        || !m_uriList.isEmpty()
+        || !m_downloadMetadata.isEmpty()
+        || !m_fileExtension.isEmpty()
+        || !m_filenames.isEmpty()
+        || !m_plainText.isEmpty()
+        || !m_textHtml.isEmpty()
+        || m_fileContent;
+}
+
+HashSet<String> ChromiumDataObject::types() const
+{
+    // This is currently broken for pasteboard events, and always has been.
+    HashSet<String> results;
+
+    if (!m_plainText.isEmpty()) {
+        results.add(mimeTypeText);
+        results.add(mimeTypeTextPlain);
+    }
+
+    if (!m_url.isEmpty()) {
+        results.add(mimeTypeURL);
+        results.add(mimeTypeTextURIList);
+    }
+
+    if (!m_textHtml.isEmpty())
+        results.add(mimeTypeTextHTML);
+
+    if (!m_filenames.isEmpty())
+        results.add("Files");
+
+    return results;
+}
+
+String ChromiumDataObject::getData(const String& type, bool& success)
+{
+    if (type == mimeTypeTextPlain) {
+        if (m_clipboardType == Clipboard::CopyAndPaste) {
+            PasteboardPrivate::ClipboardBuffer buffer =
+                Pasteboard::generalPasteboard()->isSelectionMode() ?
+                PasteboardPrivate::SelectionBuffer :
+                PasteboardPrivate::StandardBuffer;
+            String text = ChromiumBridge::clipboardReadPlainText(buffer);
+            success = !text.isEmpty();
+            return text;
+        }
+        success = !m_plainText.isEmpty();
+        return m_plainText;
+    }
+
+    if (type == mimeTypeURL) {
+        ASSERT(m_url.isEmpty() == m_uriList.isEmpty());
+        success = !m_url.isEmpty();
+        return m_url.string();
+    }
+
+    if (type == mimeTypeTextURIList) {
+        ASSERT(m_url.isEmpty() == m_uriList.isEmpty());
+        if (m_uriList.isEmpty()) {
+            success = false;
+            return "";
+        }
+        String uriListString(m_uriList[0]);
+        for (size_t i = 1; i < m_uriList.size(); i++) {
+            uriListString.append(textMIMETypeLineSeparator);
+            uriListString.append(m_uriList[i]);
+        }
+        success = true;
+        return uriListString;
+    }
+
+    if (type == mimeTypeTextHTML) {
+        if (m_clipboardType == Clipboard::CopyAndPaste) {
+            PasteboardPrivate::ClipboardBuffer buffer =
+                Pasteboard::generalPasteboard()->isSelectionMode() ?
+                PasteboardPrivate::SelectionBuffer :
+                PasteboardPrivate::StandardBuffer;
+            String htmlText;
+            KURL sourceURL;
+            ChromiumBridge::clipboardReadHTML(buffer, &htmlText, &sourceURL);
+            success = !htmlText.isEmpty();
+            return htmlText;
+        }
+        success = !m_textHtml.isEmpty();
+        return m_textHtml;
+    }
+
+    if (type == mimeTypeDownloadURL) {
+        success = !m_downloadMetadata.isEmpty();
+        return m_downloadMetadata;
+    }
+
+    success = false;
+    return String();
+}
+
+bool ChromiumDataObject::setData(const String& type, const String& data)
+{
+    if (type == mimeTypeTextPlain) {
+        m_plainText = data;
+        return true;
+    }
+
+    if (type == mimeTypeURL || type == mimeTypeTextURIList) {
+        m_url = KURL();
+        // Line separator is \r\n per RFC 2483 - however, for compatibility reasons
+        // we also allow just \n here.
+        data.split('\n', m_uriList);
+        // Strip white space on all lines, including trailing \r from above split.
+        // If this leaves a line empty, remove it completely.
+        //
+        // Also, copy the first valid URL into the 'url' member as well.
+        // In case no entry is a valid URL (i.e., remarks only), then we leave 'url' empty.
+        // I.e., in that case subsequent calls to getData("URL") will get an empty string.
+        // This is in line with the HTML5 spec (see "The DragEvent and DataTransfer interfaces").
+        for (size_t i = 0; i < m_uriList.size(); /**/) {
+            String& line = m_uriList[i];
+            line = line.stripWhiteSpace();
+            if (line.isEmpty()) {
+                m_uriList.remove(i);
+                continue;
+            }
+            ++i;
+            // Only copy the first valid URL.
+            if (m_url.isValid())
+                continue;
+            if (line[0] == '#')
+                continue;
+            KURL url = KURL(ParsedURLString, line);
+            if (url.isValid())
+                m_url = url;
+        }
+        ASSERT(m_url.isEmpty() == m_uriList.isEmpty());
+        return true;
+    }
+
+    if (type == mimeTypeTextHTML) {
+        m_textHtml = data;
+        m_htmlBaseUrl = KURL();
+        return true;
+    }
+
+    if (type == mimeTypeDownloadURL) {
+        m_downloadMetadata = data;
+        return true;
+    }
+
+    return false;
+}
+
+ChromiumDataObject::ChromiumDataObject(Clipboard::ClipboardType clipboardType)
+    : m_clipboardType(clipboardType)
+{
 }
 
 ChromiumDataObject::ChromiumDataObject(const ChromiumDataObject& other)
     : RefCounted<ChromiumDataObject>()
-    , urlTitle(other.urlTitle)
-    , downloadMetadata(other.downloadMetadata)
-    , fileExtension(other.fileExtension)
-    , filenames(other.filenames)
-    , plainText(other.plainText)
-    , textHtml(other.textHtml)
-    , htmlBaseUrl(other.htmlBaseUrl)
-    , fileContentFilename(other.fileContentFilename)
-    , url(other.url)
-    , uriList(other.uriList)
+    , m_clipboardType(other.m_clipboardType)
+    , m_urlTitle(other.m_urlTitle)
+    , m_downloadMetadata(other.m_downloadMetadata)
+    , m_fileExtension(other.m_fileExtension)
+    , m_filenames(other.m_filenames)
+    , m_plainText(other.m_plainText)
+    , m_textHtml(other.m_textHtml)
+    , m_htmlBaseUrl(other.m_htmlBaseUrl)
+    , m_fileContentFilename(other.m_fileContentFilename)
+    , m_url(other.m_url)
+    , m_uriList(other.m_uriList)
 {
-    if (other.fileContent.get())
-        fileContent = other.fileContent->copy();
+    if (other.m_fileContent.get())
+        m_fileContent = other.m_fileContent->copy();
 }
 
 } // namespace WebCore
diff --git a/WebCore/platform/chromium/ChromiumDataObject.h b/WebCore/platform/chromium/ChromiumDataObject.h
index af0a3fa..1562422 100644
--- a/WebCore/platform/chromium/ChromiumDataObject.h
+++ b/WebCore/platform/chromium/ChromiumDataObject.h
@@ -31,11 +31,14 @@
 #ifndef ChromiumDataObject_h
 #define ChromiumDataObject_h
 
+#include "Clipboard.h"
 #include "KURL.h"
 #include "PlatformString.h"
 #include "SharedBuffer.h"
+#include <wtf/HashSet.h>
 #include <wtf/RefPtr.h>
 #include <wtf/Vector.h>
+#include <wtf/text/StringHash.h>
 
 namespace WebCore {
 
@@ -44,9 +47,9 @@ namespace WebCore {
     // of and is not specific to a platform.
     class ChromiumDataObject : public RefCounted<ChromiumDataObject> {
     public:
-        static PassRefPtr<ChromiumDataObject> create()
+        static PassRefPtr<ChromiumDataObject> create(Clipboard::ClipboardType clipboardType)
         {
-            return adoptRef(new ChromiumDataObject);
+            return adoptRef(new ChromiumDataObject(clipboardType));
         }
 
         PassRefPtr<ChromiumDataObject> copy() const
@@ -54,60 +57,61 @@ namespace WebCore {
             return adoptRef(new ChromiumDataObject(*this));
         }
 
-        void clear();
+        void clearData(const String& type);
+        void clearAll();
         void clearAllExceptFiles();
-        bool hasData() const;
-
-        void clearURL()
-        {
-            url = KURL();
-            uriList.clear();
-            urlTitle = "";
-        }
 
-        bool hasValidURL() const
-        {
-            return url.isValid();
-        }
-
-        KURL getURL() const
-        {
-            return url;
-        }
+        bool hasData() const;
 
-        void setURL(const KURL& newURL)
-        {
-            url = newURL;
-            uriList.clear();
-            if (newURL.isEmpty())
-                return;
-            uriList.append(newURL.string());
-        }
+        HashSet<String> types() const;
+        String getData(const String& type, bool& success);
+        bool setData(const String& type, const String& data);
+
+        // Special handlers for URL/HTML metadata.
+        String urlTitle() const { return m_urlTitle; }
+        void setUrlTitle(const String& urlTitle) { m_urlTitle = urlTitle; }
+        KURL htmlBaseUrl() const { return m_htmlBaseUrl; }
+        void setHtmlBaseUrl(const KURL& url) { m_htmlBaseUrl = url; }
+
+        // Used to handle files being dragged in.
+        bool containsFilenames() const { return !m_filenames.isEmpty(); }
+        Vector<String> filenames() const { return m_filenames; }
+        void setFilenames(const Vector<String>& filenames) { m_filenames = filenames; }
+
+        // Used to handle files (images) being dragged out.
+        String fileExtension() const { return m_fileExtension; }
+        void setFileExtension(const String& fileExtension) { m_fileExtension = fileExtension; }
+        String fileContentFilename() const { return m_fileContentFilename; }
+        void setFileContentFilename(const String& fileContentFilename) { m_fileContentFilename = fileContentFilename; }
+        PassRefPtr<SharedBuffer> fileContent() const { return m_fileContent; }
+        void setFileContent(PassRefPtr<SharedBuffer> fileContent) { m_fileContent = fileContent; }
 
-        String urlTitle;
+    private:
+        ChromiumDataObject(Clipboard::ClipboardType);
+        ChromiumDataObject(const ChromiumDataObject&);
 
-        String downloadMetadata;
+        Clipboard::ClipboardType m_clipboardType;
 
-        String fileExtension;
-        Vector<String> filenames;
+        String m_urlTitle;
 
-        String plainText;
+        String m_downloadMetadata;
 
-        String textHtml;
-        KURL htmlBaseUrl;
+        String m_fileExtension;
+        Vector<String> m_filenames;
 
-        String fileContentFilename;
-        RefPtr<SharedBuffer> fileContent;
+        String m_plainText;
 
-    private:
-        // URL and uri-list are linked, so they should not be accessed individually.
-        KURL url;
-        Vector<String> uriList;
+        String m_textHtml;
+        KURL m_htmlBaseUrl;
 
-        ChromiumDataObject() {}
-        ChromiumDataObject(const ChromiumDataObject&);
+        String m_fileContentFilename;
+        RefPtr<SharedBuffer> m_fileContent;
 
-        friend class ClipboardChromium;
+        // These two are linked. Setting m_url will set m_uriList to the same
+        // string value; setting m_uriList will cause its contents to be parsed
+        // according to RFC 2483 and the first URL found will be set in m_url.
+        KURL m_url;
+        Vector<String> m_uriList;
     };
 
 } // namespace WebCore
diff --git a/WebCore/platform/chromium/ClipboardChromium.cpp b/WebCore/platform/chromium/ClipboardChromium.cpp
index c2ec80c..6645a8f 100644
--- a/WebCore/platform/chromium/ClipboardChromium.cpp
+++ b/WebCore/platform/chromium/ClipboardChromium.cpp
@@ -28,8 +28,8 @@
 #include "ClipboardChromium.h"
 
 #include "CachedImage.h"
-#include "ChromiumBridge.h"
 #include "ChromiumDataObject.h"
+#include "ClipboardMimeTypes.h"
 #include "ClipboardUtilitiesChromium.h"
 #include "Document.h"
 #include "DragData.h"
@@ -40,7 +40,6 @@
 #include "Image.h"
 #include "MIMETypeRegistry.h"
 #include "NamedNodeMap.h"
-#include "Pasteboard.h"
 #include "PlatformString.h"
 #include "Range.h"
 #include "RenderImage.h"
@@ -55,40 +54,12 @@ using namespace HTMLNames;
 // We provide the IE clipboard types (URL and Text), and the clipboard types specified in the WHATWG Web Applications 1.0 draft
 // see http://www.whatwg.org/specs/web-apps/current-work/ Section 6.3.5.3
 
-enum ClipboardDataType {
-    ClipboardDataTypeNone,
-
-    ClipboardDataTypeURL,
-    ClipboardDataTypeURIList,
-    ClipboardDataTypeDownloadURL,
-    ClipboardDataTypePlainText,
-    ClipboardDataTypeHTML,
-
-    ClipboardDataTypeOther,
-};
-
-// Per RFC 2483, the line separator for "text/..." MIME types is CR-LF.
-static char const* const textMIMETypeLineSeparator = "\r\n";
-
-static ClipboardDataType clipboardTypeFromMIMEType(const String& type)
+static String normalizeType(const String& type)
 {
     String cleanType = type.stripWhiteSpace().lower();
-    if (cleanType.isEmpty())
-        return ClipboardDataTypeNone;
-
-    // Includes two special cases for IE compatibility.
-    if (cleanType == "text" || cleanType == "text/plain" || cleanType.startsWith("text/plain;"))
-        return ClipboardDataTypePlainText;
-    if (cleanType == "url")
-        return ClipboardDataTypeURL;
-    if (cleanType == "text/uri-list")
-        return ClipboardDataTypeURIList;
-    if (cleanType == "downloadurl")
-        return ClipboardDataTypeDownloadURL;
-    if (cleanType == "text/html")
-        return ClipboardDataTypeHTML;
-
-    return ClipboardDataTypeOther;
+    if (cleanType == mimeTypeText || cleanType.startsWith(mimeTypeTextPlainEtc))
+        return mimeTypeTextPlain;
+    return cleanType;
 }
 
 PassRefPtr<Clipboard> Clipboard::create(ClipboardAccessPolicy policy, DragData* dragData, Frame* frame)
@@ -117,36 +88,7 @@ void ClipboardChromium::clearData(const String& type)
     if (policy() != ClipboardWritable || !m_dataObject)
         return;
 
-    ClipboardDataType dataType = clipboardTypeFromMIMEType(type);
-    switch (dataType) {
-    case ClipboardDataTypeNone:
-        // If called with no arguments, everything except the file list must be cleared.
-        // (See HTML5 spec, "The DragEvent and DataTransfer interfaces")
-        m_dataObject->clearAllExceptFiles();
-        return;
-
-    case ClipboardDataTypeURL:
-    case ClipboardDataTypeURIList:
-        m_dataObject->clearURL();
-        return;
-
-    case ClipboardDataTypeDownloadURL:
-        m_dataObject->downloadMetadata = "";
-        return;
-        
-    case ClipboardDataTypePlainText:
-        m_dataObject->plainText = "";
-        return;
-
-    case ClipboardDataTypeHTML:
-        m_dataObject->textHtml = "";
-        m_dataObject->htmlBaseUrl = KURL();
-        return;
-
-    case ClipboardDataTypeOther:
-        // Not yet implemented, see https://bugs.webkit.org/show_bug.cgi?id=34410
-        return;
-    }
+    m_dataObject->clearData(normalizeType(type));
 
     ASSERT_NOT_REACHED();
 }
@@ -156,7 +98,7 @@ void ClipboardChromium::clearAllData()
     if (policy() != ClipboardWritable)
         return;
 
-    m_dataObject->clear();
+    m_dataObject->clearAll();
 }
 
 String ClipboardChromium::getData(const String& type, bool& success) const
@@ -165,80 +107,7 @@ String ClipboardChromium::getData(const String& type, bool& success) const
     if (policy() != ClipboardReadable || !m_dataObject)
         return String();
 
-    ClipboardDataType dataType = clipboardTypeFromMIMEType(type);
-    switch (dataType) {
-    case ClipboardDataTypeNone:
-        return String();
-
-    // Hack for URLs. file URLs are used internally for drop's default action, but we don't want
-    // to expose them to the page, so we filter them out here.
-    case ClipboardDataTypeURIList:
-        {
-            String text;
-            for (size_t i = 0; i < m_dataObject->uriList.size(); ++i) {
-                const String& uri = m_dataObject->uriList[i];
-                if (protocolIs(uri, "file"))
-                    continue;
-                ASSERT(!uri.isEmpty());
-                if (!text.isEmpty())
-                    text.append(textMIMETypeLineSeparator);
-                // URIs have already been canonicalized, so copy everything verbatim.
-                text.append(uri);
-            }
-            success = !text.isEmpty();
-            return text;
-        }
-
-    case ClipboardDataTypeURL:
-        // In case of a previous setData('text/uri-list'), setData() has already
-        // prepared the 'url' member, so we can just retrieve it here.
-        if (!m_dataObject->url.isEmpty() && !m_dataObject->url.isLocalFile()) {
-            success = true;
-            return m_dataObject->url.string();
-        }
-        return String();
-
-    case ClipboardDataTypeDownloadURL:
-        success = !m_dataObject->downloadMetadata.isEmpty();
-        return m_dataObject->downloadMetadata;
-    
-    case ClipboardDataTypePlainText:
-        if (isForCopyAndPaste()) {
-            PasteboardPrivate::ClipboardBuffer buffer = 
-                Pasteboard::generalPasteboard()->isSelectionMode() ?
-                PasteboardPrivate::SelectionBuffer : 
-                PasteboardPrivate::StandardBuffer;
-            String text = ChromiumBridge::clipboardReadPlainText(buffer);
-            success = !text.isEmpty();
-            return text;
-        }
-        // Otherwise return whatever is stored in plainText.
-        success = !m_dataObject->plainText.isEmpty();
-        return m_dataObject->plainText;
-
-    case ClipboardDataTypeHTML:
-        if (isForCopyAndPaste()) {
-            PasteboardPrivate::ClipboardBuffer buffer = 
-                Pasteboard::generalPasteboard()->isSelectionMode() ?
-                PasteboardPrivate::SelectionBuffer : 
-                PasteboardPrivate::StandardBuffer;
-            String htmlText;
-            KURL sourceURL;
-            ChromiumBridge::clipboardReadHTML(buffer, &htmlText, &sourceURL);
-            success = !htmlText.isEmpty();
-            return htmlText;
-        }
-        // Otherwise return whatever is stored in textHtml.
-        success = !m_dataObject->textHtml.isEmpty();
-        return m_dataObject->textHtml;
-
-    case ClipboardDataTypeOther:
-        // not yet implemented, see https://bugs.webkit.org/show_bug.cgi?id=34410
-        return String();
-    }
-
-    ASSERT_NOT_REACHED();
-    return String();
+    return m_dataObject->getData(normalizeType(type), success);
 }
 
 bool ClipboardChromium::setData(const String& type, const String& data)
@@ -246,69 +115,7 @@ bool ClipboardChromium::setData(const String& type, const String& data)
     if (policy() != ClipboardWritable)
         return false;
 
-    ClipboardDataType dataType = clipboardTypeFromMIMEType(type);
-    switch (dataType) {
-    case ClipboardDataTypeNone:
-        return false;
-
-    case ClipboardDataTypeURL:
-        // For setData(), "URL" must be treated as "text/uri-list".
-        // (See HTML5 spec, "The DragEvent and DataTransfer interfaces")
-    case ClipboardDataTypeURIList:
-        m_dataObject->url = KURL();
-        // Line separator is \r\n per RFC 2483 - however, for compatibility reasons
-        // we also allow just \n here. 
-        data.split('\n', m_dataObject->uriList);
-        // Strip white space on all lines, including trailing \r from above split.
-        // If this leaves a line empty, remove it completely.
-        //
-        // Also, copy the first valid URL into the 'url' member as well.
-        // In case no entry is a valid URL (i.e., remarks only), then we leave 'url' empty.
-        // I.e., in that case subsequent calls to getData("URL") will get an empty string.
-        // This is in line with the HTML5 spec (see "The DragEvent and DataTransfer interfaces").
-        for (size_t i = 0; i < m_dataObject->uriList.size(); /**/) {
-            String& line = m_dataObject->uriList[i];
-            line = line.stripWhiteSpace();
-            if (line.isEmpty()) {
-                m_dataObject->uriList.remove(i);
-                continue;
-            }
-            ++i;
-            // Only copy the first valid URL.
-            if (m_dataObject->url.isValid())
-                continue;
-            // Skip remarks.
-            if (line[0] == '#')
-                continue;
-            KURL url = KURL(ParsedURLString, line);
-            if (url.isValid())
-                m_dataObject->url = url;
-        }
-        if (m_dataObject->uriList.isEmpty()) {
-            ASSERT(m_dataObject->url.isEmpty());
-            return data.isEmpty();
-        }
-        return true;
-
-    case ClipboardDataTypeDownloadURL:
-        m_dataObject->downloadMetadata = data;
-        return true;
-
-    case ClipboardDataTypePlainText:
-        m_dataObject->plainText = data;
-        return true;
-
-    case ClipboardDataTypeHTML:
-        m_dataObject->textHtml = data;
-        return true;
-
-    case ClipboardDataTypeOther:
-        // Not yet implemented, see https://bugs.webkit.org/show_bug.cgi?id=34410
-        return false;
-    }
-    
-    ASSERT_NOT_REACHED();
-    return false;
+    return m_dataObject->setData(normalizeType(type), data);
 }
 
 // extensions beyond IE's API
@@ -321,33 +128,7 @@ HashSet<String> ClipboardChromium::types() const
     if (!m_dataObject)
         return results;
 
-    if (!m_dataObject->filenames.isEmpty())
-        results.add("Files");
-
-    // Hack for URLs. file URLs are used internally for drop's default action, but we don't want
-    // to expose them to the page, so we filter them out here.
-    if (m_dataObject->url.isValid() && !m_dataObject->url.isLocalFile()) {
-        ASSERT(!m_dataObject->uriList.isEmpty());
-        results.add("URL");
-    }
-
-    if (!m_dataObject->uriList.isEmpty()) {
-        // Verify that the URI list contains at least one non-file URL.
-        for (Vector<String>::const_iterator it = m_dataObject->uriList.begin();
-             it != m_dataObject->uriList.end(); ++it) {
-            if (!protocolIs(*it, "file")) {
-                // Note that even if the URI list is not empty, it may not actually
-                // contain a valid URL, so we can't return "URL" here.
-                results.add("text/uri-list");
-                break;
-            }
-        }
-    }
-
-    if (!m_dataObject->plainText.isEmpty()) {
-        results.add("Text");
-        results.add("text/plain");
-    }
+    results = m_dataObject->types();
 
     return results;
 }
@@ -357,12 +138,13 @@ PassRefPtr<FileList> ClipboardChromium::files() const
     if (policy() != ClipboardReadable)
         return FileList::create();
 
-    if (!m_dataObject || m_dataObject->filenames.isEmpty())
+    if (!m_dataObject)
         return FileList::create();
 
+    const Vector<String>& filenames = m_dataObject->filenames();
     RefPtr<FileList> fileList = FileList::create();
-    for (size_t i = 0; i < m_dataObject->filenames.size(); ++i)
-        fileList->append(File::create(m_dataObject->filenames.at(i)));
+    for (size_t i = 0; i < filenames.size(); ++i)
+        fileList->append(File::create(filenames.at(i)));
 
     return fileList.release();
 }
@@ -461,7 +243,7 @@ static void writeImageToDataObject(ChromiumDataObject* dataObject, Element* elem
     if (!imageBuffer || !imageBuffer->size())
         return;
 
-    dataObject->fileContent = imageBuffer;
+    dataObject->setFileContent(imageBuffer);
 
     // Determine the filename for the file contents of the image.  We try to
     // use the alt tag if one exists, otherwise we fall back on the suggested
@@ -469,13 +251,13 @@ static void writeImageToDataObject(ChromiumDataObject* dataObject, Element* elem
     // in the URL.
     String extension = MIMETypeRegistry::getPreferredExtensionForMIMEType(
         cachedImage->response().mimeType());
-    dataObject->fileExtension = extension.isEmpty() ? "" : "." + extension;
+    dataObject->setFileExtension(extension.isEmpty() ? "" : "." + extension);
     String title = element->getAttribute(altAttr);
     if (title.isEmpty())
         title = cachedImage->response().suggestedFilename();
 
     title = ClipboardChromium::validateFileName(title, dataObject);
-    dataObject->fileContentFilename = title + dataObject->fileExtension;
+    dataObject->setFileContentFilename(title + dataObject->fileExtension());
 }
 
 void ClipboardChromium::declareAndWriteDragImage(Element* element, const KURL& url, const String& title, Frame* frame)
@@ -483,8 +265,8 @@ void ClipboardChromium::declareAndWriteDragImage(Element* element, const KURL& u
     if (!m_dataObject)
         return;
 
-    m_dataObject->url = url;
-    m_dataObject->urlTitle = title;
+    m_dataObject->setData(mimeTypeURL, url);
+    m_dataObject->setUrlTitle(title);
 
     // Write the bytes in the image to the file format.
     writeImageToDataObject(m_dataObject.get(), element, url);
@@ -498,7 +280,7 @@ void ClipboardChromium::declareAndWriteDragImage(Element* element, const KURL& u
         return;
 
     // Put img tag on the clipboard referencing the image
-    m_dataObject->textHtml = imageToMarkup(fullURL, element);
+    m_dataObject->setData(mimeTypeTextHTML, imageToMarkup(fullURL, element));
 }
 
 void ClipboardChromium::writeURL(const KURL& url, const String& title, Frame*)
@@ -506,17 +288,15 @@ void ClipboardChromium::writeURL(const KURL& url, const String& title, Frame*)
     if (!m_dataObject)
         return;
     ASSERT(!url.isEmpty());
-    m_dataObject->url = url;
-    m_dataObject->urlTitle = title;
-    m_dataObject->uriList.clear();
-    m_dataObject->uriList.append(url);
+    m_dataObject->setData(mimeTypeURL, url);
+    m_dataObject->setUrlTitle(title);
 
     // The URL can also be used as plain text.
-    m_dataObject->plainText = url.string();
+    m_dataObject->setData(mimeTypeTextPlain, url.string());
 
     // The URL can also be used as an HTML fragment.
-    m_dataObject->textHtml = urlToMarkup(url, title);
-    m_dataObject->htmlBaseUrl = url;
+    m_dataObject->setData(mimeTypeTextHTML, urlToMarkup(url, title));
+    m_dataObject->setHtmlBaseUrl(url);
 }
 
 void ClipboardChromium::writeRange(Range* selectedRange, Frame* frame)
@@ -525,15 +305,15 @@ void ClipboardChromium::writeRange(Range* selectedRange, Frame* frame)
     if (!m_dataObject)
          return;
 
-    m_dataObject->textHtml = createMarkup(selectedRange, 0, AnnotateForInterchange, false, AbsoluteURLs);
-    m_dataObject->htmlBaseUrl = frame->document()->url();
+    m_dataObject->setData(mimeTypeTextHTML, createMarkup(selectedRange, 0, AnnotateForInterchange, false, AbsoluteURLs));
+    m_dataObject->setHtmlBaseUrl(frame->document()->url());
 
     String str = frame->editor()->selectedText();
 #if OS(WINDOWS)
     replaceNewlinesWithWindowsStyleNewlines(str);
 #endif
     replaceNBSPWithSpace(str);
-    m_dataObject->plainText = str;
+    m_dataObject->setData(mimeTypeTextPlain, str);
 }
 
 void ClipboardChromium::writePlainText(const String& text)
@@ -546,7 +326,7 @@ void ClipboardChromium::writePlainText(const String& text)
     replaceNewlinesWithWindowsStyleNewlines(str);
 #endif
     replaceNBSPWithSpace(str);
-    m_dataObject->plainText = str;
+    m_dataObject->setData(mimeTypeTextPlain, str);
 }
 
 bool ClipboardChromium::hasData()
diff --git a/WebCore/platform/chromium/ClipboardChromiumWin.cpp b/WebCore/platform/chromium/ClipboardChromiumWin.cpp
index b4a2c21..d9bbeb5 100644
--- a/WebCore/platform/chromium/ClipboardChromiumWin.cpp
+++ b/WebCore/platform/chromium/ClipboardChromiumWin.cpp
@@ -44,11 +44,11 @@ String ClipboardChromium::validateFileName(const String& title, ChromiumDataObje
 {
     // Remove any invalid file system characters.
     String result = title.removeCharacters(&isInvalidFileCharacter);
-    if (result.length() + dataObject->fileExtension.length() + 1 >= MAX_PATH) {
-        if (dataObject->fileExtension.length() + 1 >= MAX_PATH)
-            dataObject->fileExtension = "";
-        if (result.length() + dataObject->fileExtension.length() + 1 >= MAX_PATH)
-            result = result.substring(0, MAX_PATH - dataObject->fileExtension.length() - 1);
+    if (result.length() + dataObject->fileExtension().length() + 1 >= MAX_PATH) {
+        if (dataObject->fileExtension().length() + 1 >= MAX_PATH)
+            dataObject->setFileExtension("");
+        if (result.length() + dataObject->fileExtension().length() + 1 >= MAX_PATH)
+            result = result.substring(0, MAX_PATH - dataObject->fileExtension().length() - 1);
     }
     return result;
 }
diff --git a/WebCore/platform/chromium/ClipboardMimeTypes.cpp b/WebCore/platform/chromium/ClipboardMimeTypes.cpp
index b95744f..a213da0 100644
--- a/WebCore/platform/chromium/ClipboardMimeTypes.cpp
+++ b/WebCore/platform/chromium/ClipboardMimeTypes.cpp
@@ -33,8 +33,12 @@
 
 namespace WebCore {
 
-const char textPlainType[] = "text/plain";
-const char textHtmlType[] = "text/html";
-const char textUriListType[] = "text/uri-list";
+const char mimeTypeText[] = "text/plain";
+const char mimeTypeTextPlain[] = "text/plain";
+const char mimeTypeTextPlainEtc[] = "text/plain;";
+const char mimeTypeTextHTML[] = "text/html";
+const char mimeTypeURL[] = "url";
+const char mimeTypeTextURIList[] = "text/uri-list";
+const char mimeTypeDownloadURL[] = "downloadurl";
 
 } // namespace WebCore
diff --git a/WebCore/platform/chromium/ClipboardMimeTypes.h b/WebCore/platform/chromium/ClipboardMimeTypes.h
index d7468f2..9bdccfe 100644
--- a/WebCore/platform/chromium/ClipboardMimeTypes.h
+++ b/WebCore/platform/chromium/ClipboardMimeTypes.h
@@ -33,9 +33,13 @@
 
 namespace WebCore {
 
-extern const char textPlainType[];
-extern const char textHtmlType[];
-extern const char textUriListType[];
+extern const char mimeTypeText[];
+extern const char mimeTypeTextPlain[];
+extern const char mimeTypeTextPlainEtc[];
+extern const char mimeTypeTextHTML[];
+extern const char mimeTypeURL[];
+extern const char mimeTypeTextURIList[];
+extern const char mimeTypeDownloadURL[];
 
 } // namespace WebCore
 
diff --git a/WebCore/platform/chromium/DragDataChromium.cpp b/WebCore/platform/chromium/DragDataChromium.cpp
index 674d34d..2b04523 100644
--- a/WebCore/platform/chromium/DragDataChromium.cpp
+++ b/WebCore/platform/chromium/DragDataChromium.cpp
@@ -32,6 +32,7 @@
 
 #include "ChromiumBridge.h"
 #include "ChromiumDataObject.h"
+#include "ClipboardMimeTypes.h"
 #include "DocumentFragment.h"
 #include "FileSystem.h"
 #include "KURL.h"
@@ -43,50 +44,50 @@ namespace WebCore {
 
 static bool containsHTML(const ChromiumDataObject* dropData)
 {
-    return dropData->textHtml.length() > 0;
+    return dropData->types().contains(mimeTypeTextHTML);
 }
 
 bool DragData::containsURL(FilenameConversionPolicy filenamePolicy) const
 {
-    return !asURL(filenamePolicy).isEmpty();
+    return m_platformDragData->types().contains(mimeTypeURL)
+        || (filenamePolicy == ConvertFilenames && m_platformDragData->containsFilenames());
 }
 
 String DragData::asURL(FilenameConversionPolicy filenamePolicy, String* title) const
 {
     String url;
-    if (m_platformDragData->hasValidURL())
-        url = m_platformDragData->getURL().string();
-    else if (filenamePolicy == ConvertFilenames && !m_platformDragData->filenames.isEmpty()) {
-        String fileName = m_platformDragData->filenames[0];
-        fileName = ChromiumBridge::getAbsolutePath(fileName);
-        url = ChromiumBridge::filePathToURL(fileName).string();
+    if (m_platformDragData->types().contains(mimeTypeURL)) {
+        bool ignoredSuccess;
+        url = m_platformDragData->getData(mimeTypeURL, ignoredSuccess);
+        if (title)
+            *title = m_platformDragData->urlTitle();
+    } else if (filenamePolicy == ConvertFilenames && containsFiles()) {
+        url = ChromiumBridge::filePathToURL(ChromiumBridge::getAbsolutePath(m_platformDragData->filenames()[0]));
     }
- 
-    // |title| can be NULL
-    if (title)
-        *title = m_platformDragData->urlTitle;
     return url;
 }
 
 bool DragData::containsFiles() const
 {
-    return !m_platformDragData->filenames.isEmpty();
+    return m_platformDragData->containsFilenames();
 }
 
 void DragData::asFilenames(Vector<String>& result) const
 {
-    for (size_t i = 0; i < m_platformDragData->filenames.size(); ++i)
-        result.append(m_platformDragData->filenames[i]);
+    const Vector<String>& filenames = m_platformDragData->filenames();
+    for (size_t i = 0; i < filenames.size(); ++i)
+        result.append(filenames[i]);
 }
 
 bool DragData::containsPlainText() const
 {
-    return !m_platformDragData->plainText.isEmpty();
+    return m_platformDragData->types().contains(mimeTypeTextPlain);
 }
 
 String DragData::asPlainText() const
 {
-    return m_platformDragData->plainText;
+    bool ignoredSuccess;
+    return m_platformDragData->getData(mimeTypeTextPlain, ignoredSuccess);
 }
 
 bool DragData::containsColor() const
@@ -101,8 +102,8 @@ bool DragData::canSmartReplace() const
     // This is allowed whenever the drag data contains a 'range' (ie.,
     // ClipboardWin::writeRange is called).  For example, dragging a link
     // should not result in a space being added.
-    return !m_platformDragData->plainText.isEmpty()
-        && !m_platformDragData->hasValidURL();
+    return m_platformDragData->types().contains(mimeTypeTextPlain)
+        && !m_platformDragData->types().contains(mimeTypeURL);
 }
 
 bool DragData::containsCompatibleContent() const
@@ -134,9 +135,10 @@ PassRefPtr<DocumentFragment> DragData::asFragment(Document* doc) const
         //    return fragment;
     }
 
-    if (!m_platformDragData->textHtml.isEmpty()) {
+    if (m_platformDragData->types().contains(mimeTypeTextHTML)) {
+        bool ignoredSuccess;
         RefPtr<DocumentFragment> fragment = createFragmentFromMarkup(doc,
-            m_platformDragData->textHtml, m_platformDragData->htmlBaseUrl, FragmentScriptingNotAllowed);
+            m_platformDragData->getData(mimeTypeTextHTML, ignoredSuccess), m_platformDragData->htmlBaseUrl(), FragmentScriptingNotAllowed);
         return fragment.release();
     }
 
diff --git a/WebCore/platform/chromium/ReadableDataObject.cpp b/WebCore/platform/chromium/ReadableDataObject.cpp
index 1a333bb..088673f 100644
--- a/WebCore/platform/chromium/ReadableDataObject.cpp
+++ b/WebCore/platform/chromium/ReadableDataObject.cpp
@@ -81,7 +81,7 @@ String ReadableDataObject::getURL(String* title) const
     if (!title)
         title = &ignoredTitle;
     ChromiumBridge::clipboardReadData(
-        clipboardBuffer(m_isForDragging), textUriListType, url, *title);
+        clipboardBuffer(m_isForDragging), mimeTypeTextURIList, url, *title);
     return url;
 }
 
@@ -92,7 +92,7 @@ String ReadableDataObject::getHTML(String* baseURL) const
     if (!baseURL)
         baseURL = &ignoredBaseURL;
     ChromiumBridge::clipboardReadData(
-        clipboardBuffer(m_isForDragging), textHtmlType, html, *baseURL);
+        clipboardBuffer(m_isForDragging), mimeTypeTextHTML, html, *baseURL);
     return html;
 }
 
diff --git a/WebCore/platform/chromium/WritableDataObject.cpp b/WebCore/platform/chromium/WritableDataObject.cpp
index 6e7c283..aee7bfc 100644
--- a/WebCore/platform/chromium/WritableDataObject.cpp
+++ b/WebCore/platform/chromium/WritableDataObject.cpp
@@ -49,9 +49,9 @@ WritableDataObject::WritableDataObject(bool isForDragging)
 void WritableDataObject::clearData(const String& type)
 {
     m_dataMap.remove(type);
-    if (type == textUriListType)
+    if (type == mimeTypeTextURIList)
         m_urlTitle = "";
-    else if (type == textHtmlType)
+    else if (type == mimeTypeTextHTML)
         m_htmlBaseURL = KURL();
 }
 
@@ -81,22 +81,22 @@ bool WritableDataObject::setData(const String& type, const String& data)
         return true;
     }
     m_dataMap.set(type, data);
-    if (type == textUriListType)
+    if (type == mimeTypeTextURIList)
         m_urlTitle = "";
-    else if (type == textHtmlType)
+    else if (type == mimeTypeTextHTML)
         m_htmlBaseURL = KURL();
     return true;
 }
 
 void WritableDataObject::setURL(const String& url, const String& title)
 {
-    setData(textUriListType, url);
+    setData(mimeTypeTextURIList, url);
     m_urlTitle = title;
 }
 
 void WritableDataObject::setHTML(const String& html, const KURL& baseURL)
 {
-    setData(textHtmlType, html);
+    setData(mimeTypeTextHTML, html);
     m_htmlBaseURL = baseURL;
 }
 
diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
index 9ca90c9..fdb8b38 100644
--- a/WebKit/chromium/ChangeLog
+++ b/WebKit/chromium/ChangeLog
@@ -1,3 +1,39 @@
+2010-09-30  Daniel Cheng  <dcheng at chromium.org>
+
+        Reviewed by Tony Chang.
+
+        [chromium] Refactor ChromiumDataObject to use getters/setters.
+        https://bugs.webkit.org/show_bug.cgi?id=46559
+
+        This is an intermediate step to converting ChromiumDataObject to use
+        callbacks to the browser to retrieve data.
+
+        * public/WebDragData.h:
+        * src/WebDragData.cpp:
+        (WebKit::WebDragData::initialize):
+        (WebKit::WebDragData::url):
+        (WebKit::WebDragData::setURL):
+        (WebKit::WebDragData::urlTitle):
+        (WebKit::WebDragData::setURLTitle):
+        (WebKit::WebDragData::downloadMetadata):
+        (WebKit::WebDragData::setDownloadMetadata):
+        (WebKit::WebDragData::fileExtension):
+        (WebKit::WebDragData::setFileExtension):
+        (WebKit::WebDragData::hasFileNames):
+        (WebKit::WebDragData::fileNames):
+        (WebKit::WebDragData::setFileNames):
+        (WebKit::WebDragData::appendToFileNames):
+        (WebKit::WebDragData::plainText):
+        (WebKit::WebDragData::setPlainText):
+        (WebKit::WebDragData::htmlText):
+        (WebKit::WebDragData::setHTMLText):
+        (WebKit::WebDragData::htmlBaseURL):
+        (WebKit::WebDragData::setHTMLBaseURL):
+        (WebKit::WebDragData::fileContentFileName):
+        (WebKit::WebDragData::setFileContentFileName):
+        (WebKit::WebDragData::fileContent):
+        (WebKit::WebDragData::setFileContent):
+
 2010-09-29  Zhenyao Mo  <zmo at google.com>
 
         Reviewed by Kenneth Russell.
diff --git a/WebKit/chromium/public/WebDragData.h b/WebKit/chromium/public/WebDragData.h
index 2979519..6748fe0 100644
--- a/WebKit/chromium/public/WebDragData.h
+++ b/WebKit/chromium/public/WebDragData.h
@@ -66,7 +66,7 @@ public:
 
     bool isNull() const { return !m_private; }
 
-    WEBKIT_API WebURL url() const;
+    WEBKIT_API WebString url() const;
     WEBKIT_API void setURL(const WebURL&);
 
     WEBKIT_API WebString urlTitle() const;
diff --git a/WebKit/chromium/src/WebDragData.cpp b/WebKit/chromium/src/WebDragData.cpp
index 643c35d..bc6bdcc 100644
--- a/WebKit/chromium/src/WebDragData.cpp
+++ b/WebKit/chromium/src/WebDragData.cpp
@@ -32,6 +32,7 @@
 #include "WebDragData.h"
 
 #include "ChromiumDataObject.h"
+#include "ClipboardMimeTypes.h"
 #include "WebData.h"
 #include "WebString.h"
 #include "WebURL.h"
@@ -48,7 +49,7 @@ class WebDragDataPrivate : public ChromiumDataObject {
 
 void WebDragData::initialize()
 {
-    assign(static_cast<WebDragDataPrivate*>(ChromiumDataObject::create().releaseRef()));
+    assign(static_cast<WebDragDataPrivate*>(ChromiumDataObject::create(Clipboard::DragAndDrop).releaseRef()));
 }
 
 void WebDragData::reset()
@@ -64,137 +65,144 @@ void WebDragData::assign(const WebDragData& other)
     assign(p);
 }
 
-WebURL WebDragData::url() const
+WebString WebDragData::url() const
 {
     ASSERT(!isNull());
-    return m_private->getURL();
+    bool ignoredSuccess;
+    return m_private->getData(mimeTypeURL, ignoredSuccess);
 }
 
 void WebDragData::setURL(const WebURL& url)
 {
     ensureMutable();
-    m_private->setURL(url);
+    m_private->setData(mimeTypeURL, KURL(url).string());
 }
 
 WebString WebDragData::urlTitle() const
 {
     ASSERT(!isNull());
-    return m_private->urlTitle;
+    return m_private->urlTitle();
 }
 
 void WebDragData::setURLTitle(const WebString& urlTitle)
 {
     ensureMutable();
-    m_private->urlTitle = urlTitle;
+    m_private->setUrlTitle(urlTitle);
 }
 
 WebString WebDragData::downloadMetadata() const
 {
     ASSERT(!isNull());
-    return m_private->downloadMetadata;
+    bool ignoredSuccess;
+    return m_private->getData(mimeTypeDownloadURL, ignoredSuccess);
 }
 
 void WebDragData::setDownloadMetadata(const WebString& downloadMetadata)
 {
     ensureMutable();
-    m_private->downloadMetadata = downloadMetadata;
+    m_private->setData(mimeTypeDownloadURL, downloadMetadata);
 }
 
 WebString WebDragData::fileExtension() const
 {
     ASSERT(!isNull());
-    return m_private->fileExtension;
+    return m_private->fileExtension();
 }
 
 void WebDragData::setFileExtension(const WebString& fileExtension)
 {
     ensureMutable();
-    m_private->fileExtension = fileExtension;
+    m_private->setFileExtension(fileExtension);
 }
 
 bool WebDragData::hasFileNames() const
 {
     ASSERT(!isNull());
-    return !m_private->filenames.isEmpty();
+    return m_private->containsFilenames();
 }
 
 void WebDragData::fileNames(WebVector<WebString>& fileNames) const
 {
     ASSERT(!isNull());
-    fileNames = m_private->filenames;
+    fileNames = m_private->filenames();
 }
 
 void WebDragData::setFileNames(const WebVector<WebString>& fileNames)
 {
     ensureMutable();
-    m_private->filenames.clear();
-    m_private->filenames.append(fileNames.data(), fileNames.size());
+    Vector<String> fileNamesCopy;
+    fileNamesCopy.append(fileNames.data(), fileNames.size());
+    m_private->setFilenames(fileNamesCopy);
 }
 
 void WebDragData::appendToFileNames(const WebString& fileName)
 {
     ensureMutable();
-    m_private->filenames.append(fileName);
+    Vector<String> fileNames = m_private->filenames();
+    fileNames.append(fileName);
+    m_private->setFilenames(fileNames);
 }
 
 WebString WebDragData::plainText() const
 {
     ASSERT(!isNull());
-    return m_private->plainText;
+    bool ignoredSuccess;
+    return m_private->getData(mimeTypeTextPlain, ignoredSuccess);
 }
 
 void WebDragData::setPlainText(const WebString& plainText)
 {
     ensureMutable();
-    m_private->plainText = plainText;
+    m_private->setData(mimeTypeTextPlain, plainText);
 }
 
 WebString WebDragData::htmlText() const
 {
     ASSERT(!isNull());
-    return m_private->textHtml;
+    bool ignoredSuccess;
+    return m_private->getData(mimeTypeTextHTML, ignoredSuccess);
 }
 
 void WebDragData::setHTMLText(const WebString& htmlText)
 {
     ensureMutable();
-    m_private->textHtml = htmlText;
+    m_private->setData(mimeTypeTextHTML, htmlText);
 }
 
 WebURL WebDragData::htmlBaseURL() const
 {
     ASSERT(!isNull());
-    return m_private->htmlBaseUrl;
+    return m_private->htmlBaseUrl();
 }
 
 void WebDragData::setHTMLBaseURL(const WebURL& htmlBaseURL)
 {
     ensureMutable();
-    m_private->htmlBaseUrl = htmlBaseURL;
+    m_private->setHtmlBaseUrl(htmlBaseURL);
 }
 
 WebString WebDragData::fileContentFileName() const
 {
     ASSERT(!isNull());
-    return m_private->fileContentFilename;
+    return m_private->fileContentFilename();
 }
 
 void WebDragData::setFileContentFileName(const WebString& fileName)
 {
     ensureMutable();
-    m_private->fileContentFilename = fileName;
+    m_private->setFileContentFilename(fileName);
 }
 
 WebData WebDragData::fileContent() const
 {
     ASSERT(!isNull());
-    return WebData(m_private->fileContent);
+    return WebData(m_private->fileContent());
 }
 
 void WebDragData::setFileContent(const WebData& fileContent)
 {
     ensureMutable();
-    m_private->fileContent = fileContent;
+    m_private->setFileContent(fileContent);
 }
 
 WebDragData::WebDragData(const WTF::PassRefPtr<WebCore::ChromiumDataObject>& data)

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list