// Copyright 2014 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 "third_party/blink/public/common/web_preferences/web_preferences.h"

#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/mojom/v8_cache_options.mojom.h"
#include "third_party/blink/public/mojom/webpreferences/web_preferences.mojom.h"
#include "ui/base/ui_base_switches_util.h"

namespace {

bool IsTouchDragDropEnabled() {
  // Cache the enabled state so it isn't queried on every WebPreferences
  // creation. Note that this means unit tests can't override the state.
  static const bool enabled = switches::IsTouchDragDropEnabled();
  return enabled;
}

}  // namespace

namespace blink {

namespace web_pref {

using blink::mojom::EffectiveConnectionType;

// "Zyyy" is the ISO 15924 script code for undetermined script aka Common.
const char kCommonScript[] = "Zyyy";

WebPreferences::WebPreferences()
    : default_font_size(16),
      default_fixed_font_size(13),
      minimum_font_size(0),
      minimum_logical_font_size(6),
      default_encoding("ISO-8859-1"),
#if defined(OS_WIN)
      context_menu_on_mouse_up(true),
#else
      context_menu_on_mouse_up(false),
#endif
      javascript_enabled(true),
      web_security_enabled(true),
      loads_images_automatically(true),
      images_enabled(true),
      plugins_enabled(true),
      dom_paste_enabled(false),  // enables execCommand("paste")
      shrinks_standalone_images_to_fit(true),
      text_areas_are_resizable(true),
      allow_scripts_to_close_windows(false),
      remote_fonts_enabled(true),
      javascript_can_access_clipboard(false),
      xslt_enabled(true),
      dns_prefetching_enabled(true),
      data_saver_enabled(false),
      data_saver_holdback_web_api_enabled(false),
      local_storage_enabled(false),
      databases_enabled(false),
      application_cache_enabled(false),
      tabs_to_links(true),
      disable_ipc_flooding_protection(false),
      hyperlink_auditing_enabled(true),
      allow_universal_access_from_file_urls(false),
      allow_file_access_from_file_urls(false),
      webgl1_enabled(true),
      webgl2_enabled(true),
      pepper_3d_enabled(false),
      flash_3d_enabled(true),
      flash_stage3d_enabled(false),
      flash_stage3d_baseline_enabled(false),
      privileged_webgl_extensions_enabled(false),
      webgl_errors_to_console_enabled(true),
      hide_scrollbars(false),
      accelerated_2d_canvas_enabled(false),
      antialiased_2d_canvas_disabled(false),
      antialiased_clips_2d_canvas_enabled(true),
      accelerated_filters_enabled(false),
      deferred_filters_enabled(false),
      container_culling_enabled(false),
      allow_running_insecure_content(false),
      disable_reading_from_canvas(false),
      strict_mixed_content_checking(false),
      strict_powerful_feature_restrictions(false),
      allow_geolocation_on_insecure_origins(false),
      strictly_block_blockable_mixed_content(false),
      block_mixed_plugin_content(false),
      password_echo_enabled(false),
      should_print_backgrounds(false),
      should_clear_document_background(true),
      enable_scroll_animator(false),
      threaded_scrolling_enabled(true),
      prefers_reduced_motion(false),
      touch_event_feature_detection_enabled(false),
      pointer_events_max_touch_points(0),
      available_pointer_types(0),
      primary_pointer_type(blink::mojom::PointerType::kPointerNone),
      available_hover_types(0),
      primary_hover_type(blink::mojom::HoverType::kHoverNone),
      dont_send_key_events_to_javascript(false),
      sync_xhr_in_documents_enabled(true),
      number_of_cpu_cores(1),
#if defined(OS_MAC)
      editing_behavior(mojom::EditingBehavior::kEditingMacBehavior),
#elif defined(OS_WIN)
      editing_behavior(mojom::EditingBehavior::kEditingWindowsBehavior),
#elif defined(OS_ANDROID)
      editing_behavior(mojom::EditingBehavior::kEditingAndroidBehavior),
#elif BUILDFLAG(IS_CHROMEOS_ASH)
      editing_behavior(
          base::FeatureList::IsEnabled(blink::features::kCrOSAutoSelect)
              ? mojom::EditingBehavior::kEditingChromeOSBehavior
              : mojom::EditingBehavior::kEditingUnixBehavior),
#elif defined(OS_POSIX)
      editing_behavior(mojom::EditingBehavior::kEditingUnixBehavior),
#else
      editing_behavior(mojom::EditingBehavior::kEditingMacBehavior),
#endif
      supports_multiple_windows(true),
      viewport_enabled(false),
#if defined(OS_ANDROID)
      viewport_meta_enabled(true),
      shrinks_viewport_contents_to_fit(true),
      viewport_style(mojom::ViewportStyle::kMobile),
      always_show_context_menu_on_touch(false),
      smooth_scroll_for_find_enabled(true),
#else
      viewport_meta_enabled(false),
      shrinks_viewport_contents_to_fit(false),
      viewport_style(mojom::ViewportStyle::kDefault),
      always_show_context_menu_on_touch(true),
      smooth_scroll_for_find_enabled(false),
#endif
      main_frame_resizes_are_orientation_changes(false),
      initialize_at_minimum_page_scale(true),
#if defined(OS_MAC)
      smart_insert_delete_enabled(true),
#else
      smart_insert_delete_enabled(false),
#endif
      spatial_navigation_enabled(false),
      navigate_on_drag_drop(true),
      v8_cache_options(blink::mojom::V8CacheOptions::kDefault),
      record_whole_document(false),
      cookie_enabled(true),
      accelerated_video_decode_enabled(false),
      animation_policy(
          blink::mojom::ImageAnimationPolicy::kImageAnimationPolicyAllowed),
      user_gesture_required_for_presentation(true),
      text_tracks_enabled(false),
      text_track_margin_percentage(0.0f),
      immersive_mode_enabled(false),
#if defined(OS_ANDROID) || defined(OS_MAC)
      double_tap_to_zoom_enabled(true),
#else
      double_tap_to_zoom_enabled(false),
#endif
      fullscreen_supported(true),
#if !defined(OS_ANDROID)
      text_autosizing_enabled(false),
#else
      text_autosizing_enabled(true),
      font_scale_factor(1.0f),
      device_scale_adjustment(1.0f),
      force_enable_zoom(false),
      support_deprecated_target_density_dpi(false),
      use_legacy_background_size_shorthand_behavior(false),
      wide_viewport_quirk(false),
      use_wide_viewport(true),
      force_zero_layout_height(false),
      viewport_meta_merge_content_quirk(false),
      viewport_meta_non_user_scalable_quirk(false),
      viewport_meta_zero_values_quirk(false),
      clobber_user_agent_initial_scale_quirk(false),
      ignore_main_frame_overflow_hidden_quirk(false),
      report_screen_size_in_physical_pixels_quirk(false),
      reuse_global_for_unowned_main_frame(false),
      spellcheck_enabled_by_default(true),
      video_fullscreen_orientation_lock_enabled(false),
      video_rotate_to_fullscreen_enabled(false),
      embedded_media_experience_enabled(false),
      css_hex_alpha_color_enabled(true),
      scroll_top_left_interop_enabled(true),
      disable_features_depending_on_viz(false),
      disable_accelerated_small_canvases(false),
#endif  // defined(OS_ANDROID)
#if defined(OS_ANDROID)
      default_minimum_page_scale_factor(0.25f),
      default_maximum_page_scale_factor(5.f),
#elif defined(OS_MAC)
      default_minimum_page_scale_factor(1.f),
      default_maximum_page_scale_factor(3.f),
#else
      default_minimum_page_scale_factor(1.f),
      default_maximum_page_scale_factor(4.f),
#endif
      hide_download_ui(false),
      presentation_receiver(false),
      media_controls_enabled(true),
      do_not_update_selection_on_mutating_selection_range(false),
      autoplay_policy(
          blink::mojom::AutoplayPolicy::kDocumentUserActivationRequired),
      low_priority_iframes_threshold(
          EffectiveConnectionType::kEffectiveConnectionUnknownType),
      picture_in_picture_enabled(true),
      translate_service_available(false),
      network_quality_estimator_web_holdback(
          EffectiveConnectionType::kEffectiveConnectionUnknownType),
      allow_mixed_content_upgrades(true),
      always_show_focus(false),
      touch_drag_drop_enabled(IsTouchDragDropEnabled()) {
  standard_font_family_map[web_pref::kCommonScript] =
      base::ASCIIToUTF16("Times New Roman");
  fixed_font_family_map[web_pref::kCommonScript] =
      base::ASCIIToUTF16("Courier New");
  serif_font_family_map[web_pref::kCommonScript] =
      base::ASCIIToUTF16("Times New Roman");
  sans_serif_font_family_map[web_pref::kCommonScript] =
      base::ASCIIToUTF16("Arial");
  cursive_font_family_map[web_pref::kCommonScript] =
      base::ASCIIToUTF16("Script");
  fantasy_font_family_map[web_pref::kCommonScript] =
      base::ASCIIToUTF16("Impact");
  pictograph_font_family_map[web_pref::kCommonScript] =
      base::ASCIIToUTF16("Times New Roman");
}

WebPreferences::WebPreferences(const WebPreferences& other) = default;

WebPreferences::WebPreferences(WebPreferences&& other) = default;

WebPreferences::~WebPreferences() = default;

WebPreferences& WebPreferences::operator=(const WebPreferences& other) =
    default;

WebPreferences& WebPreferences::operator=(WebPreferences&& other) = default;

}  // namespace web_pref

}  // namespace blink
