diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog
index 976a1a0..d7439ac 100644
--- a/LayoutTests/ChangeLog
+++ b/LayoutTests/ChangeLog
@@ -1,3 +1,21 @@
+2019-05-15  Devin Rousso  <drousso@apple.com>
+
+        REGRESSION (r242741) [Mac WK1 Debug] Layout Test inspector/timeline/exception-in-injected-script-while-recording.html is a flaky crash
+        https://bugs.webkit.org/show_bug.cgi?id=197442
+        <rdar://problem/50354090>
+
+        Reviewed by Joseph Pecoraro.
+
+        Ever since r198774, we don't allow a timeline recording to be active at the same time as the
+        debugger being paused. As such, these tests are unnecessary.
+
+        * inspector/timeline/debugger-paused-while-recording.html: Removed.
+        * inspector/timeline/debugger-paused-while-recording-expected.txt: Removed.
+        * inspector/timeline/exception-in-injected-script-while-recording.html: Removed.
+        * inspector/timeline/exception-in-injected-script-while-recording-expected.txt: Removed.
+        * inspector/timeline/resources/timeline-helper.js: Removed.
+        * TestExpectations:
+
 2019-05-15  Zalan Bujtas  <zalan@apple.com>
 
         Do not create a shape object outside of the layout context
diff --git a/LayoutTests/TestExpectations b/LayoutTests/TestExpectations
index 2a348f7..bc1ce8b 100644
--- a/LayoutTests/TestExpectations
+++ b/LayoutTests/TestExpectations
@@ -534,9 +534,6 @@
 webkit.org/b/128736 inspector/debugger/setBreakpoint-dfg.html [ Failure Pass ]
 webkit.org/b/134982 inspector/debugger/setBreakpoint-dfg-and-modify-local.html [ Failure Pass ]
 
-webkit.org/b/142208 inspector/timeline/debugger-paused-while-recording.html [ Skip ]
-webkit.org/b/142208 inspector/timeline/exception-in-injected-script-while-recording.html [ Skip ]
-
 # This test is fast enough in release but quite slow in debug builds.
 [ Debug ] inspector/debugger/debugger-stack-overflow.html [ Skip ]
 [ Debug ] inspector/canvas/recording-2d.html [ Slow ]
diff --git a/LayoutTests/inspector/timeline/debugger-paused-while-recording-expected.txt b/LayoutTests/inspector/timeline/debugger-paused-while-recording-expected.txt
deleted file mode 100644
index c01db32..0000000
--- a/LayoutTests/inspector/timeline/debugger-paused-while-recording-expected.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-Testing that profiling data is correctly generated and attached to Timeline records when the debugger pauses and resumes while capturing timelines.
-
-Added a breakpoint inside hook().
-Debugger paused; resuming...
-Debugger resumed; stopping timeline capture.
-Timeline capturing stopped. Inspecting the active recording....
-TimerFired timeline record has profile attached: TRUE
-
diff --git a/LayoutTests/inspector/timeline/debugger-paused-while-recording.html b/LayoutTests/inspector/timeline/debugger-paused-while-recording.html
deleted file mode 100644
index 915ab09..0000000
--- a/LayoutTests/inspector/timeline/debugger-paused-while-recording.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<!doctype html>
-<html>
-<head>
-<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'">
-<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
-<script src="./resources/timeline-helper.js"></script>
-<script>
-function installTimer()
-{
-    setTimeout(function() {
-        callFunction(mul, add(1, 3), 3);
-        hook();
-    });
-}
-
-function add(a, b)
-{
-    TestPage.addResult("Calling add(): " + a + " + " + b);
-    return a + b;
-}
-
-function mul(a, b)
-{
-    TestPage.addResult("Calling mul(): " + a + " * " + b);
-    return a * b;
-}
-
-function test()
-{
-    // First, set up the breakpoint, start timeline capturing, and trigger execution of installTimer().
-    WI.debuggerManager.addEventListener(WI.DebuggerManager.Event.ScriptAdded, function(event) {
-        var scriptObject = event.data.script;
-
-        if (!/timeline-helper\.js$/.test(scriptObject.url))
-            return;
-
-        var location = scriptObject.createSourceCodeLocation(17, 0);  // Inside timeline-helper.js:hook()
-        var breakpoint = new WI.Breakpoint(location);
-        WI.debuggerManager.addBreakpoint(breakpoint);
-        InspectorTest.addResult("Added a breakpoint inside hook().")
-
-        WI.timelineManager.startCapturing();
-        InspectorTest.evaluateInPage("installTimer()");
-    });
-
-    // Second, the debugger will pause during timeline capturing. Resume, then stop timeline capturing.
-    WI.debuggerManager.addEventListener(WI.DebuggerManager.Event.Paused, function(event) {
-            InspectorTest.addResult("Debugger paused; resuming...");
-
-            WI.debuggerManager.resume().then(function() {
-                InspectorTest.addResult("Debugger resumed; stopping timeline capture.");
-                WI.timelineManager.stopCapturing();
-            })
-    });
-
-    // When timeline capturing stops, inspect the resulting timeline records for a profile.
-    WI.timelineManager.addEventListener(WI.TimelineManager.Event.CapturingStateChanged, (event) => {
-        if (WI.timelineManager.capturingState !== WI.TimelineManager.CapturingState.Inactive)
-            return;
-
-        var recording = WI.timelineManager.activeRecording;
-        var scriptTimeline = recording.timelines.get(WI.TimelineRecord.Type.Script);
-        console.assert(scriptTimeline);
-
-        InspectorTest.addResult("Timeline capturing stopped. Inspecting the active recording....");
-
-        for (var record of scriptTimeline.records) {
-            if (record.eventType !== WI.ScriptTimelineRecord.EventType.TimerFired)
-                continue;
-
-            var result = record.profile ? "TRUE" : "FALSE";
-            InspectorTest.addResult("TimerFired timeline record has profile attached: " + result);
-        }
-
-        InspectorTest.completeTest();
-    });
-
-    InspectorTest.reloadPage();
-}
-</script>
-</head>
-<body onload="runTest()">
-    <p>Testing that profiling data is correctly generated and attached to Timeline records when the debugger pauses and resumes while capturing timelines.</p>
-</body>
-</html>
diff --git a/LayoutTests/inspector/timeline/exception-in-injected-script-while-recording-expected.txt b/LayoutTests/inspector/timeline/exception-in-injected-script-while-recording-expected.txt
deleted file mode 100644
index 2a77e38..0000000
--- a/LayoutTests/inspector/timeline/exception-in-injected-script-while-recording-expected.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-Testing that an injected script, run while the debugger is paused and the timeline profiler is enabled, should not loop forever if it has an exception thrown.
-
-Added a breakpoint inside hook().
-Debugger paused;
-An exception was thrown from the injected script.
-Debugger resumed; stopping timeline capture.
-Timeline capturing stopped. Inspecting the active recording....
-TimerFired timeline record has profile attached: TRUE
-
diff --git a/LayoutTests/inspector/timeline/exception-in-injected-script-while-recording.html b/LayoutTests/inspector/timeline/exception-in-injected-script-while-recording.html
deleted file mode 100644
index 1b52bc0..0000000
--- a/LayoutTests/inspector/timeline/exception-in-injected-script-while-recording.html
+++ /dev/null
@@ -1,91 +0,0 @@
-<!doctype html>
-<html>
-<head>
-<meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'">
-<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
-<script src="./resources/timeline-helper.js"></script>
-<script>
-function installTimer()
-{
-    setTimeout(function() {
-        callFunction(mul, add(1, 3), 3);
-        hook();
-    });
-}
-
-function add(a, b)
-{
-    TestPage.addResult("Calling add(): " + a + " + " + b);
-    return a + b;
-}
-
-function mul(a, b)
-{
-    TestPage.addResult("Calling mul(): " + a + " * " + b);
-    return a * b;
-}
-
-function test()
-{
-    // First, set up the breakpoint, start timeline capturing, and trigger execution of installTimer().
-    WI.debuggerManager.addEventListener(WI.DebuggerManager.Event.ScriptAdded, function(event) {
-        var scriptObject = event.data.script;
-
-        if (!/timeline-helper\.js$/.test(scriptObject.url))
-            return;
-
-        var location = scriptObject.createSourceCodeLocation(17, 0);  // Inside timeline-helper.js:hook()
-        var breakpoint = new WI.Breakpoint(location);
-        WI.debuggerManager.addBreakpoint(breakpoint);
-        InspectorTest.addResult("Added a breakpoint inside hook().")
-
-        WI.timelineManager.startCapturing();
-        InspectorTest.evaluateInPage("installTimer()");
-    });
-
-    // Second, the debugger will pause during timeline capturing. Resume, then stop timeline capturing.
-    WI.debuggerManager.addEventListener(WI.DebuggerManager.Event.Paused, function(event) {
-        InspectorTest.addResult("Debugger paused;");
-        checkIfExceptionLoopsForever();
-    });
-
-    function checkIfExceptionLoopsForever() {
-        WI.runtimeManager.evaluateInInspectedWindow("({}).x.x", {objectGroup: "test", includeCommandLineAPI: true, doNotPauseOnExceptionsAndMuteConsole: true}, function(result, wasThrown) {
-            InspectorTest.addResult("An exception was " + (wasThrown ? "" : "not ") + "thrown from the injected script.");
-            WI.debuggerManager.resume().then(function() {
-                InspectorTest.addResult("Debugger resumed; stopping timeline capture.");
-                WI.timelineManager.stopCapturing();
-            });
-        });
-    }
-
-    // When timeline capturing stops, inspect the resulting timeline records for a profile.
-    WI.timelineManager.addEventListener(WI.TimelineManager.Event.CapturingStateChanged, (event) => {
-        if (WI.timelineManager.capturingState !== WI.TimelineManager.CapturingState.Inactive)
-            return;
-
-        var recording = WI.timelineManager.activeRecording;
-        var scriptTimeline = recording.timelines.get(WI.TimelineRecord.Type.Script);
-        console.assert(scriptTimeline);
-
-        InspectorTest.addResult("Timeline capturing stopped. Inspecting the active recording....");
-
-        for (var record of scriptTimeline.records) {
-            if (record.eventType !== WI.ScriptTimelineRecord.EventType.TimerFired)
-                continue;
-
-            var result = record.profile ? "TRUE" : "FALSE";
-            InspectorTest.addResult("TimerFired timeline record has profile attached: " + result);
-        }
-
-        InspectorTest.completeTest();
-    });
-
-    InspectorTest.reloadPage();
-}
-</script>
-</head>
-<body onload="runTest()">
-    <p>Testing that an injected script, run while the debugger is paused and the timeline profiler is enabled, should not loop forever if it has an exception thrown.</p>
-</body>
-</html>
diff --git a/LayoutTests/inspector/timeline/resources/timeline-helper.js b/LayoutTests/inspector/timeline/resources/timeline-helper.js
deleted file mode 100644
index c2eaf58..0000000
--- a/LayoutTests/inspector/timeline/resources/timeline-helper.js
+++ /dev/null
@@ -1,19 +0,0 @@
-// WARNING: some tests blindly set breakpoints in this file by line number.
-// So, if you modify the code, make sure to adjust any createSourceCodeLocation
-// calls from tests in the ../ directory. Callsites should include a description
-// of the function/statement to set a breakpoint at, so that it's easy to fix them.
-
-function callFunction(fn)
-{
-    if (!(fn instanceof Function))
-        return;
-
-    var argsArray = Array.prototype.slice.call(arguments);
-    Array.prototype.splice.call(argsArray, 0, 1);
-    fn.call(this, argsArray);
-}
-
-function hook()
-{
-    return 42;
-}
