Sri Lanka 322 for 3 (Mendis 89, Gunathilaka 76, Mathews 52*) beat India 321 for 6 (Dhawan 125, Rohit 78, Dhoni 63) by seven wickets
Live scorecard and ball-by-ball details
They may be coming off an awful run of form, two of their players might have been ruled out, and their No. 4 may damage his hamstring during a crucial innings, but still, if the wind and the light and the time of day are just right, Sri Lanka can still summon up a little of their old big-tournament magic. They can rally, they can surge, they can surprise.
That India's batting went more or less perfectly to plan made Sri Lanka's ice-cold pursuit even sweeter. They were, after all, chasing a commanding 321 for 6, on an Oval surface that had turned up a little green on match day.
And it was, perhaps, a new generation of batsmen that set up the highest-successful chase in the tournament's history. Kusal Mendis hit a frill-free 89 that belied his youth, and Danushka Gunathilaka - with fewer than 20 ODIs on his timesheet - provided the innings its early impetus, hitting 76 off 72 balls himself. Kusal Perera then electrified the middle overs, before Angelo Mathews saw the chase home with help from a spry Asela Gunaratne. Sri Lanka sauntered to their target in the penultimate over, with seven wickets in hand. Mathews hit the winning run, having reached fifty with his previous blow. It was his first ODI since August last year.
Like with Sri Lanka's batting effort, India's, too, had several contributors. Shikhar Dhawan smote a smooth 125, Rohit Sharma breezed 78, and MS Dhoni cracked 63 off 52 balls late in the team innings. And it was not as if their bowlers made outlandish mistakes. India could have been tighter after Niroshan Dickwella's wicket in the fifth over, perhaps, and they did miss the offspin of R Ashwin, who has generally prospered against Sri Lanka.
But it was largely Sri Lanka's composure right through the innings that paved the path to this result. Virat Kohli switched up his bowling plans to the extent that he even gave himself three overs - for 17 runs - but nothing worked for long. In the end, only Bhuvneshwar Kumar claimed a wicket - the other two dismissals resulting from run outs. This was, remember, the same attack that had dismissed Pakistan for 164, and had bowled both Bangladesh and New Zealand out before the 40th over in the practice matches.
If Gunathilaka was the mover and shaker, driving imperiously down the ground and reverse-sweeping with aplomb, then Mendis kept the score moving in between the Gunathilaka bursts. Their 159-run stand for the second wicket wasn't quite chanceless - both saw difficult chances go down - but it was defined by the batsmen's control. Rarely were they leashed by India's bowling - either shuffling around the crease, or switching up their stance, if a few dot balls transpired - but they also evaluated boundary options with precision, and largely took only calculated risks. It was more or less the kind of partnership you would expect from two veteran batsmen, except it was two younger men who provided the innings this backbone.
Their youthful impetuousness did make an appearance when both men were caught short of their crease between the 28th and 33rd overs, attempting what were quite needless runs. So far ahead in the game were Sri Lanka at the time.
But they were replaced at the crease by Perera and Mathews, who wound up being just as effective. Perera - promoted to No. 4 ahead of Dinesh Chandimal - attempted only singles from his first 10 balls or so, before the more ambitious strokes began to make an appearance. Crucially, in between the lofted drives and cheeky scoops, Perera mined the gaps in the field. In fact, by the time he was forced to retire hurt due to trouble running between the wickets, Perera had moved to 47 off 44, but had uncharacteristically hit only four boundaries. At Perera's departure, Sri Lanka needed only 51 from 42 balls. Mathews took the reins, new man Gunaratne played some outrageous shots, including a memorable swee[ off Jasprit Bumrah for six, and Sri Lanka completed a roaring upset.
India will wonder how it ended this way, after they too had been so controlled in their batting effort. Dhawan progressed effortlessly through the early overs, never failing to look like he would move to a tenth ODI century. Rohit had been so dominant in the early going, it was almost a shock when he pulled Lasith Malinga to long leg in the 25th over. Together, India's openers had put on 138 and set their team on track to what should have been an unassailable score. Sri Lanka looked light of a wicket-taking option in the middle overs, as they had done against South Africa.
India's ascendancy seemed confirmed, when against his favourite opponents, MS Dhoni launched a six off his sixth ball, then set about unfurling his booming groundstrokes. Between the 40th and 45th overs, he struck six fours off 14 deliveries faced, setting India off on their final charge, which would yield 103 runs off the final ten overs. Sri Lanka was not helped by the feast of full tosses their quicks sent down.
It seemed inconceivable at the break that Sri Lanka could run down this score with such ease. They have now blown their group wide open, with each of the final two matches set to be virtual quarter finals.
In winning this match, Sri Lanka also completed their ninth successful 300-plus chase away from home - a record. India are second, with eight.
Andrew Fidel Fernando is ESPNcricinfo's Sri Lanka correspondent. @andrewffernando