Merge "Fix support for app package name." into oc-mr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
f2e7f23f00
@@ -105,6 +105,7 @@ static const std::string HLS_URI_ATTRIBUTE = "URI";
|
|||||||
|
|
||||||
static const char EMPTY_ORIGIN[] = "";
|
static const char EMPTY_ORIGIN[] = "";
|
||||||
static const char EMPTY_SPOID[] = "";
|
static const char EMPTY_SPOID[] = "";
|
||||||
|
static const char EMPTY_APP_PACKAGE_NAME[] = "";
|
||||||
} // namespace wvcdm
|
} // namespace wvcdm
|
||||||
|
|
||||||
#endif // WVCDM_CORE_WV_CDM_CONSTANTS_H_
|
#endif // WVCDM_CORE_WV_CDM_CONSTANTS_H_
|
||||||
|
|||||||
@@ -25,11 +25,17 @@ struct CdmIdentifier {
|
|||||||
// The origin. May be blank if the app does not set an origin, which is
|
// The origin. May be blank if the app does not set an origin, which is
|
||||||
// the likely behavior of most non-web-browser apps.
|
// the likely behavior of most non-web-browser apps.
|
||||||
std::string origin;
|
std::string origin;
|
||||||
|
|
||||||
|
// The application package name provided by the application. This is used to
|
||||||
|
// provide a friendly name of the application package for the purposes of
|
||||||
|
// logging and metrics.
|
||||||
|
std::string app_package_name;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Provide comparison operators
|
// Provide comparison operators
|
||||||
inline bool operator==(const CdmIdentifier& lhs, const CdmIdentifier& rhs) {
|
inline bool operator==(const CdmIdentifier& lhs, const CdmIdentifier& rhs) {
|
||||||
return lhs.spoid == rhs.spoid && lhs.origin == rhs.origin;
|
return lhs.spoid == rhs.spoid && lhs.origin == rhs.origin
|
||||||
|
&& lhs.app_package_name == rhs.app_package_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool operator!=(const CdmIdentifier& lhs, const CdmIdentifier& rhs) {
|
inline bool operator!=(const CdmIdentifier& lhs, const CdmIdentifier& rhs) {
|
||||||
@@ -37,8 +43,11 @@ inline bool operator!=(const CdmIdentifier& lhs, const CdmIdentifier& rhs) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
inline bool operator<(const CdmIdentifier& lhs, const CdmIdentifier& rhs) {
|
inline bool operator<(const CdmIdentifier& lhs, const CdmIdentifier& rhs) {
|
||||||
return (lhs.spoid < rhs.spoid) ||
|
return (lhs.spoid < rhs.spoid)
|
||||||
((lhs.spoid == rhs.spoid) && lhs.origin < rhs.origin);
|
|| ((lhs.spoid == rhs.spoid)
|
||||||
|
&& (lhs.origin < rhs.origin
|
||||||
|
|| (lhs.origin == rhs.origin
|
||||||
|
&& lhs.app_package_name < rhs.app_package_name)));
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool operator>(const CdmIdentifier& lhs, const CdmIdentifier& rhs) {
|
inline bool operator>(const CdmIdentifier& lhs, const CdmIdentifier& rhs) {
|
||||||
@@ -56,7 +65,8 @@ inline bool operator>=(const CdmIdentifier& lhs, const CdmIdentifier& rhs) {
|
|||||||
// Provide default
|
// Provide default
|
||||||
static const CdmIdentifier kDefaultCdmIdentifier = {
|
static const CdmIdentifier kDefaultCdmIdentifier = {
|
||||||
EMPTY_SPOID,
|
EMPTY_SPOID,
|
||||||
EMPTY_ORIGIN
|
EMPTY_ORIGIN,
|
||||||
|
EMPTY_APP_PACKAGE_NAME
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace wvcdm
|
} // namespace wvcdm
|
||||||
|
|||||||
@@ -263,6 +263,8 @@ class EngineMetrics {
|
|||||||
void Serialize(drm_metrics::MetricsGroup* metric_group, bool completed_only,
|
void Serialize(drm_metrics::MetricsGroup* metric_group, bool completed_only,
|
||||||
bool clear_serialized_sessions);
|
bool clear_serialized_sessions);
|
||||||
|
|
||||||
|
void SetAppPackageName(const std::string& app_package_name);
|
||||||
|
|
||||||
// Metrics recorded at the engine level.
|
// Metrics recorded at the engine level.
|
||||||
EventMetric<CdmResponseType> cdm_engine_add_key_;
|
EventMetric<CdmResponseType> cdm_engine_add_key_;
|
||||||
ValueMetric<std::string> cdm_engine_cdm_version_;
|
ValueMetric<std::string> cdm_engine_cdm_version_;
|
||||||
@@ -288,6 +290,7 @@ class EngineMetrics {
|
|||||||
Lock session_metrics_lock_;
|
Lock session_metrics_lock_;
|
||||||
std::vector<metrics::SessionMetrics*> session_metrics_list_;
|
std::vector<metrics::SessionMetrics*> session_metrics_list_;
|
||||||
CryptoMetrics crypto_metrics_;
|
CryptoMetrics crypto_metrics_;
|
||||||
|
std::string app_package_name_;
|
||||||
|
|
||||||
void SerializeEngineMetrics(drm_metrics::MetricsGroup* out);
|
void SerializeEngineMetrics(drm_metrics::MetricsGroup* out);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -33,4 +33,7 @@ message MetricsGroup {
|
|||||||
|
|
||||||
// Allow multiple sub groups of metrics.
|
// Allow multiple sub groups of metrics.
|
||||||
repeated MetricsGroup metric_sub_group = 2;
|
repeated MetricsGroup metric_sub_group = 2;
|
||||||
|
|
||||||
|
// Name of the application package associated with the metrics.
|
||||||
|
optional string app_package_name = 3;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -440,7 +440,8 @@ EngineMetrics::EngineMetrics() :
|
|||||||
cdm_engine_unprovision_(
|
cdm_engine_unprovision_(
|
||||||
"/drm/widevine/cdm_engine/unprovision",
|
"/drm/widevine/cdm_engine/unprovision",
|
||||||
"error",
|
"error",
|
||||||
"security_level") {
|
"security_level"),
|
||||||
|
app_package_name_("") {
|
||||||
}
|
}
|
||||||
|
|
||||||
EngineMetrics::~EngineMetrics() {
|
EngineMetrics::~EngineMetrics() {
|
||||||
@@ -482,14 +483,20 @@ void EngineMetrics::Serialize(drm_metrics::MetricsGroup* metric_group,
|
|||||||
OemCryptoDynamicAdapterMetrics& adapter_metrics =
|
OemCryptoDynamicAdapterMetrics& adapter_metrics =
|
||||||
GetDynamicAdapterMetricsInstance();
|
GetDynamicAdapterMetricsInstance();
|
||||||
adapter_metrics.Serialize(metric_group);
|
adapter_metrics.Serialize(metric_group);
|
||||||
|
if (!app_package_name_.empty()) {
|
||||||
|
metric_group->set_app_package_name(app_package_name_);
|
||||||
|
}
|
||||||
SerializeEngineMetrics(metric_group);
|
SerializeEngineMetrics(metric_group);
|
||||||
std::vector<SessionMetrics*>::iterator i;
|
std::vector<SessionMetrics*>::iterator i;
|
||||||
for (i = session_metrics_list_.begin(); i != session_metrics_list_.end();
|
for (i = session_metrics_list_.begin(); i != session_metrics_list_.end();
|
||||||
/* no increment */) {
|
/* no increment */) {
|
||||||
bool serialized = false;
|
bool serialized = false;
|
||||||
if (!completed_only || (*i)->IsCompleted()) {
|
if (!completed_only || (*i)->IsCompleted()) {
|
||||||
(*i)->Serialize(metric_group->add_metric_sub_group());
|
MetricsGroup* metric_sub_group = metric_group->add_metric_sub_group();
|
||||||
|
if (!app_package_name_.empty()) {
|
||||||
|
metric_sub_group->set_app_package_name(app_package_name_);
|
||||||
|
}
|
||||||
|
(*i)->Serialize(metric_sub_group);
|
||||||
serialized = true;
|
serialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -502,6 +509,10 @@ void EngineMetrics::Serialize(drm_metrics::MetricsGroup* metric_group,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EngineMetrics::SetAppPackageName(const std::string& app_package_name) {
|
||||||
|
app_package_name_ = app_package_name;
|
||||||
|
}
|
||||||
|
|
||||||
void EngineMetrics::SerializeEngineMetrics(MetricsGroup* metric_group) {
|
void EngineMetrics::SerializeEngineMetrics(MetricsGroup* metric_group) {
|
||||||
ProtoMetricSerializer serializer(metric_group);
|
ProtoMetricSerializer serializer(metric_group);
|
||||||
cdm_engine_add_key_.Serialize(&serializer);
|
cdm_engine_add_key_.Serialize(&serializer);
|
||||||
|
|||||||
@@ -380,9 +380,14 @@ CdmEngine* WvContentDecryptionModule::EnsureCdmForIdentifier(
|
|||||||
cdms_[identifier].file_system.SetOrigin(identifier.origin);
|
cdms_[identifier].file_system.SetOrigin(identifier.origin);
|
||||||
cdms_[identifier].file_system.SetIdentifier(
|
cdms_[identifier].file_system.SetIdentifier(
|
||||||
identifier.spoid + identifier.origin);
|
identifier.spoid + identifier.origin);
|
||||||
}
|
|
||||||
|
|
||||||
return cdms_[identifier].cdm_engine.get();
|
// Set the app package name for use by metrics.
|
||||||
|
cdms_[identifier].cdm_engine->GetMetrics()
|
||||||
|
->SetAppPackageName(identifier.app_package_name);
|
||||||
|
}
|
||||||
|
CdmEngine* cdm_engine = cdms_[identifier].cdm_engine.get();
|
||||||
|
|
||||||
|
return cdm_engine;
|
||||||
}
|
}
|
||||||
|
|
||||||
CdmEngine* WvContentDecryptionModule::GetCdmForSessionId(
|
CdmEngine* WvContentDecryptionModule::GetCdmForSessionId(
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ const int kHttpInternalServerError = 500;
|
|||||||
|
|
||||||
const wvcdm::CdmIdentifier kExampleIdentifier = {
|
const wvcdm::CdmIdentifier kExampleIdentifier = {
|
||||||
wvcdm::EMPTY_SPOID,
|
wvcdm::EMPTY_SPOID,
|
||||||
|
"com.example",
|
||||||
"com.example"
|
"com.example"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ TEST_F(WvContentDecryptionModuleMetricsTest, EngineAndSessionMetrics) {
|
|||||||
TEST_F(WvContentDecryptionModuleMetricsTest, MultipleEngineMetric) {
|
TEST_F(WvContentDecryptionModuleMetricsTest, MultipleEngineMetric) {
|
||||||
CdmSessionId session_id;
|
CdmSessionId session_id;
|
||||||
wvcdm::CdmKeySystem key_system("com.widevine");
|
wvcdm::CdmKeySystem key_system("com.widevine");
|
||||||
CdmIdentifier identifier = { "foo", "bar" };
|
CdmIdentifier identifier = { "foo", "bar", "baz" };
|
||||||
|
|
||||||
// Openning the session will fail with NEEDS_PROVISIONING error. But it will
|
// Openning the session will fail with NEEDS_PROVISIONING error. But it will
|
||||||
// still create some session-level stats.
|
// still create some session-level stats.
|
||||||
@@ -146,6 +146,9 @@ TEST_F(WvContentDecryptionModuleMetricsTest, MultipleEngineMetric) {
|
|||||||
metrics.metric_sub_group(i).metric_sub_group(0).metric(0).name(),
|
metrics.metric_sub_group(i).metric_sub_group(0).metric(0).name(),
|
||||||
StrEq("/drm/widevine/cdm_session/session_id"));
|
StrEq("/drm/widevine/cdm_session/session_id"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Verify that the second metrics app package name is set.
|
||||||
|
EXPECT_THAT(metrics.metric_sub_group(1).app_package_name(), StrEq("baz"));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1375,7 +1375,9 @@ WVDrmPlugin::CdmIdentifierBuilder::CdmIdentifierBuilder(
|
|||||||
mIsIdentifierSealed(false),
|
mIsIdentifierSealed(false),
|
||||||
mUseSpoid(useSpoid),
|
mUseSpoid(useSpoid),
|
||||||
mAppPackageName(appPackageName),
|
mAppPackageName(appPackageName),
|
||||||
mParent(parent) {}
|
mParent(parent) {
|
||||||
|
mCdmIdentifier.app_package_name = mAppPackageName;
|
||||||
|
}
|
||||||
|
|
||||||
Status WVDrmPlugin::CdmIdentifierBuilder::getCdmIdentifier(
|
Status WVDrmPlugin::CdmIdentifierBuilder::getCdmIdentifier(
|
||||||
CdmIdentifier* identifier) {
|
CdmIdentifier* identifier) {
|
||||||
|
|||||||
Reference in New Issue
Block a user