Title: [131763] branches/chromium/1271
Revision
131763
Author
[email protected]
Date
2012-10-18 09:55:46 -0700 (Thu, 18 Oct 2012)

Log Message

Merge 129962 - REGRESSION(r122215) - CachedImage::likelyToBeUsedSoon crashes on accessing a deleted CachedImageClient
BUG=151424
Review URL: https://codereview.chromium.org/11194057

Modified Paths

Added Paths

Diff

Copied: branches/chromium/1271/ManualTests/drag-image-no-crash.html (from rev 129962, trunk/ManualTests/drag-image-no-crash.html) (0 => 131763)


--- branches/chromium/1271/ManualTests/drag-image-no-crash.html	                        (rev 0)
+++ branches/chromium/1271/ManualTests/drag-image-no-crash.html	2012-10-18 16:55:46 UTC (rev 131763)
@@ -0,0 +1,87 @@
+<html>
+<body>
+<script>
+// This is a 10x10 24-bits RGB BMP image in white.
+var imageString =
+"Qk12AQAAAAAAADYAAAAoAAAACgAAAAoAAAABABgAAAAAAEABAAATCwAAEwsAAAAAAAAAAAAAAAAA" +
+"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" +
+"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" +
+"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" +
+"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" +
+"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" +
+"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=";
+
+// Raw image byets.
+var imageRaw = window.atob(imageString).split("");
+
+// 10x10x3 bytes are image data.
+var pixelBytes = 300;
+var beginByte = imageRaw.length - pixelBytes;
+
+function generateNewImage()
+{
+    // Add 1 to image data.
+    for (var i = beginByte; i < imageRaw.length; ++i) {
+        var c = imageRaw[i].charCodeAt(0);
+        if (c == 255) {
+            imageRaw[i] = String.fromCharCode(0);
+        } else {
+            imageRaw[i] = String.fromCharCode(c+1);
+            break;
+        }
+    }
+
+    var bmpImage = new Image();
+    bmpImage.src = "" + window.btoa(imageRaw.join(""));
+    return bmpImage;
+}
+
+var imageCount = 0;
+function addImage()
+{
+    if (imageCount >= 1000 * 1000)
+        return;
+    document.getElementById("imageCanvas").appendChild(generateNewImage());
+    window.setTimeout("addImage()", 1);
+}
+
+function runTest()
+{
+    document.getElementById("dragFrame").contentWindow.location.href =
+        "about:blank";
+    addImage();
+}
+</script>
+<p>To run this test:</p>
+<p>1. Drag this text 10 times:
+   <iframe id="dragFrame" width="50" height="30">.</iframe></p>
+<p>2. Click this <button _onclick_="runTest();">Start</button> button.</p>
+<p>3. Let it run for 5 minutes and browser shouldn't crash.</p>
+<div id="imageCanvas"></div>
+
+<script>
+// Write this content to the iframe.
+var content =
+    "<" + "body" + ">" +
+    "<" + "script" + ">" +
+    "function dragStartHandler()" +
+    "{" +
+    "    var img = new Image();" +
+    "    img.src = '';" +
+    "    event.dataTransfer.setDragImage(img, 10, 10);" +
+    "}" +
+    "</" + "script" + ">" +
+    "<span _ondragstart_='dragStartHandler()'" +
+    "      style='-webkit-user-select:none;" +
+    "             -webkit-user-drag: element;" +
+    "             position: absolute; top: 0; left: 0;" +
+    "             background-color: blue;'>HERE</span>" +
+    "</" + "body" + ">";
+
+var doc = document.getElementById("dragFrame");
+doc.contentDocument.open();
+doc.contentDocument.write(content);
+doc.contentDocument.close();
+</script>
+</body>
+</html>

Modified: branches/chromium/1271/Source/WebCore/platform/chromium/ClipboardChromium.cpp (131762 => 131763)


--- branches/chromium/1271/Source/WebCore/platform/chromium/ClipboardChromium.cpp	2012-10-18 16:53:15 UTC (rev 131762)
+++ branches/chromium/1271/Source/WebCore/platform/chromium/ClipboardChromium.cpp	2012-10-18 16:55:46 UTC (rev 131763)
@@ -227,6 +227,8 @@
 
 ClipboardChromium::~ClipboardChromium()
 {
+    if (m_dragImage)
+        m_dragImage->removeClient(this);
 }
 
 PassRefPtr<ClipboardChromium> ClipboardChromium::create(ClipboardType clipboardType,

Modified: branches/chromium/1271/Source/WebCore/platform/mac/ClipboardMac.mm (131762 => 131763)


--- branches/chromium/1271/Source/WebCore/platform/mac/ClipboardMac.mm	2012-10-18 16:53:15 UTC (rev 131762)
+++ branches/chromium/1271/Source/WebCore/platform/mac/ClipboardMac.mm	2012-10-18 16:55:46 UTC (rev 131763)
@@ -65,6 +65,8 @@
 
 ClipboardMac::~ClipboardMac()
 {
+    if (m_dragImage)
+        m_dragImage->removeClient(this);
 }
 
 bool ClipboardMac::hasData()

Modified: branches/chromium/1271/Source/WebCore/platform/win/ClipboardWin.cpp (131762 => 131763)


--- branches/chromium/1271/Source/WebCore/platform/win/ClipboardWin.cpp	2012-10-18 16:53:15 UTC (rev 131762)
+++ branches/chromium/1271/Source/WebCore/platform/win/ClipboardWin.cpp	2012-10-18 16:55:46 UTC (rev 131763)
@@ -355,6 +355,8 @@
 
 ClipboardWin::~ClipboardWin()
 {
+    if (m_dragImage)
+        m_dragImage->removeClient(this);
 }
 
 static bool writeURL(WCDataObject *data, const KURL& url, String title, bool withPlainText, bool withHTML)
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to