Index: third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp |
diff --git a/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp b/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp |
index 391a19076b249945cbbde28e83e6f0102eb600ba..dc2378109cb185b8d9dd93a70140d28d0fb58657 100644 |
--- a/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp |
+++ b/third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp |
@@ -124,7 +124,7 @@ private: |
class PostMessageTimer final : public GarbageCollectedFinalized<PostMessageTimer>, public SuspendableTimer { |
USING_GARBAGE_COLLECTED_MIXIN(PostMessageTimer); |
public: |
- PostMessageTimer(LocalDOMWindow& window, MessageEvent* event, SecurityOrigin* targetOrigin, PassRefPtr<ScriptCallStack> stackTrace, UserGestureToken* userGestureToken) |
+ PostMessageTimer(LocalDOMWindow& window, MessageEvent* event, PassRefPtr<SecurityOrigin> targetOrigin, PassRefPtr<ScriptCallStack> stackTrace, UserGestureToken* userGestureToken) |
: SuspendableTimer(window.document()) |
, m_event(event) |
, m_window(&window) |
@@ -663,14 +663,19 @@ Navigator* LocalDOMWindow::navigator() const |
return m_navigator.get(); |
} |
-void LocalDOMWindow::schedulePostMessage(MessageEvent* event, SecurityOrigin* target, PassRefPtr<ScriptCallStack> stackTrace) |
+void LocalDOMWindow::schedulePostMessage(MessageEvent* event, PassRefPtr<SecurityOrigin> target, Document* source) |
{ |
// Allowing unbounded amounts of messages to build up for a suspended context |
// is problematic; consider imposing a limit or other restriction if this |
// surfaces often as a problem (see crbug.com/587012). |
+ // Capture stack trace only when inspector front-end is loaded as it may be time consuming. |
+ RefPtr<ScriptCallStack> stackTrace; |
+ if (InspectorInstrumentation::consoleAgentEnabled(source)) |
+ stackTrace = ScriptCallStack::capture(); |
+ |
// Schedule the message. |
- PostMessageTimer* timer = new PostMessageTimer(*this, event, target, stackTrace, UserGestureIndicator::currentToken()); |
+ PostMessageTimer* timer = new PostMessageTimer(*this, event, target, stackTrace.release(), UserGestureIndicator::currentToken()); |
timer->startOneShot(0, BLINK_FROM_HERE); |
timer->suspendIfNeeded(); |
m_postMessageTimers.add(timer); |