Title: [155153] trunk/Source/WebKit2
Revision
155153
Author
[email protected]
Date
2013-09-05 15:06:31 -0700 (Thu, 05 Sep 2013)

Log Message

        WKFullScreenWindowController extends lifetime of WKView, deleting it at a wrong time
        https://bugs.webkit.org/show_bug.cgi?id=120792
        <rdar://problem/14884666>

        Reviewed by Jer Noble.

        * UIProcess/API/mac/WKView.mm: (-[WKView fullScreenWindowController]):
        Use a newly minted initializer for the controller.

        * UIProcess/mac/WKFullScreenWindowController.h: Removed unused web view accessors.
        Changed the class to take web view at initialization time.

        * UIProcess/mac/WKFullScreenWindowController.mm:
        (-[WKFullScreenWindowController initWithWindow:webView:]): Initialize the controller
        inone step.
        (-[WKFullScreenWindowController dealloc]): WebView is now a raw pointer, no need
        to zero it.
        (-[WKFullScreenWindowController close]): Make sure to not leave a dangling WKView
        pointer (this method is indirectly but inevitably called when WKView is deallocated).

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (155152 => 155153)


--- trunk/Source/WebKit2/ChangeLog	2013-09-05 21:52:25 UTC (rev 155152)
+++ trunk/Source/WebKit2/ChangeLog	2013-09-05 22:06:31 UTC (rev 155153)
@@ -1,3 +1,25 @@
+2013-09-05  Alexey Proskuryakov  <[email protected]>
+
+        WKFullScreenWindowController extends lifetime of WKView, deleting it at a wrong time
+        https://bugs.webkit.org/show_bug.cgi?id=120792
+        <rdar://problem/14884666>
+
+        Reviewed by Jer Noble.
+
+        * UIProcess/API/mac/WKView.mm: (-[WKView fullScreenWindowController]):
+        Use a newly minted initializer for the controller.
+
+        * UIProcess/mac/WKFullScreenWindowController.h: Removed unused web view accessors.
+        Changed the class to take web view at initialization time.
+
+        * UIProcess/mac/WKFullScreenWindowController.mm:
+        (-[WKFullScreenWindowController initWithWindow:webView:]): Initialize the controller
+        inone step.
+        (-[WKFullScreenWindowController dealloc]): WebView is now a raw pointer, no need
+        to zero it.
+        (-[WKFullScreenWindowController close]): Make sure to not leave a dangling WKView
+        pointer (this method is indirectly but inevitably called when WKView is deallocated).
+
 2013-09-05  Anders Carlsson  <[email protected]>
 
         Replace uses of CLANG_PRAGMA with #pragma

Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm (155152 => 155153)


--- trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm	2013-09-05 21:52:25 UTC (rev 155152)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm	2013-09-05 22:06:31 UTC (rev 155153)
@@ -2937,10 +2937,9 @@
 
 - (WKFullScreenWindowController*)fullScreenWindowController
 {
-    if (!_data->_fullScreenWindowController) {
-        _data->_fullScreenWindowController = adoptNS([[WKFullScreenWindowController alloc] initWithWindow:[self createFullScreenWindow]]);
-        [_data->_fullScreenWindowController.get() setWebView:self];
-    }
+    if (!_data->_fullScreenWindowController)
+        _data->_fullScreenWindowController = adoptNS([[WKFullScreenWindowController alloc] initWithWindow:[self createFullScreenWindow] webView:self]);
+
     return _data->_fullScreenWindowController.get();
 }
 

Modified: trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.h (155152 => 155153)


--- trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.h	2013-09-05 21:52:25 UTC (rev 155152)
+++ trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.h	2013-09-05 22:06:31 UTC (rev 155153)
@@ -46,7 +46,7 @@
 
 @interface WKFullScreenWindowController : NSWindowController<NSWindowDelegate> {
 @private
-    WKView *_webView;
+    WKView *_webView; // Cannot be retained, see <rdar://problem/14884666>.
     RetainPtr<WebCoreFullScreenPlaceholderView> _webViewPlaceholder;
     RetainPtr<WebWindowScaleAnimation> _scaleAnimation;
     RetainPtr<WebWindowFadeAnimation> _fadeAnimation;
@@ -60,8 +60,7 @@
     double _savedScale;
 }
 
-- (WKView*)webView;
-- (void)setWebView:(WKView*)webView;
+- (id)initWithWindow:(NSWindow *)window webView:(WKView *)webView;
 
 - (WebCoreFullScreenPlaceholderView*)webViewPlaceholder;
 

Modified: trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm (155152 => 155153)


--- trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm	2013-09-05 21:52:25 UTC (rev 155152)
+++ trunk/Source/WebKit2/UIProcess/mac/WKFullScreenWindowController.mm	2013-09-05 22:06:31 UTC (rev 155153)
@@ -89,7 +89,7 @@
 
 #pragma mark -
 #pragma mark Initialization
-- (id)initWithWindow:(NSWindow *)window
+- (id)initWithWindow:(NSWindow *)window webView:(WKView *)webView
 {
     self = [super initWithWindow:window];
     if (!self)
@@ -97,13 +97,13 @@
     [window setDelegate:self];
     [window setCollectionBehavior:([window collectionBehavior] | NSWindowCollectionBehaviorFullScreenPrimary)];
     [self windowDidLoad];
+    _webView = webView;
     
     return self;
 }
 
 - (void)dealloc
 {
-    [self setWebView:nil];
     [[self window] setDelegate:nil];
     
     [NSObject cancelPreviousPerformRequestsWithTarget:self];
@@ -122,18 +122,6 @@
 #pragma mark -
 #pragma mark Accessors
 
-- (WKView*)webView
-{
-    return _webView;
-}
-
-- (void)setWebView:(WKView *)webView
-{
-    [webView retain];
-    [_webView release];
-    _webView = webView;
-}
-
 - (BOOL)isFullScreen
 {
     return _fullScreenState == WaitingToEnterFullScreen
@@ -443,6 +431,8 @@
     if (_fullScreenState == ExitingFullScreen)
         [self finishedExitFullScreenAnimation:YES];
 
+    _webView = nil;
+
     [super close];
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to