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

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 CancelCrashedExtensionInfobar(0);
136 CancelInfoBar(0);
140 ReloadExtension(first_extension_id_); 137 ReloadExtension(first_extension_id_);
141 138
142 SCOPED_TRACE("after reloading"); 139 SCOPED_TRACE("after reloading");
143 CheckExtensionConsistency(size_before); 140 CheckExtensionConsistency(size_before);
144 ASSERT_EQ(crash_size_before, 141 ASSERT_EQ(crash_size_before,
145 GetExtensionService()->terminated_extensions()->size()); 142 GetExtensionService()->terminated_extensions()->size());
146 } 143 }
147 144
148 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, ReloadIndependently) { 145 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, ReloadIndependently) {
149 const size_t size_before = GetExtensionService()->extensions()->size(); 146 const size_t size_before = GetExtensionService()->extensions()->size();
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
299 CrashExtension(size_before); 296 CrashExtension(size_before);
300 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 297 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size());
301 } 298 }
302 299
303 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, TwoExtensionsCrashFirst) { 300 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, TwoExtensionsCrashFirst) {
304 const size_t size_before = GetExtensionService()->extensions()->size(); 301 const size_t size_before = GetExtensionService()->extensions()->size();
305 LoadTestExtension(); 302 LoadTestExtension();
306 LoadSecondExtension(); 303 LoadSecondExtension();
307 CrashExtension(size_before); 304 CrashExtension(size_before);
308 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size()); 305 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size());
309 AcceptCrashedExtensionInfobar(0); 306 AcceptInfoBar(0);
310 307
311 SCOPED_TRACE("after clicking the infobar"); 308 SCOPED_TRACE("after clicking the infobar");
312 CheckExtensionConsistency(size_before); 309 CheckExtensionConsistency(size_before);
313 CheckExtensionConsistency(size_before + 1); 310 CheckExtensionConsistency(size_before + 1);
314 } 311 }
315 312
316 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, TwoExtensionsCrashSecond) { 313 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, TwoExtensionsCrashSecond) {
317 const size_t size_before = GetExtensionService()->extensions()->size(); 314 const size_t size_before = GetExtensionService()->extensions()->size();
318 LoadTestExtension(); 315 LoadTestExtension();
319 LoadSecondExtension(); 316 LoadSecondExtension();
320 CrashExtension(size_before + 1); 317 CrashExtension(size_before + 1);
321 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size()); 318 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size());
322 AcceptCrashedExtensionInfobar(0); 319 AcceptInfoBar(0);
323 320
324 SCOPED_TRACE("after clicking the infobar"); 321 SCOPED_TRACE("after clicking the infobar");
325 CheckExtensionConsistency(size_before); 322 CheckExtensionConsistency(size_before);
326 CheckExtensionConsistency(size_before + 1); 323 CheckExtensionConsistency(size_before + 1);
327 } 324 }
328 325
329 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, 326 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest,
330 TwoExtensionsCrashBothAtOnce) { 327 TwoExtensionsCrashBothAtOnce) {
331 const size_t size_before = GetExtensionService()->extensions()->size(); 328 const size_t size_before = GetExtensionService()->extensions()->size();
332 const size_t crash_size_before = 329 const size_t crash_size_before =
333 GetExtensionService()->terminated_extensions()->size(); 330 GetExtensionService()->terminated_extensions()->size();
334 LoadTestExtension(); 331 LoadTestExtension();
335 LoadSecondExtension(); 332 LoadSecondExtension();
336 CrashExtension(size_before); 333 CrashExtension(size_before);
337 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size()); 334 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size());
338 ASSERT_EQ(crash_size_before + 1, 335 ASSERT_EQ(crash_size_before + 1,
339 GetExtensionService()->terminated_extensions()->size()); 336 GetExtensionService()->terminated_extensions()->size());
340 CrashExtension(size_before); 337 CrashExtension(size_before);
341 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 338 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size());
342 ASSERT_EQ(crash_size_before + 2, 339 ASSERT_EQ(crash_size_before + 2,
343 GetExtensionService()->terminated_extensions()->size()); 340 GetExtensionService()->terminated_extensions()->size());
344 341
345 { 342 {
346 SCOPED_TRACE("first infobar"); 343 SCOPED_TRACE("first infobar");
347 AcceptCrashedExtensionInfobar(0); 344 AcceptInfoBar(0);
348 CheckExtensionConsistency(size_before); 345 CheckExtensionConsistency(size_before);
349 } 346 }
350 347
351 { 348 {
352 SCOPED_TRACE("second infobar"); 349 SCOPED_TRACE("second infobar");
353 AcceptCrashedExtensionInfobar(0); 350 AcceptInfoBar(0);
354 CheckExtensionConsistency(size_before); 351 CheckExtensionConsistency(size_before);
355 CheckExtensionConsistency(size_before + 1); 352 CheckExtensionConsistency(size_before + 1);
356 } 353 }
357 } 354 }
358 355
359 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, TwoExtensionsOneByOne) { 356 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, TwoExtensionsOneByOne) {
360 const size_t size_before = GetExtensionService()->extensions()->size(); 357 const size_t size_before = GetExtensionService()->extensions()->size();
361 LoadTestExtension(); 358 LoadTestExtension();
362 CrashExtension(size_before); 359 CrashExtension(size_before);
363 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 360 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size());
364 LoadSecondExtension(); 361 LoadSecondExtension();
365 CrashExtension(size_before); 362 CrashExtension(size_before);
366 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 363 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size());
367 364
368 { 365 {
369 SCOPED_TRACE("first infobar"); 366 SCOPED_TRACE("first infobar");
370 AcceptCrashedExtensionInfobar(0); 367 AcceptInfoBar(0);
371 CheckExtensionConsistency(size_before); 368 CheckExtensionConsistency(size_before);
372 } 369 }
373 370
374 { 371 {
375 SCOPED_TRACE("second infobar"); 372 SCOPED_TRACE("second infobar");
376 AcceptCrashedExtensionInfobar(0); 373 AcceptInfoBar(0);
377 CheckExtensionConsistency(size_before); 374 CheckExtensionConsistency(size_before);
378 CheckExtensionConsistency(size_before + 1); 375 CheckExtensionConsistency(size_before + 1);
379 } 376 }
380 } 377 }
381 378
382 // Make sure that when we don't do anything about the crashed extensions 379 // 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 380 // and close the browser, it doesn't crash. The browser is closed implicitly
384 // at the end of each browser test. 381 // at the end of each browser test.
385 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, 382 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest,
386 TwoExtensionsShutdownWhileCrashed) { 383 TwoExtensionsShutdownWhileCrashed) {
387 const size_t size_before = GetExtensionService()->extensions()->size(); 384 const size_t size_before = GetExtensionService()->extensions()->size();
388 LoadTestExtension(); 385 LoadTestExtension();
389 CrashExtension(size_before); 386 CrashExtension(size_before);
390 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 387 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size());
391 LoadSecondExtension(); 388 LoadSecondExtension();
392 CrashExtension(size_before); 389 CrashExtension(size_before);
393 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 390 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size());
394 } 391 }
395 392
396 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, 393 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest,
397 TwoExtensionsIgnoreFirst) { 394 TwoExtensionsIgnoreFirst) {
398 const size_t size_before = GetExtensionService()->extensions()->size(); 395 const size_t size_before = GetExtensionService()->extensions()->size();
399 LoadTestExtension(); 396 LoadTestExtension();
400 LoadSecondExtension(); 397 LoadSecondExtension();
401 CrashExtension(size_before); 398 CrashExtension(size_before);
402 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size()); 399 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size());
403 CrashExtension(size_before); 400 CrashExtension(size_before);
404 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size()); 401 ASSERT_EQ(size_before, GetExtensionService()->extensions()->size());
405 402
406 CancelCrashedExtensionInfobar(0); 403 CancelInfoBar(0);
407 AcceptCrashedExtensionInfobar(1); 404 AcceptInfoBar(1);
408 405
409 SCOPED_TRACE("infobars done"); 406 SCOPED_TRACE("infobars done");
410 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size()); 407 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size());
411 CheckExtensionConsistency(size_before); 408 CheckExtensionConsistency(size_before);
412 } 409 }
413 410
414 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, 411 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest,
415 TwoExtensionsReloadIndependently) { 412 TwoExtensionsReloadIndependently) {
416 const size_t size_before = GetExtensionService()->extensions()->size(); 413 const size_t size_before = GetExtensionService()->extensions()->size();
417 LoadTestExtension(); 414 LoadTestExtension();
(...skipping 10 matching lines...) Expand all
428 // At the beginning we should have one infobar displayed for each extension. 425 // At the beginning we should have one infobar displayed for each extension.
429 ASSERT_EQ(2, current_tab->infobar_delegate_count()); 426 ASSERT_EQ(2, current_tab->infobar_delegate_count());
430 ReloadExtension(first_extension_id_); 427 ReloadExtension(first_extension_id_);
431 // One of the infobars should hide after the extension is reloaded. 428 // One of the infobars should hide after the extension is reloaded.
432 ASSERT_EQ(1, current_tab->infobar_delegate_count()); 429 ASSERT_EQ(1, current_tab->infobar_delegate_count());
433 CheckExtensionConsistency(size_before); 430 CheckExtensionConsistency(size_before);
434 } 431 }
435 432
436 { 433 {
437 SCOPED_TRACE("second: infobar"); 434 SCOPED_TRACE("second: infobar");
438 AcceptCrashedExtensionInfobar(0); 435 AcceptInfoBar(0);
439 CheckExtensionConsistency(size_before); 436 CheckExtensionConsistency(size_before);
440 CheckExtensionConsistency(size_before + 1); 437 CheckExtensionConsistency(size_before + 1);
441 } 438 }
442 } 439 }
443 440
444 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, CrashAndUnloadAll) { 441 IN_PROC_BROWSER_TEST_F(ExtensionCrashRecoveryTest, CrashAndUnloadAll) {
445 const size_t size_before = GetExtensionService()->extensions()->size(); 442 const size_t size_before = GetExtensionService()->extensions()->size();
446 const size_t crash_size_before = 443 const size_t crash_size_before =
447 GetExtensionService()->terminated_extensions()->size(); 444 GetExtensionService()->terminated_extensions()->size();
448 LoadTestExtension(); 445 LoadTestExtension();
449 LoadSecondExtension(); 446 LoadSecondExtension();
450 CrashExtension(size_before); 447 CrashExtension(size_before);
451 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size()); 448 ASSERT_EQ(size_before + 1, GetExtensionService()->extensions()->size());
452 ASSERT_EQ(crash_size_before + 1, 449 ASSERT_EQ(crash_size_before + 1,
453 GetExtensionService()->terminated_extensions()->size()); 450 GetExtensionService()->terminated_extensions()->size());
454 451
455 GetExtensionService()->UnloadAllExtensions(); 452 GetExtensionService()->UnloadAllExtensions();
456 ASSERT_EQ(crash_size_before, 453 ASSERT_EQ(crash_size_before,
457 GetExtensionService()->terminated_extensions()->size()); 454 GetExtensionService()->terminated_extensions()->size());
458 } 455 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698