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

Side by Side Diff: content/browser/download/download_request_core_unittest.cc

Issue 2786523002: Add control to use If-Range header for range request. (Closed)
Patch Set: Rebase. Created 3 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <memory> 5 #include <memory>
6 6
7 #include "base/memory/ptr_util.h" 7 #include "base/memory/ptr_util.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "content/browser/download/download_item_impl.h" 9 #include "content/browser/download/download_item_impl.h"
10 #include "content/browser/download/download_request_core.h" 10 #include "content/browser/download/download_request_core.h"
11 #include "content/public/browser/browser_thread.h" 11 #include "content/public/browser/browser_thread.h"
12 #include "content/public/browser/download_url_parameters.h" 12 #include "content/public/browser/download_url_parameters.h"
13 #include "content/public/test/test_browser_thread_bundle.h" 13 #include "content/public/test/test_browser_thread_bundle.h"
14 #include "net/http/http_request_headers.h" 14 #include "net/http/http_request_headers.h"
15 #include "net/url_request/url_request_test_util.h" 15 #include "net/url_request/url_request_test_util.h"
16 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
17 17
18 namespace content { 18 namespace content {
19 19
20 namespace {
21
22 const char kTestLastModifiedTime[] = "Tue, 15 Nov 1994 12:45:26 GMT";
23
24 } // namespace
25
20 class DownloadRequestCoreTest : public testing::Test { 26 class DownloadRequestCoreTest : public testing::Test {
21 public: 27 public:
22 std::unique_ptr<DownloadUrlParameters> BuildDownloadParameters( 28 std::unique_ptr<DownloadUrlParameters> BuildDownloadParameters(
23 const std::string& url) const { 29 const std::string& url) const {
24 GURL gurl(url); 30 GURL gurl(url);
25 return base::MakeUnique<DownloadUrlParameters>( 31 return base::MakeUnique<DownloadUrlParameters>(
26 gurl, request_context_getter_.get()); 32 gurl, request_context_getter_.get());
27 } 33 }
28 34
29 void CheckRequestHeaders(const std::string& name, 35 void CheckRequestHeaders(const std::string& name,
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 }; 71 };
66 72
67 // Ensure "Range" header is built correctly for normal download. 73 // Ensure "Range" header is built correctly for normal download.
68 TEST_F(DownloadRequestCoreTest, BuildRangeRequest) { 74 TEST_F(DownloadRequestCoreTest, BuildRangeRequest) {
69 std::unique_ptr<DownloadUrlParameters> params = 75 std::unique_ptr<DownloadUrlParameters> params =
70 BuildDownloadParameters("example.com"); 76 BuildDownloadParameters("example.com");
71 77
72 // Check initial states. 78 // Check initial states.
73 EXPECT_EQ(DownloadSaveInfo::kLengthFullContent, params->length()); 79 EXPECT_EQ(DownloadSaveInfo::kLengthFullContent, params->length());
74 EXPECT_EQ(0, params->offset()); 80 EXPECT_EQ(0, params->offset());
81 EXPECT_TRUE(params->use_if_range());
75 82
76 // Non-range request. 83 // Non-range request.
77 CreateRequestOnIOThread(params.get()); 84 CreateRequestOnIOThread(params.get());
78 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kRange)); 85 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kRange));
79 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kIfRange)); 86 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kIfRange));
80 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kIfMatch)); 87 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kIfMatch));
81 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kIfUnmodifiedSince)); 88 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kIfUnmodifiedSince));
82 url_request_.reset(); 89 url_request_.reset();
83 90
84 // Range request with header "Range:bytes=50-99", and etag. 91 // Range request with header "Range:bytes=50-99", and etag.
92 params = BuildDownloadParameters("example.com");
85 params->set_etag("123"); 93 params->set_etag("123");
86 params->set_offset(50); 94 params->set_offset(50);
87 params->set_length(50); 95 params->set_length(50);
96 params->set_use_if_range(false);
88 CreateRequestOnIOThread(params.get()); 97 CreateRequestOnIOThread(params.get());
89 CheckRequestHeaders(net::HttpRequestHeaders::kRange, "bytes=50-99"); 98 CheckRequestHeaders(net::HttpRequestHeaders::kRange, "bytes=50-99");
90 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kIfRange)); 99 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kIfRange));
91 CheckRequestHeaders(net::HttpRequestHeaders::kIfMatch, "123"); 100 CheckRequestHeaders(net::HttpRequestHeaders::kIfMatch, "123");
92 CheckRequestHeaders(net::HttpRequestHeaders::kIfUnmodifiedSince, ""); 101 CheckRequestHeaders(net::HttpRequestHeaders::kIfUnmodifiedSince, "");
93 url_request_.reset(); 102 url_request_.reset();
94 103
95 // Range request with header "Range:bytes=0-49" and last modified time. 104 // Range request with header "Range:bytes=0-49" and last modified time.
96 std::string last_modified_time = "Tue, 15 Nov 1994 12:45:26 GMT"; 105 params = BuildDownloadParameters("example.com");
97 params->set_etag(""); 106 params->set_etag("");
98 params->set_last_modified(last_modified_time); 107 params->set_last_modified(kTestLastModifiedTime);
99 params->set_offset(0); 108 params->set_offset(0);
100 params->set_length(50); 109 params->set_length(50);
110 params->set_use_if_range(false);
101 CreateRequestOnIOThread(params.get()); 111 CreateRequestOnIOThread(params.get());
102 CheckRequestHeaders(net::HttpRequestHeaders::kRange, "bytes=0-49"); 112 CheckRequestHeaders(net::HttpRequestHeaders::kRange, "bytes=0-49");
103 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kIfRange)); 113 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kIfRange));
104 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kIfMatch)); 114 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kIfMatch));
105 CheckRequestHeaders(net::HttpRequestHeaders::kIfUnmodifiedSince, 115 CheckRequestHeaders(net::HttpRequestHeaders::kIfUnmodifiedSince,
106 last_modified_time); 116 kTestLastModifiedTime);
107 url_request_.reset(); 117 url_request_.reset();
108 118
109 // Range request with header "Range:bytes=10-59" and includes both etag and 119 // Range request with header "Range:bytes=10-59" and includes both etag and
110 // last modified time. 120 // last modified time.
121 params = BuildDownloadParameters("example.com");
111 params->set_etag("123"); 122 params->set_etag("123");
112 params->set_last_modified(last_modified_time); 123 params->set_last_modified(kTestLastModifiedTime);
113 params->set_offset(10); 124 params->set_offset(10);
114 params->set_length(50); 125 params->set_length(50);
126 params->set_use_if_range(false);
115 CreateRequestOnIOThread(params.get()); 127 CreateRequestOnIOThread(params.get());
116 CheckRequestHeaders(net::HttpRequestHeaders::kRange, "bytes=10-59"); 128 CheckRequestHeaders(net::HttpRequestHeaders::kRange, "bytes=10-59");
117 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kIfRange)); 129 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kIfRange));
118 CheckRequestHeaders(net::HttpRequestHeaders::kIfMatch, "123"); 130 CheckRequestHeaders(net::HttpRequestHeaders::kIfMatch, "123");
119 CheckRequestHeaders(net::HttpRequestHeaders::kIfUnmodifiedSince, 131 CheckRequestHeaders(net::HttpRequestHeaders::kIfUnmodifiedSince,
120 last_modified_time); 132 kTestLastModifiedTime);
133 url_request_.reset();
134
135 // Range request with header "Range:bytes=10-59" and use "If-Range"
136 // header.
137 params = BuildDownloadParameters("example.com");
138 params->set_etag("123");
139 params->set_last_modified(kTestLastModifiedTime);
140 params->set_offset(10);
141 params->set_length(50);
142 params->set_use_if_range(true);
143 CreateRequestOnIOThread(params.get());
144 CheckRequestHeaders(net::HttpRequestHeaders::kRange, "bytes=10-59");
145 CheckRequestHeaders(net::HttpRequestHeaders::kIfRange, "123");
146 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kIfMatch));
147 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kIfUnmodifiedSince));
121 url_request_.reset(); 148 url_request_.reset();
122 } 149 }
123 150
124 // Ensure "Range" header is built correctly for download resumption. 151 // Ensure "Range" header is built correctly for download resumption.
125 // Notice download resumption requires strong validator(i.e. etag or 152 // Notice download resumption requires strong validator(i.e. etag or
126 // last-modified). 153 // last-modified).
127 TEST_F(DownloadRequestCoreTest, BuildRangeRequestWithoutLength) { 154 TEST_F(DownloadRequestCoreTest, BuildRangeRequestWithoutLength) {
128 std::unique_ptr<DownloadUrlParameters> params = 155 std::unique_ptr<DownloadUrlParameters> params =
129 BuildDownloadParameters("example.com"); 156 BuildDownloadParameters("example.com");
130 params->set_etag("123"); 157 params->set_etag("123");
131 params->set_offset(50); 158 params->set_offset(50);
132 CreateRequestOnIOThread(params.get()); 159 CreateRequestOnIOThread(params.get());
133 CheckRequestHeaders(net::HttpRequestHeaders::kRange, "bytes=50-"); 160 CheckRequestHeaders(net::HttpRequestHeaders::kRange, "bytes=50-");
134 CheckRequestHeaders(net::HttpRequestHeaders::kIfRange, "123"); 161 CheckRequestHeaders(net::HttpRequestHeaders::kIfRange, "123");
135 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kIfMatch)); 162 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kIfMatch));
136 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kIfUnmodifiedSince)); 163 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kIfUnmodifiedSince));
137 url_request_.reset(); 164 url_request_.reset();
165
166 params = BuildDownloadParameters("example.com");
167 params->set_last_modified(kTestLastModifiedTime);
168 params->set_offset(50);
169 params->set_use_if_range(false);
170 CreateRequestOnIOThread(params.get());
171 CheckRequestHeaders(net::HttpRequestHeaders::kRange, "bytes=50-");
172 CheckRequestHeaders(net::HttpRequestHeaders::kIfUnmodifiedSince,
173 kTestLastModifiedTime);
174 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kIfRange));
175 EXPECT_FALSE(HasRequestHeader(net::HttpRequestHeaders::kIfMatch));
176 url_request_.reset();
138 } 177 }
139 178
140 } // namespace content 179 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/download/download_request_core.cc ('k') | content/browser/download/download_worker.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698