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

Side by Side Diff: chrome/browser/safe_browsing/safe_browsing_blocking_page_unittest.cc

Issue 4822002: Send malware reports when a user opts-in from the safe browsing interstitial ... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 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 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 "chrome/browser/renderer_host/test/test_render_view_host.h" 5 #include "chrome/browser/renderer_host/test/test_render_view_host.h"
6 6
7 #include "chrome/browser/browser_thread.h" 7 #include "chrome/browser/browser_thread.h"
8 #include "chrome/browser/prefs/pref_service.h"
9 #include "chrome/browser/profiles/profile.h"
10 #include "chrome/browser/safe_browsing/malware_details.h"
8 #include "chrome/browser/safe_browsing/safe_browsing_blocking_page.h" 11 #include "chrome/browser/safe_browsing/safe_browsing_blocking_page.h"
9 #include "chrome/browser/tab_contents/navigation_entry.h" 12 #include "chrome/browser/tab_contents/navigation_entry.h"
10 #include "chrome/browser/tab_contents/test_tab_contents.h" 13 #include "chrome/browser/tab_contents/test_tab_contents.h"
14 #include "chrome/common/pref_names.h"
11 #include "chrome/common/render_messages.h" 15 #include "chrome/common/render_messages.h"
12 #include "chrome/common/render_messages_params.h" 16 #include "chrome/common/render_messages_params.h"
13 17
14 static const char* kGoogleURL = "http://www.google.com/"; 18 static const char* kGoogleURL = "http://www.google.com/";
15 static const char* kGoodURL = "http://www.goodguys.com/"; 19 static const char* kGoodURL = "http://www.goodguys.com/";
16 static const char* kBadURL = "http://www.badguys.com/"; 20 static const char* kBadURL = "http://www.badguys.com/";
17 static const char* kBadURL2 = "http://www.badguys2.com/"; 21 static const char* kBadURL2 = "http://www.badguys2.com/";
18 static const char* kBadURL3 = "http://www.badguys3.com/"; 22 static const char* kBadURL3 = "http://www.badguys3.com/";
19 23
20 // A SafeBrowingBlockingPage class that does not create windows. 24 // A SafeBrowingBlockingPage class that does not create windows.
21 class TestSafeBrowsingBlockingPage : public SafeBrowsingBlockingPage { 25 class TestSafeBrowsingBlockingPage : public SafeBrowsingBlockingPage {
22 public: 26 public:
23 TestSafeBrowsingBlockingPage(SafeBrowsingService* service, 27 TestSafeBrowsingBlockingPage(SafeBrowsingService* service,
24 TabContents* tab_contents, 28 TabContents* tab_contents,
25 const UnsafeResourceList& unsafe_resources) 29 const UnsafeResourceList& unsafe_resources)
26 : SafeBrowsingBlockingPage(service, tab_contents, unsafe_resources) { 30 : SafeBrowsingBlockingPage(service, tab_contents, unsafe_resources) {
27 } 31 }
28 32
29 // Overriden from InterstitialPage. Don't create a view. 33 // Overriden from InterstitialPage. Don't create a view.
30 virtual TabContentsView* CreateTabContentsView() { 34 virtual TabContentsView* CreateTabContentsView() {
31 return NULL; 35 return NULL;
32 } 36 }
33 }; 37 };
34 38
39 class TestSafeBrowsingService: public SafeBrowsingService {
40 public:
41 virtual ~TestSafeBrowsingService() {}
42 virtual void ReportMalwareDetails(scoped_refptr<MalwareDetails> details) {
43 details_.push_back(details);
44 }
45
46 std::list<scoped_refptr<MalwareDetails> >* GetDetails() {
47 return &details_;
48 }
49
50 std::list<scoped_refptr<MalwareDetails> > details_;
51 };
52
35 class TestSafeBrowsingBlockingPageFactory 53 class TestSafeBrowsingBlockingPageFactory
36 : public SafeBrowsingBlockingPageFactory { 54 : public SafeBrowsingBlockingPageFactory {
37 public: 55 public:
38 TestSafeBrowsingBlockingPageFactory() { } 56 TestSafeBrowsingBlockingPageFactory() { }
39 ~TestSafeBrowsingBlockingPageFactory() { } 57 ~TestSafeBrowsingBlockingPageFactory() { }
40 58
41 virtual SafeBrowsingBlockingPage* CreateSafeBrowsingPage( 59 virtual SafeBrowsingBlockingPage* CreateSafeBrowsingPage(
42 SafeBrowsingService* service, 60 SafeBrowsingService* service,
43 TabContents* tab_contents, 61 TabContents* tab_contents,
44 const SafeBrowsingBlockingPage::UnsafeResourceList& unsafe_resources) { 62 const SafeBrowsingBlockingPage::UnsafeResourceList& unsafe_resources) {
45 return new TestSafeBrowsingBlockingPage(service, tab_contents, 63 return new TestSafeBrowsingBlockingPage(service, tab_contents,
46 unsafe_resources); 64 unsafe_resources);
47 } 65 }
48 }; 66 };
49 67
50 class SafeBrowsingBlockingPageTest : public RenderViewHostTestHarness, 68 class SafeBrowsingBlockingPageTest : public RenderViewHostTestHarness,
51 public SafeBrowsingService::Client { 69 public SafeBrowsingService::Client {
52 public: 70 public:
53 // The decision the user made. 71 // The decision the user made.
54 enum UserResponse { 72 enum UserResponse {
55 PENDING, 73 PENDING,
56 OK, 74 OK,
57 CANCEL 75 CANCEL
58 }; 76 };
59 77
60 SafeBrowsingBlockingPageTest() 78 SafeBrowsingBlockingPageTest()
61 : ui_thread_(BrowserThread::UI, MessageLoop::current()), 79 : ui_thread_(BrowserThread::UI, MessageLoop::current()),
62 io_thread_(BrowserThread::IO, MessageLoop::current()) { 80 io_thread_(BrowserThread::IO, MessageLoop::current()) {
63 ResetUserResponse(); 81 ResetUserResponse();
64 service_ = SafeBrowsingService::CreateSafeBrowsingService(); 82 service_ = new TestSafeBrowsingService();
65 } 83 }
66 84
67 virtual void SetUp() { 85 virtual void SetUp() {
68 RenderViewHostTestHarness::SetUp(); 86 RenderViewHostTestHarness::SetUp();
69 SafeBrowsingBlockingPage::RegisterFactory(&factory_); 87 SafeBrowsingBlockingPage::RegisterFactory(&factory_);
70 ResetUserResponse(); 88 ResetUserResponse();
71 } 89 }
72 90
73 // SafeBrowsingService::Client implementation. 91 // SafeBrowsingService::Client implementation.
74 virtual void OnUrlCheckResult(const GURL& url, 92 virtual void OnUrlCheckResult(const GURL& url,
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 MessageLoop::current()->RunAllPending(); 139 MessageLoop::current()->RunAllPending();
122 } 140 }
123 141
124 static void DontProceedThroughInterstitial( 142 static void DontProceedThroughInterstitial(
125 SafeBrowsingBlockingPage* sb_interstitial) { 143 SafeBrowsingBlockingPage* sb_interstitial) {
126 sb_interstitial->DontProceed(); 144 sb_interstitial->DontProceed();
127 // DontProceed() posts a task to update the SafeBrowsingService::Client. 145 // DontProceed() posts a task to update the SafeBrowsingService::Client.
128 MessageLoop::current()->RunAllPending(); 146 MessageLoop::current()->RunAllPending();
129 } 147 }
130 148
149 scoped_refptr<TestSafeBrowsingService> service_;
150
131 private: 151 private:
132 void InitResource(SafeBrowsingService::UnsafeResource* resource, 152 void InitResource(SafeBrowsingService::UnsafeResource* resource,
133 ResourceType::Type resource_type, 153 ResourceType::Type resource_type,
134 const GURL& url) { 154 const GURL& url) {
135 resource->client = this; 155 resource->client = this;
136 resource->url = url; 156 resource->url = url;
137 resource->resource_type = resource_type; 157 resource->resource_type = resource_type;
138 resource->threat_type = SafeBrowsingService::URL_MALWARE; 158 resource->threat_type = SafeBrowsingService::URL_MALWARE;
139 resource->render_process_host_id = contents_->GetRenderProcessHost()->id(); 159 resource->render_process_host_id = contents_->GetRenderProcessHost()->id();
140 resource->render_view_id = contents_->render_view_host()->routing_id(); 160 resource->render_view_id = contents_->render_view_host()->routing_id();
141 } 161 }
142 162
143 UserResponse user_response_; 163 UserResponse user_response_;
144 scoped_refptr<SafeBrowsingService> service_;
145 TestSafeBrowsingBlockingPageFactory factory_; 164 TestSafeBrowsingBlockingPageFactory factory_;
146 BrowserThread ui_thread_; 165 BrowserThread ui_thread_;
147 BrowserThread io_thread_; 166 BrowserThread io_thread_;
148 }; 167 };
149 168
150 // Tests showing a blocking page for a malware page and not proceeding. 169 // Tests showing a blocking page for a malware page and not proceeding.
151 TEST_F(SafeBrowsingBlockingPageTest, MalwarePageDontProceed) { 170 TEST_F(SafeBrowsingBlockingPageTest, MalwarePageDontProceed) {
171 // Enable malware details.
172 contents()->profile()->GetPrefs()->SetBoolean(
173 prefs::kSafeBrowsingReportingEnabled, true);
174
152 // Start a load. 175 // Start a load.
153 controller().LoadURL(GURL(kBadURL), GURL(), PageTransition::TYPED); 176 controller().LoadURL(GURL(kBadURL), GURL(), PageTransition::TYPED);
154 177
178
155 // Simulate the load causing a safe browsing interstitial to be shown. 179 // Simulate the load causing a safe browsing interstitial to be shown.
156 ShowInterstitial(ResourceType::MAIN_FRAME, kBadURL); 180 ShowInterstitial(ResourceType::MAIN_FRAME, kBadURL);
157 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); 181 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage();
158 ASSERT_TRUE(sb_interstitial); 182 ASSERT_TRUE(sb_interstitial);
159 183
160 MessageLoop::current()->RunAllPending(); 184 MessageLoop::current()->RunAllPending();
161 185
162 // Simulate the user clicking "don't proceed". 186 // Simulate the user clicking "don't proceed".
163 DontProceedThroughInterstitial(sb_interstitial); 187 DontProceedThroughInterstitial(sb_interstitial);
164 188
165 // The interstitial should be gone. 189 // The interstitial should be gone.
166 EXPECT_EQ(CANCEL, user_response()); 190 EXPECT_EQ(CANCEL, user_response());
167 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); 191 EXPECT_FALSE(GetSafeBrowsingBlockingPage());
168 192
169 // We did not proceed, the pending entry should be gone. 193 // We did not proceed, the pending entry should be gone.
170 EXPECT_FALSE(controller().pending_entry()); 194 EXPECT_FALSE(controller().pending_entry());
195
196 // A report should have been sent.
197 EXPECT_EQ(1u, service_->GetDetails()->size());
198 service_->GetDetails()->clear();
171 } 199 }
172 200
173 // Tests showing a blocking page for a malware page and then proceeding. 201 // Tests showing a blocking page for a malware page and then proceeding.
174 TEST_F(SafeBrowsingBlockingPageTest, MalwarePageProceed) { 202 TEST_F(SafeBrowsingBlockingPageTest, MalwarePageProceed) {
203 // Enable malware reports.
204 contents()->profile()->GetPrefs()->SetBoolean(
205 prefs::kSafeBrowsingReportingEnabled, true);
206
175 // Start a load. 207 // Start a load.
176 controller().LoadURL(GURL(kBadURL), GURL(), PageTransition::TYPED); 208 controller().LoadURL(GURL(kBadURL), GURL(), PageTransition::TYPED);
177 209
178 // Simulate the load causing a safe browsing interstitial to be shown. 210 // Simulate the load causing a safe browsing interstitial to be shown.
179 ShowInterstitial(ResourceType::MAIN_FRAME, kBadURL); 211 ShowInterstitial(ResourceType::MAIN_FRAME, kBadURL);
180 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); 212 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage();
181 ASSERT_TRUE(sb_interstitial); 213 ASSERT_TRUE(sb_interstitial);
182 214
183 // Simulate the user clicking "proceed". 215 // Simulate the user clicking "proceed".
184 ProceedThroughInterstitial(sb_interstitial); 216 ProceedThroughInterstitial(sb_interstitial);
185 217
186 // The interstitial is shown until the navigation commits. 218 // The interstitial is shown until the navigation commits.
187 ASSERT_TRUE(InterstitialPage::GetInterstitialPage(contents())); 219 ASSERT_TRUE(InterstitialPage::GetInterstitialPage(contents()));
188 // Commit the navigation. 220 // Commit the navigation.
189 Navigate(kBadURL, 1); 221 Navigate(kBadURL, 1);
190 // The interstitial should be gone now. 222 // The interstitial should be gone now.
191 ASSERT_FALSE(InterstitialPage::GetInterstitialPage(contents())); 223 ASSERT_FALSE(InterstitialPage::GetInterstitialPage(contents()));
224
225 // A report should have been sent.
226 EXPECT_EQ(1u, service_->GetDetails()->size());
227 service_->GetDetails()->clear();
192 } 228 }
193 229
194 // Tests showing a blocking page for a page that contains malware subresources 230 // Tests showing a blocking page for a page that contains malware subresources
195 // and not proceeding. 231 // and not proceeding.
196 TEST_F(SafeBrowsingBlockingPageTest, PageWithMalwareResourceDontProceed) { 232 TEST_F(SafeBrowsingBlockingPageTest, PageWithMalwareResourceDontProceed) {
233 // Enable malware reports.
234 contents()->profile()->GetPrefs()->SetBoolean(
235 prefs::kSafeBrowsingReportingEnabled, true);
236
197 // Navigate somewhere. 237 // Navigate somewhere.
198 Navigate(kGoogleURL, 1); 238 Navigate(kGoogleURL, 1);
199 239
200 // Navigate somewhere else. 240 // Navigate somewhere else.
201 Navigate(kGoodURL, 2); 241 Navigate(kGoodURL, 2);
202 242
203 // Simulate that page loading a bad-resource triggering an interstitial. 243 // Simulate that page loading a bad-resource triggering an interstitial.
204 ShowInterstitial(ResourceType::SUB_RESOURCE, kBadURL); 244 ShowInterstitial(ResourceType::SUB_RESOURCE, kBadURL);
205 245
206 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); 246 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage();
207 ASSERT_TRUE(sb_interstitial); 247 ASSERT_TRUE(sb_interstitial);
208 248
209 // Simulate the user clicking "don't proceed". 249 // Simulate the user clicking "don't proceed".
210 DontProceedThroughInterstitial(sb_interstitial); 250 DontProceedThroughInterstitial(sb_interstitial);
211 EXPECT_EQ(CANCEL, user_response()); 251 EXPECT_EQ(CANCEL, user_response());
212 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); 252 EXPECT_FALSE(GetSafeBrowsingBlockingPage());
213 253
214 // We did not proceed, we should be back to the first page, the 2nd one should 254 // We did not proceed, we should be back to the first page, the 2nd one should
215 // have been removed from the navigation controller. 255 // have been removed from the navigation controller.
216 ASSERT_EQ(1, controller().entry_count()); 256 ASSERT_EQ(1, controller().entry_count());
217 EXPECT_EQ(kGoogleURL, controller().GetActiveEntry()->url().spec()); 257 EXPECT_EQ(kGoogleURL, controller().GetActiveEntry()->url().spec());
258
259 // A report should have been sent.
260 EXPECT_EQ(1u, service_->GetDetails()->size());
261 service_->GetDetails()->clear();
218 } 262 }
219 263
220 // Tests showing a blocking page for a page that contains malware subresources 264 // Tests showing a blocking page for a page that contains malware subresources
221 // and proceeding. 265 // and proceeding.
222 TEST_F(SafeBrowsingBlockingPageTest, PageWithMalwareResourceProceed) { 266 TEST_F(SafeBrowsingBlockingPageTest, PageWithMalwareResourceProceed) {
267 // Enable malware reports.
268 contents()->profile()->GetPrefs()->SetBoolean(
269 prefs::kSafeBrowsingReportingEnabled, true);
270
223 // Navigate somewhere. 271 // Navigate somewhere.
224 Navigate(kGoodURL, 1); 272 Navigate(kGoodURL, 1);
225 273
226 // Simulate that page loading a bad-resource triggering an interstitial. 274 // Simulate that page loading a bad-resource triggering an interstitial.
227 ShowInterstitial(ResourceType::SUB_RESOURCE, kBadURL); 275 ShowInterstitial(ResourceType::SUB_RESOURCE, kBadURL);
228 276
229 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); 277 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage();
230 ASSERT_TRUE(sb_interstitial); 278 ASSERT_TRUE(sb_interstitial);
231 279
232 // Simulate the user clicking "proceed". 280 // Simulate the user clicking "proceed".
233 ProceedThroughInterstitial(sb_interstitial); 281 ProceedThroughInterstitial(sb_interstitial);
234 EXPECT_EQ(OK, user_response()); 282 EXPECT_EQ(OK, user_response());
235 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); 283 EXPECT_FALSE(GetSafeBrowsingBlockingPage());
236 284
237 // We did proceed, we should be back to showing the page. 285 // We did proceed, we should be back to showing the page.
238 ASSERT_EQ(1, controller().entry_count()); 286 ASSERT_EQ(1, controller().entry_count());
239 EXPECT_EQ(kGoodURL, controller().GetActiveEntry()->url().spec()); 287 EXPECT_EQ(kGoodURL, controller().GetActiveEntry()->url().spec());
288
289 // A report should have been sent.
290 EXPECT_EQ(1u, service_->GetDetails()->size());
291 service_->GetDetails()->clear();
240 } 292 }
241 293
242 // Tests showing a blocking page for a page that contains multiple malware 294 // Tests showing a blocking page for a page that contains multiple malware
243 // subresources and not proceeding. This just tests that the extra malware 295 // subresources and not proceeding. This just tests that the extra malware
244 // subresources (which trigger queued interstitial pages) do not break anything. 296 // subresources (which trigger queued interstitial pages) do not break anything.
245 TEST_F(SafeBrowsingBlockingPageTest, 297 TEST_F(SafeBrowsingBlockingPageTest,
246 PageWithMultipleMalwareResourceDontProceed) { 298 PageWithMultipleMalwareResourceDontProceed) {
299 // Enable malware reports.
300 contents()->profile()->GetPrefs()->SetBoolean(
301 prefs::kSafeBrowsingReportingEnabled, true);
302
247 // Navigate somewhere. 303 // Navigate somewhere.
248 Navigate(kGoogleURL, 1); 304 Navigate(kGoogleURL, 1);
249 305
250 // Navigate somewhere else. 306 // Navigate somewhere else.
251 Navigate(kGoodURL, 2); 307 Navigate(kGoodURL, 2);
252 308
253 // Simulate that page loading a bad-resource triggering an interstitial. 309 // Simulate that page loading a bad-resource triggering an interstitial.
254 ShowInterstitial(ResourceType::SUB_RESOURCE, kBadURL); 310 ShowInterstitial(ResourceType::SUB_RESOURCE, kBadURL);
255 311
256 // More bad resources loading causing more interstitials. The new 312 // More bad resources loading causing more interstitials. The new
257 // interstitials should be queued. 313 // interstitials should be queued.
258 ShowInterstitial(ResourceType::SUB_RESOURCE, kBadURL2); 314 ShowInterstitial(ResourceType::SUB_RESOURCE, kBadURL2);
259 ShowInterstitial(ResourceType::SUB_RESOURCE, kBadURL3); 315 ShowInterstitial(ResourceType::SUB_RESOURCE, kBadURL3);
260 316
261 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); 317 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage();
262 ASSERT_TRUE(sb_interstitial); 318 ASSERT_TRUE(sb_interstitial);
263 319
264 // Simulate the user clicking "don't proceed". 320 // Simulate the user clicking "don't proceed".
265 DontProceedThroughInterstitial(sb_interstitial); 321 DontProceedThroughInterstitial(sb_interstitial);
266 EXPECT_EQ(CANCEL, user_response()); 322 EXPECT_EQ(CANCEL, user_response());
267 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); 323 EXPECT_FALSE(GetSafeBrowsingBlockingPage());
268 324
269 // We did not proceed, we should be back to the first page, the 2nd one should 325 // We did not proceed, we should be back to the first page, the 2nd one should
270 // have been removed from the navigation controller. 326 // have been removed from the navigation controller.
271 ASSERT_EQ(1, controller().entry_count()); 327 ASSERT_EQ(1, controller().entry_count());
272 EXPECT_EQ(kGoogleURL, controller().GetActiveEntry()->url().spec()); 328 EXPECT_EQ(kGoogleURL, controller().GetActiveEntry()->url().spec());
329
330 // A report should have been sent.
331 EXPECT_EQ(1u, service_->GetDetails()->size());
332 service_->GetDetails()->clear();
273 } 333 }
274 334
275 // Tests showing a blocking page for a page that contains multiple malware 335 // Tests showing a blocking page for a page that contains multiple malware
276 // subresources and proceeding through the first interstitial, but not the next. 336 // subresources and proceeding through the first interstitial, but not the next.
277 TEST_F(SafeBrowsingBlockingPageTest, 337 TEST_F(SafeBrowsingBlockingPageTest,
278 PageWithMultipleMalwareResourceProceedThenDontProceed) { 338 PageWithMultipleMalwareResourceProceedThenDontProceed) {
339 // Enable malware reports.
340 contents()->profile()->GetPrefs()->SetBoolean(
341 prefs::kSafeBrowsingReportingEnabled, true);
342
279 // Navigate somewhere. 343 // Navigate somewhere.
280 Navigate(kGoogleURL, 1); 344 Navigate(kGoogleURL, 1);
281 345
282 // Navigate somewhere else. 346 // Navigate somewhere else.
283 Navigate(kGoodURL, 2); 347 Navigate(kGoodURL, 2);
284 348
285 // Simulate that page loading a bad-resource triggering an interstitial. 349 // Simulate that page loading a bad-resource triggering an interstitial.
286 ShowInterstitial(ResourceType::SUB_RESOURCE, kBadURL); 350 ShowInterstitial(ResourceType::SUB_RESOURCE, kBadURL);
287 351
288 // More bad resources loading causing more interstitials. The new 352 // More bad resources loading causing more interstitials. The new
289 // interstitials should be queued. 353 // interstitials should be queued.
290 ShowInterstitial(ResourceType::SUB_RESOURCE, kBadURL2); 354 ShowInterstitial(ResourceType::SUB_RESOURCE, kBadURL2);
291 ShowInterstitial(ResourceType::SUB_RESOURCE, kBadURL3); 355 ShowInterstitial(ResourceType::SUB_RESOURCE, kBadURL3);
292 356
293 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); 357 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage();
294 ASSERT_TRUE(sb_interstitial); 358 ASSERT_TRUE(sb_interstitial);
295 359
296 // Proceed through the 1st interstitial. 360 // Proceed through the 1st interstitial.
297 ProceedThroughInterstitial(sb_interstitial); 361 ProceedThroughInterstitial(sb_interstitial);
298 EXPECT_EQ(OK, user_response()); 362 EXPECT_EQ(OK, user_response());
299 363
364 // A report should have been sent.
365 EXPECT_EQ(1u, service_->GetDetails()->size());
366 service_->GetDetails()->clear();
367
300 ResetUserResponse(); 368 ResetUserResponse();
301 369
302 // We should land to a 2nd interstitial (aggregating all the malware resources 370 // We should land to a 2nd interstitial (aggregating all the malware resources
303 // loaded while the 1st interstitial was showing). 371 // loaded while the 1st interstitial was showing).
304 sb_interstitial = GetSafeBrowsingBlockingPage(); 372 sb_interstitial = GetSafeBrowsingBlockingPage();
305 ASSERT_TRUE(sb_interstitial); 373 ASSERT_TRUE(sb_interstitial);
306 374
307 // Don't proceed through the 2nd interstitial. 375 // Don't proceed through the 2nd interstitial.
308 DontProceedThroughInterstitial(sb_interstitial); 376 DontProceedThroughInterstitial(sb_interstitial);
309 EXPECT_EQ(CANCEL, user_response()); 377 EXPECT_EQ(CANCEL, user_response());
310 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); 378 EXPECT_FALSE(GetSafeBrowsingBlockingPage());
311 379
312 // We did not proceed, we should be back to the first page, the 2nd one should 380 // We did not proceed, we should be back to the first page, the 2nd one should
313 // have been removed from the navigation controller. 381 // have been removed from the navigation controller.
314 ASSERT_EQ(1, controller().entry_count()); 382 ASSERT_EQ(1, controller().entry_count());
315 EXPECT_EQ(kGoogleURL, controller().GetActiveEntry()->url().spec()); 383 EXPECT_EQ(kGoogleURL, controller().GetActiveEntry()->url().spec());
384
385 // No report should have been sent -- we don't create a report the
386 // second time.
387 EXPECT_EQ(0u, service_->GetDetails()->size());
388 service_->GetDetails()->clear();
316 } 389 }
317 390
318 // Tests showing a blocking page for a page that contains multiple malware 391 // Tests showing a blocking page for a page that contains multiple malware
319 // subresources and proceeding through the multiple interstitials. 392 // subresources and proceeding through the multiple interstitials.
320 TEST_F(SafeBrowsingBlockingPageTest, PageWithMultipleMalwareResourceProceed) { 393 TEST_F(SafeBrowsingBlockingPageTest, PageWithMultipleMalwareResourceProceed) {
394 // Enable malware reports.
395 contents()->profile()->GetPrefs()->SetBoolean(
396 prefs::kSafeBrowsingReportingEnabled, true);
397
321 // Navigate somewhere else. 398 // Navigate somewhere else.
322 Navigate(kGoodURL, 1); 399 Navigate(kGoodURL, 1);
323 400
324 // Simulate that page loading a bad-resource triggering an interstitial. 401 // Simulate that page loading a bad-resource triggering an interstitial.
325 ShowInterstitial(ResourceType::SUB_RESOURCE, kBadURL); 402 ShowInterstitial(ResourceType::SUB_RESOURCE, kBadURL);
326 403
327 // More bad resources loading causing more interstitials. The new 404 // More bad resources loading causing more interstitials. The new
328 // interstitials should be queued. 405 // interstitials should be queued.
329 ShowInterstitial(ResourceType::SUB_RESOURCE, kBadURL2); 406 ShowInterstitial(ResourceType::SUB_RESOURCE, kBadURL2);
330 ShowInterstitial(ResourceType::SUB_RESOURCE, kBadURL3); 407 ShowInterstitial(ResourceType::SUB_RESOURCE, kBadURL3);
331 408
332 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); 409 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage();
333 ASSERT_TRUE(sb_interstitial); 410 ASSERT_TRUE(sb_interstitial);
334 411
335 // Proceed through the 1st interstitial. 412 // Proceed through the 1st interstitial.
336 ProceedThroughInterstitial(sb_interstitial); 413 ProceedThroughInterstitial(sb_interstitial);
337 EXPECT_EQ(OK, user_response()); 414 EXPECT_EQ(OK, user_response());
338 415
416 // A report should have been sent.
417 EXPECT_EQ(1u, service_->GetDetails()->size());
418 service_->GetDetails()->clear();
419
339 ResetUserResponse(); 420 ResetUserResponse();
340 421
341 // We should land to a 2nd interstitial (aggregating all the malware resources 422 // We should land to a 2nd interstitial (aggregating all the malware resources
342 // loaded while the 1st interstitial was showing). 423 // loaded while the 1st interstitial was showing).
343 sb_interstitial = GetSafeBrowsingBlockingPage(); 424 sb_interstitial = GetSafeBrowsingBlockingPage();
344 ASSERT_TRUE(sb_interstitial); 425 ASSERT_TRUE(sb_interstitial);
345 426
346 // Proceed through the 2nd interstitial. 427 // Proceed through the 2nd interstitial.
347 ProceedThroughInterstitial(sb_interstitial); 428 ProceedThroughInterstitial(sb_interstitial);
348 EXPECT_EQ(OK, user_response()); 429 EXPECT_EQ(OK, user_response());
349 430
350 // We did proceed, we should be back to the initial page. 431 // We did proceed, we should be back to the initial page.
351 ASSERT_EQ(1, controller().entry_count()); 432 ASSERT_EQ(1, controller().entry_count());
352 EXPECT_EQ(kGoodURL, controller().GetActiveEntry()->url().spec()); 433 EXPECT_EQ(kGoodURL, controller().GetActiveEntry()->url().spec());
434
435 // No report should have been sent -- we don't create a report the
436 // second time.
437 EXPECT_EQ(0u, service_->GetDetails()->size());
438 service_->GetDetails()->clear();
353 } 439 }
354 440
355 // Tests showing a blocking page then navigating back and forth to make sure the 441 // Tests showing a blocking page then navigating back and forth to make sure the
356 // controller entries are OK. http://crbug.com/17627 442 // controller entries are OK. http://crbug.com/17627
357 TEST_F(SafeBrowsingBlockingPageTest, NavigatingBackAndForth) { 443 TEST_F(SafeBrowsingBlockingPageTest, NavigatingBackAndForth) {
444 // Enable malware reports.
445 contents()->profile()->GetPrefs()->SetBoolean(
446 prefs::kSafeBrowsingReportingEnabled, true);
447
358 // Navigate somewhere. 448 // Navigate somewhere.
359 Navigate(kGoodURL, 1); 449 Navigate(kGoodURL, 1);
360 450
361 // Now navigate to a bad page triggerring an interstitial. 451 // Now navigate to a bad page triggerring an interstitial.
362 controller().LoadURL(GURL(kBadURL), GURL(), PageTransition::TYPED); 452 controller().LoadURL(GURL(kBadURL), GURL(), PageTransition::TYPED);
363 ShowInterstitial(ResourceType::MAIN_FRAME, kBadURL); 453 ShowInterstitial(ResourceType::MAIN_FRAME, kBadURL);
364 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); 454 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage();
365 ASSERT_TRUE(sb_interstitial); 455 ASSERT_TRUE(sb_interstitial);
366 456
367 // Proceed, then navigate back. 457 // Proceed, then navigate back.
(...skipping 13 matching lines...) Expand all
381 sb_interstitial = GetSafeBrowsingBlockingPage(); 471 sb_interstitial = GetSafeBrowsingBlockingPage();
382 ASSERT_TRUE(sb_interstitial); 472 ASSERT_TRUE(sb_interstitial);
383 473
384 // Let's proceed and make sure everything is OK (bug 17627). 474 // Let's proceed and make sure everything is OK (bug 17627).
385 ProceedThroughInterstitial(sb_interstitial); 475 ProceedThroughInterstitial(sb_interstitial);
386 Navigate(kBadURL, 2); // Commit the navigation. 476 Navigate(kBadURL, 2); // Commit the navigation.
387 sb_interstitial = GetSafeBrowsingBlockingPage(); 477 sb_interstitial = GetSafeBrowsingBlockingPage();
388 ASSERT_FALSE(sb_interstitial); 478 ASSERT_FALSE(sb_interstitial);
389 ASSERT_EQ(2, controller().entry_count()); 479 ASSERT_EQ(2, controller().entry_count());
390 EXPECT_EQ(kBadURL, controller().GetActiveEntry()->url().spec()); 480 EXPECT_EQ(kBadURL, controller().GetActiveEntry()->url().spec());
481
482 // Two reports should have been sent.
483 EXPECT_EQ(2u, service_->GetDetails()->size());
484 service_->GetDetails()->clear();
391 } 485 }
392 486
393 // Tests that calling "don't proceed" after "proceed" has been called doesn't 487 // Tests that calling "don't proceed" after "proceed" has been called doesn't
394 // cause problems. http://crbug.com/30079 488 // cause problems. http://crbug.com/30079
395 TEST_F(SafeBrowsingBlockingPageTest, ProceedThenDontProceed) { 489 TEST_F(SafeBrowsingBlockingPageTest, ProceedThenDontProceed) {
490 // Enable malware reports.
491 contents()->profile()->GetPrefs()->SetBoolean(
492 prefs::kSafeBrowsingReportingEnabled, true);
493
396 // Start a load. 494 // Start a load.
397 controller().LoadURL(GURL(kBadURL), GURL(), PageTransition::TYPED); 495 controller().LoadURL(GURL(kBadURL), GURL(), PageTransition::TYPED);
398 496
399 // Simulate the load causing a safe browsing interstitial to be shown. 497 // Simulate the load causing a safe browsing interstitial to be shown.
400 ShowInterstitial(ResourceType::MAIN_FRAME, kBadURL); 498 ShowInterstitial(ResourceType::MAIN_FRAME, kBadURL);
401 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage(); 499 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage();
402 ASSERT_TRUE(sb_interstitial); 500 ASSERT_TRUE(sb_interstitial);
403 501
404 MessageLoop::current()->RunAllPending(); 502 MessageLoop::current()->RunAllPending();
405 503
406 // Simulate the user clicking "proceed" then "don't proceed" (before the 504 // Simulate the user clicking "proceed" then "don't proceed" (before the
407 // interstitial is shown). 505 // interstitial is shown).
408 sb_interstitial->Proceed(); 506 sb_interstitial->Proceed();
409 sb_interstitial->DontProceed(); 507 sb_interstitial->DontProceed();
410 // Proceed() and DontProceed() post a task to update the 508 // Proceed() and DontProceed() post a task to update the
411 // SafeBrowsingService::Client. 509 // SafeBrowsingService::Client.
412 MessageLoop::current()->RunAllPending(); 510 MessageLoop::current()->RunAllPending();
413 511
414 // The interstitial should be gone. 512 // The interstitial should be gone.
415 EXPECT_EQ(OK, user_response()); 513 EXPECT_EQ(OK, user_response());
416 EXPECT_FALSE(GetSafeBrowsingBlockingPage()); 514 EXPECT_FALSE(GetSafeBrowsingBlockingPage());
515
516 // Only one report should have been sent.
517 EXPECT_EQ(1u, service_->GetDetails()->size());
518 service_->GetDetails()->clear();
417 } 519 }
520
521 // Tests showing a blocking page for a malware page with reports disabled.
522 TEST_F(SafeBrowsingBlockingPageTest, MalwareReportsDisabled) {
523 // Disable malware reports.
524 contents()->profile()->GetPrefs()->SetBoolean(
525 prefs::kSafeBrowsingReportingEnabled, false);
526
527 // Start a load.
528 controller().LoadURL(GURL(kBadURL), GURL(), PageTransition::TYPED);
529
530 // Simulate the load causing a safe browsing interstitial to be shown.
531 ShowInterstitial(ResourceType::MAIN_FRAME, kBadURL);
532 SafeBrowsingBlockingPage* sb_interstitial = GetSafeBrowsingBlockingPage();
533 ASSERT_TRUE(sb_interstitial);
534
535 MessageLoop::current()->RunAllPending();
536
537 // Simulate the user clicking "don't proceed".
538 DontProceedThroughInterstitial(sb_interstitial);
539
540 // The interstitial should be gone.
541 EXPECT_EQ(CANCEL, user_response());
542 EXPECT_FALSE(GetSafeBrowsingBlockingPage());
543
544 // We did not proceed, the pending entry should be gone.
545 EXPECT_FALSE(controller().pending_entry());
546
547 // No report should have been sent.
548 EXPECT_EQ(0u, service_->GetDetails()->size());
549 service_->GetDetails()->clear();
550 }
OLDNEW
« no previous file with comments | « chrome/browser/safe_browsing/safe_browsing_blocking_page_test.cc ('k') | chrome/browser/safe_browsing/safe_browsing_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698