Index: chrome/renderer/extensions/messaging_bindings.cc |
diff --git a/chrome/renderer/extensions/messaging_bindings.cc b/chrome/renderer/extensions/messaging_bindings.cc |
index e906f4dc228a92dc64b7dea69a3dfa4c668e3832..1590724c4c34a1721de06dd84e35254923e22de8 100644 |
--- a/chrome/renderer/extensions/messaging_bindings.cc |
+++ b/chrome/renderer/extensions/messaging_bindings.cc |
@@ -30,6 +30,7 @@ |
#include "third_party/WebKit/public/web/WebScopedUserGesture.h" |
#include "third_party/WebKit/public/web/WebScopedWindowFocusAllowedIndicator.h" |
#include "third_party/WebKit/public/web/WebUserGestureIndicator.h" |
+#include "third_party/WebKit/public/web/WebUserGestureToken.h" |
#include "v8/include/v8.h" |
// Message passing API example (in a content script): |
@@ -102,6 +103,12 @@ class ExtensionImpl : public ObjectBackedNativeHandler { |
dispatcher_->ClearPortData(port_id); |
} |
+ bool ShouldForwardUserGesture() { |
+ return blink::WebUserGestureIndicator::isProcessingUserGesture() && |
+ !blink::WebUserGestureIndicator::currentUserGestureToken() |
+ .wasForwarded(); |
+ } |
+ |
// Sends a message along the given channel. |
void PostMessage(const v8::FunctionCallbackInfo<v8::Value>& args) { |
content::RenderView* renderview = context()->GetRenderView(); |
@@ -121,9 +128,9 @@ class ExtensionImpl : public ObjectBackedNativeHandler { |
} |
renderview->Send(new ExtensionHostMsg_PostMessage( |
- renderview->GetRoutingID(), port_id, |
- Message(*v8::String::Utf8Value(args[1]), |
- blink::WebUserGestureIndicator::isProcessingUserGesture()))); |
+ renderview->GetRoutingID(), |
+ port_id, |
+ Message(*v8::String::Utf8Value(args[1]), ShouldForwardUserGesture()))); |
} |
// Forcefully disconnects a port. |
@@ -357,6 +364,7 @@ void MessagingBindings::DeliverMessage( |
scoped_ptr<blink::WebScopedWindowFocusAllowedIndicator> allow_window_focus; |
if (message.user_gesture) { |
web_user_gesture.reset(new blink::WebScopedUserGesture); |
+ blink::WebUserGestureIndicator::currentUserGestureToken().setForwarded(); |
allow_window_focus.reset(new blink::WebScopedWindowFocusAllowedIndicator); |
} |