diff options
author | viettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-04 01:43:39 +0000 |
---|---|---|
committer | viettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-04 01:43:39 +0000 |
commit | c5f29a5ef0ab3cf90faf97f7ae75cf14969fa2fa (patch) | |
tree | 641b0271adbe1ee51b398c38b54a6f66620be130 /webkit/plugins/ppapi/ppb_flash_clipboard_impl.cc | |
parent | 24fc860b86a539f884b65ebe7e7be5133d23ce20 (diff) | |
download | chromium_src-c5f29a5ef0ab3cf90faf97f7ae75cf14969fa2fa.zip chromium_src-c5f29a5ef0ab3cf90faf97f7ae75cf14969fa2fa.tar.gz chromium_src-c5f29a5ef0ab3cf90faf97f7ae75cf14969fa2fa.tar.bz2 |
Pepper/Flapper: Add very basic clipboard support.
Note that this is a trusted private interface; we rely on Flash to do a user
action check.
BUG=none
TEST=Trung can cut-and-paste in his Flapper
Review URL: http://codereview.chromium.org/6611034
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@76857 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/plugins/ppapi/ppb_flash_clipboard_impl.cc')
-rw-r--r-- | webkit/plugins/ppapi/ppb_flash_clipboard_impl.cc | 102 |
1 files changed, 102 insertions, 0 deletions
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 0000000..630a897 --- /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 |