Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: d10f7ce53734b9bb35b3b3783ddf0f19b5559eed
      
https://github.com/WebKit/WebKit/commit/d10f7ce53734b9bb35b3b3783ddf0f19b5559eed
  Author: Jessica Cheung <[email protected]>
  Date:   2025-09-30 (Tue, 30 Sep 2025)

  Changed paths:
    M Source/WebCore/PAL/pal/cocoa/ScreenTimeSoftLink.h
    M Source/WebCore/PAL/pal/cocoa/ScreenTimeSoftLink.mm
    M Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
    M Source/WebKit/UIProcess/API/Cocoa/WKWebViewInternal.h
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/ScreenTime.mm

  Log Message:
  -----------
  [Screen Time] Unexpected power usage due to ScreenTimeWebExtension performing 
CA Commits when invisible
https://bugs.webkit.org/show_bug.cgi?id=299634
rdar://156520177

Reviewed by Tim Horton and Aditya Keerthi.

ScreenTimeWebExtension is performing more CA commits when
not rendering, than expected. As a result, there is more power usage
than anticipated.

As a temporary solution, only install the STWebpageController for
managed-users. This is achieved by using STScreenTimeConfigurationObserver
to observe the enforcesChildRestrictions property.

* Source/WebCore/PAL/pal/cocoa/ScreenTimeSoftLink.h:
* Source/WebCore/PAL/pal/cocoa/ScreenTimeSoftLink.mm:
* Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _installScreenTimeWebpageControllerIfNeeded]):
(-[WKWebView _uninstallScreenTimeWebpageController]):
(-[WKWebView observeValueForKeyPath:ofObject:change:context:]):
(-[WKWebView _screenTimeConfigurationObserver]):
* Source/WebKit/UIProcess/API/Cocoa/WKWebViewInternal.h:

Change all API tests to set enforcesChildRestrictions to YES after the
WKWebView is created but before _installScreenTimeWebpageControllerIfNeeded
is called. In a follow-up PR, I will be adding a KVO API test for
enforcesChildRestrictions.

* Tools/TestWebKitAPI/Tests/WebKitCocoa/ScreenTime.mm:
(swizzleEnforcesChildRestrictions):
(testSuppressUsageRecordingWithDataStore):
(testShowsSystemScreenTimeBlockingView):
(testWebContentIsNotClickableShowingSystemScreenTimeBlockingView):
(TEST(ScreenTime, IsBlockedByScreenTimeTrue)):
(TEST(ScreenTime, IsBlockedByScreenTimeFalse)):
(TEST(ScreenTime, IsBlockedByScreenTimeMultiple)):
(TEST(ScreenTime, IsBlockedByScreenTimeKVO)):
(TEST(ScreenTime, IdentifierNil)):
(TEST(ScreenTime, IdentifierString)):
(TEST(ScreenTime, IdentifierStringWithRemoveData)):
(TEST(ScreenTime, WKWebViewFillsStackView)):
(TEST(ScreenTime, URLIsPlayingVideo)):
(TEST(ScreenTime, URLIsPictureInPicture)):
(TEST(ScreenTime, FetchData)):
(TEST(ScreenTime, RemoveDataWithTimeInterval)):
(TEST(ScreenTime, RemoveData)):
(TEST(ScreenTime, OffscreenSystemScreenTimeBlockingView)):
(TEST(ScreenTime, OffscreenBlurredScreenTimeBlockingView)):
(TEST(ScreenTime, DoNotDonateURLsInOccludedWebView)):
(TEST(ScreenTime, CreateControllerAfterOffscreenWebViewBecomesInWindow)):
(TEST(ScreenTime, 
ScreenTimeControllerSetsURLWhenOffscreenWebViewBecomesInWindow)):
(TEST(ScreenTime, ScreenTimeControllerInstalledAfterRestoreFromSessionState)):
(TEST(ScreenTime, ScreenTimeControllerViewOnlyInstalledForHTTPFamily)):
(TEST(ScreenTime, ScreenTimeControllerNotInstalledForNoChildRestrictions)):

Canonical link: https://commits.webkit.org/300778@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to