protected Header[] mergeHeaders(HttpCacheEntry entry, HttpResponse response) {

    if (entryAndResponseHaveDateHeader(entry, response)
        && entryDateHeaderNewerThenResponse(entry, response)) {
      // Don't merge headers, keep the entry's headers as they are newer.
      return entry.getAllHeaders();
    }

    List<Header> cacheEntryHeaderList = new ArrayList<Header>(Arrays.asList(entry.getAllHeaders()));
    removeCacheHeadersThatMatchResponse(cacheEntryHeaderList, response);
    removeCacheEntry1xxWarnings(cacheEntryHeaderList, entry);
    cacheEntryHeaderList.addAll(Arrays.asList(response.getAllHeaders()));

    return cacheEntryHeaderList.toArray(new Header[cacheEntryHeaderList.size()]);
  }