Title: [104530] trunk
Revision
104530
Author
[email protected]
Date
2012-01-09 18:14:33 -0800 (Mon, 09 Jan 2012)

Log Message

-[DOMRange renderedImageForcingBlackText:] fails with non-user-selectable text
https://bugs.webkit.org/show_bug.cgi?id=75920

Reviewed by Darin Adler.

Source/WebCore: 

Test: added to TestWebKitAPI/Tests/mac/RenderedImageFromDOMRange.mm

* page/mac/FrameMac.mm:
(WebCore::Frame::rangeImage): Removed the requirement that the start and end positions used
for setting the selection in the render tree be candidates.

Tools: 

* TestWebKitAPI/Tests/mac/RenderedImageFromDOMRange.mm:
(TestWebKitAPI::TEST): Added a test for a range in a
-webkit-user-select: none; block.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (104529 => 104530)


--- trunk/Source/WebCore/ChangeLog	2012-01-10 02:12:05 UTC (rev 104529)
+++ trunk/Source/WebCore/ChangeLog	2012-01-10 02:14:33 UTC (rev 104530)
@@ -1,3 +1,16 @@
+2012-01-09  Dan Bernstein  <[email protected]>
+
+        -[DOMRange renderedImageForcingBlackText:] fails with non-user-selectable text
+        https://bugs.webkit.org/show_bug.cgi?id=75920
+
+        Reviewed by Darin Adler.
+
+        Test: added to TestWebKitAPI/Tests/mac/RenderedImageFromDOMRange.mm
+
+        * page/mac/FrameMac.mm:
+        (WebCore::Frame::rangeImage): Removed the requirement that the start and end positions used
+        for setting the selection in the render tree be candidates.
+
 2012-01-06  Hajime Morrita  <[email protected]>
 
         [Refactoring] Moving between TreeScopes should be done by its own class.

Modified: trunk/Source/WebCore/page/mac/FrameMac.mm (104529 => 104530)


--- trunk/Source/WebCore/page/mac/FrameMac.mm	2012-01-10 02:12:05 UTC (rev 104529)
+++ trunk/Source/WebCore/page/mac/FrameMac.mm	2012-01-10 02:14:33 UTC (rev 104530)
@@ -113,21 +113,17 @@
     if (!view)
         return nil;
 
-    VisibleSelection visibleSelection(range);
-
-    if (!visibleSelection.isRange())
-        return nil;
-
-    Position start = visibleSelection.start();
+    Position start = range->startPosition();
     Position candidate = start.downstream();
-    if (candidate.isCandidate())
+    if (candidate.deprecatedNode() && candidate.deprecatedNode()->renderer())
         start = candidate;
-    Position end = visibleSelection.end();
+
+    Position end = range->endPosition();
     candidate = end.upstream();
-    if (candidate.isCandidate())
+    if (candidate.deprecatedNode() && candidate.deprecatedNode()->renderer())
         end = candidate;
 
-    if (start.isNull() || end.isNull() || visibleSelection.visibleStart() == visibleSelection.visibleEnd())
+    if (start.isNull() || end.isNull() || start == end)
         return nil;
 
     RenderObject* savedStartRenderer;
@@ -137,7 +133,12 @@
     view->getSelection(savedStartRenderer, savedStartOffset, savedEndRenderer, savedEndOffset);
 
     RenderObject* startRenderer = start.deprecatedNode()->renderer();
+    if (!startRenderer)
+        return nil;
+
     RenderObject* endRenderer = end.deprecatedNode()->renderer();
+    if (!endRenderer)
+        return nil;
 
     view->setSelection(startRenderer, start.deprecatedEditingOffset(), endRenderer, end.deprecatedEditingOffset(), RenderView::RepaintNothing);
     NSImage* result = imageFromRect(view->selectionBounds());

Modified: trunk/Tools/ChangeLog (104529 => 104530)


--- trunk/Tools/ChangeLog	2012-01-10 02:12:05 UTC (rev 104529)
+++ trunk/Tools/ChangeLog	2012-01-10 02:14:33 UTC (rev 104530)
@@ -1,3 +1,14 @@
+2012-01-09  Dan Bernstein  <[email protected]>
+
+        -[DOMRange renderedImageForcingBlackText:] fails with non-user-selectable text
+        https://bugs.webkit.org/show_bug.cgi?id=75920
+
+        Reviewed by Darin Adler.
+
+        * TestWebKitAPI/Tests/mac/RenderedImageFromDOMRange.mm:
+        (TestWebKitAPI::TEST): Added a test for a range in a
+        -webkit-user-select: none; block.
+
 2012-01-09  Dirk Pranke  <[email protected]>
 
         webkitpy.layout_tests.port.mock_drt_unittest.MockChromiumDRTTest has been failing on cr-win

Modified: trunk/Tools/TestWebKitAPI/Tests/mac/RenderedImageFromDOMRange.mm (104529 => 104530)


--- trunk/Tools/TestWebKitAPI/Tests/mac/RenderedImageFromDOMRange.mm	2012-01-10 02:12:05 UTC (rev 104529)
+++ trunk/Tools/TestWebKitAPI/Tests/mac/RenderedImageFromDOMRange.mm	2012-01-10 02:14:33 UTC (rev 104530)
@@ -58,13 +58,18 @@
 
     DOMDocument *document = webView.get().mainFrameDocument;
     DOMRange *range = [document createRange];
-    [range selectNode:[document getElementById:@"target"]];
+    DOMNode *target = [document getElementById:@"target"];
+    [range selectNode:target];
     NSImage *actualImage = [range renderedImageForcingBlackText:YES];
 
     [webView.get() setSelectedDOMRange:range affinity:NSSelectionAffinityDownstream];
     id <WebDocumentView> documentView = webView.get().mainFrame.frameView.documentView;
     NSImage *expectedImage = [(id <WebDocumentSelection>)documentView selectionImageForcingBlackText:YES];
     EXPECT_TRUE([actualImage.TIFFRepresentation isEqual:expectedImage.TIFFRepresentation]);
+
+    [target.parentElement.style setProperty:@"-webkit-user-select" value:@"none" priority:nil];
+    NSImage *actualImageWithUserSelectNone = [range renderedImageForcingBlackText:YES];
+    EXPECT_TRUE([actualImageWithUserSelectNone.TIFFRepresentation isEqual:expectedImage.TIFFRepresentation]);
 }
 
 } // namespace TestWebKitAPI
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to