Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(447)

Unified Diff: ui/display/chromeos/apply_content_protection_task.cc

Issue 2540313002: Split //ui/display and create //ui/display/manager. (Closed)
Patch Set: Cleanup export header. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/display/chromeos/apply_content_protection_task.cc
diff --git a/ui/display/chromeos/apply_content_protection_task.cc b/ui/display/chromeos/apply_content_protection_task.cc
deleted file mode 100644
index 43214709387b09fcd9321ea466f84cda2d3540e3..0000000000000000000000000000000000000000
--- a/ui/display/chromeos/apply_content_protection_task.cc
+++ /dev/null
@@ -1,173 +0,0 @@
-// Copyright 2015 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 "ui/display/chromeos/apply_content_protection_task.h"
-
-#include "ui/display/chromeos/display_layout_manager.h"
-#include "ui/display/types/display_snapshot.h"
-#include "ui/display/types/native_display_delegate.h"
-
-namespace ui {
-
-namespace {
-
-bool GetHDCPCapableDisplays(
- const DisplayLayoutManager& layout_manager,
- std::vector<DisplaySnapshot*>* hdcp_capable_displays) {
- for (DisplaySnapshot* display : layout_manager.GetDisplayStates()) {
- switch (display->type()) {
- case DISPLAY_CONNECTION_TYPE_UNKNOWN:
- return false;
- // DisplayPort, DVI, and HDMI all support HDCP.
- case DISPLAY_CONNECTION_TYPE_DISPLAYPORT:
- case DISPLAY_CONNECTION_TYPE_DVI:
- case DISPLAY_CONNECTION_TYPE_HDMI:
- hdcp_capable_displays->push_back(display);
- break;
- case DISPLAY_CONNECTION_TYPE_INTERNAL:
- case DISPLAY_CONNECTION_TYPE_VGA:
- case DISPLAY_CONNECTION_TYPE_NETWORK:
- case DISPLAY_CONNECTION_TYPE_VIRTUAL:
- // No protections for these types. Do nothing.
- break;
- case DISPLAY_CONNECTION_TYPE_NONE:
- NOTREACHED();
- break;
- }
- }
-
- return true;
-}
-
-} // namespace
-
-ApplyContentProtectionTask::ApplyContentProtectionTask(
- DisplayLayoutManager* layout_manager,
- NativeDisplayDelegate* native_display_delegate,
- const DisplayConfigurator::ContentProtections& requests,
- const ResponseCallback& callback)
- : layout_manager_(layout_manager),
- native_display_delegate_(native_display_delegate),
- requests_(requests),
- callback_(callback),
- query_status_(true),
- pending_requests_(0),
- weak_ptr_factory_(this) {
-}
-
-ApplyContentProtectionTask::~ApplyContentProtectionTask() {
-}
-
-void ApplyContentProtectionTask::Run() {
- std::vector<DisplaySnapshot*> hdcp_capable_displays;
- if (!GetHDCPCapableDisplays(*layout_manager_, &hdcp_capable_displays)) {
- callback_.Run(false);
- return;
- }
-
- pending_requests_ = hdcp_capable_displays.size();
- if (pending_requests_ == 0) {
- callback_.Run(true);
- return;
- }
-
- // Need to poll the driver for updates since other applications may have
- // updated the state.
- for (DisplaySnapshot* display : hdcp_capable_displays) {
- native_display_delegate_->GetHDCPState(
- *display,
- base::Bind(&ApplyContentProtectionTask::OnHDCPStateUpdate,
- weak_ptr_factory_.GetWeakPtr(), display->display_id()));
- }
-}
-
-void ApplyContentProtectionTask::OnHDCPStateUpdate(int64_t display_id,
- bool success,
- HDCPState state) {
- query_status_ &= success;
- display_hdcp_state_map_[display_id] = state;
- pending_requests_--;
-
- // Wait for all the requests before continuing.
- if (pending_requests_ != 0)
- return;
-
- if (!query_status_) {
- callback_.Run(false);
- return;
- }
-
- ApplyProtections();
-}
-
-void ApplyContentProtectionTask::ApplyProtections() {
- std::vector<DisplaySnapshot*> hdcp_capable_displays;
- if (!GetHDCPCapableDisplays(*layout_manager_, &hdcp_capable_displays)) {
- callback_.Run(false);
- return;
- }
-
- std::vector<std::pair<DisplaySnapshot*, HDCPState>> hdcp_requests;
- // Figure out which displays need to have their HDCP state changed.
- for (DisplaySnapshot* display : hdcp_capable_displays) {
- uint32_t desired_mask = GetDesiredProtectionMask(display->display_id());
-
- auto it = display_hdcp_state_map_.find(display->display_id());
- // If the display can't be found, the display configuration changed.
- if (it == display_hdcp_state_map_.end()) {
- callback_.Run(false);
- return;
- }
-
- bool hdcp_enabled = it->second != HDCP_STATE_UNDESIRED;
- bool hdcp_requested = desired_mask & CONTENT_PROTECTION_METHOD_HDCP;
- if (hdcp_enabled != hdcp_requested) {
- hdcp_requests.push_back(std::make_pair(
- display, hdcp_requested ? HDCP_STATE_DESIRED : HDCP_STATE_UNDESIRED));
- }
- }
-
- pending_requests_ = hdcp_requests.size();
- // All the requested changes are the same as the current HDCP state. Nothing
- // to do anymore, just ack the content protection change.
- if (pending_requests_ == 0) {
- callback_.Run(true);
- return;
- }
-
- for (const auto& pair : hdcp_requests) {
- native_display_delegate_->SetHDCPState(
- *pair.first, pair.second,
- base::Bind(&ApplyContentProtectionTask::OnHDCPStateApplied,
- weak_ptr_factory_.GetWeakPtr()));
- }
-}
-
-void ApplyContentProtectionTask::OnHDCPStateApplied(bool success) {
- query_status_ &= success;
- pending_requests_--;
-
- if (pending_requests_ == 0)
- callback_.Run(query_status_);
-}
-
-uint32_t ApplyContentProtectionTask::GetDesiredProtectionMask(
- int64_t display_id) const {
- uint32_t desired_mask = 0;
- // In mirror mode, protection request of all displays need to be fulfilled.
- // In non-mirror mode, only request of client's display needs to be
- // fulfilled.
- if (layout_manager_->IsMirroring()) {
- for (auto pair : requests_)
- desired_mask |= pair.second;
- } else {
- auto it = requests_.find(display_id);
- if (it != requests_.end())
- desired_mask = it->second;
- }
-
- return desired_mask;
-}
-
-} // namespace ui
« no previous file with comments | « ui/display/chromeos/apply_content_protection_task.h ('k') | ui/display/chromeos/apply_content_protection_task_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698