blob: ac4b6dbac53dad4b4c6474e95231bb3337a661a1 [file] [log] [blame]
// Copyright 2017 The Chromium Authors
// 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/check.h"
#include "components/payments/content/content_payment_request_delegate.h"
namespace payments {
class PaymentRequest;
PaymentRequestDisplayManager::DisplayHandle::DisplayHandle(
base::WeakPtr<PaymentRequestDisplayManager> display_manager,
base::WeakPtr<ContentPaymentRequestDelegate> delegate)
: display_manager_(display_manager), delegate_(delegate) {
if (display_manager_)
display_manager_->set_current_handle(GetWeakPtr());
}
PaymentRequestDisplayManager::DisplayHandle::~DisplayHandle() {
if (display_manager_)
display_manager_->set_current_handle(nullptr);
}
void PaymentRequestDisplayManager::DisplayHandle::Show(
base::WeakPtr<PaymentRequest> request) {
DCHECK(request);
was_shown_ = true;
if (delegate_)
delegate_->ShowDialog(request);
}
void PaymentRequestDisplayManager::DisplayHandle::Retry() {
if (delegate_)
delegate_->RetryDialog();
}
void PaymentRequestDisplayManager::DisplayHandle::DisplayPaymentHandlerWindow(
const GURL& url,
PaymentHandlerOpenWindowCallback callback) {
if (delegate_)
delegate_->EmbedPaymentHandlerWindow(url, std::move(callback));
}
base::WeakPtr<PaymentRequestDisplayManager::DisplayHandle>
PaymentRequestDisplayManager::DisplayHandle::GetWeakPtr() {
return weak_ptr_factory_.GetWeakPtr();
}
PaymentRequestDisplayManager::PaymentRequestDisplayManager()
: current_handle_(nullptr) {}
PaymentRequestDisplayManager::~PaymentRequestDisplayManager() {}
std::unique_ptr<PaymentRequestDisplayManager::DisplayHandle>
PaymentRequestDisplayManager::TryShow(
base::WeakPtr<ContentPaymentRequestDelegate> delegate) {
std::unique_ptr<PaymentRequestDisplayManager::DisplayHandle> handle;
if (!current_handle_ && delegate) {
handle = std::make_unique<PaymentRequestDisplayManager::DisplayHandle>(
GetWeakPtr(), 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);
}
}
base::WeakPtr<PaymentRequestDisplayManager>
PaymentRequestDisplayManager::GetWeakPtr() {
return weak_ptr_factory_.GetWeakPtr();
}
} // namespace payments