| // Copyright 2020 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. |
| |
| #import "ios/chrome/browser/overlays/overlay_request_queue_callback_installer_impl.h" |
| |
| #include "base/check.h" |
| #include "ios/chrome/browser/overlays/public/overlay_request_callback_installer.h" |
| |
| #if !defined(__has_feature) || !__has_feature(objc_arc) |
| #error "This file requires ARC support." |
| #endif |
| |
| #pragma mark - OverlayRequestQueueCallbackInstaller |
| |
| // static |
| std::unique_ptr<OverlayRequestQueueCallbackInstaller> |
| OverlayRequestQueueCallbackInstaller::Create(web::WebState* web_state, |
| OverlayModality modality) { |
| return std::make_unique<OverlayRequestQueueCallbackInstallerImpl>(web_state, |
| modality); |
| } |
| |
| #pragma mark - OverlayRequestQueueCallbackInstallerImpl |
| |
| OverlayRequestQueueCallbackInstallerImpl:: |
| OverlayRequestQueueCallbackInstallerImpl(web::WebState* web_state, |
| OverlayModality modality) |
| : request_added_observer_(web_state, modality) {} |
| |
| OverlayRequestQueueCallbackInstallerImpl:: |
| ~OverlayRequestQueueCallbackInstallerImpl() = default; |
| |
| #pragma mark OverlayRequestQueueCallbackInstaller |
| |
| void OverlayRequestQueueCallbackInstallerImpl::AddRequestCallbackInstaller( |
| std::unique_ptr<OverlayRequestCallbackInstaller> installer) { |
| request_added_observer_.AddInstaller(std::move(installer)); |
| } |
| |
| #pragma mark - OverlayRequestQueueCallbackInstallerImpl::RequestAddedObserver |
| |
| OverlayRequestQueueCallbackInstallerImpl::RequestAddedObserver:: |
| RequestAddedObserver(web::WebState* web_state, OverlayModality modality) |
| : scoped_observer_(this) { |
| DCHECK(web_state); |
| scoped_observer_.Add( |
| OverlayRequestQueueImpl::FromWebState(web_state, modality)); |
| } |
| |
| OverlayRequestQueueCallbackInstallerImpl::RequestAddedObserver:: |
| ~RequestAddedObserver() = default; |
| |
| #pragma mark Public |
| |
| void OverlayRequestQueueCallbackInstallerImpl::RequestAddedObserver:: |
| AddInstaller(std::unique_ptr<OverlayRequestCallbackInstaller> installer) { |
| DCHECK(installer); |
| installers_.push_back(std::move(installer)); |
| } |
| |
| #pragma mark OverlayRequestQueueImpl::Observer |
| |
| void OverlayRequestQueueCallbackInstallerImpl::RequestAddedObserver:: |
| RequestAddedToQueue(OverlayRequestQueueImpl* queue, |
| OverlayRequest* request, |
| size_t index) { |
| for (auto& installer : installers_) { |
| installer->InstallCallbacks(request); |
| } |
| } |
| |
| void OverlayRequestQueueCallbackInstallerImpl::RequestAddedObserver:: |
| OverlayRequestQueueDestroyed(OverlayRequestQueueImpl* queue) { |
| scoped_observer_.Remove(queue); |
| } |