/* * Takes the initial client cookie value, if any (null otherwise), as well * as the page load timestamp and creates initial states. */ protected void initCookieStates(String plainCookieId, String etagCookieId) { CookieStates states = getCookieStates(); CookieState plainState; ZombieCookie cookie = null; if (plainCookieId == null) { // may be overridden to UNSUPPORTED after javascript info received plainState = NEW; } else if ((cookie = lookupZombieCookie(plainCookieId)) != null) { if (cookie.hasParent()) { cookie = cookie.oldestRelative(); plainState = REPLACED_BY_OLDER_PLAIN_COOKIE; } else { plainState = EXISTING; } } else { plainState = RESET; } if (cookie == null) { cookie = createZombieCookie(); } setAndSaveZombieCookie(cookie); states.setPlainState(plainState); updateCookieStates(ETAG, etagCookieId); }
private void setStatesAndBindCookies(CookieType candidateType, ZombieCookie candidateCookie) { CookieStates states = getCookieStates(); ZombieCookie currentCookie = getZombieCookie(); if (currentCookie.hasParent()) { // The current selected zombie cookie, in theory, could have a // new parent inserted from a seperate simultaneous page load // in a different HTTP session. We don't have a seperate state // name for this, but in practice we never see it either. currentCookie = currentCookie.oldestRelative(); log.error("found unexpected parent cookie={}", currentCookie.getId()); } boolean usingCandidateParent = false; if (candidateCookie.hasParent()) { usingCandidateParent = true; candidateCookie = candidateCookie.oldestRelative(); } if (candidateCookie.isOlder(currentCookie)) { states.set( candidateType, usingCandidateParent ? replacedFromOlderState(candidateType) : EXISTING); cascadeNewBestCookie(candidateType); } else { // Pick a replacementent state for the candidate cookie setHowCookieWasReplaced(candidateType); } // If the incomming candidate cookie had a parent equal to the current // cookie, we don't have to set a new value. if (!currentCookie.getId().equals(candidateCookie.getId())) { setAndSaveZombieCookie(currentCookie.linkTo(candidateCookie)); } }