| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "base/path_service.h" | 5 #include "base/path_service.h" |
| 6 #include "base/prefs/pref_service.h" | 6 #include "base/prefs/pref_service.h" |
| 7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
| 8 #include "chrome/browser/chrome_notification_types.h" | 8 #include "chrome/browser/chrome_notification_types.h" |
| 9 #include "chrome/browser/extensions/extension_service_unittest.h" | 9 #include "chrome/browser/extensions/extension_service_unittest.h" |
| 10 #include "chrome/browser/extensions/unpacked_installer.h" | 10 #include "chrome/browser/extensions/unpacked_installer.h" |
| 11 #include "chrome/browser/managed_mode/custodian_profile_downloader_service.h" | 11 #include "chrome/browser/managed_mode/custodian_profile_downloader_service.h" |
| 12 #include "chrome/browser/managed_mode/custodian_profile_downloader_service_facto
ry.h" | 12 #include "chrome/browser/managed_mode/custodian_profile_downloader_service_facto
ry.h" |
| 13 #include "chrome/browser/managed_mode/managed_user_service.h" | 13 #include "chrome/browser/managed_mode/managed_user_service.h" |
| 14 #include "chrome/browser/managed_mode/managed_user_service_factory.h" | 14 #include "chrome/browser/managed_mode/managed_user_service_factory.h" |
| 15 #include "chrome/browser/prefs/scoped_user_pref_update.h" | 15 #include "chrome/browser/prefs/scoped_user_pref_update.h" |
| 16 #include "chrome/browser/profiles/profile.h" | 16 #include "chrome/browser/profiles/profile.h" |
| 17 #include "chrome/browser/ui/browser_list.h" | 17 #include "chrome/browser/ui/browser_list.h" |
| 18 #include "chrome/common/chrome_paths.h" | 18 #include "chrome/common/chrome_paths.h" |
| 19 #include "chrome/common/extensions/extension.h" | 19 #include "chrome/common/extensions/extension.h" |
| 20 #include "chrome/common/extensions/extension_builder.h" | 20 #include "chrome/common/extensions/extension_builder.h" |
| 21 #include "chrome/common/pref_names.h" | 21 #include "chrome/common/pref_names.h" |
| 22 #include "chrome/test/base/testing_profile.h" | 22 #include "chrome/test/base/testing_profile.h" |
| 23 #include "content/public/test/test_browser_thread.h" | 23 #include "content/public/test/test_browser_thread_bundle.h" |
| 24 #include "content/public/test/test_utils.h" | 24 #include "content/public/test/test_utils.h" |
| 25 #include "extensions/common/manifest_constants.h" | 25 #include "extensions/common/manifest_constants.h" |
| 26 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" |
| 27 | 27 |
| 28 using content::MessageLoopRunner; | 28 using content::MessageLoopRunner; |
| 29 | 29 |
| 30 namespace { | 30 namespace { |
| 31 | 31 |
| 32 void OnProfileDownloadedFail(const string16& full_name) { | 32 void OnProfileDownloadedFail(const string16& full_name) { |
| 33 ASSERT_TRUE(false) << "Profile download should not have succeeded."; | 33 ASSERT_TRUE(false) << "Profile download should not have succeeded."; |
| (...skipping 25 matching lines...) Expand all Loading... |
| 59 void Reset() { | 59 void Reset() { |
| 60 message_loop_runner_ = new MessageLoopRunner; | 60 message_loop_runner_ = new MessageLoopRunner; |
| 61 } | 61 } |
| 62 | 62 |
| 63 ManagedModeURLFilter* url_filter_; | 63 ManagedModeURLFilter* url_filter_; |
| 64 scoped_refptr<MessageLoopRunner> message_loop_runner_; | 64 scoped_refptr<MessageLoopRunner> message_loop_runner_; |
| 65 }; | 65 }; |
| 66 | 66 |
| 67 class ManagedUserServiceTest : public ::testing::Test { | 67 class ManagedUserServiceTest : public ::testing::Test { |
| 68 public: | 68 public: |
| 69 ManagedUserServiceTest() : ui_thread_(content::BrowserThread::UI, | 69 ManagedUserServiceTest() { |
| 70 &message_loop_) { | |
| 71 managed_user_service_ = ManagedUserServiceFactory::GetForProfile(&profile_); | 70 managed_user_service_ = ManagedUserServiceFactory::GetForProfile(&profile_); |
| 72 } | 71 } |
| 73 | 72 |
| 74 virtual ~ManagedUserServiceTest() {} | 73 virtual ~ManagedUserServiceTest() {} |
| 75 | 74 |
| 76 protected: | 75 protected: |
| 77 base::MessageLoop message_loop_; | 76 content::TestBrowserThreadBundle thread_bundle_; |
| 78 content::TestBrowserThread ui_thread_; | |
| 79 TestingProfile profile_; | 77 TestingProfile profile_; |
| 80 ManagedUserService* managed_user_service_; | 78 ManagedUserService* managed_user_service_; |
| 81 }; | 79 }; |
| 82 | 80 |
| 83 } // namespace | 81 } // namespace |
| 84 | 82 |
| 85 TEST_F(ManagedUserServiceTest, GetManualExceptionsForHost) { | 83 TEST_F(ManagedUserServiceTest, GetManualExceptionsForHost) { |
| 86 GURL kExampleFooURL("http://www.example.com/foo"); | 84 GURL kExampleFooURL("http://www.example.com/foo"); |
| 87 GURL kExampleBarURL("http://www.example.com/bar"); | 85 GURL kExampleBarURL("http://www.example.com/bar"); |
| 88 GURL kExampleFooNoWWWURL("http://example.com/foo"); | 86 GURL kExampleFooNoWWWURL("http://example.com/foo"); |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 CustodianProfileDownloaderService* downloader_service = | 143 CustodianProfileDownloaderService* downloader_service = |
| 146 CustodianProfileDownloaderServiceFactory::GetForProfile( | 144 CustodianProfileDownloaderServiceFactory::GetForProfile( |
| 147 &profile_); | 145 &profile_); |
| 148 | 146 |
| 149 // Emulate being logged in, then start to download a profile so a | 147 // Emulate being logged in, then start to download a profile so a |
| 150 // ProfileDownloader gets created. | 148 // ProfileDownloader gets created. |
| 151 profile_.GetPrefs()->SetString(prefs::kGoogleServicesUsername, "Logged In"); | 149 profile_.GetPrefs()->SetString(prefs::kGoogleServicesUsername, "Logged In"); |
| 152 downloader_service->DownloadProfile(base::Bind(&OnProfileDownloadedFail)); | 150 downloader_service->DownloadProfile(base::Bind(&OnProfileDownloadedFail)); |
| 153 } | 151 } |
| 154 | 152 |
| 155 class ManagedUserServiceExtensionTest : public ExtensionServiceTestBase { | 153 class ManagedUserServiceExtensionTestBase : public ExtensionServiceTestBase { |
| 156 public: | 154 public: |
| 157 ManagedUserServiceExtensionTest() {} | 155 explicit ManagedUserServiceExtensionTestBase(bool is_managed) |
| 158 virtual ~ManagedUserServiceExtensionTest() {} | 156 : is_managed_(is_managed) {} |
| 157 virtual ~ManagedUserServiceExtensionTestBase() {} |
| 159 | 158 |
| 160 virtual void SetUp() OVERRIDE { | 159 virtual void SetUp() OVERRIDE { |
| 161 ExtensionServiceTestBase::SetUp(); | 160 ExtensionServiceTestBase::SetUp(); |
| 162 InitializeEmptyExtensionService(); | 161 ExtensionServiceTestBase::ExtensionServiceInitParams params = |
| 163 } | 162 CreateDefaultInitParams(); |
| 164 | 163 params.profile_is_managed = is_managed_; |
| 165 virtual void TearDown() OVERRIDE { | 164 InitializeExtensionService(params); |
| 166 ExtensionServiceTestBase::TearDown(); | 165 ManagedUserServiceFactory::GetForProfile(profile_.get())->Init(); |
| 167 } | 166 } |
| 168 | 167 |
| 169 protected: | 168 protected: |
| 170 ScopedVector<ManagedModeSiteList> GetActiveSiteLists( | 169 ScopedVector<ManagedModeSiteList> GetActiveSiteLists( |
| 171 ManagedUserService* managed_user_service) { | 170 ManagedUserService* managed_user_service) { |
| 172 return managed_user_service->GetActiveSiteLists(); | 171 return managed_user_service->GetActiveSiteLists(); |
| 173 } | 172 } |
| 174 | 173 |
| 175 scoped_refptr<extensions::Extension> MakeThemeExtension() { | 174 scoped_refptr<extensions::Extension> MakeThemeExtension() { |
| 176 scoped_ptr<DictionaryValue> source(new DictionaryValue()); | 175 scoped_ptr<DictionaryValue> source(new DictionaryValue()); |
| 177 source->SetString(extensions::manifest_keys::kName, "Theme"); | 176 source->SetString(extensions::manifest_keys::kName, "Theme"); |
| 178 source->Set(extensions::manifest_keys::kTheme, new DictionaryValue()); | 177 source->Set(extensions::manifest_keys::kTheme, new DictionaryValue()); |
| 179 source->SetString(extensions::manifest_keys::kVersion, "1.0"); | 178 source->SetString(extensions::manifest_keys::kVersion, "1.0"); |
| 180 extensions::ExtensionBuilder builder; | 179 extensions::ExtensionBuilder builder; |
| 181 scoped_refptr<extensions::Extension> extension = | 180 scoped_refptr<extensions::Extension> extension = |
| 182 builder.SetManifest(source.Pass()).Build(); | 181 builder.SetManifest(source.Pass()).Build(); |
| 183 return extension; | 182 return extension; |
| 184 } | 183 } |
| 185 | 184 |
| 186 scoped_refptr<extensions::Extension> MakeExtension() { | 185 scoped_refptr<extensions::Extension> MakeExtension() { |
| 187 scoped_ptr<DictionaryValue> manifest = extensions::DictionaryBuilder() | 186 scoped_ptr<DictionaryValue> manifest = extensions::DictionaryBuilder() |
| 188 .Set(extensions::manifest_keys::kName, "Extension") | 187 .Set(extensions::manifest_keys::kName, "Extension") |
| 189 .Set(extensions::manifest_keys::kVersion, "1.0") | 188 .Set(extensions::manifest_keys::kVersion, "1.0") |
| 190 .Build(); | 189 .Build(); |
| 191 extensions::ExtensionBuilder builder; | 190 extensions::ExtensionBuilder builder; |
| 192 scoped_refptr<extensions::Extension> extension = | 191 scoped_refptr<extensions::Extension> extension = |
| 193 builder.SetManifest(manifest.Pass()).Build(); | 192 builder.SetManifest(manifest.Pass()).Build(); |
| 194 return extension; | 193 return extension; |
| 195 } | 194 } |
| 195 |
| 196 bool is_managed_; |
| 196 }; | 197 }; |
| 197 | 198 |
| 198 TEST_F(ManagedUserServiceExtensionTest, | 199 class ManagedUserServiceExtensionTestUnmanaged |
| 199 ExtensionManagementPolicyProviderUnmanaged) { | 200 : public ManagedUserServiceExtensionTestBase { |
| 201 public: |
| 202 ManagedUserServiceExtensionTestUnmanaged() |
| 203 : ManagedUserServiceExtensionTestBase(false) {} |
| 204 }; |
| 205 |
| 206 class ManagedUserServiceExtensionTest |
| 207 : public ManagedUserServiceExtensionTestBase { |
| 208 public: |
| 209 ManagedUserServiceExtensionTest() |
| 210 : ManagedUserServiceExtensionTestBase(true) {} |
| 211 }; |
| 212 |
| 213 TEST_F(ManagedUserServiceExtensionTestUnmanaged, |
| 214 ExtensionManagementPolicyProvider) { |
| 200 ManagedUserService* managed_user_service = | 215 ManagedUserService* managed_user_service = |
| 201 ManagedUserServiceFactory::GetForProfile(profile_.get()); | 216 ManagedUserServiceFactory::GetForProfile(profile_.get()); |
| 202 EXPECT_FALSE(profile_->IsManaged()); | 217 EXPECT_FALSE(profile_->IsManaged()); |
| 203 | 218 |
| 204 scoped_refptr<extensions::Extension> extension = MakeExtension(); | 219 scoped_refptr<extensions::Extension> extension = MakeExtension(); |
| 205 string16 error_1; | 220 string16 error_1; |
| 206 EXPECT_TRUE(managed_user_service->UserMayLoad(extension.get(), &error_1)); | 221 EXPECT_TRUE(managed_user_service->UserMayLoad(extension.get(), &error_1)); |
| 207 EXPECT_EQ(string16(), error_1); | 222 EXPECT_EQ(string16(), error_1); |
| 208 | 223 |
| 209 string16 error_2; | 224 string16 error_2; |
| 210 EXPECT_TRUE( | 225 EXPECT_TRUE( |
| 211 managed_user_service->UserMayModifySettings(extension.get(), &error_2)); | 226 managed_user_service->UserMayModifySettings(extension.get(), &error_2)); |
| 212 EXPECT_EQ(string16(), error_2); | 227 EXPECT_EQ(string16(), error_2); |
| 213 } | 228 } |
| 214 | 229 |
| 215 TEST_F(ManagedUserServiceExtensionTest, | 230 TEST_F(ManagedUserServiceExtensionTest, ExtensionManagementPolicyProvider) { |
| 216 ExtensionManagementPolicyProviderManaged) { | |
| 217 ManagedUserService* managed_user_service = | 231 ManagedUserService* managed_user_service = |
| 218 ManagedUserServiceFactory::GetForProfile(profile_.get()); | 232 ManagedUserServiceFactory::GetForProfile(profile_.get()); |
| 219 managed_user_service->InitForTesting(); | |
| 220 ManagedModeURLFilterObserver observer( | 233 ManagedModeURLFilterObserver observer( |
| 221 managed_user_service->GetURLFilterForUIThread()); | 234 managed_user_service->GetURLFilterForUIThread()); |
| 222 EXPECT_TRUE(profile_->IsManaged()); | 235 ASSERT_TRUE(profile_->IsManaged()); |
| 223 // Wait for the initial update to finish (otherwise we'll get leaks). | 236 // Wait for the initial update to finish (otherwise we'll get leaks). |
| 224 observer.Wait(); | 237 observer.Wait(); |
| 225 | 238 |
| 226 // Check that a supervised user can install a theme. | 239 // Check that a supervised user can install a theme. |
| 227 scoped_refptr<extensions::Extension> theme = MakeThemeExtension(); | 240 scoped_refptr<extensions::Extension> theme = MakeThemeExtension(); |
| 228 string16 error_1; | 241 string16 error_1; |
| 229 EXPECT_TRUE(managed_user_service->UserMayLoad(theme.get(), &error_1)); | 242 EXPECT_TRUE(managed_user_service->UserMayLoad(theme.get(), &error_1)); |
| 230 EXPECT_TRUE(error_1.empty()); | 243 EXPECT_TRUE(error_1.empty()); |
| 231 EXPECT_TRUE( | 244 EXPECT_TRUE( |
| 232 managed_user_service->UserMayModifySettings(theme.get(), &error_1)); | 245 managed_user_service->UserMayModifySettings(theme.get(), &error_1)); |
| 233 EXPECT_TRUE(error_1.empty()); | 246 EXPECT_TRUE(error_1.empty()); |
| 234 | 247 |
| 235 // Now check a different kind of extension. | 248 // Now check a different kind of extension. |
| 236 scoped_refptr<extensions::Extension> extension = MakeExtension(); | 249 scoped_refptr<extensions::Extension> extension = MakeExtension(); |
| 237 EXPECT_FALSE(managed_user_service->UserMayLoad(extension.get(), &error_1)); | 250 EXPECT_FALSE(managed_user_service->UserMayLoad(extension.get(), &error_1)); |
| 238 EXPECT_FALSE(error_1.empty()); | 251 EXPECT_FALSE(error_1.empty()); |
| 239 | 252 |
| 240 string16 error_2; | 253 string16 error_2; |
| 241 EXPECT_FALSE( | 254 EXPECT_FALSE( |
| 242 managed_user_service->UserMayModifySettings(extension.get(), &error_2)); | 255 managed_user_service->UserMayModifySettings(extension.get(), &error_2)); |
| 243 EXPECT_FALSE(error_2.empty()); | 256 EXPECT_FALSE(error_2.empty()); |
| 244 | 257 |
| 245 #ifndef NDEBUG | 258 #ifndef NDEBUG |
| 246 EXPECT_FALSE(managed_user_service->GetDebugPolicyProviderName().empty()); | 259 EXPECT_FALSE(managed_user_service->GetDebugPolicyProviderName().empty()); |
| 247 #endif | 260 #endif |
| 248 } | 261 } |
| 249 | 262 |
| 250 | |
| 251 TEST_F(ManagedUserServiceExtensionTest, NoContentPacks) { | 263 TEST_F(ManagedUserServiceExtensionTest, NoContentPacks) { |
| 252 ManagedUserService* managed_user_service = | 264 ManagedUserService* managed_user_service = |
| 253 ManagedUserServiceFactory::GetForProfile(profile_.get()); | 265 ManagedUserServiceFactory::GetForProfile(profile_.get()); |
| 254 managed_user_service->Init(); | |
| 255 ManagedModeURLFilter* url_filter = | 266 ManagedModeURLFilter* url_filter = |
| 256 managed_user_service->GetURLFilterForUIThread(); | 267 managed_user_service->GetURLFilterForUIThread(); |
| 257 | 268 |
| 258 GURL url("http://youtube.com"); | 269 GURL url("http://youtube.com"); |
| 259 ScopedVector<ManagedModeSiteList> site_lists = | 270 ScopedVector<ManagedModeSiteList> site_lists = |
| 260 GetActiveSiteLists(managed_user_service); | 271 GetActiveSiteLists(managed_user_service); |
| 261 ASSERT_EQ(0u, site_lists.size()); | 272 ASSERT_EQ(0u, site_lists.size()); |
| 262 EXPECT_EQ(ManagedModeURLFilter::ALLOW, | 273 EXPECT_EQ(ManagedModeURLFilter::ALLOW, |
| 263 url_filter->GetFilteringBehaviorForURL(url)); | 274 url_filter->GetFilteringBehaviorForURL(url)); |
| 264 } | 275 } |
| 265 | 276 |
| 266 TEST_F(ManagedUserServiceExtensionTest, InstallContentPacks) { | 277 TEST_F(ManagedUserServiceExtensionTest, InstallContentPacks) { |
| 267 ManagedUserService* managed_user_service = | 278 ManagedUserService* managed_user_service = |
| 268 ManagedUserServiceFactory::GetForProfile(profile_.get()); | 279 ManagedUserServiceFactory::GetForProfile(profile_.get()); |
| 269 managed_user_service->InitForTesting(); | |
| 270 ManagedModeURLFilter* url_filter = | 280 ManagedModeURLFilter* url_filter = |
| 271 managed_user_service->GetURLFilterForUIThread(); | 281 managed_user_service->GetURLFilterForUIThread(); |
| 272 ManagedModeURLFilterObserver observer(url_filter); | 282 ManagedModeURLFilterObserver observer(url_filter); |
| 273 observer.Wait(); | 283 observer.Wait(); |
| 274 | 284 |
| 275 GURL example_url("http://example.com"); | 285 GURL example_url("http://example.com"); |
| 276 GURL moose_url("http://moose.org"); | 286 GURL moose_url("http://moose.org"); |
| 277 EXPECT_EQ(ManagedModeURLFilter::ALLOW, | 287 EXPECT_EQ(ManagedModeURLFilter::ALLOW, |
| 278 url_filter->GetFilteringBehaviorForURL(example_url)); | 288 url_filter->GetFilteringBehaviorForURL(example_url)); |
| 279 | 289 |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 363 sites.clear(); | 373 sites.clear(); |
| 364 site_lists[0]->GetSites(&sites); | 374 site_lists[0]->GetSites(&sites); |
| 365 ASSERT_EQ(1u, sites.size()); | 375 ASSERT_EQ(1u, sites.size()); |
| 366 EXPECT_EQ(ASCIIToUTF16("Moose"), sites[0].name); | 376 EXPECT_EQ(ASCIIToUTF16("Moose"), sites[0].name); |
| 367 | 377 |
| 368 EXPECT_EQ(ManagedModeURLFilter::WARN, | 378 EXPECT_EQ(ManagedModeURLFilter::WARN, |
| 369 url_filter->GetFilteringBehaviorForURL(example_url)); | 379 url_filter->GetFilteringBehaviorForURL(example_url)); |
| 370 EXPECT_EQ(ManagedModeURLFilter::ALLOW, | 380 EXPECT_EQ(ManagedModeURLFilter::ALLOW, |
| 371 url_filter->GetFilteringBehaviorForURL(moose_url)); | 381 url_filter->GetFilteringBehaviorForURL(moose_url)); |
| 372 } | 382 } |
| OLD | NEW |