1a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)package org.chromium.android_webview.test.util;
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)import org.chromium.net.test.util.TestWebServer;
8d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)/**
10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * The purpose of the generator is to provide a sequence of distinct images to
11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * avoid caching side-effects. As we don't need too many images, I've found it
12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * easier to hardcode image samples. It is possible to generate images on the
13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) * fly, but it will require hooking up additional packages.
14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) */
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public class ImagePageGenerator {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public static final String IMAGE_LOADED_STRING = "1";
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public static final String IMAGE_NOT_LOADED_STRING = "0";
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private static final String[] COLORS = {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "AAAAIAAc3j0Ss", "AQABIAEayS9b0", "AgACIAIQ8BmAc", "AwADIAMW5wvJE",
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "BAAEIAQZNWRTI", "BQAFIAUfInYaQ", "BgAGIAYVG0DB4", "BwAHIAcTDFKIg",
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "CAAIIAgXCI+Rk", "CQAJIAkRH53Y8", "CgAKIAobJqsDU", "CwALIAsdMblKM",
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "DAAMIAwS49bQA", "DQANIA0U9MSZY", "DgAOIA4ezfJCw", "DwAPIA8Y2uALo",
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "D+AQAA/9vaUwc", "D/AQEBANNhzkw"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    };
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private static final String IMAGE_PREFIX = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAAAAAA" +
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            "6fptVAAAAAXNSR0IArs4c6QAAAA1JREFUCB0BAgD9/w";
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    private static final String IMAGE_SUFFIX = "AAAAASUVORK5CYII=";
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    private int mIndex;
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    private final boolean mAdvance;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public ImagePageGenerator(int startIndex, boolean advance) {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mIndex = startIndex;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        mAdvance = advance;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public String getImageSourceNoAdvance() {
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return IMAGE_PREFIX + COLORS[mIndex] + IMAGE_SUFFIX;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public String getPageTemplateSource(String imageSrc) {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return CommonResources.getOnImageLoadedHtml(imageSrc);
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public String getPageSource() {
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        String result =
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                getPageTemplateSource("data:image/png;base64," + getImageSourceNoAdvance());
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (mAdvance) mIndex += 2;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return result;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
55d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
56d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    public String getPageUrl(TestWebServer webServer) {
57d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        final String imagePath = "/image_" + mIndex + ".png";
58d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        final String pagePath = "/html_image_" + mIndex + ".html";
59d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        webServer.setResponseBase64(imagePath, getImageSourceNoAdvance(),
60d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                CommonResources.getImagePngHeaders(false));
61d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        if (mAdvance) mIndex += 2;
62d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        return webServer.setResponse(pagePath, getPageTemplateSource(imagePath), null);
63d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    }
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
65