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

Unified Diff: components/web_restrictions/browser/web_restrictions_resource_throttle_unittest.cc

Issue 1684153002: Web restrictions component. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Use source_set for test_support Created 4 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: components/web_restrictions/browser/web_restrictions_resource_throttle_unittest.cc
diff --git a/components/web_restrictions/browser/web_restrictions_resource_throttle_unittest.cc b/components/web_restrictions/browser/web_restrictions_resource_throttle_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..f3e7342f0f2d57d3b6ae2517a8bff0570af59943
--- /dev/null
+++ b/components/web_restrictions/browser/web_restrictions_resource_throttle_unittest.cc
@@ -0,0 +1,157 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/bind.h"
+#include "base/run_loop.h"
+#include "components/web_restrictions/browser/mock_web_restrictions_client.h"
+#include "components/web_restrictions/browser/web_restrictions_client.h"
+#include "components/web_restrictions/browser/web_restrictions_resource_throttle.h"
+#include "content/public/browser/resource_controller.h"
+#include "content/public/test/test_browser_thread_bundle.h"
+#include "net/base/net_errors.h"
+#include "net/url_request/redirect_info.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace web_restrictions {
+
+namespace {
+
+class TestResourceController : public content::ResourceController {
+ public:
+ TestResourceController(const base::Closure& quit_closure)
+ : resume_called_(false),
+ cancel_with_error_called_(false),
+ error_code_(0),
+ quit_closure_(quit_closure) {}
+
+ void Cancel() override {}
+ void CancelAndIgnore() override {}
+ void CancelWithError(int error_code) override {
+ cancel_with_error_called_ = true;
+ error_code_ = error_code;
+ quit_closure_.Run();
+ }
+ void Resume() override {
+ resume_called_ = true;
+ quit_closure_.Run();
+ }
+
+ bool CancelWithErrorCalled() const { return cancel_with_error_called_; }
+
+ int GetErrorCode() const { return error_code_; }
+
+ bool ResumeCalled() const { return resume_called_; }
+
+ private:
+ bool resume_called_;
+ bool cancel_with_error_called_;
+ int error_code_;
+ base::Closure quit_closure_;
+};
+
+} // namespace
+
+class WebRestrictionsResourceThrottleTest : public testing::Test {
+ protected:
+ WebRestrictionsResourceThrottleTest()
+ : throttle_(&provider_, GURL("http://example.com"), true),
+ controller_(run_loop_.QuitClosure()) {
+ throttle_.set_controller_for_testing(&controller_);
+ }
+
+ void StartProvider() {
+ provider_.SetAuthority("Good");
+ bool defer;
+ throttle_.WillStartRequest(&defer);
+ run_loop_.Run();
+ }
+
+ // Mock the Java WebRestrictionsClient. The real version
+ // would need a content provider to do anything.
+ web_restrictions::MockWebRestrictionsClient mock_;
+ content::TestBrowserThreadBundle thread_bundle_;
+ WebRestrictionsClient provider_;
+ WebRestrictionsResourceThrottle throttle_;
+ base::RunLoop run_loop_;
+ TestResourceController controller_;
+};
+
+TEST_F(WebRestrictionsResourceThrottleTest, WillStartRequest_NoAuthority) {
+ WebRestrictionsResourceThrottle throttle(&provider_,
+ GURL("http://example.com"), true);
+ bool defer;
+ throttle.WillStartRequest(&defer);
+ // If there is no authority the request won't be deferred.
+ EXPECT_FALSE(defer);
+}
+
+TEST_F(WebRestrictionsResourceThrottleTest, WillStartRequest_DeferredAllow) {
+ // Test deferring with a resource provider, and that the correct results
+ // are received.
+ provider_.SetAuthority("Good");
+ bool defer;
+ throttle_.WillStartRequest(&defer);
+ EXPECT_TRUE(defer);
+ run_loop_.Run();
+ EXPECT_TRUE(controller_.ResumeCalled());
+ EXPECT_FALSE(controller_.CancelWithErrorCalled());
+}
+
+TEST_F(WebRestrictionsResourceThrottleTest, WillStartRequest_DeferredForbid) {
+ provider_.SetAuthority("Bad");
+ bool defer;
+ throttle_.WillStartRequest(&defer);
+ EXPECT_TRUE(defer);
+ run_loop_.Run();
+ EXPECT_FALSE(controller_.ResumeCalled());
+ EXPECT_TRUE(controller_.CancelWithErrorCalled());
+ EXPECT_EQ(net::ERR_BLOCKED_BY_ADMINISTRATOR, controller_.GetErrorCode());
+}
+
+TEST_F(WebRestrictionsResourceThrottleTest, WillStartRequest_Subresource) {
+ // Only the main frame should be deferred.
+ // Initialization of the controller is asynchronous, and this will only work
+ // correctly if the provider is initialized. Run a main frame through this
+ // first to ensure that everything is initialized.
+ StartProvider();
+ // Now the real test.
+ WebRestrictionsResourceThrottle throttle(
+ &provider_, GURL("http://example.com/sub"), false);
+ base::RunLoop test_run_loop;
+ TestResourceController test_controller(test_run_loop.QuitClosure());
+ throttle.set_controller_for_testing(&test_controller);
+ bool defer;
+ throttle.WillStartRequest(&defer);
+ EXPECT_FALSE(defer);
+}
+
+TEST_F(WebRestrictionsResourceThrottleTest, WillRedirectRequest_KnownUrl) {
+ // Set up a cached url.
+ StartProvider();
+ // Using the same URL should not be deferred
+ net::RedirectInfo redirect;
+ redirect.new_url = GURL("http://example.com");
+ bool defer;
+ throttle_.WillRedirectRequest(redirect, &defer);
+ EXPECT_FALSE(defer);
+}
+
+TEST_F(WebRestrictionsResourceThrottleTest, WillRedirectRequest_NewUrl) {
+ // Set up a cached url.
+ StartProvider();
+ // Using a different URL should be deferred
+ net::RedirectInfo redirect;
+ redirect.new_url = GURL("http://example.com/2");
+ base::RunLoop test_run_loop;
+ TestResourceController test_controller(test_run_loop.QuitClosure());
+ throttle_.set_controller_for_testing(&test_controller);
+ bool defer;
+ throttle_.WillRedirectRequest(redirect, &defer);
+ EXPECT_TRUE(defer);
+ // If we don't wait for the callback it may happen after the exit, which
+ // results in accesses the redirect_url after the stack frame is freed.
+ test_run_loop.Run();
+}
+
+} // namespace web_restrictions

Powered by Google App Engine
This is Rietveld 408576698