@Override public Set<String> apply(Stream stream, Fields requestHeaders, Fields responseHeaders) { Set<String> result = Collections.<String>emptySet(); short version = stream.getSession().getVersion(); if (!isIfModifiedSinceHeaderPresent(requestHeaders) && isValidMethod(requestHeaders.get(HTTPSPDYHeader.METHOD.name(version)).getValue()) && !isUserAgentBlacklisted(requestHeaders)) { String scheme = requestHeaders.get(HTTPSPDYHeader.SCHEME.name(version)).getValue(); String host = requestHeaders.get(HTTPSPDYHeader.HOST.name(version)).getValue(); String origin = scheme + "://" + host; String url = requestHeaders.get(HTTPSPDYHeader.URI.name(version)).getValue(); String absoluteURL = origin + url; if (LOG.isDebugEnabled()) LOG.debug("Applying push strategy for {}", absoluteURL); if (isMainResource(url, responseHeaders)) { MainResource mainResource = getOrCreateMainResource(absoluteURL); result = mainResource.getResources(); } else if (isPushResource(url, responseHeaders)) { Fields.Field referrerHeader = requestHeaders.get("referer"); if (referrerHeader != null) { String referrer = referrerHeader.getValue(); MainResource mainResource = mainResources.get(referrer); if (mainResource == null) mainResource = getOrCreateMainResource(referrer); Set<String> pushResources = mainResource.getResources(); if (!pushResources.contains(url)) mainResource.addResource(url, origin, referrer); else result = getPushResources(absoluteURL); } } if (LOG.isDebugEnabled()) LOG.debug("Pushing {} resources for {}: {}", result.size(), absoluteURL, result); } return result; }