| Index: content/browser/renderer_host/render_widget_host_view_browsertest.cc
|
| diff --git a/content/browser/renderer_host/render_widget_host_view_browsertest.cc b/content/browser/renderer_host/render_widget_host_view_browsertest.cc
|
| index ae569a80cfbf74f8c2f2b33f1062bc4e5c34e81f..56415dcd861ef199b8750509e4d927882081dac5 100644
|
| --- a/content/browser/renderer_host/render_widget_host_view_browsertest.cc
|
| +++ b/content/browser/renderer_host/render_widget_host_view_browsertest.cc
|
| @@ -5,6 +5,7 @@
|
| #include "base/command_line.h"
|
| #include "base/path_service.h"
|
| #include "base/run_loop.h"
|
| +#include "content/port/browser/render_widget_host_view_frame_subscriber.h"
|
| #include "content/port/browser/render_widget_host_view_port.h"
|
| #include "content/public/browser/render_view_host.h"
|
| #include "content/public/browser/web_contents.h"
|
| @@ -12,6 +13,7 @@
|
| #include "content/shell/shell.h"
|
| #include "content/test/content_browser_test.h"
|
| #include "content/test/content_browser_test_utils.h"
|
| +#include "media/base/video_frame.h"
|
| #include "net/base/net_util.h"
|
| #include "skia/ext/platform_canvas.h"
|
| #include "ui/compositor/compositor_setup.h"
|
| @@ -75,6 +77,25 @@ class RenderWidgetHostViewBrowserTest : public ContentBrowserTest {
|
| gfx::Size size_;
|
| };
|
|
|
| +class FakeFrameSubscriber : public RenderWidgetHostViewFrameSubscriber {
|
| + public:
|
| + FakeFrameSubscriber(
|
| + RenderWidgetHostViewFrameSubscriber::DeliverFrameCallback callback)
|
| + : callback_(callback) {
|
| + }
|
| +
|
| + virtual bool ShouldCaptureFrame(
|
| + scoped_refptr<media::VideoFrame>* storage,
|
| + DeliverFrameCallback* callback) OVERRIDE {
|
| + *storage = media::VideoFrame::CreateBlackFrame(gfx::Size(100, 100));
|
| + *callback = callback_;
|
| + return true;
|
| + }
|
| +
|
| + private:
|
| + DeliverFrameCallback callback_;
|
| +};
|
| +
|
| #if defined(OS_MACOSX)
|
| // Tests that the callback passed to CopyFromBackingStore is always called, even
|
| // when the RenderWidgetHost is deleting in the middle of an async copy.
|
| @@ -125,6 +146,43 @@ IN_PROC_BROWSER_TEST_F(RenderWidgetHostViewBrowserTest,
|
|
|
| ASSERT_TRUE(finish_called_);
|
| }
|
| +
|
| +static void DeliverFrameFunc(base::Closure quit_closure,
|
| + bool* frame_captured_out,
|
| + base::Time timestamp,
|
| + bool frame_captured) {
|
| + *frame_captured_out = frame_captured;
|
| + quit_closure.Run();
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(RenderWidgetHostViewBrowserTest,
|
| + MacFrameSubscriberTest) {
|
| + if (!IOSurfaceSupport::Initialize())
|
| + return;
|
| +
|
| + SetupCompositingSurface();
|
| +
|
| + base::RunLoop run_loop;
|
| + RenderWidgetHostViewPort* view = RenderWidgetHostViewPort::FromRWHV(
|
| + shell()->web_contents()->GetRenderViewHost()->GetView());
|
| + ASSERT_TRUE(view);
|
| +
|
| + EXPECT_TRUE(view->CanSubscribeFrame());
|
| +
|
| + bool frame_captured = false;
|
| + view->BeginFrameSubscription(
|
| + new FakeFrameSubscriber(base::Bind(&DeliverFrameFunc,
|
| + run_loop.QuitClosure(),
|
| + &frame_captured)));
|
| +
|
| + // Do a resize of the window to trigger a repaint and present.
|
| + SetWindowBounds(shell()->window(), gfx::Rect(size_));
|
| + run_loop.Run();
|
| + view->EndFrameSubscription();
|
| +
|
| + EXPECT_TRUE(frame_captured);
|
| +}
|
| +
|
| #endif
|
|
|
| } // namespace content
|
|
|