<html>
<head>
<script src="../../http/tests/inspector/inspector-test.js"></script>
<script src="../../http/tests/inspector/debugger-test.js"></script>
<script>

function testFunction()
{
    return 0;
}

var test = function()
{
    var testName = WebInspector.inspectedPageURL;
    testName = testName.substring(testName.lastIndexOf('/') + 1);

    InspectorTest.startDebuggerTest(step1);

    function step1()
    {
        InspectorTest.showScriptSource(testName, step2);
    }

    function step2(sourceFrame)
    {
        InspectorTest.addResult("Main resource was shown.");
        InspectorTest.setBreakpoint(sourceFrame, 8, "", true);
        WebInspector.panels.scripts._toggleBreakpointsButton.element.click();
        InspectorTest.reloadPage(step3);
    }

    function step3()
    {
        InspectorTest.addResult("Main resource was shown.");
        if (!WebInspector.debuggerModel.breakpointsActive())
            InspectorTest.addResult("Breakpoints are deactivated.");
        else
            InspectorTest.addResult("Error: breakpoints are activated.");
        InspectorTest.completeDebuggerTest();
    }
};

</script>
</head>

<body onload="runTest()">
<p>
Tests that breakpoints are not activated on page reload.<a href="https://bugs.webkit.org/show_bug.cgi?id=41461">Bug 41461</a>
</p>
</body>
</html>
