Home | History | Annotate | Download | only in thumbnails
      1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/thumbnails/render_widget_snapshot_taker.h"
      6 
      7 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
      8 
      9 class RenderWidgetSnapshotTakerTest : public ChromeRenderViewHostTestHarness {
     10  public:
     11   RenderWidgetSnapshotTakerTest() : snapshot_ready_called_(false) {}
     12 
     13   void SnapshotReady(const SkBitmap& bitmap) {
     14     snapshot_ready_called_ = true;
     15   }
     16 
     17   bool snapshot_ready_called() const {
     18     return snapshot_ready_called_;
     19   }
     20 
     21  private:
     22   bool snapshot_ready_called_;
     23 };
     24 
     25 #if defined(USE_X11)
     26 // RenderWidgetHost::AskForSnapshot is not implemented for X11
     27 // (http://crbug.com/89777).
     28 #define MAYBE_WidgetDidReceivePaintAtSizeAck \
     29     DISABLED_WidgetDidReceivePaintAtSizeAck
     30 #else
     31 #define MAYBE_WidgetDidReceivePaintAtSizeAck WidgetDidReceivePaintAtSizeAck
     32 #endif
     33 
     34 // Just checks the callback runs in WidgetDidReceivePaintAtSizeAck.
     35 TEST_F(RenderWidgetSnapshotTakerTest, MAYBE_WidgetDidReceivePaintAtSizeAck) {
     36   RenderWidgetSnapshotTaker snapshot_taker;
     37   const gfx::Size size(100, 100);
     38   snapshot_taker.AskForSnapshot(
     39       rvh(),
     40       base::Bind(&RenderWidgetSnapshotTakerTest::SnapshotReady,
     41                  base::Unretained(this)),
     42       size,
     43       size);
     44   EXPECT_EQ(1U, snapshot_taker.callback_map_.size());
     45   const int sequence_num = 1;
     46   snapshot_taker.WidgetDidReceivePaintAtSizeAck(
     47       content::RenderViewHostTestHarness::rvh(),
     48       sequence_num,
     49       size);
     50   EXPECT_TRUE(snapshot_taker.callback_map_.empty());
     51   EXPECT_TRUE(snapshot_ready_called());
     52 }
     53 
     54 #if defined(USE_X11)
     55 // RenderWidgetHost::AskForSnapshot is not implemented for X11
     56 // (http://crbug.com/89777).
     57 #define MAYBE_WidgetDidReceivePaintAtSizeAckFail \
     58     DISABLED_WidgetDidReceivePaintAtSizeAckFail
     59 #else
     60 #define MAYBE_WidgetDidReceivePaintAtSizeAckFail \
     61     WidgetDidReceivePaintAtSizeAckFail
     62 #endif
     63 
     64 // Checks the case where RenderWidgetSnapshotTaker receives an ack with a wrong
     65 // size. The should result in a failure and the callback should not be called.
     66 TEST_F(RenderWidgetSnapshotTakerTest,
     67     MAYBE_WidgetDidReceivePaintAtSizeAckFail) {
     68   RenderWidgetSnapshotTaker snapshot_taker;
     69   const gfx::Size size(100, 100);
     70   snapshot_taker.AskForSnapshot(
     71       rvh(),
     72       base::Bind(&RenderWidgetSnapshotTakerTest::SnapshotReady,
     73                  base::Unretained(this)),
     74       size,
     75       size);
     76   EXPECT_EQ(1U, snapshot_taker.callback_map_.size());
     77   const int sequence_num = 1;
     78   const gfx::Size size2(200, 200);
     79   snapshot_taker.WidgetDidReceivePaintAtSizeAck(
     80       content::RenderViewHostTestHarness::rvh(),
     81       sequence_num,
     82       size2);
     83   EXPECT_FALSE(snapshot_taker.callback_map_.empty());
     84   EXPECT_FALSE(snapshot_ready_called());
     85 }
     86