Home | History | Annotate | Download | only in util
      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 fullScreenVideoPath = "full_screen_video_test.html";
     70         String data = loadAssetData(context, fullScreenVideoPath);
     71         mFullScreenVideoTestURL = mTestWebServer.setResponse("/" + fullScreenVideoPath,
     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