blob: ae3f0b91745a90ae19a588755ce323391091e78d [file] [log] [blame]
// 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);
}