| Index: components/data_reduction_proxy/content/browser/content_lofi_decider.cc
|
| diff --git a/components/data_reduction_proxy/content/browser/content_lofi_decider.cc b/components/data_reduction_proxy/content/browser/content_lofi_decider.cc
|
| index 4f98e4eea1b944c2b0e38617618007e909bf3065..2261b4cfd87a050e076035184faf6b76c8b2c028 100644
|
| --- a/components/data_reduction_proxy/content/browser/content_lofi_decider.cc
|
| +++ b/components/data_reduction_proxy/content/browser/content_lofi_decider.cc
|
| @@ -6,9 +6,11 @@
|
|
|
| #include <string>
|
|
|
| +#include "base/feature_list.h"
|
| #include "base/strings/string_split.h"
|
| #include "base/strings/string_util.h"
|
| #include "base/strings/stringprintf.h"
|
| +#include "components/data_reduction_proxy/core/common/data_reduction_proxy_features.h"
|
| #include "components/data_reduction_proxy/core/common/data_reduction_proxy_headers.h"
|
| #include "components/data_reduction_proxy/core/common/data_reduction_proxy_params.h"
|
| #include "content/public/browser/resource_request_info.h"
|
| @@ -67,29 +69,47 @@ void ContentLoFiDecider::MaybeSetAcceptTransformHeader(
|
| return;
|
| }
|
|
|
| - // The Lo-Fi and Lite Page directives should not be added for users in the
|
| - // Lo-Fi field trial "Control" group.
|
| - bool lofi_enabled_via_flags_or_field_trial =
|
| - params::IsLoFiOnViaFlags() || params::IsIncludedInLoFiEnabledFieldTrial();
|
| -
|
| - bool lite_page_enabled_via_flags_or_field_trial =
|
| - (params::IsLoFiOnViaFlags() && params::AreLitePagesEnabledViaFlags()) ||
|
| - params::IsIncludedInLitePageFieldTrial();
|
| -
|
| - // User does not have previews enabled.
|
| - if (!lofi_enabled_via_flags_or_field_trial &&
|
| - !lite_page_enabled_via_flags_or_field_trial) {
|
| - return;
|
| - }
|
| -
|
| - // Previews has been disabled.
|
| - if (are_previews_disabled)
|
| - return;
|
| + content::PreviewsState previews_state = request_info->GetPreviewsState();
|
|
|
| // Do not add the Chrome-Proxy-Accept-Transform header when the page load
|
| // explicitly forbids previews transformations.
|
| - if (request_info->GetPreviewsState() & content::PREVIEWS_NO_TRANSFORM)
|
| + if (previews_state & content::PREVIEWS_NO_TRANSFORM) {
|
| return;
|
| + }
|
| +
|
| + // For the proxy-decides-transform feature, the header is set based only
|
| + // on the request's PreviewsState (no checking of previews flags).
|
| + // This is for a newer version of the proxy server protocol where the
|
| + // server makes the transform decision and client simply advertises
|
| + // if is accepts transforms for the resource type (determined here from
|
| + // previously set previews state bits). The previous logic in this method
|
| + // that checks various flags will be deprecated.
|
| + bool check_previews_flags = !base::FeatureList::IsEnabled(
|
| + features::kDataReductionProxyDecidesTransform);
|
| +
|
| + bool lofi_enabled_via_flags_or_field_trial = false;
|
| + bool lite_page_enabled_via_flags_or_field_trial = false;
|
| + if (check_previews_flags) {
|
| + // The Lo-Fi and Lite Page directives should not be added for users in the
|
| + // Lo-Fi field trial "Control" group.
|
| + lofi_enabled_via_flags_or_field_trial =
|
| + params::IsLoFiOnViaFlags() ||
|
| + params::IsIncludedInLoFiEnabledFieldTrial();
|
| +
|
| + lite_page_enabled_via_flags_or_field_trial =
|
| + (params::IsLoFiOnViaFlags() && params::AreLitePagesEnabledViaFlags()) ||
|
| + params::IsIncludedInLitePageFieldTrial();
|
| +
|
| + // Previews have been disabled.
|
| + if (are_previews_disabled)
|
| + return;
|
| +
|
| + // User does not have previews enabled.
|
| + if (!lofi_enabled_via_flags_or_field_trial &&
|
| + !lite_page_enabled_via_flags_or_field_trial) {
|
| + return;
|
| + }
|
| + }
|
|
|
| // Lo-Fi is not allowed on the main frame, stylesheet, script, font resource,
|
| // media, service worker, or CSP report.
|
| @@ -101,31 +121,43 @@ void ContentLoFiDecider::MaybeSetAcceptTransformHeader(
|
| resource_type == content::RESOURCE_TYPE_MEDIA ||
|
| resource_type == content::RESOURCE_TYPE_CSP_REPORT);
|
|
|
| - // If the Lite Page field trial or flag is enabled, only add the "lite-page"
|
| - // directive on main frame requests. Only add "empty-image" directives to
|
| - // other requests when Lite Page previews are not enabled after the main
|
| - // frame. Add the "if-heavy" qualifier to allow the server to provide a
|
| - // preview when the page is data heavy on if a preview was not otherwise
|
| - // triggered.
|
| std::string accept_transform_value;
|
| - if (lite_page_enabled_via_flags_or_field_trial &&
|
| - resource_type == content::RESOURCE_TYPE_MAIN_FRAME) {
|
| + if (!check_previews_flags) {
|
| + // For the proxy-decides-transform feature, check PreviewsState bits and
|
| + // type of resource to determine which, if any, transformation to accept.
|
| + if ((previews_state & content::SERVER_LITE_PAGE_ON) &&
|
| + resource_type == content::RESOURCE_TYPE_MAIN_FRAME) {
|
| + accept_transform_value = lite_page_directive();
|
| + } else if ((previews_state & content::SERVER_LOFI_ON) &&
|
| + resource_type_supports_empty_image) {
|
| + // Note that for subresource requests, the Lo-Fi bit should only be set
|
| + // if the main frame response provided the "empty-image" directive (for
|
| + // the client to echo back to the server here for any image resources).
|
| + accept_transform_value = empty_image_directive();
|
| + }
|
| + } else if (lite_page_enabled_via_flags_or_field_trial &&
|
| + resource_type == content::RESOURCE_TYPE_MAIN_FRAME) {
|
| + // If the Lite Page field trial or flag is enabled, only add the "lite-page"
|
| + // directive on main frame requests. Only add "empty-image" directives to
|
| + // other requests when Lite Page previews are not enabled after the main
|
| + // frame. Add the "if-heavy" qualifier to allow the server to provide a
|
| + // preview when the page is data heavy on if a preview was not otherwise
|
| + // triggered.
|
| accept_transform_value = lite_page_directive();
|
|
|
| // Since a Lite Page was not triggered client side, ask the server to
|
| // provide a Lite Page only if the page is otherwise data-heavy.
|
| - if (!(request_info->GetPreviewsState() & content::SERVER_LITE_PAGE_ON))
|
| + if (!(previews_state & content::SERVER_LITE_PAGE_ON))
|
| accept_transform_value += base::StringPrintf(";%s", if_heavy_qualifier());
|
| } else if (lofi_enabled_via_flags_or_field_trial &&
|
| !lite_page_enabled_via_flags_or_field_trial &&
|
| resource_type_supports_empty_image &&
|
| - !(request_info->GetPreviewsState() &
|
| - content::SERVER_LITE_PAGE_ON)) {
|
| + !(previews_state & content::SERVER_LITE_PAGE_ON)) {
|
| accept_transform_value = empty_image_directive();
|
|
|
| // Since Lo-Fi was not triggered client side, ask the server to provide
|
| // Lo-Fi only if the page is otherwise data-heavy.
|
| - if (!(request_info->GetPreviewsState() & content::SERVER_LOFI_ON))
|
| + if (!(previews_state & content::SERVER_LOFI_ON))
|
| accept_transform_value += base::StringPrintf(";%s", if_heavy_qualifier());
|
| }
|
| if (accept_transform_value.empty())
|
|
|