Index: chrome/browser/extensions/extension_host.cc |
diff --git a/chrome/browser/extensions/extension_host.cc b/chrome/browser/extensions/extension_host.cc |
index 70c10a67d503406975d3d739db2a0b5dd23d1cbd..381adfb1b740f1168e12546d587d46cf8587c466 100644 |
--- a/chrome/browser/extensions/extension_host.cc |
+++ b/chrome/browser/extensions/extension_host.cc |
@@ -32,6 +32,7 @@ |
#include "chrome/common/render_messages.h" |
#include "chrome/common/url_constants.h" |
#include "content/browser/browsing_instance.h" |
+#include "content/browser/content_browser_client.h" |
#include "content/browser/renderer_host/browser_render_process_host.h" |
#include "content/browser/renderer_host/render_process_host.h" |
#include "content/browser/renderer_host/render_view_host.h" |
@@ -41,6 +42,7 @@ |
#include "content/browser/tab_contents/tab_contents.h" |
#include "content/browser/tab_contents/tab_contents_view.h" |
#include "content/common/bindings_policy.h" |
+#include "content/common/content_client.h" |
#include "content/common/native_web_keyboard_event.h" |
#include "content/common/notification_service.h" |
#include "content/common/view_messages.h" |
@@ -134,8 +136,7 @@ ExtensionHost::ExtensionHost(const Extension* extension, |
ALLOW_THIS_IN_INITIALIZER_LIST( |
extension_function_dispatcher_(profile_, this)), |
extension_host_type_(host_type), |
- associated_tab_contents_(NULL), |
- suppress_javascript_messages_(false) { |
+ associated_tab_contents_(NULL) { |
render_view_host_ = new RenderViewHost(site_instance, this, MSG_ROUTING_NONE, |
NULL); |
if (enable_dom_automation_) |
@@ -157,6 +158,7 @@ ExtensionHost::~ExtensionHost() { |
Source<Profile>(profile_), |
Details<ExtensionHost>(this)); |
ProcessCreationQueue::GetInstance()->Remove(this); |
+ GetJavaScriptDialogCreatorInstance()->ResetJavaScriptState(this); |
render_view_host_->Shutdown(); // deletes render_view_host |
} |
@@ -416,38 +418,27 @@ void ExtensionHost::RunJavaScriptMessage(const RenderViewHost* rvh, |
const int flags, |
IPC::Message* reply_msg, |
bool* did_suppress_message) { |
- base::TimeDelta time_since_last_message( |
- base::TimeTicks::Now() - last_javascript_message_dismissal_); |
- |
- *did_suppress_message = suppress_javascript_messages_; |
- if (!suppress_javascript_messages_) { |
- bool show_suppress_checkbox = false; |
- // Show a checkbox offering to suppress further messages if this message is |
- // being displayed within kJavascriptMessageExpectedDelay of the last one. |
- if (time_since_last_message < |
- base::TimeDelta::FromMilliseconds( |
- chrome::kJavascriptMessageExpectedDelay)) |
- show_suppress_checkbox = true; |
- |
- // Unlike for page alerts, navigations aren't a good signal for when to |
- // resume showing alerts, so we can't reasonably stop showing them even if |
- // the extension is spammy. |
- RunJavascriptMessageBox(profile_, |
- this, |
- frame_url, |
- flags, |
- UTF16ToWideHack(message), |
- UTF16ToWideHack(default_prompt), |
- show_suppress_checkbox, |
- reply_msg); |
- } else { |
- // If we are suppressing messages, just reply as is if the user immediately |
+ bool suppress_this_message = false; |
+ GetJavaScriptDialogCreatorInstance()->RunJavaScriptDialog( |
+ this, |
+ frame_url, |
+ flags, |
+ message, |
+ default_prompt, |
+ reply_msg, |
+ &suppress_this_message, |
+ profile()); |
+ |
+ if (suppress_this_message) { |
+ // If we are suppressing messages, just reply as if the user immediately |
// pressed "Cancel". |
- OnMessageBoxClosed(reply_msg, false, std::wstring()); |
+ OnDialogClosed(reply_msg, false, string16()); |
} |
+ |
+ *did_suppress_message = suppress_this_message; |
} |
-gfx::NativeWindow ExtensionHost::GetMessageBoxRootWindow() { |
+gfx::NativeWindow ExtensionHost::GetDialogRootWindow() { |
// If we have a view, use that. |
gfx::NativeView native_view = GetNativeViewOfHost(); |
if (native_view) |
@@ -473,17 +464,12 @@ ExtensionHost* ExtensionHost::AsExtensionHost() { |
return this; |
} |
-void ExtensionHost::OnMessageBoxClosed(IPC::Message* reply_msg, |
- bool success, |
- const std::wstring& user_input) { |
- last_javascript_message_dismissal_ = base::TimeTicks::Now(); |
+void ExtensionHost::OnDialogClosed(IPC::Message* reply_msg, |
+ bool success, |
+ const string16& user_input) { |
render_view_host()->JavaScriptDialogClosed(reply_msg, |
success, |
- WideToUTF16Hack(user_input)); |
-} |
- |
-void ExtensionHost::SetSuppressMessageBoxes(bool suppress_message_boxes) { |
- suppress_javascript_messages_ = suppress_message_boxes; |
+ user_input); |
} |
void ExtensionHost::Close(RenderViewHost* render_view_host) { |