feat: implement resetDRMState to clear state and session on new manifest detection

This commit is contained in:
voldemort 2025-07-22 10:28:25 +07:00
parent f40e1880d6
commit 0b59c6b0d6

View File

@ -39,6 +39,47 @@ const logWithPrefix = (...args) => {
} }
}; };
function resetDRMState() {
logWithPrefix("Resetting DRM state for new manifest...");
// Reset DRM detection state
originalChallenge = null;
serviceCertFound = false;
drmType = "NONE";
psshFound = false;
foundWidevinePssh = null;
foundPlayreadyPssh = null;
drmDecided = null;
// Reset CDM and session state
if (remoteCDM) {
try {
// Try to close the existing session if it exists
if (remoteCDM.session_id) {
remoteCDM.closeSession();
}
} catch (e) {
// Ignore errors when closing session
logWithPrefix("Error closing previous CDM session:", e.message);
}
remoteCDM = null;
}
// Reset interceptor state
generateRequestCalled = false;
remoteListenerMounted = false;
injectionSuccess = false;
foundChallengeInBody = false;
licenseResponseCounter = 0;
keysRetrieved = false;
// Post reset messages to clear UI state
window.postMessage({ type: "__DRM_TYPE__", data: "" }, "*");
window.postMessage({ type: "__PSSH_DATA__", data: "" }, "*");
window.postMessage({ type: "__KEYS_DATA__", data: "" }, "*");
window.postMessage({ type: "__LICENSE_URL__", data: "" }, "*");
}
window.postMessage({ type: "__GET_DRM_OVERRIDE__" }, "*"); window.postMessage({ type: "__GET_DRM_OVERRIDE__" }, "*");
window.postMessage({ type: "__GET_INJECTION_TYPE__" }, "*"); window.postMessage({ type: "__GET_INJECTION_TYPE__" }, "*");
window.postMessage({ type: "__GET_CDM_DEVICES__" }, "*"); window.postMessage({ type: "__GET_CDM_DEVICES__" }, "*");
@ -94,6 +135,9 @@ function headersToFlags(headersObj) {
} }
function handleManifestDetection(url, headersObj, contentType, source) { function handleManifestDetection(url, headersObj, contentType, source) {
// Reset DRM state when new manifest is detected
resetDRMState();
window.postMessage({ type: "__MANIFEST_URL__", data: url }, "*"); window.postMessage({ type: "__MANIFEST_URL__", data: url }, "*");
logWithPrefix(`[Manifest][${source}]`, url, contentType); logWithPrefix(`[Manifest][${source}]`, url, contentType);