| Index: chrome/browser/ui/webui/hung_renderer_dialog.cc
|
| ===================================================================
|
| --- chrome/browser/ui/webui/hung_renderer_dialog.cc (revision 109988)
|
| +++ chrome/browser/ui/webui/hung_renderer_dialog.cc (working copy)
|
| @@ -35,7 +35,7 @@
|
|
|
| void ShowHungRendererDialog(TabContents* contents) {
|
| #if defined(OS_CHROMEOS) || defined(USE_AURA)
|
| - HungRendererDialog::ShowHungRendererDialog(contents, true);
|
| + HungRendererDialog::ShowHungRendererDialog(contents);
|
| #else
|
| // TODO(rbyers): Remove IsMoreWebUI check once we decide for sure which
|
| // platforms will use the WebUI version of this dialog.
|
| @@ -63,7 +63,12 @@
|
| // HungRendererDialog public static methods
|
|
|
| void HungRendererDialog::ShowHungRendererDialog(TabContents* contents) {
|
| - ShowHungRendererDialogInternal(contents, true);
|
| + if (!logging::DialogsAreSuppressed()) {
|
| + if (g_instance)
|
| + return;
|
| + g_instance = new HungRendererDialog();
|
| + g_instance->ShowDialog(contents);
|
| + }
|
| }
|
|
|
| void HungRendererDialog::HideHungRendererDialog(TabContents* contents) {
|
| @@ -71,49 +76,16 @@
|
| g_instance->HideDialog(contents);
|
| }
|
|
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// HungRendererDialog::TabContentsObserverImpl
|
|
|
| -HungRendererDialog::TabContentsObserverImpl::TabContentsObserverImpl(
|
| - HungRendererDialog* dialog,
|
| - TabContents* contents)
|
| - : TabContentsObserver(contents),
|
| - contents_(contents),
|
| - dialog_(dialog) {
|
| -}
|
| -
|
| -void HungRendererDialog::TabContentsObserverImpl::RenderViewGone() {
|
| - dialog_->HideDialog(contents_);
|
| -}
|
| -
|
| -void HungRendererDialog::TabContentsObserverImpl::TabContentsDestroyed(
|
| - TabContents* tab) {
|
| - dialog_->HideDialog(contents_);
|
| -}
|
| -
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // HungRendererDialog private methods
|
|
|
| -HungRendererDialog::HungRendererDialog(bool is_enabled)
|
| +HungRendererDialog::HungRendererDialog()
|
| : contents_(NULL),
|
| handler_(NULL),
|
| - is_enabled_(is_enabled),
|
| window_(NULL) {
|
| }
|
|
|
| -HungRendererDialog::~HungRendererDialog() {
|
| -}
|
| -
|
| -void HungRendererDialog::ShowHungRendererDialogInternal(TabContents* contents,
|
| - bool is_enabled) {
|
| - if (!logging::DialogsAreSuppressed()) {
|
| - if (g_instance)
|
| - return;
|
| - g_instance = new HungRendererDialog(is_enabled);
|
| - g_instance->ShowDialog(contents);
|
| - }
|
| -}
|
| -
|
| void HungRendererDialog::ShowDialog(TabContents* contents) {
|
| DCHECK(contents);
|
| contents_ = contents;
|
| @@ -121,7 +93,6 @@
|
| DCHECK(browser);
|
| handler_ = new HungRendererDialogHandler(contents_);
|
| window_ = browser->BrowserShowHtmlDialog(this, NULL);
|
| - contents_observer_.reset(new TabContentsObserverImpl(this, contents_));
|
| }
|
|
|
| void HungRendererDialog::HideDialog(TabContents* contents) {
|
| @@ -133,7 +104,6 @@
|
| // Settings |contents_| to NULL prevents the hang monitor from restarting.
|
| // We do this because the close dialog handler runs whether it is trigged by
|
| // the user closing the box, or by being closed externally with widget->Close.
|
| - contents_observer_.reset();
|
| contents_ = NULL;
|
| DCHECK(handler_);
|
| handler_->CloseDialog();
|
| @@ -165,27 +135,25 @@
|
| }
|
|
|
| void HungRendererDialog::OnDialogClosed(const std::string& json_retval) {
|
| - if (is_enabled_) {
|
| - // Figure out what the response was.
|
| - scoped_ptr<Value> root(base::JSONReader::Read(json_retval, false));
|
| - bool response = false;
|
| - ListValue* list = NULL;
|
| - // If the dialog closes because of a button click then the json is a list
|
| - // containing a single bool. If the dialog closes some other way, then we
|
| - // assume it means no permission was given to kill tabs.
|
| - if (root.get() && root->GetAsList(&list) && list &&
|
| - list->GetBoolean(0, &response) && response) {
|
| - // The user indicated that it is OK to kill the renderer process.
|
| - if (contents_ && contents_->GetRenderProcessHost()) {
|
| - base::KillProcess(contents_->GetRenderProcessHost()->GetHandle(),
|
| - content::RESULT_CODE_HUNG, false);
|
| - }
|
| - } else {
|
| - // No indication from the user that it is ok to kill anything. Just wait.
|
| - // Start waiting again for responsiveness.
|
| - if (contents_ && contents_->render_view_host())
|
| - contents_->render_view_host()->RestartHangMonitorTimeout();
|
| + // Figure out what the response was.
|
| + scoped_ptr<Value> root(base::JSONReader::Read(json_retval, false));
|
| + bool response = false;
|
| + ListValue* list = NULL;
|
| + // If the dialog closes because of a button click then the json is a list
|
| + // containing a single bool. If the dialog closes some other way, then we
|
| + // assume it means no permission was given to kill tabs.
|
| + if (root.get() && root->GetAsList(&list) && list &&
|
| + list->GetBoolean(0, &response) && response) {
|
| + // The user indicated that it is OK to kill the renderer process.
|
| + if (contents_ && contents_->GetRenderProcessHost()) {
|
| + base::KillProcess(contents_->GetRenderProcessHost()->GetHandle(),
|
| + content::RESULT_CODE_HUNG, false);
|
| }
|
| + } else {
|
| + // No indication from the user that it is ok to kill anything. Just wait.
|
| + // Start waiting again for responsiveness.
|
| + if (contents_ && contents_->render_view_host())
|
| + contents_->render_view_host()->RestartHangMonitorTimeout();
|
| }
|
| g_instance = NULL;
|
| delete this;
|
|
|