Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <limits.h> | 5 #include <limits.h> |
| 6 #include <stddef.h> | 6 #include <stddef.h> |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <string> | 10 #include <string> |
| 11 | 11 |
| 12 #include "base/memory/ref_counted.h" | 12 #include "base/memory/ref_counted.h" |
| 13 #include "base/strings/pattern.h" | 13 #include "base/strings/pattern.h" |
| 14 #include "base/strings/string_split.h" | 14 #include "base/strings/string_split.h" |
| 15 #include "base/strings/string_util.h" | 15 #include "base/strings/string_util.h" |
| 16 #include "base/strings/stringprintf.h" | 16 #include "base/strings/stringprintf.h" |
| 17 #include "base/values.h" | 17 #include "base/values.h" |
| 18 #include "build/build_config.h" | 18 #include "build/build_config.h" |
| 19 #include "chrome/browser/apps/app_browsertest_util.h" | 19 #include "chrome/browser/apps/app_browsertest_util.h" |
| 20 #include "chrome/browser/browser_process.h" | |
| 20 #include "chrome/browser/devtools/devtools_window_testing.h" | 21 #include "chrome/browser/devtools/devtools_window_testing.h" |
| 21 #include "chrome/browser/extensions/api/tabs/tabs_api.h" | 22 #include "chrome/browser/extensions/api/tabs/tabs_api.h" |
| 22 #include "chrome/browser/extensions/api/tabs/tabs_constants.h" | 23 #include "chrome/browser/extensions/api/tabs/tabs_constants.h" |
| 23 #include "chrome/browser/extensions/extension_apitest.h" | 24 #include "chrome/browser/extensions/extension_apitest.h" |
| 24 #include "chrome/browser/extensions/extension_function_test_utils.h" | 25 #include "chrome/browser/extensions/extension_function_test_utils.h" |
| 25 #include "chrome/browser/extensions/extension_tab_util.h" | 26 #include "chrome/browser/extensions/extension_tab_util.h" |
| 26 #include "chrome/browser/extensions/window_controller.h" | 27 #include "chrome/browser/extensions/window_controller.h" |
| 28 #include "chrome/browser/memory/tab_manager.h" | |
| 27 #include "chrome/browser/prefs/incognito_mode_prefs.h" | 29 #include "chrome/browser/prefs/incognito_mode_prefs.h" |
| 28 #include "chrome/browser/profiles/profile.h" | 30 #include "chrome/browser/profiles/profile.h" |
| 29 #include "chrome/browser/ui/browser.h" | 31 #include "chrome/browser/ui/browser.h" |
| 30 #include "chrome/browser/ui/browser_commands.h" | 32 #include "chrome/browser/ui/browser_commands.h" |
| 31 #include "chrome/browser/ui/browser_window.h" | 33 #include "chrome/browser/ui/browser_window.h" |
| 32 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 34 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 33 #include "chrome/browser/ui/views/frame/browser_view.h" | 35 #include "chrome/browser/ui/views/frame/browser_view.h" |
| 34 #include "chrome/browser/ui/zoom/chrome_zoom_level_prefs.h" | 36 #include "chrome/browser/ui/zoom/chrome_zoom_level_prefs.h" |
| 35 #include "chrome/test/base/ui_test_utils.h" | 37 #include "chrome/test/base/ui_test_utils.h" |
| 36 #include "components/prefs/pref_service.h" | 38 #include "components/prefs/pref_service.h" |
| (...skipping 1268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1305 EXPECT_TRUE(base::MatchPattern( | 1307 EXPECT_TRUE(base::MatchPattern( |
| 1306 utils::RunFunctionAndReturnError( | 1308 utils::RunFunctionAndReturnError( |
| 1307 function.get(), base::StringPrintf("[%u, {\"code\": \"true\"}]", | 1309 function.get(), base::StringPrintf("[%u, {\"code\": \"true\"}]", |
| 1308 api::windows::WINDOW_ID_CURRENT), | 1310 api::windows::WINDOW_ID_CURRENT), |
| 1309 DevToolsWindowTesting::Get(devtools)->browser()), | 1311 DevToolsWindowTesting::Get(devtools)->browser()), |
| 1310 manifest_errors::kCannotAccessPageWithUrl)); | 1312 manifest_errors::kCannotAccessPageWithUrl)); |
| 1311 | 1313 |
| 1312 DevToolsWindowTesting::CloseDevToolsWindowSync(devtools); | 1314 DevToolsWindowTesting::CloseDevToolsWindowSync(devtools); |
| 1313 } | 1315 } |
| 1314 | 1316 |
| 1317 // TODO(georgesak): change this browsertest to an unittest. | |
| 1318 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, DiscardedProperty) { | |
| 1319 ASSERT_TRUE(g_browser_process && g_browser_process->GetTabManager()); | |
| 1320 memory::TabManager* tab_manager = g_browser_process->GetTabManager(); | |
| 1321 | |
| 1322 // Create two aditional tabs. | |
| 1323 content::OpenURLParams params(GURL(url::kAboutBlankURL), content::Referrer(), | |
| 1324 NEW_BACKGROUND_TAB, ui::PAGE_TRANSITION_LINK, | |
| 1325 false); | |
| 1326 content::WebContents* web_contents_a = browser()->OpenURL(params); | |
| 1327 content::WebContents* web_contents_b = browser()->OpenURL(params); | |
| 1328 | |
| 1329 // Get non-discarded tabs. | |
| 1330 { | |
| 1331 const char* kQueryInfo = "[{\"discarded\": false}]"; | |
| 1332 scoped_refptr<TabsQueryFunction> function = new TabsQueryFunction(); | |
| 1333 function->set_extension(test_util::CreateEmptyExtension().get()); | |
| 1334 std::unique_ptr<base::ListValue> result( | |
| 1335 utils::ToList(utils::RunFunctionAndReturnSingleResult( | |
|
Devlin
2016/07/13 20:17:46
optional nit: These lines pretty much always look
Anderson Silva
2016/07/14 14:38:43
Done. That's very nice. I didn't know about lambda
| |
| 1336 function.get(), kQueryInfo, browser()))); | |
| 1337 | |
| 1338 // The two created plus the default tab. | |
| 1339 EXPECT_EQ(3u, result->GetSize()); | |
| 1340 } | |
| 1341 | |
| 1342 // Get discarded tabs. | |
| 1343 { | |
| 1344 const char* kQueryInfo = "[{\"discarded\": true}]"; | |
| 1345 scoped_refptr<TabsQueryFunction> function = new TabsQueryFunction(); | |
| 1346 function->set_extension(test_util::CreateEmptyExtension().get()); | |
| 1347 std::unique_ptr<base::ListValue> result( | |
| 1348 utils::ToList(utils::RunFunctionAndReturnSingleResult( | |
| 1349 function.get(), kQueryInfo, browser()))); | |
| 1350 | |
| 1351 EXPECT_EQ(0u, result->GetSize()); | |
| 1352 } | |
| 1353 | |
| 1354 TabStripModel* tab_strip_model = browser()->tab_strip_model(); | |
| 1355 | |
| 1356 // Creates Tab object to ensure the property is correct for the extension. | |
| 1357 std::unique_ptr<api::tabs::Tab> tab_object_a = | |
| 1358 ExtensionTabUtil::CreateTabObject(web_contents_a, tab_strip_model, 0); | |
| 1359 EXPECT_FALSE(tab_object_a->discarded); | |
| 1360 | |
| 1361 // Discards one tab. | |
| 1362 EXPECT_TRUE( | |
| 1363 tab_manager->DiscardTabById(reinterpret_cast<int64_t>(web_contents_a))); | |
| 1364 web_contents_a = tab_strip_model->GetWebContentsAt(1); | |
| 1365 | |
| 1366 // Make sure the property is changed accordingly after discarding the tab. | |
| 1367 tab_object_a = | |
| 1368 ExtensionTabUtil::CreateTabObject(web_contents_a, tab_strip_model, 0); | |
| 1369 EXPECT_TRUE(tab_object_a->discarded); | |
| 1370 | |
| 1371 // Get non-discarded tabs after discarding one tab. | |
| 1372 { | |
| 1373 const char* kQueryInfo = "[{\"discarded\": false}]"; | |
| 1374 scoped_refptr<TabsQueryFunction> function = new TabsQueryFunction(); | |
| 1375 function->set_extension(test_util::CreateEmptyExtension().get()); | |
| 1376 std::unique_ptr<base::ListValue> result( | |
| 1377 utils::ToList(utils::RunFunctionAndReturnSingleResult( | |
| 1378 function.get(), kQueryInfo, browser()))); | |
| 1379 | |
| 1380 EXPECT_EQ(2u, result->GetSize()); | |
| 1381 } | |
| 1382 | |
| 1383 // Get discarded tabs after discarding one tab. | |
| 1384 { | |
| 1385 const char* kQueryInfo = "[{\"discarded\": true}]"; | |
| 1386 scoped_refptr<TabsQueryFunction> function = new TabsQueryFunction(); | |
| 1387 function->set_extension(test_util::CreateEmptyExtension().get()); | |
| 1388 std::unique_ptr<base::ListValue> result( | |
| 1389 utils::ToList(utils::RunFunctionAndReturnSingleResult( | |
| 1390 function.get(), kQueryInfo, browser()))); | |
| 1391 | |
| 1392 EXPECT_EQ(1u, result->GetSize()); | |
| 1393 | |
| 1394 // Make sure the returned tab is the correct one. | |
| 1395 int tab_id_a = ExtensionTabUtil::GetTabId(web_contents_a); | |
| 1396 | |
| 1397 int id = -1; | |
| 1398 base::Value* tab = nullptr; | |
| 1399 EXPECT_TRUE(result->Get(0, &tab)); | |
| 1400 utils::ToDictionary(tab)->GetInteger(keys::kIdKey, &id); | |
| 1401 | |
| 1402 EXPECT_EQ(tab_id_a, id); | |
| 1403 } | |
| 1404 | |
| 1405 // Discards another created tab. | |
| 1406 EXPECT_TRUE( | |
| 1407 tab_manager->DiscardTabById(reinterpret_cast<int64_t>(web_contents_b))); | |
| 1408 | |
| 1409 // Get non-discarded tabs after discarding two created tabs. | |
| 1410 { | |
| 1411 const char* kQueryInfo = "[{\"discarded\": false}]"; | |
| 1412 scoped_refptr<TabsQueryFunction> function = new TabsQueryFunction(); | |
| 1413 function->set_extension(test_util::CreateEmptyExtension().get()); | |
| 1414 std::unique_ptr<base::ListValue> result( | |
| 1415 utils::ToList(utils::RunFunctionAndReturnSingleResult( | |
| 1416 function.get(), kQueryInfo, browser()))); | |
| 1417 | |
| 1418 EXPECT_EQ(1u, result->GetSize()); | |
| 1419 | |
| 1420 // Make sure the returned tab is the correct one. | |
| 1421 int tab_id_c = | |
| 1422 ExtensionTabUtil::GetTabId(tab_strip_model->GetWebContentsAt(0)); | |
| 1423 | |
| 1424 int id = -1; | |
| 1425 base::Value* tab = nullptr; | |
| 1426 EXPECT_TRUE(result->Get(0, &tab)); | |
| 1427 utils::ToDictionary(tab)->GetInteger(keys::kIdKey, &id); | |
| 1428 | |
| 1429 EXPECT_EQ(tab_id_c, id); | |
| 1430 } | |
| 1431 | |
| 1432 // Get discarded tabs after discarding two created tabs. | |
| 1433 { | |
| 1434 const char* kQueryInfo = "[{\"discarded\": true}]"; | |
| 1435 scoped_refptr<TabsQueryFunction> function = new TabsQueryFunction(); | |
| 1436 function->set_extension(test_util::CreateEmptyExtension().get()); | |
| 1437 std::unique_ptr<base::ListValue> result( | |
| 1438 utils::ToList(utils::RunFunctionAndReturnSingleResult( | |
| 1439 function.get(), kQueryInfo, browser()))); | |
| 1440 | |
| 1441 EXPECT_EQ(2u, result->GetSize()); | |
| 1442 } | |
| 1443 | |
| 1444 // Activates the first created tab. | |
| 1445 tab_strip_model->ActivateTabAt(1, false); | |
| 1446 | |
| 1447 // Get non-discarded tabs after activating a discarded tab. | |
| 1448 { | |
| 1449 const char* kQueryInfo = "[{\"discarded\": false}]"; | |
| 1450 scoped_refptr<TabsQueryFunction> function = new TabsQueryFunction(); | |
| 1451 function->set_extension(test_util::CreateEmptyExtension().get()); | |
| 1452 std::unique_ptr<base::ListValue> result( | |
| 1453 utils::ToList(utils::RunFunctionAndReturnSingleResult( | |
| 1454 function.get(), kQueryInfo, browser()))); | |
| 1455 | |
| 1456 EXPECT_EQ(2u, result->GetSize()); | |
| 1457 } | |
| 1458 | |
| 1459 // Get discarded tabs after activating a discarded tab. | |
| 1460 { | |
| 1461 const char* kQueryInfo = "[{\"discarded\": true}]"; | |
| 1462 scoped_refptr<TabsQueryFunction> function = new TabsQueryFunction(); | |
| 1463 function->set_extension(test_util::CreateEmptyExtension().get()); | |
| 1464 std::unique_ptr<base::ListValue> result( | |
| 1465 utils::ToList(utils::RunFunctionAndReturnSingleResult( | |
| 1466 function.get(), kQueryInfo, browser()))); | |
| 1467 | |
| 1468 EXPECT_EQ(1u, result->GetSize()); | |
| 1469 } | |
| 1470 } | |
| 1471 | |
| 1315 // Tester class for the tabs.zoom* api functions. | 1472 // Tester class for the tabs.zoom* api functions. |
| 1316 class ExtensionTabsZoomTest : public ExtensionTabsTest { | 1473 class ExtensionTabsZoomTest : public ExtensionTabsTest { |
| 1317 public: | 1474 public: |
| 1318 void SetUpOnMainThread() override; | 1475 void SetUpOnMainThread() override; |
| 1319 | 1476 |
| 1320 // Runs chrome.tabs.setZoom(). | 1477 // Runs chrome.tabs.setZoom(). |
| 1321 bool RunSetZoom(int tab_id, double zoom_factor); | 1478 bool RunSetZoom(int tab_id, double zoom_factor); |
| 1322 | 1479 |
| 1323 // Runs chrome.tabs.getZoom(). | 1480 // Runs chrome.tabs.getZoom(). |
| 1324 testing::AssertionResult RunGetZoom(int tab_id, double* zoom_factor); | 1481 testing::AssertionResult RunGetZoom(int tab_id, double* zoom_factor); |
| (...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1738 EXPECT_TRUE( | 1895 EXPECT_TRUE( |
| 1739 base::MatchPattern(error, manifest_errors::kCannotAccessChromeUrl)); | 1896 base::MatchPattern(error, manifest_errors::kCannotAccessChromeUrl)); |
| 1740 | 1897 |
| 1741 // chrome.tabs.setZoomSettings(). | 1898 // chrome.tabs.setZoomSettings(). |
| 1742 error = RunSetZoomSettingsExpectError(tab_id, "manual", "per-tab"); | 1899 error = RunSetZoomSettingsExpectError(tab_id, "manual", "per-tab"); |
| 1743 EXPECT_TRUE( | 1900 EXPECT_TRUE( |
| 1744 base::MatchPattern(error, manifest_errors::kCannotAccessChromeUrl)); | 1901 base::MatchPattern(error, manifest_errors::kCannotAccessChromeUrl)); |
| 1745 } | 1902 } |
| 1746 | 1903 |
| 1747 } // namespace extensions | 1904 } // namespace extensions |
| OLD | NEW |