Exemplo n.º 1
0
  @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;
  }