WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
0001-Move-complexity-from-DataTransferItemsChromium-and-D.patch (text/plain), 18.10 KB, created by
Igor Trindade Oliveira
on 2011-04-21 14:00:04 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Igor Trindade Oliveira
Created:
2011-04-21 14:00:04 PDT
Size:
18.10 KB
patch
obsolete
>From 8dce73134c27300f81e594c19d07b24a7f14e715 Mon Sep 17 00:00:00 2001 >From: Igor Oliveira <igor.oliveira@openbossa.org> >Date: Wed, 20 Apr 2011 11:47:02 -0400 >Subject: [PATCH] Move complexity from DataTransferItemsChromium and DataTransferItemChromium for base class > >--- > Source/WebCore/ChangeLog | 37 +++++++ > Source/WebCore/WebCore.gypi | 1 + > Source/WebCore/dom/DataTransferItem.cpp | 31 ++++++ > Source/WebCore/dom/DataTransferItem.h | 18 +++- > Source/WebCore/dom/DataTransferItems.cpp | 103 ++++++++++++++++++++ > Source/WebCore/dom/DataTransferItems.h | 22 +++- > .../platform/chromium/DataTransferItemChromium.cpp | 36 +++---- > .../platform/chromium/DataTransferItemChromium.h | 6 - > .../chromium/DataTransferItemsChromium.cpp | 54 +---------- > .../platform/chromium/DataTransferItemsChromium.h | 12 --- > 10 files changed, 219 insertions(+), 101 deletions(-) > create mode 100644 Source/WebCore/dom/DataTransferItems.cpp > >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index ab57af3..cd4dee0 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,40 @@ >+2011-04-21 Igor Oliveira <igor.oliveira@openbossa.org> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Move complexity from DataTransferItemsChromium and DataTransferItemChromium for base class >+ https://bugs.webkit.org/show_bug.cgi?id=59028 >+ >+ The DataTransferItemsChromium and DataTransferItemChromium code can be reused by other platforms. >+ Moving the code for base class we can reduce the efforts to support DataTransferItems >+ element in different platforms. >+ >+ >+ * WebCore.gypi: >+ * dom/DataTransferItem.cpp: >+ (WebCore::DataTransferItem::DataTransferItem): >+ (WebCore::DataTransferItem::owner): >+ (WebCore::DataTransferItem::kind): >+ (WebCore::DataTransferItem::type): >+ * dom/DataTransferItem.h: >+ * dom/DataTransferItems.cpp: Copied from Source/WebCore/platform/chromium/DataTransferItemsChromium.cpp. >+ (WebCore::DataTransferItems::DataTransferItems): >+ (WebCore::DataTransferItems::length): >+ (WebCore::DataTransferItems::item): >+ (WebCore::DataTransferItems::deleteItem): >+ (WebCore::DataTransferItems::clear): >+ (WebCore::DataTransferItems::add): >+ * dom/DataTransferItems.h: >+ * platform/chromium/DataTransferItemChromium.cpp: >+ (WebCore::DataTransferItem::create): >+ (WebCore::DataTransferItemChromium::DataTransferItemChromium): >+ (WebCore::DataTransferItemChromium::getAsString): >+ (WebCore::DataTransferItemChromium::getAsFile): >+ * platform/chromium/DataTransferItemChromium.h: >+ * platform/chromium/DataTransferItemsChromium.cpp: >+ (WebCore::DataTransferItemsChromium::DataTransferItemsChromium): >+ * platform/chromium/DataTransferItemsChromium.h: >+ > 2011-04-19 Stephen White <senorblanco@chromium.org> > > Reviewed by Kenneth Russell. >diff --git a/Source/WebCore/WebCore.gypi b/Source/WebCore/WebCore.gypi >index 010be00..f02d0cf 100644 >--- a/Source/WebCore/WebCore.gypi >+++ b/Source/WebCore/WebCore.gypi >@@ -2425,6 +2425,7 @@ > 'dom/DOMStringMap.h', > 'dom/DataTransferItem.cpp', > 'dom/DataTransferItem.h', >+ 'dom/DataTransferItems.cpp', > 'dom/DataTransferItems.h', > 'dom/DatasetDOMStringMap.cpp', > 'dom/DatasetDOMStringMap.h', >diff --git a/Source/WebCore/dom/DataTransferItem.cpp b/Source/WebCore/dom/DataTransferItem.cpp >index 8eec869..78731d7 100644 >--- a/Source/WebCore/dom/DataTransferItem.cpp >+++ b/Source/WebCore/dom/DataTransferItem.cpp >@@ -31,6 +31,8 @@ > #include "config.h" > #include "DataTransferItem.h" > >+#include "Clipboard.h" >+ > #if ENABLE(DATA_TRANSFER_ITEMS) > > namespace WebCore { >@@ -38,6 +40,35 @@ namespace WebCore { > const char DataTransferItem::kindString[] = "string"; > const char DataTransferItem::kindFile[] = "file"; > >+DataTransferItem::DataTransferItem(RefPtr<Clipboard> owner, const String& kind, const String& type) >+ : m_owner(owner) >+ , m_kind(kind) >+ , m_type(type) >+{ >+} >+ >+Clipboard* DataTransferItem::owner() >+{ >+ return m_owner.get(); >+} >+ >+String DataTransferItem::kind() const >+{ >+ if (m_owner->policy() == ClipboardNumb) >+ return String(); >+ >+ return m_kind; >+} >+ >+String DataTransferItem::type() const >+{ >+ if (m_owner->policy() == ClipboardNumb) >+ return String(); >+ >+ return m_type; >+} >+ >+ > } // namespace WebCore > > #endif // ENABLE(DATA_TRANSFER_ITEMS) >diff --git a/Source/WebCore/dom/DataTransferItem.h b/Source/WebCore/dom/DataTransferItem.h >index d648c56..d4a1e9d 100644 >--- a/Source/WebCore/dom/DataTransferItem.h >+++ b/Source/WebCore/dom/DataTransferItem.h >@@ -33,6 +33,8 @@ > > #if ENABLE(DATA_TRANSFER_ITEMS) > >+#include "Clipboard.h" >+ > #include <wtf/Forward.h> > #include <wtf/RefCounted.h> > >@@ -40,19 +42,31 @@ namespace WebCore { > > class Blob; > class StringCallback; >+class ScriptExecutionContext; > > class DataTransferItem : public RefCounted<DataTransferItem> { > public: > ~DataTransferItem() {} > >+ static PassRefPtr<DataTransferItem> create(PassRefPtr<Clipboard> owner, ScriptExecutionContext*, const String& data, const String& type); >+ > static const char kindString[]; > static const char kindFile[]; > >- virtual String kind() const = 0; >- virtual String type() const = 0; >+ String kind() const; >+ String type() const; > > virtual void getAsString(PassRefPtr<StringCallback>) = 0; > virtual PassRefPtr<Blob> getAsFile() = 0; >+ >+protected: >+ DataTransferItem(RefPtr<Clipboard> owner, const String& kind, const String& type); >+ Clipboard* owner(); >+ >+private: >+ RefPtr<Clipboard> m_owner; >+ String m_kind; >+ String m_type; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/dom/DataTransferItems.cpp b/Source/WebCore/dom/DataTransferItems.cpp >new file mode 100644 >index 0000000..0ee6ed2 >--- /dev/null >+++ b/Source/WebCore/dom/DataTransferItems.cpp >@@ -0,0 +1,103 @@ >+/* >+ * Copyright (C) 2011 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 "DataTransferItems.h" >+ >+#include "DataTransferItem.h" >+#include "ExceptionCode.h" >+ >+#if ENABLE(DATA_TRANSFER_ITEMS) >+ >+namespace WebCore { >+ >+DataTransferItems::DataTransferItems(RefPtr<Clipboard> clipboard, ScriptExecutionContext* context) >+ : m_owner(clipboard) >+ , m_context(context) >+{ >+} >+ >+unsigned long DataTransferItems::length() >+{ >+ if (m_owner->policy() == ClipboardNumb) >+ return 0; >+ >+ return m_items.size(); >+} >+ >+PassRefPtr<DataTransferItem> DataTransferItems::item(unsigned long index) >+{ >+ if (m_owner->policy() == ClipboardNumb || index >= length()) >+ return 0; >+ >+ return m_items[index]; >+} >+ >+void DataTransferItems::deleteItem(unsigned long index, ExceptionCode& ec) >+{ >+ if (m_owner->policy() != ClipboardWritable) { >+ ec = INVALID_STATE_ERR; >+ return; >+ } >+ >+ if (index >= length()) >+ return; >+ >+ m_items.remove(index); >+} >+ >+void DataTransferItems::clear() >+{ >+ if (m_owner->policy() != ClipboardWritable) >+ return; >+ >+ m_items.clear(); >+ >+} >+ >+void DataTransferItems::add(const String& data, const String& type, ExceptionCode& ec) >+{ >+ if (m_owner->policy() != ClipboardWritable) >+ return; >+ >+ // Only one 'string' item with a given type is allowed in the collection. >+ for (size_t i = 0; i < m_items.size(); ++i) { >+ if (m_items[i]->type() == type && m_items[i]->kind() == DataTransferItem::kindString) { >+ ec = INVALID_STATE_ERR; >+ return; >+ } >+ } >+ >+ m_items.append(DataTransferItem::create(m_owner, m_context, data, type)); >+} >+ >+} >+ >+#endif >diff --git a/Source/WebCore/dom/DataTransferItems.h b/Source/WebCore/dom/DataTransferItems.h >index 0873384..ea873c2 100644 >--- a/Source/WebCore/dom/DataTransferItems.h >+++ b/Source/WebCore/dom/DataTransferItems.h >@@ -33,12 +33,13 @@ > > #if ENABLE(DATA_TRANSFER_ITEMS) > >+#include "DataTransferItem.h" > #include <wtf/Forward.h> > #include <wtf/RefCounted.h> > > namespace WebCore { > >-class DataTransferItem; >+class Clipboard; > > typedef int ExceptionCode; > >@@ -46,12 +47,21 @@ class DataTransferItems : public RefCounted<DataTransferItems> { > public: > ~DataTransferItems() {} > >- virtual unsigned long length() const = 0; >- virtual PassRefPtr<DataTransferItem> item(unsigned long index) const = 0; >- virtual void deleteItem(unsigned long index, ExceptionCode&) = 0; >- virtual void clear() = 0; >+ virtual unsigned long length(); >+ virtual PassRefPtr<DataTransferItem> item(unsigned long index); >+ virtual void deleteItem(unsigned long index, ExceptionCode&); >+ virtual void clear(); >+ virtual void add(const String& data, const String& type, ExceptionCode&); >+ >+protected: >+ DataTransferItems(RefPtr<Clipboard>, ScriptExecutionContext*); >+ >+protected: >+ RefPtr<Clipboard> m_owner; >+ // Indirectly owned by our parent. >+ ScriptExecutionContext* m_context; >+ Vector<RefPtr<DataTransferItem> > m_items; > >- virtual void add(const String& data, const String& type, ExceptionCode&) = 0; > }; > > } // namespace WebCore >diff --git a/Source/WebCore/platform/chromium/DataTransferItemChromium.cpp b/Source/WebCore/platform/chromium/DataTransferItemChromium.cpp >index 24b498e..9cd2ac9 100644 >--- a/Source/WebCore/platform/chromium/DataTransferItemChromium.cpp >+++ b/Source/WebCore/platform/chromium/DataTransferItemChromium.cpp >@@ -57,34 +57,26 @@ PassRefPtr<DataTransferItemChromium> DataTransferItemChromium::create(PassRefPtr > return adoptRef(new DataTransferItemChromium(owner, context, InternalSource, DataTransferItem::kindString, type, data)); > } > >+PassRefPtr<DataTransferItem> DataTransferItem::create(PassRefPtr<Clipboard> owner, >+ ScriptExecutionContext* context, >+ const String& data, >+ const String& type) >+{ >+ return DataTransferItemChromium::create(owner, context, data, type); >+} >+ > DataTransferItemChromium::DataTransferItemChromium(PassRefPtr<Clipboard> owner, ScriptExecutionContext* context, DataSource source, const String& kind, const String& type, const String& data) >- : m_owner(owner) >+ : DataTransferItem(owner, kind, type) > , m_context(context) > , m_source(source) >- , m_kind(kind) >- , m_type(type) > , m_data(data) > { > } > >-String DataTransferItemChromium::kind() const >-{ >- if (m_owner->policy() == ClipboardNumb) >- return String(); >- return m_kind; >-} >- >-String DataTransferItemChromium::type() const >-{ >- if (m_owner->policy() == ClipboardNumb) >- return String(); >- return m_type; >-} >- > void DataTransferItemChromium::getAsString(PassRefPtr<StringCallback> callback) > { >- if ((m_owner->policy() != ClipboardReadable && m_owner->policy() != ClipboardWritable) >- || m_kind != kindString) >+ if ((owner()->policy() != ClipboardReadable && owner()->policy() != ClipboardWritable) >+ || kind() != kindString) > return; > if (m_source == InternalSource) { > callback->scheduleCallback(m_context, m_data); >@@ -93,11 +85,11 @@ void DataTransferItemChromium::getAsString(PassRefPtr<StringCallback> callback) > > ASSERT(m_source == PasteboardSource); > // This is ugly but there's no real alternative. >- if (m_type == mimeTypeTextPlain) { >+ if (type() == mimeTypeTextPlain) { > callback->scheduleCallback(m_context, PlatformBridge::clipboardReadPlainText(PasteboardPrivate::StandardBuffer)); > return; > } >- if (m_type == mimeTypeTextHTML) { >+ if (type() == mimeTypeTextHTML) { > String html; > KURL ignoredSourceURL; > PlatformBridge::clipboardReadHTML(PasteboardPrivate::StandardBuffer, &html, &ignoredSourceURL); >@@ -113,7 +105,7 @@ PassRefPtr<Blob> DataTransferItemChromium::getAsFile() > return 0; > > ASSERT(m_source == PasteboardSource); >- if (m_type == mimeTypeImagePng) { >+ if (type() == mimeTypeImagePng) { > // FIXME: This is pretty inefficient. We copy the data from the browser > // to the renderer. We then place it in a blob in WebKit, which > // registers it and copies it *back* to the browser. When a consumer >diff --git a/Source/WebCore/platform/chromium/DataTransferItemChromium.h b/Source/WebCore/platform/chromium/DataTransferItemChromium.h >index 66be96e..144e40f 100644 >--- a/Source/WebCore/platform/chromium/DataTransferItemChromium.h >+++ b/Source/WebCore/platform/chromium/DataTransferItemChromium.h >@@ -47,9 +47,6 @@ public: > static PassRefPtr<DataTransferItemChromium> createFromPasteboard(PassRefPtr<Clipboard> owner, ScriptExecutionContext*, const String& type); > static PassRefPtr<DataTransferItemChromium> create(PassRefPtr<Clipboard> owner, ScriptExecutionContext*, const String& data, const String& type); > >- virtual String kind() const; >- virtual String type() const; >- > virtual void getAsString(PassRefPtr<StringCallback>); > virtual PassRefPtr<Blob> getAsFile(); > >@@ -61,11 +58,8 @@ private: > > DataTransferItemChromium(PassRefPtr<Clipboard> owner, ScriptExecutionContext*, DataSource, const String& kind, const String& type, const String& data); > >- const RefPtr<Clipboard> m_owner; > ScriptExecutionContext* m_context; > const DataSource m_source; >- const String m_kind; >- const String m_type; > const String m_data; > }; > >diff --git a/Source/WebCore/platform/chromium/DataTransferItemsChromium.cpp b/Source/WebCore/platform/chromium/DataTransferItemsChromium.cpp >index 418b8b5..c684ccc 100644 >--- a/Source/WebCore/platform/chromium/DataTransferItemsChromium.cpp >+++ b/Source/WebCore/platform/chromium/DataTransferItemsChromium.cpp >@@ -45,62 +45,10 @@ PassRefPtr<DataTransferItemsChromium> DataTransferItemsChromium::create(PassRefP > } > > DataTransferItemsChromium::DataTransferItemsChromium(PassRefPtr<Clipboard> owner, ScriptExecutionContext* context) >- : m_owner(owner) >- , m_context(context) >+ : DataTransferItems(owner, context) > { > } > >-unsigned long DataTransferItemsChromium::length() const >-{ >- if (m_owner->policy() == ClipboardNumb) >- return 0; >- return m_items.size(); >-} >- >-PassRefPtr<DataTransferItem> DataTransferItemsChromium::item(unsigned long index) const >-{ >- if (m_owner->policy() == ClipboardNumb || index >= length()) >- return 0; >- return m_items[index]; >-} >- >-void DataTransferItemsChromium::deleteItem(unsigned long index, ExceptionCode& ec) >-{ >- if (m_owner->policy() != ClipboardWritable) { >- ec = INVALID_STATE_ERR; >- return; >- } >- >- if (index >= length()) >- return; >- >- m_items.remove(index); >-} >- >-void DataTransferItemsChromium::clear() >-{ >- if (m_owner->policy() != ClipboardWritable) >- return; >- >- m_items.clear(); >-} >- >-void DataTransferItemsChromium::add(const String& data, const String& type, ExceptionCode& ec) >-{ >- if (m_owner->policy() != ClipboardWritable) >- return; >- >- // Only one 'string' item with a given type is allowed in the collection. >- for (size_t i = 0; i < m_items.size(); ++i) { >- if (m_items[i]->type() == type && m_items[i]->kind() == DataTransferItem::kindString) { >- ec = INVALID_STATE_ERR; >- return; >- } >- } >- >- m_items.append(DataTransferItemChromium::create(m_owner, m_context, data, type)); >-} >- > void DataTransferItemsChromium::addPasteboardItem(const String& type) > { > m_items.append(DataTransferItemChromium::createFromPasteboard(m_owner, m_context, type)); >diff --git a/Source/WebCore/platform/chromium/DataTransferItemsChromium.h b/Source/WebCore/platform/chromium/DataTransferItemsChromium.h >index 51c4fdb..d099a22 100644 >--- a/Source/WebCore/platform/chromium/DataTransferItemsChromium.h >+++ b/Source/WebCore/platform/chromium/DataTransferItemsChromium.h >@@ -49,24 +49,12 @@ class DataTransferItemsChromium : public DataTransferItems { > public: > static PassRefPtr<DataTransferItemsChromium> create(PassRefPtr<Clipboard>, ScriptExecutionContext*); > >- virtual unsigned long length() const; >- virtual PassRefPtr<DataTransferItem> item(unsigned long index) const; >- virtual void deleteItem(unsigned long index, ExceptionCode&); >- virtual void clear(); >- >- virtual void add(const String& data, const String& type, ExceptionCode&); >- > private: > friend class ClipboardChromium; > > DataTransferItemsChromium(PassRefPtr<Clipboard>, ScriptExecutionContext*); > > virtual void addPasteboardItem(const String& type); >- >- RefPtr<Clipboard> m_owner; >- // Indirectly owned by our parent. >- ScriptExecutionContext* m_context; >- Vector<RefPtr<DataTransferItemChromium> > m_items; > }; > > } // namespace WebCore >-- >1.7.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 59028
:
90509
|
90594
|
90600
|
90939
|
90946
|
90954