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

Side by Side Diff: chrome/browser/extensions/extension_crash_recovery_browsertest.cc

Issue 6249010: Cleanup: de-inline a bunch of classes, rename and move "PluginInstaller" to "... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/process_util.h" 5 #include "base/process_util.h"
6 #include "chrome/browser/extensions/crashed_extension_infobar.h" 6 #include "chrome/browser/extensions/crashed_extension_infobar.h"
7 #include "chrome/browser/extensions/extension_browsertest.h" 7 #include "chrome/browser/extensions/extension_browsertest.h"
8 #include "chrome/browser/extensions/extension_host.h" 8 #include "chrome/browser/extensions/extension_host.h"
9 #include "chrome/browser/extensions/extension_process_manager.h" 9 #include "chrome/browser/extensions/extension_process_manager.h"
10 #include "chrome/browser/extensions/extension_service.h" 10 #include "chrome/browser/extensions/extension_service.h"
11 #include "chrome/browser/profiles/profile.h" 11 #include "chrome/browser/profiles/profile.h"
12 #include "chrome/browser/renderer_host/render_process_host.h" 12 #include "chrome/browser/renderer_host/render_process_host.h"
13 #include "chrome/browser/renderer_host/render_view_host.h" 13 #include "chrome/browser/renderer_host/render_view_host.h"
14 #include "chrome/browser/tab_contents/infobar_delegate.h" 14 #include "chrome/browser/tab_contents/infobar_delegate.h"
15 #include "chrome/browser/tab_contents/tab_contents.h" 15 #include "chrome/browser/tab_contents/tab_contents.h"
16 #include "chrome/browser/tabs/tab_strip_model.h" 16 #include "chrome/browser/tabs/tab_strip_model.h"
17 #include "chrome/browser/ui/browser.h" 17 #include "chrome/browser/ui/browser.h"
18 #include "chrome/common/result_codes.h" 18 #include "chrome/common/result_codes.h"
19 #include "chrome/test/ui_test_utils.h" 19 #include "chrome/test/ui_test_utils.h"
20 20
21 class ExtensionCrashRecoveryTest : public ExtensionBrowserTest { 21 class ExtensionCrashRecoveryTest : public ExtensionBrowserTest {
22 protected: 22 protected:
23 ExtensionService* GetExtensionService() { 23 ExtensionService* GetExtensionService() {
24 return browser()->profile()->GetExtensionService(); 24 return browser()->profile()->GetExtensionService();
25 } 25 }
26 26
27 ExtensionProcessManager* GetExtensionProcessManager() { 27 ExtensionProcessManager* GetExtensionProcessManager() {
28 return browser()->profile()->GetExtensionProcessManager(); 28 return browser()->profile()->GetExtensionProcessManager();
29 } 29 }
30 30
31 CrashedExtensionInfoBarDelegate* GetCrashedExtensionInfoBarDelegate( 31 ConfirmInfoBarDelegate* GetInfoBarDelegate(int index) {
32 int index) {
33 TabContents* current_tab = browser()->GetSelectedTabContents(); 32 TabContents* current_tab = browser()->GetSelectedTabContents();
34 EXPECT_LT(index, current_tab->infobar_delegate_count()); 33 EXPECT_LT(index, current_tab->infobar_delegate_count());
35 InfoBarDelegate* delegate = current_tab->GetInfoBarDelegateAt(index); 34 return current_tab->GetInfoBarDelegateAt(index)->AsConfirmInfoBarDelegate();
36 return delegate->AsCrashedExtensionInfoBarDelegate();
37 } 35 }
38 36
39 void AcceptCrashedExtensionInfobar(int index) { 37 void AcceptInfoBar(int index) {
40 CrashedExtensionInfoBarDelegate* infobar = 38 ConfirmInfoBarDelegate* infobar = GetInfoBarDelegate(index);
41 GetCrashedExtensionInfoBarDelegate(index);
42 ASSERT_TRUE(infobar); 39 ASSERT_TRUE(infobar);
43 infobar->Accept(); 40 infobar->Accept();
44 WaitForExtensionLoad(); 41 WaitForExtensionLoad();
45 } 42 }
46 43
47 void CancelCrashedExtensionInfobar(int index) { 44 void CancelInfoBar(int index) {
48 CrashedExtensionInfoBarDelegate* infobar = 45 ConfirmInfoBarDelegate* infobar = GetInfoBarDelegate(index);
49 GetCrashedExtensionInfoBarDelegate(index);
50 ASSERT_TRUE(infobar); 46 ASSERT_TRUE(infobar);
51 infobar->Cancel(); 47 infobar->Cancel();
52 } 48 }
53 49
54 void CrashExtension(size_t index) { 50 void CrashExtension(size_t index) {
55 ASSERT_LT(index, GetExtensionService()->extensions()->size()); 51 ASSERT_LT(index, GetExtensionService()->extensions()->size());
56 const Extension* extension = 52 const Extension* extension =
57 GetExtensionService()->extensions()->at(index); 53 GetExtensionService()->extensions()->at(index);
58 ASSERT_TRUE(extension); 54 ASSERT_TRUE(extension);
59 std::string extension_id(extension->id()); 55 std::string extension_id(extension->id());
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 107
112 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, Basic) { 108 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, Basic) {
113 const size_t size_before = GetExtensionService()->extensions()->size(); 109 const size_t size_before = GetExtensionService()->extensions()->size();
114 const size_t crash_size_before = 110 const size_t crash_size_before =
115 GetExtensionService()->terminated_extensions()->size(); 111 GetExtensionService()->terminated_extensions()->size();
116 LoadTestExtension(); 112 LoadTestExtension();
117 CrashExtension(size_before); 113 CrashExtension(size_before);
118 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 114 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size());
119 ASSERT_EQ(crash_size_before + 1, 115 ASSERT_EQ(crash_size_before + 1,
120 GetExtensionService()->terminated_extensions()->size()); 116 GetExtensionService()->terminated_extensions()->size());
121 AcceptCrashedExtensionInfobar(0); 117 AcceptInfoBar(0);
122 118
123 SCOPED_TRACE("after clicking the infobar"); 119 SCOPED_TRACE("after clicking the infobar");
124 CheckExtensionConsistency(size_before); 120 CheckExtensionConsistency(size_before);
125 ASSERT_EQ(crash_size_before, 121 ASSERT_EQ(crash_size_before,
126 GetExtensionService()->terminated_extensions()->size()); 122 GetExtensionService()->terminated_extensions()->size());
127 } 123 }
128 124
129 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, CloseAndReload) { 125 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, CloseAndReload) {
130 const size_t size_before = GetExtensionService()->extensions()->size(); 126 const size_t size_before = GetExtensionService()->extensions()->size();
131 const size_t crash_size_before = 127 const size_t crash_size_before =
132 GetExtensionService()->terminated_extensions()->size(); 128 GetExtensionService()->terminated_extensions()->size();
133 LoadTestExtension(); 129 LoadTestExtension();
134 CrashExtension(size_before); 130 CrashExtension(size_before);
135 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 131 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size());
136 ASSERT_EQ(crash_size_before + 1, 132 ASSERT_EQ(crash_size_before + 1,
137 GetExtensionService()->terminated_extensions()->size()); 133 GetExtensionService()->terminated_extensions()->size());
138 134
139 CancelCrashedExtensionInfobar(0); 135 CancelInfoBar(0);
140 ReloadExtension(first_extension_id_); 136 ReloadExtension(first_extension_id_);
141 137
142 SCOPED_TRACE("after reloading"); 138 SCOPED_TRACE("after reloading");
143 CheckExtensionConsistency(size_before); 139 CheckExtensionConsistency(size_before);
144 ASSERT_EQ(crash_size_before, 140 ASSERT_EQ(crash_size_before,
145 GetExtensionService()->terminated_extensions()->size()); 141 GetExtensionService()->terminated_extensions()->size());
146 } 142 }
147 143
148 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, ReloadIndependently) { 144 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, ReloadIndependently) {
149 const size_t size_before = GetExtensionService()->extensions()->size(); 145 const size_t size_before = GetExtensionService()->extensions()->size();
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 CrashExtension(size_before); 295 CrashExtension(size_before);
300 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 296 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size());
301 } 297 }
302 298
303 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, TwoExtensionsCrashFirst) { 299 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, TwoExtensionsCrashFirst) {
304 const size_t size_before = GetExtensionService()->extensions()->size(); 300 const size_t size_before = GetExtensionService()->extensions()->size();
305 LoadTestExtension(); 301 LoadTestExtension();
306 LoadSecondExtension(); 302 LoadSecondExtension();
307 CrashExtension(size_before); 303 CrashExtension(size_before);
308 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size()); 304 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size());
309 AcceptCrashedExtensionInfobar(0); 305 AcceptInfoBar(0);
310 306
311 SCOPED_TRACE("after clicking the infobar"); 307 SCOPED_TRACE("after clicking the infobar");
312 CheckExtensionConsistency(size_before); 308 CheckExtensionConsistency(size_before);
313 CheckExtensionConsistency(size_before + 1); 309 CheckExtensionConsistency(size_before + 1);
314 } 310 }
315 311
316 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, TwoExtensionsCrashSecond) { 312 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, TwoExtensionsCrashSecond) {
317 const size_t size_before = GetExtensionService()->extensions()->size(); 313 const size_t size_before = GetExtensionService()->extensions()->size();
318 LoadTestExtension(); 314 LoadTestExtension();
319 LoadSecondExtension(); 315 LoadSecondExtension();
320 CrashExtension(size_before + 1); 316 CrashExtension(size_before + 1);
321 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size()); 317 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size());
322 AcceptCrashedExtensionInfobar(0); 318 AcceptInfoBar(0);
323 319
324 SCOPED_TRACE("after clicking the infobar"); 320 SCOPED_TRACE("after clicking the infobar");
325 CheckExtensionConsistency(size_before); 321 CheckExtensionConsistency(size_before);
326 CheckExtensionConsistency(size_before + 1); 322 CheckExtensionConsistency(size_before + 1);
327 } 323 }
328 324
329 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, 325 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest,
330 TwoExtensionsCrashBothAtOnce) { 326 TwoExtensionsCrashBothAtOnce) {
331 const size_t size_before = GetExtensionService()->extensions()->size(); 327 const size_t size_before = GetExtensionService()->extensions()->size();
332 const size_t crash_size_before = 328 const size_t crash_size_before =
333 GetExtensionService()->terminated_extensions()->size(); 329 GetExtensionService()->terminated_extensions()->size();
334 LoadTestExtension(); 330 LoadTestExtension();
335 LoadSecondExtension(); 331 LoadSecondExtension();
336 CrashExtension(size_before); 332 CrashExtension(size_before);
337 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size()); 333 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size());
338 ASSERT_EQ(crash_size_before + 1, 334 ASSERT_EQ(crash_size_before + 1,
339 GetExtensionService()->terminated_extensions()->size()); 335 GetExtensionService()->terminated_extensions()->size());
340 CrashExtension(size_before); 336 CrashExtension(size_before);
341 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 337 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size());
342 ASSERT_EQ(crash_size_before + 2, 338 ASSERT_EQ(crash_size_before + 2,
343 GetExtensionService()->terminated_extensions()->size()); 339 GetExtensionService()->terminated_extensions()->size());
344 340
345 { 341 {
346 SCOPED_TRACE("first infobar"); 342 SCOPED_TRACE("first infobar");
347 AcceptCrashedExtensionInfobar(0); 343 AcceptInfoBar(0);
348 CheckExtensionConsistency(size_before); 344 CheckExtensionConsistency(size_before);
349 } 345 }
350 346
351 { 347 {
352 SCOPED_TRACE("second infobar"); 348 SCOPED_TRACE("second infobar");
353 AcceptCrashedExtensionInfobar(0); 349 AcceptInfoBar(0);
354 CheckExtensionConsistency(size_before); 350 CheckExtensionConsistency(size_before);
355 CheckExtensionConsistency(size_before + 1); 351 CheckExtensionConsistency(size_before + 1);
356 } 352 }
357 } 353 }
358 354
359 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, TwoExtensionsOneByOne) { 355 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, TwoExtensionsOneByOne) {
360 const size_t size_before = GetExtensionService()->extensions()->size(); 356 const size_t size_before = GetExtensionService()->extensions()->size();
361 LoadTestExtension(); 357 LoadTestExtension();
362 CrashExtension(size_before); 358 CrashExtension(size_before);
363 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 359 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size());
364 LoadSecondExtension(); 360 LoadSecondExtension();
365 CrashExtension(size_before); 361 CrashExtension(size_before);
366 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 362 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size());
367 363
368 { 364 {
369 SCOPED_TRACE("first infobar"); 365 SCOPED_TRACE("first infobar");
370 AcceptCrashedExtensionInfobar(0); 366 AcceptInfoBar(0);
371 CheckExtensionConsistency(size_before); 367 CheckExtensionConsistency(size_before);
372 } 368 }
373 369
374 { 370 {
375 SCOPED_TRACE("second infobar"); 371 SCOPED_TRACE("second infobar");
376 AcceptCrashedExtensionInfobar(0); 372 AcceptInfoBar(0);
377 CheckExtensionConsistency(size_before); 373 CheckExtensionConsistency(size_before);
378 CheckExtensionConsistency(size_before + 1); 374 CheckExtensionConsistency(size_before + 1);
379 } 375 }
380 } 376 }
381 377
382 // Make sure that when we don't do anything about the crashed extensions 378 // Make sure that when we don't do anything about the crashed extensions
383 // and close the browser, it doesn't crash. The browser is closed implicitly 379 // and close the browser, it doesn't crash. The browser is closed implicitly
384 // at the end of each browser test. 380 // at the end of each browser test.
385 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, 381 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest,
386 TwoExtensionsShutdownWhileCrashed) { 382 TwoExtensionsShutdownWhileCrashed) {
387 const size_t size_before = GetExtensionService()->extensions()->size(); 383 const size_t size_before = GetExtensionService()->extensions()->size();
388 LoadTestExtension(); 384 LoadTestExtension();
389 CrashExtension(size_before); 385 CrashExtension(size_before);
390 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 386 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size());
391 LoadSecondExtension(); 387 LoadSecondExtension();
392 CrashExtension(size_before); 388 CrashExtension(size_before);
393 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 389 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size());
394 } 390 }
395 391
396 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, 392 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest,
397 TwoExtensionsIgnoreFirst) { 393 TwoExtensionsIgnoreFirst) {
398 const size_t size_before = GetExtensionService()->extensions()->size(); 394 const size_t size_before = GetExtensionService()->extensions()->size();
399 LoadTestExtension(); 395 LoadTestExtension();
400 LoadSecondExtension(); 396 LoadSecondExtension();
401 CrashExtension(size_before); 397 CrashExtension(size_before);
402 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size()); 398 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size());
403 CrashExtension(size_before); 399 CrashExtension(size_before);
404 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 400 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size());
405 401
406 CancelCrashedExtensionInfobar(0); 402 CancelInfoBar(0);
407 AcceptCrashedExtensionInfobar(1); 403 AcceptInfoBar(1);
408 404
409 SCOPED_TRACE("infobars done"); 405 SCOPED_TRACE("infobars done");
410 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size()); 406 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size());
411 CheckExtensionConsistency(size_before); 407 CheckExtensionConsistency(size_before);
412 } 408 }
413 409
414 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, 410 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest,
415 TwoExtensionsReloadIndependently) { 411 TwoExtensionsReloadIndependently) {
416 const size_t size_before = GetExtensionService()->extensions()->size(); 412 const size_t size_before = GetExtensionService()->extensions()->size();
417 LoadTestExtension(); 413 LoadTestExtension();
(...skipping 10 matching lines...) Expand all
428 // At the beginning we should have one infobar displayed for each extension. 424 // At the beginning we should have one infobar displayed for each extension.
429 ASSERT_EQ(2, current_tab->infobar_delegate_count()); 425 ASSERT_EQ(2, current_tab->infobar_delegate_count());
430 ReloadExtension(first_extension_id_); 426 ReloadExtension(first_extension_id_);
431 // One of the infobars should hide after the extension is reloaded. 427 // One of the infobars should hide after the extension is reloaded.
432 ASSERT_EQ(1, current_tab->infobar_delegate_count()); 428 ASSERT_EQ(1, current_tab->infobar_delegate_count());
433 CheckExtensionConsistency(size_before); 429 CheckExtensionConsistency(size_before);
434 } 430 }
435 431
436 { 432 {
437 SCOPED_TRACE("second: infobar"); 433 SCOPED_TRACE("second: infobar");
438 AcceptCrashedExtensionInfobar(0); 434 AcceptInfoBar(0);
439 CheckExtensionConsistency(size_before); 435 CheckExtensionConsistency(size_before);
440 CheckExtensionConsistency(size_before + 1); 436 CheckExtensionConsistency(size_before + 1);
441 } 437 }
442 } 438 }
443 439
444 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, CrashAndUnloadAll) { 440 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, CrashAndUnloadAll) {
445 const size_t size_before = GetExtensionService()->extensions()->size(); 441 const size_t size_before = GetExtensionService()->extensions()->size();
446 const size_t crash_size_before = 442 const size_t crash_size_before =
447 GetExtensionService()->terminated_extensions()->size(); 443 GetExtensionService()->terminated_extensions()->size();
448 LoadTestExtension(); 444 LoadTestExtension();
449 LoadSecondExtension(); 445 LoadSecondExtension();
450 CrashExtension(size_before); 446 CrashExtension(size_before);
451 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size()); 447 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size());
452 ASSERT_EQ(crash_size_before + 1, 448 ASSERT_EQ(crash_size_before + 1,
453 GetExtensionService()->terminated_extensions()->size()); 449 GetExtensionService()->terminated_extensions()->size());
454 450
455 GetExtensionService()->UnloadAllExtensions(); 451 GetExtensionService()->UnloadAllExtensions();
456 ASSERT_EQ(crash_size_before, 452 ASSERT_EQ(crash_size_before,
457 GetExtensionService()->terminated_extensions()->size()); 453 GetExtensionService()->terminated_extensions()->size());
458 } 454 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698