The tourists had reduced their hosts to 98 for three at lunch.
The hosts were 98 for three at lunch, left needing a highly improbable world record chase of 462 or to bat for five more sessions for a draw.
England would have hoped for more assistance from a pitch which was expected to offer elaborate turn, but instead settled for some intemperate batting to help their cause.
Kaushal Silva and Dimuth Karunaratne had denied them for more than an hour for a 51-run stand and might well have batted the entire session had they focused on defence rather being tempted into more aggressive strokes.
Silva (30) was first to fall, three balls after drinks, when he stooped to sweep a drifting delivery from Jack Leach and was given lbw in front of middle stump. If that was not enough he burned a DRS referral before departing, replays only serving to amplify his error.
Karunaratne had been given an early life by Ben Stokes at slip, England’s best catcher grassing one off Moeen Ali, but did not cash in.
Less than three overs after the opening wicket he charged Moeen, mis-hitting an aerial shot and feeding the off-spinner a return catch.
Stokes then entered the attack to strike a blow just before the break. One ball after Dhanajaya de Silva successfully overturned a caught behind decision Stokes tightened up his line and took an indisputable edge that nestled safely in the hands of Joe Root.
England centurion Keaton Jennings admits criticism hit him hard