12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- // Copyright 2021 The Chromium 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 "chrome/browser/resources_integrity.h"
- #include "base/bind.h"
- #include "base/path_service.h"
- #include "base/test/bind.h"
- #include "base/test/metrics/histogram_tester.h"
- #include "base/test/task_environment.h"
- #include "base/threading/sequenced_task_runner_handle.h"
- #include "build/build_config.h"
- #include "chrome/app/packed_resources_integrity.h"
- #include "chrome/browser/buildflags.h"
- #include "chrome/common/chrome_paths.h"
- #include "testing/gtest/include/gtest/gtest.h"
- class CheckResourceIntegrityTest : public testing::Test {
- protected:
- base::test::TaskEnvironment task_environment_;
- };
- TEST_F(CheckResourceIntegrityTest, Match) {
- base::FilePath test_data_path;
- ASSERT_TRUE(base::PathService::Get(chrome::DIR_TEST_DATA, &test_data_path));
- std::array<uint8_t, crypto::kSHA256Length> expected = {
- 0x1b, 0x3a, 0x5c, 0x9f, 0x92, 0x74, 0x48, 0xcc, 0x89, 0x1a, 0xe8,
- 0x3e, 0xcb, 0xfa, 0xc6, 0x6e, 0xb8, 0x73, 0x03, 0xf2, 0xb2, 0x25,
- 0xee, 0xf3, 0xba, 0x7f, 0xb6, 0x94, 0x85, 0x61, 0xe2, 0xe8};
- base::RunLoop loop;
- CheckResourceIntegrity(test_data_path.AppendASCII("circle.svg"), expected,
- base::SequencedTaskRunnerHandle::Get(),
- base::BindLambdaForTesting([&](bool matches) {
- EXPECT_TRUE(matches);
- loop.Quit();
- }));
- loop.Run();
- }
- TEST_F(CheckResourceIntegrityTest, Mismatch) {
- base::FilePath test_data_path;
- ASSERT_TRUE(base::PathService::Get(chrome::DIR_TEST_DATA, &test_data_path));
- std::vector<uint8_t> unexpected(crypto::kSHA256Length, 'a');
- base::RunLoop loop;
- CheckResourceIntegrity(test_data_path.AppendASCII("circle.svg"),
- base::make_span<32>(unexpected),
- base::SequencedTaskRunnerHandle::Get(),
- base::BindLambdaForTesting([&](bool matches) {
- EXPECT_FALSE(matches);
- loop.Quit();
- }));
- loop.Run();
- }
- TEST_F(CheckResourceIntegrityTest, NonExistentFile) {
- std::vector<uint8_t> unexpected(crypto::kSHA256Length, 'a');
- base::RunLoop loop;
- CheckResourceIntegrity(
- base::FilePath(FILE_PATH_LITERAL("this file does not exist.moo")),
- base::make_span<crypto::kSHA256Length>(unexpected),
- base::SequencedTaskRunnerHandle::Get(),
- base::BindLambdaForTesting([&](bool matches) {
- EXPECT_FALSE(matches);
- loop.Quit();
- }));
- loop.Quit();
- }
- #if BUILDFLAG(IS_WIN)
- // On Windows, CheckPakFileIntegrity() dynamically finds this symbol from its
- // main exe module (normally chrome.exe). In unit_tests.exe, provide the same
- // export.
- extern "C" __declspec(dllexport) __cdecl void GetPakFileHashes(
- const uint8_t** resources_pak,
- const uint8_t** chrome_100_pak,
- const uint8_t** chrome_200_pak) {
- *resources_pak = kSha256_resources_pak.data();
- *chrome_100_pak = kSha256_chrome_100_percent_pak.data();
- *chrome_200_pak = kSha256_chrome_200_percent_pak.data();
- }
- #endif // BUILDFLAG(IS_WIN)
- TEST_F(CheckResourceIntegrityTest, ChromePaks) {
- base::HistogramTester tester;
- CheckPakFileIntegrity();
- task_environment_.RunUntilIdle();
- tester.ExpectBucketCount("SafeBrowsing.PakIntegrity.Resources", 1, 1);
- tester.ExpectBucketCount("SafeBrowsing.PakIntegrity.Chrome100", 1, 1);
- tester.ExpectBucketCount("SafeBrowsing.PakIntegrity.Chrome200", 1, 1);
- }
|