1// Copyright 2012 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.util;
6
7import org.chromium.net.test.util.TestWebServer;
8
9/**
10 * The purpose of the generator is to provide a sequence of distinct images to
11 * avoid caching side-effects. As we don't need too many images, I've found it
12 * easier to hardcode image samples. It is possible to generate images on the
13 * fly, but it will require hooking up additional packages.
14 */
15public class ImagePageGenerator {
16
17    public static final String IMAGE_LOADED_STRING = "1";
18    public static final String IMAGE_NOT_LOADED_STRING = "0";
19
20    private static final String[] COLORS = {
21        "AAAAIAAc3j0Ss", "AQABIAEayS9b0", "AgACIAIQ8BmAc", "AwADIAMW5wvJE",
22        "BAAEIAQZNWRTI", "BQAFIAUfInYaQ", "BgAGIAYVG0DB4", "BwAHIAcTDFKIg",
23        "CAAIIAgXCI+Rk", "CQAJIAkRH53Y8", "CgAKIAobJqsDU", "CwALIAsdMblKM",
24        "DAAMIAwS49bQA", "DQANIA0U9MSZY", "DgAOIA4ezfJCw", "DwAPIA8Y2uALo",
25        "D+AQAA/9vaUwc", "D/AQEBANNhzkw"
26    };
27
28    private static final String IMAGE_PREFIX = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAAAAAA" +
29            "6fptVAAAAAXNSR0IArs4c6QAAAA1JREFUCB0BAgD9/w";
30
31    private static final String IMAGE_SUFFIX = "AAAAASUVORK5CYII=";
32
33    private int mIndex;
34    private final boolean mAdvance;
35
36    public ImagePageGenerator(int startIndex, boolean advance) {
37        mIndex = startIndex;
38        mAdvance = advance;
39    }
40
41    public String getImageSourceNoAdvance() {
42        return IMAGE_PREFIX + COLORS[mIndex] + IMAGE_SUFFIX;
43    }
44
45    public String getPageTemplateSource(String imageSrc) {
46        return CommonResources.getOnImageLoadedHtml(imageSrc);
47    }
48
49    public String getPageSource() {
50        String result =
51                getPageTemplateSource("data:image/png;base64," + getImageSourceNoAdvance());
52        if (mAdvance) mIndex += 2;
53        return result;
54    }
55
56    public String getPageUrl(TestWebServer webServer) {
57        final String imagePath = "/image_" + mIndex + ".png";
58        final String pagePath = "/html_image_" + mIndex + ".html";
59        webServer.setResponseBase64(imagePath, getImageSourceNoAdvance(),
60                CommonResources.getImagePngHeaders(false));
61        if (mAdvance) mIndex += 2;
62        return webServer.setResponse(pagePath, getPageTemplateSource(imagePath), null);
63    }
64}
65