1 // Copyright 2013 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 5 package org.chromium.android_webview.test.util; 6 7 import android.content.Context; 8 import android.util.Pair; 9 10 import org.chromium.net.test.util.TestWebServer; 11 12 import java.io.ByteArrayOutputStream; 13 import java.io.IOException; 14 import java.io.InputStream; 15 import java.util.List; 16 17 /** 18 * This class is a WebServer provide video data. 19 */ 20 public class VideoTestWebServer { 21 22 // VIDEO_ID must be kept in sync with the id in full_screen_video_test.html. 23 public static final String VIDEO_ID = "video"; 24 public static final String ONE_PIXEL_ONE_FRAME_WEBM_FILENAME = "one_pixel_one_frame.webm"; 25 public static final String ONE_PIXEL_ONE_FRAME_WEBM_BASE64 = 26 "GkXfo0AgQoaBAUL3gQFC8oEEQvOBCEKCQAR3ZWJtQoeBAkKFgQIYU4BnQN8VSalmQCgq17FAAw9C" + 27 "QE2AQAZ3aGFtbXlXQUAGd2hhbW15RIlACECPQAAAAAAAFlSua0AxrkAu14EBY8WBAZyBACK1nEAD" + 28 "dW5khkAFVl9WUDglhohAA1ZQOIOBAeBABrCBlrqBlh9DtnVAdOeBAKNAboEAAIDyCACdASqWAJYA" + 29 "Pk0ci0WD+IBAAJiWlu4XdQTSq2H4MW0+sMO0gz8HMRe+0jRo0aNGjRo0aNGjRo0aNGjRo0aNGjRo" + 30 "0aNGjRo0aNGjRo0VAAD+/729RWRzH4mOZ9/O8Dl319afX4gsgAAA"; 31 32 private String mOnePixelOneFrameWebmURL; 33 private String mFullScreenVideoTestURL; 34 private TestWebServer mTestWebServer; 35 36 public VideoTestWebServer(Context context) throws Exception { 37 mTestWebServer = new TestWebServer(false); 38 List<Pair<String, String>> headers = getWebmHeaders(true); 39 mOnePixelOneFrameWebmURL = mTestWebServer.setResponseBase64("/" + 40 ONE_PIXEL_ONE_FRAME_WEBM_FILENAME, 41 ONE_PIXEL_ONE_FRAME_WEBM_BASE64, headers); 42 initFullScreenVideoTest(context); 43 } 44 45 /** 46 * @return the mOnePixelOneFrameWebmURL 47 */ 48 public String getOnePixelOneFrameWebmURL() { 49 return mOnePixelOneFrameWebmURL; 50 } 51 52 public String getFullScreenVideoTestURL() { 53 return mFullScreenVideoTestURL; 54 } 55 56 public TestWebServer getTestWebServer() { 57 return mTestWebServer; 58 } 59 60 private static List<Pair<String, String>> getWebmHeaders(boolean disableCache) { 61 return CommonResources.getContentTypeAndCacheHeaders("video/webm", disableCache); 62 } 63 64 private static List<Pair<String, String>> getHTMLHeaders(boolean disableCache) { 65 return CommonResources.getContentTypeAndCacheHeaders("text/html", disableCache); 66 } 67 68 private void initFullScreenVideoTest(Context context) throws IOException { 69 final String FULL_SCREEN_VIDEO_PATH = "full_screen_video_test.html"; 70 String data = loadAssetData(context, FULL_SCREEN_VIDEO_PATH); 71 mFullScreenVideoTestURL = mTestWebServer.setResponse("/" + FULL_SCREEN_VIDEO_PATH, 72 data.replace("VIDEO_FILE_URL", getOnePixelOneFrameWebmURL()), 73 getHTMLHeaders(false)); 74 } 75 76 private String loadAssetData(Context context, String asset) throws IOException { 77 InputStream in = context.getAssets().open(asset); 78 ByteArrayOutputStream os = new ByteArrayOutputStream(); 79 int buflen = 128; 80 byte[] buffer = new byte[buflen]; 81 int len = in.read(buffer, 0, buflen); 82 while (len != -1) { 83 os.write(buffer, 0, len); 84 if (len < buflen) break; 85 len = in.read(buffer, 0, buflen); 86 } 87 return os.toString(); 88 } 89 } 90