1 // Copyright 2017 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.
4
5 #include "chrome/renderer/extensions/extension_process_policy.h"
6
7 #include "components/crx_file/id_util.h"
8 #include "extensions/common/extension_builder.h"
9 #include "extensions/common/extension_set.h"
10 #include "extensions/common/value_builder.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace extensions {
14
15 namespace {
16
CreateExtension(const std::string & id_seed)17 scoped_refptr<const Extension> CreateExtension(const std::string& id_seed) {
18 std::unique_ptr<base::DictionaryValue> manifest =
19 DictionaryBuilder()
20 .Set("name", "test")
21 .Set("version", "1.0")
22 .Set("manifest_version", 2)
23 .Build();
24 return ExtensionBuilder()
25 .SetManifest(std::move(manifest))
26 .SetID(crx_file::id_util::GenerateId(id_seed))
27 .Build();
28 }
29
30 } // namespace
31
TEST(CrossesExtensionBoundaryTest,InstalledExtensions)32 TEST(CrossesExtensionBoundaryTest, InstalledExtensions) {
33 ExtensionSet extensions;
34 scoped_refptr<const Extension> extension1 = CreateExtension("a");
35 scoped_refptr<const Extension> extension2 = CreateExtension("b");
36 extensions.Insert(extension1);
37 extensions.Insert(extension2);
38
39 GURL web_url("https://example.com");
40
41 EXPECT_TRUE(
42 CrossesExtensionProcessBoundary(extensions, web_url, extension1->url()));
43 EXPECT_TRUE(CrossesExtensionProcessBoundary(extensions, extension1->url(),
44 extension2->url()));
45 EXPECT_TRUE(
46 CrossesExtensionProcessBoundary(extensions, extension1->url(), web_url));
47 }
48
TEST(CrossesExtensionBoundaryTest,UninstalledExtensions)49 TEST(CrossesExtensionBoundaryTest, UninstalledExtensions) {
50 ExtensionSet extensions;
51 scoped_refptr<const Extension> extension1 = CreateExtension("a");
52 extensions.Insert(extension1);
53 GURL web_url("https://example.com");
54 GURL non_existent_extension_url("chrome-extension://" + std::string(32, 'a') +
55 "/foo");
56
57 EXPECT_TRUE(CrossesExtensionProcessBoundary(extensions, web_url,
58 non_existent_extension_url));
59 EXPECT_TRUE(CrossesExtensionProcessBoundary(extensions, extension1->url(),
60 non_existent_extension_url));
61 }
62
63 } // namespace extensions
64