| Index: net/url_request/url_request_simple_job_unittest.cc
|
| diff --git a/net/url_request/url_request_simple_job_unittest.cc b/net/url_request/url_request_simple_job_unittest.cc
|
| index 439995a3b8ebdc0121e81462025d83d9d1181c79..abccbe050c329b02636d8e6f5d52c7fac89bb86e 100644
|
| --- a/net/url_request/url_request_simple_job_unittest.cc
|
| +++ b/net/url_request/url_request_simple_job_unittest.cc
|
| @@ -65,27 +65,30 @@ class MockSimpleJob : public URLRequestSimpleJob {
|
| DISALLOW_COPY_AND_ASSIGN(MockSimpleJob);
|
| };
|
|
|
| -class CancelURLRequestDelegate : public URLRequest::Delegate {
|
| +class CancelAfterFirstReadURLRequestDelegate : public TestDelegate {
|
| public:
|
| - CancelURLRequestDelegate()
|
| - : buf_(new IOBuffer(kBufferSize)), run_loop_(new base::RunLoop) {}
|
| + CancelAfterFirstReadURLRequestDelegate() : run_loop_(new base::RunLoop) {}
|
| +
|
| + ~CancelAfterFirstReadURLRequestDelegate() override {}
|
|
|
| void OnResponseStarted(URLRequest* request) override {
|
| - int bytes_read = 0;
|
| - EXPECT_FALSE(request->Read(buf_.get(), kBufferSize, &bytes_read));
|
| - EXPECT_TRUE(request->status().is_io_pending());
|
| + // net::TestDelegate will start the first read.
|
| + TestDelegate::OnResponseStarted(request);
|
| request->Cancel();
|
| run_loop_->Quit();
|
| }
|
|
|
| - void OnReadCompleted(URLRequest* request, int bytes_read) override {}
|
| + void OnReadCompleted(URLRequest* request, int bytes_read) override {
|
| + // Read should have been cancelled.
|
| + EXPECT_EQ(-1, bytes_read);
|
| + }
|
|
|
| void WaitUntilHeadersReceived() const { run_loop_->Run(); }
|
|
|
| private:
|
| - static const int kBufferSize = 4096;
|
| - scoped_refptr<IOBuffer> buf_;
|
| scoped_ptr<base::RunLoop> run_loop_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(CancelAfterFirstReadURLRequestDelegate);
|
| };
|
|
|
| class SimpleJobProtocolHandler :
|
| @@ -208,13 +211,23 @@ TEST_F(URLRequestSimpleJobTest, EmptyDataRequest) {
|
| EXPECT_EQ("", delegate_.data_received());
|
| }
|
|
|
| -TEST_F(URLRequestSimpleJobTest, CancelAfterFirstRead) {
|
| - scoped_ptr<CancelURLRequestDelegate> cancel_delegate(
|
| - new CancelURLRequestDelegate());
|
| +TEST_F(URLRequestSimpleJobTest, CancelBeforeResponseStarts) {
|
| + request_ =
|
| + context_.CreateRequest(GURL("data:cancel"), DEFAULT_PRIORITY, &delegate_);
|
| + request_->Start();
|
| + request_->Cancel();
|
| +
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_EQ(URLRequestStatus::CANCELED, request_->status().status());
|
| + EXPECT_EQ(1, delegate_.response_started_count());
|
| +}
|
| +
|
| +TEST_F(URLRequestSimpleJobTest, CancelAfterFirstReadStarted) {
|
| + CancelAfterFirstReadURLRequestDelegate cancel_delegate;
|
| request_ = context_.CreateRequest(GURL("data:cancel"), DEFAULT_PRIORITY,
|
| - cancel_delegate.get());
|
| + &cancel_delegate);
|
| request_->Start();
|
| - cancel_delegate->WaitUntilHeadersReceived();
|
| + cancel_delegate.WaitUntilHeadersReceived();
|
|
|
| // Feed a dummy task to the SequencedTaskRunner to make sure that the
|
| // callbacks which are invoked in ReadRawData have completed safely.
|
| @@ -222,6 +235,12 @@ TEST_F(URLRequestSimpleJobTest, CancelAfterFirstRead) {
|
| EXPECT_TRUE(task_runner_->PostTaskAndReply(
|
| FROM_HERE, base::Bind(&base::DoNothing), run_loop.QuitClosure()));
|
| run_loop.Run();
|
| +
|
| + EXPECT_EQ(URLRequestStatus::CANCELED, request_->status().status());
|
| + EXPECT_EQ(1, cancel_delegate.response_started_count());
|
| + EXPECT_EQ("", cancel_delegate.data_received());
|
| + // Destroy the request so it doesn't outlive its delegate.
|
| + request_.reset();
|
| }
|
|
|
| } // namespace net
|
|
|