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