Changeset 246136 in webkit


Ignore:
Timestamp:
Jun 5, 2019 6:22:18 PM (5 years ago)
Author:
jer.noble@apple.com
Message:

-[WKWebView _suspendAllMediaPlayback] does not persist across navigation.
https://bugs.webkit.org/show_bug.cgi?id=198585

Reviewed by Chris Dumez.

Source/WebKit:

Add a new WebPageCreationParameters entry for mediaPlaybackIsSuspended, and pass
that value across during WebPage creation.

  • Shared/WebPageCreationParameters.cpp:

(WebKit::WebPageCreationParameters::encode const):
(WebKit::WebPageCreationParameters::decode):

  • Shared/WebPageCreationParameters.h:
  • UIProcess/WebPageProxy.cpp:

(WebKit::WebPageProxy::suspendAllMediaPlayback):
(WebKit::WebPageProxy::resumeAllMediaPlayback):
(WebKit::WebPageProxy::creationParameters):

  • UIProcess/WebPageProxy.h:
  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage):

Tools:

  • TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
  • TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
  • TestWebKitAPI/Tests/WebKitCocoa/WKWebViewSuspendAllMediaPlayback.mm: Added.

(TEST):

  • TestWebKitAPI/Tests/WebKitLegacy/ios/video-with-audio.html:
Location:
trunk
Files:
1 added
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r246132 r246136  
     12019-06-05  Jer Noble  <jer.noble@apple.com>
     2
     3        -[WKWebView _suspendAllMediaPlayback] does not persist across navigation.
     4        https://bugs.webkit.org/show_bug.cgi?id=198585
     5
     6        Reviewed by Chris Dumez.
     7
     8        Add a new WebPageCreationParameters entry for mediaPlaybackIsSuspended, and pass
     9        that value across during WebPage creation.
     10
     11        * Shared/WebPageCreationParameters.cpp:
     12        (WebKit::WebPageCreationParameters::encode const):
     13        (WebKit::WebPageCreationParameters::decode):
     14        * Shared/WebPageCreationParameters.h:
     15        * UIProcess/WebPageProxy.cpp:
     16        (WebKit::WebPageProxy::suspendAllMediaPlayback):
     17        (WebKit::WebPageProxy::resumeAllMediaPlayback):
     18        (WebKit::WebPageProxy::creationParameters):
     19        * UIProcess/WebPageProxy.h:
     20        * WebProcess/WebPage/WebPage.cpp:
     21        (WebKit::WebPage):
     22
    1232019-06-05  Sihui Liu  <sihui_liu@apple.com>
    224
  • trunk/Source/WebKit/Shared/WebPageCreationParameters.cpp

    r245807 r246136  
    6767    encoder << muted;
    6868    encoder << mayStartMediaWhenInWindow;
     69    encoder << mediaPlaybackIsSuspended;
    6970    encoder << viewLayoutSize;
    7071    encoder << autoSizingShouldExpandToViewHeight;
     
    224225    if (!decoder.decode(parameters.mayStartMediaWhenInWindow))
    225226        return WTF::nullopt;
     227    if (!decoder.decode(parameters.mediaPlaybackIsSuspended))
     228        return WTF::nullopt;
    226229    if (!decoder.decode(parameters.viewLayoutSize))
    227230        return WTF::nullopt;
  • trunk/Source/WebKit/Shared/WebPageCreationParameters.h

    r245807 r246136  
    117117    WebCore::MediaProducer::MutedStateFlags muted;
    118118    bool mayStartMediaWhenInWindow;
     119    bool mediaPlaybackIsSuspended { false };
    119120
    120121    WebCore::IntSize viewLayoutSize;
  • trunk/Source/WebKit/UIProcess/WebPageProxy.cpp

    r246118 r246136  
    54735473void WebPageProxy::suspendAllMediaPlayback()
    54745474{
     5475    if (m_mediaPlaybackIsSuspended)
     5476        return;
     5477    m_mediaPlaybackIsSuspended = true;
     5478
    54755479    if (!hasRunningProcess())
    54765480        return;
     
    54815485void WebPageProxy::resumeAllMediaPlayback()
    54825486{
     5487    if (!m_mediaPlaybackIsSuspended)
     5488        return;
     5489    m_mediaPlaybackIsSuspended = false;
     5490
    54835491    if (!hasRunningProcess())
    54845492        return;
     
    71267134    parameters.muted = m_mutedState;
    71277135    parameters.mayStartMediaWhenInWindow = m_mayStartMediaWhenInWindow;
     7136    parameters.mediaPlaybackIsSuspended = m_mediaPlaybackIsSuspended;
    71287137    parameters.viewLayoutSize = m_viewLayoutSize;
    71297138    parameters.autoSizingShouldExpandToViewHeight = m_autoSizingShouldExpandToViewHeight;
  • trunk/Source/WebKit/UIProcess/WebPageProxy.h

    r246118 r246136  
    24132413    WebCore::MediaProducer::MutedStateFlags m_mutedState { WebCore::MediaProducer::NoneMuted };
    24142414    bool m_mayStartMediaWhenInWindow { true };
     2415    bool m_mediaPlaybackIsSuspended { false };
    24152416    bool m_mediaCaptureEnabled { true };
    24162417
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp

    r246032 r246136  
    540540    m_page->setCanStartMedia(false);
    541541    m_mayStartMediaWhenInWindow = parameters.mayStartMediaWhenInWindow;
     542    if (parameters.mediaPlaybackIsSuspended)
     543        m_page->suspendAllMediaPlayback();
    542544
    543545    m_page->setGroupName(m_pageGroup->identifier());
  • trunk/Tools/ChangeLog

    r246127 r246136  
     12019-06-05  Jer Noble  <jer.noble@apple.com>
     2
     3        -[WKWebView _suspendAllMediaPlayback] does not persist across navigation.
     4        https://bugs.webkit.org/show_bug.cgi?id=198585
     5
     6        Reviewed by Chris Dumez.
     7
     8        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
     9        * TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm:
     10        * TestWebKitAPI/Tests/WebKitCocoa/WKWebViewSuspendAllMediaPlayback.mm: Added.
     11        (TEST):
     12        * TestWebKitAPI/Tests/WebKitLegacy/ios/video-with-audio.html:
     13
    1142019-06-05  Alex Christensen  <achristensen@webkit.org>
    215
  • trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj

    r246118 r246136  
    826826                CD78E11D1DB7EA660014A2DE /* FullscreenDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = CD78E11A1DB7EA360014A2DE /* FullscreenDelegate.mm */; };
    827827                CD78E11E1DB7EE2A0014A2DE /* FullscreenDelegate.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = CD78E11B1DB7EA360014A2DE /* FullscreenDelegate.html */; };
     828                CD7F89DC22A86CDA00D683AE /* WKWebViewSuspendAllMediaPlayback.mm in Sources */ = {isa = PBXBuildFile; fileRef = CD7F89DB22A86CDA00D683AE /* WKWebViewSuspendAllMediaPlayback.mm */; };
    828829                CD9E292E1C90C33F000BB800 /* audio-only.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = CD9E292D1C90C1BA000BB800 /* audio-only.html */; };
    829830                CDA29B2920FD2A9900F15CED /* ExitFullscreenOnEnterPiP.mm in Sources */ = {isa = PBXBuildFile; fileRef = CDA29B2820FD2A9900F15CED /* ExitFullscreenOnEnterPiP.mm */; };
     
    22112212                CD78E11A1DB7EA360014A2DE /* FullscreenDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FullscreenDelegate.mm; sourceTree = "<group>"; };
    22122213                CD78E11B1DB7EA360014A2DE /* FullscreenDelegate.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = FullscreenDelegate.html; sourceTree = "<group>"; };
     2214                CD7F89DB22A86CDA00D683AE /* WKWebViewSuspendAllMediaPlayback.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = WKWebViewSuspendAllMediaPlayback.mm; sourceTree = "<group>"; };
    22132215                CD89D0381C4EDB2A00040A04 /* WebCoreNSURLSession.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebCoreNSURLSession.mm; sourceTree = "<group>"; };
    22142216                CD9E292B1C90A71F000BB800 /* RequiresUserActionForPlayback.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RequiresUserActionForPlayback.mm; sourceTree = "<group>"; };
     
    27902792                                37A9DBE7213B4C9300D261A2 /* WKWebViewServerTrustKVC.mm */,
    27912793                                93F56DA81E5F9181003EDE84 /* WKWebViewSnapshot.mm */,
     2794                                CD7F89DB22A86CDA00D683AE /* WKWebViewSuspendAllMediaPlayback.mm */,
    27922795                                9984FACA1CFFAEEE008D198C /* WKWebViewTextInput.mm */,
    27932796                        );
     
    45604563                                37A9DBE9213B4C9300D261A2 /* WKWebViewServerTrustKVC.mm in Sources */,
    45614564                                93F56DA91E5F919D003EDE84 /* WKWebViewSnapshot.mm in Sources */,
     4565                                CD7F89DC22A86CDA00D683AE /* WKWebViewSuspendAllMediaPlayback.mm in Sources */,
    45624566                                9984FACC1CFFAF60008D198C /* WKWebViewTextInput.mm in Sources */,
    45634567                                9C64DC321D76198A004B598E /* YouTubePluginReplacement.cpp in Sources */,
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/ProcessSwapOnNavigation.mm

    r246127 r246136  
    62666266
    62676267#endif
     6268
     6269TEST(ProcessSwap, SuspendAllMediaPlayback)
     6270{
     6271    auto processPoolConfiguration = psonProcessPoolConfiguration();
     6272    auto processPool = adoptNS([[WKProcessPool alloc] _initWithConfiguration:processPoolConfiguration.get()]);
     6273
     6274    auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
     6275    configuration.get().mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeNone;
     6276#if TARGET_OS_IPHONE
     6277    configuration.get().allowsInlineMediaPlayback = YES;
     6278#endif
     6279    [configuration setProcessPool:processPool.get()];
     6280    auto handler = adoptNS([[PSONScheme alloc] init]);
     6281    [configuration setURLSchemeHandler:handler.get() forURLScheme:@"PSON"];
     6282
     6283    auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
     6284
     6285    __block bool loaded = false;
     6286    [webView performAfterLoading:^{ loaded = true; }];
     6287    [webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"pson://www.webkit.org/main.html"]]];
     6288
     6289    TestWebKitAPI::Util::run(&loaded);
     6290
     6291    [webView _suspendAllMediaPlayback];
     6292
     6293    __block bool notPlaying = false;
     6294    [webView performAfterReceivingMessage:@"not playing" action:^() { notPlaying = true; }];
     6295    [webView synchronouslyLoadTestPageNamed:@"video-with-audio"];
     6296    TestWebKitAPI::Util::run(&notPlaying);
     6297}
  • trunk/Tools/TestWebKitAPI/Tests/WebKitLegacy/ios/video-with-audio.html

    r206325 r246136  
    1818    }
    1919
     20    function paused() {
     21        try {
     22            window.webkit.messageHandlers.testHandler.postMessage('paused');
     23        } catch(e) { }
     24    }
     25
    2026    function notPlaying() {
    2127        try {
Note: See TracChangeset for help on using the changeset viewer.