| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2015, Google Inc. All rights reserved. | 2 * Copyright (c) 2015, Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 30 matching lines...) Expand all Loading... |
| 41 #include "core/html/HTMLIFrameElement.h" | 41 #include "core/html/HTMLIFrameElement.h" |
| 42 #include "core/loader/DocumentLoader.h" | 42 #include "core/loader/DocumentLoader.h" |
| 43 #include "core/loader/EmptyClients.h" | 43 #include "core/loader/EmptyClients.h" |
| 44 #include "core/page/Page.h" | 44 #include "core/page/Page.h" |
| 45 #include "core/testing/DummyPageHolder.h" | 45 #include "core/testing/DummyPageHolder.h" |
| 46 #include "platform/network/ResourceRequest.h" | 46 #include "platform/network/ResourceRequest.h" |
| 47 #include "platform/weborigin/KURL.h" | 47 #include "platform/weborigin/KURL.h" |
| 48 #include "public/platform/WebAddressSpace.h" | 48 #include "public/platform/WebAddressSpace.h" |
| 49 #include "public/platform/WebCachePolicy.h" | 49 #include "public/platform/WebCachePolicy.h" |
| 50 #include "public/platform/WebInsecureRequestPolicy.h" | 50 #include "public/platform/WebInsecureRequestPolicy.h" |
| 51 #include "testing/gmock/include/gmock/gmock-generated-function-mockers.h" | 51 #include "testing/gmock/include/gmock/gmock.h" |
| 52 #include "testing/gtest/include/gtest/gtest.h" | 52 #include "testing/gtest/include/gtest/gtest.h" |
| 53 #include <memory> | 53 #include <memory> |
| 54 | 54 |
| 55 namespace blink { | 55 namespace blink { |
| 56 | 56 |
| 57 class StubFrameLoaderClientWithParent final : public EmptyFrameLoaderClient { | 57 class StubFrameLoaderClientWithParent final : public EmptyFrameLoaderClient { |
| 58 public: | 58 public: |
| 59 static StubFrameLoaderClientWithParent* create(Frame* parent) { | 59 static StubFrameLoaderClientWithParent* create(Frame* parent) { |
| 60 return new StubFrameLoaderClientWithParent(parent); | 60 return new StubFrameLoaderClientWithParent(parent); |
| 61 } | 61 } |
| 62 | 62 |
| 63 DEFINE_INLINE_VIRTUAL_TRACE() { | 63 DEFINE_INLINE_VIRTUAL_TRACE() { |
| 64 visitor->trace(m_parent); | 64 visitor->trace(m_parent); |
| 65 EmptyFrameLoaderClient::trace(visitor); | 65 EmptyFrameLoaderClient::trace(visitor); |
| 66 } | 66 } |
| 67 | 67 |
| 68 Frame* parent() const override { return m_parent.get(); } | 68 Frame* parent() const override { return m_parent.get(); } |
| 69 | 69 |
| 70 private: | 70 private: |
| 71 explicit StubFrameLoaderClientWithParent(Frame* parent) : m_parent(parent) {} | 71 explicit StubFrameLoaderClientWithParent(Frame* parent) : m_parent(parent) {} |
| 72 | 72 |
| 73 Member<Frame> m_parent; | 73 Member<Frame> m_parent; |
| 74 }; | 74 }; |
| 75 | 75 |
| 76 class MockFrameLoaderClient : public EmptyFrameLoaderClient { | 76 class MockFrameLoaderClient : public EmptyFrameLoaderClient { |
| 77 public: | 77 public: |
| 78 MockFrameLoaderClient() : EmptyFrameLoaderClient() {} | 78 MockFrameLoaderClient() : EmptyFrameLoaderClient() {} |
| 79 MOCK_METHOD1(didDisplayContentWithCertificateErrors, void(const KURL&)); | 79 MOCK_METHOD1(didDisplayContentWithCertificateErrors, void(const KURL&)); |
| 80 MOCK_METHOD2(dispatchDidLoadResourceFromMemoryCache, |
| 81 void(const ResourceRequest&, const ResourceResponse&)); |
| 80 }; | 82 }; |
| 81 | 83 |
| 82 class FrameFetchContextTest : public ::testing::Test { | 84 class FrameFetchContextTest : public ::testing::Test { |
| 83 protected: | 85 protected: |
| 84 void SetUp() override { | 86 void SetUp() override { |
| 85 dummyPageHolder = DummyPageHolder::create(IntSize(500, 500)); | 87 dummyPageHolder = DummyPageHolder::create(IntSize(500, 500)); |
| 86 dummyPageHolder->page().setDeviceScaleFactor(1.0); | 88 dummyPageHolder->page().setDeviceScaleFactor(1.0); |
| 87 documentLoader = DocumentLoader::create( | 89 documentLoader = DocumentLoader::create( |
| 88 &dummyPageHolder->frame(), ResourceRequest("http://www.example.com"), | 90 &dummyPageHolder->frame(), ResourceRequest("http://www.example.com"), |
| 89 SubstituteData(), ClientRedirectPolicy::NotClientRedirect); | 91 SubstituteData(), ClientRedirectPolicy::NotClientRedirect); |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 Persistent<Document> document; | 132 Persistent<Document> document; |
| 131 Persistent<FrameFetchContext> fetchContext; | 133 Persistent<FrameFetchContext> fetchContext; |
| 132 | 134 |
| 133 Persistent<StubFrameLoaderClientWithParent> childClient; | 135 Persistent<StubFrameLoaderClientWithParent> childClient; |
| 134 Persistent<LocalFrame> childFrame; | 136 Persistent<LocalFrame> childFrame; |
| 135 Persistent<DocumentLoader> childDocumentLoader; | 137 Persistent<DocumentLoader> childDocumentLoader; |
| 136 Persistent<Document> childDocument; | 138 Persistent<Document> childDocument; |
| 137 Persistent<DummyFrameOwner> owner; | 139 Persistent<DummyFrameOwner> owner; |
| 138 }; | 140 }; |
| 139 | 141 |
| 140 // This test class sets up a mock frame loader client that expects a call to | 142 // This test class sets up a mock frame loader client. |
| 141 // didDisplayContentWithCertificateErrors(). | 143 class FrameFetchContextMockedFrameLoaderClientTest |
| 142 class FrameFetchContextDisplayedCertificateErrorsTest | |
| 143 : public FrameFetchContextTest { | 144 : public FrameFetchContextTest { |
| 144 protected: | 145 protected: |
| 145 void SetUp() override { | 146 void SetUp() override { |
| 146 url = KURL(KURL(), "https://example.test/foo"); | 147 url = KURL(KURL(), "https://example.test/foo"); |
| 147 mainResourceUrl = KURL(KURL(), "https://www.example.test"); | 148 mainResourceUrl = KURL(KURL(), "https://www.example.test"); |
| 148 MockFrameLoaderClient* client = new MockFrameLoaderClient; | 149 client = new testing::NiceMock<MockFrameLoaderClient>(); |
| 149 EXPECT_CALL(*client, didDisplayContentWithCertificateErrors(url)); | |
| 150 dummyPageHolder = | 150 dummyPageHolder = |
| 151 DummyPageHolder::create(IntSize(500, 500), nullptr, client); | 151 DummyPageHolder::create(IntSize(500, 500), nullptr, client); |
| 152 dummyPageHolder->page().setDeviceScaleFactor(1.0); | 152 dummyPageHolder->page().setDeviceScaleFactor(1.0); |
| 153 documentLoader = DocumentLoader::create( | 153 documentLoader = DocumentLoader::create( |
| 154 &dummyPageHolder->frame(), ResourceRequest(mainResourceUrl), | 154 &dummyPageHolder->frame(), ResourceRequest(mainResourceUrl), |
| 155 SubstituteData(), ClientRedirectPolicy::NotClientRedirect); | 155 SubstituteData(), ClientRedirectPolicy::NotClientRedirect); |
| 156 document = &dummyPageHolder->document(); | 156 document = &dummyPageHolder->document(); |
| 157 document->setURL(mainResourceUrl); | 157 document->setURL(mainResourceUrl); |
| 158 fetchContext = | 158 fetchContext = |
| 159 static_cast<FrameFetchContext*>(&documentLoader->fetcher()->context()); | 159 static_cast<FrameFetchContext*>(&documentLoader->fetcher()->context()); |
| 160 owner = DummyFrameOwner::create(); | 160 owner = DummyFrameOwner::create(); |
| 161 FrameFetchContext::provideDocumentToContext(*fetchContext, document.get()); | 161 FrameFetchContext::provideDocumentToContext(*fetchContext, document.get()); |
| 162 } | 162 } |
| 163 | 163 |
| 164 KURL url; | 164 KURL url; |
| 165 KURL mainResourceUrl; | 165 KURL mainResourceUrl; |
| 166 |
| 167 Persistent<testing::NiceMock<MockFrameLoaderClient>> client; |
| 166 }; | 168 }; |
| 167 | 169 |
| 168 class FrameFetchContextModifyRequestTest : public FrameFetchContextTest { | 170 class FrameFetchContextModifyRequestTest : public FrameFetchContextTest { |
| 169 public: | 171 public: |
| 170 FrameFetchContextModifyRequestTest() | 172 FrameFetchContextModifyRequestTest() |
| 171 : exampleOrigin(SecurityOrigin::create( | 173 : exampleOrigin(SecurityOrigin::create( |
| 172 KURL(ParsedURLString, "https://example.test/"))), | 174 KURL(ParsedURLString, "https://example.test/"))), |
| 173 secureOrigin(SecurityOrigin::create( | 175 secureOrigin(SecurityOrigin::create( |
| 174 KURL(ParsedURLString, "https://secureorigin.test/image.png"))) {} | 176 KURL(ParsedURLString, "https://secureorigin.test/image.png"))) {} |
| 175 | 177 |
| (...skipping 490 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 666 fetchContext->addAdditionalRequestHeaders(resourceRequest, FetchMainResource); | 668 fetchContext->addAdditionalRequestHeaders(resourceRequest, FetchMainResource); |
| 667 EXPECT_EQ("on", resourceRequest.httpHeaderField("Save-Data")); | 669 EXPECT_EQ("on", resourceRequest.httpHeaderField("Save-Data")); |
| 668 } | 670 } |
| 669 | 671 |
| 670 TEST_F(FrameFetchContextTest, DisabledDataSaver) { | 672 TEST_F(FrameFetchContextTest, DisabledDataSaver) { |
| 671 ResourceRequest resourceRequest("http://www.example.com"); | 673 ResourceRequest resourceRequest("http://www.example.com"); |
| 672 fetchContext->addAdditionalRequestHeaders(resourceRequest, FetchMainResource); | 674 fetchContext->addAdditionalRequestHeaders(resourceRequest, FetchMainResource); |
| 673 EXPECT_EQ(String(), resourceRequest.httpHeaderField("Save-Data")); | 675 EXPECT_EQ(String(), resourceRequest.httpHeaderField("Save-Data")); |
| 674 } | 676 } |
| 675 | 677 |
| 678 // Tests that the embedder gets correct notification when a resource is loaded |
| 679 // from the memory cache. |
| 680 TEST_F(FrameFetchContextMockedFrameLoaderClientTest, |
| 681 DispatchDidLoadResourceFromMemoryCache) { |
| 682 ResourceRequest resourceRequest(url); |
| 683 Resource* resource = ImageResource::create(resourceRequest); |
| 684 EXPECT_CALL( |
| 685 *client, |
| 686 dispatchDidLoadResourceFromMemoryCache( |
| 687 testing::AllOf(testing::Property(&ResourceRequest::url, url), |
| 688 testing::Property(&ResourceRequest::frameType, |
| 689 WebURLRequest::FrameTypeNone), |
| 690 testing::Property(&ResourceRequest::requestContext, |
| 691 WebURLRequest::RequestContextImage)), |
| 692 ResourceResponse())); |
| 693 fetchContext->dispatchDidLoadResourceFromMemoryCache( |
| 694 createUniqueIdentifier(), resource, WebURLRequest::FrameTypeNone, |
| 695 WebURLRequest::RequestContextImage); |
| 696 } |
| 697 |
| 676 // Tests that when a resource with certificate errors is loaded from the memory | 698 // Tests that when a resource with certificate errors is loaded from the memory |
| 677 // cache, the embedder is notified. | 699 // cache, the embedder is notified. |
| 678 TEST_F(FrameFetchContextDisplayedCertificateErrorsTest, | 700 TEST_F(FrameFetchContextMockedFrameLoaderClientTest, |
| 679 MemoryCacheCertificateError) { | 701 MemoryCacheCertificateError) { |
| 680 ResourceRequest resourceRequest(url); | 702 ResourceRequest resourceRequest(url); |
| 681 ResourceResponse response; | 703 ResourceResponse response; |
| 682 response.setURL(url); | 704 response.setURL(url); |
| 683 response.setHasMajorCertificateErrors(true); | 705 response.setHasMajorCertificateErrors(true); |
| 684 Resource* resource = ImageResource::create(resourceRequest); | 706 Resource* resource = ImageResource::create(resourceRequest); |
| 685 resource->setResponse(response); | 707 resource->setResponse(response); |
| 708 EXPECT_CALL(*client, didDisplayContentWithCertificateErrors(url)); |
| 686 fetchContext->dispatchDidLoadResourceFromMemoryCache( | 709 fetchContext->dispatchDidLoadResourceFromMemoryCache( |
| 687 createUniqueIdentifier(), resource, WebURLRequest::FrameTypeNone, | 710 createUniqueIdentifier(), resource, WebURLRequest::FrameTypeNone, |
| 688 WebURLRequest::RequestContextImage); | 711 WebURLRequest::RequestContextImage); |
| 689 } | 712 } |
| 690 | 713 |
| 691 TEST_F(FrameFetchContextTest, SetIsExternalRequestForPublicDocument) { | 714 TEST_F(FrameFetchContextTest, SetIsExternalRequestForPublicDocument) { |
| 692 EXPECT_EQ(WebAddressSpacePublic, document->addressSpace()); | 715 EXPECT_EQ(WebAddressSpacePublic, document->addressSpace()); |
| 693 | 716 |
| 694 struct TestCase { | 717 struct TestCase { |
| 695 const char* url; | 718 const char* url; |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 806 fetchContext->addAdditionalRequestHeaders(mainRequest, FetchMainResource); | 829 fetchContext->addAdditionalRequestHeaders(mainRequest, FetchMainResource); |
| 807 EXPECT_EQ(test.isExternalExpectation, mainRequest.isExternalRequest()); | 830 EXPECT_EQ(test.isExternalExpectation, mainRequest.isExternalRequest()); |
| 808 | 831 |
| 809 ResourceRequest subRequest(test.url); | 832 ResourceRequest subRequest(test.url); |
| 810 fetchContext->addAdditionalRequestHeaders(subRequest, FetchSubresource); | 833 fetchContext->addAdditionalRequestHeaders(subRequest, FetchSubresource); |
| 811 EXPECT_EQ(test.isExternalExpectation, subRequest.isExternalRequest()); | 834 EXPECT_EQ(test.isExternalExpectation, subRequest.isExternalRequest()); |
| 812 } | 835 } |
| 813 } | 836 } |
| 814 | 837 |
| 815 } // namespace blink | 838 } // namespace blink |
| OLD | NEW |