Easy Dark Mode

Easy Dark Mode

ID: ibbkokjdcfjakihkpihlffljabiepdag

Supported Languages

🇺🇸English
🇪🇸Spanish

Extension Info & Metadata

Status
Active
Version
1.3.2
Size
0.93 MB
Rating
4.0/5
Reviews
4
Users
3,000
Type
Extension
Updated
Jan 30, 2026
Category
Functionality & ui
Price
Free
Featured
No
Visibility
Unlisted
Mature
No
By Google
No
Trusted
No

Publisher Contextual Analysis

Author
weaverstar048View Profile
MX records exist
Yes
Domain exists
Yes
Is disposable
No
Is role-based
No
Mailbox exists
Yes
Total Extensions
1
Active
1
Obsolete
0
Listed
0
Unlisted
1
Total Users
3,000
Screenshot 1

Enable dark mode on any website with one easy click

Easy Dark Mode - Convenience and Eye Protection for Your Workflow. Looking for a simple way to activate Google Doc Dark Mode and reduce eye strain while working? ⭢ Easy Dark Mode is the perfect solution! This handy dark mode extension allows you to easily switch to a darker background in your browser, making it ideal for working in Google Docs and other online tools. ✎ Whether you're writing, editing, or just browsing, switching to dark mode for Chrome provides a more comfortable and relaxing experience. ◐ Why Use Dark Mode Chrome? ✓ Reduce Eye Strain: Prolonged exposure to bright screens can cause discomfort. By using Chrome dark mode, you’ll experience reduced glare, making it easier on your eyes. ✓ Focus Better at Night: Activate night mode for Chrome and enjoy a softer, dark background that’s ideal for low-light environments. It’s perfect for late-night work sessions or reading. ✓ Stay Productive: By making your browsing experience more comfortable, dark mode for Chrome helps you stay focused and productive for longer periods without distractions. How to Turn On Chrome Dark Mode? → Using Easy Dark Mode is simple. Install the extension, and with just one click, you can switch to Google Doc Dark Mode or activate night mode for Chrome in any webpage. No more bright, blinding screens—just smooth, dark backgrounds that enhance your overall user experience. ✿ With Easy Dark Mode, you have the flexibility to quickly toggle between light and dark themes, making it a must-have tool for anyone who spends long hours online. Try it today and experience the benefits of dark mode Chrome firsthand!

Item
Type
Severity
Description
declarativeNetRequest
Permission
Critical
This permission allows the extension to define rules to block, redirect, or modify network requests. Rated Critical because it can control all network traffic, potentially blocking security updates or redirecting to malicious sites.
<all_urls>
Host
Critical
Broad host access — the extension can read/modify content on every website.
Contextual Risk Factors
Risk Factor
High
The following context increases the overall risk:• 10% increase: Early script execution enables pre-emptive content manipulation
Broad Host Permissions
Risk Factor
High
This extension has broad host permissions allowing it to access many or all websites.
storage
Permission
Medium
This permission allows storing data locally in the browser. Rated Medium because it can persist sensitive user data, track user activities over time, and potentially store malicious payloads.
Early Content Script Execution
Risk Factor
Medium
This extension runs content scripts at document_start.

The declarativeNetRequest rule unconditionally removes `content-security-policy` and `x-frame-options` from every website the user visits (main_frame and sub_frame). Stripping CSP destroys XSS protection site-wide; stripping X-Frame-Options enables clickjacking on any site relying on it. While some dark mode extensions strip CSP selectively (e.g. only for pages that fail injection), removing it globally for all URLs goes far beyond what dark mode rendering requires and materially harms the user's security posture on every site they browse.

rules.json (Line 1)
[  {    "id": 1,    "priority": 1,    "action": {      "type": "modifyHeaders",      "responseHeaders": [        {          "header": "content-security-policy-report-only",          "operation": "remove"        },        {          "header": "content-security-policy",          "operation": "remove"        },        {          "header": "theme-security-policy",          "operation": "remove"        },        {          "header": "x-frame-options",          "operation": "remove"        }      ]    },    "condition": {      "urlFilter": "*",      "resourceTypes": [        "main_frame",        "sub_frame"      ]    }  }]

On install and every ~4 hours (triggered by `DM_UPDATE` message in content.js when `Date.now() - lastUpdate > 144e5`), the background script POSTs a persistent UUID (`userId`) and the user's full custom domain list (`customDomains`) to the publisher's server. The `customDomains` array reveals which specific websites the user has visited and deliberately configured, making it a behavioural profile tied to a stable identifier. No data collection of any kind is declared in the CWS listing. The server's response (`suggestColorMode`, `darkModeFilters`) is stored in local storage and used by the content script to influence per-site behaviour, constituting a live remote-configuration channel — the exact pattern identified by Palant's 2025 research on this extension class.

script/background.js (Line 163)
c.append("contextRef", e), // e = userId (UUID generated at install)  c.append("customMode", JSON.stringify(a)), // a = customDomains array  n.n = 1, fetch(    "https://easy-dark-mode.online/api/themeConfigData", {      method: "POST",      body: c    });// ...i = n.v, s = i.recommend, f = i.darkModeFilters,  n.n = 4, chrome.storage.local.set({    suggestColorMode: s,    darkModeFilters: f  }, (function() {}));

The bundled manifest (v1.3.2) declares only `storage` and `declarativeNetRequest`, omitting `tabs` and `scripting` that appear in the live CWS published manifest. The popup code in `popup/popup.js` actively calls `chrome.tabs.query()` with URL access (requiring the `tabs` permission), so the bundled manifest is functionally incomplete — the extension uses capabilities it does not declare in the analysed package. A mismatch where the published version carries broader permissions than the ZIP indicates the CWS listing may represent a silently upgraded capability set relative to the reviewed bundle.

manifest.json (Line 17)
{  "permissions": [    "storage",    "declarativeNetRequest"  ],  "host_permissions": [    "<all_urls>"  ]}

On each startup the background registers an uninstall URL that encodes the persistent `userId` in the path. This means even a user who removes the extension silently pings the publisher's server with their tracking UUID, confirming removal and completing the lifecycle record. Combined with the regular telemetry POSTs, this demonstrates a deliberate user-tracking infrastructure operating without CWS disclosure.

script/background.js (Line 247)
chrome.runtime.setUninstallURL(  "https://easy-dark-mode.online/api/uninstall/" + t)

By severity

Critical2
High6
Medium2
Low0

Versions scanned

Showing 2 of 5 scanned versions with more than one unique finding. Counts are unique findings that include each version.

Extension VersionCode Review Findings
1.3.46
1.3.24

Files with findings

5 distinct paths — top paths by unique finding count:

  • script/background.js4
  • rules.json2
  • script/content.js2
  • manifest.json1
  • popup/popup.js1
S.No.
Category
Severity
File
Summary
Found in Version
1Data Exfiltration
critical
script/background.js (line 166)On every startup and every 4-hour refresh, the background service worker POSTs the user's persistent UUID (`contextRef`/userId), their full list of per-site custom domain overrides (`customMode`), and consent flag to …
2Network Interception
critical
rules.json (line 1)The extension uses declarativeNetRequest to strip `content-security-policy`, `content-security-policy-report-only`, and `x-frame-options` response headers from every page the user visits (urlFilter: "*", all frames). …
3Network Interception
high
rules.json (line 1)The declarativeNetRequest rule unconditionally removes `content-security-policy` and `x-frame-options` from every website the user visits (main_frame and sub_frame). Stripping CSP destroys XSS protection site-wide; st…
4Other
high
manifest.json (line 17)The bundled manifest (v1.3.2) declares only `storage` and `declarativeNetRequest`, omitting `tabs` and `scripting` that appear in the live CWS published manifest. The popup code in `popup/popup.js` actively calls `chr…
5Tracking
high
script/background.js (line 248)On install the extension registers an uninstall callback URL that includes the user's persistent UUID (`userId`) in the path. When the extension is removed, Chrome silently hits this URL, notifying the remote server e…
6Tracking
high
script/background.js (line 163)On install and every ~4 hours (triggered by `DM_UPDATE` message in content.js when `Date.now() - lastUpdate > 144e5`), the background script POSTs a persistent UUID (`userId`) and the user's full custom domain list (`…
7Unauthorized Data Collection
high
script/content.js (line 819)The GDPR consent banner injected into every page explicitly admits collecting page URLs, referrer headers, timestamps, page titles, and user agent strings. This constitutes comprehensive browsing-history tracking acro…
8Unauthorized Data Collection
high
popup/popup.js (line 131)The report submission function collects and transmits to the remote server: the user's persistent UUID (uId), current page host (pageLocation), full browser user-agent string, install date, OS color-scheme preference,…
9Tracking
medium
script/content.js (line 313)The content script dynamically injects a `<link rel="stylesheet">` tag pointing to `https://fonts.cdnfonts.com/css/helvetica-neue-5` into the DOM of every page where the hint widget is shown. This causes the user's br…
10Tracking
medium
script/background.js (line 247)On each startup the background registers an uninstall URL that encodes the persistent `userId` in the path. This means even a user who removes the extension silently pings the publisher's server with their tracking UU…
URLs
15
IPv4
1
IPv6
0

URLs

View the external URLs this extension communicates with to understand its network activity and data interactions.

Gain full insight into all external connections.

Upgrade for full visibility.

easy-dark-mode.online/api/reporthttps://easy-dark-mode.online/api/report
fonts.cdnfonts.com/css/helvetica-neue-5https://fonts.cdnfonts.com/css/helvetica-neue-5
www.w3.org/2000/svghttp://www.w3.org/2000/svg
s0.wp.com/latex.php/https://s0.wp.com/latex.php\
www.youtube.com/embed/https://www.youtube.com/embed\
a.gfx.ms/rte_metro2.png/https://a.gfx.ms/rte_metro2.png\
wikimedia.org/api/rest_v1/media/math/render/svg/https://wikimedia.org/api/rest_v1/media/math/render/svg\
musescore.com/static/musescore/scoredata//https://musescore.com/static/musescore/scoredata/\
s3.ultimate-guitar.com/musescore.scoredata//https://s3.ultimate-guitar.com/musescore.scoredata/\
easy-dark-mode.online/api/themeConfigDatahttps://easy-dark-mode.online/api/themeConfigData
Showing 1 to 10 of 20 rows
Rows per page:

Gain full insight into all external connections.

Upgrade for full visibility.

8.8.8.8
IPv4
-
Showing 1 to 5 of 10 rows
Rows per page:

Code Diff

Compare extension code between any two versions.

0 changed files (scanned top 25 shared text files)

No comparable text files found between these versions.

Browse and explore files within this extension package

Gain full insight into all external connections.

Upgrade for full visibility.