| Index: cc/gl_renderer.cc | 
| diff --git a/cc/gl_renderer.cc b/cc/gl_renderer.cc | 
| index e5178ea84be199a4e5b3eddfd5fadc421e8ea770..bb4ec4d3ee99d55d33be2886d435eee999f986cd 100644 | 
| --- a/cc/gl_renderer.cc | 
| +++ b/cc/gl_renderer.cc | 
| @@ -9,8 +9,11 @@ | 
| #include "base/string_split.h" | 
| #include "base/string_util.h" | 
| #include "build/build_config.h" | 
| +#include "cc/compositor_frame.h" | 
| +#include "cc/compositor_frame_metadata.h" | 
| #include "cc/damage_tracker.h" | 
| #include "cc/geometry_binding.h" | 
| +#include "cc/gl_frame_data.h" | 
| #include "cc/layer_quad.h" | 
| #include "cc/math_util.h" | 
| #include "cc/priority_calculator.h" | 
| @@ -58,20 +61,21 @@ bool needsIOSurfaceReadbackWorkaround() | 
|  | 
| } // anonymous namespace | 
|  | 
| -scoped_ptr<GLRenderer> GLRenderer::create(RendererClient* client, ResourceProvider* resourceProvider) | 
| +scoped_ptr<GLRenderer> GLRenderer::create(RendererClient* client, OutputSurface* outputSurface, ResourceProvider* resourceProvider) | 
| { | 
| -    scoped_ptr<GLRenderer> renderer(make_scoped_ptr(new GLRenderer(client, resourceProvider))); | 
| +    scoped_ptr<GLRenderer> renderer(make_scoped_ptr(new GLRenderer(client, outputSurface, resourceProvider))); | 
| if (!renderer->initialize()) | 
| return scoped_ptr<GLRenderer>(); | 
|  | 
| return renderer.Pass(); | 
| } | 
|  | 
| -GLRenderer::GLRenderer(RendererClient* client, ResourceProvider* resourceProvider) | 
| +GLRenderer::GLRenderer(RendererClient* client, OutputSurface* outputSurface, ResourceProvider* resourceProvider) | 
| : DirectRenderer(client, resourceProvider) | 
| , m_offscreenFramebufferId(0) | 
| , m_sharedGeometryQuad(gfx::RectF(-0.5f, -0.5f, 1.0f, 1.0f)) | 
| -    , m_context(resourceProvider->graphicsContext3D()) | 
| +    , m_outputSurface(outputSurface) | 
| +    , m_context(outputSurface->Context3D()) | 
| , m_isViewportChanged(false) | 
| , m_isBackbufferDiscarded(false) | 
| , m_discardBackbufferWhenNotVisible(false) | 
| @@ -1167,6 +1171,14 @@ void GLRenderer::finishDrawingFrame(DrawingFrame& frame) | 
|  | 
| GLC(m_context, m_context->disable(GL_BLEND)); | 
| m_blendShadow = false; | 
| + | 
| +    if (settings().compositorFrameMessage) { | 
| +        CompositorFrame compositor_frame; | 
| +        compositor_frame.metadata = m_client->makeCompositorFrameMetadata(); | 
| +        compositor_frame.gl_frame_data.reset(new GLFrameData()); | 
| +        // FIXME: Fill in GLFrameData when we implement swapping with it. | 
| +        m_outputSurface->SendFrameToParentCompositor(compositor_frame); | 
| +    } | 
| } | 
|  | 
| void GLRenderer::finishDrawingQuadList() | 
|  |