[SCM] WebKit Debian packaging branch, webkit-1.3, updated. upstream/1.3.7-4207-g178b198

cfleizach at apple.com cfleizach at apple.com
Sun Feb 20 23:51:53 UTC 2011


The following commit has been merged in the webkit-1.3 branch:
commit 5a1914baebfa3569663afbdd3abcd710135caec4
Author: cfleizach at apple.com <cfleizach at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Jan 26 01:54:10 2011 +0000

    WK2 leaks when a page is closed
    https://bugs.webkit.org/show_bug.cgi?id=53100
    
    Reviewed by Darin Adler.
    
    Allow the WKView a chance to clean up on a page close. In this case,
    cleaning up means removing the references the accessibility token has
    to the window.
    
    * UIProcess/API/mac/PageClientImpl.h:
    * UIProcess/API/mac/PageClientImpl.mm:
    (WebKit::PageClientImpl::pageClosed):
    * UIProcess/API/mac/WKView.mm:
    (-[WKView _setRemoteAccessibilityWindow:]):
    (-[WKView _setAccessibilityChildToken:]):
    (-[WKView _processDidCrash]):
    (-[WKView _pageClosed]):
    * UIProcess/API/mac/WKViewInternal.h:
    * UIProcess/API/qt/qwkpage_p.h:
    (QWKPagePrivate::pageClosed):
    * UIProcess/PageClient.h:
    * UIProcess/WebPageProxy.cpp:
    (WebKit::WebPageProxy::close):
    * UIProcess/win/WebView.cpp:
    (WebKit::WebView::pageClosed):
    * UIProcess/win/WebView.h:
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@76657 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog
index f48a152..c7323bb 100644
--- a/Source/WebKit2/ChangeLog
+++ b/Source/WebKit2/ChangeLog
@@ -1,3 +1,32 @@
+2011-01-25  Chris Fleizach  <cfleizach at apple.com>
+
+        Reviewed by Darin Adler.
+
+        WK2 leaks when a page is closed
+        https://bugs.webkit.org/show_bug.cgi?id=53100
+
+        Allow the WKView a chance to clean up on a page close. In this case,
+        cleaning up means removing the references the accessibility token has
+        to the window.
+
+        * UIProcess/API/mac/PageClientImpl.h:
+        * UIProcess/API/mac/PageClientImpl.mm:
+        (WebKit::PageClientImpl::pageClosed):
+        * UIProcess/API/mac/WKView.mm:
+        (-[WKView _setRemoteAccessibilityWindow:]):
+        (-[WKView _setAccessibilityChildToken:]):
+        (-[WKView _processDidCrash]):
+        (-[WKView _pageClosed]):
+        * UIProcess/API/mac/WKViewInternal.h:
+        * UIProcess/API/qt/qwkpage_p.h:
+        (QWKPagePrivate::pageClosed):
+        * UIProcess/PageClient.h:
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::close):
+        * UIProcess/win/WebView.cpp:
+        (WebKit::WebView::pageClosed):
+        * UIProcess/win/WebView.h:
+
 2011-01-25  Chris Marrin  <cmarrin at apple.com>
 
         Reviewed by Adam Roben.
diff --git a/Source/WebKit2/UIProcess/API/mac/PageClientImpl.h b/Source/WebKit2/UIProcess/API/mac/PageClientImpl.h
index 625b8f6..7e087cf 100644
--- a/Source/WebKit2/UIProcess/API/mac/PageClientImpl.h
+++ b/Source/WebKit2/UIProcess/API/mac/PageClientImpl.h
@@ -60,6 +60,7 @@ private:
     virtual bool isViewInWindow();
     
     virtual void processDidCrash();
+    virtual void pageClosed();
     virtual void didRelaunchProcess();
     virtual void takeFocus(bool direction);
     virtual void toolTipChanged(const String& oldToolTip, const String& newToolTip);
diff --git a/Source/WebKit2/UIProcess/API/mac/PageClientImpl.mm b/Source/WebKit2/UIProcess/API/mac/PageClientImpl.mm
index 6eab7f6..c23d518 100644
--- a/Source/WebKit2/UIProcess/API/mac/PageClientImpl.mm
+++ b/Source/WebKit2/UIProcess/API/mac/PageClientImpl.mm
@@ -181,6 +181,11 @@ void PageClientImpl::processDidCrash()
 {
     [m_wkView _processDidCrash];
 }
+    
+void PageClientImpl::pageClosed()
+{
+    [m_wkView _pageClosed];
+}
 
 void PageClientImpl::didRelaunchProcess()
 {
diff --git a/Source/WebKit2/UIProcess/API/mac/WKView.mm b/Source/WebKit2/UIProcess/API/mac/WKView.mm
index 4277a90..a14be39 100644
--- a/Source/WebKit2/UIProcess/API/mac/WKView.mm
+++ b/Source/WebKit2/UIProcess/API/mac/WKView.mm
@@ -277,6 +277,13 @@ static bool useNewDrawingArea()
     return YES;
 }
 
+- (void)_setRemoteAccessibilityWindow:(id)window
+{
+#if !defined(BUILDING_ON_SNOW_LEOPARD)
+    WKAXInitializeRemoteElementWithWindow(_data->_remoteAccessibilityChild.get(), window);    
+#endif
+}
+
 - (void)setFrameSize:(NSSize)size
 {
     [super setFrameSize:size];
@@ -1193,6 +1200,7 @@ static void extractUnderlines(NSAttributedString *string, Vector<CompositionUnde
         _data->_page->viewStateDidChange(WebPageProxy::ViewWindowIsActive | WebPageProxy::ViewIsInWindow);
     }
 
+    [self _setRemoteAccessibilityWindow:[self window]];
 }
 
 - (void)_windowDidBecomeKey:(NSNotification *)notification
@@ -1300,7 +1308,7 @@ static void drawPageBackground(CGContextRef context, WebPageProxy* page, const I
 {
 #if !defined(BUILDING_ON_SNOW_LEOPARD)
     _data->_remoteAccessibilityChild = WKAXRemoteElementForToken((CFDataRef)data);
-    WKAXInitializeRemoteElementWithWindow(_data->_remoteAccessibilityChild.get(), [self window]);
+    [self _setRemoteAccessibilityWindow:[self window]];
 #endif
 }
 
@@ -1395,6 +1403,14 @@ static void drawPageBackground(CGContextRef context, WebPageProxy* page, const I
 - (void)_processDidCrash
 {
     [self setNeedsDisplay:YES];
+    [self _setRemoteAccessibilityWindow:nil];
+}
+
+- (void)_pageClosed
+{
+    // When the page closes, the references the accessibility child has to the window 
+    // need to be removed, otherwise it can leak.
+    [self _setRemoteAccessibilityWindow:nil];
 }
 
 - (void)_didRelaunchProcess
diff --git a/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h b/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h
index cba241d..655100d 100644
--- a/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h
+++ b/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h
@@ -36,6 +36,7 @@ namespace WebKit {
 - (PassOwnPtr<WebKit::DrawingAreaProxy>)_createDrawingAreaProxy;
 - (BOOL)_isFocused;
 - (void)_processDidCrash;
+- (void)_pageClosed;
 - (void)_didRelaunchProcess;
 - (void)_takeFocus:(BOOL)direction;
 - (void)_toolTipChangedFrom:(NSString *)oldToolTip to:(NSString *)newToolTip;
diff --git a/Source/WebKit2/UIProcess/API/qt/qwkpage_p.h b/Source/WebKit2/UIProcess/API/qt/qwkpage_p.h
index ec1a6a2..a9243c7 100644
--- a/Source/WebKit2/UIProcess/API/qt/qwkpage_p.h
+++ b/Source/WebKit2/UIProcess/API/qt/qwkpage_p.h
@@ -62,6 +62,7 @@ public:
 #endif // USE(ACCELERATED_COMPOSITING)
     virtual void pageDidRequestScroll(const WebCore::IntSize&);
     virtual void processDidCrash();
+    virtual void pageClosed() { }
     virtual void didRelaunchProcess();
     virtual void didChangeContentsSize(const WebCore::IntSize&);
     virtual void didFindZoomableArea(const WebCore::IntRect&);
diff --git a/Source/WebKit2/UIProcess/PageClient.h b/Source/WebKit2/UIProcess/PageClient.h
index e483aef..fcc5fb2 100644
--- a/Source/WebKit2/UIProcess/PageClient.h
+++ b/Source/WebKit2/UIProcess/PageClient.h
@@ -79,6 +79,7 @@ public:
     
     virtual void processDidCrash() = 0;
     virtual void didRelaunchProcess() = 0;
+    virtual void pageClosed() = 0;
 
     virtual void takeFocus(bool direction) = 0;
     virtual void toolTipChanged(const String&, const String&) = 0;
diff --git a/Source/WebKit2/UIProcess/WebPageProxy.cpp b/Source/WebKit2/UIProcess/WebPageProxy.cpp
index ab1ea33..2fd8f1a 100644
--- a/Source/WebKit2/UIProcess/WebPageProxy.cpp
+++ b/Source/WebKit2/UIProcess/WebPageProxy.cpp
@@ -254,6 +254,7 @@ void WebPageProxy::close()
     m_isClosed = true;
 
     m_backForwardList->pageClosed();
+    m_pageClient->pageClosed();
 
     process()->disconnectFramesFromPage(this);
     m_mainFrame = 0;
diff --git a/Source/WebKit2/UIProcess/win/WebView.cpp b/Source/WebKit2/UIProcess/win/WebView.cpp
index 4516f54..e94c8e4 100644
--- a/Source/WebKit2/UIProcess/win/WebView.cpp
+++ b/Source/WebKit2/UIProcess/win/WebView.cpp
@@ -626,6 +626,10 @@ bool WebView::isViewInWindow()
     return m_isInWindow;
 }
 
+void WebView::pageClosed()
+{
+}
+
 void WebView::processDidCrash()
 {
     updateNativeCursor();
diff --git a/Source/WebKit2/UIProcess/win/WebView.h b/Source/WebKit2/UIProcess/win/WebView.h
index dfb5ed1..31f6c45 100644
--- a/Source/WebKit2/UIProcess/win/WebView.h
+++ b/Source/WebKit2/UIProcess/win/WebView.h
@@ -116,6 +116,7 @@ private:
     virtual bool isViewInWindow();
     virtual void processDidCrash();
     virtual void didRelaunchProcess();
+    virtual void pageClosed();
     virtual void takeFocus(bool direction);
     virtual void toolTipChanged(const WTF::String&, const WTF::String&);
     virtual void setCursor(const WebCore::Cursor&);

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list