Chromium Code Reviews| Index: Source/core/frame/DOMWindow.cpp |
| diff --git a/Source/core/frame/DOMWindow.cpp b/Source/core/frame/DOMWindow.cpp |
| index a8902e69e2e08da97e99deb5f0f55fa9a6bffad0..eeb895d2536c460ff8920f40d000b2002aa374bc 100644 |
| --- a/Source/core/frame/DOMWindow.cpp |
| +++ b/Source/core/frame/DOMWindow.cpp |
| @@ -111,7 +111,7 @@ namespace WebCore { |
| class PostMessageTimer FINAL : public SuspendableTimer { |
| public: |
| - PostMessageTimer(DOMWindow& window, PassRefPtr<SerializedScriptValue> message, const String& sourceOrigin, PassRefPtr<DOMWindow> source, PassOwnPtr<MessagePortChannelArray> channels, SecurityOrigin* targetOrigin, PassRefPtr<ScriptCallStack> stackTrace) |
| + PostMessageTimer(DOMWindow& window, PassRefPtr<SerializedScriptValue> message, const String& sourceOrigin, PassRefPtr<DOMWindow> source, PassOwnPtr<MessagePortChannelArray> channels, SecurityOrigin* targetOrigin, PassRefPtr<ScriptCallStack> stackTrace, UserGestureToken* userGestureToken) |
|
abarth-chromium
2014/03/26 05:32:48
This list of parameters is getting pretty out of c
|
| : SuspendableTimer(window.document()) |
| , m_window(window) |
| , m_message(message) |
| @@ -120,6 +120,7 @@ public: |
| , m_channels(channels) |
| , m_targetOrigin(targetOrigin) |
| , m_stackTrace(stackTrace) |
| + , m_userGestureToken(userGestureToken) |
| { |
| } |
| @@ -130,6 +131,7 @@ public: |
| } |
| SecurityOrigin* targetOrigin() const { return m_targetOrigin.get(); } |
| ScriptCallStack* stackTrace() const { return m_stackTrace.get(); } |
| + UserGestureToken* userGestureToken() const { return m_userGestureToken.get(); } |
| private: |
| virtual void fired() OVERRIDE |
| @@ -145,6 +147,7 @@ private: |
| OwnPtr<MessagePortChannelArray> m_channels; |
| RefPtr<SecurityOrigin> m_targetOrigin; |
| RefPtr<ScriptCallStack> m_stackTrace; |
| + RefPtr<UserGestureToken> m_userGestureToken; |
| }; |
| static void disableSuddenTermination() |
| @@ -851,7 +854,7 @@ void DOMWindow::postMessage(PassRefPtr<SerializedScriptValue> message, const Mes |
| stackTrace = createScriptCallStack(ScriptCallStack::maxCallStackSizeToCapture, true); |
| // Schedule the message. |
| - PostMessageTimer* timer = new PostMessageTimer(*this, message, sourceOrigin, source, channels.release(), target.get(), stackTrace.release()); |
| + PostMessageTimer* timer = new PostMessageTimer(*this, message, sourceOrigin, source, channels.release(), target.get(), stackTrace.release(), UserGestureIndicator::currentToken()); |
| timer->startOneShot(0, FROM_HERE); |
| timer->suspendIfNeeded(); |
| } |
| @@ -871,6 +874,10 @@ void DOMWindow::postMessageTimerFired(PassOwnPtr<PostMessageTimer> t) |
| if (m_frame->loader().client()->willCheckAndDispatchMessageEvent(timer->targetOrigin(), event.get())) |
| return; |
| + scoped_ptr<UserGestureIndicator> gesture; |
|
abarth-chromium
2014/03/26 05:32:48
You can't use scoped_ptr in Blink. I'm surprised
|
| + if (timer->userGestureToken()) |
| + gesture.reset(new UserGestureIndicator(timer->userGestureToken())); |
|
abarth-chromium
2014/03/26 05:32:48
You can't just create this object on the stack and
|
| + |
| event->entangleMessagePorts(document()); |
| dispatchMessageEventWithOriginCheck(timer->targetOrigin(), event, timer->stackTrace()); |
| } |