1 // Copyright 2014 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.
8 #include "base/base64.h"
9 #include "base/file_util.h"
10 #include "base/files/file_path.h"
11 #include "base/path_service.h"
12 #include "base/stl_util.h"
13 #include "extensions/browser/verified_contents.h"
14 #include "extensions/common/extension.h"
15 #include "extensions/common/extension_paths.h"
16 #include "testing/gtest/include/gtest/gtest.h"
18 namespace extensions
{
22 bool Base64UrlStringEquals(std::string input
, const std::string
* bytes
) {
25 if (!VerifiedContents::FixupBase64Encoding(&input
))
28 if (!base::Base64Decode(input
, &decoded
))
30 if (decoded
.size() != bytes
->size())
36 return decoded
== *bytes
;
39 bool GetPublicKey(const base::FilePath
& path
, std::string
* public_key
) {
40 std::string public_key_pem
;
41 if (!base::ReadFileToString(path
, &public_key_pem
))
43 if (!Extension::ParsePEMKeyBytes(public_key_pem
, public_key
))
50 TEST(VerifiedContents
, Simple
) {
51 // Figure out our test data directory.
53 PathService::Get(DIR_TEST_DATA
, &path
);
54 path
= path
.AppendASCII("content_verifier/");
56 // Initialize the VerifiedContents object.
57 std::string public_key
;
58 ASSERT_TRUE(GetPublicKey(path
.AppendASCII("public_key.pem"), &public_key
));
59 VerifiedContents
contents(reinterpret_cast<const uint8
*>(public_key
.data()),
61 base::FilePath verified_contents_path
=
62 path
.AppendASCII("verified_contents.json");
64 ASSERT_TRUE(contents
.InitFrom(verified_contents_path
, false));
66 // Make sure we get expected values.
67 EXPECT_EQ(contents
.block_size(), 4096);
68 EXPECT_EQ(contents
.extension_id(), "abcdefghijklmnopabcdefghijklmnop");
69 EXPECT_EQ("1.2.3", contents
.version().GetString());
71 EXPECT_TRUE(Base64UrlStringEquals(
72 "-vyyIIn7iSCzg7X3ICUI5wZa3tG7w7vyiCckxZdJGfs",
73 contents
.GetTreeHashRoot(
74 base::FilePath::FromUTF8Unsafe("manifest.json"))));
75 EXPECT_TRUE(Base64UrlStringEquals(
76 "txHiG5KQvNoPOSH5FbQo9Zb5gJ23j3oFB0Ru9DOnziw",
77 contents
.GetTreeHashRoot(
78 base::FilePath::FromUTF8Unsafe("background.js"))));
80 base::FilePath foo_bar_html
=
81 base::FilePath(FILE_PATH_LITERAL("foo")).AppendASCII("bar.html");
82 EXPECT_FALSE(foo_bar_html
.IsAbsolute());
84 Base64UrlStringEquals("L37LFbT_hmtxRL7AfGZN9YTpW6yoz_ZiQ1opLJn1NZU",
85 contents
.GetTreeHashRoot(foo_bar_html
)));
87 base::FilePath nonexistent
= base::FilePath::FromUTF8Unsafe("nonexistent");
88 EXPECT_TRUE(contents
.GetTreeHashRoot(nonexistent
) == NULL
);
91 } // namespace extensions