[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