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

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

Issue 407093011: Allow URLRequests from one context to have different NetworkDelegates. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix new tests Created 6 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 unified diff | Download patch | Annotate | Revision Log
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 <string> 5 #include <string>
6 6
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/memory/scoped_ptr.h"
8 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
9 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
10 #include "base/strings/string_util.h" 11 #include "base/strings/string_util.h"
11 #include "base/values.h" 12 #include "base/values.h"
12 #include "chrome/common/chrome_paths.h" 13 #include "chrome/common/chrome_paths.h"
13 //#include "chrome/common/url_constants.h" 14 //#include "chrome/common/url_constants.h"
14 #include "content/public/browser/resource_request_info.h" 15 #include "content/public/browser/resource_request_info.h"
15 #include "content/public/test/mock_resource_context.h" 16 #include "content/public/test/mock_resource_context.h"
16 #include "content/public/test/test_browser_thread_bundle.h" 17 #include "content/public/test/test_browser_thread_bundle.h"
17 #include "extensions/browser/extension_protocols.h" 18 #include "extensions/browser/extension_protocols.h"
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 scoped_refptr<Extension> extension = 171 scoped_refptr<Extension> extension =
171 CreateTestExtension(cases[i].name, cases[i].incognito_split_mode); 172 CreateTestExtension(cases[i].name, cases[i].incognito_split_mode);
172 extension_info_map_->AddExtension( 173 extension_info_map_->AddExtension(
173 extension.get(), base::Time::Now(), cases[i].incognito_enabled, false); 174 extension.get(), base::Time::Now(), cases[i].incognito_enabled, false);
174 175
175 // First test a main frame request. 176 // First test a main frame request.
176 { 177 {
177 // It doesn't matter that the resource doesn't exist. If the resource 178 // It doesn't matter that the resource doesn't exist. If the resource
178 // is blocked, we should see ADDRESS_UNREACHABLE. Otherwise, the request 179 // is blocked, we should see ADDRESS_UNREACHABLE. Otherwise, the request
179 // should just fail because the file doesn't exist. 180 // should just fail because the file doesn't exist.
180 net::URLRequest request(extension->GetResourceURL("404.html"), 181 scoped_ptr<net::URLRequest> request(
181 net::DEFAULT_PRIORITY, 182 resource_context_.GetRequestContext()->CreateRequest(
182 &test_delegate_, 183 extension->GetResourceURL("404.html"),
183 resource_context_.GetRequestContext()); 184 net::DEFAULT_PRIORITY,
184 StartRequest(&request, content::RESOURCE_TYPE_MAIN_FRAME); 185 &test_delegate_,
185 EXPECT_EQ(net::URLRequestStatus::FAILED, request.status().status()); 186 NULL));
187 StartRequest(request.get(), content::RESOURCE_TYPE_MAIN_FRAME);
188 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status());
186 189
187 if (cases[i].should_allow_main_frame_load) { 190 if (cases[i].should_allow_main_frame_load) {
188 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, request.status().error()) << 191 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, request->status().error()) <<
189 cases[i].name; 192 cases[i].name;
190 } else { 193 } else {
191 EXPECT_EQ(net::ERR_ADDRESS_UNREACHABLE, request.status().error()) << 194 EXPECT_EQ(net::ERR_ADDRESS_UNREACHABLE, request->status().error()) <<
192 cases[i].name; 195 cases[i].name;
193 } 196 }
194 } 197 }
195 198
196 // Now do a subframe request. 199 // Now do a subframe request.
197 { 200 {
198 net::URLRequest request(extension->GetResourceURL("404.html"), 201 scoped_ptr<net::URLRequest> request(
199 net::DEFAULT_PRIORITY, 202 resource_context_.GetRequestContext()->CreateRequest(
200 &test_delegate_, 203 extension->GetResourceURL("404.html"),
201 resource_context_.GetRequestContext()); 204 net::DEFAULT_PRIORITY,
202 StartRequest(&request, content::RESOURCE_TYPE_SUB_FRAME); 205 &test_delegate_,
203 EXPECT_EQ(net::URLRequestStatus::FAILED, request.status().status()); 206 NULL));
207 StartRequest(request.get(), content::RESOURCE_TYPE_SUB_FRAME);
208 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status());
204 209
205 if (cases[i].should_allow_sub_frame_load) { 210 if (cases[i].should_allow_sub_frame_load) {
206 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, request.status().error()) << 211 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, request->status().error()) <<
207 cases[i].name; 212 cases[i].name;
208 } else { 213 } else {
209 EXPECT_EQ(net::ERR_ADDRESS_UNREACHABLE, request.status().error()) << 214 EXPECT_EQ(net::ERR_ADDRESS_UNREACHABLE, request->status().error()) <<
210 cases[i].name; 215 cases[i].name;
211 } 216 }
212 } 217 }
213 } 218 }
214 } 219 }
215 220
216 void CheckForContentLengthHeader(net::URLRequest* request) { 221 void CheckForContentLengthHeader(net::URLRequest* request) {
217 std::string content_length; 222 std::string content_length;
218 request->GetResponseHeaderByName(net::HttpRequestHeaders::kContentLength, 223 request->GetResponseHeaderByName(net::HttpRequestHeaders::kContentLength,
219 &content_length); 224 &content_length);
(...skipping 10 matching lines...) Expand all
230 SetProtocolHandler(false); 235 SetProtocolHandler(false);
231 236
232 scoped_refptr<Extension> extension = CreateWebStoreExtension(); 237 scoped_refptr<Extension> extension = CreateWebStoreExtension();
233 extension_info_map_->AddExtension(extension.get(), 238 extension_info_map_->AddExtension(extension.get(),
234 base::Time::Now(), 239 base::Time::Now(),
235 false, 240 false,
236 false); 241 false);
237 242
238 // First test it with the extension enabled. 243 // First test it with the extension enabled.
239 { 244 {
240 net::URLRequest request(extension->GetResourceURL("webstore_icon_16.png"), 245 scoped_ptr<net::URLRequest> request(
241 net::DEFAULT_PRIORITY, 246 resource_context_.GetRequestContext()->CreateRequest(
242 &test_delegate_, 247 extension->GetResourceURL("webstore_icon_16.png"),
243 resource_context_.GetRequestContext()); 248 net::DEFAULT_PRIORITY,
244 StartRequest(&request, content::RESOURCE_TYPE_MEDIA); 249 &test_delegate_,
245 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request.status().status()); 250 NULL));
246 CheckForContentLengthHeader(&request); 251 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA);
252 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status());
253 CheckForContentLengthHeader(request.get());
247 } 254 }
248 255
249 // And then test it with the extension disabled. 256 // And then test it with the extension disabled.
250 extension_info_map_->RemoveExtension(extension->id(), 257 extension_info_map_->RemoveExtension(extension->id(),
251 UnloadedExtensionInfo::REASON_DISABLE); 258 UnloadedExtensionInfo::REASON_DISABLE);
252 { 259 {
253 net::URLRequest request(extension->GetResourceURL("webstore_icon_16.png"), 260 scoped_ptr<net::URLRequest> request(
254 net::DEFAULT_PRIORITY, 261 resource_context_.GetRequestContext()->CreateRequest(
255 &test_delegate_, 262 extension->GetResourceURL("webstore_icon_16.png"),
256 resource_context_.GetRequestContext()); 263 net::DEFAULT_PRIORITY,
257 StartRequest(&request, content::RESOURCE_TYPE_MEDIA); 264 &test_delegate_,
258 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request.status().status()); 265 NULL));
259 CheckForContentLengthHeader(&request); 266 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA);
267 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status());
268 CheckForContentLengthHeader(request.get());
260 } 269 }
261 } 270 }
262 271
263 // Tests that a URL request for resource from an extension returns a few 272 // Tests that a URL request for resource from an extension returns a few
264 // expected response headers. 273 // expected response headers.
265 TEST_F(ExtensionProtocolTest, ResourceRequestResponseHeaders) { 274 TEST_F(ExtensionProtocolTest, ResourceRequestResponseHeaders) {
266 // Register a non-incognito extension protocol handler. 275 // Register a non-incognito extension protocol handler.
267 SetProtocolHandler(false); 276 SetProtocolHandler(false);
268 277
269 scoped_refptr<Extension> extension = CreateTestResponseHeaderExtension(); 278 scoped_refptr<Extension> extension = CreateTestResponseHeaderExtension();
270 extension_info_map_->AddExtension(extension.get(), 279 extension_info_map_->AddExtension(extension.get(),
271 base::Time::Now(), 280 base::Time::Now(),
272 false, 281 false,
273 false); 282 false);
274 283
275 { 284 {
276 net::URLRequest request(extension->GetResourceURL("test.dat"), 285 scoped_ptr<net::URLRequest> request(
277 net::DEFAULT_PRIORITY, 286 resource_context_.GetRequestContext()->CreateRequest(
278 &test_delegate_, 287 extension->GetResourceURL("test.dat"),
279 resource_context_.GetRequestContext()); 288 net::DEFAULT_PRIORITY,
280 StartRequest(&request, content::RESOURCE_TYPE_MEDIA); 289 &test_delegate_,
281 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request.status().status()); 290 NULL));
291 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA);
292 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status());
282 293
283 // Check that cache-related headers are set. 294 // Check that cache-related headers are set.
284 std::string etag; 295 std::string etag;
285 request.GetResponseHeaderByName("ETag", &etag); 296 request->GetResponseHeaderByName("ETag", &etag);
286 EXPECT_TRUE(StartsWithASCII(etag, "\"", false)); 297 EXPECT_TRUE(StartsWithASCII(etag, "\"", false));
287 EXPECT_TRUE(EndsWith(etag, "\"", false)); 298 EXPECT_TRUE(EndsWith(etag, "\"", false));
288 299
289 std::string revalidation_header; 300 std::string revalidation_header;
290 request.GetResponseHeaderByName("cache-control", &revalidation_header); 301 request->GetResponseHeaderByName("cache-control", &revalidation_header);
291 EXPECT_EQ("no-cache", revalidation_header); 302 EXPECT_EQ("no-cache", revalidation_header);
292 303
293 // We set test.dat as web-accessible, so it should have a CORS header. 304 // We set test.dat as web-accessible, so it should have a CORS header.
294 std::string access_control; 305 std::string access_control;
295 request.GetResponseHeaderByName("Access-Control-Allow-Origin", 306 request->GetResponseHeaderByName("Access-Control-Allow-Origin",
296 &access_control); 307 &access_control);
297 EXPECT_EQ("*", access_control); 308 EXPECT_EQ("*", access_control);
298 } 309 }
299 } 310 }
300 311
301 // Tests that a URL request for main frame or subframe from an extension 312 // Tests that a URL request for main frame or subframe from an extension
302 // succeeds, but subresources fail. See http://crbug.com/312269. 313 // succeeds, but subresources fail. See http://crbug.com/312269.
303 TEST_F(ExtensionProtocolTest, AllowFrameRequests) { 314 TEST_F(ExtensionProtocolTest, AllowFrameRequests) {
304 // Register a non-incognito extension protocol handler. 315 // Register a non-incognito extension protocol handler.
305 SetProtocolHandler(false); 316 SetProtocolHandler(false);
306 317
307 scoped_refptr<Extension> extension = CreateTestExtension("foo", false); 318 scoped_refptr<Extension> extension = CreateTestExtension("foo", false);
308 extension_info_map_->AddExtension(extension.get(), 319 extension_info_map_->AddExtension(extension.get(),
309 base::Time::Now(), 320 base::Time::Now(),
310 false, 321 false,
311 false); 322 false);
312 323
313 // All MAIN_FRAME and SUB_FRAME requests should succeed. 324 // All MAIN_FRAME and SUB_FRAME requests should succeed.
314 { 325 {
315 net::URLRequest request(extension->GetResourceURL("test.dat"), 326 scoped_ptr<net::URLRequest> request(
316 net::DEFAULT_PRIORITY, 327 resource_context_.GetRequestContext()->CreateRequest(
317 &test_delegate_, 328 extension->GetResourceURL("test.dat"),
318 resource_context_.GetRequestContext()); 329 net::DEFAULT_PRIORITY,
319 StartRequest(&request, content::RESOURCE_TYPE_MAIN_FRAME); 330 &test_delegate_,
320 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request.status().status()); 331 NULL));
332 StartRequest(request.get(), content::RESOURCE_TYPE_MAIN_FRAME);
333 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status());
321 } 334 }
322 { 335 {
323 net::URLRequest request(extension->GetResourceURL("test.dat"), 336 scoped_ptr<net::URLRequest> request(
324 net::DEFAULT_PRIORITY, 337 resource_context_.GetRequestContext()->CreateRequest(
325 &test_delegate_, 338 extension->GetResourceURL("test.dat"),
326 resource_context_.GetRequestContext()); 339 net::DEFAULT_PRIORITY,
327 StartRequest(&request, content::RESOURCE_TYPE_SUB_FRAME); 340 &test_delegate_,
328 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request.status().status()); 341 NULL));
342 StartRequest(request.get(), content::RESOURCE_TYPE_SUB_FRAME);
343 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status());
329 } 344 }
330 345
331 // And subresource types, such as media, should fail. 346 // And subresource types, such as media, should fail.
332 { 347 {
333 net::URLRequest request(extension->GetResourceURL("test.dat"), 348 scoped_ptr<net::URLRequest> request(
334 net::DEFAULT_PRIORITY, 349 resource_context_.GetRequestContext()->CreateRequest(
335 &test_delegate_, 350 extension->GetResourceURL("test.dat"),
336 resource_context_.GetRequestContext()); 351 net::DEFAULT_PRIORITY,
337 StartRequest(&request, content::RESOURCE_TYPE_MEDIA); 352 &test_delegate_,
338 EXPECT_EQ(net::URLRequestStatus::FAILED, request.status().status()); 353 NULL));
354 StartRequest(request.get(), content::RESOURCE_TYPE_MEDIA);
355 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status());
339 } 356 }
340 } 357 }
341 358
342 } // namespace extensions 359 } // namespace extensions
OLDNEW
« no previous file with comments | « content/browser/loader/resource_loader_unittest.cc ('k') | mojo/services/network/url_loader_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698