Changeset 243447 in webkit
- Timestamp:
- Mar 25, 2019, 1:23:43 PM (7 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 5 edited
-
ChangeLog (modified) (1 diff)
-
Shared/ApplePay/WebPaymentCoordinatorProxy.cpp (modified) (2 diffs)
-
Shared/ApplePay/WebPaymentCoordinatorProxy.h (modified) (3 diffs)
-
Shared/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm (modified) (1 diff)
-
Shared/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r243443 r243447 1 2019-03-25 Andy Estes <aestes@apple.com> 2 3 [Apple Pay] Call +canMakePayments on a work queue 4 https://bugs.webkit.org/show_bug.cgi?id=196179 5 <rdar://problem/45388749> 6 7 Reviewed by Brady Eidson. 8 9 Calling +canMakePayments on either PKPaymentAuthorizationController or 10 PKPaymentAuthorizationViewController results in synchronous IPC and is therefore very 11 expensive to call on the main thread. On iOS, these calls are made in the network process, 12 and on Mac in the UI process. 13 14 Call these methods on a work queue to avoid main thread spins. 15 16 * Shared/ApplePay/WebPaymentCoordinatorProxy.cpp: 17 (WebKit::WebPaymentCoordinatorProxy::canMakePayments): 18 * Shared/ApplePay/WebPaymentCoordinatorProxy.h: 19 * Shared/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm: 20 (WebKit::WebPaymentCoordinatorProxy::platformCanMakePayments): 21 * Shared/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm: 22 (WebKit::WebPaymentCoordinatorProxy::platformCanMakePayments): 23 1 24 2019-03-25 Andy Estes <aestes@apple.com> 2 25 -
trunk/Source/WebKit/Shared/ApplePay/WebPaymentCoordinatorProxy.cpp
r243443 r243447 46 46 WebPaymentCoordinatorProxy::WebPaymentCoordinatorProxy(WebPaymentCoordinatorProxy::Client& client) 47 47 : m_client { client } 48 , m_canMakePaymentsQueue { WorkQueue::create("com.apple.WebKit.CanMakePayments") } 48 49 { 49 50 m_client.paymentCoordinatorAddMessageReceiver(*this, Messages::WebPaymentCoordinatorProxy::messageReceiverName(), *this); … … 71 72 void WebPaymentCoordinatorProxy::canMakePayments(CompletionHandler<void(bool)>&& reply) 72 73 { 73 reply(platformCanMakePayments());74 platformCanMakePayments(WTFMove(reply)); 74 75 } 75 76 -
trunk/Source/WebKit/Shared/ApplePay/WebPaymentCoordinatorProxy.h
r243443 r243447 35 35 #include <wtf/RetainPtr.h> 36 36 #include <wtf/WeakPtr.h> 37 #include <wtf/WorkQueue.h> 37 38 38 39 #if USE(APPLE_INTERNAL_SDK) … … 133 134 void hidePaymentUI(); 134 135 135 bool platformCanMakePayments();136 void platformCanMakePayments(CompletionHandler<void(bool)>&&); 136 137 void platformCanMakePaymentsWithActiveCard(const String& merchantIdentifier, const String& domainName, PAL::SessionID, WTF::Function<void(bool)>&& completionHandler); 137 138 void platformOpenPaymentSetup(const String& merchantIdentifier, const String& domainName, WTF::Function<void(bool)>&& completionHandler); … … 184 185 185 186 std::unique_ptr<PaymentAuthorizationPresenter> m_authorizationPresenter; 187 Ref<WorkQueue> m_canMakePaymentsQueue; 186 188 187 189 #if PLATFORM(MAC) -
trunk/Source/WebKit/Shared/ApplePay/ios/WebPaymentCoordinatorProxyIOS.mm
r243412 r243447 39 39 namespace WebKit { 40 40 41 bool WebPaymentCoordinatorProxy::platformCanMakePayments()41 void WebPaymentCoordinatorProxy::platformCanMakePayments(CompletionHandler<void(bool)>&& completionHandler) 42 42 { 43 return [PAL::getPKPaymentAuthorizationControllerClass() canMakePayments]; 43 m_canMakePaymentsQueue->dispatch([theClass = retainPtr(PAL::getPKPaymentAuthorizationControllerClass()), completionHandler = WTFMove(completionHandler)]() mutable { 44 RunLoop::main().dispatch([canMakePayments = [theClass canMakePayments], completionHandler = WTFMove(completionHandler)]() mutable { 45 completionHandler(canMakePayments); 46 }); 47 }); 44 48 } 45 49 -
trunk/Source/WebKit/Shared/ApplePay/mac/WebPaymentCoordinatorProxyMac.mm
r243412 r243447 36 36 namespace WebKit { 37 37 38 bool WebPaymentCoordinatorProxy::platformCanMakePayments()38 void WebPaymentCoordinatorProxy::platformCanMakePayments(CompletionHandler<void(bool)>&& completionHandler) 39 39 { 40 40 if (!PAL::isPassKitFrameworkAvailable()) 41 return false;41 return completionHandler(false); 42 42 43 return [PAL::getPKPaymentAuthorizationViewControllerClass() canMakePayments]; 43 m_canMakePaymentsQueue->dispatch([theClass = retainPtr(PAL::getPKPaymentAuthorizationViewControllerClass()), completionHandler = WTFMove(completionHandler)]() mutable { 44 RunLoop::main().dispatch([canMakePayments = [theClass canMakePayments], completionHandler = WTFMove(completionHandler)]() mutable { 45 completionHandler(canMakePayments); 46 }); 47 }); 44 48 } 45 49
Note:
See TracChangeset
for help on using the changeset viewer.