blob: c0b3858cbaec06680412dcea48412c84810ad3bd [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_DATA_REDUCTION_PROXY_CORE_BROWSER_LOFI_DECIDER_H_
#define COMPONENTS_DATA_REDUCTION_PROXY_CORE_BROWSER_LOFI_DECIDER_H_
#include "base/macros.h"
namespace net {
class HttpRequestHeaders;
class URLRequest;
}
namespace data_reduction_proxy {
// Interface to determine if a request should be made for a low fidelity version
// of the resource.
class LoFiDecider {
public:
virtual ~LoFiDecider() {}
// Returns true when Lo-Fi Previews are on for the given |request|. This means
// the Lo-Fi header should be added to the given request.
virtual bool IsUsingLoFi(const net::URLRequest& request) const = 0;
// Adds a previews-specific directive to the Chrome-Proxy-Accept-Transform
// header if needed. If a slow page preview is triggered, adds "lite-page" or
// "empty-image", depending on whether the request is for the main frame
// and lite pages are enabled, or for a subresource and Lo-Fi mode is enabled,
// respectively. If a slow page preview is not triggered, "lite-page;if-heavy"
// and "empty-image;if-heavy" are added in the respective aforementioned cases
// to request that the server transform the page if it determines it to be
// heavy. Previews-related transformation headers are never added if
// |is_previews_disabled| is true.
virtual void MaybeSetAcceptTransformHeader(
const net::URLRequest& request,
bool are_previews_disabled,
net::HttpRequestHeaders* headers) const = 0;
// Returns true if |headers| contains the Chrome-Proxy-Accept-Transform
// header and a slow page previews directive ("lite-page" or "empty-image")
// is present and not conditioned on "if-heavy".
virtual bool IsSlowPagePreviewRequested(
const net::HttpRequestHeaders& headers) const = 0;
// Returns true if |headers| contains the Chrome-Proxy-Accept-Transform
// header with the "lite-page" directive.
virtual bool IsLitePagePreviewRequested(
const net::HttpRequestHeaders& headers) const = 0;
// Unconditionally removes the Chrome-Proxy-Accept-Transform header from
// |headers.|
virtual void RemoveAcceptTransformHeader(
net::HttpRequestHeaders* headers) const = 0;
// Adds a directive to tell the server to ignore blacklists when a Lite Page
// preview is being requested due to command line flags being set.
virtual void MaybeSetIgnorePreviewsBlacklistDirective(
net::HttpRequestHeaders* headers) const = 0;
// Returns true if the Lo-Fi specific UMA should be recorded. It is set to
// true if Lo-Fi is enabled for |request|, Chrome session is in Lo-Fi
// Enabled or Control field trial, and the network quality was slow.
virtual bool ShouldRecordLoFiUMA(const net::URLRequest& request) const = 0;
// Returns whether the request was a client-side Lo-Fi image request.
virtual bool IsClientLoFiImageRequest(
const net::URLRequest& request) const = 0;
};
} // namespace data_reduction_proxy
#endif // COMPONENTS_DATA_REDUCTION_PROXY_CORE_BROWSER_LOFI_DECIDER_H_