OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/common/extensions/extension_extent.h" | 5 #include "base/file_path.h" |
6 #include "chrome/common/render_messages_params.h" | 6 #include "base/logging.h" |
| 7 #include "base/ref_counted.h" |
| 8 #include "base/scoped_ptr.h" |
| 9 #include "base/values.h" |
| 10 #include "chrome/common/extensions/extension.h" |
7 #include "chrome/renderer/extensions/extension_renderer_info.h" | 11 #include "chrome/renderer/extensions/extension_renderer_info.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
9 | 13 |
10 static void AddPattern(ExtensionExtent* extent, const std::string& pattern) { | 14 namespace { |
11 int schemes = URLPattern::SCHEME_HTTP | URLPattern::SCHEME_HTTPS; | 15 |
12 extent->AddPattern(URLPattern(schemes, pattern)); | 16 scoped_refptr<Extension> CreateTestExtension(const std::string& name, |
| 17 const std::string& launch_url, |
| 18 const std::string& extent) { |
| 19 FilePath path; |
| 20 path = path.AppendASCII(std::string("//") + name); |
| 21 |
| 22 DictionaryValue manifest; |
| 23 manifest.SetString("name", name); |
| 24 manifest.SetString("version", "1"); |
| 25 |
| 26 if (!launch_url.empty()) |
| 27 manifest.SetString("app.launch.web_url", launch_url); |
| 28 |
| 29 if (!extent.empty()) { |
| 30 ListValue* urls = new ListValue(); |
| 31 manifest.Set("app.urls", urls); |
| 32 urls->Append(Value::CreateStringValue(extent)); |
| 33 } |
| 34 |
| 35 const bool kRequireKey = false; |
| 36 std::string error; |
| 37 scoped_refptr<Extension> extension( |
| 38 Extension::Create(path, Extension::INTERNAL, manifest, kRequireKey, |
| 39 &error)); |
| 40 EXPECT_TRUE(extension.get()) << error; |
| 41 return extension; |
13 } | 42 } |
14 | 43 |
| 44 } // namespace |
| 45 |
15 TEST(ExtensionRendererInfoTest, ExtensionRendererInfo) { | 46 TEST(ExtensionRendererInfoTest, ExtensionRendererInfo) { |
16 std::string one("1"), two("2"), three("3"); | 47 scoped_refptr<Extension> ext1(CreateTestExtension( |
| 48 "a", "https://chrome.google.com/launch", "https://chrome.google.com/")); |
17 | 49 |
18 ViewMsg_ExtensionsUpdated_Params msg; | 50 scoped_refptr<Extension> ext2(CreateTestExtension( |
19 msg.extensions.resize(3); | 51 "a", "http://code.google.com/p/chromium", |
| 52 "http://code.google.com/p/chromium/")); |
20 | 53 |
21 msg.extensions[0].id = one; | 54 scoped_refptr<Extension> ext3(CreateTestExtension( |
22 ExtensionExtent web1; | 55 "b", "http://dev.chromium.org/", "http://dev.chromium.org/")); |
23 AddPattern(&web1, "https://chrome.google.com/*"); | |
24 msg.extensions[0].web_extent = web1; | |
25 | 56 |
26 msg.extensions[1].id = two; | 57 scoped_refptr<Extension> ext4(CreateTestExtension("c", "", "")); |
27 ExtensionExtent web2; | |
28 AddPattern(&web2, "http://code.google.com/p/chromium/*"); | |
29 msg.extensions[1].web_extent = web2; | |
30 | 58 |
31 msg.extensions[2].id = three; | 59 ASSERT_TRUE(ext1 && ext2 && ext3 && ext4); |
32 ExtensionExtent web3; | |
33 AddPattern(&web3, "http://dev.chromium.org/*"); | |
34 msg.extensions[2].web_extent = web3; | |
35 | 60 |
36 ExtensionRendererInfo::UpdateExtensions(msg); | 61 ExtensionRendererInfo extensions; |
37 EXPECT_EQ(ExtensionRendererInfo::extensions_->size(), 3u); | |
38 | 62 |
39 ExtensionRendererInfo* ext1 = &ExtensionRendererInfo::extensions_->at(0); | 63 // Add an extension. |
40 ExtensionRendererInfo* ext2 = &ExtensionRendererInfo::extensions_->at(1); | 64 extensions.Update(ext1); |
41 ExtensionRendererInfo* ext3 = &ExtensionRendererInfo::extensions_->at(2); | 65 EXPECT_EQ(1u, extensions.size()); |
42 EXPECT_EQ(ext1->id(), one); | 66 EXPECT_EQ(ext1, extensions.GetByID(ext1->id())); |
43 EXPECT_EQ(ext2->id(), two); | |
44 EXPECT_EQ(ext3->id(), three); | |
45 | 67 |
46 EXPECT_EQ(ext1, ExtensionRendererInfo::GetByID(one)); | 68 // Since extension2 has same ID, it should overwrite extension1. |
47 EXPECT_EQ(ext1, ExtensionRendererInfo::GetByURL( | 69 extensions.Update(ext2); |
48 GURL("https://chrome.google.com/extensions/"))); | 70 EXPECT_EQ(1u, extensions.size()); |
49 EXPECT_EQ(ext2, ExtensionRendererInfo::GetByURL( | 71 EXPECT_EQ(ext2, extensions.GetByID(ext1->id())); |
50 GURL("http://code.google.com/p/chromium/issues/"))); | 72 |
51 EXPECT_EQ(ext3, ExtensionRendererInfo::GetByURL( | 73 // Add the other extensions. |
| 74 extensions.Update(ext3); |
| 75 extensions.Update(ext4); |
| 76 EXPECT_EQ(3u, extensions.size()); |
| 77 |
| 78 // Get extension by its chrome-extension:// URL |
| 79 EXPECT_EQ(ext2, extensions.GetByURL( |
| 80 ext2->GetResourceURL("test.html"))); |
| 81 EXPECT_EQ(ext3, extensions.GetByURL( |
| 82 ext3->GetResourceURL("test.html"))); |
| 83 EXPECT_EQ(ext4, extensions.GetByURL( |
| 84 ext4->GetResourceURL("test.html"))); |
| 85 |
| 86 // Get extension by web extent. |
| 87 EXPECT_EQ(ext2, extensions.GetByURL( |
| 88 GURL("http://code.google.com/p/chromium/monkey"))); |
| 89 EXPECT_EQ(ext3, extensions.GetByURL( |
52 GURL("http://dev.chromium.org/design-docs/"))); | 90 GURL("http://dev.chromium.org/design-docs/"))); |
53 EXPECT_EQ(NULL, ExtensionRendererInfo::GetByURL( | 91 EXPECT_FALSE(extensions.GetByURL( |
54 GURL("http://blog.chromium.org/"))); | 92 GURL("http://blog.chromium.org/"))); |
55 | 93 |
56 EXPECT_TRUE(ExtensionRendererInfo::InSameExtent( | 94 // Test InSameExtent(). |
57 GURL("https://chrome.google.com/extensions/"), | 95 EXPECT_TRUE(extensions.InSameExtent( |
58 GURL("https://chrome.google.com/"))); | 96 GURL("http://code.google.com/p/chromium/monkey/"), |
59 EXPECT_FALSE(ExtensionRendererInfo::InSameExtent( | 97 GURL("http://code.google.com/p/chromium/"))); |
60 GURL("https://chrome.google.com/extensions/"), | 98 EXPECT_FALSE(extensions.InSameExtent( |
61 GURL("http://chrome.google.com/"))); | 99 GURL("http://code.google.com/p/chromium/"), |
62 EXPECT_FALSE(ExtensionRendererInfo::InSameExtent( | 100 GURL("https://code.google.com/p/chromium/"))); |
63 GURL("https://chrome.google.com/extensions/"), | 101 EXPECT_FALSE(extensions.InSameExtent( |
| 102 GURL("http://code.google.com/p/chromium/"), |
64 GURL("http://dev.chromium.org/design-docs/"))); | 103 GURL("http://dev.chromium.org/design-docs/"))); |
65 | 104 |
66 // Both of these should be NULL, which mean true for InSameExtent. | 105 // Both of these should be NULL, which mean true for InSameExtent. |
67 EXPECT_TRUE(ExtensionRendererInfo::InSameExtent( | 106 EXPECT_TRUE(extensions.InSameExtent( |
68 GURL("http://www.google.com/"), | 107 GURL("http://www.google.com/"), |
69 GURL("http://blog.chromium.org/"))); | 108 GURL("http://blog.chromium.org/"))); |
| 109 |
| 110 // Remove one of the extensions. |
| 111 extensions.Remove(ext2->id()); |
| 112 EXPECT_EQ(2u, extensions.size()); |
| 113 EXPECT_FALSE(extensions.GetByID(ext2->id())); |
70 } | 114 } |
OLD | NEW |