Index: chrome/browser/chromeos/attestation/platform_verification_flow_unittest.cc |
diff --git a/chrome/browser/chromeos/attestation/platform_verification_flow_unittest.cc b/chrome/browser/chromeos/attestation/platform_verification_flow_unittest.cc |
index a46081db6378abcf5121e23cf848991086c31ba6..66fd413eeffa844cc20c77842d3185e04bac92ce 100644 |
--- a/chrome/browser/chromeos/attestation/platform_verification_flow_unittest.cc |
+++ b/chrome/browser/chromeos/attestation/platform_verification_flow_unittest.cc |
@@ -6,8 +6,6 @@ |
#include "base/bind.h" |
#include "base/message_loop/message_loop.h" |
-#include "base/prefs/pref_registry_simple.h" |
-#include "base/prefs/testing_pref_service.h" |
#include "base/run_loop.h" |
#include "chrome/browser/chromeos/attestation/attestation_signed_data.pb.h" |
#include "chrome/browser/chromeos/attestation/fake_certificate.h" |
@@ -17,8 +15,11 @@ |
#include "chrome/browser/chromeos/settings/device_settings_service.h" |
#include "chrome/browser/chromeos/settings/stub_cros_settings_provider.h" |
#include "chrome/browser/content_settings/host_content_settings_map.h" |
+#include "chrome/browser/profiles/profile_impl.h" |
+#include "chrome/browser/renderer_host/pepper/device_id_fetcher.h" |
#include "chrome/common/content_settings_pattern.h" |
#include "chrome/common/pref_names.h" |
+#include "chrome/test/base/testing_pref_service_syncable.h" |
#include "chromeos/attestation/mock_attestation_flow.h" |
#include "chromeos/cryptohome/mock_async_method_caller.h" |
#include "chromeos/dbus/fake_cryptohome_client.h" |
@@ -51,9 +52,26 @@ const char kTestURLSecure[] = "https://mytestdomain/test"; |
class FakeDelegate : public PlatformVerificationFlow::Delegate { |
public: |
FakeDelegate() : response_(PlatformVerificationFlow::CONSENT_RESPONSE_ALLOW), |
- num_consent_calls_(0) {} |
+ num_consent_calls_(0), |
+ url_(kTestURL), |
+ is_incognito_(false) { |
+ // Configure a user for the mock user manager. |
+ mock_user_manager_.SetActiveUser(kTestEmail); |
+ } |
virtual ~FakeDelegate() {} |
+ void SetUp() { |
+ ProfileImpl::RegisterProfilePrefs(pref_service_.registry()); |
+ chrome::DeviceIDFetcher::RegisterProfilePrefs(pref_service_.registry()); |
+ PlatformVerificationFlow::RegisterProfilePrefs(pref_service_.registry()); |
+ HostContentSettingsMap::RegisterProfilePrefs(pref_service_.registry()); |
+ content_settings_ = new HostContentSettingsMap(&pref_service_, false); |
+ } |
+ |
+ void TearDown() { |
+ content_settings_->ShutdownOnUIThread(); |
+ } |
+ |
virtual void ShowConsentPrompt( |
content::WebContents* web_contents, |
const PlatformVerificationFlow::Delegate::ConsentCallback& callback) |
@@ -62,6 +80,27 @@ class FakeDelegate : public PlatformVerificationFlow::Delegate { |
callback.Run(response_); |
} |
+ virtual PrefService* GetPrefs(content::WebContents* web_contents) OVERRIDE { |
+ return &pref_service_; |
+ } |
+ |
+ virtual const GURL& GetURL(content::WebContents* web_contents) OVERRIDE { |
+ return url_; |
+ } |
+ |
+ virtual User* GetUser(content::WebContents* web_contents) OVERRIDE { |
+ return mock_user_manager_.GetActiveUser(); |
+ } |
+ |
+ virtual HostContentSettingsMap* GetContentSettings( |
+ content::WebContents* web_contents) OVERRIDE { |
+ return content_settings_; |
+ } |
+ |
+ virtual bool IsGuestOrIncognito(content::WebContents* web_contents) OVERRIDE { |
+ return is_incognito_; |
+ } |
+ |
void set_response(PlatformVerificationFlow::ConsentResponse response) { |
response_ = response; |
} |
@@ -70,9 +109,26 @@ class FakeDelegate : public PlatformVerificationFlow::Delegate { |
return num_consent_calls_; |
} |
+ TestingPrefServiceSyncable& pref_service() { |
+ return pref_service_; |
+ } |
+ |
+ void set_url(const GURL& url) { |
+ url_ = url; |
+ } |
+ |
+ void set_is_incognito(bool is_incognito) { |
+ is_incognito_ = is_incognito; |
+ } |
+ |
private: |
PlatformVerificationFlow::ConsentResponse response_; |
int num_consent_calls_; |
+ TestingPrefServiceSyncable pref_service_; |
+ MockUserManager mock_user_manager_; |
+ GURL url_; |
+ scoped_refptr<HostContentSettingsMap> content_settings_; |
+ bool is_incognito_; |
DISALLOW_COPY_AND_ASSIGN(FakeDelegate); |
}; |
@@ -129,29 +185,18 @@ class PlatformVerificationFlowTest : public ::testing::Test { |
result_(PlatformVerificationFlow::INTERNAL_ERROR) {} |
void SetUp() { |
- // Configure a user for the mock user manager. |
- mock_user_manager_.SetActiveUser(kTestEmail); |
+ fake_delegate_.SetUp(); |
// Create a verifier for tests to call. |
verifier_ = new PlatformVerificationFlow(&mock_attestation_flow_, |
&mock_async_caller_, |
&fake_cryptohome_client_, |
- &mock_user_manager_, |
&fake_delegate_); |
// Create callbacks for tests to use with verifier_. |
callback_ = base::Bind(&PlatformVerificationFlowTest::FakeChallengeCallback, |
base::Unretained(this)); |
- // Configure the test pref service. |
- pref_service_.registry()->RegisterBooleanPref(prefs::kEnableDRM, true); |
- pref_service_.registry()->RegisterBooleanPref(prefs::kRAConsentFirstTime, |
- true); |
- RegisterHostContentSettingsPrefs(pref_service_.registry()); |
- verifier_->set_testing_prefs(&pref_service_); |
- test_content_settings_ = new HostContentSettingsMap(&pref_service_, false); |
- verifier_->set_testing_content_settings(test_content_settings_); |
- |
// Configure the global cros_settings. |
CrosSettings* cros_settings = CrosSettings::Get(); |
device_settings_provider_ = |
@@ -160,70 +205,10 @@ class PlatformVerificationFlowTest : public ::testing::Test { |
cros_settings->AddSettingsProvider(&stub_settings_provider_); |
cros_settings->SetBoolean(kAttestationForContentProtectionEnabled, true); |
- // Configure a test URL to shortcut the dependency on WebContents. |
- verifier_->set_testing_url(GURL(kTestURL)); |
- } |
+ // Start with the first-time setting set since most tests want this. |
+ fake_delegate_.pref_service().SetUserPref(prefs::kRAConsentFirstTime, |
+ new base::FundamentalValue(true)); |
- void RegisterHostContentSettingsPrefs(PrefRegistrySimple* registry) { |
- registry->RegisterIntegerPref( |
- prefs::kContentSettingsWindowLastTabIndex, |
- 0); |
- registry->RegisterIntegerPref( |
- prefs::kContentSettingsDefaultWhitelistVersion, |
- 0); |
- registry->RegisterBooleanPref( |
- prefs::kContentSettingsClearOnExitMigrated, |
- false); |
- DictionaryValue* default_content_settings = new DictionaryValue(); |
- registry->RegisterDictionaryPref( |
- prefs::kDefaultContentSettings, |
- default_content_settings); |
- registry->RegisterIntegerPref( |
- prefs::kContentSettingsVersion, |
- ContentSettingsPattern::kContentSettingsPatternVersion); |
- registry->RegisterDictionaryPref( |
- prefs::kContentSettingsPatternPairs); |
- registry->RegisterListPref(prefs::kManagedAutoSelectCertificateForUrls); |
- registry->RegisterListPref(prefs::kManagedCookiesAllowedForUrls); |
- registry->RegisterListPref(prefs::kManagedCookiesBlockedForUrls); |
- registry->RegisterListPref(prefs::kManagedCookiesSessionOnlyForUrls); |
- registry->RegisterListPref(prefs::kManagedImagesAllowedForUrls); |
- registry->RegisterListPref(prefs::kManagedImagesBlockedForUrls); |
- registry->RegisterListPref(prefs::kManagedJavaScriptAllowedForUrls); |
- registry->RegisterListPref(prefs::kManagedJavaScriptBlockedForUrls); |
- registry->RegisterListPref(prefs::kManagedPluginsAllowedForUrls); |
- registry->RegisterListPref(prefs::kManagedPluginsBlockedForUrls); |
- registry->RegisterListPref(prefs::kManagedPopupsAllowedForUrls); |
- registry->RegisterListPref(prefs::kManagedPopupsBlockedForUrls); |
- registry->RegisterListPref(prefs::kManagedNotificationsAllowedForUrls); |
- registry->RegisterListPref(prefs::kManagedNotificationsBlockedForUrls); |
- registry->RegisterIntegerPref( |
- prefs::kManagedDefaultCookiesSetting, |
- CONTENT_SETTING_DEFAULT); |
- registry->RegisterIntegerPref( |
- prefs::kManagedDefaultImagesSetting, |
- CONTENT_SETTING_DEFAULT); |
- registry->RegisterIntegerPref( |
- prefs::kManagedDefaultJavaScriptSetting, |
- CONTENT_SETTING_DEFAULT); |
- registry->RegisterIntegerPref( |
- prefs::kManagedDefaultPluginsSetting, |
- CONTENT_SETTING_DEFAULT); |
- registry->RegisterIntegerPref( |
- prefs::kManagedDefaultPopupsSetting, |
- CONTENT_SETTING_DEFAULT); |
- registry->RegisterIntegerPref( |
- prefs::kManagedDefaultGeolocationSetting, |
- CONTENT_SETTING_DEFAULT); |
- registry->RegisterIntegerPref( |
- prefs::kManagedDefaultNotificationsSetting, |
- CONTENT_SETTING_DEFAULT); |
- registry->RegisterIntegerPref( |
- prefs::kManagedDefaultMediaStreamSetting, |
- CONTENT_SETTING_DEFAULT); |
- registry->RegisterBooleanPref( |
- prefs::kClearSiteDataOnExit, |
- false); |
} |
void TearDown() { |
@@ -231,7 +216,7 @@ class PlatformVerificationFlowTest : public ::testing::Test { |
CrosSettings* cros_settings = CrosSettings::Get(); |
cros_settings->RemoveSettingsProvider(&stub_settings_provider_); |
cros_settings->AddSettingsProvider(device_settings_provider_); |
- test_content_settings_->ShutdownOnUIThread(); |
+ fake_delegate_.TearDown(); |
} |
void ExpectAttestationFlow() { |
@@ -258,11 +243,9 @@ class PlatformVerificationFlowTest : public ::testing::Test { |
} |
void SetUserConsent(const GURL& url, bool allow) { |
- verifier_->RecordDomainConsent(test_content_settings_, url, allow); |
- } |
- |
- void SetURL(const GURL& url) { |
- verifier_->set_testing_url(url); |
+ verifier_->RecordDomainConsent(fake_delegate_.GetContentSettings(NULL), |
+ url, |
+ allow); |
} |
void FakeGetCertificate( |
@@ -311,14 +294,11 @@ class PlatformVerificationFlowTest : public ::testing::Test { |
StrictMock<MockAttestationFlow> mock_attestation_flow_; |
cryptohome::MockAsyncMethodCaller mock_async_caller_; |
CustomFakeCryptohomeClient fake_cryptohome_client_; |
- MockUserManager mock_user_manager_; |
FakeDelegate fake_delegate_; |
- TestingPrefServiceSimple pref_service_; |
CrosSettingsProvider* device_settings_provider_; |
StubCrosSettingsProvider stub_settings_provider_; |
ScopedTestDeviceSettingsService test_device_settings_service_; |
ScopedTestCrosSettings test_cros_settings_; |
- scoped_refptr<HostContentSettingsMap> test_content_settings_; |
scoped_refptr<PlatformVerificationFlow> verifier_; |
// Controls result of FakeGetCertificate. |
@@ -366,8 +346,8 @@ TEST_F(PlatformVerificationFlowTest, SuccessWithAttestationConsent) { |
TEST_F(PlatformVerificationFlowTest, SuccessWithFirstTimeConsent) { |
SetUserConsent(GURL(kTestURL), true); |
- pref_service_.SetUserPref(prefs::kRAConsentFirstTime, |
- new base::FundamentalValue(false)); |
+ fake_delegate_.pref_service().SetUserPref(prefs::kRAConsentFirstTime, |
+ new base::FundamentalValue(false)); |
ExpectAttestationFlow(); |
verifier_->ChallengePlatformKey(NULL, kTestID, kTestChallenge, callback_); |
base::RunLoop().RunUntilIdle(); |
@@ -396,8 +376,8 @@ TEST_F(PlatformVerificationFlowTest, FeatureDisabled) { |
} |
TEST_F(PlatformVerificationFlowTest, FeatureDisabledByUser) { |
- pref_service_.SetUserPref(prefs::kEnableDRM, |
- new base::FundamentalValue(false)); |
+ fake_delegate_.pref_service().SetUserPref(prefs::kEnableDRM, |
+ new base::FundamentalValue(false)); |
verifier_->ChallengePlatformKey(NULL, kTestID, kTestChallenge, callback_); |
base::RunLoop().RunUntilIdle(); |
EXPECT_EQ(PlatformVerificationFlow::POLICY_REJECTED, result_); |
@@ -452,7 +432,7 @@ TEST_F(PlatformVerificationFlowTest, ConsentPerScheme) { |
base::RunLoop().RunUntilIdle(); |
EXPECT_EQ(PlatformVerificationFlow::POLICY_REJECTED, result_); |
// Call with a different scheme and expect another consent prompt. |
- SetURL(GURL(kTestURLSecure)); |
+ fake_delegate_.set_url(GURL(kTestURLSecure)); |
verifier_->ChallengePlatformKey(NULL, kTestID, kTestChallenge, callback_); |
base::RunLoop().RunUntilIdle(); |
EXPECT_EQ(PlatformVerificationFlow::USER_REJECTED, result_); |
@@ -480,5 +460,12 @@ TEST_F(PlatformVerificationFlowTest, ExpiredCert) { |
EXPECT_EQ(certificate_, fake_certificate_list_[1]); |
} |
+TEST_F(PlatformVerificationFlowTest, IncognitoMode) { |
+ fake_delegate_.set_is_incognito(true); |
+ verifier_->ChallengePlatformKey(NULL, kTestID, kTestChallenge, callback_); |
+ base::RunLoop().RunUntilIdle(); |
+ EXPECT_EQ(PlatformVerificationFlow::PLATFORM_NOT_VERIFIED, result_); |
+} |
+ |
} // namespace attestation |
} // namespace chromeos |