// Copyright 2017 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 "ios/web/common/features.h"

#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif

namespace web {
namespace features {

const base::Feature kReduceSessionSize{"ReduceSessionSize",
                                       base::FEATURE_DISABLED_BY_DEFAULT};

const base::Feature kCrashOnUnexpectedURLChange{
    "CrashOnUnexpectedURLChange", base::FEATURE_ENABLED_BY_DEFAULT};

const base::Feature kHistoryClobberWorkaround{
    "WKWebViewHistoryClobberWorkaround", base::FEATURE_DISABLED_BY_DEFAULT};

const base::Feature kBlockUniversalLinksInOffTheRecordMode{
    "BlockUniversalLinksInOffTheRecord", base::FEATURE_ENABLED_BY_DEFAULT};

const base::Feature kKeepsRenderProcessAlive{"KeepsRenderProcessAlive",
                                             base::FEATURE_ENABLED_BY_DEFAULT};

const base::Feature kClearOldNavigationRecordsWorkaround{
    "ClearOldNavigationRecordsWorkaround", base::FEATURE_ENABLED_BY_DEFAULT};

const base::Feature kEnablePersistentDownloads{
    "EnablePersistentDownloads", base::FEATURE_DISABLED_BY_DEFAULT};

const base::Feature kUseJSForErrorPage{"UseJSForErrorPage",
                                       base::FEATURE_DISABLED_BY_DEFAULT};

const base::Feature kUseDefaultUserAgentInWebClient{
    "UseDefaultUserAgentInWebClient", base::FEATURE_DISABLED_BY_DEFAULT};

const base::Feature kPreserveScrollViewProperties{
    "PreserveScrollViewProperties", base::FEATURE_ENABLED_BY_DEFAULT};

const base::Feature kIOSLegacyTLSInterstitial{"IOSLegacyTLSInterstitial",
                                              base::FEATURE_ENABLED_BY_DEFAULT};

const base::Feature kRecordSnapshotSize{"RecordSnapshotSize",
                                        base::FEATURE_DISABLED_BY_DEFAULT};

const base::Feature kRestoreSessionFromCache{"RestoreSessionFromCache",
                                             base::FEATURE_DISABLED_BY_DEFAULT};

const base::Feature kWebViewNativeContextMenu{
    "WebViewNativeContextMenu", base::FEATURE_DISABLED_BY_DEFAULT};

const char kWebViewNativeContextMenuName[] = "type";
const char kWebViewNativeContextMenuParameterSystem[] = "system";
const char kWebViewNativeContextMenuParameterWeb[] = "web";

bool UseWebClientDefaultUserAgent() {
  if (@available(iOS 13, *)) {
    return base::FeatureList::IsEnabled(kUseDefaultUserAgentInWebClient);
  }
  return false;
}

bool UseWebViewNativeContextMenuWeb() {
  if (@available(iOS 13, *)) {
    if (!base::FeatureList::IsEnabled(kWebViewNativeContextMenu))
      return false;
    std::string field_trial_param = base::GetFieldTrialParamValueByFeature(
        kWebViewNativeContextMenu, kWebViewNativeContextMenuName);
    return field_trial_param == kWebViewNativeContextMenuParameterWeb;
  }
  return false;
}

bool UseWebViewNativeContextMenuSystem() {
  if (@available(iOS 13, *)) {
    if (!base::FeatureList::IsEnabled(kWebViewNativeContextMenu))
      return false;
    std::string field_trial_param = base::GetFieldTrialParamValueByFeature(
        kWebViewNativeContextMenu, kWebViewNativeContextMenuName);
    return field_trial_param == kWebViewNativeContextMenuParameterSystem;
  }
  return false;
}

const base::Feature kIOSSharedHighlightingColorChange{
    "IOSSharedHighlightingColorChange", base::FEATURE_DISABLED_BY_DEFAULT};

}  // namespace features
}  // namespace web
