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

Unified Diff: third_party/WebKit/Source/core/origin_trials/OriginTrialContextTest.cpp

Issue 2123323004: Simplify OriginTrialContext and the way it validates tokens. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: mark enum as obsolete Created 4 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/origin_trials/OriginTrialContextTest.cpp
diff --git a/third_party/WebKit/Source/core/origin_trials/OriginTrialContextTest.cpp b/third_party/WebKit/Source/core/origin_trials/OriginTrialContextTest.cpp
index 5d3701633029aa171c6c420cbed2c13a05ab96b4..16972e0fa5345abca5d398ee18e25f9428332448 100644
--- a/third_party/WebKit/Source/core/origin_trials/OriginTrialContextTest.cpp
+++ b/third_party/WebKit/Source/core/origin_trials/OriginTrialContextTest.cpp
@@ -31,12 +31,7 @@ const char kFrobulateEnabledOrigin[] = "https://www.example.com";
const char kFrobulateEnabledOriginUnsecure[] = "http://www.example.com";
// Names of UMA histograms
-const char kEnabledHistogram[] = "OriginTrials.FeatureEnabled";
-const char kMessageHistogram[] = "OriginTrials.FeatureEnabled.MessageGenerated";
-
-// Values for message generated histogram
-const int kMessageHistogramValueNotRequested = 0;
-const int kMessageHistogramValueYes = 1;
+const char kResultHistogram[] = "OriginTrials.ValidationResult";
// Trial token placeholder for mocked calls to validator
const char kTokenPlaceholder[] = "The token contents are not used";
@@ -51,16 +46,18 @@ public:
~MockTokenValidator() override {}
// blink::WebTrialTokenValidator implementation
- WebOriginTrialTokenStatus validateToken(const blink::WebString& token, const blink::WebSecurityOrigin& origin, const blink::WebString& featureName) override
+ WebOriginTrialTokenStatus validateToken(const WebString& token, const WebSecurityOrigin& origin, WebString* featureName) override
{
m_callCount++;
+ *featureName = m_feature;
return m_response;
}
// Useful methods for controlling the validator
- void setResponse(WebOriginTrialTokenStatus response)
+ void setResponse(WebOriginTrialTokenStatus response, const WebString& feature)
{
m_response = response;
+ m_feature = feature;
}
int callCount()
{
@@ -69,6 +66,7 @@ public:
private:
WebOriginTrialTokenStatus m_response;
+ WebString m_feature;
int m_callCount;
DISALLOW_COPY_AND_ASSIGN(MockTokenValidator);
@@ -103,39 +101,23 @@ protected:
m_executionContext->setIsSecureContext(SecurityOrigin::isSecure(pageURL));
}
- bool isFeatureEnabled(const String& origin, const String& featureName, String* errorMessage)
+ bool isFeatureEnabled(const String& origin, const String& featureName)
{
updateSecurityOrigin(origin);
// Need at least one token to ensure the token validator is called.
m_originTrialContext->addToken(kTokenPlaceholder);
- return m_originTrialContext->isFeatureEnabled(featureName, errorMessage);
+ return m_originTrialContext->isFeatureEnabled(featureName);
}
- bool isFeatureEnabledWithoutErrorMessage(const String& origin, const String& featureName)
- {
- return isFeatureEnabled(origin, featureName, nullptr);
- }
-
- void expectEnabledUniqueMetric(WebOriginTrialTokenStatus status, int count)
+ void expectStatusUniqueMetric(WebOriginTrialTokenStatus status, int count)
{
m_histogramTester->expectUniqueSample(
- kEnabledHistogram, static_cast<int>(status), count);
- }
-
- void expectEnabledTotalMetric(int total)
- {
- m_histogramTester->expectTotalCount(kEnabledHistogram, total);
+ kResultHistogram, static_cast<int>(status), count);
}
- void expectMessageUniqueMetric(int messageGeneratedValue, int count)
+ void expecStatusTotalMetric(int total)
{
- m_histogramTester->expectUniqueSample(
- kMessageHistogram, messageGeneratedValue, count);
- }
-
- void expectMessageTotalMetric(int total)
- {
- m_histogramTester->expectTotalCount(kMessageHistogram, total);
+ m_histogramTester->expectTotalCount(kResultHistogram, total);
}
private:
@@ -148,139 +130,52 @@ private:
TEST_F(OriginTrialContextTest, EnabledNonExistingFeature)
{
- String errorMessage;
- tokenValidator()->setResponse(WebOriginTrialTokenStatus::WrongFeature);
+ tokenValidator()->setResponse(WebOriginTrialTokenStatus::Success, kFrobulateFeatureName);
bool isNonExistingFeatureEnabled = isFeatureEnabled(kFrobulateEnabledOrigin,
- kNonExistingFeatureName,
- &errorMessage);
- EXPECT_FALSE(isNonExistingFeatureEnabled);
- EXPECT_EQ(("The provided token(s) are not valid for the 'This feature does not exist' feature."), errorMessage);
-}
-
-TEST_F(OriginTrialContextTest, EnabledNonExistingFeatureWithoutErrorMessage)
-{
- bool isNonExistingFeatureEnabled = isFeatureEnabledWithoutErrorMessage(
- kFrobulateEnabledOrigin,
kNonExistingFeatureName);
EXPECT_FALSE(isNonExistingFeatureEnabled);
+
+ // Status metric should be updated.
+ expectStatusUniqueMetric(WebOriginTrialTokenStatus::Success, 1);
}
// The feature should be enabled if a valid token for the origin is provided
TEST_F(OriginTrialContextTest, EnabledSecureRegisteredOrigin)
{
- String errorMessage;
- tokenValidator()->setResponse(WebOriginTrialTokenStatus::Success);
+ tokenValidator()->setResponse(WebOriginTrialTokenStatus::Success, kFrobulateFeatureName);
bool isOriginEnabled = isFeatureEnabled(kFrobulateEnabledOrigin,
- kFrobulateFeatureName,
- &errorMessage);
+ kFrobulateFeatureName);
EXPECT_TRUE(isOriginEnabled);
- EXPECT_TRUE(errorMessage.isEmpty()) << "Message should be empty, was: " << errorMessage;
EXPECT_EQ(1, tokenValidator()->callCount());
- // Enabled metric should be updated, but the message generated metric
- // should not be updated on success.
- expectEnabledUniqueMetric(WebOriginTrialTokenStatus::Success, 1);
- expectMessageTotalMetric(0);
+ // Status metric should be updated.
+ expectStatusUniqueMetric(WebOriginTrialTokenStatus::Success, 1);
}
// ... but if the browser says it's invalid for any reason, that's enough to
// reject.
TEST_F(OriginTrialContextTest, InvalidTokenResponseFromPlatform)
{
- String errorMessage;
- tokenValidator()->setResponse(WebOriginTrialTokenStatus::Malformed);
+ tokenValidator()->setResponse(WebOriginTrialTokenStatus::Malformed, kFrobulateFeatureName);
bool isOriginEnabled = isFeatureEnabled(kFrobulateEnabledOrigin,
- kFrobulateFeatureName,
- &errorMessage);
+ kFrobulateFeatureName);
EXPECT_FALSE(isOriginEnabled);
- EXPECT_EQ(("The provided token(s) are not valid for the 'Frobulate' feature."), errorMessage);
EXPECT_EQ(1, tokenValidator()->callCount());
- // Enabled and message generated metrics should be updated
- expectEnabledUniqueMetric(WebOriginTrialTokenStatus::Malformed, 1);
- expectMessageUniqueMetric(kMessageHistogramValueYes, 1);
-}
-
-TEST_F(OriginTrialContextTest, OnlyOneErrorMessageGenerated)
-{
- String errorMessage1;
- String errorMessage2;
- tokenValidator()->setResponse(WebOriginTrialTokenStatus::NotSupported);
- isFeatureEnabled(kFrobulateEnabledOrigin, kFrobulateFeatureName, &errorMessage1);
-
- // After the first call, should be one sample recorded for both the enabled
- // and message generated metrics
- expectMessageUniqueMetric(kMessageHistogramValueYes, 1);
- expectEnabledUniqueMetric(WebOriginTrialTokenStatus::NotSupported, 1);
-
- isFeatureEnabled(kFrobulateEnabledOrigin, kFrobulateFeatureName, &errorMessage2);
- EXPECT_FALSE(errorMessage1.isEmpty());
- EXPECT_TRUE(errorMessage2.isEmpty());
-
- // Should only be one sample recorded for the enabled metric, but two
- // samples for message generation.
- expectEnabledTotalMetric(1);
- expectMessageTotalMetric(2);
-}
-
-TEST_F(OriginTrialContextTest, ErrorMessageClearedIfStringReused)
-{
- String errorMessage;
- tokenValidator()->setResponse(WebOriginTrialTokenStatus::NotSupported);
- isFeatureEnabled(kFrobulateEnabledOrigin, kFrobulateFeatureName, &errorMessage);
- EXPECT_FALSE(errorMessage.isEmpty());
- isFeatureEnabled(kFrobulateEnabledOrigin, kFrobulateFeatureName, &errorMessage);
- EXPECT_TRUE(errorMessage.isEmpty());
-}
-
-TEST_F(OriginTrialContextTest, ErrorMessageGeneratedPerFeature)
-{
- String errorMessage1;
- String errorMessage2;
- tokenValidator()->setResponse(WebOriginTrialTokenStatus::NotSupported);
- isFeatureEnabled(kFrobulateEnabledOrigin, kFrobulateFeatureName, &errorMessage1);
- isFeatureEnabled(kFrobulateEnabledOrigin, kNonExistingFeatureName, &errorMessage2);
- EXPECT_FALSE(errorMessage1.isEmpty());
- EXPECT_FALSE(errorMessage2.isEmpty());
-
- // Enabled and message generated metrics should have same number of samples
- // as different features used for each call.
- expectEnabledUniqueMetric(WebOriginTrialTokenStatus::NotSupported, 2);
- expectMessageUniqueMetric(kMessageHistogramValueYes, 2);
+ // Status metric should be updated.
+ expectStatusUniqueMetric(WebOriginTrialTokenStatus::Malformed, 1);
}
-TEST_F(OriginTrialContextTest, EnabledSecureRegisteredOriginWithoutErrorMessage)
-{
- tokenValidator()->setResponse(WebOriginTrialTokenStatus::Success);
- bool isOriginEnabled = isFeatureEnabledWithoutErrorMessage(
- kFrobulateEnabledOrigin,
- kFrobulateFeatureName);
- EXPECT_TRUE(isOriginEnabled);
- EXPECT_EQ(1, tokenValidator()->callCount());
-}
-
-// The feature should not be enabled if the origin is unsecure, even if a valid
+// The feature should not be enabled if the origin is insecure, even if a valid
// token for the origin is provided
TEST_F(OriginTrialContextTest, EnabledNonSecureRegisteredOrigin)
{
- String errorMessage;
+ tokenValidator()->setResponse(WebOriginTrialTokenStatus::Success, kFrobulateFeatureName);
bool isOriginEnabled = isFeatureEnabled(kFrobulateEnabledOriginUnsecure,
- kFrobulateFeatureName,
- &errorMessage);
- EXPECT_FALSE(isOriginEnabled);
- EXPECT_EQ(0, tokenValidator()->callCount());
- EXPECT_FALSE(errorMessage.isEmpty());
- expectEnabledUniqueMetric(WebOriginTrialTokenStatus::Insecure, 1);
-}
-
-TEST_F(OriginTrialContextTest, EnabledNonSecureRegisteredOriginWithoutErrorMessage)
-{
- bool isOriginEnabled = isFeatureEnabledWithoutErrorMessage(
- kFrobulateEnabledOriginUnsecure,
kFrobulateFeatureName);
EXPECT_FALSE(isOriginEnabled);
EXPECT_EQ(0, tokenValidator()->callCount());
- expectMessageUniqueMetric(kMessageHistogramValueNotRequested, 1);
+ expectStatusUniqueMetric(WebOriginTrialTokenStatus::Insecure, 1);
}
TEST_F(OriginTrialContextTest, ParseHeaderValue)

Powered by Google App Engine
This is Rietveld 408576698