| Index: webrtc/modules/desktop_capture/desktop_and_cursor_composer.cc
 | 
| diff --git a/webrtc/modules/desktop_capture/desktop_and_cursor_composer.cc b/webrtc/modules/desktop_capture/desktop_and_cursor_composer.cc
 | 
| index 4c6e27e561eaa19794df980f63bf9028924b697f..a4deda6ae95b915039735fafa7dfe1d454ab3923 100644
 | 
| --- a/webrtc/modules/desktop_capture/desktop_and_cursor_composer.cc
 | 
| +++ b/webrtc/modules/desktop_capture/desktop_and_cursor_composer.cc
 | 
| @@ -57,7 +57,7 @@ void AlphaBlend(uint8_t* dest, int dest_stride,
 | 
|  class DesktopFrameWithCursor : public DesktopFrame {
 | 
|   public:
 | 
|    // Takes ownership of |frame|.
 | 
| -  DesktopFrameWithCursor(DesktopFrame* frame,
 | 
| +  DesktopFrameWithCursor(std::unique_ptr<DesktopFrame> frame,
 | 
|                           const MouseCursor& cursor,
 | 
|                           const DesktopVector& position);
 | 
|    virtual ~DesktopFrameWithCursor();
 | 
| @@ -71,15 +71,18 @@ class DesktopFrameWithCursor : public DesktopFrame {
 | 
|    RTC_DISALLOW_COPY_AND_ASSIGN(DesktopFrameWithCursor);
 | 
|  };
 | 
|  
 | 
| -DesktopFrameWithCursor::DesktopFrameWithCursor(DesktopFrame* frame,
 | 
| -                                               const MouseCursor& cursor,
 | 
| -                                               const DesktopVector& position)
 | 
| -    : DesktopFrame(frame->size(), frame->stride(),
 | 
| -                   frame->data(), frame->shared_memory()),
 | 
| -      original_frame_(frame) {
 | 
| +DesktopFrameWithCursor::DesktopFrameWithCursor(
 | 
| +    std::unique_ptr<DesktopFrame> frame,
 | 
| +    const MouseCursor& cursor,
 | 
| +    const DesktopVector& position)
 | 
| +    : DesktopFrame(frame->size(),
 | 
| +                   frame->stride(),
 | 
| +                   frame->data(),
 | 
| +                   frame->shared_memory()) {
 | 
|    set_dpi(frame->dpi());
 | 
|    set_capture_time_ms(frame->capture_time_ms());
 | 
|    mutable_updated_region()->Swap(frame->mutable_updated_region());
 | 
| +  original_frame_ = std::move(frame);
 | 
|  
 | 
|    DesktopVector image_pos = position.subtract(cursor.hotspot());
 | 
|    DesktopRect target_rect = DesktopRect::MakeSize(cursor.image()->size());
 | 
| @@ -152,14 +155,15 @@ void DesktopAndCursorComposer::SetExcludedWindow(WindowId window) {
 | 
|    desktop_capturer_->SetExcludedWindow(window);
 | 
|  }
 | 
|  
 | 
| -void DesktopAndCursorComposer::OnCaptureCompleted(DesktopFrame* frame) {
 | 
| -  if (frame && cursor_.get() && cursor_state_ == MouseCursorMonitor::INSIDE) {
 | 
| -    DesktopFrameWithCursor* frame_with_cursor =
 | 
| -        new DesktopFrameWithCursor(frame, *cursor_, cursor_position_);
 | 
| -    frame = frame_with_cursor;
 | 
| +void DesktopAndCursorComposer::OnCaptureResult(
 | 
| +    DesktopCapturer::Result result,
 | 
| +    std::unique_ptr<DesktopFrame> frame) {
 | 
| +  if (frame && cursor_ && cursor_state_ == MouseCursorMonitor::INSIDE) {
 | 
| +    frame = std::unique_ptr<DesktopFrameWithCursor>(new DesktopFrameWithCursor(
 | 
| +        std::move(frame), *cursor_, cursor_position_));
 | 
|    }
 | 
|  
 | 
| -  callback_->OnCaptureCompleted(frame);
 | 
| +  callback_->OnCaptureResult(result, std::move(frame));
 | 
|  }
 | 
|  
 | 
|  void DesktopAndCursorComposer::OnMouseCursor(MouseCursor* cursor) {
 | 
| 
 |