dd5b313bfc
Also adds more explicit #includes for needed things. Review URL: http://codereview.chromium.org/118162 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@17479 0039d316-1c4b-4281-b951-d872f2087c98
66 linhas
1.7 KiB
C++
66 linhas
1.7 KiB
C++
// Copyright (c) 2006-2008 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 "base/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);
|
|
}
|
|
|
|
}
|
|
|
|
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_LINK:
|
|
WriteHyperlink(&(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;
|
|
#endif // defined(OS_WIN) || defined(OS_LINUX)
|
|
|
|
default:
|
|
NOTREACHED();
|
|
}
|
|
}
|