blob: dc7ad38d563ad5cfef27f10d230ebc6c012ee0b1 [file] [log] [blame]
drogerf83b91262015-03-05 19:45:191// Copyright 2015 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// This file can be empty. Its purpose is to contain the relatively short lived
6// definitions required for experimental flags.
7
8#include "ios/chrome/browser/experimental_flags.h"
9
sdefresne60feea12015-06-04 08:39:5110#import <Foundation/Foundation.h>
11
lpromero68537272015-04-29 11:16:0112#include <string>
13
drogerf83b91262015-03-05 19:45:1914#include "base/command_line.h"
lpromero68537272015-04-29 11:16:0115#include "base/metrics/field_trial.h"
16#include "base/strings/string_number_conversions.h"
sdefresneb53a9872015-05-18 20:01:4917#include "base/strings/string_util.h"
sdefresne0f2ef352015-07-27 19:18:0018#include "components/enhanced_bookmarks/enhanced_bookmark_features.h"
lpromero68537272015-04-29 11:16:0119#include "components/variations/variations_associated_data.h"
drogerf83b91262015-03-05 19:45:1920#include "ios/chrome/browser/chrome_switches.h"
bzanottia5f249ed2015-06-24 10:02:5921#include "ios/web/public/web_view_creation_util.h"
drogerf83b91262015-03-05 19:45:1922
sdefresne8b192a72015-05-13 13:25:1923namespace {
24NSString* const kEnableAlertOnBackgroundUpload =
25 @"EnableAlertsOnBackgroundUpload";
sdefresne60feea12015-06-04 08:39:5126NSString* const kEnableBookmarkRefreshImageOnEachVisit =
27 @"EnableBookmarkRefreshImageOnEachVisit";
ioanap744ba1982015-08-11 13:25:0428NSString* const kEnableViewCopyPasswords = @"EnableViewCopyPasswords";
sdefresne8b192a72015-05-13 13:25:1929} // namespace
30
drogerf83b91262015-03-05 19:45:1931namespace experimental_flags {
32
sdefresne8b192a72015-05-13 13:25:1933bool IsAlertOnBackgroundUploadEnabled() {
34 return [[NSUserDefaults standardUserDefaults]
35 boolForKey:kEnableAlertOnBackgroundUpload];
36}
37
jyquinn899248b2015-07-31 18:36:0938bool IsExternalURLBlockingEnabled() {
39 std::string group_name =
40 base::FieldTrialList::FindFullName("IOSBlockUnpromptedExternalURLs");
41
42 // Check if the experimental flag is turned on.
43 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
44 if (command_line->HasSwitch(
45 switches::kEnableIOSBlockUnpromptedExternalURLs)) {
46 return true;
47 } else if (command_line->HasSwitch(
48 switches::kDisableIOSBlockUnpromptedExternalURLs)) {
49 return false;
50 }
51
52 // Check if the finch experiment is turned on.
53 return !base::StartsWith(group_name, "Disabled",
54 base::CompareCase::INSENSITIVE_ASCII);
55}
56
sdefresne60feea12015-06-04 08:39:5157bool IsBookmarkCollectionEnabled() {
sdefresne0f2ef352015-07-27 19:18:0058 return enhanced_bookmarks::IsEnhancedBookmarksEnabled();
sdefresne60feea12015-06-04 08:39:5159}
60
61bool IsBookmarkImageFetchingOnVisitEnabled() {
62 if (!IsBookmarkCollectionEnabled())
63 return false;
64
65 NSUserDefaults* user_defaults = [NSUserDefaults standardUserDefaults];
66 if ([user_defaults boolForKey:kEnableBookmarkRefreshImageOnEachVisit])
67 return true;
68
69 const char kFieldTrialName[] = "EnhancedBookmarks";
70 std::string enable_fetching = variations::GetVariationParamValue(
71 kFieldTrialName, "EnableImagesFetchingOnVisit");
72 return !enable_fetching.empty();
73}
74
sdefresneb53a9872015-05-18 20:01:4975bool IsWKWebViewEnabled() {
76 // If WKWebView isn't supported, don't activate the experiment at all. This
77 // avoids someone being slotted into the WKWebView bucket (and thus reporting
78 // as WKWebView), but actually running UIWebView.
79 if (!web::IsWKWebViewSupported())
80 return false;
81
82 std::string group_name =
83 base::FieldTrialList::FindFullName("IOSUseWKWebView");
84
85 // First check if the experimental flag is turned on.
86 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
87 if (command_line->HasSwitch(switches::kEnableIOSWKWebView)) {
88 return true;
89 } else if (command_line->HasSwitch(switches::kDisableIOSWKWebView)) {
90 return false;
91 }
92
93 // Check if the finch experiment is turned on.
brettw95509312015-07-16 23:57:3394 return base::StartsWith(group_name, "Enabled",
95 base::CompareCase::INSENSITIVE_ASCII);
sdefresneb53a9872015-05-18 20:01:4996}
97
ioanap744ba1982015-08-11 13:25:0498bool IsViewCopyPasswordsEnabled() {
99 NSString* viewCopyPasswordFlag = [[NSUserDefaults standardUserDefaults]
100 objectForKey:kEnableViewCopyPasswords];
101 if ([viewCopyPasswordFlag isEqualToString:@"Enabled"])
102 return true;
103 return false;
104}
105
lpromero68537272015-04-29 11:16:01106size_t MemoryWedgeSizeInMB() {
107 std::string wedge_size_string;
108
109 // Get the size from the Experimental setting.
110 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
111 wedge_size_string =
112 command_line->GetSwitchValueASCII(switches::kIOSMemoryWedgeSize);
113
114 // Otherwise, get from a variation param.
115 if (wedge_size_string.empty()) {
116 wedge_size_string =
117 variations::GetVariationParamValue("MemoryWedge", "wedge_size");
118 }
119
120 // Parse the value.
121 size_t wedge_size_in_mb = 0;
122 if (base::StringToSizeT(wedge_size_string, &wedge_size_in_mb))
123 return wedge_size_in_mb;
124 return 0;
125}
126
drogerf83b91262015-03-05 19:45:19127} // namespace experimental_flags