chromium/chromecast/browser/cast_permission_user_data.h

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

#ifndef CHROMECAST_BROWSER_CAST_PERMISSION_USER_DATA_H_
#define CHROMECAST_BROWSER_CAST_PERMISSION_USER_DATA_H_

#include <string>
#include <vector>

#include "base/containers/flat_set.h"
#include "base/supports_user_data.h"
#include "url/gurl.h"

namespace content {
class WebContents;
}

// TODO(b/191718807) Add App's page permission into this class.

namespace chromecast {
namespace shell {

class CastPermissionUserData : public base::SupportsUserData::Data {
 public:
  // Lifetime of the object is managed by |web_contents|.
  CastPermissionUserData(
      content::WebContents* web_contents,
      const std::string& app_id,
      const GURL& app_web_url,
      bool enforce_feature_permissions,
      std::vector<int32_t> feature_permissions,
      std::vector<std::string> additional_feature_permission_origins);
  CastPermissionUserData(const CastPermissionUserData&) = delete;
  CastPermissionUserData& operator=(const CastPermissionUserData&) = delete;
  ~CastPermissionUserData() override;

  static CastPermissionUserData* FromWebContents(
      content::WebContents* web_contents);
  std::string GetAppId() { return app_id_; }
  GURL GetAppWebUrl() { return app_web_url_; }
  bool GetEnforceFeaturePermissions() { return enforce_feature_permissions_; }
  const base::flat_set<int32_t>& GetFeaturePermissions() const {
    return feature_permissions_;
  }
  const std::vector<std::string>& GetAdditionalFeaturePermissionOrigins()
      const {
    return additional_feature_permission_origins_;
  }

 private:
  const std::string app_id_;
  const GURL app_web_url_;
  const bool enforce_feature_permissions_;
  base::flat_set<int32_t> feature_permissions_;
  const std::vector<std::string> additional_feature_permission_origins_;
};

}  // namespace shell
}  // namespace chromecast
#endif  // CHROMECAST_BROWSER_CAST_PERMISSION_USER_DATA_H_