blob: 148288f85d435d113eeb4101957e009d79deb1ed [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_CDM_COMMON_CDM_MANIFEST_H_
#define COMPONENTS_CDM_COMMON_CDM_MANIFEST_H_
#include "base/values.h"
namespace base {
class FilePath;
} // namespace base
namespace media {
struct CdmCapability;
}
// Returns whether the CDM's API versions, as specified in the manifest, are
// supported in this Chrome binary and not disabled at run time.
// Checks the module API, CDM interface API, and Host API.
// This should never fail except in rare cases where the component has not been
// updated recently or the user downgrades Chrome.
bool IsCdmManifestCompatibleWithChrome(const base::Value::Dict& manifest);
// Extracts the necessary information from `manifest` and updates `capability`.
// Returns true on success, false if there are errors in the manifest.
// If this method returns false, `capability` may or may not be updated.
bool ParseCdmManifest(const base::Value::Dict& manifest,
media::CdmCapability* capability);
// Reads the file `manifest_path` which is assumed to be a CDM manifest and
// extracts the necessary information from it to update `capability`. All the
// fields in `capability` are optional except `version`, which must be
// specified. This also verifies that the read CDM manifest is compatible with
// Chrome (by calling IsCdmManifestCompatibleWithChrome()). Returns true on
// success, false if there are errors in the file or the manifest is not
// compatible with this version of Chrome. If this method returns false,
// `capability` may or may not be updated.
bool ParseCdmManifestFromPath(const base::FilePath& manifest_path,
media::CdmCapability* capability);
#endif // COMPONENTS_CDM_COMMON_CDM_MANIFEST_H_