https://bugs.webkit.org/show_bug.cgi?id=142985
Reviewed by Anders Carlsson.
* Shared/mac/ActionMenuHitTestResult.h:
* Shared/mac/ActionMenuHitTestResult.mm:
(WebKit::ActionMenuHitTestResult::encode):
(WebKit::ActionMenuHitTestResult::decode):
* WebProcess/WebPage/mac/WebPageMac.mm:
(WebKit::WebPage::performActionMenuHitTestAtLocation):
Send the size of the image separately from the SharedMemory.
The SharedMemory's size can be rounded up, so we need to keep the original
size around in order to write the data to disk.
* UIProcess/mac/WKActionMenuController.mm:
(-[WKActionMenuController _hitTestResultImage]):
(-[WKActionMenuController _addImageToPhotos:]):
Use the image size instead of the SharedMemory size.
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@181874
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2015-03-23 Tim Horton <timothy_horton@apple.com>
+
+ Images shared to photos via action menu are padded with zeroes at the end
+ https://bugs.webkit.org/show_bug.cgi?id=142985
+
+ Reviewed by Anders Carlsson.
+
+ * Shared/mac/ActionMenuHitTestResult.h:
+ * Shared/mac/ActionMenuHitTestResult.mm:
+ (WebKit::ActionMenuHitTestResult::encode):
+ (WebKit::ActionMenuHitTestResult::decode):
+ * WebProcess/WebPage/mac/WebPageMac.mm:
+ (WebKit::WebPage::performActionMenuHitTestAtLocation):
+ Send the size of the image separately from the SharedMemory.
+ The SharedMemory's size can be rounded up, so we need to keep the original
+ size around in order to write the data to disk.
+
+ * UIProcess/mac/WKActionMenuController.mm:
+ (-[WKActionMenuController _hitTestResultImage]):
+ (-[WKActionMenuController _addImageToPhotos:]):
+ Use the image size instead of the SharedMemory size.
+
2015-03-23 Enrica Casucci <enrica@apple.com>
[iOS] WebContent crash attempting to select text with a gesture at RenderObject::absoluteBoundingBoxRect.
String lookupText;
RefPtr<SharedMemory> imageSharedMemory;
+ uint64_t imageSize;
String imageExtension;
RetainPtr<DDActionContext> actionContext;
encoder << imageExtension;
SharedMemory::Handle imageHandle;
- if (imageSharedMemory && imageSharedMemory->size())
+ if (imageSharedMemory && imageSharedMemory->data())
imageSharedMemory->createHandle(imageHandle, SharedMemory::ReadOnly);
encoder << imageHandle;
+ encoder << imageSize;
bool hasActionContext = actionContext;
encoder << hasActionContext;
if (!imageHandle.isNull())
actionMenuHitTestResult.imageSharedMemory = SharedMemory::create(imageHandle, SharedMemory::ReadOnly);
+ if (!decoder.decode(actionMenuHitTestResult.imageSize))
+ return false;
+
bool hasActionContext;
if (!decoder.decode(hasActionContext))
return false;
if (!imageSharedMemory)
return nil;
- RetainPtr<NSImage> nsImage = adoptNS([[NSImage alloc] initWithData:[NSData dataWithBytes:imageSharedMemory->data() length:imageSharedMemory->size()]]);
+ RetainPtr<NSImage> nsImage = adoptNS([[NSImage alloc] initWithData:[NSData dataWithBytes:imageSharedMemory->data() length:_hitTestResult.imageSize]]);
return nsImage.autorelease();
}
return;
RefPtr<SharedMemory> imageSharedMemory = _hitTestResult.imageSharedMemory;
- if (!imageSharedMemory->size() || _hitTestResult.imageExtension.isEmpty())
+ if (!imageSharedMemory->data() || _hitTestResult.imageExtension.isEmpty() || !_hitTestResult.imageSize)
return;
- RetainPtr<NSData> imageData = adoptNS([[NSData alloc] initWithBytes:imageSharedMemory->data() length:imageSharedMemory->size()]);
+ RetainPtr<NSData> imageData = adoptNS([[NSData alloc] initWithBytes:imageSharedMemory->data() length:_hitTestResult.imageSize]);
RetainPtr<NSString> suggestedFilename = [[[NSProcessInfo processInfo] globallyUniqueString] stringByAppendingPathExtension:_hitTestResult.imageExtension];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
actionMenuResult.imageSharedMemory = SharedMemory::create(buffer->size());
memcpy(actionMenuResult.imageSharedMemory->data(), buffer->data(), buffer->size());
actionMenuResult.imageExtension = imageExtension;
+ actionMenuResult.imageSize = buffer->size();
}
}
}