yhirano | f6c76cf | 2016-12-22 11:42:18 | [diff] [blame] | 1 | // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
John Abd-El-Malek | 6b56ef71 | 2017-10-21 22:52:46 | [diff] [blame] | 5 | #include "content/renderer/loader/test_request_peer.h" |
yhirano | f6c76cf | 2016-12-22 11:42:18 | [diff] [blame] | 6 | |
John Abd-El-Malek | 6b56ef71 | 2017-10-21 22:52:46 | [diff] [blame] | 7 | #include "content/renderer/loader/resource_dispatcher.h" |
yhirano | f6c76cf | 2016-12-22 11:42:18 | [diff] [blame] | 8 | #include "net/url_request/redirect_info.h" |
Lucas Furukawa Gadani | 99701f7 | 2019-10-08 16:31:55 | [diff] [blame] | 9 | #include "services/network/public/mojom/url_response_head.mojom.h" |
yhirano | f6c76cf | 2016-12-22 11:42:18 | [diff] [blame] | 10 | #include "testing/gtest/include/gtest/gtest.h" |
Blink Reformat | a30d423 | 2018-04-07 15:31:06 | [diff] [blame] | 11 | #include "third_party/blink/public/platform/scheduler/test/renderer_scheduler_test_support.h" |
yhirano | f6c76cf | 2016-12-22 11:42:18 | [diff] [blame] | 12 | |
| 13 | namespace content { |
| 14 | |
| 15 | TestRequestPeer::TestRequestPeer(ResourceDispatcher* dispatcher, |
| 16 | Context* context) |
| 17 | : dispatcher_(dispatcher), context_(context) {} |
| 18 | |
| 19 | TestRequestPeer::~TestRequestPeer() = default; |
| 20 | |
| 21 | void TestRequestPeer::OnUploadProgress(uint64_t position, uint64_t size) { |
| 22 | EXPECT_FALSE(context_->complete); |
| 23 | } |
| 24 | |
Randy Smith | ff094aa | 2018-01-17 18:21:27 | [diff] [blame] | 25 | bool TestRequestPeer::OnReceivedRedirect( |
| 26 | const net::RedirectInfo& redirect_info, |
Yoav Weiss | 3c2baf6 | 2020-05-13 13:22:44 | [diff] [blame] | 27 | network::mojom::URLResponseHeadPtr head, |
| 28 | std::vector<std::string>*) { |
yhirano | f6c76cf | 2016-12-22 11:42:18 | [diff] [blame] | 29 | EXPECT_FALSE(context_->cancelled); |
| 30 | EXPECT_FALSE(context_->complete); |
| 31 | ++context_->seen_redirects; |
Lucas Furukawa Gadani | 99701f7 | 2019-10-08 16:31:55 | [diff] [blame] | 32 | context_->last_load_timing = head->load_timing; |
yhirano | f6c76cf | 2016-12-22 11:42:18 | [diff] [blame] | 33 | if (context_->defer_on_redirect) |
| 34 | dispatcher_->SetDefersLoading(context_->request_id, true); |
| 35 | return context_->follow_redirects; |
| 36 | } |
| 37 | |
Randy Smith | ff094aa | 2018-01-17 18:21:27 | [diff] [blame] | 38 | void TestRequestPeer::OnReceivedResponse( |
Lucas Furukawa Gadani | 99701f7 | 2019-10-08 16:31:55 | [diff] [blame] | 39 | network::mojom::URLResponseHeadPtr head) { |
yhirano | f6c76cf | 2016-12-22 11:42:18 | [diff] [blame] | 40 | EXPECT_FALSE(context_->cancelled); |
| 41 | EXPECT_FALSE(context_->received_response); |
| 42 | EXPECT_FALSE(context_->complete); |
| 43 | context_->received_response = true; |
Lucas Furukawa Gadani | 99701f7 | 2019-10-08 16:31:55 | [diff] [blame] | 44 | context_->last_load_timing = head->load_timing; |
yhirano | f6c76cf | 2016-12-22 11:42:18 | [diff] [blame] | 45 | if (context_->cancel_on_receive_response) { |
Hajime Hoshi | 5d6642b0 | 2018-01-18 07:36:29 | [diff] [blame] | 46 | dispatcher_->Cancel( |
| 47 | context_->request_id, |
| 48 | blink::scheduler::GetSingleThreadTaskRunnerForTesting()); |
yhirano | f6c76cf | 2016-12-22 11:42:18 | [diff] [blame] | 49 | context_->cancelled = true; |
| 50 | } |
| 51 | } |
| 52 | |
Marijn Kruisselbrink | 090b1a4f | 2018-03-30 19:54:12 | [diff] [blame] | 53 | void TestRequestPeer::OnStartLoadingResponseBody( |
| 54 | mojo::ScopedDataPipeConsumerHandle body) { |
Makoto Shimazu | c0a2917 | 2019-01-25 08:55:39 | [diff] [blame] | 55 | if (context_->cancelled) |
| 56 | return; |
Marijn Kruisselbrink | 090b1a4f | 2018-03-30 19:54:12 | [diff] [blame] | 57 | EXPECT_TRUE(context_->received_response); |
Marijn Kruisselbrink | 090b1a4f | 2018-03-30 19:54:12 | [diff] [blame] | 58 | EXPECT_FALSE(context_->complete); |
Makoto Shimazu | 494ae7b5 | 2019-01-10 09:35:32 | [diff] [blame] | 59 | context_->body_handle = std::move(body); |
Marijn Kruisselbrink | 090b1a4f | 2018-03-30 19:54:12 | [diff] [blame] | 60 | } |
| 61 | |
yhirano | f6c76cf | 2016-12-22 11:42:18 | [diff] [blame] | 62 | void TestRequestPeer::OnTransferSizeUpdated(int transfer_size_diff) { |
| 63 | EXPECT_TRUE(context_->received_response); |
| 64 | EXPECT_FALSE(context_->complete); |
| 65 | if (context_->cancelled) |
| 66 | return; |
| 67 | context_->total_encoded_data_length += transfer_size_diff; |
yhirano | 6a0e9c7 | 2016-12-27 08:31:04 | [diff] [blame] | 68 | if (context_->defer_on_transfer_size_updated) |
| 69 | dispatcher_->SetDefersLoading(context_->request_id, true); |
yhirano | f6c76cf | 2016-12-22 11:42:18 | [diff] [blame] | 70 | } |
| 71 | |
Bill Budge | 4405d8d5 | 2019-08-22 16:45:45 | [diff] [blame] | 72 | void TestRequestPeer::OnReceivedCachedMetadata(mojo_base::BigBuffer data) { |
yhirano | 2a525f9 | 2017-01-18 08:16:46 | [diff] [blame] | 73 | EXPECT_TRUE(context_->received_response); |
| 74 | EXPECT_FALSE(context_->complete); |
| 75 | if (context_->cancelled) |
| 76 | return; |
Bill Budge | 4405d8d5 | 2019-08-22 16:45:45 | [diff] [blame] | 77 | context_->cached_metadata = std::move(data); |
yhirano | 2a525f9 | 2017-01-18 08:16:46 | [diff] [blame] | 78 | } |
| 79 | |
Takashi Toyoshima | f871692 | 2017-11-08 04:40:58 | [diff] [blame] | 80 | void TestRequestPeer::OnCompletedRequest( |
Takashi Toyoshima | aa27866 | 2017-11-20 11:11:26 | [diff] [blame] | 81 | const network::URLLoaderCompletionStatus& status) { |
yhirano | f6c76cf | 2016-12-22 11:42:18 | [diff] [blame] | 82 | if (context_->cancelled) |
| 83 | return; |
| 84 | EXPECT_TRUE(context_->received_response); |
| 85 | EXPECT_FALSE(context_->complete); |
| 86 | context_->complete = true; |
Yutaka Hirano | 8004bde | 2018-05-17 14:37:31 | [diff] [blame] | 87 | context_->completion_status = status; |
yhirano | f6c76cf | 2016-12-22 11:42:18 | [diff] [blame] | 88 | } |
| 89 | |
Lucas Furukawa Gadani | d51ff5d6 | 2018-12-07 21:26:49 | [diff] [blame] | 90 | scoped_refptr<base::TaskRunner> TestRequestPeer::GetTaskRunner() { |
Yutaka Hirano | cecd4c6c | 2018-11-12 10:27:29 | [diff] [blame] | 91 | return blink::scheduler::GetSingleThreadTaskRunnerForTesting(); |
| 92 | } |
| 93 | |
yhirano | f6c76cf | 2016-12-22 11:42:18 | [diff] [blame] | 94 | TestRequestPeer::Context::Context() = default; |
| 95 | TestRequestPeer::Context::~Context() = default; |
| 96 | |
| 97 | } // namespace content |