), so idempotency matters.)
// 2) try/catch around defineProperty — some browsers lock HTMLMediaElement.prototype.src as
// non-configurable on the parent prototype, shadowing it would throw.
// If the override fails, the setAttribute and MutationObserver below still catch most
// dynamic src assignments, so the page still works.
const videoProto = HTMLVideoElement.prototype;
const srcDesc = Object.getOwnPropertyDescriptor(HTMLMediaElement.prototype, 'src') ||
Object.getOwnPropertyDescriptor(HTMLVideoElement.prototype, 'src');
if (srcDesc) {
try {
Object.defineProperty(videoProto, 'src', {
configurable: true,
enumerable: true,
set(v) { srcDesc.set.call(this, rewriteUrl(v)); },
get() { return srcDesc.get.call(this); }
});
} catch (e) { /* parent src is non-configurable; rely on setAttribute/MutationObserver */ }
}
// Override source element src
const sourceProto = HTMLSourceElement.prototype;
const srcDesc2 = Object.getOwnPropertyDescriptor(sourceProto, 'src');
if (srcDesc2) {
try {
Object.defineProperty(sourceProto, 'src', {
configurable: true,
enumerable: true,
set(v) { srcDesc2.set.call(this, rewriteUrl(v)); },
get() { return srcDesc2.get.call(this); }
});
} catch (e) { /* parent src is non-configurable; rely on setAttribute/MutationObserver */ }
}
// Override img.src property
const imgProto = HTMLImageElement.prototype;
const imgSrcDesc = Object.getOwnPropertyDescriptor(imgProto, 'src') ||
Object.getOwnPropertyDescriptor(HTMLElement.prototype, 'src');
if (imgSrcDesc && imgSrcDesc.set) {
try {
Object.defineProperty(imgProto, 'src', {
configurable: true,
enumerable: true,
set(v) { imgSrcDesc.set.call(this, rewriteUrl(v)); },
get() { return imgSrcDesc.get.call(this); }
});
} catch (e) { /* parent src is non-configurable; rely on setAttribute/MutationObserver */ }
}
// Override setAttribute for video, source, AND img
const origSetAttr = Element.prototype.setAttribute;
Element.prototype.setAttribute = function(name, value) {
if ((name === 'src' || name === 'data-src') && (this.tagName === 'VIDEO' || this.tagName === 'SOURCE' || this.tagName === 'IMG')) {
value = rewriteUrl(value);
}
return origSetAttr.call(this, name, value);
};
// Patch HLS.js if loaded
const origAppendChild = Node.prototype.appendChild;
const origInsertBefore = Node.prototype.insertBefore;
// MutationObserver to catch dynamically added video/source/img elements
const observer = new MutationObserver(mutations => {
for (const mut of mutations) {
for (const node of mut.addedNodes) {
if (node.tagName === 'SOURCE' || node.tagName === 'VIDEO' || node.tagName === 'IMG') {
const s = node.getAttribute && node.getAttribute('src');
if (s) {
const rewritten = rewriteUrl(s);
if (rewritten !== s) origSetAttr.call(node, 'src', rewritten);
}
const ds = node.getAttribute && node.getAttribute('data-src');
if (ds) {
const rewritten = rewriteUrl(ds);
if (rewritten !== ds) origSetAttr.call(node, 'data-src', rewritten);
}
}
if (node.querySelectorAll) {
node.querySelectorAll('source[src], video[src], img[src], img[data-src]').forEach(el => {
const s = el.getAttribute('src');
if (s) {
const rewritten = rewriteUrl(s);
if (rewritten !== s) origSetAttr.call(el, 'src', rewritten);
}
const ds = el.getAttribute('data-src');
if (ds) {
const rewritten = rewriteUrl(ds);
if (rewritten !== ds) origSetAttr.call(el, 'data-src', rewritten);
}
});
}
}
// Also handle attribute changes on existing elements
if (mut.type === 'attributes' && (mut.attributeName === 'src' || mut.attributeName === 'data-src')) {
const el = mut.target;
if (el.tagName === 'IMG' || el.tagName === 'VIDEO' || el.tagName === 'SOURCE') {
const val = el.getAttribute(mut.attributeName);
if (val) {
const rewritten = rewriteUrl(val);
if (rewritten !== val) origSetAttr.call(el, mut.attributeName, rewritten);
}
}
}
}
});
observer.observe(document.documentElement, { childList: true, subtree: true, attributes: true, attributeFilter: ['src', 'data-src'] });
})();
Gender:
Woman
Age:
50 years old
Country:
United Kingdom
Profile hits:
336,675
Subscribers:
19,262
Total video views:
46,728,337
:
AKA:
Claudette Perkins, Claudia Price, Ebony Godexxx Mizzclaudiaxxx, Ebonygoddess
Signed up:
July 25, 2023 (1,049 days ago)
Last activity:
10 days ago
Worked for/with:
SCOUT69official, Onlycougars, BlueBirdFilms, Rome Major, CRUNCHBOY, Defiance Films, kingsofFetish, Estelle And Friends, MilfHeaven, Mommys Girl - An Adult Time Site, Kofilms, Pinkkittyvideo, 4KFantasy, ssk-, Pervystudio, Thetotalfetishxxx, Perv Milfs n Teens, 18club, PlanetX, Goliath Films, Modernmilfs, Nothinbuttbabes, adultwhisper, Pureredlight, Clubhardcore, Skankery, Goliath Girls, Forteporno, Myhotporntv, Webcentral, MMV WORLD, Erotic Female Domination, eroticplanetX, Deutschland Porno, Gsporn, Hood Black Amateurs, Shagging Moms, Teasing Angels, KillerGramNetwork, PleaseGrope Me, British Bukkake, LezPOV, AEN-Extreme, Hardcorefullvids, BlackCatProduction, Platinum X Pictures, Insane MIND X, The Hunters XXX, Miscymovies, ContentDealer, Time4sex, Hardacademy, Lesbian Love, Coyote Raunch, SaintPorn, Her First BWC, Just Cumshots
Ebony Goddess was most frequently tagged:
blowjob (244), interracial (230), facial-cumshot (197), big-tits (174), shaved-pussy-hair (160), 1-on-1 (151), doggystyle (148), big-cock (145), pornstar (141), cowgirl (137), high-heels (132), brunette (116), blonde (105), deep-throat (100), solo-masturbation (91)