Faits: A. Par décision du 25 septembre 2007, l'Office de l'assurance-invalidité pour le canton de Vaud (l'office AI) a alloué une rente entière d'invalidité à C._ pour la période s'étendant du 1er septembre 2003 au 31 juillet 2004. B. Le 27 novembre 2008, l'assurée a déféré la décision du 25 septembre 2007 au Tribunal des assurances du canton de Vaud (aujourd'hui : Cour des assurances sociales du Tribunal cantonal) en concluant à son annulation et au renvoi de la cause à l'office AI. A titre préalable, C._ a sollicité la restitution du délai de recours. A l'appui de sa requête, elle s'est prévalue du fait que R._, conseiller en assurances, qu'elle avait mandaté pour la représenter auprès de l'office AI avec élection de domicile, selon procuration du 25 novembre 2003, l'avait trompée sur la bonne exécution du mandat. L'assurée a allégué qu'elle s'était enquise à plusieurs reprises de l'avancement de la procédure auprès de son mandataire, et que celui-ci lui répondait que l'affaire suivait son cours devant le tribunal. Ce n'est que le 29 octobre 2008 qu'elle avait appris (en contactant l'office AI et le tribunal cantonal des assurances) qu'une décision avait été rendue un an auparavant et que celle-ci n'avait pas été attaquée. Par jugement du 21 avril 2009, la juridiction cantonale a rejeté la demande de restitution du délai et déclaré le recours irrecevable pour cause de tardiveté. C. C._ interjette un recours en matière de droit public contre ce jugement dont elle demande l'annulation, avec suite de frais et dépens, en concluant au renvoi de la cause au Tribunal cantonal. L'intimé conclut au rejet du recours, tandis que l'Office fédéral des assurances sociales a renoncé à se déterminer.