| 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 |