1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5package org.chromium.android_webview.test;
6
7import android.os.Build;
8import android.test.suitebuilder.annotation.SmallTest;
9
10import org.chromium.android_webview.AwContents;
11import org.chromium.base.test.util.Feature;
12
13/**
14 * TestSuite for EME key systems.
15 */
16public class KeySystemTest extends AwTestBase {
17
18    private TestAwContentsClient mContentsClient = new TestAwContentsClient();
19    private AwContents mAwContents;
20
21    @Override
22    protected void setUp() throws Exception {
23        super.setUp();
24
25        final AwTestContainerView testContainerView =
26                createAwTestContainerViewOnMainSync(mContentsClient);
27        mAwContents = testContainerView.getAwContents();
28        enableJavaScriptOnUiThread(mAwContents);
29
30        loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
31            getKeySystemTestPage(), "text/html", false);
32    }
33
34    private String getKeySystemTestPage() {
35        return "<html> <script>" +
36                "function isKeySystemSupported(keySystem) {" +
37                    "var video = document.createElement('video');" +
38                    "return video.canPlayType('video/mp4', keySystem);" +
39                "}" +
40                "</script> </html>";
41    }
42
43    private String isKeySystemSupported(String keySystem) throws Exception {
44        return executeJavaScriptAndWaitForResult(mAwContents, mContentsClient,
45                  "isKeySystemSupported('" + keySystem + "')");
46    }
47
48    @Feature({"AndroidWebView"})
49    @SmallTest
50    public void testSupportClearKeySystem() throws Throwable {
51        assertEquals("\"maybe\"", isKeySystemSupported("webkit-org.w3.clearkey"));
52    }
53
54    @Feature({"AndroidWebView"})
55    @SmallTest
56    public void testSupportWidevineKeySystem() throws Throwable {
57        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
58            return;  // MediaDrm/Crypto is supported from KitKat.
59        }
60        assertEquals("\"maybe\"", isKeySystemSupported("com.widevine.alpha"));
61    }
62
63    @Feature({"AndroidWebView"})
64    @SmallTest
65    public void testNotSupportFooKeySystem() throws Throwable {
66        assertEquals("\"\"", isKeySystemSupported("com.foo.keysystem"));
67    }
68
69    @Feature({"AndroidWebView"})
70    @SmallTest
71    public void testSupportPlatformKeySystem() throws Throwable {
72        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
73            return;  // MediaDrm/Crypto is supported from KitKat.
74        }
75        assertEquals("\"maybe\"", isKeySystemSupported("com.oem.test-keysystem"));
76    }
77}
78