Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(375)

Unified Diff: content/browser/renderer_host/render_widget_host_view_browsertest.cc

Issue 12277023: Define frame subscription interface and implementation on Mac (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: git fetch Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698