Sri Lanka's openers shared a fluent century stand to lead their side to 162 for one in reply to England's 416 on the second day of the third and final Test at Lord's on Friday.
Kaushal Silva made an unbeaten 79 and Dimuth Karunaratne 50 for the touring side after Jonny Bairstow's 167 not out carried England to a commanding first-innings total as they bid to wrap up the series 3-0.
Bairstow and Chris Woakes, who came together with the hosts in trouble at 227 for six, shared an excellent partnership of 144 on another fine day at the home of cricket.
Woakes contributed a polished 66, his first Test fifty, hitting eight crisp fours in nearly three hours at the crease before he chipped a catch back to left-arm spinner Rangana Herath.
Bairstow, whose brilliant 140 set up England's innings victory in the first Test, went past 150 with his 17th four to continue his rich vein of form with the bat.
He made a costly error with the keeper's gloves, however, spilling a routine catch off Woakes to give Karunaratne a reprieve on 28.
The Sri Lanka opener took advantage to get to 50 for the first time in the series before he nicked Steven Finn down the leg side and Bairstow held the catch to make partial amends for his blunder.
Silva was untroubled by a toothless England attack, hitting 10 fours, and Kusal Mendis moved smoothly to 25 not out at the close.
Lord's Test: Bairstow defies Sri Lanka, helps England recover
Durham Test: England sense victory as Woakes and Broad strike
PHOTOS: Cook scripts history as England seal series vs SL
England batsmen fail to punish Sri Lanka
Euro 2016: Rashford, Sturridge make England squad