| 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 its discarded state is |
| 1469 // 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 // Tests chrome.tabs.discard(tabId) with an already discarded tab. It has to |
| 1475 // return the error stating that the tab couldn't be discarded. |
| 1476 scoped_refptr<TabsDiscardFunction> discarded(new TabsDiscardFunction()); |
| 1477 discarded->set_extension(extension.get()); |
| 1478 std::string error = utils::RunFunctionAndReturnError( |
| 1479 discarded.get(), base::StringPrintf("[%u]", tab_id), browser()); |
| 1480 EXPECT_TRUE(base::MatchPattern(error, keys::kCannotDiscardTab)); |
| 1481 } |
| 1482 |
| 1483 // Tests chrome.tabs.discard(invalidId). |
| 1484 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, DiscardWithInvalidId) { |
| 1485 // Create an aditional tab. |
| 1486 ui_test_utils::NavigateToURLWithDisposition( |
| 1487 browser(), GURL(url::kAboutBlankURL), NEW_BACKGROUND_TAB, |
| 1488 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
| 1489 |
| 1490 // Set up the function with an extension. |
| 1491 scoped_refptr<const Extension> extension = test_util::CreateEmptyExtension(); |
| 1492 scoped_refptr<TabsDiscardFunction> discard(new TabsDiscardFunction()); |
| 1493 discard->set_extension(extension.get()); |
| 1494 |
| 1495 // Run function passing an invalid id as argument. |
| 1496 int tab_invalid_id = ExtensionTabUtil::GetTabId( |
| 1497 browser()->tab_strip_model()->GetWebContentsAt(0)); |
| 1498 tab_invalid_id = std::max( |
| 1499 tab_invalid_id, ExtensionTabUtil::GetTabId( |
| 1500 browser()->tab_strip_model()->GetWebContentsAt(1))); |
| 1501 tab_invalid_id++; |
| 1502 |
| 1503 std::string error = utils::RunFunctionAndReturnError( |
| 1504 discard.get(), base::StringPrintf("[%u]", tab_invalid_id), browser()); |
| 1505 |
| 1506 // Discarded state should still be false as no tab was discarded. |
| 1507 EXPECT_FALSE(g_browser_process->GetTabManager()->IsTabDiscarded( |
| 1508 browser()->tab_strip_model()->GetWebContentsAt(1))); |
| 1509 |
| 1510 // Check error message. |
| 1511 EXPECT_TRUE(base::MatchPattern(error, keys::kTabNotFoundError)); |
| 1512 } |
| 1513 |
| 1514 // Tests chrome.tabs.discard(). |
| 1515 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, DiscardWithoutId) { |
| 1516 // Create an aditional tab. |
| 1517 ui_test_utils::NavigateToURLWithDisposition( |
| 1518 browser(), GURL(url::kAboutBlankURL), NEW_BACKGROUND_TAB, |
| 1519 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
| 1520 content::WebContents* web_contents = |
| 1521 browser()->tab_strip_model()->GetWebContentsAt(1); |
| 1522 |
| 1523 // Set up the function with an extension. |
| 1524 scoped_refptr<const Extension> extension = test_util::CreateEmptyExtension(); |
| 1525 scoped_refptr<TabsDiscardFunction> discard(new TabsDiscardFunction()); |
| 1526 discard->set_extension(extension.get()); |
| 1527 |
| 1528 // Disable protection time to discard the tab without passing id. |
| 1529 memory::TabManager* tab_manager = g_browser_process->GetTabManager(); |
| 1530 tab_manager->set_minimum_protection_time_for_tests( |
| 1531 base::TimeDelta::FromSeconds(0)); |
| 1532 |
| 1533 // Run without passing an id. |
| 1534 std::unique_ptr<base::DictionaryValue> result(utils::ToDictionary( |
| 1535 utils::RunFunctionAndReturnSingleResult(discard.get(), "[]", browser()))); |
| 1536 |
| 1537 // Confirms that TabManager sees the tab as discarded. |
| 1538 web_contents = browser()->tab_strip_model()->GetWebContentsAt(1); |
| 1539 EXPECT_TRUE(tab_manager->IsTabDiscarded(web_contents)); |
| 1540 |
| 1541 // Make sure the returned tab is the one discarded and its discarded state is |
| 1542 // correct. |
| 1543 EXPECT_EQ(ExtensionTabUtil::GetTabId(web_contents), |
| 1544 api_test_utils::GetInteger(result.get(), "id")); |
| 1545 EXPECT_TRUE(api_test_utils::GetBoolean(result.get(), "discarded")); |
| 1546 } |
| 1547 |
| 1548 // Tests chrome.tabs.discard() without disabling protection time. |
| 1549 IN_PROC_BROWSER_TEST_F(ExtensionTabsTest, DiscardNoTabProtection) { |
| 1550 // Create an aditional tab. |
| 1551 ui_test_utils::NavigateToURLWithDisposition( |
| 1552 browser(), GURL(url::kAboutBlankURL), NEW_BACKGROUND_TAB, |
| 1553 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
| 1554 |
| 1555 // Make sure protection time isn't disabled. |
| 1556 g_browser_process->GetTabManager()->set_minimum_protection_time_for_tests( |
| 1557 base::TimeDelta::FromMinutes(10)); |
| 1558 |
| 1559 // Set up the function with an extension. |
| 1560 scoped_refptr<const Extension> extension = test_util::CreateEmptyExtension(); |
| 1561 scoped_refptr<TabsDiscardFunction> discard(new TabsDiscardFunction()); |
| 1562 discard->set_extension(extension.get()); |
| 1563 |
| 1564 // Run without passing an id. In this case the tab couldn't be discarded |
| 1565 // because of protection time. |
| 1566 std::string error = |
| 1567 utils::RunFunctionAndReturnError(discard.get(), "[]", browser()); |
| 1568 |
| 1569 // Discarded state should be false for both tabs as no tab was discarded. |
| 1570 EXPECT_FALSE(g_browser_process->GetTabManager()->IsTabDiscarded( |
| 1571 browser()->tab_strip_model()->GetWebContentsAt(1))); |
| 1572 EXPECT_FALSE(g_browser_process->GetTabManager()->IsTabDiscarded( |
| 1573 browser()->tab_strip_model()->GetWebContentsAt(0))); |
| 1574 |
| 1575 // Check error message. |
| 1576 EXPECT_TRUE(base::MatchPattern(error, keys::kCannotFindTabToDiscard)); |
| 1577 } |
| 1578 |
| 1442 // Tester class for the tabs.zoom* api functions. | 1579 // Tester class for the tabs.zoom* api functions. |
| 1443 class ExtensionTabsZoomTest : public ExtensionTabsTest { | 1580 class ExtensionTabsZoomTest : public ExtensionTabsTest { |
| 1444 public: | 1581 public: |
| 1445 void SetUpOnMainThread() override; | 1582 void SetUpOnMainThread() override; |
| 1446 | 1583 |
| 1447 // Runs chrome.tabs.setZoom(). | 1584 // Runs chrome.tabs.setZoom(). |
| 1448 bool RunSetZoom(int tab_id, double zoom_factor); | 1585 bool RunSetZoom(int tab_id, double zoom_factor); |
| 1449 | 1586 |
| 1450 // Runs chrome.tabs.getZoom(). | 1587 // Runs chrome.tabs.getZoom(). |
| 1451 testing::AssertionResult RunGetZoom(int tab_id, double* zoom_factor); | 1588 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( | 2002 EXPECT_TRUE( |
| 1866 base::MatchPattern(error, manifest_errors::kCannotAccessChromeUrl)); | 2003 base::MatchPattern(error, manifest_errors::kCannotAccessChromeUrl)); |
| 1867 | 2004 |
| 1868 // chrome.tabs.setZoomSettings(). | 2005 // chrome.tabs.setZoomSettings(). |
| 1869 error = RunSetZoomSettingsExpectError(tab_id, "manual", "per-tab"); | 2006 error = RunSetZoomSettingsExpectError(tab_id, "manual", "per-tab"); |
| 1870 EXPECT_TRUE( | 2007 EXPECT_TRUE( |
| 1871 base::MatchPattern(error, manifest_errors::kCannotAccessChromeUrl)); | 2008 base::MatchPattern(error, manifest_errors::kCannotAccessChromeUrl)); |
| 1872 } | 2009 } |
| 1873 | 2010 |
| 1874 } // namespace extensions | 2011 } // namespace extensions |
| OLD | NEW |