1 // Copyright 2019 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "ios/chrome/browser/overlays/overlay_callback_manager_impl.h"
6 
7 #include "base/check.h"
8 
9 OverlayCallbackManagerImpl::OverlayCallbackManagerImpl() = default;
10 
~OverlayCallbackManagerImpl()11 OverlayCallbackManagerImpl::~OverlayCallbackManagerImpl() {
12   // The completion callbacks must be executed before destruction.
13   DCHECK(completion_callbacks_.empty());
14 }
15 
ExecuteCompletionCallbacks()16 void OverlayCallbackManagerImpl::ExecuteCompletionCallbacks() {
17   for (auto& callback : completion_callbacks_) {
18     DCHECK(!callback.is_null());
19     std::move(callback).Run(GetCompletionResponse());
20   }
21   completion_callbacks_.clear();
22 }
23 
SetCompletionResponse(std::unique_ptr<OverlayResponse> response)24 void OverlayCallbackManagerImpl::SetCompletionResponse(
25     std::unique_ptr<OverlayResponse> response) {
26   completion_response_ = std::move(response);
27 }
28 
GetCompletionResponse() const29 OverlayResponse* OverlayCallbackManagerImpl::GetCompletionResponse() const {
30   return completion_response_.get();
31 }
32 
AddCompletionCallback(OverlayCompletionCallback callback)33 void OverlayCallbackManagerImpl::AddCompletionCallback(
34     OverlayCompletionCallback callback) {
35   DCHECK(!callback.is_null());
36   completion_callbacks_.emplace_back(std::move(callback));
37 }
38 
DispatchResponse(std::unique_ptr<OverlayResponse> response)39 void OverlayCallbackManagerImpl::DispatchResponse(
40     std::unique_ptr<OverlayResponse> response) {
41   DCHECK(response);
42   for (auto& callback : dispatch_callbacks_) {
43     callback.Run(response.get());
44   }
45 }
46 
AddDispatchCallback(OverlayDispatchCallback callback)47 void OverlayCallbackManagerImpl::AddDispatchCallback(
48     OverlayDispatchCallback callback) {
49   dispatch_callbacks_.emplace_back(std::move(callback));
50 }
51