Title: [114451] trunk
Revision
114451
Author
[email protected]
Date
2012-04-17 15:43:44 -0700 (Tue, 17 Apr 2012)

Log Message

Source/WebKit2: Need a client callback for when the user tires to interact with an already unresponsive page
https://bugs.webkit.org/show_bug.cgi?id=84201
<rdar://problem/11140862>

Reviewed by Andreas Kling.

Add a interactionOccurredWhileProcessUnresponsive callback that's called when the unresponsiveness timer
fires while it's already unresponsive.

* UIProcess/API/C/WKPage.h:
* UIProcess/ResponsivenessTimer.cpp:
(WebKit):
(WebKit::ResponsivenessTimer::timerFired):
(WebKit::ResponsivenessTimer::start):
* UIProcess/ResponsivenessTimer.h:
(Client):
* UIProcess/WebLoaderClient.cpp:
(WebKit::WebLoaderClient::processDidBecomeUnresponsive):
(WebKit):
(WebKit::WebLoaderClient::interactionOccurredWhileProcessUnresponsive):
* UIProcess/WebLoaderClient.h:
(WebLoaderClient):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::interactionOccurredWhileProcessUnresponsive):
(WebKit):
* UIProcess/WebPageProxy.h:
(WebPageProxy):
* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::interactionOccurredWhileUnresponsive):
(WebKit):
* UIProcess/WebProcessProxy.h:
(WebProcessProxy):

Tools: Need a client callback for when the user tries to interact with an already unresponsive page
https://bugs.webkit.org/show_bug.cgi?id=84201
<rdar://problem/11140862>

Reviewed by Andreas Kling.

Add new client functions.

* MiniBrowser/mac/BrowserWindowController.m:
(-[BrowserWindowController awakeFromNib]):
* WebKitTestRunner/TestController.cpp:
(WTR::TestController::initialize):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (114450 => 114451)


--- trunk/Source/WebKit2/ChangeLog	2012-04-17 22:42:11 UTC (rev 114450)
+++ trunk/Source/WebKit2/ChangeLog	2012-04-17 22:43:44 UTC (rev 114451)
@@ -1,5 +1,40 @@
 2012-04-17  Anders Carlsson  <[email protected]>
 
+        Need a client callback for when the user tires to interact with an already unresponsive page
+        https://bugs.webkit.org/show_bug.cgi?id=84201
+        <rdar://problem/11140862>
+
+        Reviewed by Andreas Kling.
+
+        Add a interactionOccurredWhileProcessUnresponsive callback that's called when the unresponsiveness timer
+        fires while it's already unresponsive.
+
+        * UIProcess/API/C/WKPage.h:
+        * UIProcess/ResponsivenessTimer.cpp:
+        (WebKit):
+        (WebKit::ResponsivenessTimer::timerFired):
+        (WebKit::ResponsivenessTimer::start):
+        * UIProcess/ResponsivenessTimer.h:
+        (Client):
+        * UIProcess/WebLoaderClient.cpp:
+        (WebKit::WebLoaderClient::processDidBecomeUnresponsive):
+        (WebKit):
+        (WebKit::WebLoaderClient::interactionOccurredWhileProcessUnresponsive):
+        * UIProcess/WebLoaderClient.h:
+        (WebLoaderClient):
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::interactionOccurredWhileProcessUnresponsive):
+        (WebKit):
+        * UIProcess/WebPageProxy.h:
+        (WebPageProxy):
+        * UIProcess/WebProcessProxy.cpp:
+        (WebKit::WebProcessProxy::interactionOccurredWhileUnresponsive):
+        (WebKit):
+        * UIProcess/WebProcessProxy.h:
+        (WebProcessProxy):
+
+2012-04-17  Anders Carlsson  <[email protected]>
+
         Make sure that the layer hosting mode is kept up to date if it changes before the plug-in is initialized
         https://bugs.webkit.org/show_bug.cgi?id=84180
         <rdar://problem/11265113>

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPage.h (114450 => 114451)


--- trunk/Source/WebKit2/UIProcess/API/C/WKPage.h	2012-04-17 22:42:11 UTC (rev 114450)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPage.h	2012-04-17 22:43:44 UTC (rev 114451)
@@ -113,6 +113,8 @@
     WKPageDidNewFirstVisuallyNonEmptyLayoutCallback                     didNewFirstVisuallyNonEmptyLayout;
 
     WKPageWillGoToBackForwardListItemCallback                           willGoToBackForwardListItem;
+
+    WKPageCallback                                                      interactionOccurredWhileProcessUnresponsive;
 };
 typedef struct WKPageLoaderClient WKPageLoaderClient;
 

Modified: trunk/Source/WebKit2/UIProcess/ResponsivenessTimer.cpp (114450 => 114451)


--- trunk/Source/WebKit2/UIProcess/ResponsivenessTimer.cpp	2012-04-17 22:42:11 UTC (rev 114450)
+++ trunk/Source/WebKit2/UIProcess/ResponsivenessTimer.cpp	2012-04-17 22:43:44 UTC (rev 114451)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010 Apple Inc. All rights reserved.
+ * Copyright (C) 2010, 2012 Apple Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -30,7 +30,7 @@
 
 namespace WebKit {
 
-static const double kResponsivenessTimeout = 3;
+static const double responsivenessTimeout = 3;
 
 ResponsivenessTimer::ResponsivenessTimer(ResponsivenessTimer::Client* client)
     : m_client(client)
@@ -51,13 +51,13 @@
 
 void ResponsivenessTimer::timerFired()
 {
-    // We'll never schedule the timer unless we're responsive.
-    ASSERT(m_isResponsive);
-    
-    m_isResponsive = false;
-    m_client->didBecomeUnresponsive(this);
-
-    m_timer.stop();
+    if (m_isResponsive) {
+        m_isResponsive = false;
+        m_client->didBecomeUnresponsive(this);
+    } else {
+        // The timer fired while unresponsive.
+        m_client->interactionOccurredWhileUnresponsive(this);
+    }
 }
     
 void ResponsivenessTimer::start()
@@ -65,10 +65,7 @@
     if (m_timer.isActive())
         return;
 
-    if (!m_isResponsive)
-        return;
-
-    m_timer.startOneShot(kResponsivenessTimeout);
+    m_timer.startOneShot(responsivenessTimeout);
 }
 
 void ResponsivenessTimer::stop()

Modified: trunk/Source/WebKit2/UIProcess/ResponsivenessTimer.h (114450 => 114451)


--- trunk/Source/WebKit2/UIProcess/ResponsivenessTimer.h	2012-04-17 22:42:11 UTC (rev 114450)
+++ trunk/Source/WebKit2/UIProcess/ResponsivenessTimer.h	2012-04-17 22:43:44 UTC (rev 114451)
@@ -36,6 +36,7 @@
     public:
         virtual ~Client() { }
         virtual void didBecomeUnresponsive(ResponsivenessTimer*) = 0;
+        virtual void interactionOccurredWhileUnresponsive(ResponsivenessTimer*) = 0;
         virtual void didBecomeResponsive(ResponsivenessTimer*) = 0;
     };
 

Modified: trunk/Source/WebKit2/UIProcess/WebLoaderClient.cpp (114450 => 114451)


--- trunk/Source/WebKit2/UIProcess/WebLoaderClient.cpp	2012-04-17 22:42:11 UTC (rev 114450)
+++ trunk/Source/WebKit2/UIProcess/WebLoaderClient.cpp	2012-04-17 22:43:44 UTC (rev 114451)
@@ -211,6 +211,14 @@
     m_client.processDidBecomeUnresponsive(toAPI(page), m_client.clientInfo);
 }
 
+void WebLoaderClient::interactionOccurredWhileProcessUnresponsive(WebPageProxy* page)
+{
+    if (!m_client.interactionOccurredWhileProcessUnresponsive)
+        return;
+
+    m_client.interactionOccurredWhileProcessUnresponsive(toAPI(page), m_client.clientInfo);
+}
+
 void WebLoaderClient::processDidBecomeResponsive(WebPageProxy* page)
 {
     if (!m_client.processDidBecomeResponsive)

Modified: trunk/Source/WebKit2/UIProcess/WebLoaderClient.h (114450 => 114451)


--- trunk/Source/WebKit2/UIProcess/WebLoaderClient.h	2012-04-17 22:42:11 UTC (rev 114450)
+++ trunk/Source/WebKit2/UIProcess/WebLoaderClient.h	2012-04-17 22:43:44 UTC (rev 114451)
@@ -78,6 +78,7 @@
 
     // FIXME: These three functions should not be part of this client.
     void processDidBecomeUnresponsive(WebPageProxy*);
+    void interactionOccurredWhileProcessUnresponsive(WebPageProxy*);
     void processDidBecomeResponsive(WebPageProxy*);
     void processDidCrash(WebPageProxy*);
 

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (114450 => 114451)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2012-04-17 22:42:11 UTC (rev 114450)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2012-04-17 22:43:44 UTC (rev 114451)
@@ -3285,6 +3285,14 @@
     m_loaderClient.processDidBecomeUnresponsive(this);
 }
 
+void WebPageProxy::interactionOccurredWhileProcessUnresponsive()
+{
+    if (!isValid())
+        return;
+
+    m_loaderClient.interactionOccurredWhileProcessUnresponsive(this);
+}
+
 void WebPageProxy::processDidBecomeResponsive()
 {
     if (!isValid())

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (114450 => 114451)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2012-04-17 22:42:11 UTC (rev 114450)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2012-04-17 22:43:44 UTC (rev 114451)
@@ -536,6 +536,7 @@
     void didReceiveSyncMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, OwnPtr<CoreIPC::ArgumentEncoder>&);
 
     void processDidBecomeUnresponsive();
+    void interactionOccurredWhileProcessUnresponsive();
     void processDidBecomeResponsive();
     void processDidCrash();
 

Modified: trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp (114450 => 114451)


--- trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp	2012-04-17 22:42:11 UTC (rev 114450)
+++ trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp	2012-04-17 22:43:44 UTC (rev 114451)
@@ -395,6 +395,14 @@
         pages[i]->processDidBecomeUnresponsive();
 }
 
+void WebProcessProxy::interactionOccurredWhileUnresponsive(ResponsivenessTimer*)
+{
+    Vector<RefPtr<WebPageProxy> > pages;
+    copyValuesToVector(m_pageMap, pages);
+    for (size_t i = 0, size = pages.size(); i < size; ++i)
+        pages[i]->interactionOccurredWhileProcessUnresponsive();
+}
+
 void WebProcessProxy::didBecomeResponsive(ResponsivenessTimer*)
 {
     Vector<RefPtr<WebPageProxy> > pages;

Modified: trunk/Source/WebKit2/UIProcess/WebProcessProxy.h (114450 => 114451)


--- trunk/Source/WebKit2/UIProcess/WebProcessProxy.h	2012-04-17 22:42:11 UTC (rev 114450)
+++ trunk/Source/WebKit2/UIProcess/WebProcessProxy.h	2012-04-17 22:43:44 UTC (rev 114451)
@@ -158,8 +158,9 @@
     virtual void didReceiveMessageOnConnectionWorkQueue(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*, bool& didHandleMessage);
 
     // ResponsivenessTimer::Client
-    void didBecomeUnresponsive(ResponsivenessTimer*);
-    void didBecomeResponsive(ResponsivenessTimer*);
+    void didBecomeUnresponsive(ResponsivenessTimer*) OVERRIDE;
+    void interactionOccurredWhileUnresponsive(ResponsivenessTimer*) OVERRIDE;
+    void didBecomeResponsive(ResponsivenessTimer*) OVERRIDE;
 
     // ProcessLauncher::Client
     virtual void didFinishLaunching(ProcessLauncher*, CoreIPC::Connection::Identifier);

Modified: trunk/Tools/ChangeLog (114450 => 114451)


--- trunk/Tools/ChangeLog	2012-04-17 22:42:11 UTC (rev 114450)
+++ trunk/Tools/ChangeLog	2012-04-17 22:43:44 UTC (rev 114451)
@@ -1,3 +1,18 @@
+2012-04-17  Anders Carlsson  <[email protected]>
+
+        Need a client callback for when the user tries to interact with an already unresponsive page
+        https://bugs.webkit.org/show_bug.cgi?id=84201
+        <rdar://problem/11140862>
+
+        Reviewed by Andreas Kling.
+
+        Add new client functions.
+
+        * MiniBrowser/mac/BrowserWindowController.m:
+        (-[BrowserWindowController awakeFromNib]):
+        * WebKitTestRunner/TestController.cpp:
+        (WTR::TestController::initialize):
+
 2012-04-17  Dirk Pranke  <[email protected]>
 
         nrwt: handle stopping layout test helper after a ctrl-c cleanly on the chromium port

Modified: trunk/Tools/MiniBrowser/mac/BrowserWindowController.m (114450 => 114451)


--- trunk/Tools/MiniBrowser/mac/BrowserWindowController.m	2012-04-17 22:42:11 UTC (rev 114450)
+++ trunk/Tools/MiniBrowser/mac/BrowserWindowController.m	2012-04-17 22:43:44 UTC (rev 114451)
@@ -610,6 +610,7 @@
         didDetectXSSForFrame,
         0, // didNewFirstVisuallyNonEmptyLayout
         0, // willGoToBackForwardListItem
+        0, // interactionOccurredWhileProcessUnresponsive
     };
     WKPageSetPageLoaderClient(_webView.pageRef, &loadClient);
     

Modified: trunk/Tools/WebKitTestRunner/TestController.cpp (114450 => 114451)


--- trunk/Tools/WebKitTestRunner/TestController.cpp	2012-04-17 22:42:11 UTC (rev 114450)
+++ trunk/Tools/WebKitTestRunner/TestController.cpp	2012-04-17 22:43:44 UTC (rev 114451)
@@ -411,6 +411,7 @@
         0, // didDetectXSSForFrame
         0, // didNewFirstVisuallyNonEmptyLayout
         0, // willGoToBackForwardListItem
+        0, // interactionOccurredWhileProcessUnresponsive
     };
     WKPageSetPageLoaderClient(m_mainWebView->page(), &pageLoaderClient);
 }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to