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 "base/path_service.h" 6 #include "base/run_loop.h" 7 #include "content/public/browser/render_view_host.h" 8 #include "content/public/browser/web_contents.h" 9 #include "content/public/common/content_paths.h" 10 #include "content/shell/shell.h" 11 #include "content/test/content_browser_test.h" 12 #include "content/test/content_browser_test_utils.h" 13 #include "net/base/net_util.h" 14 #include "third_party/skia/include/core/SkBitmap.h" 15 16 namespace content { 17 18 class RenderWidgetHostBrowserTest : public ContentBrowserTest { 19 public: 20 RenderWidgetHostBrowserTest() {} 21 22 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 23 ASSERT_TRUE(PathService::Get(DIR_TEST_DATA, &test_dir_)); 24 } 25 26 void GetSnapshotFromRendererCallback(const base::Closure& quit_closure, 27 bool* snapshot_valid, 28 bool success, 29 const SkBitmap& bitmap) { 30 quit_closure.Run(); 31 EXPECT_EQ(success, true); 32 33 const int row_bytes = bitmap.rowBytesAsPixels(); 34 SkColor* pixels = reinterpret_cast<SkColor*>(bitmap.getPixels()); 35 for (int i = 0; i < bitmap.width(); ++i) { 36 for (int j = 0; j < bitmap.height(); ++j) { 37 if (pixels[j * row_bytes + i] != SK_ColorRED) { 38 return; 39 } 40 } 41 } 42 *snapshot_valid = true; 43 } 44 45 protected: 46 base::FilePath test_dir_; 47 }; 48 49 IN_PROC_BROWSER_TEST_F(RenderWidgetHostBrowserTest, 50 GetSnapshotFromRendererTest) { 51 base::RunLoop run_loop; 52 53 NavigateToURL(shell(), GURL(net::FilePathToFileURL( 54 test_dir_.AppendASCII("rwh_simple.html")))); 55 56 bool snapshot_valid = false; 57 RenderViewHost* const rwh = shell()->web_contents()->GetRenderViewHost(); 58 rwh->GetSnapshotFromRenderer(gfx::Rect(), base::Bind( 59 &RenderWidgetHostBrowserTest::GetSnapshotFromRendererCallback, 60 base::Unretained(this), 61 run_loop.QuitClosure(), 62 &snapshot_valid)); 63 run_loop.Run(); 64 65 EXPECT_EQ(snapshot_valid, true); 66 } 67 68 } // namespace content 69