Title: [218229] trunk
Revision
218229
Author
mra...@apple.com
Date
2017-06-13 17:32:21 -0700 (Tue, 13 Jun 2017)

Log Message

WebsitePolicies: let clients select specific autoplay quirks
https://bugs.webkit.org/show_bug.cgi?id=173343

Reviewed by Alex Christensen.
Source/WebCore:

Tests: Updated API tests accordingly to use new values.

Replace the 'allowsAutoplayQuirks' bool with an OptionSet so clients can selectively
pick auto-play quirks.

* dom/Document.cpp:
(WebCore::Document::processingUserGestureForMedia):
* html/HTMLMediaElement.cpp:
(WebCore::needsAutoplayPlayPauseEventsQuirk):
* loader/DocumentLoader.h:
(WebCore::DocumentLoader::allowedAutoplayQuirks):
(WebCore::DocumentLoader::setAllowedAutoplayQuirks):
(WebCore::DocumentLoader::allowsAutoplayQuirks): Deleted.
(WebCore::DocumentLoader::setAllowsAutoplayQuirks): Deleted.

Source/WebKit2:

Replace the 'allowsAutoplayQuirks' bool with an OptionSet so clients can selectively
pick auto-play quirks.

* Shared/WebsitePolicies.h:
(WebKit::WebsitePolicies::encode):
(WebKit::WebsitePolicies::decode):
* UIProcess/API/APIWebsitePolicies.h:
* UIProcess/API/C/WKWebsitePolicies.cpp:
(WKWebsitePoliciesSetAllowedAutoplayQuirks):
(WKWebsitePoliciesGetAllowedAutoplayQuirks):
(WKWebsitePoliciesSetAllowsAutoplayQuirks): Deleted.
(WKWebsitePoliciesGetAllowsAutoplayQuirks): Deleted.
* UIProcess/API/C/WKWebsitePolicies.h:
* UIProcess/API/Cocoa/_WKWebsitePolicies.h:
* UIProcess/API/Cocoa/_WKWebsitePolicies.mm:
(-[_WKWebsitePolicies setAllowedAutoplayQuirks:]):
(-[_WKWebsitePolicies allowedAutoplayQuirks]):
(-[_WKWebsitePolicies setAllowsAutoplayQuirks:]): Deleted.
(-[_WKWebsitePolicies allowsAutoplayQuirks]): Deleted.
* WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
(WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::updateWebsitePolicies):

Tools:

* TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
(-[AutoplayPoliciesDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
(TEST): Updated tests.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (218228 => 218229)


--- trunk/Source/WebCore/ChangeLog	2017-06-14 00:19:21 UTC (rev 218228)
+++ trunk/Source/WebCore/ChangeLog	2017-06-14 00:32:21 UTC (rev 218229)
@@ -1,3 +1,25 @@
+2017-06-13  Matt Rajca  <mra...@apple.com>
+
+        WebsitePolicies: let clients select specific autoplay quirks
+        https://bugs.webkit.org/show_bug.cgi?id=173343
+
+        Reviewed by Alex Christensen.
+
+        Tests: Updated API tests accordingly to use new values.
+
+        Replace the 'allowsAutoplayQuirks' bool with an OptionSet so clients can selectively
+        pick auto-play quirks.
+
+        * dom/Document.cpp:
+        (WebCore::Document::processingUserGestureForMedia):
+        * html/HTMLMediaElement.cpp:
+        (WebCore::needsAutoplayPlayPauseEventsQuirk):
+        * loader/DocumentLoader.h:
+        (WebCore::DocumentLoader::allowedAutoplayQuirks):
+        (WebCore::DocumentLoader::setAllowedAutoplayQuirks):
+        (WebCore::DocumentLoader::allowsAutoplayQuirks): Deleted.
+        (WebCore::DocumentLoader::setAllowsAutoplayQuirks): Deleted.
+
 2017-06-13  Zalan Bujtas  <za...@apple.com>
 
         Synchronous media query callbacks on nested frames could produced a detached FrameView.

Modified: trunk/Source/WebCore/dom/Document.cpp (218228 => 218229)


--- trunk/Source/WebCore/dom/Document.cpp	2017-06-14 00:19:21 UTC (rev 218228)
+++ trunk/Source/WebCore/dom/Document.cpp	2017-06-14 00:32:21 UTC (rev 218229)
@@ -6468,7 +6468,7 @@
         return topDocument().hasHadUserInteraction();
 
     auto* loader = this->loader();
-    if (loader && loader->allowsAutoplayQuirks())
+    if (loader && loader->allowedAutoplayQuirks().contains(AutoplayQuirk::InheritedUserGestures))
         return topDocument().hasHadUserInteraction();
 
     return false;

Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (218228 => 218229)


--- trunk/Source/WebCore/html/HTMLMediaElement.cpp	2017-06-14 00:19:21 UTC (rev 218228)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp	2017-06-14 00:32:21 UTC (rev 218229)
@@ -599,7 +599,7 @@
         return false;
 
     auto* loader = document.loader();
-    return loader && loader->allowsAutoplayQuirks();
+    return loader && loader->allowedAutoplayQuirks().contains(AutoplayQuirk::SynthesizedPauseEvents);
 }
 
 HTMLMediaElement* HTMLMediaElement::bestMediaElementForShowingPlaybackControlsManager(MediaElementSession::PlaybackControlsPurpose purpose)

Modified: trunk/Source/WebCore/loader/DocumentLoader.h (218228 => 218229)


--- trunk/Source/WebCore/loader/DocumentLoader.h	2017-06-14 00:19:21 UTC (rev 218228)
+++ trunk/Source/WebCore/loader/DocumentLoader.h	2017-06-14 00:32:21 UTC (rev 218229)
@@ -85,6 +85,11 @@
     Deny,
 };
 
+enum class AutoplayQuirk {
+    SynthesizedPauseEvents = 1 << 0,
+    InheritedUserGestures = 1 << 1,
+};
+
 class DocumentLoader : public RefCounted<DocumentLoader>, private CachedRawResourceClient {
     WTF_MAKE_FAST_ALLOCATED;
     friend class ContentFilter;
@@ -242,8 +247,8 @@
     AutoplayPolicy autoplayPolicy() const { return m_autoplayPolicy; }
     void setAutoplayPolicy(AutoplayPolicy policy) { m_autoplayPolicy = policy; }
 
-    bool allowsAutoplayQuirks() const { return m_allowsAutoplayQuirks; }
-    void setAllowsAutoplayQuirks(bool allowsQuirks) { m_allowsAutoplayQuirks = allowsQuirks; }
+    OptionSet<AutoplayQuirk> allowedAutoplayQuirks() const { return m_allowedAutoplayQuirks; }
+    void setAllowedAutoplayQuirks(OptionSet<AutoplayQuirk> allowedQuirks) { m_allowedAutoplayQuirks = allowedQuirks; }
 
     void addSubresourceLoader(ResourceLoader*);
     void removeSubresourceLoader(ResourceLoader*);
@@ -475,7 +480,7 @@
 #endif
     bool m_userContentExtensionsEnabled { true };
     AutoplayPolicy m_autoplayPolicy { AutoplayPolicy::Default };
-    bool m_allowsAutoplayQuirks { false };
+    OptionSet<AutoplayQuirk> m_allowedAutoplayQuirks;
 
 #ifndef NDEBUG
     bool m_hasEverBeenAttached { false };

Modified: trunk/Source/WebKit2/ChangeLog (218228 => 218229)


--- trunk/Source/WebKit2/ChangeLog	2017-06-14 00:19:21 UTC (rev 218228)
+++ trunk/Source/WebKit2/ChangeLog	2017-06-14 00:32:21 UTC (rev 218229)
@@ -1,3 +1,34 @@
+2017-06-13  Matt Rajca  <mra...@apple.com>
+
+        WebsitePolicies: let clients select specific autoplay quirks
+        https://bugs.webkit.org/show_bug.cgi?id=173343
+
+        Reviewed by Alex Christensen.
+        
+        Replace the 'allowsAutoplayQuirks' bool with an OptionSet so clients can selectively
+        pick auto-play quirks.
+
+        * Shared/WebsitePolicies.h:
+        (WebKit::WebsitePolicies::encode):
+        (WebKit::WebsitePolicies::decode):
+        * UIProcess/API/APIWebsitePolicies.h:
+        * UIProcess/API/C/WKWebsitePolicies.cpp:
+        (WKWebsitePoliciesSetAllowedAutoplayQuirks):
+        (WKWebsitePoliciesGetAllowedAutoplayQuirks):
+        (WKWebsitePoliciesSetAllowsAutoplayQuirks): Deleted.
+        (WKWebsitePoliciesGetAllowsAutoplayQuirks): Deleted.
+        * UIProcess/API/C/WKWebsitePolicies.h:
+        * UIProcess/API/Cocoa/_WKWebsitePolicies.h:
+        * UIProcess/API/Cocoa/_WKWebsitePolicies.mm:
+        (-[_WKWebsitePolicies setAllowedAutoplayQuirks:]):
+        (-[_WKWebsitePolicies allowedAutoplayQuirks]):
+        (-[_WKWebsitePolicies setAllowsAutoplayQuirks:]): Deleted.
+        (-[_WKWebsitePolicies allowsAutoplayQuirks]): Deleted.
+        * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+        (WebKit::WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction):
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::updateWebsitePolicies):
+
 2017-06-13  Wenson Hsieh  <wenson_hs...@apple.com>
 
         Add missing availability declarations to SPI in WKUIDelegatePrivate.h

Modified: trunk/Source/WebKit2/Shared/WebsitePolicies.h (218228 => 218229)


--- trunk/Source/WebKit2/Shared/WebsitePolicies.h	2017-06-14 00:19:21 UTC (rev 218228)
+++ trunk/Source/WebKit2/Shared/WebsitePolicies.h	2017-06-14 00:32:21 UTC (rev 218229)
@@ -25,6 +25,8 @@
 
 #pragma once
 
+#include <wtf/OptionSet.h>
+
 namespace WebKit {
 
 enum class WebsiteAutoplayPolicy {
@@ -34,10 +36,15 @@
     Deny
 };
 
+enum class WebsiteAutoplayQuirk {
+    SynthesizedPauseEvents = 1 << 0,
+    InheritedUserGestures = 1 << 1,
+};
+
 struct WebsitePolicies {
 
     bool contentBlockersEnabled { true };
-    bool allowsAutoplayQuirks { false };
+    OptionSet<WebsiteAutoplayQuirk> allowedAutoplayQuirks;
     WebsiteAutoplayPolicy autoplayPolicy { WebsiteAutoplayPolicy::Default };
 
     template<class Encoder> void encode(Encoder&) const;
@@ -48,7 +55,7 @@
 {
     encoder << contentBlockersEnabled;
     encoder.encodeEnum(autoplayPolicy);
-    encoder << allowsAutoplayQuirks;
+    encoder << allowedAutoplayQuirks;
 }
 
 template<class Decoder> bool WebsitePolicies::decode(Decoder& decoder, WebsitePolicies& result)
@@ -57,7 +64,7 @@
         return false;
     if (!decoder.decodeEnum(result.autoplayPolicy))
         return false;
-    if (!decoder.decode(result.allowsAutoplayQuirks))
+    if (!decoder.decode(result.allowedAutoplayQuirks))
         return false;
     return true;
 }

Modified: trunk/Source/WebKit2/UIProcess/API/APIWebsitePolicies.h (218228 => 218229)


--- trunk/Source/WebKit2/UIProcess/API/APIWebsitePolicies.h	2017-06-14 00:19:21 UTC (rev 218228)
+++ trunk/Source/WebKit2/UIProcess/API/APIWebsitePolicies.h	2017-06-14 00:32:21 UTC (rev 218229)
@@ -27,6 +27,7 @@
 
 #include "APIObject.h"
 #include "WebsitePolicies.h"
+#include <wtf/OptionSet.h>
 
 namespace API {
 
@@ -39,8 +40,8 @@
     bool contentBlockersEnabled() const { return m_websitePolicies.contentBlockersEnabled; }
     void setContentBlockersEnabled(bool enabled) { m_websitePolicies.contentBlockersEnabled = enabled; }
 
-    bool allowsAutoplayQuirks() const { return m_websitePolicies.allowsAutoplayQuirks; }
-    void setAllowsAutoplayQuirks(bool allowsQuirks) { m_websitePolicies.allowsAutoplayQuirks = allowsQuirks; }
+    OptionSet<WebKit::WebsiteAutoplayQuirk> allowedAutoplayQuirks() const { return m_websitePolicies.allowedAutoplayQuirks; }
+    void setAllowedAutoplayQuirks(OptionSet<WebKit::WebsiteAutoplayQuirk> allowedQuirks) { m_websitePolicies.allowedAutoplayQuirks = allowedQuirks; }
 
     WebKit::WebsiteAutoplayPolicy autoplayPolicy() const { return m_websitePolicies.autoplayPolicy; }
     void setAutoplayPolicy(WebKit::WebsiteAutoplayPolicy policy) { m_websitePolicies.autoplayPolicy = policy; }

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKWebsitePolicies.cpp (218228 => 218229)


--- trunk/Source/WebKit2/UIProcess/API/C/WKWebsitePolicies.cpp	2017-06-14 00:19:21 UTC (rev 218228)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKWebsitePolicies.cpp	2017-06-14 00:32:21 UTC (rev 218229)
@@ -52,14 +52,30 @@
     return toImpl(websitePolicies)->contentBlockersEnabled();
 }
 
-void WKWebsitePoliciesSetAllowsAutoplayQuirks(WKWebsitePoliciesRef websitePolicies, bool allowsQuirks)
+void WKWebsitePoliciesSetAllowedAutoplayQuirks(WKWebsitePoliciesRef websitePolicies, WKWebsiteAutoplayQuirk allowedQuirks)
 {
-    toImpl(websitePolicies)->setAllowsAutoplayQuirks(allowsQuirks);
+    OptionSet<WebsiteAutoplayQuirk> quirks;
+    if (allowedQuirks & kWKWebsiteAutoplayQuirkInheritedUserGestures)
+        quirks |= WebsiteAutoplayQuirk::InheritedUserGestures;
+
+    if (allowedQuirks & kWKWebsiteAutoplayQuirkSynthesizedPauseEvents)
+        quirks |= WebsiteAutoplayQuirk::SynthesizedPauseEvents;
+
+    toImpl(websitePolicies)->setAllowedAutoplayQuirks(quirks);
 }
 
-bool WKWebsitePoliciesGetAllowsAutoplayQuirks(WKWebsitePoliciesRef websitePolicies)
+WKWebsiteAutoplayQuirk WKWebsitePoliciesGetAllowedAutoplayQuirks(WKWebsitePoliciesRef websitePolicies)
 {
-    return toImpl(websitePolicies)->allowsAutoplayQuirks();
+    WKWebsiteAutoplayQuirk quirks = 0;
+    auto allowedQuirks = toImpl(websitePolicies)->allowedAutoplayQuirks();
+
+    if (allowedQuirks.contains(WebsiteAutoplayQuirk::SynthesizedPauseEvents))
+        quirks |= kWKWebsiteAutoplayQuirkSynthesizedPauseEvents;
+
+    if (allowedQuirks.contains(WebsiteAutoplayQuirk::InheritedUserGestures))
+        quirks |= kWKWebsiteAutoplayQuirkInheritedUserGestures;
+
+    return quirks;
 }
 
 WKWebsiteAutoplayPolicy WKWebsitePoliciesGetAutoplayPolicy(WKWebsitePoliciesRef websitePolicies)

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKWebsitePolicies.h (218228 => 218229)


--- trunk/Source/WebKit2/UIProcess/API/C/WKWebsitePolicies.h	2017-06-14 00:19:21 UTC (rev 218228)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKWebsitePolicies.h	2017-06-14 00:32:21 UTC (rev 218229)
@@ -40,13 +40,19 @@
     kWKWebsiteAutoplayPolicyDeny
 };
 
+typedef uint32_t WKWebsiteAutoplayQuirk;
+enum {
+    kWKWebsiteAutoplayQuirkSynthesizedPauseEvents = 1 << 0,
+    kWKWebsiteAutoplayQuirkInheritedUserGestures = 1 << 1,
+};
+
 WK_EXPORT WKWebsitePoliciesRef WKWebsitePoliciesCreate();
 
 WK_EXPORT bool WKWebsitePoliciesGetContentBlockersEnabled(WKWebsitePoliciesRef);
 WK_EXPORT void WKWebsitePoliciesSetContentBlockersEnabled(WKWebsitePoliciesRef, bool);
 
-WK_EXPORT bool WKWebsitePoliciesGetAllowsAutoplayQuirks(WKWebsitePoliciesRef);
-WK_EXPORT void WKWebsitePoliciesSetAllowsAutoplayQuirks(WKWebsitePoliciesRef, bool);
+WK_EXPORT WKWebsiteAutoplayQuirk WKWebsitePoliciesGetAllowedAutoplayQuirks(WKWebsitePoliciesRef);
+WK_EXPORT void WKWebsitePoliciesSetAllowedAutoplayQuirks(WKWebsitePoliciesRef, WKWebsiteAutoplayQuirk);
 
 WK_EXPORT WKWebsiteAutoplayPolicy WKWebsitePoliciesGetAutoplayPolicy(WKWebsitePoliciesRef);
 WK_EXPORT void WKWebsitePoliciesSetAutoplayPolicy(WKWebsitePoliciesRef, WKWebsiteAutoplayPolicy);

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsitePolicies.h (218228 => 218229)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsitePolicies.h	2017-06-14 00:19:21 UTC (rev 218228)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsitePolicies.h	2017-06-14 00:32:21 UTC (rev 218229)
@@ -34,11 +34,16 @@
     _WKWebsiteAutoplayPolicyDeny
 } WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
 
+typedef NS_OPTIONS(NSUInteger, _WKWebsiteAutoplayQuirk) {
+    _WKWebsiteAutoplayQuirkSynthesizedPauseEvents = 1 << 0,
+    _WKWebsiteAutoplayQuirkInheritedUserGestures = 1 << 1,
+} WK_API_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA));
+
 WK_CLASS_AVAILABLE(macosx(WK_MAC_TBA), ios(WK_IOS_TBA))
 @interface _WKWebsitePolicies : NSObject
 
 @property (nonatomic) BOOL contentBlockersEnabled;
-@property (nonatomic) BOOL allowsAutoplayQuirks;
+@property (nonatomic) _WKWebsiteAutoplayQuirk allowedAutoplayQuirks;
 @property (nonatomic) _WKWebsiteAutoplayPolicy autoplayPolicy;
 
 @end

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsitePolicies.mm (218228 => 218229)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsitePolicies.mm	2017-06-14 00:19:21 UTC (rev 218228)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/_WKWebsitePolicies.mm	2017-06-14 00:32:21 UTC (rev 218229)
@@ -57,14 +57,31 @@
     return _websitePolicies->contentBlockersEnabled();
 }
 
-- (void)setAllowsAutoplayQuirks:(BOOL)allowsQuirks
+- (void)setAllowedAutoplayQuirks:(_WKWebsiteAutoplayQuirk)allowedQuirks
 {
-    _websitePolicies->setAllowsAutoplayQuirks(allowsQuirks);
+    OptionSet<WebKit::WebsiteAutoplayQuirk> quirks;
+
+    if (allowedQuirks & _WKWebsiteAutoplayQuirkInheritedUserGestures)
+        quirks |= WebKit::WebsiteAutoplayQuirk::InheritedUserGestures;
+
+    if (allowedQuirks & _WKWebsiteAutoplayQuirkSynthesizedPauseEvents)
+        quirks |= WebKit::WebsiteAutoplayQuirk::SynthesizedPauseEvents;
+
+    _websitePolicies->setAllowedAutoplayQuirks(quirks);
 }
 
-- (BOOL)allowsAutoplayQuirks
+- (_WKWebsiteAutoplayQuirk)allowedAutoplayQuirks
 {
-    return _websitePolicies->allowsAutoplayQuirks();
+    _WKWebsiteAutoplayQuirk quirks = 0;
+    auto allowedQuirks = _websitePolicies->allowedAutoplayQuirks();
+
+    if (allowedQuirks.contains(WebKit::WebsiteAutoplayQuirk::InheritedUserGestures))
+        quirks |= _WKWebsiteAutoplayQuirkInheritedUserGestures;
+
+    if (allowedQuirks.contains(WebKit::WebsiteAutoplayQuirk::SynthesizedPauseEvents))
+        quirks |= _WKWebsiteAutoplayQuirkSynthesizedPauseEvents;
+
+    return quirks;
 }
 
 - (void)setAutoplayPolicy:(_WKWebsiteAutoplayPolicy)policy

Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (218228 => 218229)


--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp	2017-06-14 00:19:21 UTC (rev 218228)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp	2017-06-14 00:32:21 UTC (rev 218229)
@@ -828,8 +828,17 @@
     if (documentLoader->userContentExtensionsEnabled())
         documentLoader->setUserContentExtensionsEnabled(websitePolicies.contentBlockersEnabled);
 
-    documentLoader->setAllowsAutoplayQuirks(websitePolicies.allowsAutoplayQuirks);
+    OptionSet<AutoplayQuirk> quirks;
+    auto allowedQuirks = websitePolicies.allowedAutoplayQuirks;
 
+    if (allowedQuirks.contains(WebsiteAutoplayQuirk::InheritedUserGestures))
+        quirks |= AutoplayQuirk::InheritedUserGestures;
+
+    if (allowedQuirks.contains(WebsiteAutoplayQuirk::SynthesizedPauseEvents))
+        quirks |= AutoplayQuirk::SynthesizedPauseEvents;
+
+    documentLoader->setAllowedAutoplayQuirks(quirks);
+
     switch (websitePolicies.autoplayPolicy) {
     case WebsiteAutoplayPolicy::Default:
         documentLoader->setAutoplayPolicy(AutoplayPolicy::Default);

Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (218228 => 218229)


--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2017-06-14 00:19:21 UTC (rev 218228)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2017-06-14 00:32:21 UTC (rev 218229)
@@ -5609,8 +5609,17 @@
     if (!documentLoader)
         return;
 
-    documentLoader->setAllowsAutoplayQuirks(websitePolicies.allowsAutoplayQuirks);
+    OptionSet<AutoplayQuirk> quirks;
+    auto allowedQuirks = websitePolicies.allowedAutoplayQuirks;
 
+    if (allowedQuirks.contains(WebsiteAutoplayQuirk::InheritedUserGestures))
+        quirks |= AutoplayQuirk::InheritedUserGestures;
+
+    if (allowedQuirks.contains(WebsiteAutoplayQuirk::SynthesizedPauseEvents))
+        quirks |= AutoplayQuirk::SynthesizedPauseEvents;
+
+    documentLoader->setAllowedAutoplayQuirks(quirks);
+
     switch (websitePolicies.autoplayPolicy) {
     case WebsiteAutoplayPolicy::Default:
         documentLoader->setAutoplayPolicy(AutoplayPolicy::Default);

Modified: trunk/Tools/ChangeLog (218228 => 218229)


--- trunk/Tools/ChangeLog	2017-06-14 00:19:21 UTC (rev 218228)
+++ trunk/Tools/ChangeLog	2017-06-14 00:32:21 UTC (rev 218229)
@@ -1,3 +1,14 @@
+2017-06-13  Matt Rajca  <mra...@apple.com>
+
+        WebsitePolicies: let clients select specific autoplay quirks
+        https://bugs.webkit.org/show_bug.cgi?id=173343
+
+        Reviewed by Alex Christensen.
+
+        * TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm:
+        (-[AutoplayPoliciesDelegate _webView:decidePolicyForNavigationAction:decisionHandler:]):
+        (TEST): Updated tests.
+
 2017-06-13  Daniel Bates  <daba...@apple.com>
 
         Implement W3C Secure Contexts Draft Specification

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm (218228 => 218229)


--- trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm	2017-06-14 00:19:21 UTC (rev 218228)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKit2Cocoa/WebsitePolicies.mm	2017-06-14 00:32:21 UTC (rev 218229)
@@ -162,7 +162,7 @@
 
 @interface AutoplayPoliciesDelegate : NSObject <WKNavigationDelegate, WKUIDelegate>
 @property (nonatomic, copy) _WKWebsiteAutoplayPolicy(^autoplayPolicyForURL)(NSURL *);
-@property (nonatomic, copy) BOOL(^allowsAutoplayQuirksForURL)(NSURL *);
+@property (nonatomic, copy) _WKWebsiteAutoplayQuirk(^allowedAutoplayQuirksForURL)(NSURL *);
 @end
 
 @implementation AutoplayPoliciesDelegate
@@ -177,8 +177,8 @@
 - (void)_webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy, _WKWebsitePolicies *))decisionHandler
 {
     _WKWebsitePolicies *websitePolicies = [[[_WKWebsitePolicies alloc] init] autorelease];
-    if (_allowsAutoplayQuirksForURL)
-        websitePolicies.allowsAutoplayQuirks = _allowsAutoplayQuirksForURL(navigationAction.request.URL);
+    if (_allowedAutoplayQuirksForURL)
+        websitePolicies.allowedAutoplayQuirks = _allowedAutoplayQuirksForURL(navigationAction.request.URL);
     if (_autoplayPolicyForURL)
         websitePolicies.autoplayPolicy = _autoplayPolicyForURL(navigationAction.request.URL);
     decisionHandler(WKNavigationActionPolicyAllow, websitePolicies);
@@ -459,8 +459,8 @@
 
     NSURLRequest *requestWithAudio = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"autoplay-check" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]];
 
-    [delegate setAllowsAutoplayQuirksForURL:^(NSURL *url) {
-        return YES;
+    [delegate setAllowedAutoplayQuirksForURL:^_WKWebsiteAutoplayQuirk(NSURL *url) {
+        return _WKWebsiteAutoplayQuirkSynthesizedPauseEvents;
     }];
     [delegate setAutoplayPolicyForURL:^(NSURL *) {
         return _WKWebsiteAutoplayPolicyDeny;
@@ -474,8 +474,11 @@
 
     NSURLRequest *requestWithAudioInFrame = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"autoplay-check-in-iframe" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]];
 
-    [delegate setAllowsAutoplayQuirksForURL:^(NSURL *url) {
-        return [url.lastPathComponent isEqualToString:@"autoplay-check-frame.html"];
+    [delegate setAllowedAutoplayQuirksForURL:^_WKWebsiteAutoplayQuirk(NSURL *url) {
+        if ([url.lastPathComponent isEqualToString:@"autoplay-check-frame.html"])
+            return _WKWebsiteAutoplayQuirkInheritedUserGestures;
+        
+        return _WKWebsiteAutoplayQuirkSynthesizedPauseEvents;
     }];
     [delegate setAutoplayPolicyForURL:^(NSURL *) {
         return _WKWebsiteAutoplayPolicyDeny;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to