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

Unified Diff: content/browser/webui/url_data_manager_backend_unittest.cc

Issue 1271593002: Fix cancellation of a pair of URLRequestJob subclasses (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixes Created 5 years, 4 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: content/browser/webui/url_data_manager_backend_unittest.cc
diff --git a/content/browser/webui/url_data_manager_backend_unittest.cc b/content/browser/webui/url_data_manager_backend_unittest.cc
index b123e76850d2098908d298d8419d2b56819a825e..24617ab2bb35d77d1ab42c3a5302706accc52b8f 100644
--- a/content/browser/webui/url_data_manager_backend_unittest.cc
+++ b/content/browser/webui/url_data_manager_backend_unittest.cc
@@ -11,48 +11,96 @@
#include "net/http/http_response_info.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_job.h"
+#include "net/url_request/url_request_job_factory_impl.h"
+#include "net/url_request/url_request_test_util.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace content {
-namespace {
-
-// Create a request for a chrome://resource URL passing the supplied |origin|
-// header and checking that the response header Access-Control-Allow-Origin has
-// value |expected_access_control_allow_origin_value|.
-void RunAccessControlAllowOriginTest(
- const std::string& origin,
- const std::string& expected_access_control_allow_origin_value) {
- TestBrowserThreadBundle thread_bundle;
- MockResourceContext resource_context;
- scoped_ptr<net::URLRequestJobFactory::ProtocolHandler> protocol_handler(
- URLDataManagerBackend::CreateProtocolHandler(&resource_context, false,
- nullptr, nullptr));
- net::URLRequestContext url_request_context;
- scoped_ptr<net::URLRequest> request = url_request_context.CreateRequest(
- GURL("chrome://resources/polymer/v1_0/polymer/polymer-extracted.js"),
- net::HIGHEST, nullptr);
- request->SetExtraRequestHeaderByName("Origin", origin, true);
- scoped_refptr<net::URLRequestJob> job =
- protocol_handler->MaybeCreateJob(request.get(), nullptr);
- ASSERT_TRUE(job);
- job->Start();
+class CancelAfterFirstReadDelegate : public net::TestDelegate {
+ public:
+ CancelAfterFirstReadDelegate() {}
+ ~CancelAfterFirstReadDelegate() override {}
+
+ // Cancels the request, after starting the first read.
+ void OnResponseStarted(net::URLRequest* request) override {
+ // net::TestDelegate will start the first read.
+ TestDelegate::OnResponseStarted(request);
+ request->Cancel();
+ }
davidben 2015/08/05 18:56:39 Do you want to override OnReadCompleted like the o
mmenke 2015/08/05 20:00:24 Done. I've gone ahead and make the classes identi
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(CancelAfterFirstReadDelegate);
+};
+
+class UrlDataManagerBackendTest : public testing::Test {
+ public:
+ UrlDataManagerBackendTest() {
+ // URLRequestJobFactory takes ownership of the passed in ProtocolHandler.
+ url_request_job_factory_.SetProtocolHandler(
+ "chrome",
+ URLDataManagerBackend::CreateProtocolHandler(
+ &resource_context_, false, nullptr, nullptr));
+ url_request_context_.set_job_factory(&url_request_job_factory_);
+ }
+
+ scoped_ptr<net::URLRequest> CreateRequest(net::URLRequest::Delegate* delegate,
+ const char* origin) {
+ scoped_ptr<net::URLRequest> request = url_request_context_.CreateRequest(
+ GURL("chrome://resources/polymer/v1_0/polymer/polymer-extracted.js"),
+ net::HIGHEST, delegate);
+ request->SetExtraRequestHeaderByName("Origin", origin, true);
+ return request.Pass();
+ }
+
+ protected:
+ TestBrowserThreadBundle thread_bundle_;
+ MockResourceContext resource_context_;
+ net::URLRequestJobFactoryImpl url_request_job_factory_;
+ net::URLRequestContext url_request_context_;
+ net::TestDelegate delegate_;
+};
+
+TEST_F(UrlDataManagerBackendTest, AccessControlAllowOriginChromeUrl) {
+ scoped_ptr<net::URLRequest> request(
+ CreateRequest(&delegate_, "chrome://webui"));
+ request->Start();
base::RunLoop().RunUntilIdle();
- net::HttpResponseInfo response;
- job->GetResponseInfo(&response);
- EXPECT_TRUE(response.headers->HasHeaderValue(
- "Access-Control-Allow-Origin",
- expected_access_control_allow_origin_value));
+ EXPECT_TRUE(request->response_headers()->HasHeaderValue(
+ "Access-Control-Allow-Origin", "chrome://webui"));
}
-} // namespace
+TEST_F(UrlDataManagerBackendTest, AccessControlAllowOriginNonChromeUrl) {
+ scoped_ptr<net::URLRequest> request(
+ CreateRequest(&delegate_, "http://www.example.com"));
+ request->Start();
+ base::RunLoop().RunUntilIdle();
+ EXPECT_TRUE(request->response_headers()->HasHeaderValue(
+ "Access-Control-Allow-Origin", "null"));
+}
-TEST(UrlDataManagerBackendTest, AccessControlAllowOriginChromeUrl) {
- RunAccessControlAllowOriginTest("chrome://webui", "chrome://webui");
+// Check that the URLRequestJob isn't passed headers after cancellation.
davidben 2015/08/05 18:56:39 URLRequestJob -> URLRequest?
mmenke 2015/08/05 20:00:24 Done.
+TEST_F(UrlDataManagerBackendTest, CancelBeforeResponseStarts) {
+ scoped_ptr<net::URLRequest> request(
+ CreateRequest(&delegate_, "chrome://webui"));
+ request->Start();
+ request->Cancel();
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(net::URLRequestStatus::CANCELED, request->status().status());
+ EXPECT_EQ(1, delegate_.response_started_count());
}
-TEST(UrlDataManagerBackendTest, AccessControlAllowOriginNonChromeUrl) {
- RunAccessControlAllowOriginTest("http://www.example.com", "null");
+// Check that the URLRequestJob isn't passed data after cancellation.
davidben 2015/08/05 18:56:39 Ditto.
mmenke 2015/08/05 20:00:24 Done.
+TEST_F(UrlDataManagerBackendTest, CancelAfterFirstReadStarted) {
+ CancelAfterFirstReadDelegate cancel_delegate;
+ scoped_ptr<net::URLRequest> request(
+ CreateRequest(&cancel_delegate, "chrome://webui"));
+ request->Start();
+ base::RunLoop().RunUntilIdle();
+
+ EXPECT_EQ(net::URLRequestStatus::CANCELED, request->status().status());
+ EXPECT_EQ(1, cancel_delegate.response_started_count());
+ EXPECT_EQ("", cancel_delegate.data_received());
}
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698