Index: chrome/browser/safe_browsing/incident_reporting/preference_validation_delegate_unittest.cc |
diff --git a/chrome/browser/safe_browsing/incident_reporting/preference_validation_delegate_unittest.cc b/chrome/browser/safe_browsing/incident_reporting/preference_validation_delegate_unittest.cc |
index b701be4ad936b33ee5b1b99b3c44b5528884042e..2cd663590c7b691f22838a224ba29ea1dbce788c 100644 |
--- a/chrome/browser/safe_browsing/incident_reporting/preference_validation_delegate_unittest.cc |
+++ b/chrome/browser/safe_browsing/incident_reporting/preference_validation_delegate_unittest.cc |
@@ -40,6 +40,7 @@ class PreferenceValidationDelegateTest : public testing::Test { |
testing::Test::SetUp(); |
invalid_keys_.push_back(std::string("one")); |
invalid_keys_.push_back(std::string("two")); |
+ external_validation_invalid_keys_.push_back(std::string("three")); |
std::unique_ptr<safe_browsing::MockIncidentReceiver> receiver( |
new NiceMock<safe_browsing::MockIncidentReceiver>()); |
ON_CALL(*receiver, DoAddIncidentForProfile(IsNull(), _)) |
@@ -50,6 +51,7 @@ class PreferenceValidationDelegateTest : public testing::Test { |
static void ExpectValueStatesEquate( |
PrefHashStoreTransaction::ValueState store_state, |
+ PrefHashStoreTransaction::ValueState external_validation_value_state, |
safe_browsing:: |
ClientIncidentReport_IncidentData_TrackedPreferenceIncident_ValueState |
incident_state) { |
@@ -66,7 +68,15 @@ class PreferenceValidationDelegateTest : public testing::Test { |
EXPECT_EQ(TPIncident::UNTRUSTED_UNKNOWN_VALUE, incident_state); |
break; |
default: |
- FAIL() << "unexpected store state"; |
+ if (external_validation_value_state == |
+ PrefHashStoreTransaction::CLEARED) { |
+ EXPECT_EQ(TPIncident::BYPASS_CLEARED, incident_state); |
+ } else if (external_validation_value_state == |
+ PrefHashStoreTransaction::CHANGED) { |
+ EXPECT_EQ(TPIncident::BYPASS_CHANGED, incident_state); |
+ } else { |
+ FAIL() << "unexpected store state"; |
+ } |
break; |
} |
} |
@@ -85,15 +95,15 @@ class PreferenceValidationDelegateTest : public testing::Test { |
std::unique_ptr<base::Value> null_value_; |
base::DictionaryValue dict_value_; |
std::vector<std::string> invalid_keys_; |
+ std::vector<std::string> external_validation_invalid_keys_; |
std::unique_ptr<TrackedPreferenceValidationDelegate> instance_; |
}; |
// Tests that a NULL value results in an incident with no value. |
TEST_F(PreferenceValidationDelegateTest, NullValue) { |
- instance_->OnAtomicPreferenceValidation(kPrefPath_, |
- NULL, |
- PrefHashStoreTransaction::CLEARED, |
- false /* is_personal */); |
+ instance_->OnAtomicPreferenceValidation( |
+ kPrefPath_, NULL, PrefHashStoreTransaction::CLEARED, |
+ PrefHashStoreTransaction::UNSUPPORTED, false /* is_personal */); |
std::unique_ptr<safe_browsing::ClientIncidentReport_IncidentData> incident( |
incidents_.back()->TakePayload()); |
EXPECT_FALSE(incident->tracked_preference().has_atomic_value()); |
@@ -154,10 +164,10 @@ class PreferenceValidationDelegateValues |
}; |
TEST_P(PreferenceValidationDelegateValues, Value) { |
- instance_->OnAtomicPreferenceValidation(kPrefPath_, |
- MakeValue(value_type_).get(), |
- PrefHashStoreTransaction::CLEARED, |
- false /* is_personal */); |
+ instance_->OnAtomicPreferenceValidation( |
+ kPrefPath_, MakeValue(value_type_).get(), |
+ PrefHashStoreTransaction::CLEARED, PrefHashStoreTransaction::UNSUPPORTED, |
+ false /* is_personal */); |
ASSERT_EQ(1U, incidents_.size()); |
std::unique_ptr<safe_browsing::ClientIncidentReport_IncidentData> incident( |
incidents_.back()->TakePayload()); |
@@ -190,60 +200,71 @@ INSTANTIATE_TEST_CASE_P( |
// Tests that no incidents are reported for relevant combinations of ValueState. |
class PreferenceValidationDelegateNoIncident |
: public PreferenceValidationDelegateTest, |
- public testing::WithParamInterface<PrefHashStoreTransaction::ValueState> { |
+ public testing::WithParamInterface< |
+ std::tr1::tuple<PrefHashStoreTransaction::ValueState, |
+ PrefHashStoreTransaction::ValueState>> { |
protected: |
void SetUp() override { |
PreferenceValidationDelegateTest::SetUp(); |
- value_state_ = GetParam(); |
+ value_state_ = std::tr1::get<0>(GetParam()); |
+ external_validation_value_state_ = std::tr1::get<1>(GetParam()); |
} |
PrefHashStoreTransaction::ValueState value_state_; |
+ PrefHashStoreTransaction::ValueState external_validation_value_state_; |
}; |
TEST_P(PreferenceValidationDelegateNoIncident, Atomic) { |
- instance_->OnAtomicPreferenceValidation(kPrefPath_, |
- null_value_.get(), |
- value_state_, |
- false /* is_personal */); |
+ instance_->OnAtomicPreferenceValidation( |
+ kPrefPath_, null_value_.get(), value_state_, |
+ external_validation_value_state_, false /* is_personal */); |
EXPECT_EQ(0U, incidents_.size()); |
} |
TEST_P(PreferenceValidationDelegateNoIncident, Split) { |
- instance_->OnSplitPreferenceValidation(kPrefPath_, |
- &dict_value_, |
- invalid_keys_, |
- value_state_, |
- false /* is_personal */); |
+ instance_->OnSplitPreferenceValidation( |
+ kPrefPath_, &dict_value_, invalid_keys_, |
+ external_validation_invalid_keys_, value_state_, |
+ external_validation_value_state_, false /* is_personal */); |
EXPECT_EQ(0U, incidents_.size()); |
} |
INSTANTIATE_TEST_CASE_P( |
NoIncident, |
PreferenceValidationDelegateNoIncident, |
- testing::Values(PrefHashStoreTransaction::UNCHANGED, |
- PrefHashStoreTransaction::SECURE_LEGACY, |
- PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE)); |
+ testing::Combine( |
+ testing::Values(PrefHashStoreTransaction::UNCHANGED, |
+ PrefHashStoreTransaction::SECURE_LEGACY, |
+ PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE), |
+ testing::Values(PrefHashStoreTransaction::UNCHANGED, |
+ PrefHashStoreTransaction::UNSUPPORTED, |
+ PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE))); |
// Tests that incidents are reported for relevant combinations of ValueState and |
// impersonal/personal. |
class PreferenceValidationDelegateWithIncident |
: public PreferenceValidationDelegateTest, |
public testing::WithParamInterface< |
- std::tr1::tuple<PrefHashStoreTransaction::ValueState, bool>> { |
+ std::tr1::tuple<PrefHashStoreTransaction::ValueState, |
+ PrefHashStoreTransaction::ValueState, |
+ bool>> { |
protected: |
void SetUp() override { |
PreferenceValidationDelegateTest::SetUp(); |
value_state_ = std::tr1::get<0>(GetParam()); |
- is_personal_ = std::tr1::get<1>(GetParam()); |
+ external_validation_value_state_ = std::tr1::get<1>(GetParam()); |
+ is_personal_ = std::tr1::get<2>(GetParam()); |
} |
PrefHashStoreTransaction::ValueState value_state_; |
+ PrefHashStoreTransaction::ValueState external_validation_value_state_; |
bool is_personal_; |
}; |
TEST_P(PreferenceValidationDelegateWithIncident, Atomic) { |
instance_->OnAtomicPreferenceValidation( |
- kPrefPath_, null_value_.get(), value_state_, is_personal_); |
+ kPrefPath_, null_value_.get(), value_state_, |
+ external_validation_value_state_, is_personal_); |
ASSERT_EQ(1U, incidents_.size()); |
std::unique_ptr<safe_browsing::ClientIncidentReport_IncidentData> incident( |
incidents_.back()->TakePayload()); |
@@ -260,12 +281,15 @@ TEST_P(PreferenceValidationDelegateWithIncident, Atomic) { |
EXPECT_FALSE(tp_incident.has_atomic_value()); |
} |
EXPECT_TRUE(tp_incident.has_value_state()); |
- ExpectValueStatesEquate(value_state_, tp_incident.value_state()); |
+ ExpectValueStatesEquate(value_state_, external_validation_value_state_, |
+ tp_incident.value_state()); |
} |
TEST_P(PreferenceValidationDelegateWithIncident, Split) { |
instance_->OnSplitPreferenceValidation( |
- kPrefPath_, &dict_value_, invalid_keys_, value_state_, is_personal_); |
+ kPrefPath_, &dict_value_, invalid_keys_, |
+ external_validation_invalid_keys_, value_state_, |
+ external_validation_value_state_, is_personal_); |
ASSERT_EQ(1U, incidents_.size()); |
std::unique_ptr<safe_browsing::ClientIncidentReport_IncidentData> incident( |
incidents_.back()->TakePayload()); |
@@ -275,12 +299,21 @@ TEST_P(PreferenceValidationDelegateWithIncident, Split) { |
incident->tracked_preference(); |
EXPECT_EQ(kPrefPath_, tp_incident.path()); |
EXPECT_FALSE(tp_incident.has_atomic_value()); |
- if (!is_personal_) |
- ExpectKeysEquate(invalid_keys_, tp_incident.split_key()); |
- else |
+ if (!is_personal_) { |
+ if (value_state_ == PrefHashStoreTransaction::CLEARED || |
+ value_state_ == PrefHashStoreTransaction::CHANGED || |
+ value_state_ == PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE) { |
+ ExpectKeysEquate(invalid_keys_, tp_incident.split_key()); |
+ } else { |
+ ExpectKeysEquate(external_validation_invalid_keys_, |
+ tp_incident.split_key()); |
+ } |
+ } else { |
EXPECT_EQ(0, tp_incident.split_key_size()); |
gab
2016/10/05 19:22:26
Just like this verifies size is zero when not repo
proberge
2016/10/05 19:54:05
I think it already does so implicitly; tp_incident
gab
2016/10/05 20:08:16
Ah, indeed :-), lgtm++
|
+ } |
EXPECT_TRUE(tp_incident.has_value_state()); |
- ExpectValueStatesEquate(value_state_, tp_incident.value_state()); |
+ ExpectValueStatesEquate(value_state_, external_validation_value_state_, |
+ tp_incident.value_state()); |
} |
INSTANTIATE_TEST_CASE_P( |
@@ -290,4 +323,29 @@ INSTANTIATE_TEST_CASE_P( |
testing::Values(PrefHashStoreTransaction::CLEARED, |
PrefHashStoreTransaction::CHANGED, |
PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE), |
+ testing::Values(PrefHashStoreTransaction::UNCHANGED, |
+ PrefHashStoreTransaction::UNSUPPORTED, |
+ PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE), |
+ testing::Bool())); |
+ |
+INSTANTIATE_TEST_CASE_P( |
+ WithBypassIncident, |
+ PreferenceValidationDelegateWithIncident, |
+ testing::Combine( |
+ testing::Values(PrefHashStoreTransaction::UNCHANGED, |
+ PrefHashStoreTransaction::SECURE_LEGACY, |
+ PrefHashStoreTransaction::TRUSTED_UNKNOWN_VALUE), |
+ testing::Values(PrefHashStoreTransaction::CHANGED, |
+ PrefHashStoreTransaction::CLEARED), |
+ testing::Bool())); |
+ |
+INSTANTIATE_TEST_CASE_P( |
+ WithIncidentIgnoreBypass, |
+ PreferenceValidationDelegateWithIncident, |
+ testing::Combine( |
+ testing::Values(PrefHashStoreTransaction::CLEARED, |
+ PrefHashStoreTransaction::CHANGED, |
+ PrefHashStoreTransaction::UNTRUSTED_UNKNOWN_VALUE), |
+ testing::Values(PrefHashStoreTransaction::CHANGED, |
+ PrefHashStoreTransaction::CLEARED), |
testing::Bool())); |