Title: [233498] trunk/Tools
- Revision
- 233498
- Author
- beid...@apple.com
- Date
- 2018-07-03 20:45:50 -0700 (Tue, 03 Jul 2018)
Log Message
WebKit.ResponsivenessTimerCrash sometimes fails.
https://bugs.webkit.org/show_bug.cgi?id=187314
Reviewed by Tim Horton.
Actually unregister observers from objects we're about to destroy before destroying them.
* TestWebKitAPI/Tests/WebKit/ResponsivenessTimerCrash.mm:
(-[ResponsivenessTimerObserver observeValueForKeyPath:ofObject:change:context:]):
Modified Paths
Diff
Modified: trunk/Tools/ChangeLog (233497 => 233498)
--- trunk/Tools/ChangeLog 2018-07-04 03:32:06 UTC (rev 233497)
+++ trunk/Tools/ChangeLog 2018-07-04 03:45:50 UTC (rev 233498)
@@ -1,3 +1,15 @@
+2018-07-03 Brady Eidson <beid...@apple.com>
+
+ WebKit.ResponsivenessTimerCrash sometimes fails.
+ https://bugs.webkit.org/show_bug.cgi?id=187314
+
+ Reviewed by Tim Horton.
+
+ Actually unregister observers from objects we're about to destroy before destroying them.
+
+ * TestWebKitAPI/Tests/WebKit/ResponsivenessTimerCrash.mm:
+ (-[ResponsivenessTimerObserver observeValueForKeyPath:ofObject:change:context:]):
+
2018-07-03 Fujii Hironori <hironori.fu...@sony.com>
update-webkitgtk-flatpak fails if running with python2
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit/ResponsivenessTimerCrash.mm (233497 => 233498)
--- trunk/Tools/TestWebKitAPI/Tests/WebKit/ResponsivenessTimerCrash.mm 2018-07-04 03:32:06 UTC (rev 233497)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit/ResponsivenessTimerCrash.mm 2018-07-04 03:45:50 UTC (rev 233498)
@@ -32,12 +32,12 @@
#import "TestWKWebView.h"
#import <WebKit/WKPagePrivateMac.h>
#import <WebKit/WKWebViewPrivate.h>
+#import <wtf/HashSet.h>
#import <wtf/RetainPtr.h>
-#import <wtf/Vector.h>
static bool didBecomeUnresponsive;
static RetainPtr<TestWKWebView> webView;
-static Vector<RetainPtr<id>> observableStates;
+static HashSet<RetainPtr<id>> observableStates;
static bool webViewSeen;
@interface ResponsivenessTimerObserver : NSObject
@@ -49,10 +49,16 @@
{
if (object == webView.get())
webViewSeen = true;
+ else {
+ [object removeObserver:self forKeyPath:@"_webProcessIsResponsive"];
+ observableStates.remove(object);
+ }
- if (!observableStates.isEmpty())
- observableStates.removeLast();
-
+ if (!observableStates.isEmpty()) {
+ [observableStates.begin()->get() removeObserver:self forKeyPath:@"_webProcessIsResponsive"];
+ observableStates.remove(observableStates.begin());
+ }
+
if (webViewSeen && observableStates.isEmpty())
didBecomeUnresponsive = true;
}
@@ -71,10 +77,10 @@
auto pageRef = [webView _pageRefForTransitionToWKWebView];
- for (size_t i = 0; i < 10; ++i) {
+ for (size_t i = 0; i < 50; ++i) {
RetainPtr<id> observableState = adoptNS(WKPageCreateObservableState(pageRef));
[observableState.get() addObserver:observer.get() forKeyPath:@"_webProcessIsResponsive" options:0 context:nullptr];
- observableStates.append(WTFMove(observableState));
+ observableStates.add(WTFMove(observableState));
}
[webView synchronouslyLoadHTMLString:@"<script>document.addEventListener('keydown', function(){while(1){}});</script>"];
@@ -82,6 +88,8 @@
}
Util::run(&didBecomeUnresponsive);
+
+ [webView removeObserver:observer.get() forKeyPath:@"_webProcessIsResponsive"];
}
} // namespace TestWebKitAPI
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes