summaryrefslogtreecommitdiffstats
path: root/chromium/content/browser/web_contents/web_drag_dest_mac_unittest.mm
diff options
context:
space:
mode:
authorZeno Albisser <zeno.albisser@digia.com>2013-08-15 21:46:11 +0200
committerZeno Albisser <zeno.albisser@digia.com>2013-08-15 21:46:11 +0200
commit679147eead574d186ebf3069647b4c23e8ccace6 (patch)
treefc247a0ac8ff119f7c8550879ebb6d3dd8d1ff69 /chromium/content/browser/web_contents/web_drag_dest_mac_unittest.mm
Initial import.
Diffstat (limited to 'chromium/content/browser/web_contents/web_drag_dest_mac_unittest.mm')
-rw-r--r--chromium/content/browser/web_contents/web_drag_dest_mac_unittest.mm165
1 files changed, 165 insertions, 0 deletions
diff --git a/chromium/content/browser/web_contents/web_drag_dest_mac_unittest.mm b/chromium/content/browser/web_contents/web_drag_dest_mac_unittest.mm
new file mode 100644
index 00000000000..48719de7b75
--- /dev/null
+++ b/chromium/content/browser/web_contents/web_drag_dest_mac_unittest.mm
@@ -0,0 +1,165 @@
+// Copyright (c) 2012 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/mac/scoped_nsautorelease_pool.h"
+#import "base/mac/scoped_nsobject.h"
+#include "base/strings/sys_string_conversions.h"
+#include "base/strings/utf_string_conversions.h"
+#include "content/browser/renderer_host/test_render_view_host.h"
+#import "content/browser/web_contents/web_drag_dest_mac.h"
+#include "content/public/common/drop_data.h"
+#include "content/test/test_web_contents.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#import "third_party/mozilla/NSPasteboard+Utils.h"
+#import "ui/base/dragdrop/cocoa_dnd_util.h"
+#import "ui/base/test/ui_cocoa_test_helper.h"
+
+using content::DropData;
+using content::RenderViewHostImplTestHarness;
+
+namespace {
+NSString* const kCrCorePasteboardFlavorType_url =
+ @"CorePasteboardFlavorType 0x75726C20"; // 'url ' url
+NSString* const kCrCorePasteboardFlavorType_urln =
+ @"CorePasteboardFlavorType 0x75726C6E"; // 'urln' title
+} // namespace
+
+class WebDragDestTest : public RenderViewHostImplTestHarness {
+ public:
+ virtual void SetUp() {
+ RenderViewHostImplTestHarness::SetUp();
+ drag_dest_.reset([[WebDragDest alloc] initWithWebContentsImpl:contents()]);
+ }
+
+ void PutURLOnPasteboard(NSString* urlString, NSPasteboard* pboard) {
+ [pboard declareTypes:[NSArray arrayWithObject:NSURLPboardType]
+ owner:nil];
+ NSURL* url = [NSURL URLWithString:urlString];
+ EXPECT_TRUE(url);
+ [url writeToPasteboard:pboard];
+ }
+
+ void PutCoreURLAndTitleOnPasteboard(NSString* urlString, NSString* title,
+ NSPasteboard* pboard) {
+ [pboard
+ declareTypes:[NSArray arrayWithObjects:kCrCorePasteboardFlavorType_url,
+ kCrCorePasteboardFlavorType_urln,
+ nil]
+ owner:nil];
+ [pboard setString:urlString
+ forType:kCrCorePasteboardFlavorType_url];
+ [pboard setString:title
+ forType:kCrCorePasteboardFlavorType_urln];
+ }
+
+ base::mac::ScopedNSAutoreleasePool pool_;
+ base::scoped_nsobject<WebDragDest> drag_dest_;
+};
+
+// Make sure nothing leaks.
+TEST_F(WebDragDestTest, Init) {
+ EXPECT_TRUE(drag_dest_);
+}
+
+// Test flipping of coordinates given a point in window coordinates.
+TEST_F(WebDragDestTest, Flip) {
+ NSPoint windowPoint = NSZeroPoint;
+ base::scoped_nsobject<NSWindow> window([[CocoaTestHelperWindow alloc] init]);
+ NSPoint viewPoint =
+ [drag_dest_ flipWindowPointToView:windowPoint
+ view:[window contentView]];
+ NSPoint screenPoint =
+ [drag_dest_ flipWindowPointToScreen:windowPoint
+ view:[window contentView]];
+ EXPECT_EQ(0, viewPoint.x);
+ EXPECT_EQ(600, viewPoint.y);
+ EXPECT_EQ(0, screenPoint.x);
+ // We can't put a value on the screen size since everyone will have a
+ // different one.
+ EXPECT_NE(0, screenPoint.y);
+}
+
+TEST_F(WebDragDestTest, URL) {
+ NSPasteboard* pboard = nil;
+ NSString* url = nil;
+ NSString* title = nil;
+ GURL result_url;
+ string16 result_title;
+
+ // Put a URL on the pasteboard and check it.
+ pboard = [NSPasteboard pasteboardWithUniqueName];
+ url = @"http://www.google.com/";
+ PutURLOnPasteboard(url, pboard);
+ EXPECT_TRUE(ui::PopulateURLAndTitleFromPasteboard(
+ &result_url, &result_title, pboard, NO));
+ EXPECT_EQ(base::SysNSStringToUTF8(url), result_url.spec());
+ [pboard releaseGlobally];
+
+ // Put a 'url ' and 'urln' on the pasteboard and check it.
+ pboard = [NSPasteboard pasteboardWithUniqueName];
+ url = @"http://www.google.com/";
+ title = @"Title of Awesomeness!",
+ PutCoreURLAndTitleOnPasteboard(url, title, pboard);
+ EXPECT_TRUE(ui::PopulateURLAndTitleFromPasteboard(
+ &result_url, &result_title, pboard, NO));
+ EXPECT_EQ(base::SysNSStringToUTF8(url), result_url.spec());
+ EXPECT_EQ(base::SysNSStringToUTF16(title), result_title);
+ [pboard releaseGlobally];
+
+ // Also check that it passes file:// via 'url '/'urln' properly.
+ pboard = [NSPasteboard pasteboardWithUniqueName];
+ url = @"file:///tmp/dont_delete_me.txt";
+ title = @"very important";
+ PutCoreURLAndTitleOnPasteboard(url, title, pboard);
+ EXPECT_TRUE(ui::PopulateURLAndTitleFromPasteboard(
+ &result_url, &result_title, pboard, NO));
+ EXPECT_EQ(base::SysNSStringToUTF8(url), result_url.spec());
+ EXPECT_EQ(base::SysNSStringToUTF16(title), result_title);
+ [pboard releaseGlobally];
+
+ // And javascript:.
+ pboard = [NSPasteboard pasteboardWithUniqueName];
+ url = @"javascript:open('http://www.youtube.com/')";
+ title = @"kill some time";
+ PutCoreURLAndTitleOnPasteboard(url, title, pboard);
+ EXPECT_TRUE(ui::PopulateURLAndTitleFromPasteboard(
+ &result_url, &result_title, pboard, NO));
+ EXPECT_EQ(base::SysNSStringToUTF8(url), result_url.spec());
+ EXPECT_EQ(base::SysNSStringToUTF16(title), result_title);
+ [pboard releaseGlobally];
+
+ pboard = [NSPasteboard pasteboardWithUniqueName];
+ url = @"/bin/sh";
+ [pboard declareTypes:[NSArray arrayWithObject:NSFilenamesPboardType]
+ owner:nil];
+ [pboard setPropertyList:[NSArray arrayWithObject:url]
+ forType:NSFilenamesPboardType];
+ EXPECT_FALSE(ui::PopulateURLAndTitleFromPasteboard(
+ &result_url, &result_title, pboard, NO));
+ EXPECT_TRUE(ui::PopulateURLAndTitleFromPasteboard(
+ &result_url, &result_title, pboard, YES));
+ EXPECT_EQ("file://localhost/bin/sh", result_url.spec());
+ EXPECT_EQ("sh", UTF16ToUTF8(result_title));
+ [pboard releaseGlobally];
+}
+
+TEST_F(WebDragDestTest, Data) {
+ DropData data;
+ NSPasteboard* pboard = [NSPasteboard pasteboardWithUniqueName];
+
+ PutURLOnPasteboard(@"http://www.google.com", pboard);
+ [pboard addTypes:[NSArray arrayWithObjects:NSHTMLPboardType,
+ NSStringPboardType, nil]
+ owner:nil];
+ NSString* htmlString = @"<html><body><b>hi there</b></body></html>";
+ NSString* textString = @"hi there";
+ [pboard setString:htmlString forType:NSHTMLPboardType];
+ [pboard setString:textString forType:NSStringPboardType];
+ [drag_dest_ populateDropData:&data fromPasteboard:pboard];
+ EXPECT_EQ(data.url.spec(), "http://www.google.com/");
+ EXPECT_EQ(base::SysNSStringToUTF16(textString), data.text.string());
+ EXPECT_EQ(base::SysNSStringToUTF16(htmlString), data.html.string());
+
+ [pboard releaseGlobally];
+}