Left-arm spinner Ravindra Jadeja's twin strikes left Sri Lanka reeling at 31/3 in their pursuit of an improbable 410 at stumps on the fourth day of the third and final Test at the Ferozeshah Kotla here on Tuesday.
Dhananjay De Silva (13) and Angelo Mathews (0) were at the crease when the umpires called it a day, with the tourists 379 behind the target.
Sri Lanka got off to a dismal start losing both the openers Sadeera Samarawickrama (5) and Dimuth Karunaratne (13) cheaply as India made full use of the 16 overs before bad light stopped play.
Samarawickrama was the first to go when pacer Mohammed Shami fired a perfectly pitched bouncer that touched his gloves before landing in slips to Ajinkya Rahane.
Shami could not continue his spell thanks to poor light, and also had to leave the field as he was vomiting.
It gave Jadeja a chance, though, and the left-arm spinner responded by having Karunaratne caught behind and nightwatchman Suranga Lakmal bowled. He nearly had Dhananjaya de Silva too, but the batsman successfully revived a leg before decision.
Sri Lanka now have a Herculean task to salvage a draw from this position while India need only seven wickets to seal the series 2-0.
In the morning session, Sri Lanka were bowled out for 373 in their first innings, conceding a lead of 163 runs to India.
Resuming the penultimate day at 356/9, skipper Dinesh Chandimal was dismissed at his Test career-best score of 164. He hit 21 fours and a six. The Sri Lankan added 30 for the last wicket with tailender Lakshan Sandakan before being the last man out, slashing Ishant Sharma to third-man to hand the pacer his third wicket of the innings.
Thereafter, India came in to bat but lost Murali Vijay (9) and Ajinkya Rahane (10) cheaply to reach 51/2 at lunch break and stretch their overall lead to 214 runs.
In between, the issue of air pollution flared up again in the match, with Lakmal going off the ground after vomiting. The Sri Lankans came out fielding wearing anti-pollution masks.
Lakmal bowled only three overs when he was seen vomiting on the field, prompting the physio to run to the field. He returned to bowl four overs later.
Resuming the second session at 51/2, Dhawan (67) and Pujara (49) added 55 runs to the score before the Saurashtra right-hander played for non-existent turn and edged a straight ball from de Silva to slip.
But Pujara's positive approach rubbed off on Dhawan, who celebrated his 32nd birthday in style by taking chinaman Sandakan for a straight six before being stumped while going for another.
Rohit and Kohli then took charge, scoring briskly for their half-centuries. Kohli fell after his fifty, which also took his series tally past 600, while India declared immediately at 246/5 after Rohit reached his 50.