blob: cd734f8319a76c41adcd84a327386bb20079405b [file] [log] [blame]
// Copyright 2017 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 "ash/display/display_output_protection.h"
#include <utility>
#include "ui/display/manager/display_configurator.h"
using display::DisplayConfigurator;
namespace ash {
// A BindingContext is created for each bind request. BindingContext contains
// the state unique to each connection.
class DisplayOutputProtection::BindingContext {
public:
explicit BindingContext(DisplayConfigurator* display_configurator)
: display_configurator_(display_configurator),
client_id_(display_configurator_->RegisterContentProtectionClient()) {}
~BindingContext() {
display_configurator_->UnregisterContentProtectionClient(client_id_);
}
uint64_t client_id() const { return client_id_; }
private:
display::DisplayConfigurator* const display_configurator_;
const uint64_t client_id_;
DISALLOW_COPY_AND_ASSIGN(BindingContext);
};
DisplayOutputProtection::DisplayOutputProtection(
DisplayConfigurator* display_configurator)
: display_configurator_(display_configurator) {}
DisplayOutputProtection::~DisplayOutputProtection() = default;
void DisplayOutputProtection::BindRequest(
mojom::DisplayOutputProtectionRequest request) {
std::unique_ptr<BindingContext> context =
std::make_unique<BindingContext>(display_configurator_);
bindings_.AddBinding(this, std::move(request), std::move(context));
}
void DisplayOutputProtection::QueryContentProtectionStatus(
int64_t display_id,
QueryContentProtectionStatusCallback callback) {
display_configurator_->QueryContentProtectionStatus(
bindings_.dispatch_context()->client_id(), display_id,
std::move(callback));
}
void DisplayOutputProtection::SetContentProtection(
int64_t display_id,
uint32_t desired_method_mask,
SetContentProtectionCallback callback) {
display_configurator_->SetContentProtection(
bindings_.dispatch_context()->client_id(), display_id,
desired_method_mask, std::move(callback));
}
} // namespace ash