Faits:
A. Par décision du 27 juin 2006, l'Office cantonal de l'assurance-invalidité du canton de Genève a alloué un quart de rente d'invalidité à G._ à compter du 1er août 2002. Le 16 juillet 2008, l'office AI a admis partiellement l'opposition de l'assurée et l'a mise au bénéfice d'une rente entière depuis le 1er avril 2008.
B. Représentée par ASSUAS (H._), l'assurée a déféré cette décision au Tribunal cantonal des assurances sociales de la République et canton de Genève en concluant au versement d'une demi-rente à partir du 1er août 2002. Le cachet postal apposé sur l'enveloppe du recours porte la date du 16 septembre 2008. Au verso de l'enveloppe figure la mention manuscrite suivante :
Je soussignée, E._, certifie que ce pli a été déposé à la Poste X._ le lundi 15 septembre 2008 à 22 heures. Pour faire valoir ce que de droit, E._.
En cours de procédure, Me François Gillioz, avocat, a fait savoir au tribunal cantonal qu'il avait succédé à ASSUAS et que H._ était son collaborateur (lettre du 11 mai 2009). Les conclusions du recours ont été étendues au versement d'une rente entière depuis le 1er août 2002 (écritures des 26 et 29 juin 2009).
Par jugement du 14 octobre 2009, la juridiction cantonale a déclaré le recours irrecevable pour cause de tardiveté.
C. G._ interjette un recours en matière de droit public contre ce jugement dont elle demande l'annulation, avec suite de frais, en concluant au renvoi de la cause aux premiers juges pour complément d'instruction et nouveau jugement.
L'intimé conclut au rejet du recours. Le tribunal cantonal s'en remet à justice, en précisant que la déclaration écrite apposée au dos de l'enveloppe lui a échappé et que E._ n'a pas été entendue. De son côté, l'Office fédéral des assurances sociales a renoncé à se déterminer.

Considérant en droit:
1. Le litige porte sur le respect du délai de recours de trente jours pour attaquer la décision sur opposition du 16 juillet 2008 (art. 38 et 39 LPGA).
Cette décision a été notifiée à sa destinataire durant les féries judiciaires de l'été 2008. Le délai de recours est ainsi parvenu à échéance lundi 15 septembre 2008.
2. La recourante reproche au tribunal cantonal d'avoir constaté la date du dépôt de son recours cantonal de façon manifestement erronée. En effet, l'enveloppe contenant le mémoire portait un témoignage écrit dont il ressortait que le pli avait été déposé le 15 septembre 2008 dans un office postal du canton de Genève. C'est donc à tort que la date du 16 septembre 2008, correspondant au jour de l'oblitération du timbre postal, avait été retenue.
Par ailleurs, la recourante fait grief aux premiers juges de n'avoir pas respecté son droit d'être entendue, en ce sens qu'elle n'a pas été invitée à se déterminer sur le respect du délai de recours. Elle précise que deux audiences de comparution des parties ont été tenues en 2009 devant la juridiction cantonale de recours, sans que cette dernière aborde la question de la prétendue tardiveté du recours.
3. Le tribunal établit avec la collaboration des parties les faits déterminants pour la solution du litige; il administre les preuves nécessaires et les apprécie librement (art. 61 let. c LPGA). Le principe inquisitoire s'applique aussi lors de l'examen du respect du délai de recours (<ref-ruling> consid. 1b p. 12; consid. c de l'arrêt I 189/97 du 24 février 1998, non publié in VSI 1998 p. 217; arrêt non publié I 287/93 du 24 janvier 1994). Pour le surplus, la question du respect de ce délai est soumise à l'exigence de la preuve stricte (<ref-ruling> consid. 3c/bb p. 10).
Lorsque l'observation du délai de recours est douteuse, le juge des assurances ne saurait refuser d'entrer en matière sur le recours dont il est saisi sans établir préalablement les faits pertinents qui se rapportent à cette question. A défaut, il ne respecte ni la lettre ni l'esprit de l'art. 61 let. c LPGA. De plus, s'il tranche cette question sans offrir à la partie recourante la possibilité de s'exprimer ou de participer à l'administration de la preuve, le juge viole son droit d'être entendue, garanti par l'art. 29 al. 2 Cst. (arrêt I 287/93 précité).
En l'état, il n'appartient pas au Tribunal fédéral de constater les faits ni de trancher le point de savoir si le témoignage de E._ vaut preuve stricte du respect du délai de recours (la prénommée a déjà signé plusieurs attestations de ce genre). Cette tâche incombe à la juridiction cantonale de recours, à qui la cause doit être renvoyée à cet effet.
4. L'intimé, qui succombe, a conclu au rejet du recours. Il supportera les frais et les dépens (art. 66 al. 1 et 68 al. 1 LTF).

Par ces motifs, le Tribunal fédéral prononce:
1. Le recours est admis. Le jugement du Tribunal cantonal des assurances sociales de la République et canton de Genève du 14 octobre 2009 est annulé, la cause lui étant renvoyée pour qu'il procède conformément aux considérants.
2. Les frais judiciaires, arrêtés à 500 fr., sont mis à la charge de l'intimé.
3. L'intimé versera à la recourante la somme de 600 fr. (y compris la TVA) à titre de dépens pour la procédure fédérale.
4. Le présent arrêt est communiqué aux parties, au Tribunal cantonal des assurances sociales de la République et canton de Genève et à l'Office fédéral des assurances sociales.
Lucerne, le 31 mars 2010
Au nom de la IIe Cour de droit social
du Tribunal fédéral suisse
Le Président: Le Greffier:
Meyer Berthoud