blob: 67caf0baca38c5c56881eafae1ba81bb51f6592a [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/renderer/subresource_redirect/subresource_redirect_util.h"
#include "base/command_line.h"
#include "base/strings/string_number_conversions.h"
#include "chrome/renderer/subresource_redirect/subresource_redirect_params.h"
#include "components/base32/base32.h"
#include "crypto/sha2.h"
#include "net/base/escape.h"
#include "url/gurl.h"
namespace subresource_redirect {
GURL GetSubresourceURLForURL(const GURL& original_url) {
DCHECK(original_url.is_valid());
GURL compressed_url = GetSubresourceRedirectOrigin().GetURL();
std::string origin_hash = base::ToLowerASCII(base32::Base32Encode(
crypto::SHA256HashString(
original_url.scheme() + "://" + original_url.host() + ":" +
base::NumberToString(original_url.EffectiveIntPort())),
base32::Base32EncodePolicy::OMIT_PADDING));
std::string host_str = origin_hash + "." + compressed_url.host();
std::string query_str =
"u=" + net::EscapeQueryParamValue(original_url.GetAsReferrer().spec(),
true /* use_plus */);
std::string ref_str = original_url.ref();
GURL::Replacements replacements;
replacements.SetHostStr(host_str);
replacements.SetPathStr("/i");
replacements.SetQueryStr(query_str);
if (!ref_str.empty())
replacements.SetRefStr(ref_str);
compressed_url = compressed_url.ReplaceComponents(replacements);
DCHECK(compressed_url.is_valid());
return compressed_url;
}
} // namespace subresource_redirect