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> |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 30 #include "chrome/browser/profiles/profile.h" | 30 #include "chrome/browser/profiles/profile.h" |
| 31 #include "chrome/browser/ui/browser.h" | 31 #include "chrome/browser/ui/browser.h" |
| 32 #include "chrome/browser/ui/browser_commands.h" | 32 #include "chrome/browser/ui/browser_commands.h" |
| 33 #include "chrome/browser/ui/browser_window.h" | 33 #include "chrome/browser/ui/browser_window.h" |
| 34 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 34 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
| 35 #include "chrome/browser/ui/views/frame/browser_view.h" | 35 #include "chrome/browser/ui/views/frame/browser_view.h" |
| 36 #include "chrome/browser/ui/zoom/chrome_zoom_level_prefs.h" | 36 #include "chrome/browser/ui/zoom/chrome_zoom_level_prefs.h" |
| 37 #include "chrome/test/base/ui_test_utils.h" | 37 #include "chrome/test/base/ui_test_utils.h" |
| 38 #include "components/prefs/pref_service.h" | 38 #include "components/prefs/pref_service.h" |
| 39 #include "content/public/browser/browser_context.h" | 39 #include "content/public/browser/browser_context.h" |
| 40 #include "content/public/browser/notification_service.h" | |
| 40 #include "content/public/browser/storage_partition.h" | 41 #include "content/public/browser/storage_partition.h" |
| 41 #include "content/public/common/page_zoom.h" | 42 #include "content/public/common/page_zoom.h" |
| 42 #include "content/public/common/url_constants.h" | 43 #include "content/public/common/url_constants.h" |
| 43 #include "extensions/browser/api_test_utils.h" | 44 #include "extensions/browser/api_test_utils.h" |
| 44 #include "extensions/browser/app_window/app_window.h" | 45 #include "extensions/browser/app_window/app_window.h" |
| 45 #include "extensions/browser/app_window/app_window_registry.h" | 46 #include "extensions/browser/app_window/app_window_registry.h" |
| 46 #include "extensions/browser/app_window/native_app_window.h" | 47 #include "extensions/browser/app_window/native_app_window.h" |
| 47 #include "extensions/common/manifest_constants.h" | 48 #include "extensions/common/manifest_constants.h" |
| 48 #include "extensions/common/test_util.h" | 49 #include "extensions/common/test_util.h" |
| 49 #include "extensions/test/extension_test_message_listener.h" | 50 #include "extensions/test/extension_test_message_listener.h" |
| (...skipping 1382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1432 } | 1433 } |
| 1433 | 1434 |
| 1434 // Get discarded tabs after activating a discarded tab. | 1435 // Get discarded tabs after activating a discarded tab. |
| 1435 { | 1436 { |
| 1436 std::unique_ptr<base::ListValue> result( | 1437 std::unique_ptr<base::ListValue> result( |
| 1437 RunQueryFunction("[{\"discarded\": true}]")); | 1438 RunQueryFunction("[{\"discarded\": true}]")); |
| 1438 EXPECT_EQ(1u, result->GetSize()); | 1439 EXPECT_EQ(1u, result->GetSize()); |
| 1439 } | 1440 } |
| 1440 } | 1441 } |
| 1441 | 1442 |
| 1443 // Tests chrome.tabs.discard(tabId). | |
| 1444 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, DiscardWithId) { | |
| 1445 // Create an aditional tab. | |
| 1446 ui_test_utils::NavigateToURLWithDisposition( | |
| 1447 browser(), GURL(url::kAboutBlankURL), NEW_BACKGROUND_TAB, | |
| 1448 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | |
| 1449 content::WebContents* web_contents = | |
| 1450 browser()->tab_strip_model()->GetWebContentsAt(1); | |
| 1451 | |
| 1452 // Set up the function with an extension. | |
| 1453 scoped_refptr<const Extension> extension = test_util::CreateEmptyExtension(); | |
| 1454 scoped_refptr<TabsDiscardFunction> discard(new TabsDiscardFunction()); | |
| 1455 discard->set_extension(extension.get()); | |
| 1456 | |
| 1457 // Run function passing the tab id as argument. | |
| 1458 int tab_id = ExtensionTabUtil::GetTabId(web_contents); | |
| 1459 std::unique_ptr<base::DictionaryValue> result( | |
| 1460 utils::ToDictionary(utils::RunFunctionAndReturnSingleResult( | |
| 1461 discard.get(), base::StringPrintf("[%u]", tab_id), browser()))); | |
| 1462 | |
| 1463 // Confirms that TabManager sees the tab as discarded. | |
| 1464 memory::TabManager* tab_manager = g_browser_process->GetTabManager(); | |
| 1465 web_contents = browser()->tab_strip_model()->GetWebContentsAt(1); | |
| 1466 EXPECT_TRUE(tab_manager->IsTabDiscarded(web_contents)); | |
| 1467 | |
| 1468 // Make sure the returned tab is the one discarded and | |
| 1469 // its discarded state is correct. | |
| 1470 tab_id = ExtensionTabUtil::GetTabId(web_contents); | |
| 1471 EXPECT_EQ(tab_id, api_test_utils::GetInteger(result.get(), "id")); | |
| 1472 EXPECT_TRUE(api_test_utils::GetBoolean(result.get(), "discarded")); | |
| 1473 } | |
| 1474 | |
| 1475 // Tests chrome.tabs.discard(invalidId). | |
| 1476 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, DiscardWithInvalidId) { | |
| 1477 // Create an aditional tab. | |
| 1478 ui_test_utils::NavigateToURLWithDisposition( | |
| 1479 browser(), GURL(url::kAboutBlankURL), NEW_BACKGROUND_TAB, | |
| 1480 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | |
| 1481 | |
| 1482 // Set up the function with an extension. | |
| 1483 scoped_refptr<const Extension> extension = test_util::CreateEmptyExtension(); | |
| 1484 scoped_refptr<TabsDiscardFunction> discard(new TabsDiscardFunction()); | |
| 1485 discard->set_extension(extension.get()); | |
| 1486 | |
| 1487 // Run function passing an invalid id as argument. | |
| 1488 int tab_invalid_id = ExtensionTabUtil::GetTabId( | |
| 1489 browser()->tab_strip_model()->GetWebContentsAt(1)) + | |
| 1490 2; | |
|
Devlin
2016/07/25 15:48:55
This seems fragile. We should assert that there i
Anderson Silva
2016/07/25 17:42:00
Done.
| |
| 1491 std::string error = utils::RunFunctionAndReturnError( | |
| 1492 discard.get(), base::StringPrintf("[%u]", tab_invalid_id), browser()); | |
| 1493 | |
| 1494 // Discarded state should still be false as no tab was discarded. | |
| 1495 EXPECT_FALSE(g_browser_process->GetTabManager()->IsTabDiscarded( | |
| 1496 browser()->tab_strip_model()->GetWebContentsAt(1))); | |
| 1497 | |
| 1498 // Check error message. | |
| 1499 EXPECT_TRUE(base::MatchPattern(error, keys::kTabNotFoundError)); | |
| 1500 } | |
| 1501 | |
| 1502 // Tests chrome.tabs.discard(). | |
| 1503 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, DiscardWithoutId) { | |
| 1504 // Create an aditional tab. | |
| 1505 ui_test_utils::NavigateToURLWithDisposition( | |
| 1506 browser(), GURL(url::kAboutBlankURL), NEW_BACKGROUND_TAB, | |
| 1507 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | |
| 1508 content::WebContents* web_contents = | |
| 1509 browser()->tab_strip_model()->GetWebContentsAt(1); | |
| 1510 | |
| 1511 // Set up the function with an extension. | |
| 1512 scoped_refptr<const Extension> extension = test_util::CreateEmptyExtension(); | |
| 1513 scoped_refptr<TabsDiscardFunction> discard(new TabsDiscardFunction()); | |
| 1514 discard->set_extension(extension.get()); | |
| 1515 | |
| 1516 // Disable protection time to discard the tab without passing id. | |
| 1517 memory::TabManager* tab_manager = g_browser_process->GetTabManager(); | |
| 1518 tab_manager->set_minimum_protection_time_for_tests( | |
| 1519 base::TimeDelta::FromSeconds(0)); | |
| 1520 | |
| 1521 // Run without passing an id. | |
| 1522 std::unique_ptr<base::DictionaryValue> result(utils::ToDictionary( | |
| 1523 utils::RunFunctionAndReturnSingleResult(discard.get(), "[]", browser()))); | |
| 1524 | |
| 1525 // Confirms that TabManager sees the tab as discarded. | |
| 1526 web_contents = browser()->tab_strip_model()->GetWebContentsAt(1); | |
| 1527 EXPECT_TRUE(tab_manager->IsTabDiscarded(web_contents)); | |
| 1528 | |
| 1529 // Make sure the returned tab is the one discarded and | |
| 1530 // its discarded state is correct. | |
| 1531 EXPECT_EQ(ExtensionTabUtil::GetTabId(web_contents), | |
| 1532 api_test_utils::GetInteger(result.get(), "id")); | |
| 1533 EXPECT_TRUE(api_test_utils::GetBoolean(result.get(), "discarded")); | |
| 1534 } | |
| 1535 | |
| 1536 // Tests chrome.tabs.discard() without disabling protection time. | |
| 1537 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, DiscardNoTabProtection) { | |
| 1538 // Create an aditional tab. | |
| 1539 ui_test_utils::NavigateToURLWithDisposition( | |
| 1540 browser(), GURL(url::kAboutBlankURL), NEW_BACKGROUND_TAB, | |
| 1541 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | |
| 1542 | |
| 1543 // Set up the function with an extension. | |
| 1544 scoped_refptr<const Extension> extension = test_util::CreateEmptyExtension(); | |
| 1545 scoped_refptr<TabsDiscardFunction> discard(new TabsDiscardFunction()); | |
| 1546 discard->set_extension(extension.get()); | |
| 1547 | |
| 1548 // Run without passing an id. In this case the chrome.tabs.discard() | |
| 1549 // function execution exits with no errors but the tab couldn't be | |
|
Devlin
2016/07/25 15:48:55
This still seems like it *should* be an error to m
Anderson Silva
2016/07/25 17:42:00
Yes, this is by design. It's more of a "best effor
Devlin
2016/07/25 18:05:44
I'm fine with the best-effort approach and with no
| |
| 1550 // discarded because of protection time. | |
| 1551 // Then, the result should be undefined. | |
| 1552 std::unique_ptr<base::Value> result( | |
| 1553 utils::RunFunctionAndReturnSingleResult(discard.get(), "[]", browser())); | |
| 1554 | |
| 1555 EXPECT_FALSE(g_browser_process->GetTabManager()->IsTabDiscarded( | |
| 1556 browser()->tab_strip_model()->GetWebContentsAt(1))); | |
| 1557 EXPECT_FALSE(result); | |
| 1558 } | |
| 1559 | |
| 1442 // Tester class for the tabs.zoom* api functions. | 1560 // Tester class for the tabs.zoom* api functions. |
| 1443 class ExtensionTabsZoomTest : public ExtensionTabsTest { | 1561 class ExtensionTabsZoomTest : public ExtensionTabsTest { |
| 1444 public: | 1562 public: |
| 1445 void SetUpOnMainThread() override; | 1563 void SetUpOnMainThread() override; |
| 1446 | 1564 |
| 1447 // Runs chrome.tabs.setZoom(). | 1565 // Runs chrome.tabs.setZoom(). |
| 1448 bool RunSetZoom(int tab_id, double zoom_factor); | 1566 bool RunSetZoom(int tab_id, double zoom_factor); |
| 1449 | 1567 |
| 1450 // Runs chrome.tabs.getZoom(). | 1568 // Runs chrome.tabs.getZoom(). |
| 1451 testing::AssertionResult RunGetZoom(int tab_id, double* zoom_factor); | 1569 testing::AssertionResult RunGetZoom(int tab_id, double* zoom_factor); |
| (...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1865 EXPECT_TRUE( | 1983 EXPECT_TRUE( |
| 1866 base::MatchPattern(error, manifest_errors::kCannotAccessChromeUrl)); | 1984 base::MatchPattern(error, manifest_errors::kCannotAccessChromeUrl)); |
| 1867 | 1985 |
| 1868 // chrome.tabs.setZoomSettings(). | 1986 // chrome.tabs.setZoomSettings(). |
| 1869 error = RunSetZoomSettingsExpectError(tab_id, "manual", "per-tab"); | 1987 error = RunSetZoomSettingsExpectError(tab_id, "manual", "per-tab"); |
| 1870 EXPECT_TRUE( | 1988 EXPECT_TRUE( |
| 1871 base::MatchPattern(error, manifest_errors::kCannotAccessChromeUrl)); | 1989 base::MatchPattern(error, manifest_errors::kCannotAccessChromeUrl)); |
| 1872 } | 1990 } |
| 1873 | 1991 |
| 1874 } // namespace extensions | 1992 } // namespace extensions |
| OLD | NEW |