Changeset 223451 in webkit


Ignore:
Timestamp:
Oct 16, 2017 5:30:24 PM (7 years ago)
Author:
mrajca@apple.com
Message:

Add API support for quirk that lets an arbitrary click allow auto-play.
https://bugs.webkit.org/show_bug.cgi?id=178227

Reviewed by Alex Christensen.

Source/WebCore:

Added API test.

Instead of hardcoding sites in WebCore, let API clients control which websites opt into the quirk that lets
an arbitrary click allow auto-play via website policies.

  • html/MediaElementSession.cpp:

(WebCore::needsArbitraryUserGestureAutoplayQuirk):

  • loader/DocumentLoader.h:

Source/WebKit:

Instead of hardcoding sites in WebCore, let API clients control which websites opt into the quirk that lets
an arbitrary click allow auto-play via website policies.

  • Shared/WebsitePolicies.h:
  • UIProcess/API/C/WKWebsitePolicies.cpp:

(WKWebsitePoliciesSetAllowedAutoplayQuirks):
(WKWebsitePoliciesGetAllowedAutoplayQuirks):

  • UIProcess/API/C/WKWebsitePolicies.h:
  • UIProcess/API/Cocoa/_WKWebsitePolicies.h:
  • UIProcess/API/Cocoa/_WKWebsitePolicies.mm:

(-[_WKWebsitePolicies setAllowedAutoplayQuirks:]):
(-[_WKWebsitePolicies allowedAutoplayQuirks]):

  • WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:

(WebKit::WebFrameLoaderClient::applyToDocumentLoader):

  • WebProcess/WebPage/WebPage.cpp:

(WebKit::WebPage::updateWebsitePolicies):

Tools:

  • TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:

(TEST): Added API test.

Location:
trunk
Files:
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r223448 r223451  
     12017-10-12  Matt Rajca  <mrajca@apple.com>
     2
     3        Add API support for quirk that lets an arbitrary click allow auto-play.
     4        https://bugs.webkit.org/show_bug.cgi?id=178227
     5
     6        Reviewed by Alex Christensen.
     7
     8        Added API test.
     9       
     10        Instead of hardcoding sites in WebCore, let API clients control which websites opt into the quirk that lets
     11        an arbitrary click allow auto-play via website policies.
     12
     13        * html/MediaElementSession.cpp:
     14        (WebCore::needsArbitraryUserGestureAutoplayQuirk):
     15        * loader/DocumentLoader.h:
     16
    1172017-10-16  Chris Dumez  <cdumez@apple.com>
    218
  • trunk/Source/WebCore/html/MediaElementSession.cpp

    r221709 r223451  
    3131
    3232#include "Document.h"
     33#include "DocumentLoader.h"
    3334#include "Frame.h"
    3435#include "FrameView.h"
     
    155156        return false;
    156157
    157     auto host = document.url().host();
    158     return equalLettersIgnoringASCIICase(host, "washingtonpost.com") || host.endsWithIgnoringASCIICase(".washingtonpost.com");
     158    auto* loader = document.loader();
     159    return loader && loader->allowedAutoplayQuirks().contains(AutoplayQuirk::ArbitraryUserGestures);
    159160}
    160161#endif // PLATFORM(MAC)
  • trunk/Source/WebCore/loader/DocumentLoader.h

    r223001 r223451  
    9191    SynthesizedPauseEvents = 1 << 0,
    9292    InheritedUserGestures = 1 << 1,
     93    ArbitraryUserGestures = 1 << 2,
    9394};
    9495
  • trunk/Source/WebKit/ChangeLog

    r223447 r223451  
     12017-10-12  Matt Rajca  <mrajca@apple.com>
     2
     3        Add API support for quirk that lets an arbitrary click allow auto-play.
     4        https://bugs.webkit.org/show_bug.cgi?id=178227
     5
     6        Reviewed by Alex Christensen.
     7
     8        Instead of hardcoding sites in WebCore, let API clients control which websites opt into the quirk that lets
     9        an arbitrary click allow auto-play via website policies.
     10
     11        * Shared/WebsitePolicies.h:
     12        * UIProcess/API/C/WKWebsitePolicies.cpp:
     13        (WKWebsitePoliciesSetAllowedAutoplayQuirks):
     14        (WKWebsitePoliciesGetAllowedAutoplayQuirks):
     15        * UIProcess/API/C/WKWebsitePolicies.h:
     16        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
     17        * UIProcess/API/Cocoa/_WKWebsitePolicies.mm:
     18        (-[_WKWebsitePolicies setAllowedAutoplayQuirks:]):
     19        (-[_WKWebsitePolicies allowedAutoplayQuirks]):
     20        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
     21        (WebKit::WebFrameLoaderClient::applyToDocumentLoader):
     22        * WebProcess/WebPage/WebPage.cpp:
     23        (WebKit::WebPage::updateWebsitePolicies):
     24
    1252017-10-16  Andy Estes  <aestes@apple.com>
    226
  • trunk/Source/WebKit/Shared/WebsitePolicies.h

    r222306 r223451  
    4444    SynthesizedPauseEvents = 1 << 0,
    4545    InheritedUserGestures = 1 << 1,
     46    ArbitraryUserGestures = 1 << 2,
    4647};
    4748
  • trunk/Source/WebKit/UIProcess/API/C/WKWebsitePolicies.cpp

    r223001 r223451  
    8989        quirks |= WebsiteAutoplayQuirk::SynthesizedPauseEvents;
    9090
     91    if (allowedQuirks & kWKWebsiteAutoplayQuirkArbitraryUserGestures)
     92        quirks |= WebsiteAutoplayQuirk::ArbitraryUserGestures;
     93
    9194    toImpl(websitePolicies)->setAllowedAutoplayQuirks(quirks);
    9295}
     
    102105    if (allowedQuirks.contains(WebsiteAutoplayQuirk::InheritedUserGestures))
    103106        quirks |= kWKWebsiteAutoplayQuirkInheritedUserGestures;
     107
     108    if (allowedQuirks.contains(WebsiteAutoplayQuirk::ArbitraryUserGestures))
     109        quirks |= kWKWebsiteAutoplayQuirkArbitraryUserGestures;
    104110
    105111    return quirks;
  • trunk/Source/WebKit/UIProcess/API/C/WKWebsitePolicies.h

    r223001 r223451  
    4545    kWKWebsiteAutoplayQuirkSynthesizedPauseEvents = 1 << 0,
    4646    kWKWebsiteAutoplayQuirkInheritedUserGestures = 1 << 1,
     47    kWKWebsiteAutoplayQuirkArbitraryUserGestures = 1 << 2,
    4748};
    4849
  • trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsitePolicies.h

    r223001 r223451  
    3838    _WKWebsiteAutoplayQuirkSynthesizedPauseEvents = 1 << 0,
    3939    _WKWebsiteAutoplayQuirkInheritedUserGestures = 1 << 1,
     40    _WKWebsiteAutoplayQuirkArbitraryUserGestures = 1 << 2,
    4041} WK_API_AVAILABLE(macosx(10.13), ios(11.0));
    4142
  • trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsitePolicies.mm

    r223001 r223451  
    6868        quirks |= WebKit::WebsiteAutoplayQuirk::SynthesizedPauseEvents;
    6969
     70    if (allowedQuirks & _WKWebsiteAutoplayQuirkArbitraryUserGestures)
     71        quirks |= WebKit::WebsiteAutoplayQuirk::ArbitraryUserGestures;
     72
    7073    _websitePolicies->setAllowedAutoplayQuirks(quirks);
    7174}
     
    8184    if (allowedQuirks.contains(WebKit::WebsiteAutoplayQuirk::SynthesizedPauseEvents))
    8285        quirks |= _WKWebsiteAutoplayQuirkSynthesizedPauseEvents;
     86
     87    if (allowedQuirks.contains(WebKit::WebsiteAutoplayQuirk::ArbitraryUserGestures))
     88        quirks |= _WKWebsiteAutoplayQuirkArbitraryUserGestures;
    8389
    8490    return quirks;
  • trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp

    r222794 r223451  
    782782        quirks |= AutoplayQuirk::SynthesizedPauseEvents;
    783783
     784    if (allowedQuirks.contains(WebsiteAutoplayQuirk::ArbitraryUserGestures))
     785        quirks |= AutoplayQuirk::ArbitraryUserGestures;
     786
    784787    documentLoader->setAllowedAutoplayQuirks(quirks);
    785788
  • trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp

    r223264 r223451  
    56995699        quirks |= AutoplayQuirk::SynthesizedPauseEvents;
    57005700
     5701    if (allowedQuirks.contains(WebsiteAutoplayQuirk::ArbitraryUserGestures))
     5702        quirks |= AutoplayQuirk::ArbitraryUserGestures;
     5703
    57015704    documentLoader->setAllowedAutoplayQuirks(quirks);
    57025705
  • trunk/Tools/ChangeLog

    r223442 r223451  
     12017-10-12  Matt Rajca  <mrajca@apple.com>
     2
     3        Add API support for quirk that lets an arbitrary click allow auto-play.
     4        https://bugs.webkit.org/show_bug.cgi?id=178227
     5
     6        Reviewed by Alex Christensen.
     7
     8        * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm:
     9        (TEST): Added API test.
     10
    1112017-10-16  Maureen Daum  <mdaum@apple.com>
    212
  • trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm

    r223001 r223451  
    565565    [webView stringByEvaluatingJavaScript:@"playVideo()"];
    566566    runUntilReceivesAutoplayEvent(kWKAutoplayEventDidPreventFromAutoplaying);
     567}
     568
     569TEST(WebKit, WebsitePoliciesArbitraryUserGestureQuirk)
     570{
     571    auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]);
     572    auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]);
     573
     574    auto delegate = adoptNS([[AutoplayPoliciesDelegate alloc] init]);
     575    [webView setNavigationDelegate:delegate.get()];
     576
     577    WKRetainPtr<WKPreferencesRef> preferences(AdoptWK, WKPreferencesCreate());
     578    WKPreferencesSetNeedsSiteSpecificQuirks(preferences.get(), true);
     579    WKPageGroupSetPreferences(WKPageGetPageGroup([webView _pageForTesting]), preferences.get());
     580
     581    [delegate setAllowedAutoplayQuirksForURL:^_WKWebsiteAutoplayQuirk(NSURL *url)
     582    {
     583        return _WKWebsiteAutoplayQuirkArbitraryUserGestures;
     584    }];
     585    [delegate setAutoplayPolicyForURL:^(NSURL *)
     586    {
     587        return _WKWebsiteAutoplayPolicyDeny;
     588    }];
     589
     590    NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"autoplay-check" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]];
     591    [webView loadRequest:request];
     592    [webView waitForMessage:@"did-not-play"];
     593
     594    const NSPoint clickPoint = NSMakePoint(760, 560);
     595    [webView mouseDownAtPoint:clickPoint simulatePressure:NO];
     596    [webView mouseUpAtPoint:clickPoint];
     597
     598    [webView stringByEvaluatingJavaScript:@"playVideo()"];
     599    [webView waitForMessage:@"autoplayed"];
    567600}
    568601
Note: See TracChangeset for help on using the changeset viewer.