Chrome plugin file upload setFiles fails with Not allowed and upload forms can hang
Summary
The Chrome plugin can connect to Chrome and navigate normally, but repeatedly hangs/timeouts on an authenticated invoice upload form when trying to inspect controls, upload files, or capture a visual screenshot.
This blocked completing a browser task that required uploading receipt images through @Chrome only.
What happened
Using the Chrome plugin in Codex Desktop:
browser.user.openTabs()worked.browser.tabs.list()/browser.tabs.get()worked.- Navigation to
https://www.zoetispetcare.com/account/rewardsworked. - Reading
body.innerText()worked on the rewards dashboard and the initial invoice instructions page. - Clicking through to the invoice submission flow worked.
- Once on the actual invoice form (
/account/rewards/invoice), repeated Chrome-plugin calls timed out until the Node runtime reset.
Calls that timed out included:
tab.playwright.locator('input[type="file"]').count()tab.playwright.locator('input').count()tab.playwright.locator('body').innerText(...)tab.playwright.waitForEvent("filechooser", ...)combined with clicking upload text/buttonstab.cua.get_visible_screenshot()tab.dom_cua.get_visible_dom()
The timeout pattern was consistent: the page stayed open in Chrome, but the plugin call hung until the tool reported a timeout and kernel/runtime reset.
Expected behavior
The Chrome plugin should either:
- allow normal Playwright/CUA interaction with the upload form, including file chooser upload, or
- fail quickly with an actionable error explaining that the page/frame/control cannot be automated.
It should not hang until the runtime resets.
Actual behavior
Chrome-plugin calls against the invoice form repeatedly timed out. This made it impossible to continue the task through @Chrome, despite the browser tab being navigated and logged in successfully.
Environment
- Codex Desktop on macOS
- Chrome plugin / Codex Chrome Extension
- Browser: Google Chrome
- Site: authenticated Zoetis Petcare Rewards invoice submission form
- Date observed: 2026-05-07
Notes
This may be related to file upload controls, authenticated pages, page scripts, or the plugin's DOM/CUA bridge on this specific form. The important product issue is that the plugin gets stuck instead of returning a bounded failure.
5 Comments
Potential duplicates detected. Please review them and close your issue if it is a duplicate.
Powered by Codex Action
Additional repro detail: this is not limited to the authenticated Zoetis form.
I created a minimal local page served from
http://127.0.0.1with a plain file input:Using the Chrome plugin against that simple page:
Observed result:
So there appear to be two related behaviors:
chooser.setFiles(...)fails withNot allowed.Environment details from the local checks:
147.0.7727.1381.1.4_0node scripts/...Confirming the same upload-timeout pattern on Windows and a different authenticated upload surface (observed July 10, 2026).
Environment
26.707.3748.00.144.0150.0.7871.1011.2.27203.26575_0https://sleek.design/dashboardReproduction
waitForEvent("filechooser"), click the page's image-attachment control, and callsetFiles(...)with five synthetic/demo-safe PNGs.domSnapshot()call hangs until timeout and resets the browser-control runtime.The failure persisted after Chrome/Codex/Windows restarts and plugin reinstallation. Local extension and native-host checks passed. No credentials or private/customer data were uploaded.
This matches the core behavior reported here—normal authenticated navigation followed by upload-page bridge timeout—but also shows the issue on Windows, in newer Codex/extension versions, and with a post-timeout Chrome lock that does not reliably release user control. Related Windows bridge/uninstall report: #21670.
Confirming a second Windows failure mode on an authenticated HTTPS upload form (observed July 13, 2026).
Environment
10.0.26200x6426.707.8168.026.707.30751150.0.7871.1151.2.27203.26575_0Reproduction
``
html
``<label for="attachment">Add attachment</label>
<input id="attachment" type="file">
``
js
``const chooserPromise = tab.playwright.waitForEvent("filechooser", { timeoutMs: 10000 });
await input.click({ force: true }); // the label click was tested separately
const chooser = await chooserPromise;
``
text
`Timed out after 3000ms waiting for file chooser.
timeoutMs: 10000`.The observed 3-second timeout also ignored the requested
newAllowFileAccess: true). Extension and native-host health checks passed.DOM.setFileInputFileswas then rejected by the browser client with:``
text
``This method is not supported through raw CDP. Use tab.playwright.waitForEvent("filechooser") and chooser.setFiles(...) instead.
This leaves no working Chrome-only upload path: the supported chooser event never arrives, while the lower-level file-input command redirects back to the same failing chooser flow. The documented native-picker fallback is also blocked on this Windows setup by the separate browser URL-confidence issue tracked in #25271.
Expected behavior: the chooser event should fire and permit
setFiles(...), or fail with a specific permission/capability error. The configured timeout should also be honored.No credentials, private report content, or real user/customer data are included in this reproduction.
Follow-up from the same Windows machine (observed 2026-07-14): I can now distinguish the permission failure from a control-targeting failure, and I have a successful Chrome-only upload path.
Environment
10.0.26200x6426.707.62119DefaultprofileSuccessful isolation test
A plain local
<input type="file">served fromhttp://127.0.0.1worked end to end:The page observed the expected file name, size and MIME type, with no browser warnings/errors. This proves the extension permission and
setFilespath were functional in the same Chrome session.Authenticated HTTPS form
The failing form used a visually hidden file input and a visible associated label:
The input was technically
display: blockbutopacity: 0and approximately0.09375 × 0.09375CSS pixels. Waiting forfilechooserand clicking the input had previously produced the chooser timeout. Using the visible associated label instead worked:Afterward the form set
C:\\fakepath\\test.zip, marked the field changed, and appended the next empty attachment input. No console warnings/errors were recorded.Product implication
In this failure mode, file-URL permission is not the root cause. The current troubleshooting collapses “chooser never opened” and “
setFileswas denied” into the same permission advice. A useful fix would be to:setFilespermission/capability failure;label[for]when the underlying file input is effectively non-interactable;No credentials, private report content, target name, or customer data are included here.