India are in sight of their first series triumph on Sri Lankan soil in 22 years, having reduced the hosts to 67 for 3 after setting them a daunting target of 386 in the third and final Test in Colombo on Monday.
Resuming at a precarious overnight score of 21 for 3, India did well to post 274 in their second innings and then leave the islanders miserably placed on an eventful penultimate day.
India now need to take the remaining seven wickets on a fifth day track to record a historic Test series win.
India last won a Test series in Sri Lanka under Mohammad Azharuddin's captaincy in 1993, 1-0.
It was yet another absorbing day of Test cricket as India began the day by consolidating their position. Thanks to useful contributions from Ravichandran Ashwin (58), Rohit Sharma (50), Stuart Binny (49), Amit Mishra (39) and Naman Ojha (35) in the second innings, they were able to put the match beyond Sri Lanka’s reach.
Dhammika Prasad (4-69) and Nuwan Pradeep (4-62) were the hosts’ main wicket-takers.
The good work by Sri Lanka’s lower order batsmen was carried on by the seam bowlers who dismissed Upul Tharanga (0), Dimuth Karunaratne (0) and Dinesh Chandimal (18) in quick succession to give the team firm control of the match.
Kaushal Silva (24) and captain Angelo Mathews (22) were at the crease when stumps were drawn for the day, which saw as many as 10 wickets fall and some heated exchange of words between the rival players.
Sri Lanka still trail by 319 runs with seven wickets in hand. Their highest ever successful run-chase on home soil in the fourth innings is 352 against South Africa in Colombo in 2006.
Recently, Pakistan scored 382 for three against Sri Lanka to win a Test match.
Set a daunting victory target, the Sri Lankan innings began on a disastrous note as Ishant Sharma (2-14) and Umesh Yadav (1-32) produced a hostile opening spell to knock off the top order.
Sri Lanka will have to bat out of their skin on the fifth day on a deteriorating Sinhalese Sports Club track to draw the match and prevent India from clinching the series with a 2-1 margin.
Earlier, India started the day on 21 for 3 in the second innings, a lead of 132 runs. Virat Kohli (21) and Rohit were the unbeaten batsmen at the crease.
While the almost new ball was still doing something, Dhammika Prasad and Nuwan Pradeep were unable to get purchase, similar to the past three morning sessions. At best, they beat the batsmen a couple times, and had another couple of leg before shouts.
Kohli and Rohit were watchful and slowly started playing shots as the 50-mark came up for India in the 19th over. They also brought up their 50-partnership for the fourth wicket off 90 balls.
Just before drinks, in the extended morning session though, Kohli played at a Pradeep out-swinger again, one which he could have left alone, and Upul Tharanga caught the ball at first slip after a minor juggle.
Binny then came out to bat and after a nervy start threw his bat around and attacked the bowling, looking more at ease. The Binny-Rohit combination to put up a 50-partnership off just 60 balls as the lead swelled past the 200-mark. Rohit then reached his half-century off 71 balls, and was looking good for more.
But, as has happened so often, with just about 15 minutes to the lunch break, he pulled the very next delivery and holed out at fine leg, throwing away all the hard work done in the morning session. Ojha then came to the crease, and avoided any further loss for India going into lunch.
Starting at 132 for five after lunch, India saw Binny and Naman Ojha stitch a 42-run sixth-wicket partnership to spell more trouble for the hosts.
After Ojha's departure, Mishra then managed a 55-run eight-wicket stand with Ashwin to make life easy for the visitors.
India crossed the 150-mark in the 42nd over, but Binny was unlucky to fall one short of a second Test fifty, as he edged Prasad to first slip.
Ojha kept on going and was joined by Mishra, who was promoted over Ashwin. The duo added only 19 runs before Ojha was once again out against the run of play.
Ojha had looked solid and at ease whilst scoring, plus India were not really accelerating in pursuit of a declaration at that stage. Yet he was dismissed whilst trying to up the ante, trying to slog Rangana Herath, throwing away his wicket for a second time in the match.
The fifty-run partnership between Ashwin and Mishra came off 88 balls as India crossed the 200-mark in the 59th over and the lead swelled past the 300-mark. Just when it looked they would get to tea without further loss, Mishra was run-out going for a single as Kaushal Silva caught him by surprise.
When Sri Lanka’s second innings began, Ishant came out all guns blazing and had the batsmen in all sorts of trouble immediately. He dismissed Tharanga in the very first over, caught behind, and then gave a send-off to the batsman, similar to the two in the second Test, which earned him a double fine from the ICC.
In the seventh over, he got rid of Dinesh Chandimal, who was caught by Virat Kohli at second slip after Lokesh Rahul had dropped him at first go at third slip. The Delhi pacer beat his head in celebration, perhaps in response to the altercation he had with a couple of Lankan players when he was batting. His antics caused the umpires to have words with India skipper Kohli on a couple occasions.
In between, Umesh Yadav removed Dimuth Karunaratne, caught behind again, as Sri Lanka were struggling at 21-3 at one stage. Kaushal Silva (24 batting) and Angelo Mathews (22 batting) were then unbeaten at the end, but have a mountain to climb on day five.
Stuart Binny (0-13), Amit Mishra (0-2) and Ashwin (0-4) were the other Indian bowlers deployed.