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)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)package org.chromium.chrome.browser.test.util;
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.graphics.Bitmap;
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.graphics.Bitmap.CompressFormat;
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.graphics.BitmapFactory;
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import android.util.Log;
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import org.chromium.base.test.util.UrlUtils;
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.io.ByteArrayOutputStream;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.io.IOException;
16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)import java.io.InputStream;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.net.URL;
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import java.util.Arrays;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/**
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Set of utility functions shared between tests managing bookmarks.
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public class BookmarkUtils {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    private static final String TAG = "BookmarkUtils";
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Checks if two byte arrays are equal. Used to compare icons.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @return True if equal, false otherwise.
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public static boolean byteArrayEqual(byte[] byte1, byte[] byte2) {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (byte1 == null && byte2 != null) {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            return byte2.length == 0;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        if (byte2 == null && byte1 != null) {
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            return byte1.length == 0;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return Arrays.equals(byte1, byte2);
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    /**
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * Retrieves a byte array with the decoded image data of an icon.
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     * @return Data of the icon.
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)     */
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    public static byte[] getIcon(String testPath) {
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        ByteArrayOutputStream bos = new ByteArrayOutputStream();
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        try {
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            InputStream faviconStream = (InputStream) (new URL(
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                    UrlUtils.getTestFileUrl(testPath))).getContent();
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            Bitmap faviconBitmap = BitmapFactory.decodeStream(faviconStream);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            faviconBitmap.compress(CompressFormat.PNG, 0, bos);
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        } catch (IOException e) {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)            Log.e(TAG, "Error trying to get the icon '" + testPath + "': " + e.getMessage());
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        }
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return bos.toByteArray();
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
57