Index: webkit/plugins/ppapi/ppb_flash_clipboard_impl.cc |
diff --git a/webkit/plugins/ppapi/ppb_flash_clipboard_impl.cc b/webkit/plugins/ppapi/ppb_flash_clipboard_impl.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..630a897a0db581bb7e275fcce6ee5e9a20e62b12 |
--- /dev/null |
+++ b/webkit/plugins/ppapi/ppb_flash_clipboard_impl.cc |
@@ -0,0 +1,102 @@ |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "webkit/plugins/ppapi/ppb_flash_clipboard_impl.h" |
+ |
+#include <algorithm> |
+#include <string> |
+ |
+#include "base/logging.h" |
+#include "base/ref_counted.h" |
+#include "ppapi/c/pp_errors.h" |
+#include "ppapi/c/private/ppb_flash_clipboard.h" |
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebClipboard.h" |
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebCString.h" |
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebKit.h" |
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebKitClient.h" |
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h" |
+#include "webkit/plugins/ppapi/ppapi_plugin_instance.h" |
+#include "webkit/plugins/ppapi/resource_tracker.h" |
+#include "webkit/plugins/ppapi/var.h" |
+ |
+namespace webkit { |
+namespace ppapi { |
+ |
+namespace { |
+ |
+const size_t kMaxClipboardWriteSize = 1000000; |
+ |
+WebKit::WebClipboard::Buffer ConvertClipboardType( |
+ PP_Flash_Clipboard_Type type) { |
+ switch (type) { |
+ case PP_FLASH_CLIPBOARD_TYPE_STANDARD: |
+ return WebKit::WebClipboard::BufferStandard; |
+ case PP_FLASH_CLIPBOARD_TYPE_SELECTION: |
+ return WebKit::WebClipboard::BufferSelection; |
+ case PP_FLASH_CLIPBOARD_TYPE_DRAG: |
+ return WebKit::WebClipboard::BufferDrag; |
+ default: |
+ NOTREACHED(); |
+ return WebKit::WebClipboard::BufferStandard; |
+ } |
+} |
+ |
+PP_Var ReadPlainText(PP_Instance instance_id, |
+ PP_Flash_Clipboard_Type clipboard_type) { |
+ PluginInstance* instance = ResourceTracker::Get()->GetInstance(instance_id); |
+ if (!instance) |
+ return PP_MakeNull(); |
+ |
+ WebKit::WebClipboard* web_clipboard = WebKit::webKitClient()->clipboard(); |
+ if (!web_clipboard) { |
+ NOTREACHED(); |
+ return PP_MakeNull(); |
+ } |
+ |
+ WebKit::WebCString s = |
+ web_clipboard->readPlainText(ConvertClipboardType(clipboard_type)).utf8(); |
+ return StringVar::StringToPPVar(instance->module(), s); |
+} |
+ |
+int32_t WritePlainText(PP_Instance instance_id, |
+ PP_Flash_Clipboard_Type clipboard_type, |
+ PP_Var text) { |
+ scoped_refptr<StringVar> text_string(StringVar::FromPPVar(text)); |
+ if (!text_string) |
+ return PP_ERROR_BADARGUMENT; |
+ |
+ if (text_string->value().length() > kMaxClipboardWriteSize) |
+ return PP_ERROR_NOSPACE; |
+ |
+ if (clipboard_type != PP_FLASH_CLIPBOARD_TYPE_STANDARD) { |
+ NOTIMPLEMENTED(); |
+ return PP_ERROR_FAILED; |
+ } |
+ |
+ WebKit::WebClipboard* web_clipboard = WebKit::webKitClient()->clipboard(); |
+ if (!web_clipboard) { |
+ NOTREACHED(); |
+ return PP_ERROR_FAILED; |
+ } |
+ |
+ web_clipboard->writePlainText( |
+ WebKit::WebCString(text_string->value()).utf16()); |
+ return PP_OK; |
+} |
+ |
+const PPB_Flash_Clipboard ppb_flash_clipboard = { |
+ &ReadPlainText, |
+ &WritePlainText, |
+}; |
+ |
+} // namespace |
+ |
+// static |
+const PPB_Flash_Clipboard* |
+ PPB_Flash_Clipboard_Impl::GetInterface() { |
+ return &ppb_flash_clipboard; |
+} |
+ |
+} // namespace ppapi |
+} // namespace webkit |