chromium/chrome/browser/media/platform_verification_chromeos.cc

// 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.

#include "chrome/browser/media/platform_verification_chromeos.h"

#include "chrome/browser/profiles/profile.h"
#include "content/public/browser/permission_controller.h"
#include "content/public/browser/web_contents.h"
#include "third_party/blink/public/common/permissions/permission_utils.h"
#include "url/gurl.h"

namespace platform_verification {
namespace {

// Whether platform verification is permitted by the user-configurable content
// setting.
bool IsPermittedByContentSettings(content::RenderFrameHost* render_frame_host) {
  return render_frame_host->GetBrowserContext()
             ->GetPermissionController()
             ->GetPermissionStatusForCurrentDocument(
                 blink::PermissionType::PROTECTED_MEDIA_IDENTIFIER,
                 render_frame_host) == blink::mojom::PermissionStatus::GRANTED;
}

// Whether platform verification is permitted by the profile type. Currently
// platform verification is disabled for incognito and guest profiles.
bool IsPermittedByProfileType(content::RenderFrameHost* render_frame_host) {
  Profile* profile =
      Profile::FromBrowserContext(render_frame_host->GetBrowserContext());
  return !profile->IsOffTheRecord() && !profile->IsGuestSession();
}

}  // namespace

bool PerformBrowserChecks(content::RenderFrameHost* render_frame_host) {
  GURL url = render_frame_host->GetLastCommittedOrigin().GetURL();

  if (!url.is_valid()) {
    return false;
  }

  if (!IsPermittedByProfileType(render_frame_host)) {
    return false;
  }

  if (!IsPermittedByContentSettings(render_frame_host)) {
    return false;
  }

  return true;
}

}  // namespace platform_verification