OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <string> | 5 #include <string> |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
9 #include "base/file_path.h" | 9 #include "base/file_path.h" |
10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
11 #include "base/i18n/rtl.h" | 11 #include "base/i18n/rtl.h" |
12 #include "base/json/json_value_serializer.h" | 12 #include "base/json/json_value_serializer.h" |
13 #include "base/md5.h" | |
14 #include "base/memory/scoped_ptr.h" | 13 #include "base/memory/scoped_ptr.h" |
15 #include "base/scoped_temp_dir.h" | 14 #include "base/scoped_temp_dir.h" |
16 #include "base/string_util.h" | 15 #include "base/string_util.h" |
17 #include "base/stringprintf.h" | 16 #include "base/stringprintf.h" |
18 #include "base/sys_info.h" | 17 #include "base/sys_info.h" |
19 #include "base/test/test_timeouts.h" | 18 #include "base/test/test_timeouts.h" |
20 #include "base/utf_string_conversions.h" | 19 #include "base/utf_string_conversions.h" |
21 #include "build/build_config.h" | 20 #include "build/build_config.h" |
22 #include "chrome/app/chrome_command_ids.h" | 21 #include "chrome/app/chrome_command_ids.h" |
23 #include "chrome/browser/ui/view_ids.h" | 22 #include "chrome/browser/ui/view_ids.h" |
(...skipping 1499 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1523 AutomationProxySnapshotTest() { | 1522 AutomationProxySnapshotTest() { |
1524 dom_automation_enabled_ = true; | 1523 dom_automation_enabled_ = true; |
1525 if (!snapshot_dir_.CreateUniqueTempDir()) | 1524 if (!snapshot_dir_.CreateUniqueTempDir()) |
1526 ADD_FAILURE() << "Unable to create temporary directory"; | 1525 ADD_FAILURE() << "Unable to create temporary directory"; |
1527 else | 1526 else |
1528 snapshot_path_ = snapshot_dir_.path().AppendASCII("snapshot.png"); | 1527 snapshot_path_ = snapshot_dir_.path().AppendASCII("snapshot.png"); |
1529 } | 1528 } |
1530 | 1529 |
1531 // Asserts that the given png file can be read and decoded into the given | 1530 // Asserts that the given png file can be read and decoded into the given |
1532 // bitmap. | 1531 // bitmap. |
1533 void AssertReadPNG(const FilePath& filename, std::string* data) { | 1532 void AssertReadPNG(const FilePath& filename, SkBitmap* bitmap) { |
| 1533 DCHECK(bitmap); |
1534 ASSERT_TRUE(file_util::PathExists(filename)); | 1534 ASSERT_TRUE(file_util::PathExists(filename)); |
1535 | 1535 |
1536 int64 size64; | 1536 int64 size64; |
1537 ASSERT_TRUE(file_util::GetFileSize(filename, &size64)); | 1537 ASSERT_TRUE(file_util::GetFileSize(filename, &size64)); |
1538 // Check that the file is not too big to read in (less than 100 MB). | 1538 // Check that the file is not too big to read in (less than 100 MB). |
1539 ASSERT_LT(size64, 1024 * 1024 * 100); | 1539 ASSERT_LT(size64, 1024 * 1024 * 100); |
1540 | 1540 |
1541 // Read and decode image. | 1541 // Read and decode image. |
1542 int size = static_cast<int>(size64); | 1542 int size = static_cast<int>(size64); |
1543 data->resize(size); | 1543 scoped_array<char> data(new char[size]); |
1544 int bytes_read = file_util::ReadFile(filename, &(*data)[0], size); | 1544 int bytes_read = file_util::ReadFile(filename, &data[0], size); |
1545 ASSERT_EQ(size, bytes_read); | 1545 ASSERT_EQ(size, bytes_read); |
| 1546 ASSERT_TRUE(gfx::PNGCodec::Decode( |
| 1547 reinterpret_cast<unsigned char*>(&data[0]), |
| 1548 bytes_read, |
| 1549 bitmap)); |
1546 } | 1550 } |
1547 | 1551 |
1548 // Returns the file path for the directory for these tests appended with | 1552 // Returns the file path for the directory for these tests appended with |
1549 // the given relative path. | 1553 // the given relative path. |
1550 FilePath GetTestFilePath(const std::string& relative_path) { | 1554 FilePath GetTestFilePath(const std::string& relative_path) { |
1551 FilePath filename(test_data_directory_); | 1555 FilePath filename(test_data_directory_); |
1552 return filename.AppendASCII("automation_proxy_snapshot") | 1556 return filename.AppendASCII("automation_proxy_snapshot") |
1553 .AppendASCII(relative_path); | 1557 .AppendASCII(relative_path); |
1554 } | 1558 } |
1555 | 1559 |
1556 GURL GetTestUrl(const std::string& relative_path, const std::string& query) { | 1560 GURL GetTestUrl(const std::string& relative_path, const std::string& query) { |
1557 FilePath file_path = GetTestFilePath(relative_path); | 1561 FilePath file_path = GetTestFilePath(relative_path); |
1558 return ui_test_utils::GetFileUrlWithQuery(file_path, query); | 1562 return ui_test_utils::GetFileUrlWithQuery(file_path, query); |
1559 } | 1563 } |
1560 | 1564 |
1561 FilePath snapshot_path_; | 1565 FilePath snapshot_path_; |
1562 ScopedTempDir snapshot_dir_; | 1566 ScopedTempDir snapshot_dir_; |
1563 }; | 1567 }; |
1564 | 1568 |
| 1569 // See http://crbug.com/63022. |
| 1570 #if defined(OS_LINUX) |
| 1571 #define MAYBE_ContentLargerThanView FAILS_ContentLargerThanView |
| 1572 #else |
| 1573 #define MAYBE_ContentLargerThanView ContentLargerThanView |
| 1574 #endif |
1565 // Tests that taking a snapshot when the content is larger than the view | 1575 // Tests that taking a snapshot when the content is larger than the view |
1566 // produces a snapshot equal to the content size. | 1576 // produces a snapshot equal to the content size. |
1567 TEST_F(AutomationProxySnapshotTest, ContentLargerThanView) { | 1577 TEST_F(AutomationProxySnapshotTest, MAYBE_ContentLargerThanView) { |
1568 const char kReferenceMd5[] = "3d594850fd25cb116338cb3610afe18e"; | |
1569 scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); | 1578 scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); |
1570 ASSERT_TRUE(browser.get()); | 1579 ASSERT_TRUE(browser.get()); |
| 1580 |
| 1581 // Resize the window to guarantee that the content is larger than the view. |
| 1582 scoped_refptr<WindowProxy> window(browser->GetWindow()); |
| 1583 ASSERT_TRUE(window.get()); |
| 1584 ASSERT_TRUE(window->SetBounds(gfx::Rect(300, 400))); |
| 1585 |
1571 scoped_refptr<TabProxy> tab(browser->GetTab(0)); | 1586 scoped_refptr<TabProxy> tab(browser->GetTab(0)); |
1572 ASSERT_TRUE(tab.get()); | 1587 ASSERT_TRUE(tab.get()); |
1573 | 1588 |
1574 ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, | 1589 ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, |
1575 tab->NavigateToURL(GetTestUrl("set_size.html", "2000,2500"))); | 1590 tab->NavigateToURL(GetTestUrl("set_size.html", "600,800"))); |
1576 | 1591 |
1577 ASSERT_TRUE(tab->CaptureEntirePageAsPNG(snapshot_path_)); | 1592 ASSERT_TRUE(tab->CaptureEntirePageAsPNG(snapshot_path_)); |
1578 | 1593 |
1579 std::string data; | 1594 SkBitmap bitmap; |
1580 ASSERT_NO_FATAL_FAILURE(AssertReadPNG(snapshot_path_, &data)); | 1595 ASSERT_NO_FATAL_FAILURE(AssertReadPNG(snapshot_path_, &bitmap)); |
1581 EXPECT_STREQ(kReferenceMd5, base::MD5String(data).c_str()); | 1596 ASSERT_EQ(600, bitmap.width()); |
1582 if (CommandLine::ForCurrentProcess()->HasSwitch("dump-test-image")) { | 1597 ASSERT_EQ(800, bitmap.height()); |
1583 FilePath path(FILE_PATH_LITERAL("snapshot.png")); | 1598 } |
1584 EXPECT_EQ(file_util::WriteFile(path, &data[0], data.length()), | 1599 |
1585 static_cast<int>(data.length())); | 1600 // Tests taking a large snapshot works. |
| 1601 #if defined(OS_LINUX) |
| 1602 // See http://code.google.com/p/chromium/issues/detail?id=89777 |
| 1603 #define MAYBE_LargeSnapshot DISABLED_LargeSnapshot |
| 1604 #else |
| 1605 #define MAYBE_LargeSnapshot LargeSnapshot |
| 1606 #endif |
| 1607 TEST_F(AutomationProxySnapshotTest, MAYBE_LargeSnapshot) { |
| 1608 scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); |
| 1609 ASSERT_TRUE(browser.get()); |
| 1610 |
| 1611 scoped_refptr<TabProxy> tab(browser->GetTab(0)); |
| 1612 ASSERT_TRUE(tab.get()); |
| 1613 |
| 1614 // 2000x2000 creates an approximately 15 MB bitmap. |
| 1615 // Don't increase this too much. At least my linux box has SHMMAX set at |
| 1616 // 32 MB. |
| 1617 ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, |
| 1618 tab->NavigateToURL(GetTestUrl("set_size.html", "2000,2000"))); |
| 1619 |
| 1620 ASSERT_TRUE(tab->CaptureEntirePageAsPNG(snapshot_path_)); |
| 1621 |
| 1622 SkBitmap bitmap; |
| 1623 ASSERT_NO_FATAL_FAILURE(AssertReadPNG(snapshot_path_, &bitmap)); |
| 1624 ASSERT_EQ(2000, bitmap.width()); |
| 1625 ASSERT_EQ(2000, bitmap.height()); |
| 1626 } |
| 1627 |
| 1628 #if defined(OS_MACOSX) |
| 1629 // Most pixels on mac are slightly off. |
| 1630 #define MAYBE_ContentsCorrect DISABLED_ContentsCorrect |
| 1631 #elif defined(OS_LINUX) |
| 1632 // See http://crbug.com/63022. |
| 1633 #define MAYBE_ContentsCorrect FAILS_ContentsCorrect |
| 1634 #else |
| 1635 #define MAYBE_ContentsCorrect ContentsCorrect |
| 1636 #endif |
| 1637 |
| 1638 // Tests that the snapshot contents are correct. |
| 1639 TEST_F(AutomationProxySnapshotTest, MAYBE_ContentsCorrect) { |
| 1640 scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); |
| 1641 ASSERT_TRUE(browser.get()); |
| 1642 |
| 1643 const gfx::Size img_size(400, 300); |
| 1644 scoped_refptr<WindowProxy> window(browser->GetWindow()); |
| 1645 ASSERT_TRUE(window.get()); |
| 1646 ASSERT_TRUE(window->SetBounds(gfx::Rect(img_size))); |
| 1647 |
| 1648 scoped_refptr<TabProxy> tab(browser->GetTab(0)); |
| 1649 ASSERT_TRUE(tab.get()); |
| 1650 |
| 1651 ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, |
| 1652 tab->NavigateToURL(GetTestUrl("just_image.html", ""))); |
| 1653 |
| 1654 ASSERT_TRUE(tab->CaptureEntirePageAsPNG(snapshot_path_)); |
| 1655 |
| 1656 SkBitmap snapshot_bmp; |
| 1657 ASSERT_NO_FATAL_FAILURE(AssertReadPNG(snapshot_path_, &snapshot_bmp)); |
| 1658 ASSERT_EQ(img_size.width(), snapshot_bmp.width()); |
| 1659 ASSERT_EQ(img_size.height(), snapshot_bmp.height()); |
| 1660 |
| 1661 SkBitmap reference_bmp; |
| 1662 ASSERT_NO_FATAL_FAILURE(AssertReadPNG(GetTestFilePath("image.png"), |
| 1663 &reference_bmp)); |
| 1664 ASSERT_EQ(img_size.width(), reference_bmp.width()); |
| 1665 ASSERT_EQ(img_size.height(), reference_bmp.height()); |
| 1666 |
| 1667 SkAutoLockPixels lock_snapshot(snapshot_bmp); |
| 1668 SkAutoLockPixels lock_reference(reference_bmp); |
| 1669 int diff_pixels_count = 0; |
| 1670 for (int x = 0; x < img_size.width(); ++x) { |
| 1671 for (int y = 0; y < img_size.height(); ++y) { |
| 1672 if (*snapshot_bmp.getAddr32(x, y) != *reference_bmp.getAddr32(x, y)) { |
| 1673 ++diff_pixels_count; |
| 1674 } |
| 1675 } |
1586 } | 1676 } |
| 1677 ASSERT_EQ(diff_pixels_count, 0); |
1587 } | 1678 } |
OLD | NEW |