+2014-08-27 Tim Horton <timothy_horton@apple.com>
+
+ Occasional crashes in commitTransientZoom's transaction completion block
+ https://bugs.webkit.org/show_bug.cgi?id=136309
+ <rdar://problem/17215064>
+
+ Reviewed by Dan Bernstein.
+
+ * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
+ (WebKit::TiledCoreAnimationDrawingArea::commitTransientZoom):
+ Hold a reference to zoomLayer and the WebPage. It's possible that either
+ of these things could have gone away by the time the transaction is committed.
+
2014-08-27 Benjamin Poulain <bpoulain@apple.com>
[iOS WK2] Provide a delegate callback to skip Geolocation authorization per page for WebApp
if (PlatformCALayer* shadowLayer = shadowLayerForTransientZoom())
shadowCALayer = shadowLayer->platformLayer();
- PlatformCALayer* zoomLayer = layerForTransientZoom();
+ RefPtr<PlatformCALayer> zoomLayer = layerForTransientZoom();
+ RefPtr<WebPage> page = &m_webPage;
[CATransaction begin];
- [CATransaction setCompletionBlock:^(void) {
+ [CATransaction setCompletionBlock:[zoomLayer, shadowCALayer, page, scale, origin] () {
zoomLayer->removeAnimationForKey("transientZoomCommit");
if (shadowCALayer)
[shadowCALayer removeAllAnimations];
- applyTransientZoomToPage(scale, origin);
+
+ if (TiledCoreAnimationDrawingArea* drawingArea = static_cast<TiledCoreAnimationDrawingArea*>(page->drawingArea()))
+ drawingArea->applyTransientZoomToPage(scale, origin);
}];
zoomLayer->addAnimationForKey("transientZoomCommit", renderViewAnimation.get());