- Revision
- 150474
- Author
- [email protected]
- Date
- 2013-05-21 13:38:04 -0700 (Tue, 21 May 2013)
Log Message
<rdar://problem/13929704> [WK2] WebKitTestRunner always crashes on exit
https://bugs.webkit.org/show_bug.cgi?id=116568
Reviewed by Anders Carlsson.
* WebKitTestRunner/WebNotificationProvider.cpp:
(WTR::WebNotificationProvider::~WebNotificationProvider):
* WebKitTestRunner/WebNotificationProvider.h:
When the provider is destroyed, it should no longer be registered with the manager.
* WebKitTestRunner/GeolocationProviderMock.cpp:
(WTR::GeolocationProviderMock::~GeolocationProviderMock):
* WebKitTestRunner/GeolocationProviderMock.h:
I wasn't seeing a crash here, but this code has the same issue as notification
provider, so applying the same fix.
* WebKitTestRunner/TestController.cpp: (WTR::TestController::~TestController):
Close icon database. I started seeing ASSERT(!isOpen()) in WebCore IconDatabase
destructor having fixed the above.
Modified Paths
Diff
Modified: trunk/Tools/ChangeLog (150473 => 150474)
--- trunk/Tools/ChangeLog 2013-05-21 20:32:23 UTC (rev 150473)
+++ trunk/Tools/ChangeLog 2013-05-21 20:38:04 UTC (rev 150474)
@@ -1,3 +1,25 @@
+2013-05-21 Alexey Proskuryakov <[email protected]>
+
+ <rdar://problem/13929704> [WK2] WebKitTestRunner always crashes on exit
+ https://bugs.webkit.org/show_bug.cgi?id=116568
+
+ Reviewed by Anders Carlsson.
+
+ * WebKitTestRunner/WebNotificationProvider.cpp:
+ (WTR::WebNotificationProvider::~WebNotificationProvider):
+ * WebKitTestRunner/WebNotificationProvider.h:
+ When the provider is destroyed, it should no longer be registered with the manager.
+
+ * WebKitTestRunner/GeolocationProviderMock.cpp:
+ (WTR::GeolocationProviderMock::~GeolocationProviderMock):
+ * WebKitTestRunner/GeolocationProviderMock.h:
+ I wasn't seeing a crash here, but this code has the same issue as notification
+ provider, so applying the same fix.
+
+ * WebKitTestRunner/TestController.cpp: (WTR::TestController::~TestController):
+ Close icon database. I started seeing ASSERT(!isOpen()) in WebCore IconDatabase
+ destructor having fixed the above.
+
2013-05-21 Commit Queue <[email protected]>
Unreviewed, rolling out r150386 and r150397.
Modified: trunk/Tools/WebKitTestRunner/GeolocationProviderMock.cpp (150473 => 150474)
--- trunk/Tools/WebKitTestRunner/GeolocationProviderMock.cpp 2013-05-21 20:32:23 UTC (rev 150473)
+++ trunk/Tools/WebKitTestRunner/GeolocationProviderMock.cpp 2013-05-21 20:38:04 UTC (rev 150474)
@@ -58,6 +58,11 @@
WKGeolocationManagerSetProvider(m_geolocationManager, &providerCallback);
}
+GeolocationProviderMock::~GeolocationProviderMock()
+{
+ WKGeolocationManagerSetProvider(m_geolocationManager, 0);
+}
+
void GeolocationProviderMock::setPosition(double latitude, double longitude, double accuracy, bool providesAltitude, double altitude, bool providesAltitudeAccuracy, double altitudeAccuracy, bool providesHeading, double heading, bool providesSpeed, double speed)
{
m_position.adopt(WKGeolocationPositionCreate_b(currentTime(), latitude, longitude, accuracy, providesAltitude, altitude, providesAltitudeAccuracy, altitudeAccuracy, providesHeading, heading, providesSpeed, speed));
Modified: trunk/Tools/WebKitTestRunner/GeolocationProviderMock.h (150473 => 150474)
--- trunk/Tools/WebKitTestRunner/GeolocationProviderMock.h 2013-05-21 20:32:23 UTC (rev 150473)
+++ trunk/Tools/WebKitTestRunner/GeolocationProviderMock.h 2013-05-21 20:38:04 UTC (rev 150474)
@@ -33,6 +33,7 @@
class GeolocationProviderMock {
public:
GeolocationProviderMock(WKContextRef);
+ ~GeolocationProviderMock();
void setPosition(double latitude, double longitude, double accuracy, bool providesAltitude, double altitude, bool providesAltitudeAccuracy, double altitudeAccuracy, bool providesHeading, double heading, bool providesSpeed, double speed);
void setPositionUnavailableError(WKStringRef errorMessage);
Modified: trunk/Tools/WebKitTestRunner/TestController.cpp (150473 => 150474)
--- trunk/Tools/WebKitTestRunner/TestController.cpp 2013-05-21 20:32:23 UTC (rev 150473)
+++ trunk/Tools/WebKitTestRunner/TestController.cpp 2013-05-21 20:38:04 UTC (rev 150474)
@@ -33,6 +33,7 @@
#include <WebKit2/WKAuthenticationDecisionListener.h>
#include <WebKit2/WKContextPrivate.h>
#include <WebKit2/WKCredential.h>
+#include <WebKit2/WKIconDatabase.h>
#include <WebKit2/WKNotification.h>
#include <WebKit2/WKNotificationManager.h>
#include <WebKit2/WKNotificationPermissionRequest.h>
@@ -120,6 +121,8 @@
TestController::~TestController()
{
+ WKIconDatabaseClose(WKContextGetIconDatabase(m_context.get()));
+
platformDestroy();
}
Modified: trunk/Tools/WebKitTestRunner/WebNotificationProvider.cpp (150473 => 150474)
--- trunk/Tools/WebKitTestRunner/WebNotificationProvider.cpp 2013-05-21 20:32:23 UTC (rev 150473)
+++ trunk/Tools/WebKitTestRunner/WebNotificationProvider.cpp 2013-05-21 20:38:04 UTC (rev 150474)
@@ -63,6 +63,11 @@
{
}
+WebNotificationProvider::~WebNotificationProvider()
+{
+ WKNotificationManagerSetProvider(m_notificationManager.get(), 0);
+}
+
WKNotificationProvider WebNotificationProvider::provider()
{
WKNotificationProvider notificationProvider = {
Modified: trunk/Tools/WebKitTestRunner/WebNotificationProvider.h (150473 => 150474)
--- trunk/Tools/WebKitTestRunner/WebNotificationProvider.h 2013-05-21 20:32:23 UTC (rev 150473)
+++ trunk/Tools/WebKitTestRunner/WebNotificationProvider.h 2013-05-21 20:38:04 UTC (rev 150474)
@@ -36,6 +36,7 @@
class WebNotificationProvider {
public:
WebNotificationProvider();
+ ~WebNotificationProvider();
WKNotificationProvider provider();
void showWebNotification(WKPageRef, WKNotificationRef);