WebKit editing throws exception when monochrome color dragged onto text
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 22 Dec 2011 10:19:42 +0000 (10:19 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 22 Dec 2011 10:19:42 +0000 (10:19 +0000)
https://bugs.webkit.org/show_bug.cgi?id=74775

Patch by Daniel Jalkut <jalkut@red-sweater.com> on 2011-12-22
Reviewed by Ryosuke Niwa.

.:

* ManualTests/drag-color-to-contenteditable.html: Added.

Source/WebCore:

Handle non-RGB colorspace colors in the Mac platform drag manager. Fixes NSException thrown
when dragging monochrome colors to contentEditable regions.

Manual test added to trunk/ManualTests/drag-color-to-contenteditable.html

* platform/mac/DragDataMac.mm:
(WebCore::DragData::asColor):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@103507 268f45cc-cd09-0410-ab3c-d52691b4dbfc

ChangeLog
ManualTests/drag-color-to-contenteditable.html [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/platform/mac/DragDataMac.mm

index 2d99dde..ec6a555 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2011-12-22  Daniel Jalkut  <jalkut@red-sweater.com>
+
+        WebKit editing throws exception when monochrome color dragged onto text
+        https://bugs.webkit.org/show_bug.cgi?id=74775
+
+        Reviewed by Ryosuke Niwa.
+
+        * ManualTests/drag-color-to-contenteditable.html: Added.
+
 2011-12-21  Daniel Bates  <dbates@webkit.org>
 
         Add CMake option to only build JavaScriptCore
diff --git a/ManualTests/drag-color-to-contenteditable.html b/ManualTests/drag-color-to-contenteditable.html
new file mode 100644 (file)
index 0000000..d0c74b3
--- /dev/null
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+<body>
+<p><b>BUG ID:</b> <a href="https://bugs.webkit.org/show_bug.cgi?id=74775">74775</a> WebKit editing throws exception when monochrome color dragged onto text</p>
+
+<p id="test" style="background-color:skyblue; padding:3px;"><b>STEPS TO TEST:</b> 
+<ol>
+<li>Open a color panel in any app, such as TextEdit.app.</li>
+<li>Select some text in the editable region below.</li>
+<li>Drag a color swatch for a monochrome color, e.g. a gray from the grayscale slider of the color panel, to the selected text.</li>
+</ol>
+</p>
+
+<p id="success" style="background-color:palegreen; padding:3px;"><b>TEST PASS:</b> 
+If the color changes to the desired gray, and the drag appears to be accepted, the test passes.
+</p>
+
+<p id="failure" style="background-color:#FF3300; padding:3px;"><b>TEST FAIL:</b>  
+If the color change does not apply to the text, and the drag appears to bounce back, then the bug is probably occurring. The bug can be confirmed by looking for evidence of an uncaught exception in the system console log.
+</p>
+
+<div contentEditable="true">Select this text and drag a grayscale color to it.</div>
+
+</body>
+</html>
index 65c4021..b04298c 100644 (file)
@@ -1,3 +1,18 @@
+2011-12-22  Daniel Jalkut  <jalkut@red-sweater.com>
+
+        WebKit editing throws exception when monochrome color dragged onto text
+        https://bugs.webkit.org/show_bug.cgi?id=74775
+
+        Reviewed by Ryosuke Niwa.
+
+        Handle non-RGB colorspace colors in the Mac platform drag manager. Fixes NSException thrown 
+        when dragging monochrome colors to contentEditable regions.
+
+        Manual test added to trunk/ManualTests/drag-color-to-contenteditable.html
+
+        * platform/mac/DragDataMac.mm:
+        (WebCore::DragData::asColor):
+
 2011-12-22  Peter Rybin  <peter.rybin@gmail.com>
 
         Web Inspector: CodeGeneratorInspector.py: generate anonymous types.
index 294eebb..fd9f60a 100644 (file)
@@ -112,6 +112,12 @@ String DragData::asPlainText(Frame *frame) const
 Color DragData::asColor() const
 {
     NSColor *color = [NSColor colorFromPasteboard:m_pasteboard.get()];
+    
+    // The color may not be in an RGB colorspace. This commonly occurs when a color is 
+    // dragged from the NSColorPanel grayscale picker.
+    if ([[color colorSpace] colorSpaceModel] != NSRGBColorSpaceModel)
+        color = [color colorUsingColorSpaceName:NSCalibratedRGBColorSpace];
+    
     return makeRGBA((int)([color redComponent] * 255.0 + 0.5), (int)([color greenComponent] * 255.0 + 0.5), 
                     (int)([color blueComponent] * 255.0 + 0.5), (int)([color alphaComponent] * 255.0 + 0.5));
 }