blob: 781825117bab04ad8b2856e40758850d9c61189c [file] [log] [blame]
// Copyright 2019 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.
#include "ios/chrome/browser/overlays/public/overlay_request_callback_installer.h"
#include "base/bind.h"
#include "ios/chrome/browser/overlays/public/overlay_callback_manager.h"
#include "ios/chrome/browser/overlays/public/overlay_request.h"
#include "ios/chrome/browser/overlays/public/overlay_request_support.h"
OverlayRequestCallbackInstaller::OverlayRequestCallbackInstaller() = default;
OverlayRequestCallbackInstaller::~OverlayRequestCallbackInstaller() = default;
void OverlayRequestCallbackInstaller::InstallCallbacks(
OverlayRequest* request) {
// Early return if |request| is unsupported or if callbacks have already been
// installed.
if (!GetRequestSupport()->IsRequestSupported(request) ||
requests_.find(request) != requests_.end()) {
return;
}
requests_.insert(request);
// Add the completion callback to remove the request from |requests_|.
request->GetCallbackManager()->AddCompletionCallback(
base::BindOnce(&OverlayRequestCallbackInstaller::OverlayCompleted,
weak_factory_.GetWeakPtr(), request));
// Allow subclasses to install their own callbacks.
InstallCallbacksInternal(request);
}
const OverlayRequestSupport*
OverlayRequestCallbackInstaller::GetRequestSupport() const {
return OverlayRequestSupport::All();
}
void OverlayRequestCallbackInstaller::InstallCallbacksInternal(
OverlayRequest* request) {}
void OverlayRequestCallbackInstaller::OverlayCompleted(
OverlayRequest* request,
OverlayResponse* response) {
requests_.erase(request);
}