Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(494)

Side by Side Diff: chrome/browser/safe_browsing/unverified_download_field_trial_unittest.cc

Issue 1409003002: [SafeBrowsing] Block dangerous unchecked downloads based on a Finch trial. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // 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 #include "chrome/browser/safe_browsing/unverified_download_field_trial.h"
6
7 #include "base/command_line.h"
8 #include "base/files/file_path.h"
9 #include "base/metrics/field_trial.h"
10 #include "chrome/common/chrome_switches.h"
11 #include "chrome/common/safe_browsing/download_protection_util.h"
12 #include "components/variations/variations_associated_data.h"
13 #include "testing/gmock/include/gmock/gmock.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15
16 namespace safe_browsing {
17
18 namespace {
19
20 const base::FilePath::CharType kSafeFilename[] = FILE_PATH_LITERAL("foo.txt");
21 const base::FilePath::CharType kHandledFilename[] =
22 FILE_PATH_LITERAL("foo.exe");
23
24 using FieldTrialParameters = std::map<std::string, std::string>;
25
26 class ScopedFieldTrialState {
27 public:
28 ScopedFieldTrialState(const std::string& group_name,
29 const FieldTrialParameters& parameters)
30 : field_trial_list_(nullptr) {
31 variations::testing::ClearAllVariationIDs();
32 variations::testing::ClearAllVariationParams();
33
34 if (!parameters.empty()) {
35 EXPECT_TRUE(variations::AssociateVariationParams(
36 kUnverifiedDownloadFieldTrialName, group_name, parameters));
37 }
38 EXPECT_TRUE(base::FieldTrialList::CreateFieldTrial(
39 kUnverifiedDownloadFieldTrialName, group_name));
40 }
41
42 explicit ScopedFieldTrialState(const std::string& group_name)
43 : ScopedFieldTrialState(group_name, FieldTrialParameters()) {}
44
45 ~ScopedFieldTrialState() {
46 variations::testing::ClearAllVariationIDs();
47 variations::testing::ClearAllVariationParams();
48 }
49
50 private:
51 base::FieldTrialList field_trial_list_;
52 };
53
54 } // namespace
55
56 // Verify some test assumptions. Namely, that kSafeFilename is not a supported
57 // binary file and that kHandledFilename is.
58 TEST(UnverifiedDownloadFieldTrialTest, Assumptions) {
59 EXPECT_TRUE(safe_browsing::download_protection_util::IsSupportedBinaryFile(
60 base::FilePath(kHandledFilename)));
61 EXPECT_FALSE(safe_browsing::download_protection_util::IsSupportedBinaryFile(
62 base::FilePath(kSafeFilename)));
63 }
64
65 TEST(UnverifiedDownloadFieldTrialTest, CommandLine_AllowAll) {
66 base::CommandLine::ForCurrentProcess()->AppendSwitch(
67 switches::kAllowUncheckedDangerousDownloads);
68 EXPECT_TRUE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
69 base::FilePath(kSafeFilename)));
70 EXPECT_TRUE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
71 base::FilePath(kHandledFilename)));
72 }
73
74 TEST(UnverifiedDownloadFieldTrialTest, CommandLine_DisallowDangerous) {
75 base::CommandLine::ForCurrentProcess()->AppendSwitch(
76 switches::kDisallowUncheckedDangerousDownloads);
77 EXPECT_TRUE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
78 base::FilePath(kSafeFilename)));
79 EXPECT_FALSE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
80 base::FilePath(kHandledFilename)));
81 }
82
83 TEST(UnverifiedDownloadFieldTrialTest, DisableAll) {
84 ScopedFieldTrialState field_trial(kUnverifiedDownloadFieldTrialDisableAll);
85 EXPECT_FALSE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
86 base::FilePath(kSafeFilename)));
87 EXPECT_FALSE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
88 base::FilePath(kHandledFilename)));
89 }
90
91 TEST(UnverifiedDownloadFieldTrialTest, DisableByParam) {
92 FieldTrialParameters parameters;
93 parameters[kUnverifiedDownloadFieldTrialBlacklistParam] = ".abc,.def";
94 parameters[kUnverifiedDownloadFieldTrialWhitelistParam] = ".xyz";
95 ScopedFieldTrialState field_trial(
96 kUnverifiedDownloadFieldTrialDisableByParameter, parameters);
97
98 EXPECT_TRUE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
99 base::FilePath(kSafeFilename)));
100 EXPECT_TRUE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
101 base::FilePath(kHandledFilename)));
102 EXPECT_TRUE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
103 base::FilePath(FILE_PATH_LITERAL("foo.xyz"))));
104 EXPECT_FALSE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
105 base::FilePath(FILE_PATH_LITERAL("foo.abc"))));
106 EXPECT_FALSE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
107 base::FilePath(FILE_PATH_LITERAL("foo.def"))));
108 }
109
110 // Verify that nothing terrible happens if no parameters are specified for a
111 // group that expects parameters.
112 TEST(UnverifiedDownloadFieldTrialTest, DisableByParam_NoParameters) {
113 ScopedFieldTrialState field_trial(
114 kUnverifiedDownloadFieldTrialDisableByParameter);
115
116 EXPECT_TRUE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
117 base::FilePath(kSafeFilename)));
118 EXPECT_TRUE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
119 base::FilePath(kHandledFilename)));
120 }
121
122 // Verify that nothing terrible happens if the parameters set for a field trial
123 // are malformed.
124 TEST(UnverifiedDownloadFieldTrialTest, DisableByParam_BadFormat) {
125 FieldTrialParameters parameters;
126 parameters[kUnverifiedDownloadFieldTrialBlacklistParam] = "abcasdfa#??# ~def";
127 parameters[kUnverifiedDownloadFieldTrialWhitelistParam] =
128 "Robert'); DROP TABLE FinchTrials;--";
129 ScopedFieldTrialState field_trial(
130 kUnverifiedDownloadFieldTrialDisableByParameter, parameters);
131
132 EXPECT_TRUE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
133 base::FilePath(kSafeFilename)));
134 EXPECT_TRUE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
135 base::FilePath(kHandledFilename)));
136 }
137
138 // Verify that nothing terrible happens if the parameters set for a field trial
139 // are empty.
140 TEST(UnverifiedDownloadFieldTrialTest, DisableByParam_Empty) {
141 FieldTrialParameters parameters;
142 parameters[kUnverifiedDownloadFieldTrialBlacklistParam] = "";
143 parameters[kUnverifiedDownloadFieldTrialWhitelistParam] = "";
144 ScopedFieldTrialState field_trial(
145 kUnverifiedDownloadFieldTrialDisableByParameter, parameters);
146
147 EXPECT_TRUE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
148 base::FilePath(kSafeFilename)));
149 EXPECT_TRUE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
150 base::FilePath(kHandledFilename)));
151 }
152
153 TEST(UnverifiedDownloadFieldTrialTest, DisableByParam_CaseSensitive) {
154 FieldTrialParameters parameters;
155 parameters[kUnverifiedDownloadFieldTrialBlacklistParam] = ".ABC,.xyz";
156 parameters[kUnverifiedDownloadFieldTrialWhitelistParam] = "";
157 ScopedFieldTrialState field_trial(
158 kUnverifiedDownloadFieldTrialDisableByParameter, parameters);
159
160 EXPECT_FALSE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
161 base::FilePath(FILE_PATH_LITERAL("foo.abc"))));
162 EXPECT_FALSE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
163 base::FilePath(FILE_PATH_LITERAL("FOO.ABC"))));
164 EXPECT_FALSE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
165 base::FilePath(FILE_PATH_LITERAL("FOO.XYZ"))));
166 EXPECT_TRUE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
167 base::FilePath(FILE_PATH_LITERAL("FOO.txt"))));
168 }
169
170 TEST(UnverifiedDownloadFieldTrialTest, DisableSBTypesAndByParameter) {
171 FieldTrialParameters parameters;
172 parameters[kUnverifiedDownloadFieldTrialBlacklistParam] = ".abc,.def";
173 parameters[kUnverifiedDownloadFieldTrialWhitelistParam] = ".xyz";
174 ScopedFieldTrialState field_trial(
175 kUnverifiedDownloadFieldTrialDisableSBTypesAndByParameter, parameters);
176
177 EXPECT_TRUE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
178 base::FilePath(kSafeFilename)));
179 EXPECT_FALSE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
180 base::FilePath(kHandledFilename)));
181 EXPECT_TRUE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
182 base::FilePath(FILE_PATH_LITERAL("foo.xyz"))));
183 EXPECT_FALSE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
184 base::FilePath(FILE_PATH_LITERAL("foo.abc"))));
185 EXPECT_FALSE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
186 base::FilePath(FILE_PATH_LITERAL("foo.def"))));
187 }
188
189 // Verify that a whitelist is able to override the SafeBrowsing file type list.
190 TEST(UnverifiedDownloadFieldTrialTest,
191 DisableSBTypesAndByParameter_OverrideSB) {
192 FieldTrialParameters parameters;
193 parameters[kUnverifiedDownloadFieldTrialBlacklistParam] = ".abc,.def";
194 parameters[kUnverifiedDownloadFieldTrialWhitelistParam] = ".exe";
195 ScopedFieldTrialState field_trial(
196 kUnverifiedDownloadFieldTrialDisableSBTypesAndByParameter, parameters);
197
198 EXPECT_TRUE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
199 base::FilePath(kSafeFilename)));
200 EXPECT_TRUE(safe_browsing::IsUnverifiedDownloadAllowedByFieldTrial(
201 base::FilePath(kHandledFilename)));
202 }
203
204 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698