Title: [202863] trunk/Source/WebCore
- Revision
- 202863
- Author
- [email protected]
- Date
- 2016-07-06 10:34:19 -0700 (Wed, 06 Jul 2016)
Log Message
Long spin editing text at top of message containing Reader version of web page with many GIFs
https://bugs.webkit.org/show_bug.cgi?id=159444
<rdar://problem/26790386>
Reviewed by Sam Weinig.
* editing/cocoa/HTMLConverter.mm:
(fileWrapperForElement):
Instead of looking up the image's data in the cache by URL, just use the
CachedImage on the HTMLImageElement. There are situations (which seem to involve
cloning the DOM then having the cloned DOM get garbage collected) where the image
can be removed from the cache, but still be live in the document.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (202862 => 202863)
--- trunk/Source/WebCore/ChangeLog 2016-07-06 17:19:20 UTC (rev 202862)
+++ trunk/Source/WebCore/ChangeLog 2016-07-06 17:34:19 UTC (rev 202863)
@@ -1,3 +1,18 @@
+2016-07-06 Tim Horton <[email protected]>
+
+ Long spin editing text at top of message containing Reader version of web page with many GIFs
+ https://bugs.webkit.org/show_bug.cgi?id=159444
+ <rdar://problem/26790386>
+
+ Reviewed by Sam Weinig.
+
+ * editing/cocoa/HTMLConverter.mm:
+ (fileWrapperForElement):
+ Instead of looking up the image's data in the cache by URL, just use the
+ CachedImage on the HTMLImageElement. There are situations (which seem to involve
+ cloning the DOM then having the cloned DOM get garbage collected) where the image
+ can be removed from the cache, but still be live in the document.
+
2016-07-06 Brady Eidson <[email protected]>
Hold RefPtr<>'s to UniqueIDBDatabases while performing user delete.
Modified: trunk/Source/WebCore/editing/cocoa/HTMLConverter.mm (202862 => 202863)
--- trunk/Source/WebCore/editing/cocoa/HTMLConverter.mm 2016-07-06 17:19:20 UTC (rev 202862)
+++ trunk/Source/WebCore/editing/cocoa/HTMLConverter.mm 2016-07-06 17:34:19 UTC (rev 202863)
@@ -317,7 +317,7 @@
#else
static NSFileWrapper *fileWrapperForURL(DocumentLoader *, NSURL *);
-static NSFileWrapper *fileWrapperForElement(HTMLImageElement&);
+static RetainPtr<NSFileWrapper> fileWrapperForElement(HTMLImageElement&);
@interface NSTextAttachment (WebCoreNSTextAttachment)
- (void)setIgnoresOrientation:(BOOL)flag;
@@ -2453,24 +2453,24 @@
return nil;
}
-static NSFileWrapper *fileWrapperForElement(HTMLImageElement& element)
+static RetainPtr<NSFileWrapper> fileWrapperForElement(HTMLImageElement& element)
{
- // FIXME: Should this use currentSrc instead of src?
- auto src = ""
- NSFileWrapper *wrapper = src.isEmpty() ? nil : fileWrapperForURL(element.document().loader(), src);
+ if (CachedImage* cachedImage = element.cachedImage()) {
+ if (SharedBuffer* sharedBuffer = cachedImage->resourceBuffer())
+ return adoptNS([[NSFileWrapper alloc] initRegularFileWithContents:sharedBuffer->createNSData().get()]);
+ }
- if (!wrapper) {
- auto* renderer = element.renderer();
- if (is<RenderImage>(renderer)) {
- auto* image = downcast<RenderImage>(*renderer).cachedImage();
- if (image && !image->errorOccurred()) {
- wrapper = [[[NSFileWrapper alloc] initRegularFileWithContents:(NSData *)image->imageForRenderer(renderer)->getTIFFRepresentation()] autorelease];
- [wrapper setPreferredFilename:@"image.tiff"];
- }
+ auto* renderer = element.renderer();
+ if (is<RenderImage>(renderer)) {
+ auto* image = downcast<RenderImage>(*renderer).cachedImage();
+ if (image && !image->errorOccurred()) {
+ RetainPtr<NSFileWrapper> wrapper = adoptNS([[NSFileWrapper alloc] initRegularFileWithContents:(NSData *)image->imageForRenderer(renderer)->getTIFFRepresentation()]);
+ [wrapper setPreferredFilename:@"image.tiff"];
+ return wrapper;
}
}
- return wrapper;
+ return nil;
}
#endif
@@ -2505,8 +2505,8 @@
if (&startContainer == &endContainer && (startOffset == endOffset - 1)) {
Node* node = startContainer.traverseToChildAt(startOffset);
if (is<HTMLImageElement>(node)) {
- auto fileWrapper = fileWrapperForElement(downcast<HTMLImageElement>(*node));
- NSTextAttachment *attachment = [[NSTextAttachment alloc] initWithFileWrapper:fileWrapper];
+ RetainPtr<NSFileWrapper> fileWrapper = fileWrapperForElement(downcast<HTMLImageElement>(*node));
+ NSTextAttachment *attachment = [[NSTextAttachment alloc] initWithFileWrapper:fileWrapper.get()];
[string appendAttributedString:[NSAttributedString attributedStringWithAttachment:attachment]];
[attachment release];
}
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes