| // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/thumbnails/render_widget_snapshot_taker.h" |
| |
| #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
| |
| class RenderWidgetSnapshotTakerTest : public ChromeRenderViewHostTestHarness { |
| public: |
| RenderWidgetSnapshotTakerTest() : snapshot_ready_called_(false) {} |
| |
| void SnapshotReady(const SkBitmap& bitmap) { |
| snapshot_ready_called_ = true; |
| } |
| |
| bool snapshot_ready_called() const { |
| return snapshot_ready_called_; |
| } |
| |
| private: |
| bool snapshot_ready_called_; |
| }; |
| |
| #if defined(USE_X11) |
| // RenderWidgetHost::AskForSnapshot is not implemented for X11 |
| // (http://crbug.com/89777). |
| #define MAYBE_WidgetDidReceivePaintAtSizeAck \ |
| DISABLED_WidgetDidReceivePaintAtSizeAck |
| #else |
| #define MAYBE_WidgetDidReceivePaintAtSizeAck WidgetDidReceivePaintAtSizeAck |
| #endif |
| |
| // Just checks the callback runs in WidgetDidReceivePaintAtSizeAck. |
| TEST_F(RenderWidgetSnapshotTakerTest, MAYBE_WidgetDidReceivePaintAtSizeAck) { |
| RenderWidgetSnapshotTaker snapshot_taker; |
| const gfx::Size size(100, 100); |
| snapshot_taker.AskForSnapshot( |
| rvh(), |
| base::Bind(&RenderWidgetSnapshotTakerTest::SnapshotReady, |
| base::Unretained(this)), |
| size, |
| size); |
| EXPECT_EQ(1U, snapshot_taker.callback_map_.size()); |
| const int sequence_num = 1; |
| snapshot_taker.WidgetDidReceivePaintAtSizeAck( |
| content::RenderViewHostTestHarness::rvh(), |
| sequence_num, |
| size); |
| EXPECT_TRUE(snapshot_taker.callback_map_.empty()); |
| EXPECT_TRUE(snapshot_ready_called()); |
| } |
| |
| #if defined(USE_X11) |
| // RenderWidgetHost::AskForSnapshot is not implemented for X11 |
| // (http://crbug.com/89777). |
| #define MAYBE_WidgetDidReceivePaintAtSizeAckFail \ |
| DISABLED_WidgetDidReceivePaintAtSizeAckFail |
| #else |
| #define MAYBE_WidgetDidReceivePaintAtSizeAckFail \ |
| WidgetDidReceivePaintAtSizeAckFail |
| #endif |
| |
| // Checks the case where RenderWidgetSnapshotTaker receives an ack with a wrong |
| // size. The should result in a failure and the callback should not be called. |
| TEST_F(RenderWidgetSnapshotTakerTest, |
| MAYBE_WidgetDidReceivePaintAtSizeAckFail) { |
| RenderWidgetSnapshotTaker snapshot_taker; |
| const gfx::Size size(100, 100); |
| snapshot_taker.AskForSnapshot( |
| rvh(), |
| base::Bind(&RenderWidgetSnapshotTakerTest::SnapshotReady, |
| base::Unretained(this)), |
| size, |
| size); |
| EXPECT_EQ(1U, snapshot_taker.callback_map_.size()); |
| const int sequence_num = 1; |
| // Ensure this is bigger than the max scale factor X the size. |
| const gfx::Size size2(300, 300); |
| snapshot_taker.WidgetDidReceivePaintAtSizeAck( |
| content::RenderViewHostTestHarness::rvh(), |
| sequence_num, |
| size2); |
| EXPECT_FALSE(snapshot_taker.callback_map_.empty()); |
| EXPECT_FALSE(snapshot_ready_called()); |
| } |