Files
binect-chrome/DEBUG_DOWNLOAD_DETECTION.md
tegwick be4377253e Switch to HTTP Basic Auth and improve PDF detection
- Replace token-based auth with HTTP Basic Authentication per Binect API v1 spec
- Improve PDF detection: check current tab first, then background service, fallback to recent downloads
- Add password visibility toggle in login form
- Add extensive debug logging throughout for troubleshooting
- Update manifest with alarms, activeTab permissions and <all_urls> host permission
- Add documentation files and development helper scripts
- Add Binect API specs for reference

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-14 16:50:57 +01:00

290 lines
8.9 KiB
Markdown

# Debugging Download Detection
This guide helps you debug why PDF download detection may not be working.
## Prerequisites
1. **Rebuild and reload the extension**
```bash
npm run build
```
Then go to `chrome://extensions/` and click the reload icon for BinectChrome
2. **Open the Service Worker console**
- Go to `chrome://extensions/`
- Find BinectChrome
- Click "service worker" link (or "Inspect views: service worker")
- This opens DevTools for the service worker
- **Keep this window open** while testing
## Step-by-Step Download Detection Test
### Step 1: Verify Service Worker is Running
**In the Service Worker console, you should see:**
```
[Service Worker] ===== BinectChrome service worker loaded =====
[Service Worker] Timestamp: 2024-01-14T...
[Service Worker] Initializing PDF detection...
[PDF Detector] Starting PDF detection, registering download listener
[PDF Detector] Listener registered successfully
```
**If you don't see these messages:**
- The service worker hasn't loaded yet
- Try clicking the extension icon (this wakes it up)
- Check for any red errors in the console
### Step 2: Test with a Simple PDF Download
**Download a test PDF:**
1. Right-click this link and select "Save link as...":
```
https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf
```
2. Save it to your Downloads folder
3. Watch the Service Worker console
**Expected console output:**
```
[PDF Detector] Download changed: {id: 123, state: {...}, stateValue: "in_progress"}
[PDF Detector] Download not complete, ignoring
[PDF Detector] Download changed: {id: 123, state: {...}, stateValue: "complete"}
[PDF Detector] Download complete, searching for item: 123
[PDF Detector] Search results: 1 items
[PDF Detector] Download item: {id: 123, filename: "dummy.pdf", mime: "application/pdf", ...}
[PDF Detector] PDF detected!
[Service Worker] PDF DETECTED CALLBACK: dummy.pdf
[Service Worker] Badge updated, PDF stored in memory
```
**After successful detection:**
- Extension badge should show "1"
- Badge color should be blue (#4A90E2)
### Step 3: Test with Direct Link Download
**Alternative method:**
1. Paste this URL directly in the address bar:
```
https://www.africau.edu/images/default/sample.pdf
```
2. Chrome will start downloading it
3. Watch the Service Worker console for the same log messages
### Step 4: Verify PDF is Stored
**Click the extension icon to open the popup**
- You should see the PDF details
- Filename: "dummy.pdf" or "sample.pdf"
- Size: displayed in KB or MB
- Domain: source domain
- "Send PDF to Binect" button should be enabled
## Troubleshooting: No Logs Appearing
### Issue 1: Service Worker Not Running
**Symptoms:** No console output at all, even "[Service Worker] loaded" message
**Solutions:**
1. **Wake up the service worker:**
- Click the extension icon
- OR go to `chrome://serviceworker-internals/` and find BinectChrome
- Click "Start" if it's stopped
2. **Check for startup errors:**
- Look for red errors in the service worker console
- Check `chrome://serviceworker-internals/` for registration errors
3. **Hard reload the extension:**
- Go to `chrome://extensions/`
- Remove BinectChrome completely
- Click "Load unpacked" and select the `dist/` folder again
### Issue 2: Service Worker Sleeping Before Download Completes
**Symptoms:** Service worker console shows "loaded" message, but no download events
**This is the most likely issue!** In Manifest V3, service workers shut down after 30 seconds of inactivity.
**Test if this is the issue:**
1. Open service worker console
2. Click the extension icon to wake it up
3. **Immediately** (within 30 seconds) download a PDF
4. Watch the console
**If you see logs now, the issue is service worker lifecycle!**
**Solution:** The service worker should automatically wake up when downloads complete, but there might be a timing issue. See "Potential Fixes" below.
### Issue 3: Download Events Not Firing
**Symptoms:** Service worker is running, but no "[PDF Detector] Download changed" logs
**Possible causes:**
1. **Downloads permission not granted:**
- Go to `chrome://extensions/`
- Click "Details" on BinectChrome
- Check "Permissions" section
- Should show "Read your browsing history" and "Manage your downloads"
- If missing, the manifest is wrong
2. **Event listener not registered:**
- Look for "[PDF Detector] Listener registered successfully" in console
- If missing, there's a code issue
3. **Chrome not triggering download events:**
- Try opening the PDF instead of downloading it (should trigger viewer detection)
- Check `chrome://downloads/` to verify download completed
### Issue 4: PDF Not Detected (Logs Show It's Not a PDF)
**Symptoms:** Logs show "Not a PDF, ignoring"
**Debug the detection logic:**
Look at the download item log:
```
[PDF Detector] Download item: {
id: 123,
filename: "document.pdf", // ← Should end with .pdf
mime: "application/pdf", // ← Should be "application/pdf"
...
}
```
**If filename doesn't end with .pdf and mime is not "application/pdf":**
- The file isn't actually a PDF
- OR the server sent wrong headers
## Advanced Debugging
### Check Download API Directly
**Run this in the Service Worker console:**
```javascript
chrome.downloads.search({ limit: 10, orderBy: ['-startTime'] }, (items) => {
console.log('Recent downloads:', items);
items.forEach(item => {
console.log(`${item.filename} - mime: ${item.mime} - state: ${item.state}`);
});
});
```
This shows your recent downloads and their properties.
### Manual Test: Trigger Detection Manually
**Run this in the Service Worker console:**
```javascript
// Get the most recent download
chrome.downloads.search({ limit: 1, orderBy: ['-startTime'] }, (items) => {
if (items.length > 0) {
const item = items[0];
console.log('Most recent download:', item);
// Check if it's a PDF
const isPDF = item.filename.toLowerCase().endsWith('.pdf') || item.mime === 'application/pdf';
console.log('Is PDF?', isPDF);
}
});
```
### Check if Listener is Registered
**Run this in the Service Worker console:**
```javascript
// This won't show listeners directly, but you can test by downloading a file
console.log('Testing listener by downloading a test file...');
chrome.downloads.download({
url: 'https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf',
filename: 'test-binect.pdf'
}, (downloadId) => {
console.log('Download started with ID:', downloadId);
});
```
Watch for "[PDF Detector] Download changed" logs.
## Potential Fixes
If download detection is unreliable due to service worker lifecycle:
### Option 1: Use chrome.storage for Persistence
Store detected PDFs in chrome.storage instead of memory, so they survive service worker restarts.
### Option 2: Add Download Completion Listener
Use `chrome.downloads.onCreated` in addition to `onChanged` to catch downloads earlier.
### Option 3: Poll Recent Downloads
When popup opens, check recent downloads even if callback didn't fire.
## Testing Different PDF Sources
### Test 1: Direct PDF Link
```
https://www.africau.edu/images/default/sample.pdf
```
**Expected:** Direct download, should detect
### Test 2: PDF Behind Link
```
https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf
```
**Expected:** Right-click → Save as, should detect
### Test 3: Large PDF
```
https://www.adobe.com/support/products/enterprise/knowledgecenter/media/c4611_sample_explain.pdf
```
**Expected:** Larger file, may take longer to download
### Test 4: Google Drive PDF
1. Upload a PDF to your Google Drive
2. Click it to view
3. **Important:** Use the PDF viewer detection (new feature)
4. If you download it, should also detect
## Success Criteria
**Download detection is working when:**
1. ✅ Service worker console shows all log messages
2. ✅ Badge updates to "1" after download
3. ✅ Popup shows PDF details
4. ✅ "Send PDF to Binect" button is enabled
5. ✅ Works consistently across multiple downloads
## Still Not Working?
If download detection still doesn't work after following this guide:
1. **Export debug logs:**
- Right-click in service worker console → "Save as..."
- Save the console output
2. **Check service worker status:**
- Go to `chrome://serviceworker-internals/`
- Find BinectChrome
- Screenshot the status section
3. **Get downloads permission status:**
```javascript
chrome.permissions.contains({
permissions: ['downloads']
}, (result) => {
console.log('Has downloads permission:', result);
});
```
4. **Report the issue:**
- Email bernd.worsch@binect.de
- Include: console logs, screenshots, Chrome version
- Describe: what you tried, what happened
## Workaround: Use PDF Viewer Detection
**If download detection is unreliable, use the new PDF viewer detection:**
1. Open a PDF in Chrome (paste URL in address bar)
2. Click the extension icon
3. Should detect the PDF from the current tab
4. This bypasses download detection entirely!
See `TESTING_PDF_VIEWER.md` for details.