Faits:
A. B._, née en 1974, a été au service de X._ SA en qualité d'ouvrière de février 2003 à décembre 2006. Souffrant d'une capsulite des épaules prédominante à gauche, au décours, en raison de travaux répétitifs avec les bras, elle a cessé cette activité professionnelle depuis juillet 2006. Selon le docteur R._, spécialiste en rhumatologie, sa patiente a été incapable de travailler de juillet 2006 à mai 2007; à compter du 21 mai 2007, elle dispose à nouveau d'une capacité entière de travail, à la condition d'éviter les travaux exigeant le maintien des bras surélevés (rapport du 21 juillet 2008). Le docteur C._, médecin au Service médical régional, a fixé la capacité de travail exigible à 30 % dans l'activité habituelle et à 100 % dans une activité adaptée (appréciation du 16 septembre 2008).
Par décision du 28 novembre 2008, l'Office cantonal de l'assurance-invalidité du canton de Genève a fixé le degré d'invalidité de B._ à 7 % et rejeté la demande de prestations qu'elle avait déposée le 3 juin 2008.
B. B._ a déféré cette décision au Tribunal cantonal des assurances sociales de la République et canton de Genève. Le docteur M._, spécialiste en médecine physique et rééducation, nouveau médecin traitant, a été entendu par le tribunal le 7 avril 2009. Lors de cette audience, l'assurée a produit un rapport de l'Atelier de réadaptation professionnelle de l'Hôpital Y._ du 1er avril 2009, signé par V._, technicien responsable.
Par jugement du 28 avril 2009, la juridiction cantonale a rejeté le recours.
C. B._ interjette un recours en matière de droit public contre ce jugement dont elle demande l'annulation. Elle conclut principalement à la prise en charge d'une réadaptation professionnelle et à l'allocation d'une rente entière d'invalidité depuis le 1er juillet 2007, subsidiairement 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.

Considérant en droit:
1. Le litige porte sur le droit de la recourante à des mesures professionnelles et à une rente.
A cet égard, les premiers juges ont exposé correctement les règles applicables, si bien qu'il suffit de renvoyer au jugement attaqué.
2. La recourante se plaint d'une violation de son droit d'être entendue et d'une appréciation arbitraire des faits.
D'une part, elle estime que le tribunal cantonal se serait borné à tort à examiner si l'appréciation du docteur M._ était de nature à mettre en doute les conclusions du docteur R._ et celles du SMR. A son avis le tribunal ne pouvait pas écarter le point de vue du docteur M._ au profit de celui du SMR, car ni l'un ni l'autre n'avaient posé de diagnostic.
D'autre part, la recourante reproche au tribunal d'avoir méconnu les conclusions du rapport de l'Hôpital Y._ du 1er avril 2009, où son auteur affirmait notamment qu'elle avait totalement collaboré, qu'elle présentait de fortes douleurs dans les deux épaules et la colonne cervicale et concluait qu'elle n'était pas en mesure de travailler dans le marché primaire (ou économique). Selon la recourante, à défaut d'avoir examiné la pertinence de ce document et d'avoir mis en oeuvre toute investigation complémentaire, le tribunal cantonal ne pouvait pas retenir l'appréciation de la capacité de travail de l'intimé.
3. La juridiction cantonale a établi les faits sur la base du rapport du docteur R._ du 21 juillet 2008, lequel renseignait suffisamment les organes d'application de l'AI sur la nature de l'atteinte à la santé de la recourante et ses incidences sur la capacité de travail dans une activité adaptée. Dans la mesure où le docteur M._ n'a pas infirmé les conclusions de son confrère R._, qu'il n'a pas posé de diagnostic autre que celui de périarthrite et qu'il ne s'est pas exprimé clairement sur la question de la capacité de travail, les premiers juges n'ont pas violé le droit fédéral en suivant l'appréciation du docteur R._, reprise par le SMR.
Le tribunal cantonal a certes omis d'examiner la pertinence du rapport de l'Atelier de réadaptation professionnelle de l'Hôpital Y._ du 1er avril 2009. Toutefois, à l'examen de ce document (cf. <ref-law>), on constate qu'il s'agit d'un résumé de stage d'observation professionnelle, dans lequel l'accent a été mis essentiellement sur les plaintes de la recourante, tandis que la part consacrée aux observations ou aux explications est sommaire sinon lacunaire. De plus, aucun responsable médical de l'Hôpital Y._ n'a visé ce rapport et on ignore tout des qualifications professionnelles de son auteur.
Il s'ensuit que les griefs que la recourante a soulevés ne permettent pas au Tribunal fédéral d'admettre que l'autorité précédente aurait constaté les faits déterminants de façon manifestement inexacte ou en violation du droit, en particulier dans la mesure où les constats se rapportent à la question de l'étendue de la capacité de travail qui reste exigible dans une activité adaptée (<ref-law>).
4. Quant au degré de l'invalidité (7 %), la recourante ne démontre pas en quoi il aurait été fixé contrairement à la loi, au regard des constatations de fait du tribunal cantonal.
5. La recourante, qui succombe, supportera les frais de la procédure (<ref-law>).

Par ces motifs, le Tribunal fédéral prononce:
1. Le recours est rejeté.
2. Les frais judiciaires, arrêtés à 500 fr., sont mis à la charge de la recourante.
3. 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 22 mars 2010
Au nom de la IIe Cour de droit social
du Tribunal fédéral suisse
Le Président: Le Greffier:
Meyer Berthoud