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()11OverlayCallbackManagerImpl::~OverlayCallbackManagerImpl() { 12 // The completion callbacks must be executed before destruction. 13 DCHECK(completion_callbacks_.empty()); 14 } 15 ExecuteCompletionCallbacks()16void 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)24void OverlayCallbackManagerImpl::SetCompletionResponse( 25 std::unique_ptr<OverlayResponse> response) { 26 completion_response_ = std::move(response); 27 } 28 GetCompletionResponse() const29OverlayResponse* OverlayCallbackManagerImpl::GetCompletionResponse() const { 30 return completion_response_.get(); 31 } 32 AddCompletionCallback(OverlayCompletionCallback callback)33void 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)39void 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)47void OverlayCallbackManagerImpl::AddDispatchCallback( 48 OverlayDispatchCallback callback) { 49 dispatch_callbacks_.emplace_back(std::move(callback)); 50 } 51