Half-centuries from Virat Kohli and Abhinav Mukund took India's lead to almost 500 after Sri Lanka were all out just after lunch on day three of the first Test in Galle.
Dilruwan Perera was left stranded eight short of a maiden Test century when Sri Lanka were dismissed for 291 in reply to the tourists' mammoth 600 all out on Friday.
Angelo Mathews (83) was one of three batsmen dismissed by Ravindra Jadeja (3-67) before Mukund (81) made his highest Test score and Kohli (76 not out) eased his way towards another century after opting against enforcing the follow-on.
The top-ranked side were frustrated by a rain delay in the afternoon session, but moved on to 189-3 at stumps, an advantage of 498 runs, with a crushing victory surely on the cards with two days to come.
Sri Lanka, already without Asela Gunaratne after he fractured his thumb on day one, lost Rangana Herath to a finger injury, but the stand-in captain is expected to return to the field on day four.
-- BCCI (@BCCI) July 28, 2017
Mathews and Perera prevented India from making further inroads after Sri Lanka resumed on 154-5, but a 62-run sixth-wicket stand was ended when the former skipper slapped Jadeja straight to Kohli in the covers.
Jadeja also removed Herath, but Perera was enjoying himself, launching Jadeja for two sixes and smashing Ravichandran Ashwin over the ropes twice in an entertaining innings.
He was short of support, though, debutant Hardik Pandya cleaning up Nuwan Pradeep for his first Test victim before lunch and Jadeja bowling Lahiru Kumara soon after the interval to end the innings.
Kohli allowed his bowlers to put their feet up by choosing to bat again, but first-innings centurions Shikhar Dhawan and Cheteshwar Pujara missed out on what was still a good pitch when they were dismissed by Perera and Kumara respectively.
Mukund and Kohli piled on the runs after a break for rain, putting on 133 in 30 overs and the loss of Herath, who left the field after he was struck on the middle finger of his bowling hand when misfielding.
A sweep off Herath had taken Mukund, who hit eight boundaries, to his half-century and Kohli timed the ball exquisitely as he closed in on a ton.
There will no maiden hundred for Mukund, though, after the opener was trapped leg before Danushka Gunathilaka in what proved to the last ball of the day.