OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "base/strings/utf_string_conversions.h" | 5 #include "base/strings/utf_string_conversions.h" |
6 #include "chrome/browser/extensions/api/tabs/tabs_api.h" | 6 #include "chrome/browser/extensions/api/tabs/tabs_api.h" |
7 #include "chrome/browser/extensions/extension_function_test_utils.h" | 7 #include "chrome/browser/extensions/extension_function_test_utils.h" |
8 #include "chrome/browser/extensions/extension_service_test_base.h" | 8 #include "chrome/browser/extensions/extension_service_test_base.h" |
9 #include "chrome/browser/extensions/extension_tab_util.h" | 9 #include "chrome/browser/extensions/extension_tab_util.h" |
10 #include "chrome/browser/ui/browser.h" | 10 #include "chrome/browser/ui/browser.h" |
11 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 11 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
12 #include "chrome/test/base/test_browser_window.h" | 12 #include "chrome/test/base/test_browser_window.h" |
13 #include "content/public/browser/navigation_entry.h" | 13 #include "content/public/browser/navigation_entry.h" |
14 #include "content/public/test/test_web_contents_factory.h" | 14 #include "content/public/test/test_web_contents_factory.h" |
15 #include "content/public/test/web_contents_tester.h" | 15 #include "content/public/test/web_contents_tester.h" |
16 #include "extensions/common/extension_builder.h" | 16 #include "extensions/common/extension_builder.h" |
17 #include "extensions/common/test_util.h" | 17 #include "extensions/common/test_util.h" |
18 | 18 |
19 namespace extensions { | 19 namespace extensions { |
20 | 20 |
21 namespace { | 21 namespace { |
22 | 22 |
23 scoped_ptr<base::ListValue> RunTabsQueryFunction( | 23 std::unique_ptr<base::ListValue> RunTabsQueryFunction( |
24 Browser* browser, | 24 Browser* browser, |
25 const Extension* extension, | 25 const Extension* extension, |
26 const std::string& query_info) { | 26 const std::string& query_info) { |
27 scoped_refptr<TabsQueryFunction> function(new TabsQueryFunction()); | 27 scoped_refptr<TabsQueryFunction> function(new TabsQueryFunction()); |
28 function->set_extension(extension); | 28 function->set_extension(extension); |
29 scoped_ptr<base::Value> value( | 29 std::unique_ptr<base::Value> value( |
30 extension_function_test_utils::RunFunctionAndReturnSingleResult( | 30 extension_function_test_utils::RunFunctionAndReturnSingleResult( |
31 function.get(), query_info, browser, | 31 function.get(), query_info, browser, |
32 extension_function_test_utils::NONE)); | 32 extension_function_test_utils::NONE)); |
33 return base::ListValue::From(std::move(value)); | 33 return base::ListValue::From(std::move(value)); |
34 } | 34 } |
35 | 35 |
36 } // namespace | 36 } // namespace |
37 | 37 |
38 class TabsApiUnitTest : public ExtensionServiceTestBase { | 38 class TabsApiUnitTest : public ExtensionServiceTestBase { |
39 protected: | 39 protected: |
40 TabsApiUnitTest() {} | 40 TabsApiUnitTest() {} |
41 ~TabsApiUnitTest() override {} | 41 ~TabsApiUnitTest() override {} |
42 | 42 |
43 Browser* browser() { return browser_.get(); } | 43 Browser* browser() { return browser_.get(); } |
44 | 44 |
45 private: | 45 private: |
46 // ExtensionServiceTestBase: | 46 // ExtensionServiceTestBase: |
47 void SetUp() override; | 47 void SetUp() override; |
48 void TearDown() override; | 48 void TearDown() override; |
49 | 49 |
50 // The browser (and accompanying window). | 50 // The browser (and accompanying window). |
51 scoped_ptr<TestBrowserWindow> browser_window_; | 51 std::unique_ptr<TestBrowserWindow> browser_window_; |
52 scoped_ptr<Browser> browser_; | 52 std::unique_ptr<Browser> browser_; |
53 | 53 |
54 DISALLOW_COPY_AND_ASSIGN(TabsApiUnitTest); | 54 DISALLOW_COPY_AND_ASSIGN(TabsApiUnitTest); |
55 }; | 55 }; |
56 | 56 |
57 void TabsApiUnitTest::SetUp() { | 57 void TabsApiUnitTest::SetUp() { |
58 ExtensionServiceTestBase::SetUp(); | 58 ExtensionServiceTestBase::SetUp(); |
59 InitializeEmptyExtensionService(); | 59 InitializeEmptyExtensionService(); |
60 | 60 |
61 browser_window_.reset(new TestBrowserWindow()); | 61 browser_window_.reset(new TestBrowserWindow()); |
62 Browser::CreateParams params(profile()); | 62 Browser::CreateParams params(profile()); |
(...skipping 28 matching lines...) Expand all Loading... |
91 web_contents_tester->NavigateAndCommit(tab_urls[i]); | 91 web_contents_tester->NavigateAndCommit(tab_urls[i]); |
92 web_contents->GetController().GetVisibleEntry()->SetTitle( | 92 web_contents->GetController().GetVisibleEntry()->SetTitle( |
93 base::ASCIIToUTF16(tab_titles[i])); | 93 base::ASCIIToUTF16(tab_titles[i])); |
94 } | 94 } |
95 | 95 |
96 const char* kTitleAndURLQueryInfo = | 96 const char* kTitleAndURLQueryInfo = |
97 "[{\"title\": \"Sample title\", \"url\": \"*://www.google.com/*\"}]"; | 97 "[{\"title\": \"Sample title\", \"url\": \"*://www.google.com/*\"}]"; |
98 | 98 |
99 // An extension without "tabs" permission will see none of the 3 tabs. | 99 // An extension without "tabs" permission will see none of the 3 tabs. |
100 scoped_refptr<const Extension> extension = test_util::CreateEmptyExtension(); | 100 scoped_refptr<const Extension> extension = test_util::CreateEmptyExtension(); |
101 scoped_ptr<base::ListValue> tabs_list_without_permission( | 101 std::unique_ptr<base::ListValue> tabs_list_without_permission( |
102 RunTabsQueryFunction(browser(), extension.get(), kTitleAndURLQueryInfo)); | 102 RunTabsQueryFunction(browser(), extension.get(), kTitleAndURLQueryInfo)); |
103 ASSERT_TRUE(tabs_list_without_permission); | 103 ASSERT_TRUE(tabs_list_without_permission); |
104 EXPECT_EQ(0u, tabs_list_without_permission->GetSize()); | 104 EXPECT_EQ(0u, tabs_list_without_permission->GetSize()); |
105 | 105 |
106 // An extension with "tabs" permission however will see the third tab. | 106 // An extension with "tabs" permission however will see the third tab. |
107 scoped_refptr<const Extension> extension_with_permission = | 107 scoped_refptr<const Extension> extension_with_permission = |
108 ExtensionBuilder() | 108 ExtensionBuilder() |
109 .SetManifest( | 109 .SetManifest( |
110 DictionaryBuilder() | 110 DictionaryBuilder() |
111 .Set("name", "Extension with tabs permission") | 111 .Set("name", "Extension with tabs permission") |
112 .Set("version", "1.0") | 112 .Set("version", "1.0") |
113 .Set("manifest_version", 2) | 113 .Set("manifest_version", 2) |
114 .Set("permissions", ListBuilder().Append("tabs").Build()) | 114 .Set("permissions", ListBuilder().Append("tabs").Build()) |
115 .Build()) | 115 .Build()) |
116 .Build(); | 116 .Build(); |
117 scoped_ptr<base::ListValue> tabs_list_with_permission(RunTabsQueryFunction( | 117 std::unique_ptr<base::ListValue> tabs_list_with_permission( |
118 browser(), extension_with_permission.get(), kTitleAndURLQueryInfo)); | 118 RunTabsQueryFunction(browser(), extension_with_permission.get(), |
| 119 kTitleAndURLQueryInfo)); |
119 ASSERT_TRUE(tabs_list_with_permission); | 120 ASSERT_TRUE(tabs_list_with_permission); |
120 ASSERT_EQ(1u, tabs_list_with_permission->GetSize()); | 121 ASSERT_EQ(1u, tabs_list_with_permission->GetSize()); |
121 | 122 |
122 const base::DictionaryValue* third_tab_info; | 123 const base::DictionaryValue* third_tab_info; |
123 ASSERT_TRUE(tabs_list_with_permission->GetDictionary(0, &third_tab_info)); | 124 ASSERT_TRUE(tabs_list_with_permission->GetDictionary(0, &third_tab_info)); |
124 int third_tab_id = -1; | 125 int third_tab_id = -1; |
125 ASSERT_TRUE(third_tab_info->GetInteger("id", &third_tab_id)); | 126 ASSERT_TRUE(third_tab_info->GetInteger("id", &third_tab_id)); |
126 EXPECT_EQ(ExtensionTabUtil::GetTabId(web_contentses[2]), third_tab_id); | 127 EXPECT_EQ(ExtensionTabUtil::GetTabId(web_contentses[2]), third_tab_id); |
127 } | 128 } |
128 | 129 |
(...skipping 29 matching lines...) Expand all Loading... |
158 DictionaryBuilder() | 159 DictionaryBuilder() |
159 .Set("name", "Extension with tabs permission") | 160 .Set("name", "Extension with tabs permission") |
160 .Set("version", "1.0") | 161 .Set("version", "1.0") |
161 .Set("manifest_version", 2) | 162 .Set("manifest_version", 2) |
162 .Set("permissions", | 163 .Set("permissions", |
163 ListBuilder().Append("*://www.google.com/*").Build()) | 164 ListBuilder().Append("*://www.google.com/*").Build()) |
164 .Build()) | 165 .Build()) |
165 .Build(); | 166 .Build(); |
166 | 167 |
167 { | 168 { |
168 scoped_ptr<base::ListValue> tabs_list_with_permission(RunTabsQueryFunction( | 169 std::unique_ptr<base::ListValue> tabs_list_with_permission( |
169 browser(), extension_with_permission.get(), kTitleAndURLQueryInfo)); | 170 RunTabsQueryFunction(browser(), extension_with_permission.get(), |
| 171 kTitleAndURLQueryInfo)); |
170 ASSERT_TRUE(tabs_list_with_permission); | 172 ASSERT_TRUE(tabs_list_with_permission); |
171 ASSERT_EQ(1u, tabs_list_with_permission->GetSize()); | 173 ASSERT_EQ(1u, tabs_list_with_permission->GetSize()); |
172 | 174 |
173 const base::DictionaryValue* third_tab_info; | 175 const base::DictionaryValue* third_tab_info; |
174 ASSERT_TRUE(tabs_list_with_permission->GetDictionary(0, &third_tab_info)); | 176 ASSERT_TRUE(tabs_list_with_permission->GetDictionary(0, &third_tab_info)); |
175 int third_tab_id = -1; | 177 int third_tab_id = -1; |
176 ASSERT_TRUE(third_tab_info->GetInteger("id", &third_tab_id)); | 178 ASSERT_TRUE(third_tab_info->GetInteger("id", &third_tab_id)); |
177 EXPECT_EQ(ExtensionTabUtil::GetTabId(web_contentses[2]), third_tab_id); | 179 EXPECT_EQ(ExtensionTabUtil::GetTabId(web_contentses[2]), third_tab_id); |
178 } | 180 } |
179 | 181 |
180 // Try the same without title, first and third tabs will match. | 182 // Try the same without title, first and third tabs will match. |
181 const char* kURLQueryInfo = "[{\"url\": \"*://www.google.com/*\"}]"; | 183 const char* kURLQueryInfo = "[{\"url\": \"*://www.google.com/*\"}]"; |
182 { | 184 { |
183 scoped_ptr<base::ListValue> tabs_list_with_permission(RunTabsQueryFunction( | 185 std::unique_ptr<base::ListValue> tabs_list_with_permission( |
184 browser(), extension_with_permission.get(), kURLQueryInfo)); | 186 RunTabsQueryFunction(browser(), extension_with_permission.get(), |
| 187 kURLQueryInfo)); |
185 ASSERT_TRUE(tabs_list_with_permission); | 188 ASSERT_TRUE(tabs_list_with_permission); |
186 ASSERT_EQ(2u, tabs_list_with_permission->GetSize()); | 189 ASSERT_EQ(2u, tabs_list_with_permission->GetSize()); |
187 | 190 |
188 const base::DictionaryValue* first_tab_info; | 191 const base::DictionaryValue* first_tab_info; |
189 const base::DictionaryValue* third_tab_info; | 192 const base::DictionaryValue* third_tab_info; |
190 ASSERT_TRUE(tabs_list_with_permission->GetDictionary(0, &first_tab_info)); | 193 ASSERT_TRUE(tabs_list_with_permission->GetDictionary(0, &first_tab_info)); |
191 ASSERT_TRUE(tabs_list_with_permission->GetDictionary(1, &third_tab_info)); | 194 ASSERT_TRUE(tabs_list_with_permission->GetDictionary(1, &third_tab_info)); |
192 | 195 |
193 std::vector<int> expected_tabs_ids; | 196 std::vector<int> expected_tabs_ids; |
194 expected_tabs_ids.push_back(ExtensionTabUtil::GetTabId(web_contentses[0])); | 197 expected_tabs_ids.push_back(ExtensionTabUtil::GetTabId(web_contentses[0])); |
195 expected_tabs_ids.push_back(ExtensionTabUtil::GetTabId(web_contentses[2])); | 198 expected_tabs_ids.push_back(ExtensionTabUtil::GetTabId(web_contentses[2])); |
196 | 199 |
197 int first_tab_id = -1; | 200 int first_tab_id = -1; |
198 ASSERT_TRUE(first_tab_info->GetInteger("id", &first_tab_id)); | 201 ASSERT_TRUE(first_tab_info->GetInteger("id", &first_tab_id)); |
199 EXPECT_TRUE(ContainsValue(expected_tabs_ids, first_tab_id)); | 202 EXPECT_TRUE(ContainsValue(expected_tabs_ids, first_tab_id)); |
200 | 203 |
201 int third_tab_id = -1; | 204 int third_tab_id = -1; |
202 ASSERT_TRUE(third_tab_info->GetInteger("id", &third_tab_id)); | 205 ASSERT_TRUE(third_tab_info->GetInteger("id", &third_tab_id)); |
203 EXPECT_TRUE(ContainsValue(expected_tabs_ids, third_tab_id)); | 206 EXPECT_TRUE(ContainsValue(expected_tabs_ids, third_tab_id)); |
204 } | 207 } |
205 } | 208 } |
206 | 209 |
207 } // namespace extensions | 210 } // namespace extensions |
OLD | NEW |