summaryrefslogtreecommitdiffstats
path: root/webkit/glue/webcursor_unittest.cc
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-11 04:17:09 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-11 04:17:09 +0000
commit4605be79a582881a1987b79694437be52df959af (patch)
tree7af8fb26ac5b4561a4fc0f719ba9c7bd3edeb1e7 /webkit/glue/webcursor_unittest.cc
parentf36808a850fab540999d041e739fd8b37b144340 (diff)
downloadchromium_src-4605be79a582881a1987b79694437be52df959af.zip
chromium_src-4605be79a582881a1987b79694437be52df959af.tar.gz
chromium_src-4605be79a582881a1987b79694437be52df959af.tar.bz2
Clamp the hotspot on custom cursors to the custom cursor image's dimensions.
Current behavior: windows chrome - respect the crazy hotspot linux chrome - crash mac chrome - fall back to normal cursor firefox - clamp the hotspot to the custom cursor image bounds. So this unifies the behavior of all 3 chrome platforms and matches firefox. BUG=51709 TEST=see bug for reduction Review URL: http://codereview.chromium.org/3168003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@55669 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue/webcursor_unittest.cc')
-rw-r--r--webkit/glue/webcursor_unittest.cc36
1 files changed, 36 insertions, 0 deletions
diff --git a/webkit/glue/webcursor_unittest.cc b/webkit/glue/webcursor_unittest.cc
index 5c1ddfe..6e7701d 100644
--- a/webkit/glue/webcursor_unittest.cc
+++ b/webkit/glue/webcursor_unittest.cc
@@ -4,9 +4,12 @@
#include "base/pickle.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebCursorInfo.h"
#include "webkit/glue/webcursor.h"
#include "webkit/tools/test_shell/test_shell_test.h"
+using WebKit::WebCursorInfo;
+
TEST(WebCursorTest, CursorSerialization) {
WebCursor custom_cursor;
// This is a valid custom cursor.
@@ -80,3 +83,36 @@ TEST(WebCursorTest, CursorSerialization) {
EXPECT_FALSE(custom_cursor.Deserialize(&neg_custom_pickle, &iter));
}
+TEST(WebCursorTest, ClampHotspot) {
+ WebCursor custom_cursor;
+ // This is a valid custom cursor.
+ Pickle ok_custom_pickle;
+ // Type and hotspots.
+ ok_custom_pickle.WriteInt(WebCursorInfo::TypeCustom);
+ // Hotspot is invalid --- outside the bounds of the image.
+ ok_custom_pickle.WriteInt(5);
+ ok_custom_pickle.WriteInt(5);
+ // X & Y
+ ok_custom_pickle.WriteInt(2);
+ ok_custom_pickle.WriteInt(2);
+ // Data len including enough data for a 2x2 image.
+ ok_custom_pickle.WriteInt(4 * 4);
+ for (size_t i = 0; i < 4; i++)
+ ok_custom_pickle.WriteUInt32(0);
+ // Custom Windows message.
+ ok_custom_pickle.WriteUInt32(0);
+ void* iter = NULL;
+ ASSERT_TRUE(custom_cursor.Deserialize(&ok_custom_pickle, &iter));
+
+ // Convert to WebCursorInfo, make sure the hotspot got clamped.
+ WebCursorInfo info;
+ custom_cursor.GetCursorInfo(&info);
+ EXPECT_EQ(gfx::Point(1, 1), gfx::Point(info.hotSpot));
+
+ // Set hotspot to an invalid point again, pipe back through WebCursor,
+ // and make sure the hotspot got clamped again.
+ info.hotSpot = gfx::Point(-1, -1);
+ custom_cursor.InitFromCursorInfo(info);
+ custom_cursor.GetCursorInfo(&info);
+ EXPECT_EQ(gfx::Point(0, 0), gfx::Point(info.hotSpot));
+}