Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(69)

Side by Side Diff: content/browser/web_contents/web_drag_dest_mac_unittest.mm

Issue 1852433004: Fix NSPasteboard leaks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix compile error. Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/mac/mac_util.h" 5 #include "base/mac/mac_util.h"
6 #include "base/mac/scoped_nsautorelease_pool.h" 6 #include "base/mac/scoped_nsautorelease_pool.h"
7 #import "base/mac/scoped_nsobject.h" 7 #import "base/mac/scoped_nsobject.h"
8 #include "base/memory/ref_counted.h"
8 #include "base/strings/sys_string_conversions.h" 9 #include "base/strings/sys_string_conversions.h"
9 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
10 #import "content/browser/web_contents/web_drag_dest_mac.h" 11 #import "content/browser/web_contents/web_drag_dest_mac.h"
11 #include "content/public/common/drop_data.h" 12 #include "content/public/common/drop_data.h"
12 #include "content/test/test_render_view_host.h" 13 #include "content/test/test_render_view_host.h"
13 #include "content/test/test_web_contents.h" 14 #include "content/test/test_web_contents.h"
14 #include "testing/gtest/include/gtest/gtest.h" 15 #include "testing/gtest/include/gtest/gtest.h"
15 #import "third_party/mozilla/NSPasteboard+Utils.h" 16 #import "third_party/mozilla/NSPasteboard+Utils.h"
17 #import "ui/base/clipboard/clipboard_util_mac.h"
16 #import "ui/base/dragdrop/cocoa_dnd_util.h" 18 #import "ui/base/dragdrop/cocoa_dnd_util.h"
17 #import "ui/gfx/test/ui_cocoa_test_helper.h" 19 #import "ui/gfx/test/ui_cocoa_test_helper.h"
18 20
19 using content::DropData; 21 using content::DropData;
20 using content::RenderViewHostImplTestHarness; 22 using content::RenderViewHostImplTestHarness;
21 23
22 namespace { 24 namespace {
23 NSString* const kCrCorePasteboardFlavorType_url = 25 NSString* const kCrCorePasteboardFlavorType_url =
24 @"CorePasteboardFlavorType 0x75726C20"; // 'url ' url 26 @"CorePasteboardFlavorType 0x75726C20"; // 'url ' url
25 NSString* const kCrCorePasteboardFlavorType_urln = 27 NSString* const kCrCorePasteboardFlavorType_urln =
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 view:[window contentView]]; 77 view:[window contentView]];
76 EXPECT_EQ(0, viewPoint.x); 78 EXPECT_EQ(0, viewPoint.x);
77 EXPECT_EQ(600, viewPoint.y); 79 EXPECT_EQ(600, viewPoint.y);
78 EXPECT_EQ(0, screenPoint.x); 80 EXPECT_EQ(0, screenPoint.x);
79 // We can't put a value on the screen size since everyone will have a 81 // We can't put a value on the screen size since everyone will have a
80 // different one. 82 // different one.
81 EXPECT_NE(0, screenPoint.y); 83 EXPECT_NE(0, screenPoint.y);
82 } 84 }
83 85
84 TEST_F(WebDragDestTest, URL) { 86 TEST_F(WebDragDestTest, URL) {
85 NSPasteboard* pboard = nil;
86 NSString* url = nil; 87 NSString* url = nil;
87 NSString* title = nil; 88 NSString* title = nil;
88 GURL result_url; 89 GURL result_url;
89 base::string16 result_title; 90 base::string16 result_title;
90 91
91 // Put a URL on the pasteboard and check it. 92 // Put a URL on the pasteboard and check it.
92 pboard = [NSPasteboard pasteboardWithUniqueName]; 93 scoped_refptr<ui::UniquePasteboard> pboard = new ui::UniquePasteboard;
93 url = @"http://www.google.com/"; 94 url = @"http://www.google.com/";
94 PutURLOnPasteboard(url, pboard); 95 PutURLOnPasteboard(url, pboard->get());
95 EXPECT_TRUE(ui::PopulateURLAndTitleFromPasteboard( 96 EXPECT_TRUE(ui::PopulateURLAndTitleFromPasteboard(&result_url, &result_title,
96 &result_url, &result_title, pboard, NO)); 97 pboard->get(), NO));
97 EXPECT_EQ(base::SysNSStringToUTF8(url), result_url.spec()); 98 EXPECT_EQ(base::SysNSStringToUTF8(url), result_url.spec());
98 [pboard releaseGlobally];
99 99
100 // Put a 'url ' and 'urln' on the pasteboard and check it. 100 // Put a 'url ' and 'urln' on the pasteboard and check it.
101 pboard = [NSPasteboard pasteboardWithUniqueName]; 101 pboard = new ui::UniquePasteboard;
102 url = @"http://www.google.com/"; 102 url = @"http://www.google.com/";
103 title = @"Title of Awesomeness!", 103 title = @"Title of Awesomeness!",
104 PutCoreURLAndTitleOnPasteboard(url, title, pboard); 104 PutCoreURLAndTitleOnPasteboard(url, title, pboard->get());
105 EXPECT_TRUE(ui::PopulateURLAndTitleFromPasteboard( 105 EXPECT_TRUE(ui::PopulateURLAndTitleFromPasteboard(&result_url, &result_title,
106 &result_url, &result_title, pboard, NO)); 106 pboard->get(), NO));
107 EXPECT_EQ(base::SysNSStringToUTF8(url), result_url.spec()); 107 EXPECT_EQ(base::SysNSStringToUTF8(url), result_url.spec());
108 EXPECT_EQ(base::SysNSStringToUTF16(title), result_title); 108 EXPECT_EQ(base::SysNSStringToUTF16(title), result_title);
109 [pboard releaseGlobally];
110 109
111 // Also check that it passes file:// via 'url '/'urln' properly. 110 // Also check that it passes file:// via 'url '/'urln' properly.
112 pboard = [NSPasteboard pasteboardWithUniqueName]; 111 pboard = new ui::UniquePasteboard;
113 url = @"file:///tmp/dont_delete_me.txt"; 112 url = @"file:///tmp/dont_delete_me.txt";
114 title = @"very important"; 113 title = @"very important";
115 PutCoreURLAndTitleOnPasteboard(url, title, pboard); 114 PutCoreURLAndTitleOnPasteboard(url, title, pboard->get());
116 EXPECT_TRUE(ui::PopulateURLAndTitleFromPasteboard( 115 EXPECT_TRUE(ui::PopulateURLAndTitleFromPasteboard(&result_url, &result_title,
117 &result_url, &result_title, pboard, NO)); 116 pboard->get(), NO));
118 EXPECT_EQ(base::SysNSStringToUTF8(url), result_url.spec()); 117 EXPECT_EQ(base::SysNSStringToUTF8(url), result_url.spec());
119 EXPECT_EQ(base::SysNSStringToUTF16(title), result_title); 118 EXPECT_EQ(base::SysNSStringToUTF16(title), result_title);
120 [pboard releaseGlobally];
121 119
122 // And javascript:. 120 // And javascript:.
123 pboard = [NSPasteboard pasteboardWithUniqueName]; 121 pboard = new ui::UniquePasteboard;
124 url = @"javascript:open('http://www.youtube.com/')"; 122 url = @"javascript:open('http://www.youtube.com/')";
125 title = @"kill some time"; 123 title = @"kill some time";
126 PutCoreURLAndTitleOnPasteboard(url, title, pboard); 124 PutCoreURLAndTitleOnPasteboard(url, title, pboard->get());
127 EXPECT_TRUE(ui::PopulateURLAndTitleFromPasteboard( 125 EXPECT_TRUE(ui::PopulateURLAndTitleFromPasteboard(&result_url, &result_title,
128 &result_url, &result_title, pboard, NO)); 126 pboard->get(), NO));
129 EXPECT_EQ(base::SysNSStringToUTF8(url), result_url.spec()); 127 EXPECT_EQ(base::SysNSStringToUTF8(url), result_url.spec());
130 EXPECT_EQ(base::SysNSStringToUTF16(title), result_title); 128 EXPECT_EQ(base::SysNSStringToUTF16(title), result_title);
131 [pboard releaseGlobally];
132 129
133 pboard = [NSPasteboard pasteboardWithUniqueName]; 130 pboard = new ui::UniquePasteboard;
134 url = @"/bin/sh"; 131 url = @"/bin/sh";
135 [pboard declareTypes:[NSArray arrayWithObject:NSFilenamesPboardType] 132 [pboard->get() declareTypes:[NSArray arrayWithObject:NSFilenamesPboardType]
136 owner:nil]; 133 owner:nil];
137 [pboard setPropertyList:[NSArray arrayWithObject:url] 134 [pboard->get() setPropertyList:[NSArray arrayWithObject:url]
138 forType:NSFilenamesPboardType]; 135 forType:NSFilenamesPboardType];
139 EXPECT_FALSE(ui::PopulateURLAndTitleFromPasteboard( 136 EXPECT_FALSE(ui::PopulateURLAndTitleFromPasteboard(&result_url, &result_title,
140 &result_url, &result_title, pboard, NO)); 137 pboard->get(), NO));
141 EXPECT_TRUE(ui::PopulateURLAndTitleFromPasteboard( 138 EXPECT_TRUE(ui::PopulateURLAndTitleFromPasteboard(&result_url, &result_title,
142 &result_url, &result_title, pboard, YES)); 139 pboard->get(), YES));
143 base::scoped_nsobject<NSURL> expected_output( 140 base::scoped_nsobject<NSURL> expected_output(
144 [[NSURL alloc] initFileURLWithPath:url isDirectory:NO]); 141 [[NSURL alloc] initFileURLWithPath:url isDirectory:NO]);
145 EXPECT_EQ([[expected_output absoluteString] UTF8String], result_url.spec()); 142 EXPECT_EQ([[expected_output absoluteString] UTF8String], result_url.spec());
146 143
147 EXPECT_EQ("sh", base::UTF16ToUTF8(result_title)); 144 EXPECT_EQ("sh", base::UTF16ToUTF8(result_title));
148 [pboard releaseGlobally];
149 } 145 }
150 146
151 TEST_F(WebDragDestTest, Data) { 147 TEST_F(WebDragDestTest, Data) {
152 DropData data; 148 DropData data;
153 NSPasteboard* pboard = [NSPasteboard pasteboardWithUniqueName]; 149 scoped_refptr<ui::UniquePasteboard> pboard = new ui::UniquePasteboard;
154 150
155 PutURLOnPasteboard(@"http://www.google.com", pboard); 151 PutURLOnPasteboard(@"http://www.google.com", pboard->get());
156 [pboard addTypes:[NSArray arrayWithObjects:NSHTMLPboardType, 152 [pboard->get() addTypes:[NSArray arrayWithObjects:NSHTMLPboardType,
157 NSStringPboardType, nil] 153 NSStringPboardType, nil]
158 owner:nil]; 154 owner:nil];
159 NSString* htmlString = @"<html><body><b>hi there</b></body></html>"; 155 NSString* htmlString = @"<html><body><b>hi there</b></body></html>";
160 NSString* textString = @"hi there"; 156 NSString* textString = @"hi there";
161 [pboard setString:htmlString forType:NSHTMLPboardType]; 157 [pboard->get() setString:htmlString forType:NSHTMLPboardType];
162 [pboard setString:textString forType:NSStringPboardType]; 158 [pboard->get() setString:textString forType:NSStringPboardType];
163 [drag_dest_ populateDropData:&data fromPasteboard:pboard]; 159 [drag_dest_ populateDropData:&data fromPasteboard:pboard->get()];
164 EXPECT_EQ(data.url.spec(), "http://www.google.com/"); 160 EXPECT_EQ(data.url.spec(), "http://www.google.com/");
165 EXPECT_EQ(base::SysNSStringToUTF16(textString), data.text.string()); 161 EXPECT_EQ(base::SysNSStringToUTF16(textString), data.text.string());
166 EXPECT_EQ(base::SysNSStringToUTF16(htmlString), data.html.string()); 162 EXPECT_EQ(base::SysNSStringToUTF16(htmlString), data.html.string());
167
168 [pboard releaseGlobally];
169 } 163 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698