| Index: chrome/test/automation/automation_proxy_uitest.cc
|
| ===================================================================
|
| --- chrome/test/automation/automation_proxy_uitest.cc (revision 107646)
|
| +++ chrome/test/automation/automation_proxy_uitest.cc (working copy)
|
| @@ -10,7 +10,6 @@
|
| #include "base/file_util.h"
|
| #include "base/i18n/rtl.h"
|
| #include "base/json/json_value_serializer.h"
|
| -#include "base/md5.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "base/scoped_temp_dir.h"
|
| #include "base/string_util.h"
|
| @@ -1530,7 +1529,8 @@
|
|
|
| // Asserts that the given png file can be read and decoded into the given
|
| // bitmap.
|
| - void AssertReadPNG(const FilePath& filename, std::string* data) {
|
| + void AssertReadPNG(const FilePath& filename, SkBitmap* bitmap) {
|
| + DCHECK(bitmap);
|
| ASSERT_TRUE(file_util::PathExists(filename));
|
|
|
| int64 size64;
|
| @@ -1540,9 +1540,13 @@
|
|
|
| // Read and decode image.
|
| int size = static_cast<int>(size64);
|
| - data->resize(size);
|
| - int bytes_read = file_util::ReadFile(filename, &(*data)[0], size);
|
| + scoped_array<char> data(new char[size]);
|
| + int bytes_read = file_util::ReadFile(filename, &data[0], size);
|
| ASSERT_EQ(size, bytes_read);
|
| + ASSERT_TRUE(gfx::PNGCodec::Decode(
|
| + reinterpret_cast<unsigned char*>(&data[0]),
|
| + bytes_read,
|
| + bitmap));
|
| }
|
|
|
| // Returns the file path for the directory for these tests appended with
|
| @@ -1562,26 +1566,113 @@
|
| ScopedTempDir snapshot_dir_;
|
| };
|
|
|
| +// See http://crbug.com/63022.
|
| +#if defined(OS_LINUX)
|
| +#define MAYBE_ContentLargerThanView FAILS_ContentLargerThanView
|
| +#else
|
| +#define MAYBE_ContentLargerThanView ContentLargerThanView
|
| +#endif
|
| // Tests that taking a snapshot when the content is larger than the view
|
| // produces a snapshot equal to the content size.
|
| -TEST_F(AutomationProxySnapshotTest, ContentLargerThanView) {
|
| - const char kReferenceMd5[] = "3d594850fd25cb116338cb3610afe18e";
|
| +TEST_F(AutomationProxySnapshotTest, MAYBE_ContentLargerThanView) {
|
| scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0));
|
| ASSERT_TRUE(browser.get());
|
| +
|
| + // Resize the window to guarantee that the content is larger than the view.
|
| + scoped_refptr<WindowProxy> window(browser->GetWindow());
|
| + ASSERT_TRUE(window.get());
|
| + ASSERT_TRUE(window->SetBounds(gfx::Rect(300, 400)));
|
| +
|
| scoped_refptr<TabProxy> tab(browser->GetTab(0));
|
| ASSERT_TRUE(tab.get());
|
|
|
| ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS,
|
| - tab->NavigateToURL(GetTestUrl("set_size.html", "2000,2500")));
|
| + tab->NavigateToURL(GetTestUrl("set_size.html", "600,800")));
|
|
|
| ASSERT_TRUE(tab->CaptureEntirePageAsPNG(snapshot_path_));
|
|
|
| - std::string data;
|
| - ASSERT_NO_FATAL_FAILURE(AssertReadPNG(snapshot_path_, &data));
|
| - EXPECT_STREQ(kReferenceMd5, base::MD5String(data).c_str());
|
| - if (CommandLine::ForCurrentProcess()->HasSwitch("dump-test-image")) {
|
| - FilePath path(FILE_PATH_LITERAL("snapshot.png"));
|
| - EXPECT_EQ(file_util::WriteFile(path, &data[0], data.length()),
|
| - static_cast<int>(data.length()));
|
| + SkBitmap bitmap;
|
| + ASSERT_NO_FATAL_FAILURE(AssertReadPNG(snapshot_path_, &bitmap));
|
| + ASSERT_EQ(600, bitmap.width());
|
| + ASSERT_EQ(800, bitmap.height());
|
| +}
|
| +
|
| +// Tests taking a large snapshot works.
|
| +#if defined(OS_LINUX)
|
| +// See http://code.google.com/p/chromium/issues/detail?id=89777
|
| +#define MAYBE_LargeSnapshot DISABLED_LargeSnapshot
|
| +#else
|
| +#define MAYBE_LargeSnapshot LargeSnapshot
|
| +#endif
|
| +TEST_F(AutomationProxySnapshotTest, MAYBE_LargeSnapshot) {
|
| + scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0));
|
| + ASSERT_TRUE(browser.get());
|
| +
|
| + scoped_refptr<TabProxy> tab(browser->GetTab(0));
|
| + ASSERT_TRUE(tab.get());
|
| +
|
| + // 2000x2000 creates an approximately 15 MB bitmap.
|
| + // Don't increase this too much. At least my linux box has SHMMAX set at
|
| + // 32 MB.
|
| + ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS,
|
| + tab->NavigateToURL(GetTestUrl("set_size.html", "2000,2000")));
|
| +
|
| + ASSERT_TRUE(tab->CaptureEntirePageAsPNG(snapshot_path_));
|
| +
|
| + SkBitmap bitmap;
|
| + ASSERT_NO_FATAL_FAILURE(AssertReadPNG(snapshot_path_, &bitmap));
|
| + ASSERT_EQ(2000, bitmap.width());
|
| + ASSERT_EQ(2000, bitmap.height());
|
| +}
|
| +
|
| +#if defined(OS_MACOSX)
|
| +// Most pixels on mac are slightly off.
|
| +#define MAYBE_ContentsCorrect DISABLED_ContentsCorrect
|
| +#elif defined(OS_LINUX)
|
| +// See http://crbug.com/63022.
|
| +#define MAYBE_ContentsCorrect FAILS_ContentsCorrect
|
| +#else
|
| +#define MAYBE_ContentsCorrect ContentsCorrect
|
| +#endif
|
| +
|
| +// Tests that the snapshot contents are correct.
|
| +TEST_F(AutomationProxySnapshotTest, MAYBE_ContentsCorrect) {
|
| + scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0));
|
| + ASSERT_TRUE(browser.get());
|
| +
|
| + const gfx::Size img_size(400, 300);
|
| + scoped_refptr<WindowProxy> window(browser->GetWindow());
|
| + ASSERT_TRUE(window.get());
|
| + ASSERT_TRUE(window->SetBounds(gfx::Rect(img_size)));
|
| +
|
| + scoped_refptr<TabProxy> tab(browser->GetTab(0));
|
| + ASSERT_TRUE(tab.get());
|
| +
|
| + ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS,
|
| + tab->NavigateToURL(GetTestUrl("just_image.html", "")));
|
| +
|
| + ASSERT_TRUE(tab->CaptureEntirePageAsPNG(snapshot_path_));
|
| +
|
| + SkBitmap snapshot_bmp;
|
| + ASSERT_NO_FATAL_FAILURE(AssertReadPNG(snapshot_path_, &snapshot_bmp));
|
| + ASSERT_EQ(img_size.width(), snapshot_bmp.width());
|
| + ASSERT_EQ(img_size.height(), snapshot_bmp.height());
|
| +
|
| + SkBitmap reference_bmp;
|
| + ASSERT_NO_FATAL_FAILURE(AssertReadPNG(GetTestFilePath("image.png"),
|
| + &reference_bmp));
|
| + ASSERT_EQ(img_size.width(), reference_bmp.width());
|
| + ASSERT_EQ(img_size.height(), reference_bmp.height());
|
| +
|
| + SkAutoLockPixels lock_snapshot(snapshot_bmp);
|
| + SkAutoLockPixels lock_reference(reference_bmp);
|
| + int diff_pixels_count = 0;
|
| + for (int x = 0; x < img_size.width(); ++x) {
|
| + for (int y = 0; y < img_size.height(); ++y) {
|
| + if (*snapshot_bmp.getAddr32(x, y) != *reference_bmp.getAddr32(x, y)) {
|
| + ++diff_pixels_count;
|
| + }
|
| + }
|
| }
|
| + ASSERT_EQ(diff_pixels_count, 0);
|
| }
|
|
|