1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright (c) 2013 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "content/renderer/scoped_clipboard_writer_glue.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace content {
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochScopedClipboardWriterGlue::ScopedClipboardWriterGlue(ClipboardClient* client)
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    : ui::ScopedClipboardWriter(ui::CLIPBOARD_TYPE_COPY_PASTE),
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      context_(client->CreateWriteContext()) {
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK(context_);
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ScopedClipboardWriterGlue::~ScopedClipboardWriterGlue() {
17b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  if (!objects_.empty() && context_) {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    context_->Flush(objects_);
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // TODO(dcheng): Temporary hack while the clipboard IPCs are cleaned up.
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // This prevents the base class destructor from also trying to (probably
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // unsuccessfully) flush things to the clipboard.
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    objects_.clear();
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ScopedClipboardWriterGlue::WriteBitmapFromPixels(const void* pixels,
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                      const gfx::Size& size) {
28b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  if (context_) {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    context_->WriteBitmapFromPixels(&objects_, pixels, size);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    NOTREACHED();
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}  // namespace content
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
37