What each line of the security policy means
Every page of the fixer carries a Content-Security-Policy in its own HTML, a meta tag at the top of the page source. It is a list of rules that your browser enforces for the page. This is the exact policy:
default-src 'none'; script-src 'self' https://static.cloudflareinsights.com; style-src 'self' 'unsafe-inline'; img-src 'self' blob: data:; font-src 'self'; connect-src https://cloudflareinsights.com; worker-src 'self'; media-src 'self' blob:; manifest-src 'none'; base-uri 'none'; form-action 'none'
| Rule | What it means |
|---|---|
default-src 'none' | Allow nothing by default. Anything not named below, such as frames, is refused. |
script-src 'self' https://static.cloudflareinsights.com | Only this site's own script files run, plus the visit counter's script from static.cloudflareinsights.com. Inline scripts are refused. |
style-src 'self' 'unsafe-inline' | Styles come from this site's own style sheets or from style rules written in the page itself. Styles change how the page looks and cannot send anything. |
img-src 'self' blob: data: | Images come from this site, or from blob: and data: addresses, which need no network request. |
font-src 'self' | Fonts come only from this site. No font service is contacted. |
connect-src https://cloudflareinsights.com | The key rule. The page's code may not connect to any address, not even this site's, except cloudflareinsights.com, where the visit counter reports. That covers fetch, XMLHttpRequest, WebSocket, EventSource and sendBeacon. |
worker-src 'self' | Workers, including the one that processes your files, start only from this site's own files. |
media-src 'self' blob: | Audio and video come only from this site or from blob: addresses, which need no network request. |
manifest-src 'none' | No web app manifest is loaded. |
base-uri 'none' | No base element can change where the page's relative links point. |
form-action 'none' | No form on the page can be submitted to any address. |
Together they close the usual routes for sending data out of the page: requests, forms, remote images and fonts, frames. Your photos are read and written inside the browser tab.
The one opening is the visit counter. We count page visits with Cloudflare Web Analytics: no cookies, no personal data, and never your files. Its script reports the page address without anything after a ? or #, the page you came from (cut the same way), your browser and system type and the page's loading times. The page never hands it a photo, a video, the memories list or a location: files go only to the processing worker, which has no network code.
Source: MDN Web Docs, the Content Security Policy guide, the header reference and the connect-src page, checked 20 October 2026. For the visit counter: Cloudflare, Web Analytics and its FAQ (content security policy entries, when the beacon reports), checked 21 October 2026.
The two workers and what each can reach
Two background scripts, called workers, belong to the fixer.
- The processing worker,
/photo-date-fixer/js/worker.js, reads your ZIP files, matches them to the memories list and writes the fixed copies. The page hands your files to it and to nothing else. A worker does not take on the policy of the page that starts it, so this one is not covered by the rules above. It contains no code that opens a connection, which you can read at that address, and it reports any network request it makes to the counter on the page. - The service worker,
/photo-date-fixer/sw.js, keeps the offline copy. It fetches only this site's own files, the ones the fixer's pages load, and passes every other request through untouched. It never receives your files.
So the worker that handles your files has no network code, and the one that uses the network reaches only this site's own files.
Source: MDN Web Docs, Using Web Workers (content security policy) and Service Worker API, checked 20 October 2026.
What the “Sent from this page” counter shows
The panel has a live counter, “Sent from this page”. From the moment you add files, it counts the network requests the page and its processing worker make. It ignores blob: and data: addresses, which need no network request, and the visit counter’s two addresses, static.cloudflareinsights.com and cloudflareinsights.com. It stays at 0. If a request ever appeared, the readout would show the request count and turn into a warning.
A page could draw any number, so the check below uses your browser's own tools instead.
How the offline copy works
The first time you open the fixer, your browser installs the service worker. It saves the fixer's pages, scripts, style sheets, fonts and images in the browser's cache. With a connection, pages still load from the network, so you get the current version; without one, they load from that copy. When the panel says “Works offline: ready”, the copy is complete. Clearing the site's data removes it. With the copy stored, the tool does its whole job without a connection, which is why airplane mode works. The visit counter's script is not part of that copy, so without a connection it simply does not run.
Check it yourself in Chrome or Edge
- Open the fixer (not this guide) in its own tab, press F12 and choose the Network tab. It records only while developer tools are open, so reload the page.
- Click the first row, the one of type “document”, and open its Response tab. Near the top of the page source you find the
metatag withhttp-equiv="Content-Security-Policy". Its content matches the policy above and includesconnect-src https://cloudflareinsights.com, the only address the page may connect to. - Wait for “Works offline: ready” in the panel and clear the list. Press “Try a sample export”, wait for the review screen, choose “Browser storage, then I save each part” if the folder option is shown, and press “Fix dates and build the ZIP parts”. The sample is made-up data built in your browser. When the parts are ready, the counter reads 0. The list has no row for any address except this site and the visit counter: its script, and a small POST to
cloudflareinsights.com/cdn-cgi/rumwhen the page loads and when you leave it. Open that POST and read its payload: the page address, the page you came from, browser and loading figures, and nothing from your files. The list may also show a few script files from this site, such as the sample builder and the processing worker. Rows that start withblob:ordata:are not network requests. - Reload once, switch on airplane mode (or choose Offline in the Network throttling menu) and run the whole sample again. It works without a connection, so it needed none. The visit counter's script does not load without one, and the tool does not need it.
- Optional: open
/photo-date-fixer/js/worker.jsand/photo-date-fixer/sw.jsand search them for fetch, XMLHttpRequest, WebSocket and sendBeacon. The processing worker uses none of them; the service worker uses fetch only for this site's own files.
Repeat step 3 with your own ZIP files if you like, and press “Delete the temporary copies” when you are done. If anything differs from this page, write to info@peakappsstudio.com.
Source: Chrome DevTools documentation, Network panel reference, checked 20 October 2026.
Sources
- MDN Web Docs: Content Security Policy (CSP), last checked 20 October 2026
- MDN Web Docs: Content-Security-Policy header, last checked 20 October 2026
- MDN Web Docs: Content-Security-Policy connect-src directive, last checked 20 October 2026
- MDN Web Docs: Using Web Workers, content security policy, last checked 20 October 2026
- MDN Web Docs: Service Worker API, last checked 20 October 2026
- Chrome DevTools documentation: Network panel reference, last checked 20 October 2026
- Cloudflare Web Analytics: About, last checked 21 October 2026
- Cloudflare Web Analytics: FAQs, content security policy and when the beacon reports, last checked 21 October 2026
Run the sample with developer tools open, then add your own export the same way.
Open the date fixer