Is Google Input Tools safe?
We analyzed Google Input Tools version 102's actual code and gave it a 66/100 trust score. Google Input Tools appears purpose-aligned, but its all-sites…
Bottom line
Google Input Tools appears purpose-aligned, but its all-sites access and ability to process typed text create meaningful privacy risk; the package shows no clear evidence of abusive behavior.
What it can access
The extension can operate across nearly all HTTP and HTTPS pages and process text in supported editors, including messages or payment-related fields. [Q2] [Q3] This broad access fits a typing tool but means sensitive text may leave the browser when conversion or voice features are used. [Q6]
Signs of misuse
The review shows feature-related transmission to Google and automatic editing of focused fields, but not unexplained collection, cookie or session theft, general visit tracking, or advertising and search manipulation. [Q14] [Q12] [Q17] No arbitrary remote command path was established. [Q16]
Code findings
What access does this extension ask for, and does that access make sense for what it claims to do?
The extension requests access to all ordinary HTTP and HTTPS websites, including every frame, so it can detect, read, and change text in supported editors. This broadly matches a tool for typing and translation, but it also exposes text entered on many sites to the extension and, for selected features, to Google services.
Requests offscreen, tabs, storage, and scripting permissions, plus access to http://*/* and https://*/*. — manifest.json:1
Runs its content components across HTTP and HTTPS pages, including all frames for one component. — manifest.json:1
Processes focused editable controls and commits transformed text and related events. — chext_driver.js:261-265,571-575
Sends selected input or voice data to Google services when those features are used. — chext_backgroundpage.js:150,154,157-160,184
Which websites can it run on, and can it read or change what appears on those pages?
It can read or change pages on broadly matched websites after any required approval.
Host permissions allow requests or privileged browser access, sometimes after later approval, for: http://*/*, https://*/* — manifest.json:1
Content scripts run directly on: http://*/*, https://*/*, http://*/*, https://*/* — manifest.json:1
The scripting permission allows code injection on approved host-permission sites. — manifest.json:1
Can it see sensitive information you type, such as passwords, payment details, messages, or form entries?
The extension can inspect and transform text in supported page editors, including messages and payment-related entries typed into ordinary text fields. Password-field handling appears to be masking or exclusion logic, so the code does not establish that password values are sent to the extension’s servers.
Runs in HTTP/HTTPS frames and discovers editable elements while installing focus and keyboard handling. — chext_loader.js:42-76
Processes focused editable controls and commits transformed text and related events. — chext_driver.js:261-265,571-575
Forwards input-tool request data from the content script to the background. — chext_driver.js:280-281
Can it access private browser data such as cookies, signed-in sessions, browsing history, bookmarks, or downloads?
No code evidence shows access to website cookies, browsing history, bookmarks, downloads, or signed-in browser sessions. The extension does use tabs and storage, but the traced behavior uses those for tab injection, language detection, and preferences rather than reading private browser data.
Declared permissions are offscreen, tabs, storage, and scripting; there is no cookies, history, bookmarks, or downloads permission. — manifest.json:39-43
Tab access is used to query HTTP/HTTPS tabs and inject the extension's own scripts. — chext_backgroundpage.js:154-155
The popup uses tab-related functions for controls and one-time language detection. — chext_popup.js:78-84
Can it access anything else on your device, such as files, location, camera, microphone, clipboard, or installed applications?
No evidence was found in the manifest or package for this capability.
Does it send information outside your browser? If so, what information is sent, where does it go, and why?
When remote conversion, prediction, or voice input is used, the extension sends page-derived input or supplied audio outside the browser. Destinations include Google Input Tools and, when configured with a user API key, Google’s Generative Language API.
Sends input-tool URL, payload, headers, and request data to the background. — chext_driver.js:280-281
Posts request data to fixed inputtools.google.com request or predict endpoints. — chext_backgroundpage.js:150,184
Routes configured voice requests and supplied audio to the Gemini endpoint. — chext_backgroundpage.js:154,157-160
Sends timing information through a Google CSI image request. — chext_driver.js:575-578
Does it download or run code, settings, or instructions supplied by a remote server?
The extension loads packaged language/layout scripts and also constructs script and resource URLs on Google-owned hosts. The package establishes that those remote resources are requested and, where used as scripts, executed, although their server-supplied contents are outside this package.
Builds and loads language, keyboard, message, and layout resources including ssl.gstatic.com resources. — chext_driver.js:189-194,502-533
Injects selected packaged layout and IME configuration scripts through the scripting API. — chext_backgroundpage.js:154-155
Can it take actions without a clear user request, such as opening pages, redirecting searches, downloading files, or sending requests?
It acts automatically on matching HTTP/HTTPS pages by installing listeners, modifying focused editors, and making feature-related requests without a separate prompt for each action. Installation also causes background tab queries and script injection.
Automatically installs page and editable-element listeners. — chext_loader.js:42-76
Monitors editors and commits transformed text and synthetic events. — chext_driver.js:261-265,571-575
Handles installation-time tab queries and script injection. — chext_backgroundpage.js:154-155
Can it change important browser settings, including your proxy, search engine, homepage, privacy settings, or other extensions?
No evidence was found in the manifest or package for this capability.
Is any important behavior difficult to inspect because the code is hidden, heavily obfuscated, dynamically generated, or supplied by third parties?
Most extension-owned entry points and privileged paths are traceable, but substantial generated bundles and remote Google resources remain only partially audited. That leaves uncertainty about behavior hidden in dormant library paths or supplied by those remote resources.
Large bundled service-worker file with library and runtime code. — chext_backgroundpage.js:1-173265
Large generated driver containing input-tool and voice functionality. — chext_driver.js:1-346126
Large dependency only partially catalogued. — languagedisplay.js:1-639577
Does it use eval(), new Function(), or string-based timers to turn text into executable code?
No direct use of eval(), new Function(), or string-based timers was identified in the reviewed paths. Because some large generated or library files were only partially catalogued, the package does not support a definitive absence claim for every reachable path.
Service-worker bundle is large and includes library code. — chext_backgroundpage.js:1-173265
Driver contains uncatalogued generated/library routines. — chext_driver.js:1-346126
Dependency coverage is partial. — languagedisplay.js:1-639577
Does it track the websites, pages, searches, or links you visit?
The extension runs on many pages and may send input-tool text and timing data to Google, but the reviewed code does not store, correlate, or transmit a general history of websites, searches, or links visited. Page injection alone is not tracking.
Content scripts are declared for HTTP/HTTPS pages and frames. — manifest.json:20-30
Input-tool request data and timing information are sent on feature paths. — chext_driver.js:280-281,575-578
Does it create a persistent ID or browser fingerprint to recognize you?
No persistent identifier or browser-fingerprint collection was identified. The extension does persist preferences and a user-provided Gemini API key, but not a tracking ID.
Defines storage helpers and initializes configuration values; no fingerprint or tracking identifier is described. — chext_backgroundpage.js:151-152
Does it send cookies, session details, authentication data, or page contents elsewhere?
It can send entered input and, when configured, recorded or supplied audio to Google services. The reviewed code does not show it reading or exfiltrating cookies, session tokens, or authentication headers from webpages.
Forwards input-tool payloads and request data to the background. — chext_driver.js:280-281
Uses fixed Google Input Tools destinations for POST requests. — chext_backgroundpage.js:150,184
Sends voice audio with the stored user API key to Gemini. — chext_backgroundpage.js:154,157-160
Does it record typing, form entries, clipboard contents, or screenshots?
The extension observes typing and composition events while processing supported editors, but the reviewed code does not establish persistent recording of keystrokes, clipboard contents, or screenshots. Voice audio is transmitted only through the configured voice-input path.
Installs keyboard, focus, and editable-element event handling. — chext_loader.js:42-76
Processes editor events and transformed text. — chext_driver.js:261-265,571-575
Handles supplied voice audio for Gemini requests. — chext_backgroundpage.js:157-160
Can a website or remote server send commands that make the extension take actions?
The reviewed bridge accepts messages from the extension’s own content scripts and recognized tab contexts, not arbitrary commands from a remote server or ordinary webpage. Remote responses can supply conversion results, but no path was established that turns them into arbitrary extension actions.
Handles runtime connections and forwards messages between recognized extension contexts. — chext_backgroundpage.js:153-160
Produces the observed request and input-control messages. — chext_driver.js:280-281,569-573
Does it alter links, referral codes, advertisements, shopping carts, or search results?
No code-map evidence shows link, referral, advertisement, shopping-cart, or search-result manipulation. Its page modifications are focused on input controls and related UI.
Detects editable controls and forwards input-related events. — chext_loader.js:42-76
Commits transformed text and manages input-tool UI rather than links or advertisements. — chext_driver.js:571-575
Does it redirect or modify web traffic, request headers, downloads, or proxy settings?
No evidence shows traffic redirection, header modification, download interception, or proxy-setting changes. It does make separate POST requests to fixed Google Input Tools endpoints.
Performs POST requests to fixed inputtools.google.com endpoints. — chext_backgroundpage.js:150,184
Passes input-tool request data and caller-provided headers for those requests; no general web-traffic interception is shown. — chext_driver.js:280-281
Can it communicate with software on the computer or services running on localhost?
No native-messaging, localhost, or computer-software communication was identified. The offscreen document communicates only with the extension background for storage migration.
Sends serialized extension-document localStorage to the background. — offscreen.js:1-5
Handles the offscreen migration and closes the document; no localhost or native application endpoint is shown. — chext_backgroundpage.js:154-155
Does it decode, decrypt, or unpack hidden data and then execute or inject it?
The extension decodes or serializes ordinary request/configuration data and base64-encodes voice audio, but no hidden payload is shown being unpacked and executed or injected. Dynamic scripts are packaged layouts/configurations or identified resource loads.
Injects selected layout and IME configuration resources based on extension messages. — chext_backgroundpage.js:154-155
Base64-encodes audio for an API request; the path returns text rather than executing it. — chext_backgroundpage.js:157-160
Builds resource URLs for input-tool configuration and UI resources. — chext_driver.js:189-194,502-533
Can ordinary websites access privileged extension features through messaging or exposed files?
Ordinary websites can request the extension’s declared web-accessible files, but those files do not grant privileged extension APIs. The reviewed runtime bridge is available to extension content scripts, not directly to arbitrary webpage JavaScript.
Makes packaged JavaScript, CSS, and image resources accessible to all URLs. — manifest.json:31-38
Runs as an extension content script in matching frames. — chext_loader.js:42-76
Processes extension runtime connections and recognized tab contexts. — chext_backgroundpage.js:153-160
Does suspicious behavior activate only for certain users, websites, dates, or remote settings?
Some behavior is conditional on selected tools, focused editors, configured API keys, recognized domains, and installation/startup state. No suspicious date-based or covert user-targeting switch was identified, but remote gstatic resources were not audited.
Input processing activates with stored configuration and editable-element focus. — chext_driver.js:261-265,571-575
Gemini requests require a configured key, and runtime forwarding uses domain matching. — chext_backgroundpage.js:154,157-160
Loads external resources from ssl.gstatic.com; those remote resources were outside the audited package. — chext_driver.js:502-533
Does it perform hidden resource-intensive work, such as cryptocurrency mining?
No cryptocurrency mining or other concealed resource-intensive computation was identified. Background work is tied to input processing, network requests, UI, and storage migration.
Background activity is request handling, message routing, script injection, and voice API processing. — chext_backgroundpage.js:150,154-160
Driver activity is editable-control monitoring and input-tool operation. — chext_driver.js:261-265,571-575
Does it change form fields or where a form sends its information?
It can change text in focused form fields and contenteditable editors by committing converted input and dispatching synthetic events. The reviewed code does not establish that it changes a form’s action URL or submission destination.
Discovers supported editable controls and dispatches input-related events. — chext_loader.js:42-76
Updates focused elements, commits transformed text, and manages synthetic events. — chext_driver.js:571-575