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

Side by Side Diff: chrome/browser/extensions/extension_protocols_unittest.cc

Issue 2264903003: Adjust callers and networking delegates in chrome/ to modified APIs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@URLRequestRead
Patch Set: rebased Created 4 years, 3 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <stddef.h> 5 #include <stddef.h>
6 6
7 #include <memory> 7 #include <memory>
8 #include <string> 8 #include <string>
9 9
10 #include "base/files/file_util.h" 10 #include "base/files/file_util.h"
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 true, // allow_download 146 true, // allow_download
147 false, // is_async 147 false, // is_async
148 false); // is_using_lofi 148 false); // is_using_lofi
149 request->Start(); 149 request->Start();
150 base::RunLoop().Run(); 150 base::RunLoop().Run();
151 } 151 }
152 152
153 // Helper method to create a URLRequest, call StartRequest on it, and return 153 // Helper method to create a URLRequest, call StartRequest on it, and return
154 // the result. If |extension| hasn't already been added to 154 // the result. If |extension| hasn't already been added to
155 // |extension_info_map_|, this will add it. 155 // |extension_info_map_|, this will add it.
156 net::URLRequestStatus::Status DoRequest(const Extension& extension, 156 int DoRequest(const Extension& extension,
157 const std::string& relative_path) { 157 const std::string& relative_path) {
158 if (!extension_info_map_->extensions().Contains(extension.id())) { 158 if (!extension_info_map_->extensions().Contains(extension.id())) {
159 extension_info_map_->AddExtension(&extension, 159 extension_info_map_->AddExtension(&extension,
160 base::Time::Now(), 160 base::Time::Now(),
161 false, // incognito_enabled 161 false, // incognito_enabled
162 false); // notifications_disabled 162 false); // notifications_disabled
163 } 163 }
164 std::unique_ptr<net::URLRequest> request( 164 std::unique_ptr<net::URLRequest> request(
165 resource_context_.GetRequestContext()->CreateRequest( 165 resource_context_.GetRequestContext()->CreateRequest(
166 extension.GetResourceURL(relative_path), net::DEFAULT_PRIORITY, 166 extension.GetResourceURL(relative_path), net::DEFAULT_PRIORITY,
167 &test_delegate_)); 167 &test_delegate_));
168 StartRequest(request.get(), content::RESOURCE_TYPE_MAIN_FRAME); 168 StartRequest(request.get(), content::RESOURCE_TYPE_MAIN_FRAME);
169 return request->status().status(); 169 return test_delegate_.request_status();
170 } 170 }
171 171
172 protected: 172 protected:
173 content::TestBrowserThreadBundle thread_bundle_; 173 content::TestBrowserThreadBundle thread_bundle_;
174 scoped_refptr<InfoMap> extension_info_map_; 174 scoped_refptr<InfoMap> extension_info_map_;
175 net::URLRequestJobFactoryImpl job_factory_; 175 net::URLRequestJobFactoryImpl job_factory_;
176 const net::URLRequestJobFactory* old_factory_; 176 const net::URLRequestJobFactory* old_factory_;
177 net::TestDelegate test_delegate_; 177 net::TestDelegate test_delegate_;
178 net::TestURLRequestContext test_url_request_context_; 178 net::TestURLRequestContext test_url_request_context_;
179 content::MockResourceContext resource_context_; 179 content::MockResourceContext resource_context_;
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 // First test a main frame request. 212 // First test a main frame request.
213 { 213 {
214 // It doesn't matter that the resource doesn't exist. If the resource 214 // It doesn't matter that the resource doesn't exist. If the resource
215 // is blocked, we should see BLOCKED_BY_CLIENT. Otherwise, the request 215 // is blocked, we should see BLOCKED_BY_CLIENT. Otherwise, the request
216 // should just fail because the file doesn't exist. 216 // should just fail because the file doesn't exist.
217 std::unique_ptr<net::URLRequest> request( 217 std::unique_ptr<net::URLRequest> request(
218 resource_context_.GetRequestContext()->CreateRequest( 218 resource_context_.GetRequestContext()->CreateRequest(
219 extension->GetResourceURL("404.html"), net::DEFAULT_PRIORITY, 219 extension->GetResourceURL("404.html"), net::DEFAULT_PRIORITY,
220 &test_delegate_)); 220 &test_delegate_));
221 StartRequest(request.get(), content::RESOURCE_TYPE_MAIN_FRAME); 221 StartRequest(request.get(), content::RESOURCE_TYPE_MAIN_FRAME);
222 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status());
223 222
224 if (cases[i].should_allow_main_frame_load) { 223 if (cases[i].should_allow_main_frame_load) {
225 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, request->status().error()) << 224 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, test_delegate_.request_status())
226 cases[i].name; 225 << cases[i].name;
227 } else { 226 } else {
228 EXPECT_EQ(net::ERR_BLOCKED_BY_CLIENT, request->status().error()) 227 EXPECT_EQ(net::ERR_BLOCKED_BY_CLIENT, test_delegate_.request_status())
229 << cases[i].name; 228 << cases[i].name;
230 } 229 }
231 } 230 }
232 231
233 // Now do a subframe request. 232 // Now do a subframe request.
234 { 233 {
235 std::unique_ptr<net::URLRequest> request( 234 std::unique_ptr<net::URLRequest> request(
236 resource_context_.GetRequestContext()->CreateRequest( 235 resource_context_.GetRequestContext()->CreateRequest(
237 extension->GetResourceURL("404.html"), net::DEFAULT_PRIORITY, 236 extension->GetResourceURL("404.html"), net::DEFAULT_PRIORITY,
238 &test_delegate_)); 237 &test_delegate_));
239 StartRequest(request.get(), content::RESOURCE_TYPE_SUB_FRAME); 238 StartRequest(request.get(), content::RESOURCE_TYPE_SUB_FRAME);
240 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status());
241 239
242 if (cases[i].should_allow_sub_frame_load) { 240 if (cases[i].should_allow_sub_frame_load) {
243 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, request->status().error()) << 241 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, test_delegate_.request_status())
244 cases[i].name; 242 << cases[i].name;
245 } else { 243 } else {
246 EXPECT_EQ(net::ERR_BLOCKED_BY_CLIENT, request->status().error()) 244 EXPECT_EQ(net::ERR_BLOCKED_BY_CLIENT, test_delegate_.request_status())
247 << cases[i].name; 245 << cases[i].name;
248 } 246 }
249 } 247 }
250 } 248 }
251 } 249 }
252 250
253 void CheckForContentLengthHeader(net::URLRequest* request) { 251 void CheckForContentLengthHeader(net::URLRequest* request) {
254 std::string content_length; 252 std::string content_length;
255 request->GetResponseHeaderByName(net::HttpRequestHeaders::kContentLength, 253 request->GetResponseHeaderByName(net::HttpRequestHeaders::kContentLength,
256 &content_length); 254 &content_length);
(...skipping 15 matching lines...) Expand all
272 false, 270 false,
273 false); 271 false);
274 272
275 // First test it with the extension enabled. 273 // First test it with the extension enabled.
276 { 274 {
277 std::unique_ptr<net::URLRequest> request( 275 std::unique_ptr<net::URLRequest> request(
278 resource_context_.GetRequestContext()->CreateRequest( 276 resource_context_.GetRequestContext()->CreateRequest(
279 extension->GetResourceURL("webstore_icon_16.png"), 277 extension->GetResourceURL("webstore_icon_16.png"),
280 net::DEFAULT_PRIORITY, &test_delegate_)); 278 net::DEFAULT_PRIORITY, &test_delegate_));
281 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA); 279 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA);
282 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status()); 280 EXPECT_EQ(net::OK, test_delegate_.request_status());
283 CheckForContentLengthHeader(request.get()); 281 CheckForContentLengthHeader(request.get());
284 } 282 }
285 283
286 // And then test it with the extension disabled. 284 // And then test it with the extension disabled.
287 extension_info_map_->RemoveExtension(extension->id(), 285 extension_info_map_->RemoveExtension(extension->id(),
288 UnloadedExtensionInfo::REASON_DISABLE); 286 UnloadedExtensionInfo::REASON_DISABLE);
289 { 287 {
290 std::unique_ptr<net::URLRequest> request( 288 std::unique_ptr<net::URLRequest> request(
291 resource_context_.GetRequestContext()->CreateRequest( 289 resource_context_.GetRequestContext()->CreateRequest(
292 extension->GetResourceURL("webstore_icon_16.png"), 290 extension->GetResourceURL("webstore_icon_16.png"),
293 net::DEFAULT_PRIORITY, &test_delegate_)); 291 net::DEFAULT_PRIORITY, &test_delegate_));
294 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA); 292 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA);
295 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status()); 293 EXPECT_EQ(net::OK, test_delegate_.request_status());
296 CheckForContentLengthHeader(request.get()); 294 CheckForContentLengthHeader(request.get());
297 } 295 }
298 } 296 }
299 297
300 // Tests that a URL request for resource from an extension returns a few 298 // Tests that a URL request for resource from an extension returns a few
301 // expected response headers. 299 // expected response headers.
302 TEST_F(ExtensionProtocolTest, ResourceRequestResponseHeaders) { 300 TEST_F(ExtensionProtocolTest, ResourceRequestResponseHeaders) {
303 // Register a non-incognito extension protocol handler. 301 // Register a non-incognito extension protocol handler.
304 SetProtocolHandler(false); 302 SetProtocolHandler(false);
305 303
306 scoped_refptr<Extension> extension = CreateTestResponseHeaderExtension(); 304 scoped_refptr<Extension> extension = CreateTestResponseHeaderExtension();
307 extension_info_map_->AddExtension(extension.get(), 305 extension_info_map_->AddExtension(extension.get(),
308 base::Time::Now(), 306 base::Time::Now(),
309 false, 307 false,
310 false); 308 false);
311 309
312 { 310 {
313 std::unique_ptr<net::URLRequest> request( 311 std::unique_ptr<net::URLRequest> request(
314 resource_context_.GetRequestContext()->CreateRequest( 312 resource_context_.GetRequestContext()->CreateRequest(
315 extension->GetResourceURL("test.dat"), net::DEFAULT_PRIORITY, 313 extension->GetResourceURL("test.dat"), net::DEFAULT_PRIORITY,
316 &test_delegate_)); 314 &test_delegate_));
317 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA); 315 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA);
318 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status()); 316 EXPECT_EQ(net::OK, test_delegate_.request_status());
319 317
320 // Check that cache-related headers are set. 318 // Check that cache-related headers are set.
321 std::string etag; 319 std::string etag;
322 request->GetResponseHeaderByName("ETag", &etag); 320 request->GetResponseHeaderByName("ETag", &etag);
323 EXPECT_TRUE(base::StartsWith(etag, "\"", base::CompareCase::SENSITIVE)); 321 EXPECT_TRUE(base::StartsWith(etag, "\"", base::CompareCase::SENSITIVE));
324 EXPECT_TRUE(base::EndsWith(etag, "\"", base::CompareCase::SENSITIVE)); 322 EXPECT_TRUE(base::EndsWith(etag, "\"", base::CompareCase::SENSITIVE));
325 323
326 std::string revalidation_header; 324 std::string revalidation_header;
327 request->GetResponseHeaderByName("cache-control", &revalidation_header); 325 request->GetResponseHeaderByName("cache-control", &revalidation_header);
328 EXPECT_EQ("no-cache", revalidation_header); 326 EXPECT_EQ("no-cache", revalidation_header);
(...skipping 20 matching lines...) Expand all
349 347
350 // All MAIN_FRAME requests should succeed. SUB_FRAME requests that are not 348 // All MAIN_FRAME requests should succeed. SUB_FRAME requests that are not
351 // explicitly listed in web_accesible_resources or same-origin to the parent 349 // explicitly listed in web_accesible_resources or same-origin to the parent
352 // should not succeed. 350 // should not succeed.
353 { 351 {
354 std::unique_ptr<net::URLRequest> request( 352 std::unique_ptr<net::URLRequest> request(
355 resource_context_.GetRequestContext()->CreateRequest( 353 resource_context_.GetRequestContext()->CreateRequest(
356 extension->GetResourceURL("test.dat"), net::DEFAULT_PRIORITY, 354 extension->GetResourceURL("test.dat"), net::DEFAULT_PRIORITY,
357 &test_delegate_)); 355 &test_delegate_));
358 StartRequest(request.get(), content::RESOURCE_TYPE_MAIN_FRAME); 356 StartRequest(request.get(), content::RESOURCE_TYPE_MAIN_FRAME);
359 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status()); 357 EXPECT_EQ(net::OK, test_delegate_.request_status());
360 } 358 }
361 { 359 {
362 std::unique_ptr<net::URLRequest> request( 360 std::unique_ptr<net::URLRequest> request(
363 resource_context_.GetRequestContext()->CreateRequest( 361 resource_context_.GetRequestContext()->CreateRequest(
364 extension->GetResourceURL("test.dat"), net::DEFAULT_PRIORITY, 362 extension->GetResourceURL("test.dat"), net::DEFAULT_PRIORITY,
365 &test_delegate_)); 363 &test_delegate_));
366 StartRequest(request.get(), content::RESOURCE_TYPE_SUB_FRAME); 364 StartRequest(request.get(), content::RESOURCE_TYPE_SUB_FRAME);
367 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status()); 365 EXPECT_EQ(net::ERR_FAILED, test_delegate_.request_status());
368 } 366 }
369 367
370 // And subresource types, such as media, should fail. 368 // And subresource types, such as media, should fail.
371 { 369 {
372 std::unique_ptr<net::URLRequest> request( 370 std::unique_ptr<net::URLRequest> request(
373 resource_context_.GetRequestContext()->CreateRequest( 371 resource_context_.GetRequestContext()->CreateRequest(
374 extension->GetResourceURL("test.dat"), net::DEFAULT_PRIORITY, 372 extension->GetResourceURL("test.dat"), net::DEFAULT_PRIORITY,
375 &test_delegate_)); 373 &test_delegate_));
376 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA); 374 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA);
377 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status()); 375 EXPECT_EQ(net::ERR_FAILED, test_delegate_.request_status());
378 } 376 }
379 } 377 }
380 378
381 379
382 TEST_F(ExtensionProtocolTest, MetadataFolder) { 380 TEST_F(ExtensionProtocolTest, MetadataFolder) {
383 SetProtocolHandler(false); 381 SetProtocolHandler(false);
384 382
385 base::FilePath extension_dir = GetTestPath("metadata_folder"); 383 base::FilePath extension_dir = GetTestPath("metadata_folder");
386 std::string error; 384 std::string error;
387 scoped_refptr<Extension> extension = 385 scoped_refptr<Extension> extension =
388 file_util::LoadExtension(extension_dir, Manifest::INTERNAL, 386 file_util::LoadExtension(extension_dir, Manifest::INTERNAL,
389 Extension::NO_FLAGS, &error); 387 Extension::NO_FLAGS, &error);
390 ASSERT_NE(extension.get(), nullptr) << "error: " << error; 388 ASSERT_NE(extension.get(), nullptr) << "error: " << error;
391 389
392 // Loading "/test.html" should succeed. 390 // Loading "/test.html" should succeed.
393 EXPECT_EQ(net::URLRequestStatus::SUCCESS, DoRequest(*extension, "test.html")); 391 EXPECT_EQ(net::OK, DoRequest(*extension, "test.html"));
394 392
395 // Loading "/_metadata/verified_contents.json" should fail. 393 // Loading "/_metadata/verified_contents.json" should fail.
396 base::FilePath relative_path = 394 base::FilePath relative_path =
397 base::FilePath(kMetadataFolder).Append(kVerifiedContentsFilename); 395 base::FilePath(kMetadataFolder).Append(kVerifiedContentsFilename);
398 EXPECT_TRUE(base::PathExists(extension_dir.Append(relative_path))); 396 EXPECT_TRUE(base::PathExists(extension_dir.Append(relative_path)));
399 EXPECT_EQ(net::URLRequestStatus::FAILED, 397 EXPECT_EQ(net::ERR_FAILED,
400 DoRequest(*extension, relative_path.AsUTF8Unsafe())); 398 DoRequest(*extension, relative_path.AsUTF8Unsafe()));
401 399
402 // Loading "/_metadata/a.txt" should also fail. 400 // Loading "/_metadata/a.txt" should also fail.
403 relative_path = base::FilePath(kMetadataFolder).AppendASCII("a.txt"); 401 relative_path = base::FilePath(kMetadataFolder).AppendASCII("a.txt");
404 EXPECT_TRUE(base::PathExists(extension_dir.Append(relative_path))); 402 EXPECT_TRUE(base::PathExists(extension_dir.Append(relative_path)));
405 EXPECT_EQ(net::URLRequestStatus::FAILED, 403 EXPECT_EQ(net::ERR_FAILED,
406 DoRequest(*extension, relative_path.AsUTF8Unsafe())); 404 DoRequest(*extension, relative_path.AsUTF8Unsafe()));
407 } 405 }
408 406
409 } // namespace extensions 407 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698