<html>
    <head>
        <script>
            function generateUncaughtException() {
                var b = 5;
                // Pause on uncaught exceptions and pause on all exceptions should pause here,
                // because even though the exception is being caught by our caller in this case,
                // it is not being caught in the same function.
                b.foo.bar;
            }
        
            function generateCaughtAndUncaughtExceptions() {
                var a = 5;
                try {
                    // This will pause on Pause on all exceptions, but not Pause on uncaught exceptions.
                    a.foo.bar;
                } catch (e) { }
            
                try {
                    generateUncaughtException();
                } catch (e) { }
            
                // This will pause on both Pause on all exceptions and Pause on uncaught exceptions.
                a.foo.bar;
            }
        </script>
    </head>
    <body>
        <p>This page tests <a href="https://bugs.webkit.org/show_bug.cgi?id=28622">Caught exceptions still pause the debugger</a>
        <p>To test this bug, open the inspector, open the scripts panel, and click the button to pause on all exceptions, press
            the button, and see which exceptions are paused on. Then press the pause on exceptions button again to only
            pause on uncaught exceptions, and see which exceptions are paused on.</p>
        <input type="button" value="Generate caught and uncaught exceptions" onclick="generateCaughtAndUncaughtExceptions();" />
    </body>
</html>
