[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.18-1-697-g2f78b87
aroben at apple.com
aroben at apple.com
Wed Jan 20 22:13:26 UTC 2010
The following commit has been merged in the debian/unstable branch:
commit 07222d331d012b1509cd49b0ed3ce96fda9f2930
Author: aroben at apple.com <aroben at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Tue Jan 5 23:07:21 2010 +0000
Make it safe to call IWebView::close when IWebView::initWithFrame hasn't been called
Part of <http://webkit.org/b/32827> Crash when calling
IWebView::close, then releasing the WebView, without calling
DestroyWindow
Reviewed by Steve Falkenburg.
WebKit/win:
* WebView.cpp:
(WebView::close): Null-check m_page and m_preferences before using
them. They will be null if initWithFrame was never called.
WebKitTools:
Test that it's safe to call IWebView::close when IWebView::initWithFrame
hasn't been called
* WebKitAPITest/tests/WebViewDestruction.cpp:
(WebKitAPITest::CloseWithoutInitWithFrame): Calls IWebView::close
without ever calling IWebView::initWithFrame and tests that we don't
crash or leak.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@52829 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebKit/win/ChangeLog b/WebKit/win/ChangeLog
index af1c1a5..67a3ff6 100644
--- a/WebKit/win/ChangeLog
+++ b/WebKit/win/ChangeLog
@@ -1,5 +1,20 @@
2010-01-05 Adam Roben <aroben at apple.com>
+ Make it safe to call IWebView::close when IWebView::initWithFrame
+ hasn't been called
+
+ Part of <http://webkit.org/b/32827> Crash when calling
+ IWebView::close, then releasing the WebView, without calling
+ DestroyWindow
+
+ Reviewed by Steve Falkenburg.
+
+ * WebView.cpp:
+ (WebView::close): Null-check m_page and m_preferences before using
+ them. They will be null if initWithFrame was never called.
+
+2010-01-05 Adam Roben <aroben at apple.com>
+
Add assertions to catch double-destruction of WebViews earlier
I basically copied the m_deletionHasBegun logic from WTF::RefCounted.
diff --git a/WebKit/win/WebView.cpp b/WebKit/win/WebView.cpp
index c5d59c0..f1f2d4e 100644
--- a/WebKit/win/WebView.cpp
+++ b/WebKit/win/WebView.cpp
@@ -635,9 +635,10 @@ HRESULT STDMETHODCALLTYPE WebView::close()
removeFromAllWebViewsSet();
- Frame* frame = m_page->mainFrame();
- if (frame)
- frame->loader()->detachFromParent();
+ if (m_page) {
+ if (Frame* frame = m_page->mainFrame())
+ frame->loader()->detachFromParent();
+ }
if (m_mouseOutTracker) {
m_mouseOutTracker->dwFlags = TME_CANCEL;
@@ -668,17 +669,18 @@ HRESULT STDMETHODCALLTYPE WebView::close()
IWebNotificationCenter* notifyCenter = WebNotificationCenter::defaultCenterInternal();
notifyCenter->removeObserver(this, WebPreferences::webPreferencesChangedNotification(), static_cast<IWebPreferences*>(m_preferences.get()));
- BSTR identifier = 0;
- m_preferences->identifier(&identifier);
-
- COMPtr<WebPreferences> preferences = m_preferences;
- m_preferences = 0;
- preferences->didRemoveFromWebView();
- // Make sure we release the reference, since WebPreferences::removeReferenceForIdentifier will check for last reference to WebPreferences
- preferences = 0;
- if (identifier) {
- WebPreferences::removeReferenceForIdentifier(identifier);
- SysFreeString(identifier);
+ if (COMPtr<WebPreferences> preferences = m_preferences) {
+ BSTR identifier = 0;
+ preferences->identifier(&identifier);
+
+ m_preferences = 0;
+ preferences->didRemoveFromWebView();
+ // Make sure we release the reference, since WebPreferences::removeReferenceForIdentifier will check for last reference to WebPreferences
+ preferences = 0;
+ if (identifier) {
+ WebPreferences::removeReferenceForIdentifier(identifier);
+ SysFreeString(identifier);
+ }
}
deleteBackingStore();
diff --git a/WebKitTools/ChangeLog b/WebKitTools/ChangeLog
index c759531..d33f4c0 100644
--- a/WebKitTools/ChangeLog
+++ b/WebKitTools/ChangeLog
@@ -1,5 +1,21 @@
2010-01-05 Adam Roben <aroben at apple.com>
+ Test that it's safe to call IWebView::close when
+ IWebView::initWithFrame hasn't been called
+
+ Part of <http://webkit.org/b/32827> Crash when calling
+ IWebView::close, then releasing the WebView, without calling
+ DestroyWindow
+
+ Reviewed by Steve Falkenburg.
+
+ * WebKitAPITest/tests/WebViewDestruction.cpp:
+ (WebKitAPITest::CloseWithoutInitWithFrame): Calls IWebView::close
+ without ever calling IWebView::initWithFrame and tests that we don't
+ crash or leak.
+
+2010-01-05 Adam Roben <aroben at apple.com>
+
Add more WebViewDestruction tests
Fixes <http://webkit.org/b/33216>.
diff --git a/WebKitTools/WebKitAPITest/tests/WebViewDestruction.cpp b/WebKitTools/WebKitAPITest/tests/WebViewDestruction.cpp
index 280acac..6c09e6f 100644
--- a/WebKitTools/WebKitAPITest/tests/WebViewDestruction.cpp
+++ b/WebKitTools/WebKitAPITest/tests/WebViewDestruction.cpp
@@ -102,6 +102,16 @@ TEST(WebViewDestruction, NoInitWithFrame)
finishWebViewDestructionTest(webView, 0);
}
+TEST(WebViewDestruction, CloseWithoutInitWithFrame)
+{
+ COMPtr<IWebView> webView;
+ TEST_ASSERT(SUCCEEDED(WebKitCreateInstance(__uuidof(WebView), &webView)));
+
+ TEST_ASSERT(SUCCEEDED(webView->close()));
+
+ finishWebViewDestructionTest(webView, 0);
+}
+
// Tests that releasing a WebView without calling IWebView::close or DestroyWindow doesn't leak. <http://webkit.org/b/33162>
TEST(WebViewDestruction, NoCloseOrDestroyViewWindow)
{
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list