From 5bc163f45aee355ffe31c8a42b3523d306255f0c Mon Sep 17 00:00:00 2001 From: "hans@chromium.org" Date: Thu, 28 Jun 2012 16:52:40 +0000 Subject: [PATCH] Speech JavaScript API: Don't dispatch end event after ActiveDOMObject::stop() https://bugs.webkit.org/show_bug.cgi?id=90176 Reviewed by Adam Barth. Source/WebCore: It is probably not safe to dispatch an event on an object that has been ActiveDOMObject::stop()'ed. This used to happen in the navigate-away.html test, which I believe then caused speechgrammar-basics.html (which was typically run afterwards, by the same worker), to crash flakily. See Bug 89717. Test: speechgrammar-basics.html should no longer be flaky. * Modules/speech/SpeechRecognition.cpp: (WebCore::SpeechRecognition::didEnd): (WebCore::SpeechRecognition::stop): (WebCore::SpeechRecognition::SpeechRecognition): * Modules/speech/SpeechRecognition.h: LayoutTests: speechgrammar-basics.html should no longer be flaky. * platform/chromium/TestExpectations: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@121438 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- LayoutTests/ChangeLog | 11 +++++++++++ LayoutTests/platform/chromium/TestExpectations | 3 --- Source/WebCore/ChangeLog | 22 ++++++++++++++++++++++ .../WebCore/Modules/speech/SpeechRecognition.cpp | 5 ++++- Source/WebCore/Modules/speech/SpeechRecognition.h | 1 + 5 files changed, 38 insertions(+), 4 deletions(-) diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog index f0b4bf0..493ae17 100644 --- a/LayoutTests/ChangeLog +++ b/LayoutTests/ChangeLog @@ -1,3 +1,14 @@ +2012-06-28 Hans Wennborg + + Speech JavaScript API: Don't dispatch end event after ActiveDOMObject::stop() + https://bugs.webkit.org/show_bug.cgi?id=90176 + + Reviewed by Adam Barth. + + speechgrammar-basics.html should no longer be flaky. + + * platform/chromium/TestExpectations: + 2012-06-28 Alexander Pavlov [Qt] inspector/styles/inject-stylesheet.html makes 4 tests flakey (TEXT PASS) diff --git a/LayoutTests/platform/chromium/TestExpectations b/LayoutTests/platform/chromium/TestExpectations index a3ad616..a82aa43 100644 --- a/LayoutTests/platform/chromium/TestExpectations +++ b/LayoutTests/platform/chromium/TestExpectations @@ -3738,9 +3738,6 @@ BUGWK89529 MAC LEOPARD DEBUG : fast/canvas/webgl/tex-image-and-sub-image-2d-with BUGWK89702 : compositing/geometry/fixed-position-transform-composited-page-scale-down.html = PASS IMAGE BUGWK89702 : compositing/scaling/tiled-layer-recursion.html = PASS IMAGE -// Flaky -BUGWK89717 : fast/speech/scripted/speechgrammar-basics.html = PASS CRASH - BUGWK89789 MAC : plugins/embed-attributes-style.html = PASS IMAGE BUGWK89789 MAC : userscripts/user-script-video-document.html = PASS CRASH diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog index bb11371..9e9ed80 100644 --- a/Source/WebCore/ChangeLog +++ b/Source/WebCore/ChangeLog @@ -1,3 +1,25 @@ +2012-06-28 Hans Wennborg + + Speech JavaScript API: Don't dispatch end event after ActiveDOMObject::stop() + https://bugs.webkit.org/show_bug.cgi?id=90176 + + Reviewed by Adam Barth. + + It is probably not safe to dispatch an event on an object that has + been ActiveDOMObject::stop()'ed. + + This used to happen in the navigate-away.html test, which I believe + then caused speechgrammar-basics.html (which was typically run + afterwards, by the same worker), to crash flakily. See Bug 89717. + + Test: speechgrammar-basics.html should no longer be flaky. + + * Modules/speech/SpeechRecognition.cpp: + (WebCore::SpeechRecognition::didEnd): + (WebCore::SpeechRecognition::stop): + (WebCore::SpeechRecognition::SpeechRecognition): + * Modules/speech/SpeechRecognition.h: + 2012-06-28 Sudarsana Nagineni [GTK] [WK2] Memory leak in ResourceHandleSoup.cpp diff --git a/Source/WebCore/Modules/speech/SpeechRecognition.cpp b/Source/WebCore/Modules/speech/SpeechRecognition.cpp index fca2ba7..d2b79b6 100644 --- a/Source/WebCore/Modules/speech/SpeechRecognition.cpp +++ b/Source/WebCore/Modules/speech/SpeechRecognition.cpp @@ -122,7 +122,8 @@ void SpeechRecognition::didStart() void SpeechRecognition::didEnd() { - dispatchEvent(Event::create(eventNames().endEvent, /*canBubble=*/false, /*cancelable=*/false)); + if (!m_stoppedByActiveDOMObject) + dispatchEvent(Event::create(eventNames().endEvent, /*canBubble=*/false, /*cancelable=*/false)); unsetPendingActivity(this); } @@ -138,6 +139,7 @@ ScriptExecutionContext* SpeechRecognition::scriptExecutionContext() const void SpeechRecognition::stop() { + m_stoppedByActiveDOMObject = true; if (hasPendingActivity()) abort(); } @@ -148,6 +150,7 @@ SpeechRecognition::SpeechRecognition(ScriptExecutionContext* context) , m_continuous(false) , m_maxAlternatives(1) , m_controller(0) + , m_stoppedByActiveDOMObject(false) { ASSERT(scriptExecutionContext()->isDocument()); Document* document = static_cast(scriptExecutionContext()); diff --git a/Source/WebCore/Modules/speech/SpeechRecognition.h b/Source/WebCore/Modules/speech/SpeechRecognition.h index 1657b57..86966f6 100644 --- a/Source/WebCore/Modules/speech/SpeechRecognition.h +++ b/Source/WebCore/Modules/speech/SpeechRecognition.h @@ -121,6 +121,7 @@ private: EventTargetData m_eventTargetData; SpeechRecognitionController* m_controller; + bool m_stoppedByActiveDOMObject; }; } // namespace WebCore -- 2.7.4