summaryrefslogtreecommitdiffstats
path: root/app/clipboard/clipboard.cc
diff options
context:
space:
mode:
authorbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-03 04:25:37 +0000
committerbrettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-03 04:25:37 +0000
commit90f399075f9082bf7031512d6579ec1196dc060a (patch)
tree8d47273615d98732a60d0e77a0787d1623204a4b /app/clipboard/clipboard.cc
parentf0f400cb2e0a3c545d723524e8bbaf136caacf81 (diff)
downloadchromium_src-90f399075f9082bf7031512d6579ec1196dc060a.zip
chromium_src-90f399075f9082bf7031512d6579ec1196dc060a.tar.gz
chromium_src-90f399075f9082bf7031512d6579ec1196dc060a.tar.bz2
Move the clipboard stuff out of base and into app/clipboard. I renamed
clipboard_util to clipboard_util_win since it's Windows-only. This patch makes test_shell depend on app as well. There should be no logic change. TEST=none BUG=none Review URL: http://codereview.chromium.org/260003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@27937 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'app/clipboard/clipboard.cc')
-rw-r--r--app/clipboard/clipboard.cc65
1 files changed, 65 insertions, 0 deletions
diff --git a/app/clipboard/clipboard.cc b/app/clipboard/clipboard.cc
new file mode 100644
index 0000000..bc91408
--- /dev/null
+++ b/app/clipboard/clipboard.cc
@@ -0,0 +1,65 @@
+// Copyright (c) 2009 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 "app/clipboard/clipboard.h"
+
+#include "base/gfx/size.h"
+#include "base/logging.h"
+
+namespace {
+
+// A compromised renderer could send us bad data, so validate it.
+bool IsBitmapSafe(const Clipboard::ObjectMapParams& params) {
+ const gfx::Size* size =
+ reinterpret_cast<const gfx::Size*>(&(params[1].front()));
+ return params[0].size() ==
+ static_cast<size_t>(size->width() * size->height() * 4);
+}
+
+} // namespace
+
+void Clipboard::DispatchObject(ObjectType type, const ObjectMapParams& params) {
+ switch (type) {
+ case CBF_TEXT:
+ WriteText(&(params[0].front()), params[0].size());
+ break;
+
+ case CBF_HTML:
+ if (params.size() == 2)
+ WriteHTML(&(params[0].front()), params[0].size(),
+ &(params[1].front()), params[1].size());
+ else
+ WriteHTML(&(params[0].front()), params[0].size(), NULL, 0);
+ break;
+
+ case CBF_BOOKMARK:
+ WriteBookmark(&(params[0].front()), params[0].size(),
+ &(params[1].front()), params[1].size());
+ break;
+
+ case CBF_FILES:
+ WriteFiles(&(params[0].front()), params[0].size());
+ break;
+
+ case CBF_WEBKIT:
+ WriteWebSmartPaste();
+ break;
+
+#if defined(OS_WIN) || defined(OS_LINUX)
+ case CBF_BITMAP:
+ if (!IsBitmapSafe(params))
+ return;
+ WriteBitmap(&(params[0].front()), &(params[1].front()));
+ break;
+
+ case CBF_DATA:
+ WriteData(&(params[0].front()), params[0].size(),
+ &(params[1].front()), params[1].size());
+ break;
+#endif // defined(OS_WIN) || defined(OS_LINUX)
+
+ default:
+ NOTREACHED();
+ }
+}