OLD | NEW |
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/command_line.h" | 5 #include "base/command_line.h" |
6 #include "chrome/browser/chrome_notification_types.h" | 6 #include "chrome/browser/chrome_notification_types.h" |
7 #include "chrome/browser/devtools/devtools_window.h" | 7 #include "chrome/browser/devtools/devtools_window.h" |
8 #include "chrome/browser/search/search.h" | 8 #include "chrome/browser/search/search.h" |
9 #include "chrome/browser/ui/browser.h" | 9 #include "chrome/browser/ui/browser.h" |
10 #include "chrome/browser/ui/browser_commands.h" | 10 #include "chrome/browser/ui/browser_commands.h" |
(...skipping 23 matching lines...) Expand all Loading... |
34 content::RenderProcessHost::AllHostsIterator(); | 34 content::RenderProcessHost::AllHostsIterator(); |
35 int count = 0; | 35 int count = 0; |
36 while (!hosts.IsAtEnd()) { | 36 while (!hosts.IsAtEnd()) { |
37 if (hosts.GetCurrentValue()->HasConnection()) | 37 if (hosts.GetCurrentValue()->HasConnection()) |
38 count++; | 38 count++; |
39 hosts.Advance(); | 39 hosts.Advance(); |
40 } | 40 } |
41 return count; | 41 return count; |
42 } | 42 } |
43 | 43 |
44 RenderViewHost* FindFirstDevToolsHost() { | 44 WebContents* FindFirstDevToolsContents() { |
45 scoped_ptr<content::RenderWidgetHostIterator> widgets( | 45 scoped_ptr<content::RenderWidgetHostIterator> widgets( |
46 RenderWidgetHost::GetRenderWidgetHosts()); | 46 RenderWidgetHost::GetRenderWidgetHosts()); |
47 while (content::RenderWidgetHost* widget = widgets->GetNextHost()) { | 47 while (content::RenderWidgetHost* widget = widgets->GetNextHost()) { |
48 if (!widget->GetProcess()->HasConnection()) | 48 if (!widget->GetProcess()->HasConnection()) |
49 continue; | 49 continue; |
50 if (!widget->IsRenderView()) | 50 if (!widget->IsRenderView()) |
51 continue; | 51 continue; |
52 RenderViewHost* host = RenderViewHost::From(widget); | 52 RenderViewHost* host = RenderViewHost::From(widget); |
53 WebContents* contents = WebContents::FromRenderViewHost(host); | 53 WebContents* contents = WebContents::FromRenderViewHost(host); |
54 GURL url = contents->GetURL(); | 54 GURL url = contents->GetURL(); |
55 if (url.SchemeIs(content::kChromeDevToolsScheme)) | 55 if (url.SchemeIs(content::kChromeDevToolsScheme)) |
56 return host; | 56 return contents; |
57 } | 57 } |
58 return NULL; | 58 return NULL; |
59 } | 59 } |
60 | 60 |
61 } // namespace | 61 } // namespace |
62 | 62 |
63 class ChromeRenderProcessHostTest : public InProcessBrowserTest { | 63 class ChromeRenderProcessHostTest : public InProcessBrowserTest { |
64 public: | 64 public: |
65 ChromeRenderProcessHostTest() {} | 65 ChromeRenderProcessHostTest() {} |
66 | 66 |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 host_count++; | 361 host_count++; |
362 EXPECT_EQ(tab_count, browser()->tab_strip_model()->count()); | 362 EXPECT_EQ(tab_count, browser()->tab_strip_model()->count()); |
363 EXPECT_EQ(host_count, RenderProcessHostCount()); | 363 EXPECT_EQ(host_count, RenderProcessHostCount()); |
364 | 364 |
365 // DevTools start in docked mode (no new tab), in a separate process. | 365 // DevTools start in docked mode (no new tab), in a separate process. |
366 chrome::ToggleDevToolsWindow(browser(), DevToolsToggleAction::Inspect()); | 366 chrome::ToggleDevToolsWindow(browser(), DevToolsToggleAction::Inspect()); |
367 host_count++; | 367 host_count++; |
368 EXPECT_EQ(tab_count, browser()->tab_strip_model()->count()); | 368 EXPECT_EQ(tab_count, browser()->tab_strip_model()->count()); |
369 EXPECT_EQ(host_count, RenderProcessHostCount()); | 369 EXPECT_EQ(host_count, RenderProcessHostCount()); |
370 | 370 |
371 RenderViewHost* devtools = FindFirstDevToolsHost(); | 371 WebContents* devtools = FindFirstDevToolsContents(); |
372 DCHECK(devtools); | 372 DCHECK(devtools); |
373 | 373 |
374 // DevTools start in a separate process. | 374 // DevTools start in a separate process. |
375 DevToolsWindow::OpenDevToolsWindow(devtools, DevToolsToggleAction::Inspect()); | 375 DevToolsWindow::OpenDevToolsWindow(devtools, DevToolsToggleAction::Inspect()); |
376 host_count++; | 376 host_count++; |
377 EXPECT_EQ(tab_count, browser()->tab_strip_model()->count()); | 377 EXPECT_EQ(tab_count, browser()->tab_strip_model()->count()); |
378 EXPECT_EQ(host_count, RenderProcessHostCount()); | 378 EXPECT_EQ(host_count, RenderProcessHostCount()); |
379 | 379 |
380 // close docked devtools | 380 // close docked devtools |
381 content::WindowedNotificationObserver close_observer( | 381 content::WindowedNotificationObserver close_observer( |
382 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, | 382 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, |
383 content::Source<WebContents>(WebContents::FromRenderViewHost(devtools))); | 383 content::Source<WebContents>(devtools)); |
384 | 384 |
385 chrome::ToggleDevToolsWindow(browser(), DevToolsToggleAction::Toggle()); | 385 chrome::ToggleDevToolsWindow(browser(), DevToolsToggleAction::Toggle()); |
386 close_observer.Wait(); | 386 close_observer.Wait(); |
387 } | 387 } |
388 | 388 |
389 // Ensure that DevTools opened to debug DevTools is launched in a separate | 389 // Ensure that DevTools opened to debug DevTools is launched in a separate |
390 // process. See crbug.com/69873. | 390 // process. See crbug.com/69873. |
391 IN_PROC_BROWSER_TEST_F(ChromeRenderProcessHostTest, | 391 IN_PROC_BROWSER_TEST_F(ChromeRenderProcessHostTest, |
392 DevToolsOnSelfInOwnProcess) { | 392 DevToolsOnSelfInOwnProcess) { |
393 #if defined(OS_WIN) && defined(USE_ASH) | 393 #if defined(OS_WIN) && defined(USE_ASH) |
(...skipping 14 matching lines...) Expand all Loading... |
408 host_count++; | 408 host_count++; |
409 EXPECT_EQ(tab_count, browser()->tab_strip_model()->count()); | 409 EXPECT_EQ(tab_count, browser()->tab_strip_model()->count()); |
410 EXPECT_EQ(host_count, RenderProcessHostCount()); | 410 EXPECT_EQ(host_count, RenderProcessHostCount()); |
411 | 411 |
412 // DevTools start in docked mode (no new tab), in a separate process. | 412 // DevTools start in docked mode (no new tab), in a separate process. |
413 chrome::ToggleDevToolsWindow(browser(), DevToolsToggleAction::Inspect()); | 413 chrome::ToggleDevToolsWindow(browser(), DevToolsToggleAction::Inspect()); |
414 host_count++; | 414 host_count++; |
415 EXPECT_EQ(tab_count, browser()->tab_strip_model()->count()); | 415 EXPECT_EQ(tab_count, browser()->tab_strip_model()->count()); |
416 EXPECT_EQ(host_count, RenderProcessHostCount()); | 416 EXPECT_EQ(host_count, RenderProcessHostCount()); |
417 | 417 |
418 RenderViewHost* devtools = FindFirstDevToolsHost(); | 418 WebContents* devtools = FindFirstDevToolsContents(); |
419 DCHECK(devtools); | 419 DCHECK(devtools); |
420 | 420 |
421 // DevTools start in a separate process. | 421 // DevTools start in a separate process. |
422 DevToolsWindow::OpenDevToolsWindow(devtools, DevToolsToggleAction::Inspect()); | 422 DevToolsWindow::OpenDevToolsWindow(devtools, DevToolsToggleAction::Inspect()); |
423 host_count++; | 423 host_count++; |
424 EXPECT_EQ(tab_count, browser()->tab_strip_model()->count()); | 424 EXPECT_EQ(tab_count, browser()->tab_strip_model()->count()); |
425 EXPECT_EQ(host_count, RenderProcessHostCount()); | 425 EXPECT_EQ(host_count, RenderProcessHostCount()); |
426 | 426 |
427 // close docked devtools | 427 // close docked devtools |
428 content::WindowedNotificationObserver close_observer( | 428 content::WindowedNotificationObserver close_observer( |
429 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, | 429 content::NOTIFICATION_WEB_CONTENTS_DESTROYED, |
430 content::Source<content::WebContents>( | 430 content::Source<content::WebContents>(devtools)); |
431 WebContents::FromRenderViewHost(devtools))); | |
432 chrome::ToggleDevToolsWindow(browser(), DevToolsToggleAction::Toggle()); | 431 chrome::ToggleDevToolsWindow(browser(), DevToolsToggleAction::Toggle()); |
433 close_observer.Wait(); | 432 close_observer.Wait(); |
434 } | 433 } |
435 | 434 |
436 // This class's goal is to close the browser window when a renderer process has | 435 // This class's goal is to close the browser window when a renderer process has |
437 // crashed. It does so by monitoring WebContents for RenderProcessGone event and | 436 // crashed. It does so by monitoring WebContents for RenderProcessGone event and |
438 // closing the passed in TabStripModel. This is used in the following test case. | 437 // closing the passed in TabStripModel. This is used in the following test case. |
439 class WindowDestroyer : public content::WebContentsObserver { | 438 class WindowDestroyer : public content::WebContentsObserver { |
440 public: | 439 public: |
441 WindowDestroyer(content::WebContents* web_contents, TabStripModel* model) | 440 WindowDestroyer(content::WebContents* web_contents, TabStripModel* model) |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
488 chrome::NOTIFICATION_BROWSER_CLOSED, | 487 chrome::NOTIFICATION_BROWSER_CLOSED, |
489 content::NotificationService::AllSources()); | 488 content::NotificationService::AllSources()); |
490 | 489 |
491 // Kill the renderer process, simulating a crash. This should the ProcessDied | 490 // Kill the renderer process, simulating a crash. This should the ProcessDied |
492 // method to be called. Alternatively, RenderProcessHost::OnChannelError can | 491 // method to be called. Alternatively, RenderProcessHost::OnChannelError can |
493 // be called to directly force a call to ProcessDied. | 492 // be called to directly force a call to ProcessDied. |
494 base::KillProcess(wc1->GetRenderProcessHost()->GetHandle(), -1, true); | 493 base::KillProcess(wc1->GetRenderProcessHost()->GetHandle(), -1, true); |
495 | 494 |
496 observer.Wait(); | 495 observer.Wait(); |
497 } | 496 } |
OLD | NEW |