Index: content/shell/renderer/layout_test/layout_test_render_frame_observer.cc |
diff --git a/content/shell/renderer/layout_test/layout_test_render_frame_observer.cc b/content/shell/renderer/layout_test/layout_test_render_frame_observer.cc |
index b41930234961db7ef407f3fedc91df530e4bc29f..4e80d54893ec987558892cb833f580014aacad5a 100644 |
--- a/content/shell/renderer/layout_test/layout_test_render_frame_observer.cc |
+++ b/content/shell/renderer/layout_test/layout_test_render_frame_observer.cc |
@@ -6,16 +6,43 @@ |
#include <string> |
+#include "base/callback.h" |
#include "content/public/common/associated_interface_registry.h" |
#include "content/public/renderer/render_frame.h" |
#include "content/shell/renderer/layout_test/blink_test_runner.h" |
#include "content/shell/renderer/layout_test/layout_test_render_thread_observer.h" |
#include "content/shell/test_runner/web_test_interfaces.h" |
#include "content/shell/test_runner/web_test_runner.h" |
+#include "third_party/WebKit/public/platform/WebCompositeAndReadbackAsyncCallback.h" |
+#include "third_party/WebKit/public/web/WebFrameWidget.h" |
#include "third_party/WebKit/public/web/WebLocalFrame.h" |
+#include "third_party/WebKit/public/web/WebView.h" |
namespace content { |
+namespace { |
+ |
+class CompositeAndReadbackCallback |
+ : public blink::WebCompositeAndReadbackAsyncCallback { |
+ public: |
+ explicit CompositeAndReadbackCallback(base::OnceClosure callback) |
+ : callback_(std::move(callback)) {} |
+ |
+ virtual ~CompositeAndReadbackCallback() = default; |
+ |
+ // WebCompositeAndReadbackAsyncCallback implementation. |
+ void DidCompositeAndReadback(const SkBitmap& bitmap) override { |
+ LOG(ERROR) << "DidCompositeAndReadback"; |
+ std::move(callback_).Run(); |
+ delete this; |
+ } |
+ |
+ private: |
+ base::OnceClosure callback_; |
+}; |
+ |
+} // namespace |
+ |
LayoutTestRenderFrameObserver::LayoutTestRenderFrameObserver( |
RenderFrame* render_frame) |
: RenderFrameObserver(render_frame), binding_(this) { |
@@ -52,6 +79,26 @@ void LayoutTestRenderFrameObserver::DumpFrameLayout( |
std::move(callback).Run(dump); |
} |
+void LayoutTestRenderFrameObserver::TriggerCompositing( |
+ TriggerCompositingCallback callback) { |
+ blink::WebWidget* widget = |
+ render_frame()->IsMainFrame() |
+ ? render_frame()->GetWebFrame()->View()->GetWidget() |
+ : render_frame()->GetWebFrame()->FrameWidget(); |
+ |
+ // DO NOT SUBMIT. |
+ LOG(ERROR) << "LayoutTestRenderFrameObserver::TriggerCompositing" |
+ << "; IsMainFrame = " << render_frame()->IsMainFrame() |
+ << "; widget = " << widget; |
+ |
+ if (widget) { |
+ widget->CompositeAndReadbackAsync( |
+ new CompositeAndReadbackCallback(std::move(callback))); |
+ } else { |
+ std::move(callback).Run(); |
+ } |
+} |
+ |
void LayoutTestRenderFrameObserver::ReplicateTestConfiguration( |
mojom::ShellTestConfigurationPtr config) { |
BlinkTestRunner::Get(render_frame()->GetRenderView()) |