Sri Lanka, well-placed at 162 for one overnight, were 218 for six at lunch -- 198 runs behind England's first innings 416.
England, bidding to complete a whitewash at 2-0 up in the three-match series, took five wickets for 56 runs in Saturday's first session.
Kusal Perera, playing his first match in more than six months after a drugs ban was rescinded because of a faulty test, was 12 not out and Rangana Herath two not out.
Sri Lanka resumed with Kaushal Silva 79 not out and Kusal Mendis 25 not.
Also Read
Sri Lanka had not added a run when Woakes had Mendis lbw with his first ball Saturday to end a partnership of 54.
It was just reward for the Warwickshire all-rounder, who saw Jonny Bairstow drop a simple catch off his bowling to reprieve Dimuth Karunaratne, eventually out for 50, on Friday.
But wicket-keeper Bairstow, whose 167 not out on Friday was his Test-best score, made no mistake Saturday when he Silva edged Stuart Broad straight to him.
But the all-rounder was felled for three on Saturday, with 166 for three becoming 169 for four when he was squared up by Woakes and edged to Joe Root at second slip.
Woakes, bowling at sharp pace, almost had a wicket next ball too only for Dinesh Chandimal to inside-edge a yorker that just missed the stumps for four.
Woakes's opening spell on Saturday yielded impressive figures of two for 11 in seven overs.
Lahiru Thirimanne and Chandimal, who made an admirable 126 in the second Test, briefly resisted.
Chandimal was lbw for 19, with Thirimanne (17) edging to Root at second slip.
Left-hander Perera hit back by hitting two fours off Finn, including a defiant straight drive that whistled into the Pavilion fence.