| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/safe_browsing/incident_reporting/extension_data_collect
ion.h" | 5 #include "chrome/browser/safe_browsing/incident_reporting/extension_data_collect
ion.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/memory/ptr_util.h" |
| 10 #include "base/strings/string_number_conversions.h" | 11 #include "base/strings/string_number_conversions.h" |
| 11 #include "base/strings/utf_string_conversions.h" | 12 #include "base/strings/utf_string_conversions.h" |
| 12 #include "build/build_config.h" | 13 #include "build/build_config.h" |
| 13 #include "chrome/browser/extensions/extension_service.h" | 14 #include "chrome/browser/extensions/extension_service.h" |
| 14 #include "chrome/browser/extensions/install_signer.h" | 15 #include "chrome/browser/extensions/install_signer.h" |
| 15 #include "chrome/browser/extensions/test_extension_system.h" | 16 #include "chrome/browser/extensions/test_extension_system.h" |
| 16 #include "chrome/browser/prefs/browser_prefs.h" | 17 #include "chrome/browser/prefs/browser_prefs.h" |
| 17 #include "chrome/browser/profiles/profile_manager.h" | 18 #include "chrome/browser/profiles/profile_manager.h" |
| 18 #include "chrome/common/pref_names.h" | 19 #include "chrome/common/pref_names.h" |
| 19 #include "chrome/common/safe_browsing/csd.pb.h" | 20 #include "chrome/common/safe_browsing/csd.pb.h" |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 131 new TestingProfileManager(TestingBrowserProcess::GetGlobal())); | 132 new TestingProfileManager(TestingBrowserProcess::GetGlobal())); |
| 132 ASSERT_TRUE(profile_manager_->SetUp()); | 133 ASSERT_TRUE(profile_manager_->SetUp()); |
| 133 } | 134 } |
| 134 | 135 |
| 135 void TearDown() override { | 136 void TearDown() override { |
| 136 profile_manager_.reset(); | 137 profile_manager_.reset(); |
| 137 TestingBrowserProcess::DeleteInstance(); | 138 TestingBrowserProcess::DeleteInstance(); |
| 138 testing::Test::TearDown(); | 139 testing::Test::TearDown(); |
| 139 } | 140 } |
| 140 | 141 |
| 141 scoped_ptr<ExtensionTestingProfile> CreateProfile( | 142 std::unique_ptr<ExtensionTestingProfile> CreateProfile( |
| 142 SafeBrowsingDisposition safe_browsing_opt_in) { | 143 SafeBrowsingDisposition safe_browsing_opt_in) { |
| 143 std::string profile_name("profile"); | 144 std::string profile_name("profile"); |
| 144 profile_name.append(base::IntToString(++profile_number_)); | 145 profile_name.append(base::IntToString(++profile_number_)); |
| 145 | 146 |
| 146 // Create prefs for the profile with safe browsing enabled or not. | 147 // Create prefs for the profile with safe browsing enabled or not. |
| 147 scoped_ptr<syncable_prefs::TestingPrefServiceSyncable> prefs( | 148 std::unique_ptr<syncable_prefs::TestingPrefServiceSyncable> prefs( |
| 148 new syncable_prefs::TestingPrefServiceSyncable); | 149 new syncable_prefs::TestingPrefServiceSyncable); |
| 149 chrome::RegisterUserProfilePrefs(prefs->registry()); | 150 chrome::RegisterUserProfilePrefs(prefs->registry()); |
| 150 prefs->SetBoolean(prefs::kSafeBrowsingEnabled, | 151 prefs->SetBoolean(prefs::kSafeBrowsingEnabled, |
| 151 safe_browsing_opt_in == SAFE_BROWSING_OPT_IN); | 152 safe_browsing_opt_in == SAFE_BROWSING_OPT_IN); |
| 152 prefs->SetBoolean(prefs::kSafeBrowsingExtendedReportingEnabled, | 153 prefs->SetBoolean(prefs::kSafeBrowsingExtendedReportingEnabled, |
| 153 safe_browsing_opt_in == SAFE_BROWSING_OPT_IN); | 154 safe_browsing_opt_in == SAFE_BROWSING_OPT_IN); |
| 154 TestingProfile* profile = profile_manager_->CreateTestingProfile( | 155 TestingProfile* profile = profile_manager_->CreateTestingProfile( |
| 155 profile_name, std::move(prefs), | 156 profile_name, std::move(prefs), |
| 156 base::UTF8ToUTF16(profile_name), // user_name | 157 base::UTF8ToUTF16(profile_name), // user_name |
| 157 0, // avatar_id | 158 0, // avatar_id |
| 158 std::string(), // supervised_user_id | 159 std::string(), // supervised_user_id |
| 159 TestingProfile::TestingFactories()); | 160 TestingProfile::TestingFactories()); |
| 160 | 161 |
| 161 return make_scoped_ptr(new ExtensionTestingProfile(profile)); | 162 return base::WrapUnique(new ExtensionTestingProfile(profile)); |
| 162 } | 163 } |
| 163 | 164 |
| 164 content::TestBrowserThreadBundle browser_thread_bundle_; | 165 content::TestBrowserThreadBundle browser_thread_bundle_; |
| 165 scoped_ptr<TestingProfileManager> profile_manager_; | 166 std::unique_ptr<TestingProfileManager> profile_manager_; |
| 166 | 167 |
| 167 private: | 168 private: |
| 168 int profile_number_; | 169 int profile_number_; |
| 169 | 170 |
| 170 #if defined OS_CHROMEOS | 171 #if defined OS_CHROMEOS |
| 171 chromeos::ScopedTestDeviceSettingsService test_device_settings_service_; | 172 chromeos::ScopedTestDeviceSettingsService test_device_settings_service_; |
| 172 chromeos::ScopedTestCrosSettings test_cros_settings_; | 173 chromeos::ScopedTestCrosSettings test_cros_settings_; |
| 173 chromeos::ScopedTestUserManager test_user_manager_; | 174 chromeos::ScopedTestUserManager test_user_manager_; |
| 174 #endif | 175 #endif |
| 175 }; | 176 }; |
| 176 | 177 |
| 177 TEST_F(ExtensionDataCollectionTest, CollectExtensionDataNoExtensions) { | 178 TEST_F(ExtensionDataCollectionTest, CollectExtensionDataNoExtensions) { |
| 178 scoped_ptr<ExtensionTestingProfile> profile = | 179 std::unique_ptr<ExtensionTestingProfile> profile = |
| 179 CreateProfile(SAFE_BROWSING_OPT_IN); | 180 CreateProfile(SAFE_BROWSING_OPT_IN); |
| 180 | 181 |
| 181 ClientIncidentReport_ExtensionData data; | 182 ClientIncidentReport_ExtensionData data; |
| 182 CollectExtensionData(&data); | 183 CollectExtensionData(&data); |
| 183 | 184 |
| 184 ASSERT_FALSE(data.has_last_installed_extension()); | 185 ASSERT_FALSE(data.has_last_installed_extension()); |
| 185 } | 186 } |
| 186 | 187 |
| 187 TEST_F(ExtensionDataCollectionTest, CollectExtensionDataNoSafeBrowsing) { | 188 TEST_F(ExtensionDataCollectionTest, CollectExtensionDataNoSafeBrowsing) { |
| 188 scoped_ptr<ExtensionTestingProfile> profile = | 189 std::unique_ptr<ExtensionTestingProfile> profile = |
| 189 CreateProfile(SAFE_BROWSING_OPT_OUT); | 190 CreateProfile(SAFE_BROWSING_OPT_OUT); |
| 190 profile->AddExtension(); | 191 profile->AddExtension(); |
| 191 | 192 |
| 192 ClientIncidentReport_ExtensionData data; | 193 ClientIncidentReport_ExtensionData data; |
| 193 CollectExtensionData(&data); | 194 CollectExtensionData(&data); |
| 194 | 195 |
| 195 ASSERT_FALSE(data.has_last_installed_extension()); | 196 ASSERT_FALSE(data.has_last_installed_extension()); |
| 196 } | 197 } |
| 197 | 198 |
| 198 TEST_F(ExtensionDataCollectionTest, CollectExtensionDataWithExtension) { | 199 TEST_F(ExtensionDataCollectionTest, CollectExtensionDataWithExtension) { |
| 199 std::string extension_id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; | 200 std::string extension_id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; |
| 200 std::string extension_name = "my_test_extension"; | 201 std::string extension_name = "my_test_extension"; |
| 201 base::Time install_time = base::Time::Now(); | 202 base::Time install_time = base::Time::Now(); |
| 202 std::string version = "1.4.2"; | 203 std::string version = "1.4.2"; |
| 203 std::string description = "Test Extension"; | 204 std::string description = "Test Extension"; |
| 204 std::string update_url = "https://www.chromium.org"; | 205 std::string update_url = "https://www.chromium.org"; |
| 205 int state = extensions::Extension::State::ENABLED; | 206 int state = extensions::Extension::State::ENABLED; |
| 206 | 207 |
| 207 scoped_ptr<ExtensionTestingProfile> profile = | 208 std::unique_ptr<ExtensionTestingProfile> profile = |
| 208 CreateProfile(SAFE_BROWSING_OPT_IN); | 209 CreateProfile(SAFE_BROWSING_OPT_IN); |
| 209 profile->AddExtension(extension_id, extension_name, install_time, version, | 210 profile->AddExtension(extension_id, extension_name, install_time, version, |
| 210 description, update_url, state); | 211 description, update_url, state); |
| 211 | 212 |
| 212 extensions::ExtensionIdSet valid_ids; | 213 extensions::ExtensionIdSet valid_ids; |
| 213 extensions::ExtensionIdSet invalid_ids; | 214 extensions::ExtensionIdSet invalid_ids; |
| 214 invalid_ids.insert(extension_id); | 215 invalid_ids.insert(extension_id); |
| 215 extensions::InstallSignature signature = {}; | 216 extensions::InstallSignature signature = {}; |
| 216 signature.ids = valid_ids; | 217 signature.ids = valid_ids; |
| 217 signature.invalid_ids = invalid_ids; | 218 signature.invalid_ids = invalid_ids; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 238 "manifest_version\":2,\"name\":\"my_test_extension\",\"update_url\":\"" | 239 "manifest_version\":2,\"name\":\"my_test_extension\",\"update_url\":\"" |
| 239 "https://www.chromium.org\",\"version\":\"1.4.2\"}"; | 240 "https://www.chromium.org\",\"version\":\"1.4.2\"}"; |
| 240 ASSERT_EQ(extension_info.manifest(), expected_manifest); | 241 ASSERT_EQ(extension_info.manifest(), expected_manifest); |
| 241 } | 242 } |
| 242 | 243 |
| 243 TEST_F(ExtensionDataCollectionTest, CollectsLastInstalledExtension) { | 244 TEST_F(ExtensionDataCollectionTest, CollectsLastInstalledExtension) { |
| 244 std::string extension_id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; | 245 std::string extension_id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; |
| 245 std::string extension_name = "extension_2"; | 246 std::string extension_name = "extension_2"; |
| 246 base::Time install_time = base::Time::Now() - base::TimeDelta::FromMinutes(3); | 247 base::Time install_time = base::Time::Now() - base::TimeDelta::FromMinutes(3); |
| 247 | 248 |
| 248 scoped_ptr<ExtensionTestingProfile> profile = | 249 std::unique_ptr<ExtensionTestingProfile> profile = |
| 249 CreateProfile(SAFE_BROWSING_OPT_IN); | 250 CreateProfile(SAFE_BROWSING_OPT_IN); |
| 250 profile->AddExtension("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "extension_1", | 251 profile->AddExtension("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "extension_1", |
| 251 base::Time::Now() - base::TimeDelta::FromDays(2)); | 252 base::Time::Now() - base::TimeDelta::FromDays(2)); |
| 252 profile->AddExtension(extension_id, extension_name, install_time); | 253 profile->AddExtension(extension_id, extension_name, install_time); |
| 253 profile->AddExtension("cccccccccccccccccccccccccccccccc", "extension_3", | 254 profile->AddExtension("cccccccccccccccccccccccccccccccc", "extension_3", |
| 254 base::Time::Now() - base::TimeDelta::FromHours(4)); | 255 base::Time::Now() - base::TimeDelta::FromHours(4)); |
| 255 | 256 |
| 256 ClientIncidentReport_ExtensionData data; | 257 ClientIncidentReport_ExtensionData data; |
| 257 CollectExtensionData(&data); | 258 CollectExtensionData(&data); |
| 258 | 259 |
| 259 ASSERT_TRUE(data.has_last_installed_extension()); | 260 ASSERT_TRUE(data.has_last_installed_extension()); |
| 260 ClientIncidentReport_ExtensionData_ExtensionInfo extension_info = | 261 ClientIncidentReport_ExtensionData_ExtensionInfo extension_info = |
| 261 data.last_installed_extension(); | 262 data.last_installed_extension(); |
| 262 | 263 |
| 263 ASSERT_EQ(extension_info.id(), extension_id); | 264 ASSERT_EQ(extension_info.id(), extension_id); |
| 264 ASSERT_EQ(extension_info.name(), extension_name); | 265 ASSERT_EQ(extension_info.name(), extension_name); |
| 265 ASSERT_EQ(extension_info.install_time_msec(), install_time.ToJavaTime()); | 266 ASSERT_EQ(extension_info.install_time_msec(), install_time.ToJavaTime()); |
| 266 } | 267 } |
| 267 | 268 |
| 268 TEST_F(ExtensionDataCollectionTest, IgnoresExtensionsIfNoSafeBrowsing) { | 269 TEST_F(ExtensionDataCollectionTest, IgnoresExtensionsIfNoSafeBrowsing) { |
| 269 std::string extension_id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; | 270 std::string extension_id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; |
| 270 std::string extension_name = "extension_2"; | 271 std::string extension_name = "extension_2"; |
| 271 | 272 |
| 272 scoped_ptr<ExtensionTestingProfile> profile = | 273 std::unique_ptr<ExtensionTestingProfile> profile = |
| 273 CreateProfile(SAFE_BROWSING_OPT_IN); | 274 CreateProfile(SAFE_BROWSING_OPT_IN); |
| 274 | 275 |
| 275 profile->AddExtension(extension_id, extension_name, | 276 profile->AddExtension(extension_id, extension_name, |
| 276 base::Time::Now() - base::TimeDelta::FromDays(3)); | 277 base::Time::Now() - base::TimeDelta::FromDays(3)); |
| 277 | 278 |
| 278 scoped_ptr<ExtensionTestingProfile> profile_without_safe_browsing = | 279 std::unique_ptr<ExtensionTestingProfile> profile_without_safe_browsing = |
| 279 CreateProfile(SAFE_BROWSING_OPT_OUT); | 280 CreateProfile(SAFE_BROWSING_OPT_OUT); |
| 280 profile_without_safe_browsing->AddExtension( | 281 profile_without_safe_browsing->AddExtension( |
| 281 "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "extension_1", | 282 "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb", "extension_1", |
| 282 base::Time::Now() - base::TimeDelta::FromDays(2)); | 283 base::Time::Now() - base::TimeDelta::FromDays(2)); |
| 283 | 284 |
| 284 ClientIncidentReport_ExtensionData data; | 285 ClientIncidentReport_ExtensionData data; |
| 285 CollectExtensionData(&data); | 286 CollectExtensionData(&data); |
| 286 | 287 |
| 287 ASSERT_TRUE(data.has_last_installed_extension()); | 288 ASSERT_TRUE(data.has_last_installed_extension()); |
| 288 ClientIncidentReport_ExtensionData_ExtensionInfo extension_info = | 289 ClientIncidentReport_ExtensionData_ExtensionInfo extension_info = |
| 289 data.last_installed_extension(); | 290 data.last_installed_extension(); |
| 290 | 291 |
| 291 ASSERT_EQ(extension_info.id(), extension_id); | 292 ASSERT_EQ(extension_info.id(), extension_id); |
| 292 ASSERT_EQ(extension_info.name(), extension_name); | 293 ASSERT_EQ(extension_info.name(), extension_name); |
| 293 } | 294 } |
| 294 | 295 |
| 295 } // namespace safe_browsing | 296 } // namespace safe_browsing |
| OLD | NEW |