blob: 6f178c250db28aacba9c07fb85758ba0a6b0d7ce [file] [log] [blame]
// Copyright 2016 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.
#ifndef CONTENT_RENDERER_MEDIA_STREAM_SECURE_DISPLAY_LINK_TRACKER_H_
#define CONTENT_RENDERER_MEDIA_STREAM_SECURE_DISPLAY_LINK_TRACKER_H_
#include <algorithm>
#include <vector>
// Tracks all connected links (video sinks / tracks), and reports if they are
// all secure for video capturing.
template <typename T>
class SecureDisplayLinkTracker {
public:
SecureDisplayLinkTracker() {}
~SecureDisplayLinkTracker() {}
void Add(T* link, bool is_link_secure);
void Remove(T* link);
void Update(T* link, bool is_link_secure);
bool is_capturing_secure() const { return insecure_links_.empty(); }
private:
// Record every insecure links.
std::vector<T*> insecure_links_;
DISALLOW_COPY_AND_ASSIGN(SecureDisplayLinkTracker);
};
template <typename T>
void SecureDisplayLinkTracker<T>::Add(T* link, bool is_link_secure) {
DCHECK(std::find(insecure_links_.begin(), insecure_links_.end(), link) ==
insecure_links_.end());
if (!is_link_secure)
insecure_links_.push_back(link);
}
template <typename T>
void SecureDisplayLinkTracker<T>::Remove(T* link) {
auto it = std::find(insecure_links_.begin(), insecure_links_.end(), link);
if (it != insecure_links_.end())
insecure_links_.erase(it);
}
template <typename T>
void SecureDisplayLinkTracker<T>::Update(T* link, bool is_link_secure) {
auto it = std::find(insecure_links_.begin(), insecure_links_.end(), link);
if (it != insecure_links_.end()) {
if (is_link_secure)
insecure_links_.erase(it);
return;
}
Add(link, is_link_secure);
}
#endif // CONTENT_RENDERER_MEDIA_STREAM_SECURE_DISPLAY_LINK_TRACKER_H_