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

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: Fix test compilation errors. 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..25d69ffa6a2cfcba701a8ea1f644ffdc0b81521a
--- /dev/null
+++ b/components/web_restrictions/browser/web_restrictions_resource_throttle_unittest.cc
@@ -0,0 +1,137 @@
+// 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:
+ // 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_;
+};
+
+TEST_F(WebRestrictionsResourceThrottleTest, WillStartRequest) {
+ 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 deferring with a resouce provider, and that the correct results
+ // are received.
+ provider_.SetAuthority("Good");
+ base::RunLoop run_loop;
+ TestResourceController controller(run_loop.QuitClosure());
+ throttle.set_controller_for_testing(&controller);
+ throttle.WillStartRequest(&defer);
+ EXPECT_TRUE(defer);
+ run_loop.Run();
+ EXPECT_TRUE(controller.ResumeCalled());
+ EXPECT_FALSE(controller.CancelWithErrorCalled());
+ provider_.SetAuthority("Bad");
+ base::RunLoop run_loop2;
+ TestResourceController controller2(run_loop2.QuitClosure());
+ throttle.set_controller_for_testing(&controller2);
+ throttle.WillStartRequest(&defer);
+ EXPECT_TRUE(defer);
+ run_loop2.Run();
+ EXPECT_FALSE(controller2.ResumeCalled());
+ EXPECT_TRUE(controller2.CancelWithErrorCalled());
+ EXPECT_EQ(net::ERR_BLOCKED_BY_ADMINISTRATOR, controller2.GetErrorCode());
+
+ // Only the main frame should be deferred.
+ WebRestrictionsResourceThrottle throttle2(&provider_,
+ GURL("http://example.com"), false);
+ base::RunLoop run_loop3;
+ TestResourceController controller3(run_loop3.QuitClosure());
+ throttle2.set_controller_for_testing(&controller3);
+ throttle2.WillStartRequest(&defer);
+ EXPECT_FALSE(defer);
+}
+
+TEST_F(WebRestrictionsResourceThrottleTest, WillRedirectRequest) {
+ // Set up a cached url.
+ WebRestrictionsResourceThrottle throttle(&provider_,
+ GURL("http://example.com"), true);
+ bool defer;
+ provider_.SetAuthority("Good");
+ base::RunLoop run_loop;
+ TestResourceController controller(run_loop.QuitClosure());
+ throttle.set_controller_for_testing(&controller);
+ throttle.WillStartRequest(&defer);
+ run_loop.Run();
+
+ // Using the same URL should not be deferred
+ net::RedirectInfo redirect;
+ redirect.new_url = GURL("http://example.com");
+ throttle.WillRedirectRequest(redirect, &defer);
+ EXPECT_FALSE(defer);
+
+ // Using a different URL should be deferred
Bernhard Bauer 2016/02/22 12:39:17 You could put each of these cases into a separate
aberent 2016/02/23 13:52:37 Refactored to have a separate test for each case.
+ redirect.new_url = GURL("http://example.com/2");
+ base::RunLoop run_loop2;
+ TestResourceController controller2(run_loop2.QuitClosure());
+ throttle.set_controller_for_testing(&controller2);
+ 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.
+ run_loop2.Run();
+}
+
+} // namespace web_restrictions

Powered by Google App Engine
This is Rietveld 408576698