OLD | NEW |
| (Empty) |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #import "chrome/browser/ui/cocoa/content_exceptions_window_controller.h" | |
6 | |
7 #import <Cocoa/Cocoa.h> | |
8 | |
9 #import "base/scoped_nsobject.h" | |
10 #include "base/ref_counted.h" | |
11 #include "chrome/browser/ui/cocoa/browser_test_helper.h" | |
12 #include "chrome/browser/ui/cocoa/cocoa_test_helper.h" | |
13 #include "testing/gtest/include/gtest/gtest.h" | |
14 #include "testing/platform_test.h" | |
15 | |
16 namespace { | |
17 | |
18 void ProcessEvents() { | |
19 for (;;) { | |
20 base::mac::ScopedNSAutoreleasePool pool; | |
21 NSEvent* next_event = [NSApp nextEventMatchingMask:NSAnyEventMask | |
22 untilDate:nil | |
23 inMode:NSDefaultRunLoopMode | |
24 dequeue:YES]; | |
25 if (!next_event) | |
26 break; | |
27 [NSApp sendEvent:next_event]; | |
28 } | |
29 } | |
30 | |
31 void SendKeyEvents(NSString* characters) { | |
32 for (NSUInteger i = 0; i < [characters length]; ++i) { | |
33 unichar character = [characters characterAtIndex:i]; | |
34 NSString* charString = [NSString stringWithCharacters:&character length:1]; | |
35 NSEvent* event = [NSEvent keyEventWithType:NSKeyDown | |
36 location:NSZeroPoint | |
37 modifierFlags:0 | |
38 timestamp:0.0 | |
39 windowNumber:0 | |
40 context:nil | |
41 characters:charString | |
42 charactersIgnoringModifiers:charString | |
43 isARepeat:NO | |
44 keyCode:0]; | |
45 [NSApp sendEvent:event]; | |
46 } | |
47 } | |
48 | |
49 class ContentExceptionsWindowControllerTest : public CocoaTest { | |
50 public: | |
51 virtual void SetUp() { | |
52 CocoaTest::SetUp(); | |
53 TestingProfile* profile = browser_helper_.profile(); | |
54 settingsMap_ = new HostContentSettingsMap(profile); | |
55 } | |
56 | |
57 ContentExceptionsWindowController* GetController(ContentSettingsType type) { | |
58 id controller = [ContentExceptionsWindowController | |
59 controllerForType:type | |
60 settingsMap:settingsMap_.get() | |
61 otrSettingsMap:NULL]; | |
62 [controller showWindow:nil]; | |
63 return controller; | |
64 } | |
65 | |
66 void ClickAdd(ContentExceptionsWindowController* controller) { | |
67 [controller addException:nil]; | |
68 ProcessEvents(); | |
69 } | |
70 | |
71 void ClickRemove(ContentExceptionsWindowController* controller) { | |
72 [controller removeException:nil]; | |
73 ProcessEvents(); | |
74 } | |
75 | |
76 void ClickRemoveAll(ContentExceptionsWindowController* controller) { | |
77 [controller removeAllExceptions:nil]; | |
78 ProcessEvents(); | |
79 } | |
80 | |
81 void EnterText(NSString* str) { | |
82 SendKeyEvents(str); | |
83 ProcessEvents(); | |
84 } | |
85 | |
86 void HitEscape(ContentExceptionsWindowController* controller) { | |
87 [controller cancel:nil]; | |
88 ProcessEvents(); | |
89 } | |
90 | |
91 protected: | |
92 BrowserTestHelper browser_helper_; | |
93 scoped_refptr<HostContentSettingsMap> settingsMap_; | |
94 }; | |
95 | |
96 TEST_F(ContentExceptionsWindowControllerTest, Construction) { | |
97 ContentExceptionsWindowController* controller = | |
98 [ContentExceptionsWindowController | |
99 controllerForType:CONTENT_SETTINGS_TYPE_PLUGINS | |
100 settingsMap:settingsMap_.get() | |
101 otrSettingsMap:NULL]; | |
102 [controller showWindow:nil]; | |
103 [controller close]; // Should autorelease. | |
104 } | |
105 | |
106 // Regression test for http://crbug.com/37137 | |
107 TEST_F(ContentExceptionsWindowControllerTest, AddRemove) { | |
108 ContentExceptionsWindowController* controller = | |
109 GetController(CONTENT_SETTINGS_TYPE_PLUGINS); | |
110 | |
111 HostContentSettingsMap::SettingsForOneType settings; | |
112 | |
113 ClickAdd(controller); | |
114 settingsMap_->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_PLUGINS, | |
115 "", | |
116 &settings); | |
117 EXPECT_EQ(0u, settings.size()); | |
118 | |
119 ClickRemove(controller); | |
120 | |
121 EXPECT_FALSE([controller editingNewException]); | |
122 [controller close]; | |
123 | |
124 settingsMap_->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_PLUGINS, | |
125 "", | |
126 &settings); | |
127 EXPECT_EQ(0u, settings.size()); | |
128 } | |
129 | |
130 // Regression test for http://crbug.com/37137 | |
131 TEST_F(ContentExceptionsWindowControllerTest, AddRemoveAll) { | |
132 ContentExceptionsWindowController* controller = | |
133 GetController(CONTENT_SETTINGS_TYPE_PLUGINS); | |
134 | |
135 ClickAdd(controller); | |
136 ClickRemoveAll(controller); | |
137 | |
138 EXPECT_FALSE([controller editingNewException]); | |
139 [controller close]; | |
140 | |
141 HostContentSettingsMap::SettingsForOneType settings; | |
142 settingsMap_->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_PLUGINS, | |
143 "", | |
144 &settings); | |
145 EXPECT_EQ(0u, settings.size()); | |
146 } | |
147 | |
148 TEST_F(ContentExceptionsWindowControllerTest, Add) { | |
149 ContentExceptionsWindowController* controller = | |
150 GetController(CONTENT_SETTINGS_TYPE_PLUGINS); | |
151 | |
152 ClickAdd(controller); | |
153 EnterText(@"addedhost\n"); | |
154 | |
155 EXPECT_FALSE([controller editingNewException]); | |
156 [controller close]; | |
157 | |
158 HostContentSettingsMap::SettingsForOneType settings; | |
159 settingsMap_->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_PLUGINS, | |
160 "", | |
161 &settings); | |
162 EXPECT_EQ(1u, settings.size()); | |
163 EXPECT_EQ(ContentSettingsPattern("addedhost"), settings[0].first); | |
164 } | |
165 | |
166 TEST_F(ContentExceptionsWindowControllerTest, AddEscDoesNotAdd) { | |
167 ContentExceptionsWindowController* controller = | |
168 GetController(CONTENT_SETTINGS_TYPE_PLUGINS); | |
169 | |
170 ClickAdd(controller); | |
171 EnterText(@"addedhost"); // but do not press enter | |
172 HitEscape(controller); | |
173 | |
174 HostContentSettingsMap::SettingsForOneType settings; | |
175 settingsMap_->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_PLUGINS, | |
176 "", | |
177 &settings); | |
178 EXPECT_EQ(0u, settings.size()); | |
179 EXPECT_FALSE([controller editingNewException]); | |
180 | |
181 [controller close]; | |
182 } | |
183 | |
184 // Regression test for http://crbug.com/37208 | |
185 TEST_F(ContentExceptionsWindowControllerTest, AddEditAddAdd) { | |
186 ContentExceptionsWindowController* controller = | |
187 GetController(CONTENT_SETTINGS_TYPE_PLUGINS); | |
188 | |
189 ClickAdd(controller); | |
190 EnterText(@"testtesttest"); // but do not press enter | |
191 ClickAdd(controller); | |
192 ClickAdd(controller); | |
193 | |
194 EXPECT_TRUE([controller editingNewException]); | |
195 [controller close]; | |
196 | |
197 HostContentSettingsMap::SettingsForOneType settings; | |
198 settingsMap_->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_PLUGINS, | |
199 "", | |
200 &settings); | |
201 EXPECT_EQ(0u, settings.size()); | |
202 } | |
203 | |
204 TEST_F(ContentExceptionsWindowControllerTest, AddExistingEditAdd) { | |
205 settingsMap_->SetContentSetting(ContentSettingsPattern("myhost"), | |
206 CONTENT_SETTINGS_TYPE_PLUGINS, | |
207 "", | |
208 CONTENT_SETTING_BLOCK); | |
209 | |
210 ContentExceptionsWindowController* controller = | |
211 GetController(CONTENT_SETTINGS_TYPE_PLUGINS); | |
212 | |
213 ClickAdd(controller); | |
214 EnterText(@"myhost"); // but do not press enter | |
215 ClickAdd(controller); | |
216 | |
217 EXPECT_TRUE([controller editingNewException]); | |
218 [controller close]; | |
219 | |
220 | |
221 HostContentSettingsMap::SettingsForOneType settings; | |
222 settingsMap_->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_PLUGINS, | |
223 "", | |
224 &settings); | |
225 EXPECT_EQ(1u, settings.size()); | |
226 } | |
227 | |
228 TEST_F(ContentExceptionsWindowControllerTest, AddExistingDoesNotOverwrite) { | |
229 settingsMap_->SetContentSetting(ContentSettingsPattern("myhost"), | |
230 CONTENT_SETTINGS_TYPE_COOKIES, | |
231 "", | |
232 CONTENT_SETTING_SESSION_ONLY); | |
233 | |
234 ContentExceptionsWindowController* controller = | |
235 GetController(CONTENT_SETTINGS_TYPE_COOKIES); | |
236 | |
237 ClickAdd(controller); | |
238 EnterText(@"myhost\n"); | |
239 | |
240 EXPECT_FALSE([controller editingNewException]); | |
241 [controller close]; | |
242 | |
243 HostContentSettingsMap::SettingsForOneType settings; | |
244 settingsMap_->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_COOKIES, | |
245 "", | |
246 &settings); | |
247 EXPECT_EQ(1u, settings.size()); | |
248 EXPECT_EQ(CONTENT_SETTING_SESSION_ONLY, settings[0].second); | |
249 } | |
250 | |
251 | |
252 } // namespace | |
OLD | NEW |