Title: [87656] trunk/Source/WebKit2
- Revision
- 87656
- Author
- [email protected]
- Date
- 2011-05-29 17:19:45 -0700 (Sun, 29 May 2011)
Log Message
2011-05-29 Darin Adler <[email protected]>
Reviewed by Dan Bernstein.
Race condition in full screen controller, which leads to problem when web process crashes
https://bugs.webkit.org/show_bug.cgi?id=61707
Second try at this. First try could lead to a WKView leak.
* UIProcess/mac/WKFullScreenWindowController.h: Added _isExitingAcceleratedCompositingMode.
Needed to track whether we have retained so we don't leak if the page goes away before
we get the callback.
* UIProcess/mac/WKFullScreenWindowController.mm:
(-[WKFullScreenWindowController exitAcceleratedCompositingMode]): Added code to set
the new variable to YES.
(-[WKFullScreenWindowController exitCompositedModeRepaintCompleted]): Added code to
deal with the new boolean and to release.
(exitCompositedModeRepaintCompleted): Removed the release that was here.
(-[WKFullScreenWindowController close]): Added a call to exitCompositedModeRepaintCompleted
here. We're as complete as we'll ever be when we're closed; we can't get the callback
after that point.
Modified Paths
Diff
Modified: trunk/Source/WebKit2/ChangeLog (87655 => 87656)
--- trunk/Source/WebKit2/ChangeLog 2011-05-30 00:00:34 UTC (rev 87655)
+++ trunk/Source/WebKit2/ChangeLog 2011-05-30 00:19:45 UTC (rev 87656)
@@ -1,3 +1,26 @@
+2011-05-29 Darin Adler <[email protected]>
+
+ Reviewed by Dan Bernstein.
+
+ Race condition in full screen controller, which leads to problem when web process crashes
+ https://bugs.webkit.org/show_bug.cgi?id=61707
+
+ Second try at this. First try could lead to a WKView leak.
+
+ * UIProcess/mac/WKFullScreenWindowController.h: Added _isExitingAcceleratedCompositingMode.
+ Needed to track whether we have retained so we don't leak if the page goes away before
+ we get the callback.
+
+ * UIProcess/mac/WKFullScreenWindowController.mm:
+ (-[WKFullScreenWindowController exitAcceleratedCompositingMode]): Added code to set
+ the new variable to YES.
+ (-[WKFullScreenWindowController exitCompositedModeRepaintCompleted]): Added code to
+ deal with the new boolean and to release.
+ (exitCompositedModeRepaintCompleted): Removed the release that was here.
+ (-[WKFullScreenWindowController close]): Added a call to exitCompositedModeRepaintCompleted
+ here. We're as complete as we'll ever be when we're closed; we can't get the callback
+ after that point.
+
2011-05-29 Sam Weinig <[email protected]>
Reviewed by Anders Carlsson.
Modified: trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.h (87655 => 87656)
--- trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.h 2011-05-30 00:00:34 UTC (rev 87655)
+++ trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.h 2011-05-30 00:19:45 UTC (rev 87656)
@@ -51,6 +51,7 @@
BOOL _isWindowLoaded;
BOOL _forceDisableAnimation;
BOOL _isPlaying;
+ BOOL _isExitingAcceleratedCompositingMode;
CGRect _initialFrame;
uint32_t _idleDisplaySleepAssertion;
uint32_t _idleSystemSleepAssertion;
Modified: trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm (87655 => 87656)
--- trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm 2011-05-30 00:00:34 UTC (rev 87655)
+++ trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm 2011-05-30 00:19:45 UTC (rev 87656)
@@ -394,13 +394,23 @@
if (!_layerHostingView)
return;
+ ASSERT(!_isExitingAcceleratedCompositingMode);
+ if (_isExitingAcceleratedCompositingMode)
+ return;
+
+ [self retain]; // Balanced by release in exitCompositedModeRepaintCompleted below.
+ _isExitingAcceleratedCompositingMode = YES;
+
NSDisableScreenUpdates();
- [self retain]; // Balanced by release in exitCompositedModeRepaintCompleted below.
[self _page]->forceRepaint(VoidCallback::create(self, exitCompositedModeRepaintCompleted));
}
- (void)exitCompositedModeRepaintCompleted
-{
+{
+ ASSERT(_isExitingAcceleratedCompositingMode);
+ if (!_isExitingAcceleratedCompositingMode)
+ return;
+
[CATransaction begin];
[CATransaction setDisableActions:YES];
[_layerHostingView.get() removeFromSuperview];
@@ -411,13 +421,14 @@
_layerHostingView = 0;
NSEnableScreenUpdates();
+
+ _isExitingAcceleratedCompositingMode = NO;
+ [self release]; // Balanced by retain in exitAcceleratedCompositingMode above.
}
static void exitCompositedModeRepaintCompleted(WKErrorRef, void* context)
{
- WKFullScreenWindowController *controller = static_cast<WKFullScreenWindowController *>(context);
- [controller exitCompositedModeRepaintCompleted];
- [controller release]; // Balanced by retain in exitAcceleratedCompositingMode above.
+ [static_cast<WKFullScreenWindowController *>(context) exitCompositedModeRepaintCompleted];
}
- (WebCore::IntRect)getFullScreenRect
@@ -439,6 +450,9 @@
if (_isExitingFullScreen)
[self finishedExitFullScreenAnimation:YES];
+ if (_isExitingAcceleratedCompositingMode)
+ [self exitCompositedModeRepaintCompleted];
+
[super close];
}
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes