Commit Graph

567 Commits

Author SHA1 Message Date
Adam Stone
457aceb859 Fixes metrics collection during CdmEngine close.
This fixes a problem where a CdmEngine instance (and its sessions) could
be closed before its metrics could be collected. The change allows the
wv_content_decryption_module to extract metrics from instances about to
be closed. These are held until reported to the caller.

Test: Manually verified that collection is now occurring correctly. Also
added unit test: wv_cdm_metric_test.

This is a merge from wvgerrit/29069

Change-Id: If82bfd5cae3b72b9d14ab4741424a7ae7cc0a3a6
2017-07-12 13:07:15 -07:00
Jiyong Park
aa74124fc2 Build widevide modules with BOARD_VNDK_VERSION
Header libs are added since global include path is not provided when
building with BOARD_VNDK_VERSION. Also, some static libs are marked as
proprietary so that they can be linked against to the drm hal
service.

Bug: 33241851
Test: BOARD_VNDK_VERSION=current m -j
android.hardware.drm@1.0-service.widevine
Change-Id: Iab85869e21917ea212a09d6eaabdb6ba3ace9248
2017-07-06 17:13:48 -07:00
Rahul Frias
ccaa50b92e Merge "Correct openssl error logging" 2017-07-03 07:53:19 +00:00
Adam Stone
db365d4c16 Merge "Add template type checking for EventMetric." 2017-06-28 01:16:01 +00:00
Adam Stone
cce6dffe92 Merge "Renames a few metrics for consistency." 2017-06-27 01:10:05 +00:00
Adam Stone
0963400d57 Add template type checking for EventMetric.
Add template var arg type checking for EventMetric.

This change adds some type checking for the variable argument
EventMetric which assures that there are no mismatches between
the definition of an EventMetric instance and the overloaded
constructor.

This is a merge from wvgerrit/28424.

BUG: 34846989
Test: Manually verified appropriate compile time errors.
Change-Id: I3e501abf76b78211f9cef19960ef11c179a0ff93
2017-06-26 20:54:43 +00:00
Adam Stone
80a95a1b64 Renames a few metrics for consistency.
Renames a few metrics for consistency with the logs processing module.

This CL changes the names of several metrics to be consistent with what
we use for the logs parsing module. E.g. for metrics consistency,
CdmSecurityLevel is referred to as "security_level" and SecurityLevel
is referred to as "requested_security_level".

The GetSecurityLevel method was modified to use CdmSecurityLevel instead
of the previous string type.

This CL is a merge from wvgerrit/28423

BUG: 37627621
BUG: 37627483
Test: Updated and ran unit tests to verify no regressions.
Change-Id: Ia4a8b202325386f2e02dcda4f58010dd7957a048
2017-06-26 20:49:39 +00:00
Adam Stone
d3758e9ce4 Merge changes I2618c2be,Ie8b9d8b9,I2f39f99c
* changes:
  Support GetPropertyByteArray for getting metrics.
  CDM Metrics Protocol buffer serialization.
  Refactored metrics to support pull model.
2017-06-26 20:32:15 +00:00
Rahul Frias
0dbc087eab Correct openssl error logging
[ Merge of http://go/wvgerrit/29041/ ]

Releasing allocated BIO buffers before logging failure causes the
openssl error to be erased.

b/62486203

Test: Ran WV unit, integration tests on angler

Change-Id: I3315edae2d3bd34887569ab88817f9591c12f409
2017-06-24 17:13:32 -07:00
Adam Stone
a0da1f067b Support GetPropertyByteArray for getting metrics.
Adds support for GetPropertyByteArray to return a serialized set of metrics
to the caller. This should be the last part of the widevine plugin
changes that fix the referenced bug.  More changes are coming on the
MediaDrm side.

This is a merge of wvgerrit/28422

I intend to submit 2048751, 2048750, and 2048509 together.

Bug: 36217927
Test: Added additional unit tests for affected code.
Change-Id: I2618c2be48d7d780127e35f237e2276efd080879
2017-06-20 03:09:59 +00:00
Adam Stone
b851dd8cfd CDM Metrics Protocol buffer serialization.
An implementation that serializes metrics to a protocol buffer.

This is a merge from wvgerrit/28440.

I intend to submit 2048751, 2048750, and 2048509 together.

Bug: 36217927
Bug: 36220975
Test: Added unit tests to cover modified code.
Change-Id: Ie8b9d8b91d2602b015f5568890a16c0419c126df
2017-06-20 02:39:25 +00:00
Adam Stone
a34e279d0f Refactored metrics to support pull model.
MetricsGroup split into 3 groups, session, engine, and crypto.
MetricsFrontEnd and Report removed.

This is a merge from wvgerrit/28420

Bug: 36217927
Test: Added unit tests to cover modified code.
Change-Id: I2f39f99ce88cc2229d6d1aa9459c67c5b86ccef4
2017-06-19 19:37:37 -07:00
John W. Bruce
ed50683f80 Pass CdmIdentifier to UsageInfo Methods
am: 43b8522b70

Change-Id: Ida417b7043115f54c9b8daaa75d417dea39aafe6
2017-06-19 23:32:23 +00:00
John W. Bruce
43b8522b70 Pass CdmIdentifier to UsageInfo Methods
The methods on WvContentDecryptionModule related to UsageInfo (Secure
Stops) do not work if kDefaultCdmIdentifier has not been provisioned.
This can occur if an app provisions and uses an origin without any app
on that device ever provisioning the default origin. More concerningly,
this will happen 100% of the time on SPOID-using devices, as there is no
way to provision the default identifier on these devices.

The fix is to pass the current identifier to these methods so that they
do not have to use kDefaultCdmIdentifier.

Test: build_and_run_all_unit_tests.sh
Test: WV GTS Tests
Bug: 62431478
Change-Id: I92a8b4acb69c964abe8129bccf2ff48a66c4a9e0
2017-06-16 17:59:24 -07:00
Rahul Frias
93f5f43107 Merge "Usage license handling corrections" into oc-dev am: c3cdb531d4
am: 1073526555

Change-Id: Ib7f14ce42b9aba16025c5396e32b6427f92b759c
2017-06-13 22:52:23 +00:00
Rahul Frias
ab0cb541d0 Merge "Usage license handling corrections" into oc-dev
am: c3cdb531d4

Change-Id: Ideb1ee0c9735fc83c28ac3064f804650ab98c99e
2017-06-13 22:46:07 +00:00
Rahul Frias
c3cdb531d4 Merge "Usage license handling corrections" into oc-dev 2017-06-13 22:40:54 +00:00
Kyle Alexander
b13900af37 Merge "Update unit tests to build into /data/bin" into oc-dev am: b683d2be57
am: fc7e636bdf

Change-Id: I311feb5f5f0c060bf776780de4cca3395d023239
2017-06-13 22:21:39 +00:00
Kyle Alexander
15cfe0abfa Merge "Update unit tests to build into /data/bin" into oc-dev
am: b683d2be57

Change-Id: I6c5cc5924b0a8eb52c235eef24cbd08efaf298dc
2017-06-13 22:18:18 +00:00
TreeHugger Robot
b683d2be57 Merge "Update unit tests to build into /data/bin" into oc-dev 2017-06-13 22:10:13 +00:00
Kyle Alexander
038580c6c9 Update unit tests to build into /data/bin
Tradefed needs these tests to be in the /DATA directory.

Test: cd vendor/widevine && ./build_and_run_all_unit_tests
      All tests should build and pass.
      make tests
      unzip android-tests.zip and verify all tests located in DATA/bin

Bug: 62055647
Change-Id: I35925e29558561c4726bb2249499bfee4e54cf45
2017-06-12 23:48:15 -07:00
Rahul Frias
db05f1e01c Usage license handling corrections
[ Merge of http://go/wvgerrit/28460 ]

Validate that offline licenses that do not contain a provider session
token are not handled by the TEE.

b/38490468

Test: WV Unit/integration tests, GtsMediaTestCases,
      WvCdmRequestLicenseTest.ReleaseRetryL3OfflineKeySessionUsageDisabledTest

Change-Id: Idaf62f2a882ae933c1a3e108d791943034780a46
2017-06-12 20:03:57 -07:00
Rahul Frias
fcc1c1a54d Recreate usage tables on error
am: 4228e2327e

Change-Id: I66140b35d3b992aaedb15c8e2dd2167127183eb3
2017-06-09 23:47:01 +00:00
Rahul Frias
4228e2327e Recreate usage tables on error
[ Merge of http://go/wvgerrit/28265 ]

A vendor specific error (10008) in response to OEMCrypto_LoadKeys
indicates that usage table corruption has occurred and that
the only way to recover is to regenerate usage tables.
Recreating usage tables will result in loss of offline licenses
and usage information. To make the app aware that this information
will be lost, a provisioning exception is generated when this error
is detected. The app can then choose to reprovision and in turn
delete and recreate usage tables.

A new OEMCrypto error has been added whose use has been reserved.
Rather than correct OEMCrypto behaviour to use the new error code,
we choose to handle this within the CDM. The fix can then be ported
to prior android releases. Also this error will not be generated
with OEMCrypto V13+.

b/33817629

Test: WV Unit, integration and GTS tests.
Change-Id: I936fc234d101b6a92d86f5735d035d19ddcf19e3
2017-06-08 23:46:04 -07:00
Rahul Frias
2efd7d71fa Correct offline license handling
am: 1857da2c8c

Change-Id: I8aa8408f5f81851de20bea6ad8c501d45894327d
2017-06-08 09:51:36 +00:00
Rahul Frias
1857da2c8c Correct offline license handling
[ Merge of http://go/wvgerrit/28261 ]

Licenses (offline, secure stops) that contain provider session tokens
are handled securely using usage tables. A recent fix did not correctly
handle offline licenses that do not contain a provider session token and
are not handled by the TEE.

b/62340248
Test: WV Unit/integration tests, GtsMediaTestCases

Change-Id: Ia1331fea9deff44dd1d93219b37f5bea4b8ee168
2017-06-07 17:23:27 -07:00
Rahul Frias
be7a3c5494 Merge "Update Widevine integration test to match android version" into oc-dev am: ba346a1bea
am: 658dbe1dc7

Change-Id: I23316e905af3e618d1e5d266e83051eef8ba6cb8
2017-05-31 21:39:48 +00:00
Rahul Frias
ea3cf8472b Merge "Corrections for big usage table support in L3" into oc-dev am: 9edaf2ab39
am: 97a77d4c2c

Change-Id: Ie8949a574ae8ea3c9219fe483eeae985a54b05cd
2017-05-31 21:36:00 +00:00
Rahul Frias
ba346a1bea Merge "Update Widevine integration test to match android version" into oc-dev 2017-05-31 21:31:14 +00:00
Rahul Frias
5da8da58f6 Corrections for big usage table support in L3
[ Merge of http://go/wvgerrit/26421 ]

* Corrects usage_table_header lifetime management. Earlier the
  UsageTableHeader class was a singleton tied to the CdmEngine lifetime.
  With SPOIDs there might be multiple concurrent CdmEngine objects.
  The UsageTableHeader class is now associated with OEMCrypto
  lifetime. There are two UsageTableHeader objects one for each L1 and L3.
  These get allocated/deallocated on OEMCrypto Initialization/Termination
  respectively.
* UsageTableHeader requires OEMCrypto, file read/writes and
  metric gathering to perform its required functionality. Because of the
  lifetime changes, CryptoSession, DeviceFiles and MetricsGroup objects
  need to passed to the methods rather than at Creation time.
* Miscellaneous fixes, when moving or deleteing entries.
* Adds usage_table_header_unittests.
* Addresses failures with request_license_test with secure stop in L3.

b/36858906
b/36855557
b/36048120
b/38341136
b/37100505
b/35946047

Test: Verified by unit and integration tests. Added new
      usage_table_header_unittests

Change-Id: I20e396ab2c0afbd14372dd93b969e5b0f1ccd291
2017-05-31 00:37:58 -07:00
Rahul Frias
b1fe0834a5 Update Widevine integration test to match android version
[ Merge of https://go/wvgerrit/27860 ]

The android version was updated from "O" to "8.0.0"

b/62201928

Test: Ran wv unit and integration tests.

Change-Id: I57525af2ab3bdfa0e77ad8f0efbff26cf8ff5c32
2017-05-30 23:43:43 -07:00
Edwin Wong
106858bc84 Merge "Revert conditional tests using a logical AND operator." 2017-05-31 00:19:23 +00:00
Jeff Tinker
d346473eaa Merge "Revert "Convert libwvdrmengine to soong."" 2017-05-25 17:22:03 +00:00
Jeff Tinker
23398a8d7c Revert "Convert libwvdrmengine to soong."
This change introduced b/38487636 "Distorted video observed when
playing purchased/rented movie in Google play movies & TV app."

Before resubmitting an updated variant of the original CL, please
test playback with Play Movies and the GTS media tests. 

This reverts commit 33f9979b2b.

Change-Id: I4ec2e6fe81323e91e4b62288755c967999e81041
2017-05-24 21:17:59 +00:00
Edwin Wong
6c71aeaf95 Revert conditional tests using a logical AND operator.
Merge from http://go/wvgerrit/27480.

Revert to the original test using a logical AND operator for
is_encrypted and !CanDecryptContent tests.

Test: GTS WidevineDashPolicyTests

bug: 34258607
Change-Id: If42698aa77f6f49a79dedb11a15d3055d6b76ef2
2017-05-23 13:47:05 -07:00
Tomasz Wasilczyk
2d4ba36414 Merge "Convert libwvdrmengine to soong." 2017-05-16 21:20:33 +00:00
Fred Gylys-Colwell
2cd640d95d Merge "Avoid calling DeleteUsageEntry for OEMCrypto v13" into oc-dev am: 0a02017009
am: 0947339468

Change-Id: I88982d49e05c22a3faae69bb78b5deaa5dff23cb
2017-05-13 05:46:35 +00:00
Fred Gylys-Colwell
0a02017009 Merge "Avoid calling DeleteUsageEntry for OEMCrypto v13" into oc-dev 2017-05-13 05:39:10 +00:00
Edwin Wong
0db7bc633d Merge "Fix GTS testL3PlayHDCPV* tests." into oc-dev am: dcf78b1062
am: fd71455558

Change-Id: Id0bb03cd4f1c3b1b1896a6bdeb643bc9a7539aac
2017-05-13 04:22:00 +00:00
Edwin Wong
dcf78b1062 Merge "Fix GTS testL3PlayHDCPV* tests." into oc-dev 2017-05-13 04:15:55 +00:00
Fred Gylys-Colwell
7d5b88a06a Avoid calling DeleteUsageEntry for OEMCrypto v13
Merge from Widevine repo of http://go/wvgerrit/27182

This function is not defined for v13, and should not be called by the
adapter.

b/38203780
Test: Ran unit tests specified in bug, on sailfish.

Change-Id: I38b1cc8493dd22da724f415f28d94f47d6d9c942
2017-05-12 17:26:24 -07:00
Edwin Wong
d751e81790 Fix GTS testL3PlayHDCPV* tests.
These tests verify whether a L3 device respects the HDCP policy set in the
license request. L3 device should only play the clear lead, and stop at
encrypted content. MeidaDrm should throw an ERROR_INSUFFICIENT_OUTPUT_PROTECTION
exception. This is because L3 device always returns current HDCP connection
status as HDCP_NONE.

This CL modifies the policy engine CanDecryptContent method to return
CdmResponseType instead of a boolean, so the app can generate the correct
error response if HDCP constriants are not met.

Test: GTS tests
  ANDROID_BUILD_TOP= ./android-gts/tooadefed run gts -m GtsMediaTestCases --test
  com.google.android.media.gts.WidevineDashPolicyTests#testL3PlayHDCPV*Required

Test: unit tests
  adb shell /data/app/policy_engine_unittest
  adb shell /data/app/policy_engine_constraints_unittest

Test: Play Movies

bug: 34258607
Change-Id: I11fc9da1e077e18e38f34159daae9d8ebcd948b6
2017-05-12 16:55:26 -07:00
Rahul Frias
adce58d758 Fix deadlock when pending key release sessions are deallocated am: 02fe2ef693
am: 54876569de

Change-Id: I86596123026ea88bb95178fbd48182101cc4ea1c
2017-05-12 22:29:26 +00:00
Rahul Frias
02fe2ef693 Fix deadlock when pending key release sessions are deallocated
[ Merge from http://go/wvgerrit/27261/ ]

Sessions created to release keys are periodically cleaned up if the
key release operation does not complete within a specific
amount of time. If other sessions are open, they will be released
through the timer thread. This would result in deadlock as a mutex
was taken twice.

Test: Verified by cdm_extended_duration_test
(AutomatedOfflineSessionReleaseOnOpenSession and
AutomatedOfflineSessionReleaseOnTimerEvent tests)

b/37546078

Change-Id: I7d45f939bdce77e5db461a401364da4f42c1c034
2017-05-11 20:12:33 -07:00
Tomasz Wasilczyk
33f9979b2b Convert libwvdrmengine to soong.
Bug: 37512442
Test: mmm -j50 vendor/widevine/libwvdrmengine/
Change-Id: I45b06b7f14ca4f65031bbc3806808a191156ee7b
2017-05-11 11:10:37 -07:00
Fred Gylys-Colwell
751d4b0d71 Remove TODO logs from dynamic adapter am: ee283ec61c
am: e76930cf14

Change-Id: Id4f6c9cd0dc8f303e11609b2530ec288764ac0e6
2017-05-06 01:39:17 +00:00
Fred Gylys-Colwell
ee283ec61c Remove TODO logs from dynamic adapter
Merge from Widevine repo of http://go/wvgerrit/26943

b/37987506

Test: built and run unit tests on sailfish -- no new failures.  Ran
Netflix on sailfish.

Change-Id: I96f8bb7a5c060fefd116b165406ce6bfad29f59d
2017-05-05 17:00:08 -07:00
John W. Bruce
a5310bcf0c Prefix ENABLE_MEDIADRM_64 with TARGET_ am: 6262f3721f
am: 2e337abdfb

Change-Id: Iae43cc735930b4d04f7990e7b7c28fd3dd74d7e5
2017-04-29 00:02:00 +00:00
John W. Bruce
6262f3721f Prefix ENABLE_MEDIADRM_64 with TARGET_
This build-time flag should be prefixed.

Bug: 37039525
Test: Built OS
Change-Id: Ie1db1f05bdaf43e4066d26a41391af0d7c729128
2017-04-27 18:50:05 -07:00
John Bruce
f76986d707 Merge changes I490befba,I32512a3e into oc-dev am: e434bb3975
am: 64cbdf8204

Change-Id: I88e8d382c6057f23973656a4cbf767bf00dc0ba1
2017-04-21 05:49:37 +00:00