Chromium Code Reviews| 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 25c886569435136ce333cc7018bb7ad8228f08cd..5956ae8efc3f7def97aa83e4e91998d14b51ac1a 100644 |
| --- a/third_party/WebKit/Source/core/origin_trials/OriginTrialContextTest.cpp |
| +++ b/third_party/WebKit/Source/core/origin_trials/OriginTrialContextTest.cpp |
| @@ -12,10 +12,12 @@ |
| #include "core/html/HTMLHeadElement.h" |
| #include "core/html/HTMLMetaElement.h" |
| #include "core/testing/DummyPageHolder.h" |
| +#include "core/testing/NullExecutionContext.h" |
| #include "platform/weborigin/KURL.h" |
| #include "platform/weborigin/SecurityOrigin.h" |
| #include "public/platform/WebTrialTokenValidator.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| +#include "wtf/Vector.h" |
| namespace blink { |
| namespace { |
| @@ -66,75 +68,70 @@ private: |
| DISALLOW_COPY_AND_ASSIGN(MockTokenValidator); |
| }; |
| -} // namespace |
| - |
| -class OriginTrialContextTest : public ::testing::Test { |
| -protected: |
| - OriginTrialContextTest() |
| - : m_page(DummyPageHolder::create()) |
| - , m_frameworkWasEnabled(RuntimeEnabledFeatures::experimentalFrameworkEnabled()) |
| - , m_tokenValidator(adoptPtr(new MockTokenValidator())) |
| +// Concrete subclass of OriginTrialContext which simply maintains a vector of |
| +// token strings to use for tests. |
| +class TestOriginTrialContext : public OriginTrialContext { |
| +public: |
| + explicit TestOriginTrialContext() |
| + : m_parent(adoptRefWillBeNoop(new NullExecutionContext())) |
| { |
| - if (!RuntimeEnabledFeatures::experimentalFrameworkEnabled()) { |
| - RuntimeEnabledFeatures::setExperimentalFrameworkEnabled(true); |
| - } |
| } |
| - ~OriginTrialContextTest() |
| - { |
| - if (!m_frameworkWasEnabled) { |
| - RuntimeEnabledFeatures::setExperimentalFrameworkEnabled(false); |
| - } |
| + ~TestOriginTrialContext() override = default; |
| - m_page.clear(); |
| - } |
| + ExecutionContext* executionContext() override { return m_parent.get(); } |
| - void SetUp() override |
| + void addToken(const String& token) |
| { |
| - m_document = toHTMLDocument(&m_page->document()); |
| - setInnerHTML( |
| - "<html>" |
| - "<head>" |
| - "</head>" |
| - "<body>" |
| - "</body>" |
| - "</html>"); |
| + m_tokens.append(token); |
| } |
| - ExecutionContext* executionContext() { return &(m_page->document()); } |
| - MockTokenValidator* tokenValidator() { return m_tokenValidator.get(); } |
| - HTMLDocument& document() const { return *m_document; } |
| - |
| - void setPageOrigin(const String& origin) |
| + void updateSecurityOrigin(const String& origin) |
| { |
| KURL pageURL(ParsedURLString, origin); |
| RefPtr<SecurityOrigin> pageOrigin = SecurityOrigin::create(pageURL); |
| - m_page->document().updateSecurityOrigin(pageOrigin); |
| + m_parent->setSecurityOrigin(pageOrigin); |
| + m_parent->setIsSecureContext(SecurityOrigin::isSecure(pageURL)); |
| } |
| - void setInnerHTML(const char* htmlContent) |
| + Vector<String> getTokens() override |
| + { |
| + Vector<String> tokens; |
| + for (String token : m_tokens) { |
| + tokens.append(token); |
| + } |
| + return tokens; |
| + } |
| + |
| +private: |
| + RefPtrWillBePersistent<NullExecutionContext> m_parent; |
| + Vector<String> m_tokens; |
| +}; |
| + |
| +} // namespace |
| + |
| +class OriginTrialContextTest : public ::testing::Test { |
| +protected: |
| + OriginTrialContextTest() |
| + : m_frameworkWasEnabled(RuntimeEnabledFeatures::experimentalFrameworkEnabled()) |
| + , m_tokenValidator(adoptPtr(new MockTokenValidator())) |
| + , m_originTrialContext(adoptPtr(new TestOriginTrialContext)) |
| { |
| - document().documentElement()->setInnerHTML(String::fromUTF8(htmlContent), ASSERT_NO_EXCEPTION); |
| - document().view()->updateAllLifecyclePhases(); |
| + RuntimeEnabledFeatures::setExperimentalFrameworkEnabled(true); |
| } |
| - void addTrialToken(const String& token) |
| + ~OriginTrialContextTest() |
| { |
| - HTMLElement* head = document().head(); |
| - ASSERT_TRUE(head); |
| - |
| - RefPtrWillBeRawPtr<HTMLMetaElement> meta = HTMLMetaElement::create(document()); |
| - meta->setAttribute(HTMLNames::nameAttr, "origin-trials"); |
| - AtomicString value(token); |
| - meta->setAttribute(HTMLNames::contentAttr, value); |
| - head->appendChild(meta.release()); |
| + RuntimeEnabledFeatures::setExperimentalFrameworkEnabled(m_frameworkWasEnabled); |
| } |
| + MockTokenValidator* tokenValidator() { return m_tokenValidator.get(); } |
| + |
| bool isFeatureEnabled(const String& origin, const String& featureName, const String& token, String* errorMessage) |
| { |
| - setPageOrigin(origin); |
| - addTrialToken(token); |
| - return OriginTrialContext::isFeatureEnabled(executionContext(), featureName, errorMessage, tokenValidator()); |
| + m_originTrialContext->updateSecurityOrigin(origin); |
| + m_originTrialContext->addToken(token); |
| + return m_originTrialContext->isFeatureEnabled(featureName, errorMessage, tokenValidator()); |
| } |
| bool isFeatureEnabledWithoutErrorMessage(const String& origin, const String& featureName, const char* token) |
| @@ -143,10 +140,9 @@ protected: |
| } |
| private: |
| - OwnPtr<DummyPageHolder> m_page; |
| - RefPtrWillBePersistent<HTMLDocument> m_document; |
| const bool m_frameworkWasEnabled; |
| OwnPtr<MockTokenValidator> m_tokenValidator; |
| + OwnPtr<TestOriginTrialContext> m_originTrialContext; |
| }; |
| TEST_F(OriginTrialContextTest, EnabledNonExistingFeature) |
| @@ -219,7 +215,17 @@ TEST_F(OriginTrialContextTest, EnabledNonSecureRegisteredOrigin) |
| kGoodToken, |
| &errorMessage); |
| EXPECT_FALSE(isOriginEnabled); |
| - EXPECT_TRUE(errorMessage.contains("secure origin")) << "Message should indicate only secure origins are allowed, was: " << errorMessage; |
| + EXPECT_EQ(0, tokenValidator()->callCount()); |
| + EXPECT_FALSE(errorMessage.isEmpty()); |
| +} |
| + |
| +TEST_F(OriginTrialContextTest, EnabledNonSecureRegisteredOriginWithoutErrorMessage) |
| +{ |
| + bool isOriginEnabled = isFeatureEnabledWithoutErrorMessage( |
| + kFrobulateEnabledOriginUnsecure, |
| + kFrobulateFeatureName, |
| + kGoodToken); |
| + EXPECT_FALSE(isOriginEnabled); |
| EXPECT_EQ(0, tokenValidator()->callCount()); |
|
jbroman
2016/03/01 23:29:21
Not added in this CL (so I won't make you change i
iclelland
2016/03/03 21:47:01
Ack. I'll look at refactoring the tests in a diffe
|
| } |