Mitchell Starc took five wickets and Usman Khawaja looks to have retained his Ashes spot with a century as Australia set Sri Lanka a victory target of 516 runs late on the third day of the second test on Sunday.
Sri Lanka was 17 without loss at stumps, still needing 499 runs to win, with Dimuth Karunaratne and Lahiru Thirimanne both on eight not out.
Australia scored 534-5 declared in its first innings and then declared again Sunday at 196-3 after Khawaja had scored an unbeaten 101.
Starc claimed 5-54 to help to bowl out Sri Lanka for 215. He claimed his 10th five-wicket haul in tests by taking the final two Sri Lanka wickets in his first over after lunch to give Australia a 319-run lead after the first innings.
Captain Tim Paine then opted not to enforce the follow-on in hot conditions at Canberra's Manuka Oval, but Sri Lanka's bowlers rallied to make light work of Australia's top order.
Marcus Harris was caught by Kusal Mendis at second slip off Kasun Rajitha for 14, before Joe Burns, who scored 180 in the first innings, could only manage nine as he edged a Vishwa Fernando delivery to Mendis.
Marnus Labuschagne was then caught behind off Fernando for four to reduce Australia to 37-3.
Before lunch, batsman Kusal Perera became the second Sri Lankan player in two days to leave with a head injury after he ducked into a ball from Australian fast bowler Jhye Richardson. Perera received treatment on the field, with play stopping for several minutes. He tried to continue and add to his 29 but the play was stopped again shortly after as the 13-test batsman left the field, ending a promising 37-run partnership with Dhananjaya de Silva.
Perera was replaced by Dimuth Karunaratne, who had retired hurt on day two after being hit in the neck by a Pat Cummins delivery, and the opener added 13 runs to his score on Sunday to bring up his 22nd Test half-century before he was dismissed for 59.
Immediately after lunch, Starc (5-54) had Dilruwan Perera caught behind and then bowled Fernando two balls later which ended the innings as Kusal Perera did not return to bat.
Australia beat Sri Lanka by an innings and 40 runs in the first test at Brisbane.