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

Reply via email to