Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / cc / surfaces / surface_factory.cc
index 69ee02a..ab7186a 100644 (file)
@@ -5,6 +5,7 @@
 #include "cc/surfaces/surface_factory.h"
 
 #include "cc/output/compositor_frame.h"
+#include "cc/output/copy_output_request.h"
 #include "cc/surfaces/surface.h"
 #include "cc/surfaces/surface_manager.h"
 #include "ui/gfx/geometry/size.h"
@@ -16,7 +17,6 @@ SurfaceFactory::SurfaceFactory(SurfaceManager* manager,
 }
 
 SurfaceFactory::~SurfaceFactory() {
-  DCHECK_EQ(0u, surface_map_.size());
 }
 
 void SurfaceFactory::Create(SurfaceId surface_id, const gfx::Size& size) {
@@ -35,11 +35,26 @@ void SurfaceFactory::Destroy(SurfaceId surface_id) {
 }
 
 void SurfaceFactory::SubmitFrame(SurfaceId surface_id,
-                                 scoped_ptr<CompositorFrame> frame) {
+                                 scoped_ptr<CompositorFrame> frame,
+                                 const base::Closure& callback) {
   OwningSurfaceMap::iterator it = surface_map_.find(surface_id);
   DCHECK(it != surface_map_.end());
   DCHECK(it->second->factory() == this);
-  it->second->QueueFrame(frame.Pass());
+  it->second->QueueFrame(frame.Pass(), callback);
+  manager_->SurfaceModified(surface_id);
+}
+
+void SurfaceFactory::RequestCopyOfSurface(
+    SurfaceId surface_id,
+    scoped_ptr<CopyOutputRequest> copy_request) {
+  OwningSurfaceMap::iterator it = surface_map_.find(surface_id);
+  if (it == surface_map_.end()) {
+    copy_request->SendEmptyResult();
+    return;
+  }
+  DCHECK(it->second->factory() == this);
+  it->second->RequestCopyOfOutput(copy_request.Pass());
+  manager_->SurfaceModified(surface_id);
 }
 
 void SurfaceFactory::ReceiveFromChild(