Security Warning: High Security Risk
Clear Pip View
ID: dcmdiknbnpjcbecpfpipeadobeldbijh
Supported Languages
Extension Info & Metadata
Publisher Contextual Analysis
- Author
- Terens HaynesView Profile
- Privacy
- Privacy Policy
- MX records exist
- Yes
- Domain exists
- Yes
- Is disposable
- No
- Is role-based
- No
- Mailbox exists
- Yes
Enhance Your Viewing Experience with Clear Pip View: Picture-in-Picture (PiP) Made Crystal Clear!
Are you tired of constantly switching between tabs to watch videos while browsing? Clear Pip View is here to revolutionize your online video experience. With our browser extension, you can seamlessly activate Picture-in-Picture (PiP) mode and enjoy your favorite videos without sacrificing screen space or efficiency. Key Features: Activate PiP mode via toolbar icon: Smart Pip View offers a user-friendly toolbar icon that allows you to instantly activate PiP mode with a single click. Say goodbye to manual resizing and struggling to fit videos on your screen. Icons in video player on major platforms: We understand that you have your preferred video platforms. That's why Clear Pip View ensures compatibility with major platforms such as YouTube and more. Our extension seamlessly integrates with their video players, making it incredibly convenient to activate PiP mode. Note: Please ensure that the tab containing the video remains open for PiP to function properly. Say goodbye to the days of minimizing or losing sight of your videos while multitasking. Clear Pip View empowers you to multitask efficiently, allowing you to enjoy your videos in a compact, resizable PiP window while continuing to browse the web or work on other tasks. Don't miss out on this opportunity to optimize your screen space and enhance your productivity. Experience the future of online video with Clear Pip View. Install our browser extension today and embrace a smarter way to enjoy Picture-in-Picture technology!
The background service worker exfiltrates a persistent per-user UUID (client_id/user_id) and session_id to Google Analytics 4 Measurement Protocol with a hardcoded api_secret (ZPzaor2gRqiZQ_ZmZfRyww) and measurement_id (G-2F5NKH17B2). The api_secret is embedded in the extension code, and the user has no opt-out — this is unauthorized analytics tracking from a Chrome extension whose stated function is Picture-in-Picture.
async function pH(pT, Bj, hU, uo, na) { const Sf = undefined, pH = { user_id: Bj, client_id: Bj, events: [{ name: pT, params: { session_id: hU } }] }, sg = `https://www.google-analytics.com/mp/collect?${new URLSearchParams({api_secret:uo,measurement_id:na}).toString()}`; await fetch(sg, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(pH) })}On install/update and every service-worker wakeup the extension iterates ALL currently open tabs and injects content.js into every frame using `world: "MAIN"` — i.e., the page's own JavaScript context with full access to page globals/variables, not the isolated content-script world. This is a privilege-escalation pattern that lets injected code read/modify any site's runtime state and bypass page-context isolation.
async function Sf() { const pT = await chrome.storage.local.get("enabled"); (null == pT ? void 0 : pT.enabled) || await chrome.storage.local.set({ enabled: !0 }); const Bj = await chrome.tabs.query({}); for (const pT of Bj) if (pT.id) try { await chrome.scripting.executeScript({ files: ["js/content.js"], injectImmediately: !0, target: { tabId: pT.id, allFrames: !0 }, world: "MAIN" }) } catch (pT) {}}Generates and persists a stable per-installation UUID (`cid`) in chrome.storage.local that survives browser restarts, paired with a session UUID (`sid`). Combined with the all_frames document_start MAIN-world content script and <all_urls> host permissions, this creates a stable cross-site tracking identifier transmitted to the developer's GA4 property.
async function na() { const pT = await new Promise((pT => { chrome.storage.local.get(["cid"], (Bj => { pT(Bj) })) })); let { cid: Bj } = pT; return Bj || (Bj = (0, uo.v4)(), chrome.storage.local.set({ cid: Bj })), Bj}async function Sf() { const pT = await new Promise((pT => { chrome.storage.session.get(["sid"], (Bj => { pT(Bj) })) })); let { sid: Bj } = pT; return Bj || (Bj = (0, uo.v4)(), chrome.storage.session.set({ sid: Bj })), Bj}Creates a recurring `ga4` alarm (daily) and unconditionally fires telemetry events (`first_open`, `tutorial_begin`) on every service worker startup. The alarms permission is being used to keep the extension's analytics pings active rather than for any user-facing feature.
async function sg(pT, Bj) { chrome.runtime.onInstalled.addListener((async hU => { if ("install" === hU.reason) { const hU = await na(), uo = await Sf(); await pH("first_open", hU, uo, Bj, pT) } })); const hU = await na(), uo = await Sf(); await pH("tutorial_begin", hU, uo, Bj, pT), chrome.alarms && chrome.alarms.create("ga4", { periodInMinutes: 60 * 24 })}Content script is registered with extremely broad scope: every http/https URL, all frames (including cross-origin iframes), about:blank documents, and earliest possible execution (document_start). Combined with `<all_urls>` host_permissions and the MAIN-world programmatic injection in background.js, the extension has the technical capability to observe and manipulate any site the user visits — far broader than required for a per-site Picture-in-Picture button.
{ "content_scripts": [ { "matches": [ "http://*/*", "https://*/*" ], "js": [ "js/content.js" ], "all_frames": true, "match_about_blank": true, "run_at": "document_start" } ]}Creates a <script> element, sets textContent, and appends it to document.head to execute code in the page's main world. The injected payload here is benign (`document.exitPictureInPicture()`), but the pattern itself is a code-injection sink — under MV3 this technique is commonly used to evade CSP/isolated-world restrictions. Worth flagging because the content script already runs at document_start in all_frames including about:blank.
case na.a.CHROME: if (Bj) { const pT = document.createElement("script"); pT.textContent = "document.exitPictureInPicture()", document.head.appendChild(pT), pT.remove() } else pT.removeAttribute("disablepictureinpicture"), pT.requestPictureInPicture();break;By severity
Versions scanned
Showing 1 of 3 scanned versions with more than one unique finding. Counts are unique findings that include each version.
| Extension Version | Code Review Findings |
|---|---|
| 1.0.0 | 6 |
Files with findings
3 distinct paths — top paths by unique finding count:
- js/background.js4
- js/content.js1
- manifest.json1
Code Diff
Compare extension code between any two versions.
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.