OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "chrome/browser/ui/sad_tab_helper.h" | |
6 | |
7 #include "base/logging.h" | |
8 #include "chrome/browser/browser_shutdown.h" | |
9 #include "chrome/browser/ui/sad_tab.h" | |
10 #include "content/public/browser/web_contents.h" | |
11 | |
12 DEFINE_WEB_CONTENTS_USER_DATA_KEY(SadTabHelper); | |
13 | |
14 SadTabHelper::~SadTabHelper() { | |
15 } | |
16 | |
17 SadTabHelper::SadTabHelper(content::WebContents* web_contents) | |
18 : content::WebContentsObserver(web_contents) { | |
19 } | |
20 | |
21 void SadTabHelper::RenderViewReady() { | |
22 if (sad_tab_) { | |
23 sad_tab_->Close(); | |
24 sad_tab_.reset(); | |
25 } | |
26 } | |
27 | |
28 void SadTabHelper::RenderProcessGone(base::TerminationStatus status) { | |
29 // Only show the sad tab if we're not in browser shutdown, so that WebContents | |
30 // objects that are not in a browser (e.g., HTML dialogs) and thus are | |
31 // visible do not flash a sad tab page. | |
32 if (browser_shutdown::GetShutdownType() != browser_shutdown::NOT_VALID) | |
33 return; | |
34 | |
35 if (sad_tab_) | |
36 return; | |
37 | |
38 if (chrome::SadTab::ShouldShow(status)) | |
39 InstallSadTab(status); | |
40 } | |
41 | |
42 void SadTabHelper::InstallSadTab(base::TerminationStatus status) { | |
43 chrome::SadTabKind kind = | |
44 (status == base::TERMINATION_STATUS_PROCESS_WAS_KILLED) ? | |
45 chrome::SAD_TAB_KIND_KILLED : chrome::SAD_TAB_KIND_CRASHED; | |
46 sad_tab_.reset(chrome::SadTab::Create(web_contents(), kind)); | |
47 sad_tab_->Show(); | |
48 } | |
OLD | NEW |