blob: bb3df85d9f81641ee85c793770dd7e2ff3e9aef1 [file] [log] [blame]
// Copyright 2015 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.
#ifndef COMPONENTS_VARIATIONS_NET_VARIATIONS_HTTP_HEADERS_H_
#define COMPONENTS_VARIATIONS_NET_VARIATIONS_HTTP_HEADERS_H_
#include <memory>
#include <set>
#include <string>
namespace net {
class HttpRequestHeaders;
struct NetworkTrafficAnnotationTag;
class URLRequest;
}
namespace network {
struct ResourceRequest;
class SimpleURLLoader;
} // namespace network
class GURL;
namespace variations {
enum class InIncognito { kNo, kYes };
enum class SignedIn { kNo, kYes };
// Adds Chrome experiment and metrics state as custom headers to |headers|.
// The content of the headers will depend on |incognito| and |signed_in|
// parameters. It is fine to pass SignedIn::NO if the state is not known to the
// caller. This will prevent addition of ids of type
// GOOGLE_WEB_PROPERTIES_SIGNED_IN, which is not the case for any ids that come
// from the variations server. These headers are never transmitted to non-Google
// web sites, which is checked based on the destination |url|.
// Returns true if custom headers are added. Returns false otherwise.
bool AppendVariationHeaders(const GURL& url,
InIncognito incognito,
SignedIn signed_in,
net::HttpRequestHeaders* headers);
// Returns the HTTP header names which are added by AppendVariationHeaders().
std::set<std::string> GetVariationHeaderNames();
// Strips the variation header if |new_location| does not point to a location
// that should receive it. This is being called by the ChromeNetworkDelegate.
// Components calling AppendVariationsHeaders() don't need to take care of this.
void StripVariationHeaderIfNeeded(const GURL& new_location,
net::URLRequest* request);
// Creates a SimpleURLLoader that will include variations headers for requests
// to Google and ensures they're removed if a redirect to a non-Google URL
// occurs.
std::unique_ptr<network::SimpleURLLoader>
CreateSimpleURLLoaderWithVariationsHeaders(
std::unique_ptr<network::ResourceRequest> request,
InIncognito incognito,
SignedIn signed_in,
const net::NetworkTrafficAnnotationTag& annotation_tag);
namespace internal {
// Checks whether variation headers should be appended to requests to the
// specified |url|. Returns true for google.<TLD> and youtube.<TLD> URLs with
// the https scheme.
bool ShouldAppendVariationHeaders(const GURL& url);
} // namespace internal
} // namespace variations
#endif // COMPONENTS_VARIATIONS_NET_VARIATIONS_HTTP_HEADERS_H_