Index: chrome/browser/ui/webui/hung_renderer_dialog.cc |
diff --git a/chrome/browser/ui/webui/hung_renderer_dialog.cc b/chrome/browser/ui/webui/hung_renderer_dialog.cc |
index 590c79a844fc81d035c7dc83bedfd1d630bd7b08..530d7af2df2e051fdfab493d3404eabb0195c3e1 100644 |
--- a/chrome/browser/ui/webui/hung_renderer_dialog.cc |
+++ b/chrome/browser/ui/webui/hung_renderer_dialog.cc |
@@ -8,9 +8,11 @@ |
#include <vector> |
#include "base/json/json_reader.h" |
+#include "base/utf_string_conversions.h" |
#include "base/values.h" |
#include "chrome/browser/ui/browser.h" |
#include "chrome/browser/ui/browser_list.h" |
+#include "chrome/browser/ui/browser_dialogs.h" |
#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
#include "chrome/common/logging_chrome.h" |
#include "chrome/common/url_constants.h" |
@@ -30,11 +32,21 @@ const int kHungRendererDialogHeight = 200; |
namespace browser { |
void ShowHungRendererDialog(TabContents* contents) { |
- HungRendererDialog::ShowHungRendererDialog(contents); |
+ if (ChromeWebUI::IsMoreWebUI()) { |
+ HungRendererDialog::ShowHungRendererDialog(contents); |
+ return; |
+ } |
+ |
+ ShowNativeHungRendererDialog(contents); |
} |
void HideHungRendererDialog(TabContents* contents) { |
- HungRendererDialog::HideHungRendererDialog(contents); |
+ if (ChromeWebUI::IsMoreWebUI()) { |
+ HungRendererDialog::HideHungRendererDialog(contents); |
+ return; |
+ } |
+ |
+ HideNativeHungRendererDialog(contents); |
} |
} // namespace browser |
@@ -62,6 +74,7 @@ void HungRendererDialog::HideHungRendererDialog(TabContents* contents) { |
HungRendererDialog::HungRendererDialog() |
: contents_(NULL), |
+ handler_(NULL), |
window_(NULL) { |
} |
@@ -70,6 +83,7 @@ void HungRendererDialog::ShowDialog(TabContents* contents) { |
contents_ = contents; |
Browser* browser = BrowserList::GetLastActive(); |
DCHECK(browser); |
+ handler_ = new HungRendererDialogHandler(contents_); |
window_ = browser->BrowserShowHtmlDialog(this, NULL); |
} |
@@ -83,9 +97,8 @@ void HungRendererDialog::HideDialog(TabContents* contents) { |
// 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_ = NULL; |
- views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window_); |
- DCHECK(widget); |
- widget->Close(); |
+ DCHECK(handler_); |
+ handler_->CloseDialog(); |
flackr
2011/09/09 17:58:51
The close widget method in trunk depended on views
|
} |
bool HungRendererDialog::IsDialogModal() const { |
@@ -102,7 +115,7 @@ GURL HungRendererDialog::GetDialogContentURL() const { |
void HungRendererDialog::GetWebUIMessageHandlers( |
std::vector<WebUIMessageHandler*>* handlers) const { |
- handlers->push_back(new HungRendererDialogHandler(contents_)); |
+ handlers->push_back(handler_); |
} |
void HungRendererDialog::GetDialogSize(gfx::Size* size) const { |
@@ -155,6 +168,12 @@ HungRendererDialogHandler::HungRendererDialogHandler( |
: contents_(contents) { |
} |
+void HungRendererDialogHandler::CloseDialog() { |
+ DCHECK(web_ui_); |
+ web_ui_->tab_contents()->render_view_host()->ExecuteJavascriptInWebFrame( |
+ string16(), UTF8ToUTF16("chrome.send('DialogClose');")); |
flackr
2011/09/09 17:58:51
This calls DialogClose with no arguments, which is
arv (Not doing code reviews)
2011/09/12 18:34:20
This is really backwards. Why call js just so that
flackr
2011/09/12 20:17:19
Done.
|
+} |
+ |
void HungRendererDialogHandler::RegisterMessages() { |
web_ui_->RegisterMessageCallback("requestTabContentsList", |
NewCallback(this, |