[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 12:53:29 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 7e1d3a6965c681780c8a0c25a416237690ace81a
Author: commit-queue at webkit.org <commit-queue at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Sep 1 02:11:50 2010 +0000

    2010-08-31  Daniel Cheng  <dcheng at chromium.org>
    
            Reviewed by Tony Chang.
    
            [chromium] Implement Readable/Writable versions of ChromiumDataObjectNew
            https://bugs.webkit.org/show_bug.cgi?id=44917
    
            This is the second of several patches to update Chromium to support
            arbitrary data types in event.dataTransfer.
            ReadableDataObject simply calls through to several Chromium IPCs to
            retrieve the appropriate data.
            WritableDataObject ostensibly buffers arbitrary data internally until
            a call is made to flush the data to the platform-specific abstraction;
            unfortunately, a special exception is currently made for pasteboard
            handling due to how it is handled in WebCore.
    
            No new tests.
    
            * WebCore.gypi:
            * platform/chromium/ChromiumDataObjectNew.h: Removed.
            * platform/chromium/ClipboardChromium.cpp:
            * platform/chromium/ClipboardMimeTypes.cpp: Added.
            * platform/chromium/ClipboardMimeTypes.h: Added.
            * platform/chromium/ReadableDataObject.cpp: Added.
            (WebCore::clipboardBuffer):
            (WebCore::ReadableDataObject::create):
            (WebCore::ReadableDataObject::ReadableDataObject):
            (WebCore::ReadableDataObject::hasData):
            (WebCore::ReadableDataObject::types):
            (WebCore::ReadableDataObject::getData):
            (WebCore::ReadableDataObject::getURL):
            (WebCore::ReadableDataObject::getHTML):
            (WebCore::ReadableDataObject::hasFilenames):
            (WebCore::ReadableDataObject::filenames):
            (WebCore::ReadableDataObject::ensureTypeCacheInitialized):
            * platform/chromium/ReadableDataObject.h: Added.
            * platform/chromium/WritableDataObject.cpp: Added.
            (WebCore::WritableDataObject::create):
            (WebCore::WritableDataObject::WritableDataObject):
            (WebCore::WritableDataObject::clearData):
            (WebCore::WritableDataObject::clearAllExceptFiles):
            (WebCore::WritableDataObject::clearAll):
            (WebCore::WritableDataObject::setData):
            (WebCore::WritableDataObject::setURL):
            (WebCore::WritableDataObject::setHTML):
            (WebCore::WritableDataObject::dataMap):
            (WebCore::WritableDataObject::urlTitle):
            (WebCore::WritableDataObject::htmlBaseURL):
            (WebCore::WritableDataObject::fileExtension):
            (WebCore::WritableDataObject::fileContentFilename):
            (WebCore::WritableDataObject::fileContent):
            (WebCore::WritableDataObject::setFileExtension):
            (WebCore::WritableDataObject::setFileContentFilename):
            (WebCore::WritableDataObject::setFileContent):
            * platform/chromium/WritableDataObject.h: Added.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@66567 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 34a5475..c928346 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,59 @@
+2010-08-31  Daniel Cheng  <dcheng at chromium.org>
+
+        Reviewed by Tony Chang.
+
+        [chromium] Implement Readable/Writable versions of ChromiumDataObjectNew
+        https://bugs.webkit.org/show_bug.cgi?id=44917
+
+        This is the second of several patches to update Chromium to support
+        arbitrary data types in event.dataTransfer.
+        ReadableDataObject simply calls through to several Chromium IPCs to
+        retrieve the appropriate data.
+        WritableDataObject ostensibly buffers arbitrary data internally until
+        a call is made to flush the data to the platform-specific abstraction;
+        unfortunately, a special exception is currently made for pasteboard
+        handling due to how it is handled in WebCore.
+
+        No new tests.
+
+        * WebCore.gypi:
+        * platform/chromium/ChromiumDataObjectNew.h: Removed.
+        * platform/chromium/ClipboardChromium.cpp:
+        * platform/chromium/ClipboardMimeTypes.cpp: Added.
+        * platform/chromium/ClipboardMimeTypes.h: Added.
+        * platform/chromium/ReadableDataObject.cpp: Added.
+        (WebCore::clipboardBuffer):
+        (WebCore::ReadableDataObject::create):
+        (WebCore::ReadableDataObject::ReadableDataObject):
+        (WebCore::ReadableDataObject::hasData):
+        (WebCore::ReadableDataObject::types):
+        (WebCore::ReadableDataObject::getData):
+        (WebCore::ReadableDataObject::getURL):
+        (WebCore::ReadableDataObject::getHTML):
+        (WebCore::ReadableDataObject::hasFilenames):
+        (WebCore::ReadableDataObject::filenames):
+        (WebCore::ReadableDataObject::ensureTypeCacheInitialized):
+        * platform/chromium/ReadableDataObject.h: Added.
+        * platform/chromium/WritableDataObject.cpp: Added.
+        (WebCore::WritableDataObject::create):
+        (WebCore::WritableDataObject::WritableDataObject):
+        (WebCore::WritableDataObject::clearData):
+        (WebCore::WritableDataObject::clearAllExceptFiles):
+        (WebCore::WritableDataObject::clearAll):
+        (WebCore::WritableDataObject::setData):
+        (WebCore::WritableDataObject::setURL):
+        (WebCore::WritableDataObject::setHTML):
+        (WebCore::WritableDataObject::dataMap):
+        (WebCore::WritableDataObject::urlTitle):
+        (WebCore::WritableDataObject::htmlBaseURL):
+        (WebCore::WritableDataObject::fileExtension):
+        (WebCore::WritableDataObject::fileContentFilename):
+        (WebCore::WritableDataObject::fileContent):
+        (WebCore::WritableDataObject::setFileExtension):
+        (WebCore::WritableDataObject::setFileContentFilename):
+        (WebCore::WritableDataObject::setFileContent):
+        * platform/chromium/WritableDataObject.h: Added.
+
 2010-08-31  Darin Adler  <darin at apple.com>
 
         Reviewed by Sam Weinig.
diff --git a/WebCore/WebCore.gypi b/WebCore/WebCore.gypi
index 1317357..cf12a76 100644
--- a/WebCore/WebCore.gypi
+++ b/WebCore/WebCore.gypi
@@ -2146,12 +2146,13 @@
             'platform/chromium/ChromiumBridge.h',
             'platform/chromium/ChromiumDataObject.cpp',
             'platform/chromium/ChromiumDataObject.h',
-            'platform/chromium/ChromiumDataObjectNew.h',
             'platform/chromium/ClipboardChromium.cpp',
             'platform/chromium/ClipboardChromium.h',
             'platform/chromium/ClipboardChromiumLinux.cpp',
             'platform/chromium/ClipboardChromiumMac.cpp',
             'platform/chromium/ClipboardChromiumWin.cpp',
+            'platform/chromium/ClipboardMimeTypes.cpp',
+            'platform/chromium/ClipboardMimeTypes.h',
             'platform/chromium/ClipboardUtilitiesChromium.cpp',
             'platform/chromium/ClipboardUtilitiesChromium.h',
             'platform/chromium/ContextMenuChromium.cpp',
@@ -2189,6 +2190,8 @@
             'platform/chromium/PopupMenuChromium.cpp',
             'platform/chromium/PopupMenuChromium.h',
             'platform/chromium/PopupMenuPrivate.h',
+            'platform/chromium/ReadableDataObject.cpp',
+            'platform/chromium/ReadableDataObject.h',
             'platform/chromium/SSLKeyGeneratorChromium.cpp',
             'platform/chromium/ScrollbarThemeChromium.cpp',
             'platform/chromium/ScrollbarThemeChromium.h',
@@ -2209,6 +2212,8 @@
             'platform/chromium/WidgetChromium.cpp',
             'platform/chromium/WindowsVersion.cpp',
             'platform/chromium/WindowsVersion.h',
+            'platform/chromium/WritableDataObject.cpp',
+            'platform/chromium/WritableDataObject.h',
             'platform/graphics/cairo/CairoPath.h',
             'platform/graphics/cairo/FontCairo.cpp',
             'platform/graphics/cairo/GradientCairo.cpp',
diff --git a/WebCore/platform/chromium/ChromiumDataObjectNew.h b/WebCore/platform/chromium/ChromiumDataObjectNew.h
deleted file mode 100644
index 93ac9cb..0000000
--- a/WebCore/platform/chromium/ChromiumDataObjectNew.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2008, 2009, Google Inc. All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * 
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef ChromiumDataObjectNew_h
-#define ChromiumDataObjectNew_h
-
-#include "KURL.h"
-#include "PlatformString.h"
-#include "SharedBuffer.h"
-#include <wtf/HashMap.h>
-#include <wtf/HashSet.h>
-#include <wtf/RefPtr.h>
-#include <wtf/Vector.h>
-#include <wtf/text/StringHash.h>
-
-namespace WebCore {
-
-// A data object for holding data that would be in a clipboard or moved
-// during a drag-n-drop operation.  This is the data that WebCore is aware
-// of and is not specific to a platform.
-class ChromiumDataObjectNew : public RefCounted<ChromiumDataObjectNew> {
-public:
-    virtual void clearData(const String& type) = 0;
-    virtual void clearAllExceptFiles() = 0;
-    virtual void clear() = 0;
-    virtual bool hasData() const = 0;
-    virtual HashSet<String> types() const = 0;
-    virtual String getData(const String& type, bool& succeeded) const = 0;
-    virtual bool setData(const String& type, const String& data) = 0;
-
-    // Special accessors for URL and HTML since they carry additional
-    // metadata.
-    virtual String getURL(String* title) const = 0;
-    virtual void setURL(const String& url, const String& title) = 0;
-    virtual String getHTML(String* baseURL) const = 0;
-    virtual void setHTML(const String& html, const KURL& baseURL) = 0;
-
-    virtual bool hasFilenames() const = 0;
-    virtual Vector<String> filenames() const = 0;
-
-    // Accessors used when transferring drag data from the renderer to the
-    // browser.
-    virtual HashMap<String, String> dataMap() const = 0;
-    virtual String urlTitle() const = 0;
-    virtual KURL htmlBaseURL() const = 0;
-
-    // Used for transferring file data from the renderer to the browser.
-    virtual String fileExtension() const = 0;
-    virtual String fileContentFilename() const = 0;
-    virtual PassRefPtr<SharedBuffer> fileContent() const = 0;
-    virtual void setFileExtension(const String&) = 0;
-    virtual void setFileContentFilename(const String&) = 0;
-    virtual void setFileContent(PassRefPtr<SharedBuffer>) = 0;
-};
-
-} // namespace WebCore
-
-#endif
diff --git a/WebCore/platform/chromium/ClipboardChromium.cpp b/WebCore/platform/chromium/ClipboardChromium.cpp
index 25924e2..23508a6 100644
--- a/WebCore/platform/chromium/ClipboardChromium.cpp
+++ b/WebCore/platform/chromium/ClipboardChromium.cpp
@@ -30,7 +30,6 @@
 #include "CachedImage.h"
 #include "ChromiumBridge.h"
 #include "ChromiumDataObject.h"
-#include "ChromiumDataObjectNew.h"
 #include "ClipboardUtilitiesChromium.h"
 #include "Document.h"
 #include "DragData.h"
diff --git a/WebCore/platform/chromium/ClipboardMimeTypes.cpp b/WebCore/platform/chromium/ClipboardMimeTypes.cpp
new file mode 100644
index 0000000..b95744f
--- /dev/null
+++ b/WebCore/platform/chromium/ClipboardMimeTypes.cpp
@@ -0,0 +1,40 @@
+/*
+ * Copyright (c) 2010 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "ClipboardMimeTypes.h"
+
+namespace WebCore {
+
+const char textPlainType[] = "text/plain";
+const char textHtmlType[] = "text/html";
+const char textUriListType[] = "text/uri-list";
+
+} // namespace WebCore
diff --git a/WebCore/platform/chromium/ClipboardMimeTypes.h b/WebCore/platform/chromium/ClipboardMimeTypes.h
new file mode 100644
index 0000000..d7468f2
--- /dev/null
+++ b/WebCore/platform/chromium/ClipboardMimeTypes.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2010 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef ClipboardMimeTypes_h
+#define ClipboardMimeTypes_h
+
+namespace WebCore {
+
+extern const char textPlainType[];
+extern const char textHtmlType[];
+extern const char textUriListType[];
+
+} // namespace WebCore
+
+#endif
diff --git a/WebCore/platform/chromium/ReadableDataObject.cpp b/WebCore/platform/chromium/ReadableDataObject.cpp
new file mode 100644
index 0000000..1a333bb
--- /dev/null
+++ b/WebCore/platform/chromium/ReadableDataObject.cpp
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2010 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "ReadableDataObject.h"
+
+#include "ChromiumBridge.h"
+#include "ClipboardMimeTypes.h"
+
+namespace WebCore {
+
+static PasteboardPrivate::ClipboardBuffer clipboardBuffer(bool isForDragging)
+{
+    return isForDragging ? PasteboardPrivate::DragBuffer : PasteboardPrivate::StandardBuffer;
+}
+
+PassRefPtr<ReadableDataObject> ReadableDataObject::create(bool isForDragging)
+{
+    return adoptRef(new ReadableDataObject(isForDragging));
+}
+
+ReadableDataObject::ReadableDataObject(bool isForDragging)
+    : m_isForDragging(isForDragging)
+    , m_containsFilenames(false)
+    , m_isTypeCacheInitialized(false)
+{
+}
+
+bool ReadableDataObject::hasData() const
+{
+    ensureTypeCacheInitialized();
+    return !m_types.isEmpty() || m_containsFilenames;
+}
+
+HashSet<String> ReadableDataObject::types() const
+{
+    ensureTypeCacheInitialized();
+    return m_types;
+}
+
+String ReadableDataObject::getData(const String& type, bool& succeeded) const
+{
+    String data;
+    String ignoredMetadata;
+    succeeded = ChromiumBridge::clipboardReadData(
+        clipboardBuffer(m_isForDragging), type, data, ignoredMetadata);
+    return data;
+}
+
+String ReadableDataObject::getURL(String* title) const
+{
+    String url;
+    String ignoredTitle;
+    if (!title)
+        title = &ignoredTitle;
+    ChromiumBridge::clipboardReadData(
+        clipboardBuffer(m_isForDragging), textUriListType, url, *title);
+    return url;
+}
+
+String ReadableDataObject::getHTML(String* baseURL) const
+{
+    String html;
+    String ignoredBaseURL;
+    if (!baseURL)
+        baseURL = &ignoredBaseURL;
+    ChromiumBridge::clipboardReadData(
+        clipboardBuffer(m_isForDragging), textHtmlType, html, *baseURL);
+    return html;
+}
+
+bool ReadableDataObject::hasFilenames() const
+{
+    ensureTypeCacheInitialized();
+    return m_containsFilenames;
+}
+
+Vector<String> ReadableDataObject::filenames() const
+{
+    return ChromiumBridge::clipboardReadFilenames(clipboardBuffer(m_isForDragging));
+}
+
+void ReadableDataObject::ensureTypeCacheInitialized() const
+{
+    if (m_isTypeCacheInitialized)
+        return;
+
+    m_types = ChromiumBridge::clipboardReadAvailableTypes(
+        clipboardBuffer(m_isForDragging), &m_containsFilenames);
+    m_isTypeCacheInitialized = true;
+}
+
+} // namespace WebCore
diff --git a/WebCore/platform/chromium/ReadableDataObject.h b/WebCore/platform/chromium/ReadableDataObject.h
new file mode 100644
index 0000000..60f6d45
--- /dev/null
+++ b/WebCore/platform/chromium/ReadableDataObject.h
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2010 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef ReadableDataObject_h
+#define ReadableDataObject_h
+
+#include "PlatformString.h"
+#include <wtf/HashSet.h>
+#include <wtf/RefCounted.h>
+#include <wtf/RefPtr.h>
+#include <wtf/text/StringHash.h>
+
+namespace WebCore {
+
+// Used for one way communication of drag/drop and copy/paste data from the
+// browser to the renderer.
+class ReadableDataObject : public RefCounted<ReadableDataObject> {
+public:
+    static PassRefPtr<ReadableDataObject> create(bool isForDragging);
+
+    virtual bool hasData() const;
+    virtual HashSet<String> types() const;
+    virtual String getData(const String& type, bool& succeeded) const;
+
+    virtual String getURL(String* title) const;
+    virtual String getHTML(String* baseURL) const;
+
+    virtual bool hasFilenames() const;
+    virtual Vector<String> filenames() const;
+
+private:
+    explicit ReadableDataObject(bool isForDragging);
+
+    // This isn't always const... but most of the time it is.
+    void ensureTypeCacheInitialized() const;
+
+
+    bool m_isForDragging;
+
+    // To avoid making a lot of IPC calls for each drag event, we cache some
+    // values in the renderer.
+    mutable HashSet<String> m_types;
+    mutable bool m_containsFilenames;
+    mutable bool m_isTypeCacheInitialized;
+};
+
+} // namespace WebCore
+
+#endif
diff --git a/WebCore/platform/chromium/WritableDataObject.cpp b/WebCore/platform/chromium/WritableDataObject.cpp
new file mode 100644
index 0000000..6e7c283
--- /dev/null
+++ b/WebCore/platform/chromium/WritableDataObject.cpp
@@ -0,0 +1,152 @@
+/*
+ * Copyright (c) 2010 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WritableDataObject.h"
+
+#include "ChromiumBridge.h"
+#include "ClipboardMimeTypes.h"
+
+namespace WebCore {
+
+PassRefPtr<WritableDataObject> WritableDataObject::create(bool isForDragging)
+{
+    return adoptRef(new WritableDataObject(isForDragging));
+}
+
+WritableDataObject::WritableDataObject(bool isForDragging)
+    : m_isForDragging(isForDragging)
+{
+}
+
+void WritableDataObject::clearData(const String& type)
+{
+    m_dataMap.remove(type);
+    if (type == textUriListType)
+        m_urlTitle = "";
+    else if (type == textHtmlType)
+        m_htmlBaseURL = KURL();
+}
+
+void WritableDataObject::clearAllExceptFiles()
+{
+    // FIXME: The spec does not provide a way to populate FileList currently. In
+    // fact, the spec explicitly states that dragging files can only happen from
+    // outside a browsing context.
+    clearAll();
+}
+
+void WritableDataObject::clearAll()
+{
+    m_dataMap.clear();
+    m_urlTitle = "";
+    m_htmlBaseURL = KURL();
+    m_fileContentFilename = "";
+    if (m_fileContent)
+        m_fileContent->clear();
+    m_fileExtension = "";
+}
+
+bool WritableDataObject::setData(const String& type, const String& data)
+{
+    if (!m_isForDragging) {
+        ChromiumBridge::clipboardWriteData(type, data, "");
+        return true;
+    }
+    m_dataMap.set(type, data);
+    if (type == textUriListType)
+        m_urlTitle = "";
+    else if (type == textHtmlType)
+        m_htmlBaseURL = KURL();
+    return true;
+}
+
+void WritableDataObject::setURL(const String& url, const String& title)
+{
+    setData(textUriListType, url);
+    m_urlTitle = title;
+}
+
+void WritableDataObject::setHTML(const String& html, const KURL& baseURL)
+{
+    setData(textHtmlType, html);
+    m_htmlBaseURL = baseURL;
+}
+
+// Accessors used when transferring drag data from the renderer to the
+// browser.
+HashMap<String, String> WritableDataObject::dataMap() const
+{
+    return m_dataMap;
+}
+
+String WritableDataObject::urlTitle() const
+{
+    return m_urlTitle;
+}
+
+KURL WritableDataObject::htmlBaseURL() const
+{
+    return m_htmlBaseURL;
+}
+
+// Used for transferring file data from the renderer to the browser.
+String WritableDataObject::fileExtension() const
+{
+    return m_fileExtension;
+}
+
+String WritableDataObject::fileContentFilename() const
+{
+    return m_fileContentFilename;
+}
+
+PassRefPtr<SharedBuffer> WritableDataObject::fileContent() const
+{
+    return m_fileContent;
+}
+
+void WritableDataObject::setFileExtension(const String& fileExtension)
+{
+    m_fileExtension = fileExtension;
+}
+
+void WritableDataObject::setFileContentFilename(const String& fileContentFilename)
+{
+    m_fileContentFilename = fileContentFilename;
+}
+
+void WritableDataObject::setFileContent(PassRefPtr<SharedBuffer> fileContent)
+{
+    m_fileContent = fileContent;
+}
+
+
+} // namespace WebCore
diff --git a/WebCore/platform/chromium/WritableDataObject.h b/WebCore/platform/chromium/WritableDataObject.h
new file mode 100644
index 0000000..71e2e26
--- /dev/null
+++ b/WebCore/platform/chromium/WritableDataObject.h
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2010 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WritableDataObject_h
+#define WritableDataObject_h
+
+#include "KURL.h"
+#include "PlatformString.h"
+#include "SharedBuffer.h"
+#include <wtf/HashMap.h>
+#include <wtf/RefCounted.h>
+#include <wtf/RefPtr.h>
+#include <wtf/text/StringHash.h>
+
+namespace WebCore {
+
+// Used for one way communication of drag/drop and copy/paste data from the
+// renderer to the browser. This is intenteded to be used in dragstart/copy/cut
+// events. Due to shortcomings, writes to the pasteboard cannot be performed
+// atomically.
+class WritableDataObject : public RefCounted<WritableDataObject> {
+public:
+    static PassRefPtr<WritableDataObject> create(bool isForDragging);
+
+    virtual void clearData(const String& type);
+    virtual void clearAllExceptFiles();
+    virtual void clearAll();
+    virtual bool setData(const String& type, const String& data);
+
+    virtual void setURL(const String& url, const String& title);
+    virtual void setHTML(const String& html, const KURL& baseURL);
+
+    // Used for transferring drag data from the renderer to the browser.
+    virtual HashMap<String, String> dataMap() const;
+    virtual String urlTitle() const;
+    virtual KURL htmlBaseURL() const;
+
+    virtual String fileExtension() const;
+    virtual String fileContentFilename() const;
+    virtual PassRefPtr<SharedBuffer> fileContent() const;
+    virtual void setFileExtension(const String&);
+    virtual void setFileContentFilename(const String&);
+    virtual void setFileContent(PassRefPtr<SharedBuffer>);
+
+private:
+    explicit WritableDataObject(bool isForDragging);
+
+    bool m_isForDragging;
+
+    HashMap<String, String> m_dataMap;
+    String m_urlTitle;
+    KURL m_htmlBaseURL;
+    String m_fileExtension;
+    String m_fileContentFilename;
+    RefPtr<SharedBuffer> m_fileContent;
+};
+
+} // namespace WebCore
+
+#endif

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list