Changeset 254553 in webkit
- Timestamp:
- Jan 14, 2020 6:21:56 PM (4 years ago)
- Location:
- trunk
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r254552 r254553 1 2020-01-14 Luming Yin <luming_yin@apple.com> 2 3 Update API availability for autoplay event 4 https://bugs.webkit.org/show_bug.cgi?id=202214 5 <rdar://problem/55710395> 6 7 Reviewed by Tim Horton. 8 9 * UIProcess/API/Cocoa/WKUIDelegatePrivate.h: 10 Make enums and WKUIDelegate method related to autoplay event available on iOS. 11 12 * UIProcess/Cocoa/UIDelegate.h: 13 * UIProcess/Cocoa/UIDelegate.mm: 14 (WebKit::UIDelegate::setDelegate): 15 (WebKit::toWKAutoplayEventFlags): 16 (WebKit::toWKAutoplayEvent): 17 (WebKit::UIDelegate::UIClient::handleAutoplayEvent): 18 Make delegate methods related to autoplay events available on iOS. 19 1 20 2020-01-14 Tim Horton <timothy_horton@apple.com> 2 21 -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKUIDelegatePrivate.h
r253465 r254553 51 51 @protocol UIDropSession; 52 52 #else 53 typedef NS_ENUM(NSInteger, _WKResourceLimit) { 54 _WKResourceLimitMemory, 55 _WKResourceLimitCPU, 56 } WK_API_AVAILABLE(macos(10.13.4)); 57 58 typedef NS_ENUM(NSInteger, _WKPlugInUnavailabilityReason) { 59 _WKPlugInUnavailabilityReasonPluginMissing, 60 _WKPlugInUnavailabilityReasonPluginCrashed, 61 _WKPlugInUnavailabilityReasonInsecurePluginVersion 62 } WK_API_AVAILABLE(macos(10.13.4)); 63 #endif 64 53 65 typedef NS_ENUM(NSInteger, _WKAutoplayEvent) { 54 66 _WKAutoplayEventDidPreventFromAutoplaying, … … 56 68 _WKAutoplayEventDidAutoplayMediaPastThresholdWithoutUserInterference, 57 69 _WKAutoplayEventUserDidInterfereWithPlayback, 58 } WK_API_AVAILABLE(macos(10.13.4)); 59 60 typedef NS_ENUM(NSInteger, _WKResourceLimit) { 61 _WKResourceLimitMemory, 62 _WKResourceLimitCPU, 63 } WK_API_AVAILABLE(macos(10.13.4)); 64 65 typedef NS_ENUM(NSInteger, _WKPlugInUnavailabilityReason) { 66 _WKPlugInUnavailabilityReasonPluginMissing, 67 _WKPlugInUnavailabilityReasonPluginCrashed, 68 _WKPlugInUnavailabilityReasonInsecurePluginVersion 69 } WK_API_AVAILABLE(macos(10.13.4)); 70 } WK_API_AVAILABLE(macos(10.13.4), ios(WK_IOS_TBA)); 70 71 71 72 typedef NS_OPTIONS(NSUInteger, _WKAutoplayEventFlags) { … … 74 75 _WKAutoplayEventFlagsPlaybackWasPrevented = 1 << 1, 75 76 _WKAutoplayEventFlagsMediaIsMainContent = 1 << 2, 76 } WK_API_AVAILABLE(macos(10.13.4)); 77 #endif 77 } WK_API_AVAILABLE(macos(10.13.4), ios(WK_IOS_TBA)); 78 78 79 79 typedef NS_ENUM(NSInteger, _WKFocusDirection) { … … 140 140 141 141 - (void)_webView:(WKWebView *)webView runWebAuthenticationPanel:(_WKWebAuthenticationPanel *)panel initiatedByFrame:(WKFrameInfo *)frame completionHandler:(void (^)(_WKWebAuthenticationPanelResult))completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA)); 142 143 - (void)_webView:(WKWebView *)webView handleAutoplayEvent:(_WKAutoplayEvent)event withFlags:(_WKAutoplayEventFlags)flags WK_API_AVAILABLE(macos(10.13.4), ios(WK_IOS_TBA)); 142 144 143 145 #if TARGET_OS_IPHONE … … 218 220 - (void)_webViewRunModal:(WKWebView *)webView WK_API_AVAILABLE(macos(10.13.4)); 219 221 - (void)_webView:(WKWebView *)webView didNotHandleWheelEvent:(NSEvent *)event WK_API_AVAILABLE(macos(10.13.4)); 220 - (void)_webView:(WKWebView *)webView handleAutoplayEvent:(_WKAutoplayEvent)event withFlags:(_WKAutoplayEventFlags)flags WK_API_AVAILABLE(macos(10.13.4));221 222 - (void)_webView:(WKWebView *)webView didClickAutoFillButtonWithUserInfo:(id <NSSecureCoding>)userInfo WK_API_AVAILABLE(macos(10.13.4)); 222 223 - (void)_webView:(WKWebView *)webView getToolbarsAreVisibleWithCompletionHandler:(void(^)(BOOL))completionHandler WK_API_AVAILABLE(macos(10.13.4)); -
trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.h
r252634 r254553 101 101 void didResignInputElementStrongPasswordAppearance(WebPageProxy&, API::Object*) final; 102 102 bool takeFocus(WebPageProxy*, WKFocusDirection) final; 103 void handleAutoplayEvent(WebPageProxy&, WebCore::AutoplayEvent, OptionSet<WebCore::AutoplayEventFlags>) final; 103 104 #if PLATFORM(MAC) 104 105 void showPage(WebPageProxy*) final; … … 117 118 void drawFooter(WebPageProxy&, WebFrameProxy&, WebCore::FloatRect&&) final; 118 119 void decidePolicyForNotificationPermissionRequest(WebPageProxy&, API::SecurityOrigin&, Function<void(bool)>&&) final; 119 void handleAutoplayEvent(WebPageProxy&, WebCore::AutoplayEvent, OptionSet<WebCore::AutoplayEventFlags>) final;120 120 void unavailablePluginButtonClicked(WebPageProxy&, WKPluginUnavailabilityReason, API::Dictionary&) final; 121 121 void mouseDidMoveOverElement(WebPageProxy&, const WebHitTestResultData&, OptionSet<WebEvent::Modifier>, API::Object*); … … 177 177 bool webViewDidResignInputElementStrongPasswordAppearanceWithUserInfo : 1; 178 178 bool webViewTakeFocus : 1; 179 bool webViewHandleAutoplayEventWithFlags : 1; 179 180 #if PLATFORM(MAC) 180 181 bool showWebView : 1; … … 188 189 bool webViewSetWindowFrame : 1; 189 190 bool webViewDidNotHandleWheelEvent : 1; 190 bool webViewHandleAutoplayEventWithFlags : 1;191 191 bool webViewUnavailablePlugInButtonClicked : 1; 192 192 bool webViewDidClickAutoFillButtonWithUserInfo : 1; -
trunk/Source/WebKit/UIProcess/Cocoa/UIDelegate.mm
r254075 r254553 110 110 m_delegateMethods.webViewDidResignInputElementStrongPasswordAppearanceWithUserInfo = [delegate respondsToSelector:@selector(_webView:didResignInputElementStrongPasswordAppearanceWithUserInfo:)]; 111 111 m_delegateMethods.webViewTakeFocus = [delegate respondsToSelector:@selector(_webView:takeFocus:)]; 112 m_delegateMethods.webViewHandleAutoplayEventWithFlags = [delegate respondsToSelector:@selector(_webView:handleAutoplayEvent:withFlags:)]; 112 113 113 114 #if PLATFORM(MAC) … … 123 124 m_delegateMethods.webViewSetWindowFrame = [delegate respondsToSelector:@selector(_webView:setWindowFrame:)]; 124 125 m_delegateMethods.webViewUnavailablePlugInButtonClicked = [delegate respondsToSelector:@selector(_webView:unavailablePlugInButtonClickedWithReason:plugInInfo:)]; 125 m_delegateMethods.webViewHandleAutoplayEventWithFlags = [delegate respondsToSelector:@selector(_webView:handleAutoplayEvent:withFlags:)];126 126 m_delegateMethods.webViewDidClickAutoFillButtonWithUserInfo = [delegate respondsToSelector:@selector(_webView:didClickAutoFillButtonWithUserInfo:)]; 127 127 m_delegateMethods.webViewDrawHeaderInRectForPageWithTitleURL = [delegate respondsToSelector:@selector(_webView:drawHeaderInRect:forPageWithTitle:URL:)]; … … 487 487 } 488 488 489 #if PLATFORM(MAC)490 bool UIDelegate::UIClient::canRunModal() const491 {492 return m_uiDelegate.m_delegateMethods.webViewRunModal;493 }494 495 void UIDelegate::UIClient::runModal(WebPageProxy&)496 {497 if (!m_uiDelegate.m_delegateMethods.webViewRunModal)498 return;499 500 auto delegate = m_uiDelegate.m_delegate.get();501 if (!delegate)502 return;503 504 [(id <WKUIDelegatePrivate>)delegate _webViewRunModal:m_uiDelegate.m_webView];505 }506 507 float UIDelegate::UIClient::headerHeight(WebPageProxy&, WebFrameProxy& webFrameProxy)508 {509 if (!m_uiDelegate.m_delegateMethods.webViewHeaderHeight)510 return 0;511 512 auto delegate = m_uiDelegate.m_delegate.get();513 if (!delegate)514 return 0;515 516 return [(id <WKUIDelegatePrivate>)delegate _webViewHeaderHeight:m_uiDelegate.m_webView];517 }518 519 float UIDelegate::UIClient::footerHeight(WebPageProxy&, WebFrameProxy&)520 {521 if (!m_uiDelegate.m_delegateMethods.webViewFooterHeight)522 return 0;523 524 auto delegate = m_uiDelegate.m_delegate.get();525 if (!delegate)526 return 0;527 528 return [(id <WKUIDelegatePrivate>)delegate _webViewFooterHeight:m_uiDelegate.m_webView];529 }530 531 void UIDelegate::UIClient::drawHeader(WebPageProxy&, WebFrameProxy& frame, WebCore::FloatRect&& rect)532 {533 if (!m_uiDelegate.m_delegateMethods.webViewDrawHeaderInRectForPageWithTitleURL)534 return;535 536 auto delegate = m_uiDelegate.m_delegate.get();537 if (!delegate)538 return;539 540 [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView drawHeaderInRect:rect forPageWithTitle:frame.title() URL:frame.url()];541 }542 543 void UIDelegate::UIClient::drawFooter(WebPageProxy&, WebFrameProxy& frame, WebCore::FloatRect&& rect)544 {545 if (!m_uiDelegate.m_delegateMethods.webViewDrawFooterInRectForPageWithTitleURL)546 return;547 548 auto delegate = m_uiDelegate.m_delegate.get();549 if (!delegate)550 return;551 552 [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView drawFooterInRect:rect forPageWithTitle:frame.title() URL:frame.url()];553 }554 555 void UIDelegate::UIClient::pageDidScroll(WebPageProxy*)556 {557 if (!m_uiDelegate.m_delegateMethods.webViewDidScroll)558 return;559 560 auto delegate = m_uiDelegate.m_delegate.get();561 if (!delegate)562 return;563 564 [(id <WKUIDelegatePrivate>)delegate _webViewDidScroll:m_uiDelegate.m_webView];565 }566 567 void UIDelegate::UIClient::focus(WebPageProxy*)568 {569 if (!m_uiDelegate.m_delegateMethods.focusWebView)570 return;571 572 auto delegate = m_uiDelegate.m_delegate.get();573 if (!delegate)574 return;575 576 [(id <WKUIDelegatePrivate>)delegate _focusWebView:m_uiDelegate.m_webView];577 }578 579 void UIDelegate::UIClient::unfocus(WebPageProxy*)580 {581 if (!m_uiDelegate.m_delegateMethods.unfocusWebView)582 return;583 584 auto delegate = m_uiDelegate.m_delegate.get();585 if (!delegate)586 return;587 588 [(id <WKUIDelegatePrivate>)delegate _unfocusWebView:m_uiDelegate.m_webView];589 }590 591 static _WKPlugInUnavailabilityReason toWKPlugInUnavailabilityReason(WKPluginUnavailabilityReason reason)592 {593 switch (reason) {594 case kWKPluginUnavailabilityReasonPluginMissing:595 return _WKPlugInUnavailabilityReasonPluginMissing;596 case kWKPluginUnavailabilityReasonPluginCrashed:597 return _WKPlugInUnavailabilityReasonPluginCrashed;598 case kWKPluginUnavailabilityReasonInsecurePluginVersion:599 return _WKPlugInUnavailabilityReasonInsecurePluginVersion;600 }601 ASSERT_NOT_REACHED();602 return _WKPlugInUnavailabilityReasonPluginMissing;603 }604 605 void UIDelegate::UIClient::unavailablePluginButtonClicked(WebPageProxy&, WKPluginUnavailabilityReason reason, API::Dictionary& plugInInfo)606 {607 if (!m_uiDelegate.m_delegateMethods.webViewUnavailablePlugInButtonClicked)608 return;609 610 auto delegate = m_uiDelegate.m_delegate.get();611 if (!delegate)612 return;613 614 [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView unavailablePlugInButtonClickedWithReason:toWKPlugInUnavailabilityReason(reason) plugInInfo:wrapper(plugInInfo)];615 }616 617 static _WKResourceLimit toWKResourceLimit(WKResourceLimit limit)618 {619 switch (limit) {620 case kWKResourceLimitMemory:621 return _WKResourceLimitMemory;622 case kWKResourceLimitCPU:623 return _WKResourceLimitCPU;624 }625 ASSERT_NOT_REACHED();626 return _WKResourceLimitMemory;627 }628 629 void UIDelegate::UIClient::didExceedBackgroundResourceLimitWhileInForeground(WebPageProxy&, WKResourceLimit limit)630 {631 if (!m_uiDelegate.m_delegateMethods.webViewDidExceedBackgroundResourceLimitWhileInForeground)632 return;633 634 auto delegate = m_uiDelegate.m_delegate.get();635 if (!delegate)636 return;637 638 [static_cast<id <WKUIDelegatePrivate>>(delegate) _webView:m_uiDelegate.m_webView didExceedBackgroundResourceLimitWhileInForeground:toWKResourceLimit(limit)];639 }640 641 void UIDelegate::UIClient::didNotHandleWheelEvent(WebPageProxy*, const NativeWebWheelEvent& event)642 {643 if (!m_uiDelegate.m_delegateMethods.webViewDidNotHandleWheelEvent)644 return;645 646 auto delegate = m_uiDelegate.m_delegate.get();647 if (!delegate)648 return;649 650 [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView didNotHandleWheelEvent:event.nativeEvent()];651 }652 653 void UIDelegate::UIClient::setIsResizable(WebKit::WebPageProxy&, bool resizable)654 {655 if (!m_uiDelegate.m_delegateMethods.webViewSetResizable)656 return;657 658 auto delegate = m_uiDelegate.m_delegate.get();659 if (!delegate)660 return;661 662 [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView setResizable:resizable];663 }664 665 void UIDelegate::UIClient::setWindowFrame(WebKit::WebPageProxy&, const WebCore::FloatRect& frame)666 {667 if (!m_uiDelegate.m_delegateMethods.webViewSetWindowFrame)668 return;669 670 auto delegate = m_uiDelegate.m_delegate.get();671 if (!delegate)672 return;673 674 [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView setWindowFrame:frame];675 }676 677 void UIDelegate::UIClient::windowFrame(WebKit::WebPageProxy&, Function<void(WebCore::FloatRect)>&& completionHandler)678 {679 if (!m_uiDelegate.m_delegateMethods.webViewGetWindowFrameWithCompletionHandler)680 return completionHandler({ });681 682 auto delegate = m_uiDelegate.m_delegate.get();683 if (!delegate)684 return completionHandler({ });685 686 [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView getWindowFrameWithCompletionHandler:makeBlockPtr([completionHandler = WTFMove(completionHandler), checker = CompletionHandlerCallChecker::create(delegate.get(), @selector(_webView:getWindowFrameWithCompletionHandler:))](CGRect frame) {687 if (checker->completionHandlerHasBeenCalled())688 return;689 checker->didCallCompletionHandler();690 completionHandler(frame);691 }).get()];692 }693 694 void UIDelegate::UIClient::mouseDidMoveOverElement(WebPageProxy&, const WebHitTestResultData& data, OptionSet<WebEvent::Modifier> modifiers, API::Object* userInfo)695 {696 if (!m_uiDelegate.m_delegateMethods.webViewMouseDidMoveOverElementWithFlagsUserInfo)697 return;698 699 auto delegate = m_uiDelegate.m_delegate.get();700 if (!delegate)701 return;702 703 auto apiHitTestResult = API::HitTestResult::create(data);704 [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView mouseDidMoveOverElement:wrapper(apiHitTestResult.get()) withFlags:WebEventFactory::toNSEventModifierFlags(modifiers) userInfo:userInfo ? static_cast<id <NSSecureCoding>>(userInfo->wrapper()) : nil];705 }706 707 489 static _WKAutoplayEventFlags toWKAutoplayEventFlags(OptionSet<WebCore::AutoplayEventFlags> flags) 708 490 { … … 734 516 } 735 517 518 void UIDelegate::UIClient::handleAutoplayEvent(WebPageProxy&, WebCore::AutoplayEvent event, OptionSet<WebCore::AutoplayEventFlags> flags) 519 { 520 if (!m_uiDelegate.m_delegateMethods.webViewHandleAutoplayEventWithFlags) 521 return; 522 523 auto delegate = m_uiDelegate.m_delegate.get(); 524 if (!delegate) 525 return; 526 527 [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView handleAutoplayEvent:toWKAutoplayEvent(event) withFlags:toWKAutoplayEventFlags(flags)]; 528 } 529 530 #if PLATFORM(MAC) 531 bool UIDelegate::UIClient::canRunModal() const 532 { 533 return m_uiDelegate.m_delegateMethods.webViewRunModal; 534 } 535 536 void UIDelegate::UIClient::runModal(WebPageProxy&) 537 { 538 if (!m_uiDelegate.m_delegateMethods.webViewRunModal) 539 return; 540 541 auto delegate = m_uiDelegate.m_delegate.get(); 542 if (!delegate) 543 return; 544 545 [(id <WKUIDelegatePrivate>)delegate _webViewRunModal:m_uiDelegate.m_webView]; 546 } 547 548 float UIDelegate::UIClient::headerHeight(WebPageProxy&, WebFrameProxy& webFrameProxy) 549 { 550 if (!m_uiDelegate.m_delegateMethods.webViewHeaderHeight) 551 return 0; 552 553 auto delegate = m_uiDelegate.m_delegate.get(); 554 if (!delegate) 555 return 0; 556 557 return [(id <WKUIDelegatePrivate>)delegate _webViewHeaderHeight:m_uiDelegate.m_webView]; 558 } 559 560 float UIDelegate::UIClient::footerHeight(WebPageProxy&, WebFrameProxy&) 561 { 562 if (!m_uiDelegate.m_delegateMethods.webViewFooterHeight) 563 return 0; 564 565 auto delegate = m_uiDelegate.m_delegate.get(); 566 if (!delegate) 567 return 0; 568 569 return [(id <WKUIDelegatePrivate>)delegate _webViewFooterHeight:m_uiDelegate.m_webView]; 570 } 571 572 void UIDelegate::UIClient::drawHeader(WebPageProxy&, WebFrameProxy& frame, WebCore::FloatRect&& rect) 573 { 574 if (!m_uiDelegate.m_delegateMethods.webViewDrawHeaderInRectForPageWithTitleURL) 575 return; 576 577 auto delegate = m_uiDelegate.m_delegate.get(); 578 if (!delegate) 579 return; 580 581 [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView drawHeaderInRect:rect forPageWithTitle:frame.title() URL:frame.url()]; 582 } 583 584 void UIDelegate::UIClient::drawFooter(WebPageProxy&, WebFrameProxy& frame, WebCore::FloatRect&& rect) 585 { 586 if (!m_uiDelegate.m_delegateMethods.webViewDrawFooterInRectForPageWithTitleURL) 587 return; 588 589 auto delegate = m_uiDelegate.m_delegate.get(); 590 if (!delegate) 591 return; 592 593 [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView drawFooterInRect:rect forPageWithTitle:frame.title() URL:frame.url()]; 594 } 595 596 void UIDelegate::UIClient::pageDidScroll(WebPageProxy*) 597 { 598 if (!m_uiDelegate.m_delegateMethods.webViewDidScroll) 599 return; 600 601 auto delegate = m_uiDelegate.m_delegate.get(); 602 if (!delegate) 603 return; 604 605 [(id <WKUIDelegatePrivate>)delegate _webViewDidScroll:m_uiDelegate.m_webView]; 606 } 607 608 void UIDelegate::UIClient::focus(WebPageProxy*) 609 { 610 if (!m_uiDelegate.m_delegateMethods.focusWebView) 611 return; 612 613 auto delegate = m_uiDelegate.m_delegate.get(); 614 if (!delegate) 615 return; 616 617 [(id <WKUIDelegatePrivate>)delegate _focusWebView:m_uiDelegate.m_webView]; 618 } 619 620 void UIDelegate::UIClient::unfocus(WebPageProxy*) 621 { 622 if (!m_uiDelegate.m_delegateMethods.unfocusWebView) 623 return; 624 625 auto delegate = m_uiDelegate.m_delegate.get(); 626 if (!delegate) 627 return; 628 629 [(id <WKUIDelegatePrivate>)delegate _unfocusWebView:m_uiDelegate.m_webView]; 630 } 631 632 static _WKPlugInUnavailabilityReason toWKPlugInUnavailabilityReason(WKPluginUnavailabilityReason reason) 633 { 634 switch (reason) { 635 case kWKPluginUnavailabilityReasonPluginMissing: 636 return _WKPlugInUnavailabilityReasonPluginMissing; 637 case kWKPluginUnavailabilityReasonPluginCrashed: 638 return _WKPlugInUnavailabilityReasonPluginCrashed; 639 case kWKPluginUnavailabilityReasonInsecurePluginVersion: 640 return _WKPlugInUnavailabilityReasonInsecurePluginVersion; 641 } 642 ASSERT_NOT_REACHED(); 643 return _WKPlugInUnavailabilityReasonPluginMissing; 644 } 645 646 void UIDelegate::UIClient::unavailablePluginButtonClicked(WebPageProxy&, WKPluginUnavailabilityReason reason, API::Dictionary& plugInInfo) 647 { 648 if (!m_uiDelegate.m_delegateMethods.webViewUnavailablePlugInButtonClicked) 649 return; 650 651 auto delegate = m_uiDelegate.m_delegate.get(); 652 if (!delegate) 653 return; 654 655 [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView unavailablePlugInButtonClickedWithReason:toWKPlugInUnavailabilityReason(reason) plugInInfo:wrapper(plugInInfo)]; 656 } 657 658 static _WKResourceLimit toWKResourceLimit(WKResourceLimit limit) 659 { 660 switch (limit) { 661 case kWKResourceLimitMemory: 662 return _WKResourceLimitMemory; 663 case kWKResourceLimitCPU: 664 return _WKResourceLimitCPU; 665 } 666 ASSERT_NOT_REACHED(); 667 return _WKResourceLimitMemory; 668 } 669 670 void UIDelegate::UIClient::didExceedBackgroundResourceLimitWhileInForeground(WebPageProxy&, WKResourceLimit limit) 671 { 672 if (!m_uiDelegate.m_delegateMethods.webViewDidExceedBackgroundResourceLimitWhileInForeground) 673 return; 674 675 auto delegate = m_uiDelegate.m_delegate.get(); 676 if (!delegate) 677 return; 678 679 [static_cast<id <WKUIDelegatePrivate>>(delegate) _webView:m_uiDelegate.m_webView didExceedBackgroundResourceLimitWhileInForeground:toWKResourceLimit(limit)]; 680 } 681 682 void UIDelegate::UIClient::didNotHandleWheelEvent(WebPageProxy*, const NativeWebWheelEvent& event) 683 { 684 if (!m_uiDelegate.m_delegateMethods.webViewDidNotHandleWheelEvent) 685 return; 686 687 auto delegate = m_uiDelegate.m_delegate.get(); 688 if (!delegate) 689 return; 690 691 [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView didNotHandleWheelEvent:event.nativeEvent()]; 692 } 693 694 void UIDelegate::UIClient::setIsResizable(WebKit::WebPageProxy&, bool resizable) 695 { 696 if (!m_uiDelegate.m_delegateMethods.webViewSetResizable) 697 return; 698 699 auto delegate = m_uiDelegate.m_delegate.get(); 700 if (!delegate) 701 return; 702 703 [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView setResizable:resizable]; 704 } 705 706 void UIDelegate::UIClient::setWindowFrame(WebKit::WebPageProxy&, const WebCore::FloatRect& frame) 707 { 708 if (!m_uiDelegate.m_delegateMethods.webViewSetWindowFrame) 709 return; 710 711 auto delegate = m_uiDelegate.m_delegate.get(); 712 if (!delegate) 713 return; 714 715 [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView setWindowFrame:frame]; 716 } 717 718 void UIDelegate::UIClient::windowFrame(WebKit::WebPageProxy&, Function<void(WebCore::FloatRect)>&& completionHandler) 719 { 720 if (!m_uiDelegate.m_delegateMethods.webViewGetWindowFrameWithCompletionHandler) 721 return completionHandler({ }); 722 723 auto delegate = m_uiDelegate.m_delegate.get(); 724 if (!delegate) 725 return completionHandler({ }); 726 727 [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView getWindowFrameWithCompletionHandler:makeBlockPtr([completionHandler = WTFMove(completionHandler), checker = CompletionHandlerCallChecker::create(delegate.get(), @selector(_webView:getWindowFrameWithCompletionHandler:))](CGRect frame) { 728 if (checker->completionHandlerHasBeenCalled()) 729 return; 730 checker->didCallCompletionHandler(); 731 completionHandler(frame); 732 }).get()]; 733 } 734 735 void UIDelegate::UIClient::mouseDidMoveOverElement(WebPageProxy&, const WebHitTestResultData& data, OptionSet<WebEvent::Modifier> modifiers, API::Object* userInfo) 736 { 737 if (!m_uiDelegate.m_delegateMethods.webViewMouseDidMoveOverElementWithFlagsUserInfo) 738 return; 739 740 auto delegate = m_uiDelegate.m_delegate.get(); 741 if (!delegate) 742 return; 743 744 auto apiHitTestResult = API::HitTestResult::create(data); 745 [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView mouseDidMoveOverElement:wrapper(apiHitTestResult.get()) withFlags:WebEventFactory::toNSEventModifierFlags(modifiers) userInfo:userInfo ? static_cast<id <NSSecureCoding>>(userInfo->wrapper()) : nil]; 746 } 747 736 748 void UIDelegate::UIClient::toolbarsAreVisible(WebPageProxy&, Function<void(bool)>&& completionHandler) 737 749 { … … 761 773 762 774 [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView didClickAutoFillButtonWithUserInfo:userInfo ? static_cast<id <NSSecureCoding>>(userInfo->wrapper()) : nil]; 763 }764 765 void UIDelegate::UIClient::handleAutoplayEvent(WebPageProxy&, WebCore::AutoplayEvent event, OptionSet<WebCore::AutoplayEventFlags> flags)766 {767 if (!m_uiDelegate.m_delegateMethods.webViewHandleAutoplayEventWithFlags)768 return;769 770 auto delegate = m_uiDelegate.m_delegate.get();771 if (!delegate)772 return;773 774 [(id <WKUIDelegatePrivate>)delegate _webView:m_uiDelegate.m_webView handleAutoplayEvent:toWKAutoplayEvent(event) withFlags:toWKAutoplayEventFlags(flags)];775 775 } 776 776 -
trunk/Tools/ChangeLog
r254547 r254553 1 2020-01-14 Luming Yin <luming_yin@apple.com> 2 3 Update API availability for autoplay event 4 https://bugs.webkit.org/show_bug.cgi?id=202214 5 <rdar://problem/55710395> 6 7 Reviewed by Tim Horton. 8 9 * TestWebKitAPI/Tests/WebKit/js-play-with-controls.html: 10 * TestWebKitAPI/Tests/WebKitCocoa/audio-with-play-button.html: 11 * TestWebKitAPI/Tests/WebKitCocoa/video-with-play-button.html: 12 Provide an id for each play button on various testing pages so that they can be triggered on iOS. 13 14 * TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm: 15 (-[AutoplayPoliciesDelegate _webView:handleAutoplayEvent:withFlags:]): 16 (-[AsyncAutoplayPoliciesDelegate _webView:handleAutoplayEvent:withFlags:]): 17 (TEST): 18 Enable tests related to autoplay policy on iOS. 19 20 * TestWebKitAPI/cocoa/TestWKWebView.h: 21 * TestWebKitAPI/cocoa/TestWKWebView.mm: 22 (-[TestWKWebView clickOnElementID:]): 23 Helper method that performs a click on a given element ID. 24 1 25 2020-01-14 Jonathan Bedard <jbedard@apple.com> 2 26 -
trunk/Tools/TestWebKitAPI/Tests/WebKit/js-play-with-controls.html
r213316 r254553 35 35 </head> 36 36 <body onload="pageLoaded()"> 37 <button onclick="play()">Play</button>38 <button onclick="mute()">Mute</button>37 <button id="playButton" onclick="play()">Play</button> 38 <button id="muteButton" onclick="mute()">Mute</button> 39 39 <video id="video" onplaying=beganPlaying() onended=endedPlaying() src="test.mp4" /> 40 40 </body> -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WebsitePolicies.mm
r254005 r254553 64 64 static bool finishedNavigation; 65 65 66 #if PLATFORM(MAC)67 66 static Optional<_WKAutoplayEvent> receivedAutoplayEvent; 68 67 static Optional<_WKAutoplayEventFlags> receivedAutoplayEventFlags; 69 #endif70 68 71 69 static size_t alertCount; … … 199 197 } 200 198 201 #if PLATFORM(MAC)202 199 - (void)_webView:(WKWebView *)webView handleAutoplayEvent:(_WKAutoplayEvent)event withFlags:(_WKAutoplayEventFlags)flags 203 200 { … … 205 202 receivedAutoplayEvent = event; 206 203 } 207 #endif208 204 209 205 @end … … 235 231 } 236 232 237 #if PLATFORM(MAC)238 233 - (void)_webView:(WKWebView *)webView handleAutoplayEvent:(_WKAutoplayEvent)event withFlags:(_WKAutoplayEventFlags)flags 239 234 { … … 241 236 receivedAutoplayEvent = event; 242 237 } 243 #endif244 238 245 239 @end … … 266 260 267 261 #if PLATFORM(IOS_FAMILY) 268 [configuration setAllowsInlineMediaPlayback:YES]; 262 configuration.get().allowsInlineMediaPlayback = YES; 263 configuration.get()._inlineMediaPlaybackRequiresPlaysInlineAttribute = NO; 269 264 #endif 270 265 … … 355 350 } 356 351 357 #if PLATFORM(MAC)358 352 static void runUntilReceivesAutoplayEvent(WKAutoplayEvent event) 359 353 { … … 362 356 } 363 357 358 #if PLATFORM(MAC) 364 359 TEST(WebpagePreferences, WebsitePoliciesPlayAfterPreventedAutoplay) 365 360 { … … 432 427 ASSERT_TRUE(*receivedAutoplayEventFlags & kWKAutoplayEventFlagsPlaybackWasPrevented); 433 428 } 429 #endif 434 430 435 431 TEST(WebpagePreferences, WebsitePoliciesPlayingWithUserGesture) 436 432 { 437 433 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 434 #if PLATFORM(IOS_FAMILY) 435 configuration.get().allowsInlineMediaPlayback = YES; 436 configuration.get()._inlineMediaPlaybackRequiresPlaysInlineAttribute = NO; 437 #endif 438 438 439 auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 439 440 … … 447 448 receivedAutoplayEvent = WTF::nullopt; 448 449 450 #if PLATFORM(MAC) 449 451 NSPoint playButtonClickPoint = NSMakePoint(20, 580); 452 #endif 450 453 451 454 NSURLRequest *request = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"audio-with-play-button" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]]; 452 455 [webView loadRequest:request]; 453 456 [webView waitForMessage:@"loaded"]; 457 458 #if PLATFORM(MAC) 454 459 [webView mouseDownAtPoint:playButtonClickPoint simulatePressure:NO]; 455 460 [webView mouseUpAtPoint:playButtonClickPoint]; 461 #else 462 [webView clickOnElementID:@"playButton"]; 463 #endif 456 464 457 465 runUntilReceivesAutoplayEvent(kWKAutoplayEventDidPlayMediaWithUserGesture); … … 464 472 [webView loadRequest:request]; 465 473 [webView waitForMessage:@"loaded"]; 474 475 #if PLATFORM(MAC) 466 476 [webView mouseDownAtPoint:playButtonClickPoint simulatePressure:NO]; 467 477 [webView mouseUpAtPoint:playButtonClickPoint]; 478 #else 479 [webView clickOnElementID:@"playButton"]; 480 #endif 468 481 469 482 runUntilReceivesAutoplayEvent(kWKAutoplayEventDidPlayMediaWithUserGesture); … … 475 488 { 476 489 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 490 #if PLATFORM(IOS_FAMILY) 491 configuration.get().allowsInlineMediaPlayback = YES; 492 configuration.get()._inlineMediaPlaybackRequiresPlaysInlineAttribute = NO; 493 #endif 494 477 495 auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 336, 276) configuration:configuration.get()]); 478 496 … … 494 512 { 495 513 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 514 #if PLATFORM(IOS_FAMILY) 515 configuration.get().allowsInlineMediaPlayback = YES; 516 configuration.get()._inlineMediaPlaybackRequiresPlaysInlineAttribute = NO; 517 #endif 518 496 519 auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 336, 276) configuration:configuration.get()]); 497 520 … … 518 541 ASSERT_TRUE(receivedAutoplayEvent == WTF::nullopt); 519 542 543 #if PLATFORM(MAC) 520 544 const NSPoint muteButtonClickPoint = NSMakePoint(80, 256); 521 545 [webView mouseDownAtPoint:muteButtonClickPoint simulatePressure:NO]; 522 546 [webView mouseUpAtPoint:muteButtonClickPoint]; 547 #else 548 [webView clickOnElementID:@"muteButton"]; 549 #endif 550 523 551 runUntilReceivesAutoplayEvent(kWKAutoplayEventUserDidInterfereWithPlayback); 524 552 ASSERT_TRUE(*receivedAutoplayEventFlags & kWKAutoplayEventFlagsHasAudio); … … 529 557 ASSERT_TRUE(receivedAutoplayEvent == WTF::nullopt); 530 558 559 #if PLATFORM(MAC) 531 560 const NSPoint playButtonClickPoint = NSMakePoint(20, 256); 532 561 [webView mouseDownAtPoint:playButtonClickPoint simulatePressure:NO]; 533 562 [webView mouseUpAtPoint:playButtonClickPoint]; 563 #else 564 [webView clickOnElementID:@"playButton"]; 565 #endif 566 534 567 runUntilReceivesAutoplayEvent(kWKAutoplayEventUserDidInterfereWithPlayback); 535 568 ASSERT_TRUE(*receivedAutoplayEventFlags & kWKAutoplayEventFlagsHasAudio); 536 569 } 537 570 571 #if PLATFORM(MAC) 538 572 TEST(WebpagePreferences, WebsitePoliciesPerDocumentAutoplayBehaviorMediaLoading) 539 573 { … … 714 748 [webView waitForMessage:@"autoplayed"]; 715 749 } 750 #endif // PLATFORM(MAC) 716 751 717 752 TEST(WebpagePreferences, WebsitePoliciesUpdates) 718 753 { 719 754 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 755 #if PLATFORM(IOS_FAMILY) 756 configuration.get().allowsInlineMediaPlayback = YES; 757 configuration.get()._inlineMediaPlaybackRequiresPlaysInlineAttribute = NO; 758 #endif 759 720 760 auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 721 761 auto delegate = adoptNS([[AutoplayPoliciesDelegate alloc] init]); … … 751 791 } 752 792 793 #if PLATFORM(MAC) 753 794 TEST(WebpagePreferences, WebsitePoliciesArbitraryUserGestureQuirk) 754 795 { … … 904 945 [webView waitForMessage:@"did-not-play-video2"]; 905 946 } 947 #endif 906 948 907 949 TEST(WebpagePreferences, WebsitePoliciesAutoplayQuirksAsyncPolicyDelegate) 908 950 { 909 951 auto configuration = adoptNS([[WKWebViewConfiguration alloc] init]); 952 #if PLATFORM(IOS_FAMILY) 953 configuration.get().allowsInlineMediaPlayback = YES; 954 configuration.get()._inlineMediaPlaybackRequiresPlaysInlineAttribute = NO; 955 #endif 956 [configuration preferences]._needsSiteSpecificQuirks = YES; 910 957 auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600) configuration:configuration.get()]); 911 958 912 959 auto delegate = adoptNS([[AsyncAutoplayPoliciesDelegate alloc] init]); 913 960 [webView setNavigationDelegate:delegate.get()]; 914 915 WKRetainPtr<WKPreferencesRef> preferences = adoptWK(WKPreferencesCreate());916 WKPreferencesSetNeedsSiteSpecificQuirks(preferences.get(), true);917 WKPageGroupSetPreferences(WKPageGetPageGroup([webView _pageForTesting]), preferences.get());918 961 919 962 NSURLRequest *requestWithAudio = [NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"autoplay-check" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]]; … … 947 990 [webView waitForMessage:@"on-pause"]; 948 991 } 949 #endif // PLATFORM(MAC)950 992 951 993 TEST(WebpagePreferences, InvalidCustomHeaders) -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/audio-with-play-button.html
r239625 r254553 22 22 </head> 23 23 <body onload="pageLoaded()"> 24 <button onclick="play()">Play</button>24 <button id="playButton" onclick="play()">Play</button> 25 25 <br /> 26 26 <audio controls id="audio" onplaying="beganPlaying()" src="silence-long.m4a" /> -
trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/video-with-play-button.html
r239625 r254553 22 22 </head> 23 23 <body onload="pageLoaded()"> 24 <button onclick="play()">Play</button>24 <button id="playButton" onclick="play()">Play</button> 25 25 <br /> 26 26 <video controls id="video" onplaying="beganPlaying()" src="long-test.mp4"></video> -
trunk/Tools/TestWebKitAPI/cocoa/TestWKWebView.h
r253950 r254553 87 87 - (void)addToTestWindow; 88 88 - (BOOL)selectionRangeHasStartOffset:(int)start endOffset:(int)end; 89 - (void)clickOnElementID:(NSString *)elementID; 89 90 @end 90 91 -
trunk/Tools/TestWebKitAPI/cocoa/TestWKWebView.mm
r253950 r254553 516 516 } 517 517 518 - (void)clickOnElementID:(NSString *)elementID 519 { 520 [self evaluateJavaScript:[NSString stringWithFormat:@"document.getElementById('%@').click();", elementID] completionHandler:nil]; 521 } 522 518 523 #if PLATFORM(IOS_FAMILY) 519 524
Note: See TracChangeset
for help on using the changeset viewer.