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

Unified Diff: third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp

Issue 2677223002: Distinguish between subresource filtering and dryrun matching. (Closed)
Patch Set: rebase Created 3 years, 10 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/loader/FrameFetchContextTest.cpp
diff --git a/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp b/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp
index 6173625309aa443cd6d7dfe081cb234d4a3753f9..3f78de43b237ed18a0ef784352798895cfc797bc 100644
--- a/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp
+++ b/third_party/WebKit/Source/core/loader/FrameFetchContextTest.cpp
@@ -30,6 +30,7 @@
#include "core/loader/FrameFetchContext.h"
+#include <memory>
#include "core/dom/Document.h"
#include "core/frame/FrameHost.h"
#include "core/frame/FrameOwner.h"
@@ -48,10 +49,10 @@
#include "platform/weborigin/KURL.h"
#include "public/platform/WebAddressSpace.h"
#include "public/platform/WebCachePolicy.h"
+#include "public/platform/WebDocumentSubresourceFilter.h"
#include "public/platform/WebInsecureRequestPolicy.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
-#include <memory>
namespace blink {
@@ -82,6 +83,23 @@ class MockFrameLoaderClient : public EmptyFrameLoaderClient {
void(const ResourceRequest&, const ResourceResponse&));
};
+class FixedPolicySubresourceFilter : public WebDocumentSubresourceFilter {
+ public:
+ FixedPolicySubresourceFilter(LoadPolicy policy, int* filteredLoadCounter)
+ : m_policy(policy), m_filteredLoadCounter(filteredLoadCounter) {}
+
+ LoadPolicy getLoadPolicy(const WebURL& resourceUrl,
+ WebURLRequest::RequestContext) override {
+ return m_policy;
+ }
+
+ void reportDisallowedLoad() override { ++*m_filteredLoadCounter; }
+
+ private:
+ const LoadPolicy m_policy;
+ int* m_filteredLoadCounter;
+};
+
class FrameFetchContextTest : public ::testing::Test {
protected:
void SetUp() override {
@@ -126,6 +144,49 @@ class FrameFetchContextTest : public ::testing::Test {
Persistent<DummyFrameOwner> owner;
};
+class FrameFetchContextSubresourceFilterTest : public FrameFetchContextTest {
+ protected:
+ void SetUp() override {
+ FrameFetchContextTest::SetUp();
+ m_filteredLoadCallbackCounter = 0;
+ }
+
+ void TearDown() override {
+ document->loader()->setSubresourceFilter(nullptr);
+ FrameFetchContextTest::TearDown();
+ }
+
+ int getFilteredLoadCallCount() const { return m_filteredLoadCallbackCounter; }
+
+ void setFilterPolicy(WebDocumentSubresourceFilter::LoadPolicy policy) {
+ document->loader()->setSubresourceFilter(
+ WTF::makeUnique<FixedPolicySubresourceFilter>(
+ policy, &m_filteredLoadCallbackCounter));
+ }
+
+ ResourceRequestBlockedReason canRequest() {
+ return canRequestInternal(
+ FetchContext::SecurityViolationReportingPolicy::Report);
+ }
+
+ ResourceRequestBlockedReason canRequestPreload() {
+ return canRequestInternal(
+ FetchContext::SecurityViolationReportingPolicy::SuppressReporting);
+ }
+
+ private:
+ ResourceRequestBlockedReason canRequestInternal(
+ FetchContext::SecurityViolationReportingPolicy reportingPolicy) {
+ KURL inputURL(ParsedURLString, "http://example.com/");
+ ResourceRequest resourceRequest(inputURL);
+ return fetchContext->canRequest(
+ Resource::Image, resourceRequest, inputURL, ResourceLoaderOptions(),
+ reportingPolicy, FetchRequest::UseDefaultOriginRestrictionForType);
+ }
+
+ int m_filteredLoadCallbackCounter;
+};
+
// This test class sets up a mock frame loader client.
class FrameFetchContextMockedFrameLoaderClientTest
: public FrameFetchContextTest {
@@ -809,4 +870,41 @@ TEST_F(FrameFetchContextTest, SetIsExternalRequestForLocalDocument) {
}
}
+TEST_F(FrameFetchContextSubresourceFilterTest, Filter) {
+ setFilterPolicy(WebDocumentSubresourceFilter::Disallow);
+
+ EXPECT_EQ(ResourceRequestBlockedReason::SubresourceFilter, canRequest());
+ EXPECT_EQ(1, getFilteredLoadCallCount());
+
+ EXPECT_EQ(ResourceRequestBlockedReason::SubresourceFilter, canRequest());
+ EXPECT_EQ(2, getFilteredLoadCallCount());
+
+ EXPECT_EQ(ResourceRequestBlockedReason::SubresourceFilter,
+ canRequestPreload());
+ EXPECT_EQ(2, getFilteredLoadCallCount());
+
+ EXPECT_EQ(ResourceRequestBlockedReason::SubresourceFilter, canRequest());
+ EXPECT_EQ(3, getFilteredLoadCallCount());
+}
+
+TEST_F(FrameFetchContextSubresourceFilterTest, Allow) {
+ setFilterPolicy(WebDocumentSubresourceFilter::Allow);
+
+ EXPECT_EQ(ResourceRequestBlockedReason::None, canRequest());
+ EXPECT_EQ(0, getFilteredLoadCallCount());
+
+ EXPECT_EQ(ResourceRequestBlockedReason::None, canRequestPreload());
+ EXPECT_EQ(0, getFilteredLoadCallCount());
+}
+
+TEST_F(FrameFetchContextSubresourceFilterTest, WouldDisallow) {
+ setFilterPolicy(WebDocumentSubresourceFilter::WouldDisallow);
+
+ EXPECT_EQ(ResourceRequestBlockedReason::None, canRequest());
+ EXPECT_EQ(0, getFilteredLoadCallCount());
+
+ EXPECT_EQ(ResourceRequestBlockedReason::None, canRequestPreload());
+ EXPECT_EQ(0, getFilteredLoadCallCount());
+}
+
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698