chromium/chrome/browser/ash/u2f/u2f_notification.h

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

#ifndef CHROME_BROWSER_ASH_U2F_U2F_NOTIFICATION_H_
#define CHROME_BROWSER_ASH_U2F_U2F_NOTIFICATION_H_

#include <optional>
#include <set>
#include <string>

#include "base/memory/weak_ptr.h"

namespace ash {

// Detects whether the legacy, never-officially-launched built-in U2F feature is
// enabled. If so, shows a notification to tell the user about a security issue.
class U2FNotification {
 public:
  U2FNotification();

  U2FNotification(const U2FNotification&) = delete;
  U2FNotification& operator=(const U2FNotification&) = delete;

  ~U2FNotification();

  // Asynchronously checks whether the legacy implementation is enabled and if
  // so, displays a notification.
  void Check();

 private:
  // Checks status given the current U2F flags.
  void CheckStatus(std::optional<std::set<std::string>> flags);

  // Shows the notification.
  void ShowNotification();

  // Handles clicks on the notification.
  void OnNotificationClick(const std::optional<int> button_index);

  base::WeakPtrFactory<U2FNotification> weak_factory_{this};
};

}  // namespace ash

#endif  // CHROME_BROWSER_ASH_U2F_U2F_NOTIFICATION_H_