chromium/chromeos/crosapi/cpp/scoped_allow_sync_call.h

// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROMEOS_CROSAPI_CPP_SCOPED_ALLOW_SYNC_CALL_H_
#define CHROMEOS_CROSAPI_CPP_SCOPED_ALLOW_SYNC_CALL_H_

#include "base/component_export.h"
#include "mojo/public/cpp/bindings/sync_call_restrictions.h"

class ChromePasswordManagerClient;
class ChromePasswordReuseDetectionManagerClient;

namespace crosapi {

// Chrome generally disallows sync IPC calls. Crosapi allows a small number of
// exceptions to support cross-platform code where other platforms all provide a
// synchronous implementation of a particular API. Use this sparingly.
class COMPONENT_EXPORT(CROSAPI) ScopedAllowSyncCall {
 private:
  // Consumers of this class must be explicitly added as a friend.
  friend class ::ChromePasswordManagerClient;
  friend class ::ChromePasswordReuseDetectionManagerClient;

  ScopedAllowSyncCall();
  ScopedAllowSyncCall(const ScopedAllowSyncCall&) = delete;
  ScopedAllowSyncCall& operator=(const ScopedAllowSyncCall&) = delete;
  ~ScopedAllowSyncCall();

  mojo::SyncCallRestrictions::ScopedAllowSyncCall scoped_allow_;
};

}  // namespace crosapi

#endif  // CHROMEOS_CROSAPI_CPP_SCOPED_ALLOW_SYNC_CALL_H_