| 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)
|
|
|