Title: [90497] trunk/Source
Revision
90497
Author
[email protected]
Date
2011-07-06 14:13:19 -0700 (Wed, 06 Jul 2011)

Log Message

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-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):

Modified Paths

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,
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to