Chromium Code Reviews| 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/browser_process.h" | |
| 6 #include "chrome/browser/extensions/api/tabs/tabs_api.h" | 7 #include "chrome/browser/extensions/api/tabs/tabs_api.h" |
| 7 #include "chrome/browser/extensions/extension_function_test_utils.h" | 8 #include "chrome/browser/extensions/extension_function_test_utils.h" |
| 8 #include "chrome/browser/extensions/extension_service_test_base.h" | 9 #include "chrome/browser/extensions/extension_service_test_base.h" |
| 9 #include "chrome/browser/extensions/extension_tab_util.h" | 10 #include "chrome/browser/extensions/extension_tab_util.h" |
| 11 #include "chrome/browser/memory/tab_manager.h" | |
| 10 #include "chrome/browser/ui/browser.h" | 12 #include "chrome/browser/ui/browser.h" |
| 11 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 13 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 12 #include "chrome/test/base/test_browser_window.h" | 14 #include "chrome/test/base/test_browser_window.h" |
| 13 #include "content/public/browser/navigation_entry.h" | 15 #include "content/public/browser/navigation_entry.h" |
| 14 #include "content/public/test/web_contents_tester.h" | 16 #include "content/public/test/web_contents_tester.h" |
| 15 #include "extensions/common/extension_builder.h" | 17 #include "extensions/common/extension_builder.h" |
| 16 #include "extensions/common/test_util.h" | 18 #include "extensions/common/test_util.h" |
| 17 | 19 |
| 20 using memory::TabManager; | |
| 21 using content::WebContents; | |
| 22 | |
| 18 namespace extensions { | 23 namespace extensions { |
| 19 | 24 |
| 25 namespace utils = extension_function_test_utils; | |
| 26 | |
| 20 namespace { | 27 namespace { |
| 21 | 28 |
| 22 std::unique_ptr<base::ListValue> RunTabsQueryFunction( | 29 std::unique_ptr<base::ListValue> RunTabsQueryFunction( |
| 23 Browser* browser, | 30 Browser* browser, |
| 24 const Extension* extension, | 31 const Extension* extension, |
| 25 const std::string& query_info) { | 32 const std::string& query_info) { |
| 26 scoped_refptr<TabsQueryFunction> function(new TabsQueryFunction()); | 33 scoped_refptr<TabsQueryFunction> function(new TabsQueryFunction()); |
| 27 function->set_extension(extension); | 34 function->set_extension(extension); |
| 28 std::unique_ptr<base::Value> value( | 35 std::unique_ptr<base::Value> value( |
| 29 extension_function_test_utils::RunFunctionAndReturnSingleResult( | 36 extension_function_test_utils::RunFunctionAndReturnSingleResult( |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 202 int first_tab_id = -1; | 209 int first_tab_id = -1; |
| 203 ASSERT_TRUE(first_tab_info->GetInteger("id", &first_tab_id)); | 210 ASSERT_TRUE(first_tab_info->GetInteger("id", &first_tab_id)); |
| 204 EXPECT_TRUE(ContainsValue(expected_tabs_ids, first_tab_id)); | 211 EXPECT_TRUE(ContainsValue(expected_tabs_ids, first_tab_id)); |
| 205 | 212 |
| 206 int third_tab_id = -1; | 213 int third_tab_id = -1; |
| 207 ASSERT_TRUE(third_tab_info->GetInteger("id", &third_tab_id)); | 214 ASSERT_TRUE(third_tab_info->GetInteger("id", &third_tab_id)); |
| 208 EXPECT_TRUE(ContainsValue(expected_tabs_ids, third_tab_id)); | 215 EXPECT_TRUE(ContainsValue(expected_tabs_ids, third_tab_id)); |
| 209 } | 216 } |
| 210 } | 217 } |
| 211 | 218 |
| 219 TEST_F(TabsApiUnitTest, QueryDiscarded) { | |
|
Devlin
2016/07/11 16:32:28
It doesn't look like this test has been formatted
Anderson Silva
2016/07/11 19:47:51
Done.
| |
| 220 ASSERT_TRUE(g_browser_process && g_browser_process->GetTabManager()); | |
| 221 memory::TabManager* tab_manager = g_browser_process->GetTabManager(); | |
| 222 | |
| 223 // Create three tabs. | |
| 224 content::OpenURLParams params_1(GURL(url::kAboutBlankURL), | |
|
Devlin
2016/07/11 16:32:28
optional nit: I'd also probably just inline these,
Anderson Silva
2016/07/11 19:47:51
Acknowledged.
| |
| 225 content::Referrer(), NEW_BACKGROUND_TAB, | |
| 226 ui::PAGE_TRANSITION_LINK, false); | |
| 227 content::OpenURLParams params_2(GURL(url::kAboutBlankURL), | |
| 228 content::Referrer(), NEW_FOREGROUND_TAB, | |
| 229 ui::PAGE_TRANSITION_LINK, false); | |
| 230 content::WebContents* web_contents_a = browser()->OpenURL(params_1); | |
| 231 content::WebContents* web_contents_b = browser()->OpenURL(params_1); | |
| 232 browser()->OpenURL(params_2); | |
| 233 | |
| 234 // Get non-discarded tabs. | |
| 235 { | |
| 236 const char* kQueryInfo = "[{\"discarded\": false}]"; | |
| 237 scoped_refptr<TabsQueryFunction> function = new TabsQueryFunction(); | |
| 238 function->set_extension(test_util::CreateEmptyExtension().get()); | |
| 239 std::unique_ptr<base::ListValue> result( | |
| 240 utils::ToList(utils::RunFunctionAndReturnSingleResult( | |
| 241 function.get(), kQueryInfo, browser()))); | |
| 242 | |
| 243 EXPECT_EQ(3u, result.get()->GetSize()); | |
|
Devlin
2016/07/11 16:32:28
unique_ptr::operator-> forwards to the underlying
Anderson Silva
2016/07/11 19:47:51
Done.
| |
| 244 } | |
| 245 | |
| 246 // Get discarded tabs. | |
| 247 { | |
| 248 const char* kQueryInfo = "[{\"discarded\": true}]"; | |
| 249 scoped_refptr<TabsQueryFunction> function = new TabsQueryFunction(); | |
| 250 function->set_extension(test_util::CreateEmptyExtension().get()); | |
| 251 std::unique_ptr<base::ListValue> result( | |
| 252 utils::ToList(utils::RunFunctionAndReturnSingleResult( | |
| 253 function.get(), kQueryInfo, browser()))); | |
| 254 | |
| 255 EXPECT_EQ(0u, result.get()->GetSize()); | |
| 256 } | |
| 257 | |
| 258 // Discards one tab. | |
| 259 EXPECT_TRUE( | |
| 260 tab_manager->DiscardTabById(reinterpret_cast<int64_t>(web_contents_a))); | |
| 261 | |
| 262 // Get non-discarded tabs after discarding one tab. | |
| 263 { | |
| 264 const char* kQueryInfo = "[{\"discarded\": false}]"; | |
| 265 scoped_refptr<TabsQueryFunction> function = new TabsQueryFunction(); | |
| 266 function->set_extension(test_util::CreateEmptyExtension().get()); | |
| 267 std::unique_ptr<base::ListValue> result( | |
| 268 utils::ToList(utils::RunFunctionAndReturnSingleResult( | |
| 269 function.get(), kQueryInfo, browser()))); | |
| 270 | |
| 271 EXPECT_EQ(2u, result.get()->GetSize()); | |
|
Devlin
2016/07/11 16:32:28
It might be worth checking that the tabs you get a
Anderson Silva
2016/07/11 19:47:51
Done.
Checked in 2 results.
| |
| 272 } | |
| 273 | |
| 274 // Get discarded tabs after discarding one tab. | |
| 275 { | |
| 276 const char* kQueryInfo = "[{\"discarded\": true}]"; | |
| 277 scoped_refptr<TabsQueryFunction> function = new TabsQueryFunction(); | |
| 278 function->set_extension(test_util::CreateEmptyExtension().get()); | |
| 279 std::unique_ptr<base::ListValue> result( | |
| 280 utils::ToList(utils::RunFunctionAndReturnSingleResult( | |
| 281 function.get(), kQueryInfo, browser()))); | |
| 282 | |
| 283 EXPECT_EQ(1u, result.get()->GetSize()); | |
| 284 } | |
| 285 | |
| 286 // Discards the other created tab. | |
| 287 EXPECT_TRUE( | |
| 288 tab_manager->DiscardTabById(reinterpret_cast<int64_t>(web_contents_b))); | |
| 289 | |
| 290 // Get non-discarded tabs after discarding two created tabs. | |
| 291 { | |
| 292 const char* kQueryInfo = "[{\"discarded\": false}]"; | |
| 293 scoped_refptr<TabsQueryFunction> function = new TabsQueryFunction(); | |
| 294 function->set_extension(test_util::CreateEmptyExtension().get()); | |
| 295 std::unique_ptr<base::ListValue> result( | |
| 296 utils::ToList(utils::RunFunctionAndReturnSingleResult( | |
| 297 function.get(), kQueryInfo, browser()))); | |
| 298 | |
| 299 EXPECT_EQ(1u, result.get()->GetSize()); | |
| 300 } | |
| 301 | |
| 302 // Get discarded tabs after discarding two created tabs. | |
| 303 { | |
| 304 const char* kQueryInfo = "[{\"discarded\": true}]"; | |
| 305 scoped_refptr<TabsQueryFunction> function = new TabsQueryFunction(); | |
| 306 function->set_extension(test_util::CreateEmptyExtension().get()); | |
| 307 std::unique_ptr<base::ListValue> result( | |
| 308 utils::ToList(utils::RunFunctionAndReturnSingleResult( | |
| 309 function.get(), kQueryInfo, browser()))); | |
| 310 | |
| 311 EXPECT_EQ(2u, result.get()->GetSize()); | |
| 312 } | |
| 313 | |
| 314 auto tsm = browser()->tab_strip_model(); | |
|
Devlin
2016/07/11 16:32:28
style guide says to avoid using abbreviation like
Anderson Silva
2016/07/11 19:47:51
Done.
| |
| 315 tsm->ActivateTabAt(0, false); | |
| 316 | |
| 317 // Get non-discarded tabs after activating a discarded tab. | |
| 318 { | |
| 319 const char* kQueryInfo = "[{\"discarded\": false}]"; | |
| 320 scoped_refptr<TabsQueryFunction> function = new TabsQueryFunction(); | |
| 321 function->set_extension(test_util::CreateEmptyExtension().get()); | |
| 322 std::unique_ptr<base::ListValue> result( | |
| 323 utils::ToList(utils::RunFunctionAndReturnSingleResult( | |
| 324 function.get(), kQueryInfo, browser()))); | |
| 325 | |
| 326 EXPECT_EQ(2u, result.get()->GetSize()); | |
| 327 } | |
| 328 | |
| 329 // Get discarded tabs after activating a discarded tab. | |
| 330 { | |
| 331 const char* kQueryInfo = "[{\"discarded\": true}]"; | |
| 332 scoped_refptr<TabsQueryFunction> function = new TabsQueryFunction(); | |
| 333 function->set_extension(test_util::CreateEmptyExtension().get()); | |
| 334 std::unique_ptr<base::ListValue> result( | |
| 335 utils::ToList(utils::RunFunctionAndReturnSingleResult( | |
| 336 function.get(), kQueryInfo, browser()))); | |
| 337 | |
| 338 EXPECT_EQ(1u, result.get()->GetSize()); | |
| 339 } | |
| 340 | |
| 341 browser()->tab_strip_model()->CloseAllTabs(); | |
|
Devlin
2016/07/11 16:32:28
Is this necessary?
Anderson Silva
2016/07/11 19:47:51
Yes. Otherwise we crash at tear down.
Anderson Silva
2016/07/11 19:50:52
Yes. Because there's a check to make sure that Tab
| |
| 342 } | |
| 343 | |
| 212 } // namespace extensions | 344 } // namespace extensions |
| OLD | NEW |