Changeset 223451 in webkit
- Timestamp:
- Oct 16, 2017 5:30:24 PM (7 years ago)
- Location:
- trunk
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r223448 r223451 1 2017-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 1 17 2017-10-16 Chris Dumez <cdumez@apple.com> 2 18 -
trunk/Source/WebCore/html/MediaElementSession.cpp
r221709 r223451 31 31 32 32 #include "Document.h" 33 #include "DocumentLoader.h" 33 34 #include "Frame.h" 34 35 #include "FrameView.h" … … 155 156 return false; 156 157 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); 159 160 } 160 161 #endif // PLATFORM(MAC) -
trunk/Source/WebCore/loader/DocumentLoader.h
r223001 r223451 91 91 SynthesizedPauseEvents = 1 << 0, 92 92 InheritedUserGestures = 1 << 1, 93 ArbitraryUserGestures = 1 << 2, 93 94 }; 94 95 -
trunk/Source/WebKit/ChangeLog
r223447 r223451 1 2017-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 1 25 2017-10-16 Andy Estes <aestes@apple.com> 2 26 -
trunk/Source/WebKit/Shared/WebsitePolicies.h
r222306 r223451 44 44 SynthesizedPauseEvents = 1 << 0, 45 45 InheritedUserGestures = 1 << 1, 46 ArbitraryUserGestures = 1 << 2, 46 47 }; 47 48 -
trunk/Source/WebKit/UIProcess/API/C/WKWebsitePolicies.cpp
r223001 r223451 89 89 quirks |= WebsiteAutoplayQuirk::SynthesizedPauseEvents; 90 90 91 if (allowedQuirks & kWKWebsiteAutoplayQuirkArbitraryUserGestures) 92 quirks |= WebsiteAutoplayQuirk::ArbitraryUserGestures; 93 91 94 toImpl(websitePolicies)->setAllowedAutoplayQuirks(quirks); 92 95 } … … 102 105 if (allowedQuirks.contains(WebsiteAutoplayQuirk::InheritedUserGestures)) 103 106 quirks |= kWKWebsiteAutoplayQuirkInheritedUserGestures; 107 108 if (allowedQuirks.contains(WebsiteAutoplayQuirk::ArbitraryUserGestures)) 109 quirks |= kWKWebsiteAutoplayQuirkArbitraryUserGestures; 104 110 105 111 return quirks; -
trunk/Source/WebKit/UIProcess/API/C/WKWebsitePolicies.h
r223001 r223451 45 45 kWKWebsiteAutoplayQuirkSynthesizedPauseEvents = 1 << 0, 46 46 kWKWebsiteAutoplayQuirkInheritedUserGestures = 1 << 1, 47 kWKWebsiteAutoplayQuirkArbitraryUserGestures = 1 << 2, 47 48 }; 48 49 -
trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsitePolicies.h
r223001 r223451 38 38 _WKWebsiteAutoplayQuirkSynthesizedPauseEvents = 1 << 0, 39 39 _WKWebsiteAutoplayQuirkInheritedUserGestures = 1 << 1, 40 _WKWebsiteAutoplayQuirkArbitraryUserGestures = 1 << 2, 40 41 } WK_API_AVAILABLE(macosx(10.13), ios(11.0)); 41 42 -
trunk/Source/WebKit/UIProcess/API/Cocoa/_WKWebsitePolicies.mm
r223001 r223451 68 68 quirks |= WebKit::WebsiteAutoplayQuirk::SynthesizedPauseEvents; 69 69 70 if (allowedQuirks & _WKWebsiteAutoplayQuirkArbitraryUserGestures) 71 quirks |= WebKit::WebsiteAutoplayQuirk::ArbitraryUserGestures; 72 70 73 _websitePolicies->setAllowedAutoplayQuirks(quirks); 71 74 } … … 81 84 if (allowedQuirks.contains(WebKit::WebsiteAutoplayQuirk::SynthesizedPauseEvents)) 82 85 quirks |= _WKWebsiteAutoplayQuirkSynthesizedPauseEvents; 86 87 if (allowedQuirks.contains(WebKit::WebsiteAutoplayQuirk::ArbitraryUserGestures)) 88 quirks |= _WKWebsiteAutoplayQuirkArbitraryUserGestures; 83 89 84 90 return quirks; -
trunk/Source/WebKit/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp
r222794 r223451 782 782 quirks |= AutoplayQuirk::SynthesizedPauseEvents; 783 783 784 if (allowedQuirks.contains(WebsiteAutoplayQuirk::ArbitraryUserGestures)) 785 quirks |= AutoplayQuirk::ArbitraryUserGestures; 786 784 787 documentLoader->setAllowedAutoplayQuirks(quirks); 785 788 -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp
r223264 r223451 5699 5699 quirks |= AutoplayQuirk::SynthesizedPauseEvents; 5700 5700 5701 if (allowedQuirks.contains(WebsiteAutoplayQuirk::ArbitraryUserGestures)) 5702 quirks |= AutoplayQuirk::ArbitraryUserGestures; 5703 5701 5704 documentLoader->setAllowedAutoplayQuirks(quirks); 5702 5705 -
trunk/Tools/ChangeLog
r223442 r223451 1 2017-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 1 11 2017-10-16 Maureen Daum <mdaum@apple.com> 2 12 -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm
r223001 r223451 565 565 [webView stringByEvaluatingJavaScript:@"playVideo()"]; 566 566 runUntilReceivesAutoplayEvent(kWKAutoplayEventDidPreventFromAutoplaying); 567 } 568 569 TEST(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"]; 567 600 } 568 601
Note: See TracChangeset
for help on using the changeset viewer.