Changeset 84702 in webkit


Ignore:
Timestamp:
Apr 22, 2011 4:29:02 PM (13 years ago)
Author:
weinig@apple.com
Message:

2011-04-22 Sam Weinig <sam@webkit.org>

Reviewed by Brian Weinstein.

WebKit2: Implement JavaScript unresponsiveness timer/callbacks
https://bugs.webkit.org/show_bug.cgi?id=59248

Stub out shouldInterruptJavaScript callbacks.

  • MiniBrowser/mac/BrowserWindowController.m: (-[BrowserWindowController awakeFromNib]):
  • MiniBrowser/win/BrowserView.cpp: (BrowserView::create):
  • WebKitTestRunner/TestController.cpp: (WTR::TestController::createOtherPage): (WTR::TestController::initialize):

2011-04-22 Sam Weinig <sam@webkit.org>

Reviewed by Brian Weinstein.

WebKit2: Implement JavaScript unresponsiveness callback
https://bugs.webkit.org/show_bug.cgi?id=59248

Add support for suspending JavaScript in response to a callback.

  • UIProcess/API/C/WKPage.h:
  • UIProcess/API/qt/qwkpage.cpp: (QWKPage::QWKPage):
  • UIProcess/WebPageProxy.cpp: (WebKit::WebPageProxy::shouldInterruptJavaScript):
  • UIProcess/WebPageProxy.h:
  • UIProcess/WebPageProxy.messages.in:
  • UIProcess/WebUIClient.cpp: (WebKit::WebUIClient::shouldInterruptJavaScript):
  • UIProcess/WebUIClient.h:
  • WebProcess/WebCoreSupport/WebChromeClient.cpp: (WebKit::WebChromeClient::shouldInterruptJavaScript):
Location:
trunk
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r84698 r84702  
     12011-04-22  Sam Weinig  <sam@webkit.org>
     2
     3        Reviewed by Brian Weinstein.
     4
     5        WebKit2: Implement JavaScript unresponsiveness callback
     6        https://bugs.webkit.org/show_bug.cgi?id=59248
     7
     8        Add support for suspending JavaScript in response to a callback.
     9
     10        * UIProcess/API/C/WKPage.h:
     11        * UIProcess/API/qt/qwkpage.cpp:
     12        (QWKPage::QWKPage):
     13        * UIProcess/WebPageProxy.cpp:
     14        (WebKit::WebPageProxy::shouldInterruptJavaScript):
     15        * UIProcess/WebPageProxy.h:
     16        * UIProcess/WebPageProxy.messages.in:
     17        * UIProcess/WebUIClient.cpp:
     18        (WebKit::WebUIClient::shouldInterruptJavaScript):
     19        * UIProcess/WebUIClient.h:
     20        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
     21        (WebKit::WebChromeClient::shouldInterruptJavaScript):
     22
    1232011-04-22  Dan Bernstein  <mitz@apple.com>
    224
  • trunk/Source/WebKit2/UIProcess/API/C/WKPage.h

    r84064 r84702  
    184184typedef void (*WKPageDidCompleteRubberBandForMainFrameCallback)(WKPageRef page, WKSize initialOverhang, const void* clientInfo);
    185185typedef void (*WKPageSaveDataToFileInDownloadsFolderCallback)(WKPageRef page, WKStringRef suggestedFilename, WKStringRef mimeType, WKURLRef originatingURL, WKDataRef data, const void* clientInfo);
     186typedef bool (*WKPageShouldInterruptJavaScriptCallback)(WKPageRef page, const void *clientInfo);
    186187
    187188struct WKPageUIClient {
     
    225226    WKPageDidCompleteRubberBandForMainFrameCallback                     didCompleteRubberBandForMainFrame;
    226227    WKPageSaveDataToFileInDownloadsFolderCallback                       saveDataToFileInDownloadsFolder;
     228    WKPageShouldInterruptJavaScriptCallback                             shouldInterruptJavaScript;
    227229};
    228230typedef struct WKPageUIClient WKPageUIClient;
  • trunk/Source/WebKit2/UIProcess/API/qt/qwkpage.cpp

    r84613 r84702  
    500500        0,  /* printFrame */
    501501        0,  /* runModal */
    502         0,   /* didCompleteRubberBandForMainFrame */
    503         0    /* saveDataToFileInDownloadsFolder */
     502        0,  /* didCompleteRubberBandForMainFrame */
     503        0,  /* saveDataToFileInDownloadsFolder */
     504        0,  /* shouldInterruptJavaScript */
    504505    };
    505506    WKPageSetPageUIClient(pageRef(), &uiClient);
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp

    r84643 r84702  
    19451945}
    19461946
     1947void WebPageProxy::shouldInterruptJavaScript(bool& result)
     1948{
     1949    // Since shouldInterruptJavaScript() can spin a nested run loop we need to turn off the responsiveness timer.
     1950    process()->responsivenessTimer()->stop();
     1951
     1952    result = m_uiClient.shouldInterruptJavaScript(this);
     1953}
     1954
    19471955void WebPageProxy::setStatusText(const String& text)
    19481956{
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.h

    r84553 r84702  
    559559    void runJavaScriptConfirm(uint64_t frameID, const String&, bool& result);
    560560    void runJavaScriptPrompt(uint64_t frameID, const String&, const String&, String& result);
     561    void shouldInterruptJavaScript(bool& result);
    561562    void setStatusText(const String&);
    562563    void mouseDidMoveOverElement(uint32_t modifiers, CoreIPC::ArgumentDecoder*);
  • trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in

    r84553 r84702  
    2929    RunJavaScriptConfirm(uint64_t frameID, WTF::String message) -> (bool result)
    3030    RunJavaScriptPrompt(uint64_t frameID, WTF::String message, WTF::String defaultValue) -> (WTF::String result)
     31    ShouldInterruptJavaScript() -> (bool shouldInterupt)
    3132    MouseDidMoveOverElement(uint32_t modifiers, WebKit::InjectedBundleUserMessageEncoder userData);
    3233    MissingPluginButtonClicked(WTF::String mimeType, WTF::String url, WTF::String pluginsPageURL)
  • trunk/Source/WebKit2/UIProcess/WebUIClient.cpp

    r84064 r84702  
    373373}
    374374
     375bool WebUIClient::shouldInterruptJavaScript(WebPageProxy* page)
     376{
     377    if (!m_client.shouldInterruptJavaScript)
     378        return false;
     379
     380    return m_client.shouldInterruptJavaScript(toAPI(page), m_client.clientInfo);
     381}
     382
    375383} // namespace WebKit
  • trunk/Source/WebKit2/UIProcess/WebUIClient.h

    r84064 r84702  
    108108
    109109    void saveDataToFileInDownloadsFolder(WebPageProxy*, const String& suggestedFilename, const String& mimeType, const String& originatingURLString, WebData*);
     110
     111    bool shouldInterruptJavaScript(WebPageProxy*);
    110112};
    111113
  • trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp

    r84553 r84702  
    333333bool WebChromeClient::shouldInterruptJavaScript()
    334334{
    335     notImplemented();
    336     return false;
     335    bool shouldInterrupt = false;
     336    if (!WebProcess::shared().connection()->sendSync(Messages::WebPageProxy::ShouldInterruptJavaScript(), Messages::WebPageProxy::ShouldInterruptJavaScript::Reply(shouldInterrupt), m_page->pageID()))
     337        return false;
     338
     339    return shouldInterrupt;
    337340}
    338341
  • trunk/Tools/ChangeLog

    r84697 r84702  
     12011-04-22  Sam Weinig  <sam@webkit.org>
     2
     3        Reviewed by Brian Weinstein.
     4
     5        WebKit2: Implement JavaScript unresponsiveness timer/callbacks
     6        https://bugs.webkit.org/show_bug.cgi?id=59248
     7
     8        Stub out shouldInterruptJavaScript callbacks.
     9
     10        * MiniBrowser/mac/BrowserWindowController.m:
     11        (-[BrowserWindowController awakeFromNib]):
     12        * MiniBrowser/win/BrowserView.cpp:
     13        (BrowserView::create):
     14        * WebKitTestRunner/TestController.cpp:
     15        (WTR::TestController::createOtherPage):
     16        (WTR::TestController::initialize):
     17
    1182011-04-22  Daniel Bates  <dbates@webkit.org>
    219
  • trunk/Tools/MiniBrowser/mac/BrowserWindowController.m

    r84064 r84702  
    653653        0, // didCompleteRubberBandForMainFrame
    654654        0, // saveDataToFileInDownloadsFolder
     655        0, // shouldInterruptJavaScript
    655656    };
    656657    WKPageSetPageUIClient(_webView.pageRef, &uiClient);
  • trunk/Tools/MiniBrowser/win/BrowserView.cpp

    r84064 r84702  
    124124        0,          /* runOpenPanel */
    125125        0,          /* decidePolicyForGeolocationPermissionRequest */
     126        0,          /* shouldInterruptJavaScript */
    126127    };
    127128
  • trunk/Tools/WebKitTestRunner/TestController.cpp

    r84534 r84702  
    176176        0, // didCompleteRubberBandForMainFrame
    177177        0, // saveDataToFileInDownloadsFolder
     178        0, // shouldInterruptJavaScript
    178179    };
    179180    WKPageSetPageUIClient(newPage, &otherPageUIClient);
     
    317318        0, // didCompleteRubberBandForMainFrame
    318319        0, // saveDataToFileInDownloadsFolder
     320        0, // shouldInterruptJavaScript
    319321    };
    320322    WKPageSetPageUIClient(m_mainWebView->page(), &pageUIClient);
Note: See TracChangeset for help on using the changeset viewer.