| // Copyright 2017 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "components/payments/content/payment_request_display_manager.h" | 
 |  | 
 | #include "base/logging.h" | 
 | #include "components/payments/content/content_payment_request_delegate.h" | 
 |  | 
 | namespace payments { | 
 |  | 
 | class PaymentRequest; | 
 |  | 
 | PaymentRequestDisplayManager::DisplayHandle::DisplayHandle( | 
 |     PaymentRequestDisplayManager* display_manager, | 
 |     ContentPaymentRequestDelegate* delegate) | 
 |     : display_manager_(display_manager), delegate_(delegate) { | 
 |   display_manager_->set_current_handle(this); | 
 | } | 
 |  | 
 | PaymentRequestDisplayManager::DisplayHandle::~DisplayHandle() { | 
 |   display_manager_->set_current_handle(nullptr); | 
 | } | 
 |  | 
 | void PaymentRequestDisplayManager::DisplayHandle::Show( | 
 |     PaymentRequest* request) { | 
 |   DCHECK(request); | 
 |   DCHECK(delegate_); | 
 |   delegate_->ShowDialog(request); | 
 | } | 
 |  | 
 | void PaymentRequestDisplayManager::DisplayHandle::Retry() { | 
 |   DCHECK(delegate_); | 
 |   delegate_->RetryDialog(); | 
 | } | 
 |  | 
 | void PaymentRequestDisplayManager::DisplayHandle::DisplayPaymentHandlerWindow( | 
 |     const GURL& url, | 
 |     PaymentHandlerOpenWindowCallback callback) { | 
 |   DCHECK(delegate_); | 
 |   delegate_->EmbedPaymentHandlerWindow(url, std::move(callback)); | 
 | } | 
 |  | 
 | PaymentRequestDisplayManager::PaymentRequestDisplayManager() | 
 |     : current_handle_(nullptr) {} | 
 |  | 
 | PaymentRequestDisplayManager::~PaymentRequestDisplayManager() {} | 
 |  | 
 | std::unique_ptr<PaymentRequestDisplayManager::DisplayHandle> | 
 | PaymentRequestDisplayManager::TryShow(ContentPaymentRequestDelegate* delegate) { | 
 |   std::unique_ptr<PaymentRequestDisplayManager::DisplayHandle> handle = nullptr; | 
 |   if (!current_handle_) { | 
 |     handle = std::make_unique<PaymentRequestDisplayManager::DisplayHandle>( | 
 |         this, delegate); | 
 |   } | 
 |  | 
 |   return handle; | 
 | } | 
 |  | 
 | void PaymentRequestDisplayManager::ShowPaymentHandlerWindow( | 
 |     const GURL& url, | 
 |     PaymentHandlerOpenWindowCallback callback) { | 
 |   if (current_handle_) { | 
 |     current_handle_->DisplayPaymentHandlerWindow(url, std::move(callback)); | 
 |   } else { | 
 |     std::move(callback).Run(false, 0, 0); | 
 |   } | 
 | } | 
 |  | 
 | }  // namespace payments |