// Copyright 2016 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <stdint.h>

#include <list>
#include <string>

#include <base/files/file_path.h>
#include <base/files/scoped_temp_dir.h>

namespace imageloader {

// Test data always uses the dev key.
constexpr uint8_t kDevPublicKey[] = {
    0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02,
    0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03,
    0x42, 0x00, 0x04, 0x7a, 0xaa, 0x2b, 0xf9, 0x3d, 0x7a, 0xbe, 0x35, 0x9a,
    0xfc, 0x9f, 0x39, 0x2d, 0x2d, 0x37, 0x07, 0xd4, 0x19, 0x67, 0x67, 0x30,
    0xbb, 0x5c, 0x74, 0x22, 0xd5, 0x02, 0x07, 0xaf, 0x6b, 0x12, 0x9d, 0x12,
    0xf0, 0x34, 0xfd, 0x1a, 0x7f, 0x02, 0xd8, 0x46, 0x2b, 0x25, 0xca, 0xa0,
    0x6e, 0x2b, 0x54, 0x41, 0xee, 0x92, 0xa2, 0x0f, 0xa2, 0x2a, 0xc0, 0x30,
    0xa6, 0x8c, 0xd1, 0x16, 0x0a, 0x48, 0xca};
// This is the name of the component used in the test data.
constexpr char kTestComponentName[] = "PepperFlashPlayer";
// This is the version of flash player used in the test data.
constexpr char kTestDataVersion[] = "22.0.0.158";
// This is the version of the updated flash player in the test data.
constexpr char kTestUpdatedVersion[] = "22.0.0.256";

// Get the path of the test component in the test data folder.
base::FilePath GetTestComponentPath();
base::FilePath GetTestComponentPath(const std::string& version);

// Second test key.
constexpr uint8_t kOciDevPublicKey[] = {
    0x30, 0x59, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02,
    0x01, 0x06, 0x08, 0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07, 0x03,
    0x42, 0x00, 0x04, 0xcc, 0x33, 0xa2, 0xef, 0x3d, 0xa5, 0xb4, 0x04, 0xc5,
    0x9c, 0x99, 0xc1, 0x53, 0xe4, 0xdb, 0xed, 0x34, 0xa4, 0x75, 0x35, 0x44,
    0x5f, 0x67, 0x35, 0xda, 0x30, 0xd4, 0xce, 0xf8, 0x40, 0x03, 0x81, 0x15,
    0xb5, 0xc6, 0xe3, 0xe2, 0x3a, 0x61, 0xd3, 0x66, 0x2b, 0xcd, 0x42, 0xf3,
    0x1f, 0x30, 0xa6, 0xa3, 0xc1, 0x63, 0x47, 0x4a, 0x6e, 0x62, 0xa9, 0x9b,
    0x38, 0x49, 0x10, 0x03, 0xe2, 0x4b, 0xcc};
constexpr char kTestOciComponentName[] = "adb";
constexpr char kTestOciComponentVersion[] = "5.1.1.13";

// Get the path of the test OCI component in the test data folder.
base::FilePath GetTestOciComponentPath();

// Enumerate all files in a directory and return them as a list of filenames.
void GetFilesInDir(const base::FilePath& dir, std::list<std::string>* files);

}  // namespace imageloader
