Title: [221262] trunk/Source/WebKit
Revision
221262
Author
[email protected]
Date
2017-08-28 11:20:49 -0700 (Mon, 28 Aug 2017)

Log Message

Add WKUIDelegatePrivate equivalent of WKPageUIClient's didExceedBackgroundResourceLimitWhileInForeground
https://bugs.webkit.org/show_bug.cgi?id=176028
<rdar://problem/29270035>

Reviewed by Andy Estes.

An API test for this did not succeed with either the memory or CPU limit calls,
possibly because the app must be in the foreground for this call to be made.

* UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
* UIProcess/Cocoa/UIDelegate.h:
* UIProcess/Cocoa/UIDelegate.mm:
(WebKit::UIDelegate::setDelegate):
(WebKit::toWKResourceLimit):
(WebKit::UIDelegate::UIClient::didExceedBackgroundResourceLimitWhileInForeground):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (221261 => 221262)


--- trunk/Source/WebKit/ChangeLog	2017-08-28 16:52:48 UTC (rev 221261)
+++ trunk/Source/WebKit/ChangeLog	2017-08-28 18:20:49 UTC (rev 221262)
@@ -1,3 +1,21 @@
+2017-08-28  Alex Christensen  <[email protected]>
+
+        Add WKUIDelegatePrivate equivalent of WKPageUIClient's didExceedBackgroundResourceLimitWhileInForeground
+        https://bugs.webkit.org/show_bug.cgi?id=176028
+        <rdar://problem/29270035>
+
+        Reviewed by Andy Estes.
+
+        An API test for this did not succeed with either the memory or CPU limit calls,
+        possibly because the app must be in the foreground for this call to be made.
+
+        * UIProcess/API/Cocoa/WKUIDelegatePrivate.h:
+        * UIProcess/Cocoa/UIDelegate.h:
+        * UIProcess/Cocoa/UIDelegate.mm:
+        (WebKit::UIDelegate::setDelegate):
+        (WebKit::toWKResourceLimit):
+        (WebKit::UIDelegate::UIClient::didExceedBackgroundResourceLimitWhileInForeground):
+
 2017-08-28  Carlos Garcia Campos  <[email protected]>
 
         WebDriver: implement screen capture commands

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h (221261 => 221262)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h	2017-08-28 16:52:48 UTC (rev 221261)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h	2017-08-28 18:20:49 UTC (rev 221262)
@@ -59,6 +59,11 @@
     _WKAutoplayEventUserDidInterfereWithPlayback,
 } WK_API_AVAILABLE(macosx(WK_MAC_TBA));
 
+typedef NS_ENUM(NSInteger, _WKResourceLimit) {
+    _WKResourceLimitMemory,
+    _WKResourceLimitCPU,
+} WK_API_AVAILABLE(macosx(WK_MAC_TBA));
+
 typedef NS_OPTIONS(NSInteger, _WKAutoplayEventFlags) {
     _WKAutoplayEventFlagsNone = 0,
     _WKAutoplayEventFlagsHasAudio = 1 << 0,
@@ -145,6 +150,7 @@
 - (void)_webView:(WKWebView *)webView didNotHandleWheelEvent:(NSEvent *)event WK_API_AVAILABLE(macosx(WK_MAC_TBA));
 - (void)_webView:(WKWebView *)webView handleAutoplayEvent:(_WKAutoplayEvent)event withFlags:(_WKAutoplayEventFlags)flags WK_API_AVAILABLE(macosx(WK_MAC_TBA));
 - (void)_webView:(WKWebView *)webView saveDataToFile:(NSData *)data suggestedFilename:(NSString *)suggestedFilename mimeType:(NSString *)mimeType originatingURL:(NSURL *)url WK_API_AVAILABLE(macosx(WK_MAC_TBA));
+- (void)_webView:(WKWebView *)webView didExceedBackgroundResourceLimitWhileInForeground:(_WKResourceLimit)limit WK_API_AVAILABLE(macosx(WK_MAC_TBA));
 - (NSMenu *)_webView:(WKWebView *)webView contextMenu:(NSMenu *)menu forElement:(_WKContextMenuElementInfo *)element WK_API_AVAILABLE(macosx(10.12));
 - (NSMenu *)_webView:(WKWebView *)webView contextMenu:(NSMenu *)menu forElement:(_WKContextMenuElementInfo *)element userInfo:(id <NSSecureCoding>)userInfo WK_API_AVAILABLE(macosx(10.12));
 #endif

Modified: trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h (221261 => 221262)


--- trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h	2017-08-28 16:52:48 UTC (rev 221261)
+++ trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h	2017-08-28 18:20:49 UTC (rev 221262)
@@ -103,6 +103,7 @@
         void didNotHandleWheelEvent(WebPageProxy*, const NativeWebWheelEvent&) final;
         void handleAutoplayEvent(WebPageProxy&, WebCore::AutoplayEvent, OptionSet<WebCore::AutoplayEventFlags>) final;
         bool runOpenPanel(WebPageProxy*, WebFrameProxy*, const WebCore::SecurityOriginData&, API::OpenPanelParameters*, WebOpenPanelResultListenerProxy*) final;
+        void didExceedBackgroundResourceLimitWhileInForeground(WebPageProxy&, WKResourceLimit) final;
         void saveDataToFileInDownloadsFolder(WebPageProxy*, const WTF::String&, const WTF::String&, const WebCore::URL&, API::Data&) final;
 #endif
         bool decidePolicyForUserMediaPermissionRequest(WebPageProxy&, WebFrameProxy&, API::SecurityOrigin&, API::SecurityOrigin&, UserMediaPermissionRequestProxy&) final;
@@ -149,6 +150,7 @@
         bool webViewTakeFocus : 1;
         bool webViewDidNotHandleWheelEvent : 1;
         bool webViewHandleAutoplayEventWithFlags : 1;
+        bool webViewDidExceedBackgroundResourceLimitWhileInForeground : 1;
         bool webViewSaveDataToFileSuggestedFilenameMimeTypeOriginatingURL : 1;
         bool webViewRunOpenPanelWithParametersInitiatedByFrameCompletionHandler : 1;
 #endif

Modified: trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm (221261 => 221262)


--- trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm	2017-08-28 16:52:48 UTC (rev 221261)
+++ trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm	2017-08-28 18:20:49 UTC (rev 221262)
@@ -108,6 +108,7 @@
     m_delegateMethods.webViewTakeFocus = [delegate respondsToSelector:@selector(_webView:takeFocus:)];
     m_delegateMethods.webViewDidNotHandleWheelEvent = [delegate respondsToSelector:@selector(_webView:didNotHandleWheelEvent:)];
     m_delegateMethods.webViewHandleAutoplayEventWithFlags = [delegate respondsToSelector:@selector(_webView:handleAutoplayEvent:withFlags:)];
+    m_delegateMethods.webViewDidExceedBackgroundResourceLimitWhileInForeground = [delegate respondsToSelector:@selector(_webView:didExceedBackgroundResourceLimitWhileInForeground:)];
     m_delegateMethods.webViewSaveDataToFileSuggestedFilenameMimeTypeOriginatingURL = [delegate respondsToSelector:@selector(_webView:saveDataToFile:suggestedFilename:mimeType:originatingURL:)];
     m_delegateMethods.webViewRunOpenPanelWithParametersInitiatedByFrameCompletionHandler = [delegate respondsToSelector:@selector(webView:runOpenPanelWithParameters:initiatedByFrame:completionHandler:)];
 #endif
@@ -427,6 +428,30 @@
     [(id <WKUIDelegatePrivate>)delegate _unfocusWebView:m_uiDelegate.m_webView];
 }
 
+static _WKResourceLimit toWKResourceLimit(WKResourceLimit limit)
+{
+    switch (limit) {
+    case kWKResourceLimitMemory:
+        return _WKResourceLimitMemory;
+    case kWKResourceLimitCPU:
+        return _WKResourceLimitCPU;
+    }
+    ASSERT_NOT_REACHED();
+    return _WKResourceLimitMemory;
+}
+
+void UIDelegate::UIClient::didExceedBackgroundResourceLimitWhileInForeground(WebKit::WebPageProxy&, WKResourceLimit limit)
+{
+    if (!m_uiDelegate.m_delegateMethods.webViewDidExceedBackgroundResourceLimitWhileInForeground)
+        return;
+    
+    auto delegate = m_uiDelegate.m_delegate.get();
+    if (!delegate)
+        return;
+    
+    [static_cast<id <WKUIDelegatePrivate>>(delegate) _webView:m_uiDelegate.m_webView didExceedBackgroundResourceLimitWhileInForeground:toWKResourceLimit(limit)];
+}
+
 void UIDelegate::UIClient::didNotHandleWheelEvent(WebKit::WebPageProxy*, const WebKit::NativeWebWheelEvent& event)
 {
     if (!m_uiDelegate.m_delegateMethods.webViewDidNotHandleWheelEvent)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to