summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--android_webview/browser/aw_javascript_dialog_manager.cc1
-rw-r--r--android_webview/browser/aw_javascript_dialog_manager.h1
-rw-r--r--chrome/android/javatests/src/org/chromium/chrome/browser/test/ModalDialogTest.java8
-rw-r--r--chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.cc7
-rw-r--r--content/browser/browser_plugin/browser_plugin_guest.cc1
-rw-r--r--content/browser/browser_plugin/browser_plugin_guest.h1
-rw-r--r--content/browser/renderer_host/render_view_host_delegate.h1
-rw-r--r--content/browser/renderer_host/render_view_host_impl.cc3
-rw-r--r--content/browser/renderer_host/render_view_host_impl.h1
-rw-r--r--content/browser/web_contents/render_view_host_manager_unittest.cc2
-rw-r--r--content/browser/web_contents/web_contents_impl.cc2
-rw-r--r--content/browser/web_contents/web_contents_impl.h1
-rw-r--r--content/browser/web_contents/web_contents_impl_unittest.cc2
-rw-r--r--content/common/view_messages.h3
-rw-r--r--content/public/browser/javascript_dialog_manager.h1
-rw-r--r--content/renderer/render_view_impl.cc5
-rw-r--r--content/shell/browser/shell_javascript_dialog_manager.cc1
-rw-r--r--content/shell/browser/shell_javascript_dialog_manager.h1
18 files changed, 30 insertions, 12 deletions
diff --git a/android_webview/browser/aw_javascript_dialog_manager.cc b/android_webview/browser/aw_javascript_dialog_manager.cc
index 1690eac..d9ec1c1 100644
--- a/android_webview/browser/aw_javascript_dialog_manager.cc
+++ b/android_webview/browser/aw_javascript_dialog_manager.cc
@@ -21,6 +21,7 @@ void AwJavaScriptDialogManager::RunJavaScriptDialog(
content::JavaScriptMessageType message_type,
const string16& message_text,
const string16& default_prompt_text,
+ bool user_gesture,
const DialogClosedCallback& callback,
bool* did_suppress_message) {
AwContentsClientBridgeBase* bridge =
diff --git a/android_webview/browser/aw_javascript_dialog_manager.h b/android_webview/browser/aw_javascript_dialog_manager.h
index f8db746..0abb432 100644
--- a/android_webview/browser/aw_javascript_dialog_manager.h
+++ b/android_webview/browser/aw_javascript_dialog_manager.h
@@ -22,6 +22,7 @@ class AwJavaScriptDialogManager : public content::JavaScriptDialogManager {
content::JavaScriptMessageType message_type,
const string16& message_text,
const string16& default_prompt_text,
+ bool user_gesture,
const DialogClosedCallback& callback,
bool* did_suppress_message) OVERRIDE;
virtual void RunBeforeUnloadDialog(
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/test/ModalDialogTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/test/ModalDialogTest.java
index beb56fd..356b012 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/test/ModalDialogTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/test/ModalDialogTest.java
@@ -234,17 +234,15 @@ public class ModalDialogTest extends ChromiumTestShellTestBase {
public void testDisableRepeatedDialogs()
throws InterruptedException, TimeoutException, ExecutionException {
OnEvaluateJavaScriptResultHelper scriptEvent =
- executeJavaScriptAndWaitForDialog("alert('Android');");
+ executeJavaScriptAndWaitForDialog("alert('Android');alert('Android');");
- // Show a dialog once.
+ // A dialog should appear.
JavascriptAppModalDialog jsDialog = getCurrentDialog();
assertNotNull("No dialog showing.", jsDialog);
clickCancel(jsDialog);
- scriptEvent.waitUntilHasValue();
- // Show it again, it should have the option to suppress subsequent dialogs.
- scriptEvent = executeJavaScriptAndWaitForDialog("alert('Android');");
+ // Another dialog should appear with the option to suppress subsequent dialogs.
jsDialog = getCurrentDialog();
assertNotNull("No dialog showing.", jsDialog);
final AlertDialog dialog = jsDialog.getDialogForTest();
diff --git a/chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.cc b/chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.cc
index 682a2d9..37e6859 100644
--- a/chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.cc
+++ b/chrome/browser/ui/app_modal_dialogs/javascript_dialog_manager.cc
@@ -47,6 +47,7 @@ class ChromeJavaScriptDialogManager : public JavaScriptDialogManager,
content::JavaScriptMessageType message_type,
const string16& message_text,
const string16& default_prompt_text,
+ bool user_gesture,
const DialogClosedCallback& callback,
bool* did_suppress_message) OVERRIDE;
@@ -130,6 +131,7 @@ void ChromeJavaScriptDialogManager::RunJavaScriptDialog(
content::JavaScriptMessageType message_type,
const string16& message_text,
const string16& default_prompt_text,
+ bool user_gesture,
const DialogClosedCallback& callback,
bool* did_suppress_message) {
*did_suppress_message = false;
@@ -146,10 +148,11 @@ void ChromeJavaScriptDialogManager::RunJavaScriptDialog(
extra_data->last_javascript_message_dismissal_;
bool display_suppress_checkbox = false;
// Show a checkbox offering to suppress further messages if this message is
- // being displayed within kJavaScriptMessageExpectedDelay of the last one.
+ // being displayed within kJavaScriptMessageExpectedDelay of the last one and
+ // the dialog was not requested via an explicit user gesture.
if (time_since_last_message <
base::TimeDelta::FromMilliseconds(
- chrome::kJavaScriptMessageExpectedDelay)) {
+ chrome::kJavaScriptMessageExpectedDelay) && !user_gesture) {
display_suppress_checkbox = true;
} else {
display_suppress_checkbox = false;
diff --git a/content/browser/browser_plugin/browser_plugin_guest.cc b/content/browser/browser_plugin/browser_plugin_guest.cc
index 96e60e1..bb92c9e 100644
--- a/content/browser/browser_plugin/browser_plugin_guest.cc
+++ b/content/browser/browser_plugin/browser_plugin_guest.cc
@@ -1549,6 +1549,7 @@ void BrowserPluginGuest::RunJavaScriptDialog(
JavaScriptMessageType javascript_message_type,
const string16& message_text,
const string16& default_prompt_text,
+ bool user_gesture,
const DialogClosedCallback& callback,
bool* did_suppress_message) {
if (permission_request_map_.size() >= kNumMaxOutstandingPermissionRequests) {
diff --git a/content/browser/browser_plugin/browser_plugin_guest.h b/content/browser/browser_plugin/browser_plugin_guest.h
index 74624ef..15d28d2 100644
--- a/content/browser/browser_plugin/browser_plugin_guest.h
+++ b/content/browser/browser_plugin/browser_plugin_guest.h
@@ -213,6 +213,7 @@ class CONTENT_EXPORT BrowserPluginGuest
JavaScriptMessageType javascript_message_type,
const string16& message_text,
const string16& default_prompt_text,
+ bool user_gesture,
const DialogClosedCallback& callback,
bool* did_suppress_message) OVERRIDE;
virtual void RunBeforeUnloadDialog(
diff --git a/content/browser/renderer_host/render_view_host_delegate.h b/content/browser/renderer_host/render_view_host_delegate.h
index 21b22b3..5cb5172 100644
--- a/content/browser/renderer_host/render_view_host_delegate.h
+++ b/content/browser/renderer_host/render_view_host_delegate.h
@@ -262,6 +262,7 @@ class CONTENT_EXPORT RenderViewHostDelegate {
const string16& default_prompt,
const GURL& frame_url,
JavaScriptMessageType type,
+ bool user_gesture,
IPC::Message* reply_msg,
bool* did_suppress_message) {}
diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc
index d373e7d..d2be3e3 100644
--- a/content/browser/renderer_host/render_view_host_impl.cc
+++ b/content/browser/renderer_host/render_view_host_impl.cc
@@ -1435,13 +1435,14 @@ void RenderViewHostImpl::OnRunJavaScriptMessage(
const string16& default_prompt,
const GURL& frame_url,
JavaScriptMessageType type,
+ bool user_gesture,
IPC::Message* reply_msg) {
// While a JS message dialog is showing, tabs in the same process shouldn't
// process input events.
GetProcess()->SetIgnoreInputEvents(true);
StopHangMonitorTimeout();
delegate_->RunJavaScriptMessage(this, message, default_prompt, frame_url,
- type, reply_msg,
+ type, user_gesture, reply_msg,
&are_javascript_messages_suppressed_);
}
diff --git a/content/browser/renderer_host/render_view_host_impl.h b/content/browser/renderer_host/render_view_host_impl.h
index 94f2079..649d83a 100644
--- a/content/browser/renderer_host/render_view_host_impl.h
+++ b/content/browser/renderer_host/render_view_host_impl.h
@@ -539,6 +539,7 @@ class CONTENT_EXPORT RenderViewHostImpl
const string16& default_prompt,
const GURL& frame_url,
JavaScriptMessageType type,
+ bool user_gesture,
IPC::Message* reply_msg);
void OnRunBeforeUnloadConfirm(const GURL& frame_url,
const string16& message,
diff --git a/content/browser/web_contents/render_view_host_manager_unittest.cc b/content/browser/web_contents/render_view_host_manager_unittest.cc
index ea35e6b..77d6533 100644
--- a/content/browser/web_contents/render_view_host_manager_unittest.cc
+++ b/content/browser/web_contents/render_view_host_manager_unittest.cc
@@ -304,7 +304,7 @@ TEST_F(RenderViewHostManagerTest, FilterMessagesWhileSwappedOut) {
ntp_process_host->sink().ClearMessages();
ViewHostMsg_RunJavaScriptMessage js_msg(
rvh()->GetRoutingID(), msg, msg, kChromeURL,
- JAVASCRIPT_MESSAGE_TYPE_CONFIRM, &result, &unused);
+ JAVASCRIPT_MESSAGE_TYPE_CONFIRM, false, &result, &unused);
js_msg.EnableMessagePumping();
EXPECT_TRUE(ntp_rvh->OnMessageReceived(js_msg));
EXPECT_TRUE(ntp_process_host->sink().GetUniqueMessageMatching(IPC_REPLY_ID));
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index 5917a44..801084f 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -3356,6 +3356,7 @@ void WebContentsImpl::RunJavaScriptMessage(
const string16& default_prompt,
const GURL& frame_url,
JavaScriptMessageType javascript_message_type,
+ bool user_gesture,
IPC::Message* reply_msg,
bool* did_suppress_message) {
// Suppress JavaScript dialogs when requested. Also suppress messages when
@@ -3379,6 +3380,7 @@ void WebContentsImpl::RunJavaScriptMessage(
javascript_message_type,
message,
default_prompt,
+ user_gesture,
base::Bind(&WebContentsImpl::OnDialogClosed,
base::Unretained(this),
rvh,
diff --git a/content/browser/web_contents/web_contents_impl.h b/content/browser/web_contents/web_contents_impl.h
index 55f377b..abc52e2 100644
--- a/content/browser/web_contents/web_contents_impl.h
+++ b/content/browser/web_contents/web_contents_impl.h
@@ -398,6 +398,7 @@ class CONTENT_EXPORT WebContentsImpl
const string16& default_prompt,
const GURL& frame_url,
JavaScriptMessageType type,
+ bool user_gesture,
IPC::Message* reply_msg,
bool* did_suppress_message) OVERRIDE;
virtual void RunBeforeUnloadConfirm(RenderViewHost* rvh,
diff --git a/content/browser/web_contents/web_contents_impl_unittest.cc b/content/browser/web_contents/web_contents_impl_unittest.cc
index aded7ae..b20cf66 100644
--- a/content/browser/web_contents/web_contents_impl_unittest.cc
+++ b/content/browser/web_contents/web_contents_impl_unittest.cc
@@ -2014,7 +2014,7 @@ TEST_F(WebContentsImplTest, NoJSMessageOnInterstitials) {
bool did_suppress_message = false;
contents()->RunJavaScriptMessage(contents()->GetRenderViewHost(),
ASCIIToUTF16("This is an informative message"), ASCIIToUTF16("OK"),
- kGURL, JAVASCRIPT_MESSAGE_TYPE_ALERT, dummy_message,
+ kGURL, JAVASCRIPT_MESSAGE_TYPE_ALERT, false, dummy_message,
&did_suppress_message);
EXPECT_TRUE(did_suppress_message);
}
diff --git a/content/common/view_messages.h b/content/common/view_messages.h
index 362320b..6273f84 100644
--- a/content/common/view_messages.h
+++ b/content/common/view_messages.h
@@ -1800,11 +1800,12 @@ IPC_MESSAGE_ROUTED0(ViewHostMsg_RouteCloseEvent)
IPC_MESSAGE_ROUTED1(ViewHostMsg_RouteMessageEvent,
ViewMsg_PostMessage_Params)
-IPC_SYNC_MESSAGE_ROUTED4_2(ViewHostMsg_RunJavaScriptMessage,
+IPC_SYNC_MESSAGE_ROUTED5_2(ViewHostMsg_RunJavaScriptMessage,
string16 /* in - alert message */,
string16 /* in - default prompt */,
GURL /* in - originating page URL */,
content::JavaScriptMessageType /* in - type */,
+ bool /* in - user_gesture */,
bool /* out - success */,
string16 /* out - user_input field */)
diff --git a/content/public/browser/javascript_dialog_manager.h b/content/public/browser/javascript_dialog_manager.h
index 778893d..c9e1792 100644
--- a/content/public/browser/javascript_dialog_manager.h
+++ b/content/public/browser/javascript_dialog_manager.h
@@ -35,6 +35,7 @@ class CONTENT_EXPORT JavaScriptDialogManager {
JavaScriptMessageType javascript_message_type,
const string16& message_text,
const string16& default_prompt_text,
+ bool user_gesture,
const DialogClosedCallback& callback,
bool* did_suppress_message) = 0;
diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc
index 6b3ca9f..b786849 100644
--- a/content/renderer/render_view_impl.cc
+++ b/content/renderer/render_view_impl.cc
@@ -2226,13 +2226,16 @@ bool RenderViewImpl::RunJavaScriptMessage(JavaScriptMessageType type,
const string16& default_value,
const GURL& frame_url,
string16* result) {
+ bool user_gesture = WebUserGestureIndicator::isProcessingUserGesture();
bool success = false;
string16 result_temp;
if (!result)
result = &result_temp;
SendAndRunNestedMessageLoop(new ViewHostMsg_RunJavaScriptMessage(
- routing_id_, message, default_value, frame_url, type, &success, result));
+ routing_id_, message, default_value, frame_url, type, user_gesture,
+ &success, result));
+ WebUserGestureIndicator::consumeUserGesture();
return success;
}
diff --git a/content/shell/browser/shell_javascript_dialog_manager.cc b/content/shell/browser/shell_javascript_dialog_manager.cc
index 1476f7c..b250d18 100644
--- a/content/shell/browser/shell_javascript_dialog_manager.cc
+++ b/content/shell/browser/shell_javascript_dialog_manager.cc
@@ -29,6 +29,7 @@ void ShellJavaScriptDialogManager::RunJavaScriptDialog(
JavaScriptMessageType javascript_message_type,
const string16& message_text,
const string16& default_prompt_text,
+ bool user_gesture,
const DialogClosedCallback& callback,
bool* did_suppress_message) {
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kDumpRenderTree)) {
diff --git a/content/shell/browser/shell_javascript_dialog_manager.h b/content/shell/browser/shell_javascript_dialog_manager.h
index 763736f..30d23d5 100644
--- a/content/shell/browser/shell_javascript_dialog_manager.h
+++ b/content/shell/browser/shell_javascript_dialog_manager.h
@@ -27,6 +27,7 @@ class ShellJavaScriptDialogManager : public JavaScriptDialogManager {
JavaScriptMessageType javascript_message_type,
const string16& message_text,
const string16& default_prompt_text,
+ bool user_gesture,
const DialogClosedCallback& callback,
bool* did_suppress_message) OVERRIDE;