Diff
Modified: trunk/Source/WebCore/ChangeLog (90496 => 90497)
--- trunk/Source/WebCore/ChangeLog 2011-07-06 21:10:43 UTC (rev 90496)
+++ trunk/Source/WebCore/ChangeLog 2011-07-06 21:13:19 UTC (rev 90497)
@@ -1,3 +1,25 @@
+2011-06-30 Cris Neckar <[email protected]>
+
+ Reviewed by Darin Fisher.
+
+ Add versioning to Chromium clipboard and prevent polling from inside events.
+ https://bugs.webkit.org/show_bug.cgi?id=63738
+
+ * platform/chromium/ChromiumDataObject.cpp:
+ (WebCore::ChromiumDataObject::getSequenceNumber):
+ * platform/chromium/ChromiumDataObject.h:
+ * platform/chromium/ClipboardChromium.cpp:
+ (WebCore::ClipboardChromium::ClipboardChromium):
+ (WebCore::ClipboardChromium::getData):
+ (WebCore::ClipboardChromium::platformClipboardChanged):
+ * platform/chromium/ClipboardChromium.h:
+ * platform/chromium/DataTransferItemChromium.cpp:
+ (WebCore::DataTransferItemChromium::getAsString):
+ (WebCore::DataTransferItemChromium::getAsFile):
+ * platform/chromium/PlatformBridge.h:
+ * svg/SVGAnimationElement.cpp:
+ (WebCore::SVGAnimationElement::setTargetAttributeAnimatedValue):
+
2011-07-01 James Robinson <[email protected]>
Reviewed by Stephen White.
Modified: trunk/Source/WebCore/platform/chromium/ChromiumDataObject.cpp (90496 => 90497)
--- trunk/Source/WebCore/platform/chromium/ChromiumDataObject.cpp 2011-07-06 21:10:43 UTC (rev 90496)
+++ trunk/Source/WebCore/platform/chromium/ChromiumDataObject.cpp 2011-07-06 21:13:19 UTC (rev 90497)
@@ -226,6 +226,11 @@
return false;
}
+uint64_t ChromiumDataObject::getSequenceNumber()
+{
+ return PlatformBridge::clipboardGetSequenceNumber();
+}
+
bool ChromiumDataObject::containsFilenames() const
{
bool containsFilenames;
Modified: trunk/Source/WebCore/platform/chromium/ChromiumDataObject.h (90496 => 90497)
--- trunk/Source/WebCore/platform/chromium/ChromiumDataObject.h 2011-07-06 21:10:43 UTC (rev 90496)
+++ trunk/Source/WebCore/platform/chromium/ChromiumDataObject.h 2011-07-06 21:13:19 UTC (rev 90497)
@@ -66,6 +66,7 @@
HashSet<String> types() const;
String getData(const String& type, bool& success);
bool setData(const String& type, const String& data);
+ uint64_t getSequenceNumber();
// Special handlers for URL/HTML metadata.
String urlTitle() const { return m_urlTitle; }
Modified: trunk/Source/WebCore/platform/chromium/ClipboardChromium.cpp (90496 => 90497)
--- trunk/Source/WebCore/platform/chromium/ClipboardChromium.cpp 2011-07-06 21:10:43 UTC (rev 90496)
+++ trunk/Source/WebCore/platform/chromium/ClipboardChromium.cpp 2011-07-06 21:13:19 UTC (rev 90497)
@@ -77,6 +77,7 @@
: Clipboard(policy, clipboardType)
, m_dataObject(dataObject)
, m_frame(frame)
+ , m_originalSequenceNumber(m_dataObject->getSequenceNumber())
{
}
@@ -110,6 +111,9 @@
if (policy() != ClipboardReadable || !m_dataObject)
return String();
+ if (platformClipboardChanged())
+ return String();
+
return m_dataObject->getData(normalizeType(type), success);
}
@@ -121,6 +125,11 @@
return m_dataObject->setData(normalizeType(type), data);
}
+bool ClipboardChromium::platformClipboardChanged() const
+{
+ return m_dataObject->getSequenceNumber() != m_originalSequenceNumber;
+}
+
// extensions beyond IE's API
HashSet<String> ClipboardChromium::types() const
{
Modified: trunk/Source/WebCore/platform/chromium/ClipboardChromium.h (90496 => 90497)
--- trunk/Source/WebCore/platform/chromium/ClipboardChromium.h 2011-07-06 21:10:43 UTC (rev 90496)
+++ trunk/Source/WebCore/platform/chromium/ClipboardChromium.h 2011-07-06 21:13:19 UTC (rev 90497)
@@ -30,6 +30,7 @@
#ifndef ClipboardChromium_h
#define ClipboardChromium_h
+#include "ChromiumDataObject.h"
#include "Clipboard.h"
#include "CachedResourceClient.h"
@@ -59,6 +60,7 @@
void clearAllData();
String getData(const String& type, bool& success) const;
bool setData(const String& type, const String& data);
+ bool platformClipboardChanged() const;
// extensions beyond IE's API
virtual HashSet<String> types() const;
@@ -91,6 +93,8 @@
void setDragImage(CachedImage*, Node*, const IntPoint&);
RefPtr<ChromiumDataObject> m_dataObject;
Frame* m_frame;
+
+ uint64_t m_originalSequenceNumber;
};
} // namespace WebCore
Modified: trunk/Source/WebCore/platform/chromium/DataTransferItemChromium.cpp (90496 => 90497)
--- trunk/Source/WebCore/platform/chromium/DataTransferItemChromium.cpp 2011-07-06 21:10:43 UTC (rev 90496)
+++ trunk/Source/WebCore/platform/chromium/DataTransferItemChromium.cpp 2011-07-06 21:13:19 UTC (rev 90497)
@@ -35,6 +35,7 @@
#include "Blob.h"
#include "Clipboard.h"
+#include "ClipboardChromium.h"
#include "ClipboardMimeTypes.h"
#include "PlatformBridge.h"
#include "SharedBuffer.h"
@@ -78,6 +79,10 @@
if ((owner()->policy() != ClipboardReadable && owner()->policy() != ClipboardWritable)
|| kind() != kindString)
return;
+
+ if (static_cast<ClipboardChromium*>(owner())->platformClipboardChanged())
+ return;
+
if (m_source == InternalSource) {
callback->scheduleCallback(m_context, m_data);
return;
@@ -104,6 +109,9 @@
if (m_source == InternalSource)
return 0;
+ if (static_cast<ClipboardChromium*>(owner())->platformClipboardChanged())
+ return 0;
+
ASSERT(m_source == PasteboardSource);
if (type() == mimeTypeImagePng) {
// FIXME: This is pretty inefficient. We copy the data from the browser
Modified: trunk/Source/WebCore/platform/chromium/PlatformBridge.h (90496 => 90497)
--- trunk/Source/WebCore/platform/chromium/PlatformBridge.h 2011-07-06 21:10:43 UTC (rev 90496)
+++ trunk/Source/WebCore/platform/chromium/PlatformBridge.h 2011-07-06 21:13:19 UTC (rev 90497)
@@ -99,6 +99,7 @@
static String clipboardReadPlainText(PasteboardPrivate::ClipboardBuffer);
static void clipboardReadHTML(PasteboardPrivate::ClipboardBuffer, String*, KURL*);
static PassRefPtr<SharedBuffer> clipboardReadImage(PasteboardPrivate::ClipboardBuffer);
+ static uint64_t clipboardGetSequenceNumber();
// Only the clipboardRead functions take a buffer argument because
// Chromium currently uses a different technique to write to alternate
Modified: trunk/Source/WebKit/chromium/ChangeLog (90496 => 90497)
--- trunk/Source/WebKit/chromium/ChangeLog 2011-07-06 21:10:43 UTC (rev 90496)
+++ trunk/Source/WebKit/chromium/ChangeLog 2011-07-06 21:13:19 UTC (rev 90497)
@@ -1,3 +1,15 @@
+2011-06-30 Cris Neckar <[email protected]>
+
+ Reviewed by Darin Fisher.
+
+ Add versioning to Chromium clipboard and prevent polling from inside events.
+ https://bugs.webkit.org/show_bug.cgi?id=63738
+
+ * public/WebClipboard.h:
+ (WebKit::WebClipboard::getSequenceNumber):
+ * src/PlatformBridge.cpp:
+ (WebCore::PlatformBridge::clipboardGetSequenceNumber):
+
2011-07-06 Ryosuke Niwa <[email protected]>
Rolled DEPS.
Modified: trunk/Source/WebKit/chromium/public/WebClipboard.h (90496 => 90497)
--- trunk/Source/WebKit/chromium/public/WebClipboard.h 2011-07-06 21:10:43 UTC (rev 90496)
+++ trunk/Source/WebKit/chromium/public/WebClipboard.h 2011-07-06 21:13:19 UTC (rev 90497)
@@ -66,6 +66,10 @@
virtual WebString readHTML(Buffer, WebURL*) { return WebString(); }
virtual WebData readImage(Buffer) { return WebData(); }
+ // Returns an identifier which can be used to determine whether the data
+ // contained within the clipboard has changed.
+ virtual uint64 getSequenceNumber() { return 0; }
+
virtual void writePlainText(const WebString&) { }
virtual void writeHTML(
const WebString& htmlText, const WebURL&,
Modified: trunk/Source/WebKit/chromium/src/PlatformBridge.cpp (90496 => 90497)
--- trunk/Source/WebKit/chromium/src/PlatformBridge.cpp 2011-07-06 21:10:43 UTC (rev 90496)
+++ trunk/Source/WebKit/chromium/src/PlatformBridge.cpp 2011-07-06 21:13:19 UTC (rev 90497)
@@ -180,6 +180,11 @@
return webKitClient()->clipboard()->readImage(static_cast<WebClipboard::Buffer>(buffer));
}
+uint64_t PlatformBridge::clipboardGetSequenceNumber()
+{
+ return webKitClient()->clipboard()->getSequenceNumber();
+}
+
void PlatformBridge::clipboardWriteSelection(const String& htmlText,
const KURL& sourceURL,
const String& plainText,