| Index: Source/web/tests/WebDocumentTest.cpp
|
| diff --git a/Source/web/tests/WebDocumentTest.cpp b/Source/web/tests/WebDocumentTest.cpp
|
| index c401ea99cf3244d936de0b010be9f33d02df91bf..f24d3fdea5a644c0dc9d80a7c5fb6ad74b6b9449 100644
|
| --- a/Source/web/tests/WebDocumentTest.cpp
|
| +++ b/Source/web/tests/WebDocumentTest.cpp
|
| @@ -13,8 +13,10 @@
|
| #include "core/html/HTMLElement.h"
|
| #include "core/style/ComputedStyle.h"
|
| #include "core/page/Page.h"
|
| +#include "platform/RuntimeEnabledFeatures.h"
|
| #include "platform/graphics/Color.h"
|
| #include "platform/testing/URLTestHelpers.h"
|
| +#include "platform/weborigin/SecurityOrigin.h"
|
| #include "web/tests/FrameTestHelpers.h"
|
| #include <gtest/gtest.h>
|
|
|
| @@ -204,4 +206,200 @@ TEST(WebDocumentTest, SetIsTransitionDocument)
|
| ASSERT_FALSE(coreDoc->isTransitionDocument());
|
| }
|
|
|
| +namespace {
|
| + const char* baseURLOriginA = "http://example.test:0/";
|
| + const char* baseURLOriginB = "http://not-example.test:0/";
|
| + const char* emptyFile = "first_party/empty.html";
|
| + const char* nestedData = "first_party/nested-data.html";
|
| + const char* nestedOriginA = "first_party/nested-originA.html";
|
| + const char* nestedOriginAInOriginA = "first_party/nested-originA-in-originA.html";
|
| + const char* nestedOriginAInOriginB = "first_party/nested-originA-in-originB.html";
|
| + const char* nestedOriginB = "first_party/nested-originB.html";
|
| + const char* nestedOriginBInOriginA = "first_party/nested-originB-in-originA.html";
|
| + const char* nestedOriginBInOriginB = "first_party/nested-originB-in-originB.html";
|
| + const char* nestedSrcDoc = "first_party/nested-srcdoc.html";
|
| +
|
| + static KURL toOriginA(const char* file)
|
| + {
|
| + return toKURL(std::string(baseURLOriginA) + file);
|
| + }
|
| +
|
| + static KURL toOriginB(const char* file)
|
| + {
|
| + return toKURL(std::string(baseURLOriginB) + file);
|
| + }
|
| +}
|
| +
|
| +class WebDocumentFirstPartyTest : public ::testing::Test {
|
| +public:
|
| + static void SetUpTestCase();
|
| +
|
| +protected:
|
| + void load(const char*);
|
| + Document* topDocument() const;
|
| + Document* nestedDocument() const;
|
| + Document* nestedNestedDocument() const;
|
| +
|
| + WebViewHelper m_webViewHelper;
|
| +};
|
| +
|
| +void WebDocumentFirstPartyTest::SetUpTestCase()
|
| +{
|
| + URLTestHelpers::registerMockedURLLoad(toOriginA(emptyFile), WebString::fromUTF8(emptyFile));
|
| + URLTestHelpers::registerMockedURLLoad(toOriginA(nestedData), WebString::fromUTF8(nestedData));
|
| + URLTestHelpers::registerMockedURLLoad(toOriginA(nestedOriginA), WebString::fromUTF8(nestedOriginA));
|
| + URLTestHelpers::registerMockedURLLoad(toOriginA(nestedOriginAInOriginA), WebString::fromUTF8(nestedOriginAInOriginA));
|
| + URLTestHelpers::registerMockedURLLoad(toOriginA(nestedOriginAInOriginB), WebString::fromUTF8(nestedOriginAInOriginB));
|
| + URLTestHelpers::registerMockedURLLoad(toOriginA(nestedOriginB), WebString::fromUTF8(nestedOriginB));
|
| + URLTestHelpers::registerMockedURLLoad(toOriginA(nestedOriginBInOriginA), WebString::fromUTF8(nestedOriginBInOriginA));
|
| + URLTestHelpers::registerMockedURLLoad(toOriginA(nestedOriginBInOriginB), WebString::fromUTF8(nestedOriginBInOriginB));
|
| + URLTestHelpers::registerMockedURLLoad(toOriginA(nestedSrcDoc), WebString::fromUTF8(nestedSrcDoc));
|
| +
|
| + URLTestHelpers::registerMockedURLLoad(toOriginB(emptyFile), WebString::fromUTF8(emptyFile));
|
| + URLTestHelpers::registerMockedURLLoad(toOriginB(nestedOriginA), WebString::fromUTF8(nestedOriginA));
|
| + URLTestHelpers::registerMockedURLLoad(toOriginB(nestedOriginB), WebString::fromUTF8(nestedOriginB));
|
| +}
|
| +
|
| +void WebDocumentFirstPartyTest::load(const char* file)
|
| +{
|
| + m_webViewHelper.initializeAndLoad(std::string(baseURLOriginA) + file);
|
| +}
|
| +
|
| +Document* WebDocumentFirstPartyTest::topDocument() const
|
| +{
|
| + return toLocalFrame(m_webViewHelper.webViewImpl()->page()->mainFrame())->document();
|
| +}
|
| +
|
| +Document* WebDocumentFirstPartyTest::nestedDocument() const
|
| +{
|
| + return toLocalFrame(m_webViewHelper.webViewImpl()->page()->mainFrame()->tree().firstChild())->document();
|
| +}
|
| +
|
| +Document* WebDocumentFirstPartyTest::nestedNestedDocument() const
|
| +{
|
| + return toLocalFrame(m_webViewHelper.webViewImpl()->page()->mainFrame()->tree().firstChild()->tree().firstChild())->document();
|
| +}
|
| +
|
| +TEST_F(WebDocumentFirstPartyTest, Empty)
|
| +{
|
| + load(emptyFile);
|
| +
|
| + RuntimeEnabledFeatures::setFirstPartyIncludesAncestorsEnabled(false);
|
| + ASSERT_EQ(toOriginA(emptyFile), topDocument()->firstPartyForCookies());
|
| +
|
| + RuntimeEnabledFeatures::setFirstPartyIncludesAncestorsEnabled(true);
|
| + ASSERT_EQ(toOriginA(emptyFile), topDocument()->firstPartyForCookies());
|
| +}
|
| +
|
| +TEST_F(WebDocumentFirstPartyTest, NestedOriginA)
|
| +{
|
| + load(nestedOriginA);
|
| +
|
| + RuntimeEnabledFeatures::setFirstPartyIncludesAncestorsEnabled(false);
|
| + ASSERT_EQ(toOriginA(nestedOriginA), topDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(toOriginA(nestedOriginA), nestedDocument()->firstPartyForCookies());
|
| +
|
| + RuntimeEnabledFeatures::setFirstPartyIncludesAncestorsEnabled(true);
|
| + ASSERT_EQ(toOriginA(nestedOriginA), topDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(toOriginA(nestedOriginA), nestedDocument()->firstPartyForCookies());
|
| +}
|
| +
|
| +TEST_F(WebDocumentFirstPartyTest, NestedOriginAInOriginA)
|
| +{
|
| + load(nestedOriginAInOriginA);
|
| +
|
| + RuntimeEnabledFeatures::setFirstPartyIncludesAncestorsEnabled(false);
|
| + ASSERT_EQ(toOriginA(nestedOriginAInOriginA), topDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(toOriginA(nestedOriginAInOriginA), nestedDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(toOriginA(nestedOriginAInOriginA), nestedNestedDocument()->firstPartyForCookies());
|
| +
|
| + RuntimeEnabledFeatures::setFirstPartyIncludesAncestorsEnabled(true);
|
| + ASSERT_EQ(toOriginA(nestedOriginAInOriginA), topDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(toOriginA(nestedOriginAInOriginA), nestedDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(toOriginA(nestedOriginAInOriginA), nestedNestedDocument()->firstPartyForCookies());
|
| +}
|
| +
|
| +TEST_F(WebDocumentFirstPartyTest, NestedOriginAInOriginB)
|
| +{
|
| + load(nestedOriginAInOriginB);
|
| +
|
| + RuntimeEnabledFeatures::setFirstPartyIncludesAncestorsEnabled(false);
|
| + ASSERT_EQ(toOriginA(nestedOriginAInOriginB), topDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(toOriginA(nestedOriginAInOriginB), nestedDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(toOriginA(nestedOriginAInOriginB), nestedNestedDocument()->firstPartyForCookies());
|
| +
|
| + RuntimeEnabledFeatures::setFirstPartyIncludesAncestorsEnabled(true);
|
| + ASSERT_EQ(toOriginA(nestedOriginAInOriginB), topDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(SecurityOrigin::urlWithUniqueSecurityOrigin(), nestedDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(SecurityOrigin::urlWithUniqueSecurityOrigin(), nestedNestedDocument()->firstPartyForCookies());
|
| +}
|
| +
|
| +TEST_F(WebDocumentFirstPartyTest, NestedOriginB)
|
| +{
|
| + load(nestedOriginB);
|
| +
|
| + RuntimeEnabledFeatures::setFirstPartyIncludesAncestorsEnabled(false);
|
| + ASSERT_EQ(toOriginA(nestedOriginB), topDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(toOriginA(nestedOriginB), nestedDocument()->firstPartyForCookies());
|
| +
|
| + RuntimeEnabledFeatures::setFirstPartyIncludesAncestorsEnabled(true);
|
| + ASSERT_EQ(toOriginA(nestedOriginB), topDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(SecurityOrigin::urlWithUniqueSecurityOrigin(), nestedDocument()->firstPartyForCookies());
|
| +}
|
| +
|
| +TEST_F(WebDocumentFirstPartyTest, NestedOriginBInOriginA)
|
| +{
|
| + load(nestedOriginBInOriginA);
|
| +
|
| + RuntimeEnabledFeatures::setFirstPartyIncludesAncestorsEnabled(false);
|
| + ASSERT_EQ(toOriginA(nestedOriginBInOriginA), topDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(toOriginA(nestedOriginBInOriginA), nestedDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(toOriginA(nestedOriginBInOriginA), nestedNestedDocument()->firstPartyForCookies());
|
| +
|
| + RuntimeEnabledFeatures::setFirstPartyIncludesAncestorsEnabled(true);
|
| + ASSERT_EQ(toOriginA(nestedOriginBInOriginA), topDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(toOriginA(nestedOriginBInOriginA), nestedDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(SecurityOrigin::urlWithUniqueSecurityOrigin(), nestedNestedDocument()->firstPartyForCookies());
|
| +}
|
| +
|
| +TEST_F(WebDocumentFirstPartyTest, NestedOriginBInOriginB)
|
| +{
|
| + load(nestedOriginBInOriginB);
|
| +
|
| + RuntimeEnabledFeatures::setFirstPartyIncludesAncestorsEnabled(false);
|
| + ASSERT_EQ(toOriginA(nestedOriginBInOriginB), topDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(toOriginA(nestedOriginBInOriginB), nestedDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(toOriginA(nestedOriginBInOriginB), nestedNestedDocument()->firstPartyForCookies());
|
| +
|
| + RuntimeEnabledFeatures::setFirstPartyIncludesAncestorsEnabled(true);
|
| + ASSERT_EQ(toOriginA(nestedOriginBInOriginB), topDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(SecurityOrigin::urlWithUniqueSecurityOrigin(), nestedDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(SecurityOrigin::urlWithUniqueSecurityOrigin(), nestedNestedDocument()->firstPartyForCookies());
|
| +}
|
| +
|
| +TEST_F(WebDocumentFirstPartyTest, NestedSrcdoc)
|
| +{
|
| + load(nestedSrcDoc);
|
| +
|
| + RuntimeEnabledFeatures::setFirstPartyIncludesAncestorsEnabled(false);
|
| + ASSERT_EQ(toOriginA(nestedSrcDoc), topDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(toOriginA(nestedSrcDoc), nestedDocument()->firstPartyForCookies());
|
| +
|
| + RuntimeEnabledFeatures::setFirstPartyIncludesAncestorsEnabled(true);
|
| + ASSERT_EQ(toOriginA(nestedSrcDoc), topDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(toOriginA(nestedSrcDoc), nestedDocument()->firstPartyForCookies());
|
| +}
|
| +
|
| +TEST_F(WebDocumentFirstPartyTest, NestedData)
|
| +{
|
| + load(nestedData);
|
| +
|
| + RuntimeEnabledFeatures::setFirstPartyIncludesAncestorsEnabled(false);
|
| + ASSERT_EQ(toOriginA(nestedData), topDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(toOriginA(nestedData), nestedDocument()->firstPartyForCookies());
|
| +
|
| + RuntimeEnabledFeatures::setFirstPartyIncludesAncestorsEnabled(true);
|
| + ASSERT_EQ(toOriginA(nestedData), topDocument()->firstPartyForCookies());
|
| + ASSERT_EQ(SecurityOrigin::urlWithUniqueSecurityOrigin(), nestedDocument()->firstPartyForCookies());
|
| +}
|
| }
|
|
|