England will have to bat again to complete Test and Investec series victory at Chester-le-Street after centurion Dinesh Chandimal shut them out again on the fourth morning.
Chandimal (108no) continued Sri Lanka's resistance, after the hosts resumed needing to take five wickets for under 88 to avoid the bother of putting their pads on for a second time.
James Anderson (three for 51) parted Chandimal and Milinda Siriwardana in the fifth over of yet another cloudy day, but England could not strike again and were held up short of the finish line until after lunch as the tourists nosed six runs in front on 403 for six.
They could therefore be encouraged by a minor improvement at least on last week's innings trouncing at Headingley, although it should still be merely a matter of a little more time before England have the series wrapped up 2-0 with a match to spare.
The home attack struggled, for the first time, for much of the previous day - and so it was again, even after Anderson quickly got them up and running.
With a ball only four overs old, he wasted little time ending the sixth-wicket stand on 92.
Siriwardana did not add to his overnight 35 before trying to drive on the up and getting a thick edge to be caught at gully.
Anderson ought to have had his 450th Test wicket in his next over, and a big one too, but Jonny Bairstow failed to hold an inside edge offered by Chandimal on 69.
The missed chance was unlikely to prove costly in the grand scheme.
But it brought exasperation nonetheless as, instead of being 325 for seven, the tourists were able to sow a doubt or too - and Chandimal took advantage to reach his 172-ball hundred when he deflected Chris Woakes to third-man for his 11th four just before lunch.
England had few other opportunities to disturb the stand between Chandimal or Rangana Herath which realised an unbroken 89 - although the latter would have been run out for just a single when he was scampering a second run for his partner, had Steven Finn's throw from the deep happened to be a direct hit.