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
12DEFINE_WEB_CONTENTS_USER_DATA_KEY(SadTabHelper);
13
14SadTabHelper::~SadTabHelper() {
15}
16
17SadTabHelper::SadTabHelper(content::WebContents* web_contents)
18    : content::WebContentsObserver(web_contents) {
19}
20
21void SadTabHelper::RenderViewReady() {
22  if (sad_tab_) {
23    sad_tab_->Close();
24    sad_tab_.reset();
25  }
26}
27
28void 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
42void 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}
49