Index: content/browser/loader/test_resource_handler_wrapper.cc |
diff --git a/content/browser/loader/test_resource_handler_wrapper.cc b/content/browser/loader/test_resource_handler_wrapper.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b5743a90dc6326bbe29bf46589e57c20dcd51dcc |
--- /dev/null |
+++ b/content/browser/loader/test_resource_handler_wrapper.cc |
@@ -0,0 +1,138 @@ |
+// 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 "content/browser/loader/test_resource_handler_wrapper.h" |
+ |
+#include <memory> |
+ |
+#include "base/memory/ptr_util.h" |
+#include "content/browser/loader/resource_controller.h" |
+#include "content/browser/loader/resource_handler.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace content { |
+ |
+class TestResourceHandlerWrapper::TestResourceController |
+ : public ResourceController { |
+ public: |
+ explicit TestResourceController( |
+ base::WeakPtr<TestResourceHandlerWrapper> resource_handler_wrapper) |
+ : resource_handler_wrapper_(resource_handler_wrapper) {} |
+ ~TestResourceController() override {} |
+ |
+ void Resume() override { |
+ ASSERT_TRUE(resource_handler_wrapper_); |
+ resource_handler_wrapper_->OnResume(); |
+ } |
+ |
+ void Cancel() override { CancelWithError(net::ERR_ABORTED); } |
+ |
+ void CancelAndIgnore() override { |
+ ADD_FAILURE() << "Unexpected CancelAndIgnore call."; |
+ Cancel(); |
+ } |
+ |
+ void CancelWithError(int error_code) override { |
+ ASSERT_TRUE(resource_handler_wrapper_); |
+ resource_handler_wrapper_->OnCancelWithError(error_code); |
+ } |
+ |
+ base::WeakPtr<TestResourceHandlerWrapper> resource_handler_wrapper_; |
+}; |
+ |
+TestResourceHandlerWrapper::TestResourceHandlerWrapper( |
+ ResourceHandler* resource_handler) |
+ : resource_handler_(resource_handler), weak_factory_(this) {} |
+ |
+TestResourceHandlerWrapper::~TestResourceHandlerWrapper() {} |
+ |
+TestResourceHandlerWrapper::Result |
+TestResourceHandlerWrapper::OnRequestRedirected( |
+ const net::RedirectInfo& redirect_info, |
+ ResourceResponse* response) { |
+ EXPECT_FALSE(weak_factory_.HasWeakPtrs()); |
+ EXPECT_NE(Result::CALLBACK_PENDING, last_result_); |
+ last_result_ = Result::CALLBACK_PENDING; |
+ resource_handler_->OnRequestRedirected( |
+ redirect_info, response, |
+ base::MakeUnique<TestResourceController>(weak_factory_.GetWeakPtr())); |
+ return last_result_; |
+} |
+ |
+TestResourceHandlerWrapper::Result |
+TestResourceHandlerWrapper::OnResponseStarted(ResourceResponse* response) { |
+ EXPECT_FALSE(weak_factory_.HasWeakPtrs()); |
+ EXPECT_NE(Result::CALLBACK_PENDING, last_result_); |
+ last_result_ = Result::CALLBACK_PENDING; |
+ resource_handler_->OnResponseStarted( |
+ response, |
+ base::MakeUnique<TestResourceController>(weak_factory_.GetWeakPtr())); |
+ return last_result_; |
+} |
+ |
+TestResourceHandlerWrapper::Result TestResourceHandlerWrapper::OnWillStart( |
+ const GURL& url) { |
+ EXPECT_FALSE(weak_factory_.HasWeakPtrs()); |
+ EXPECT_NE(Result::CALLBACK_PENDING, last_result_); |
+ last_result_ = Result::CALLBACK_PENDING; |
+ resource_handler_->OnWillStart(url, base::MakeUnique<TestResourceController>( |
+ weak_factory_.GetWeakPtr())); |
+ return last_result_; |
+} |
+ |
+TestResourceHandlerWrapper::Result TestResourceHandlerWrapper::OnReadCompleted( |
+ int bytes_read) { |
+ EXPECT_FALSE(weak_factory_.HasWeakPtrs()); |
+ EXPECT_NE(Result::CALLBACK_PENDING, last_result_); |
+ last_result_ = Result::CALLBACK_PENDING; |
+ resource_handler_->OnReadCompleted( |
+ bytes_read, |
+ base::MakeUnique<TestResourceController>(weak_factory_.GetWeakPtr())); |
+ return last_result_; |
+} |
+ |
+TestResourceHandlerWrapper::Result |
+TestResourceHandlerWrapper::OnResponseCompleted( |
+ const net::URLRequestStatus& status) { |
+ EXPECT_FALSE(weak_factory_.HasWeakPtrs()); |
+ EXPECT_NE(Result::CALLBACK_PENDING, last_result_); |
+ last_result_ = Result::CALLBACK_PENDING; |
+ resource_handler_->OnResponseCompleted( |
+ status, |
+ base::MakeUnique<TestResourceController>(weak_factory_.GetWeakPtr())); |
+ EXPECT_NE(Result::CANCEL, last_result_); |
+ return last_result_; |
+} |
+ |
+TestResourceHandlerWrapper::Result |
+TestResourceHandlerWrapper::OnResponseCompletedForOutOfBandCancel( |
+ const net::URLRequestStatus& status) { |
+ weak_factory_.InvalidateWeakPtrs(); |
+ last_result_ = Result::CALLBACK_PENDING; |
+ resource_handler_->OnResponseCompleted( |
+ status, |
+ base::MakeUnique<TestResourceController>(weak_factory_.GetWeakPtr())); |
+ EXPECT_NE(Result::CANCEL, last_result_); |
+ return last_result_; |
+} |
+ |
+void TestResourceHandlerWrapper::OnResume() { |
+ EXPECT_EQ(Result::CALLBACK_PENDING, last_result_); |
+ last_result_ = Result::RESUME; |
+} |
+ |
+void TestResourceHandlerWrapper::OnCancelWithError(int net_error) { |
+ EXPECT_LT(net_error, 0); |
+ EXPECT_EQ(net::OK, net_error_); |
+ EXPECT_EQ(Result::CALLBACK_PENDING, last_result_); |
+ last_result_ = Result::CANCEL; |
+ net_error_ = net_error; |
+ cancel_run_loop_.Quit(); |
+} |
+ |
+void TestResourceHandlerWrapper::RunUntilCanceled() { |
+ cancel_run_loop_.Run(); |
+} |
+ |
+} // namespace content |