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

Side by Side Diff: webkit/glue/resource_handle_impl.cc

Issue 46026: Get rid of stashing a frame pointer with ResourceRequest and just store the r... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 9 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
« no previous file with comments | « webkit/glue/resource_fetcher.cc ('k') | webkit/glue/resource_loader_bridge.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 // This file replaces WebCore/platform/network/win/ResourceHandleWin.cpp with a 5 // This file replaces WebCore/platform/network/win/ResourceHandleWin.cpp with a
6 // platform-neutral implementation that simply defers almost entirely to 6 // platform-neutral implementation that simply defers almost entirely to
7 // ResouceLoaderBridge. 7 // ResouceLoaderBridge.
8 // 8 //
9 // This uses the same ResourceHandle.h header file that the rest of WebKit 9 // This uses the same ResourceHandle.h header file that the rest of WebKit
10 // uses, allowing us to avoid complicated changes. Our specific things are 10 // uses, allowing us to avoid complicated changes. Our specific things are
(...skipping 10 matching lines...) Expand all
21 // as long as it doesn't care about canceling the request. Although this is 21 // as long as it doesn't care about canceling the request. Although this is
22 // dumb, we support it. We use pending_ to indicate this extra AddRef, which 22 // dumb, we support it. We use pending_ to indicate this extra AddRef, which
23 // is done in start() and released in OnCompletedRequest. 23 // is done in start() and released in OnCompletedRequest.
24 24
25 #include "config.h" 25 #include "config.h"
26 26
27 #include "base/compiler_specific.h" 27 #include "base/compiler_specific.h"
28 28
29 MSVC_PUSH_WARNING_LEVEL(0); 29 MSVC_PUSH_WARNING_LEVEL(0);
30 #include "CString.h" 30 #include "CString.h"
31 #include "Console.h"
32 #include "DocLoader.h" 31 #include "DocLoader.h"
33 #include "DOMWindow.h"
34 #include "FormData.h" 32 #include "FormData.h"
35 #include "FrameLoader.h" 33 #include "FrameLoader.h"
36 #include "Page.h" 34 #include "Page.h"
37 #include "ResourceError.h" 35 #include "ResourceError.h"
38 #include "ResourceHandle.h" 36 #include "ResourceHandle.h"
39 #include "ResourceHandleClient.h" 37 #include "ResourceHandleClient.h"
40 #include "ResourceRequest.h" 38 #include "ResourceRequest.h"
41 #include "ResourceResponse.h" 39 #include "ResourceResponse.h"
42 MSVC_POP_WARNING(); 40 MSVC_POP_WARNING();
43 41
44 #undef LOG 42 #undef LOG
45 #include "base/logging.h" 43 #include "base/logging.h"
46 #include "base/message_loop.h" 44 #include "base/message_loop.h"
47 #include "base/process_util.h" 45 #include "base/process_util.h"
48 #include "base/time.h" 46 #include "base/time.h"
49 #include "base/string_util.h" 47 #include "base/string_util.h"
50 #include "base/string_tokenizer.h" 48 #include "base/string_tokenizer.h"
51 #include "webkit/glue/feed_preview.h" 49 #include "webkit/glue/feed_preview.h"
52 #include "webkit/glue/glue_util.h" 50 #include "webkit/glue/glue_util.h"
53 #include "webkit/glue/multipart_response_delegate.h" 51 #include "webkit/glue/multipart_response_delegate.h"
54 #include "webkit/glue/resource_loader_bridge.h" 52 #include "webkit/glue/resource_loader_bridge.h"
55 #include "webkit/glue/webframe_impl.h"
56 #include "net/base/data_url.h" 53 #include "net/base/data_url.h"
57 #include "net/base/net_errors.h" 54 #include "net/base/net_errors.h"
58 #include "net/base/net_util.h" 55 #include "net/base/net_util.h"
59 #include "net/base/load_flags.h" 56 #include "net/base/load_flags.h"
60 #include "net/http/http_response_headers.h" 57 #include "net/http/http_response_headers.h"
61 58
62 using webkit_glue::ResourceLoaderBridge; 59 using webkit_glue::ResourceLoaderBridge;
63 using base::Time; 60 using base::Time;
64 using base::TimeDelta; 61 using base::TimeDelta;
65 using net::HttpResponseHeaders; 62 using net::HttpResponseHeaders;
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 302
306 // We are done using the object. ResourceHandle and ResourceHandleInternal 303 // We are done using the object. ResourceHandle and ResourceHandleInternal
307 // might be destroyed now. 304 // might be destroyed now.
308 job_->deref(); 305 job_->deref();
309 } 306 }
310 307
311 bool ResourceHandleInternal::Start( 308 bool ResourceHandleInternal::Start(
312 ResourceLoaderBridge::SyncLoadResponse* sync_load_response) { 309 ResourceLoaderBridge::SyncLoadResponse* sync_load_response) {
313 DCHECK(!bridge_.get()); 310 DCHECK(!bridge_.get());
314 311
315 // The WebFrame is the Frame's FrameWinClient
316 WebFrameImpl* webframe =
317 request_.frame() ? WebFrameImpl::FromFrame(request_.frame()) : NULL;
318
319 CString method = request_.httpMethod().latin1(); 312 CString method = request_.httpMethod().latin1();
320 GURL referrer(webkit_glue::StringToStdString(request_.httpReferrer())); 313 GURL referrer(webkit_glue::StringToStdString(request_.httpReferrer()));
321 314
322 // Compute the URL of the load. 315 // Compute the URL of the load.
323 GURL url = webkit_glue::KURLToGURL(request_.url()); 316 GURL url = webkit_glue::KURLToGURL(request_.url());
324 if (url.SchemeIs("feed:")) { 317 if (url.SchemeIs("feed:")) {
325 // Feed URLs are special, they actually mean "http". 318 // Feed URLs are special, they actually mean "http".
326 url_canon::Replacements<char> replacements; 319 url_canon::Replacements<char> replacements;
327 replacements.SetScheme("http", url_parse::Component(0, 4)); 320 replacements.SetScheme("http", url_parse::Component(0, 4));
328 url = url.ReplaceComponents(replacements); 321 url = url.ReplaceComponents(replacements);
329 322
330 // Replace our client with a client that understands previewing feeds 323 // Replace our client with a client that understands previewing feeds
331 // and forwards the feeds along to the original client. 324 // and forwards the feeds along to the original client.
332 feed_client_proxy_.reset(new FeedClientProxy(client_)); 325 feed_client_proxy_.reset(new FeedClientProxy(client_));
333 client_ = feed_client_proxy_.get(); 326 client_ = feed_client_proxy_.get();
334 } 327 }
335 328
336 // Inherit the policy URL from the request's frame. However, if the request
337 // is for a main frame, the current document's policyBaseURL is the old
338 // document, so we leave policyURL empty to indicate that the request is a
339 // first-party request.
340 GURL policy_url;
341 if (request_.targetType() != ResourceRequest::TargetIsMainFrame &&
342 request_.frame() && request_.frame()->document()) {
343 policy_url = GURL(webkit_glue::StringToStdString(
344 request_.frame()->document()->policyBaseURL()));
345 }
346
347 switch (request_.cachePolicy()) { 329 switch (request_.cachePolicy()) {
348 case ReloadIgnoringCacheData: 330 case ReloadIgnoringCacheData:
349 // Required by LayoutTests/http/tests/misc/refresh-headers.php 331 // Required by LayoutTests/http/tests/misc/refresh-headers.php
350 load_flags_ |= net::LOAD_VALIDATE_CACHE; 332 load_flags_ |= net::LOAD_VALIDATE_CACHE;
351 break; 333 break;
352 case ReturnCacheDataElseLoad: 334 case ReturnCacheDataElseLoad:
353 load_flags_ |= net::LOAD_PREFERRING_CACHE; 335 load_flags_ |= net::LOAD_PREFERRING_CACHE;
354 break; 336 break;
355 case ReturnCacheDataDontLoad: 337 case ReturnCacheDataDontLoad:
356 load_flags_ |= net::LOAD_ONLY_FROM_CACHE; 338 load_flags_ |= net::LOAD_ONLY_FROM_CACHE;
(...skipping 30 matching lines...) Expand all
387 // Skip over "Cache-Control: max-age=0" header if the corresponding 369 // Skip over "Cache-Control: max-age=0" header if the corresponding
388 // load flag is already specified. FrameLoader sets both the flag and 370 // load flag is already specified. FrameLoader sets both the flag and
389 // the extra header -- the extra header is redundant since our network 371 // the extra header -- the extra header is redundant since our network
390 // implementation will add the necessary headers based on load flags. 372 // implementation will add the necessary headers based on load flags.
391 // See http://code.google.com/p/chromium/issues/detail?id=3434. 373 // See http://code.google.com/p/chromium/issues/detail?id=3434.
392 if ((load_flags_ & net::LOAD_VALIDATE_CACHE) && 374 if ((load_flags_ & net::LOAD_VALIDATE_CACHE) &&
393 equalIgnoringCase((*it).first, "cache-control") && 375 equalIgnoringCase((*it).first, "cache-control") &&
394 (*it).second == "max-age=0") 376 (*it).second == "max-age=0")
395 continue; 377 continue;
396 378
397 // WinInet dies if blank headers are set. TODO(darin): Is this still an
398 // issue now that we are using WinHTTP?
399 if ((*it).first.isEmpty()) {
400 webframe->frame()->domWindow()->console()->addMessage(
401 JSMessageSource,
402 ErrorMessageLevel,
403 "Refused to set blank header",
404 1,
405 String());
406 continue;
407 }
408 if (!headerBuf.isEmpty()) 379 if (!headerBuf.isEmpty())
409 headerBuf.append(crlf); 380 headerBuf.append(crlf);
410 headerBuf.append((*it).first + sep + (*it).second); 381 headerBuf.append((*it).first + sep + (*it).second);
411 } 382 }
412 383
413 // TODO(jcampan): in the non out-of-process plugin case the request does not 384 // TODO(jcampan): in the non out-of-process plugin case the request does not
414 // have a origin_pid. Find a better place to set this. 385 // have a requestor_pid. Find a better place to set this.
415 int origin_pid = request_.originPid(); 386 int requestor_pid = request_.requestorProcessID();
416 if (origin_pid == 0) 387 if (requestor_pid == 0)
417 origin_pid = base::GetCurrentProcId(); 388 requestor_pid = base::GetCurrentProcId();
418 389
419 bool mixed_content = 390 bool mixed_content =
420 webkit_glue::KURLToGURL(request_.mainDocumentURL()).SchemeIsSecure() && 391 webkit_glue::KURLToGURL(request_.mainDocumentURL()).SchemeIsSecure() &&
421 !url.SchemeIsSecure(); 392 !url.SchemeIsSecure();
422 393
423 if (url.SchemeIs("data")) { 394 if (url.SchemeIs("data")) {
424 if (sync_load_response) { 395 if (sync_load_response) {
425 // This is a sync load. Do the work now. 396 // This is a sync load. Do the work now.
426 sync_load_response->url = url; 397 sync_load_response->url = url;
427 std::string data; 398 std::string data;
428 GetInfoFromDataUrl(sync_load_response->url, sync_load_response, 399 GetInfoFromDataUrl(sync_load_response->url, sync_load_response,
429 &sync_load_response->data, 400 &sync_load_response->data,
430 &sync_load_response->status); 401 &sync_load_response->status);
431 } else { 402 } else {
432 pending_ = true; 403 pending_ = true;
433 job_->ref(); // to be released when we get a OnCompletedRequest. 404 job_->ref(); // to be released when we get a OnCompletedRequest.
434 job_->ref(); // to be released when HandleDataUrl is completed. 405 job_->ref(); // to be released when HandleDataUrl is completed.
435 MessageLoop::current()->PostTask(FROM_HERE, 406 MessageLoop::current()->PostTask(FROM_HERE,
436 data_url_factory_.NewRunnableMethod( 407 data_url_factory_.NewRunnableMethod(
437 &ResourceHandleInternal::HandleDataUrl)); 408 &ResourceHandleInternal::HandleDataUrl));
438 } 409 }
439 return true; 410 return true;
440 } 411 }
441 412
442 // TODO(darin): is latin1 really correct here? It is if the strings are 413 // TODO(darin): is latin1 really correct here? It is if the strings are
443 // already ASCII (i.e., if they are already escaped properly). 414 // already ASCII (i.e., if they are already escaped properly).
444 // TODO(brettw) this should take parameter encoding into account when 415 // TODO(brettw) this should take parameter encoding into account when
445 // creating the GURLs. 416 // creating the GURLs.
446 bridge_.reset(ResourceLoaderBridge::Create( 417 bridge_.reset(ResourceLoaderBridge::Create(
447 webframe,
448 webkit_glue::CStringToStdString(method), 418 webkit_glue::CStringToStdString(method),
449 url, 419 url,
450 policy_url, 420 webkit_glue::KURLToGURL(request_.policyURL()),
451 referrer, 421 referrer,
452 webkit_glue::CStringToStdString(headerBuf.latin1()), 422 webkit_glue::CStringToStdString(headerBuf.latin1()),
453 load_flags_, 423 load_flags_,
454 origin_pid, 424 requestor_pid,
455 FromTargetType(request_.targetType()), 425 FromTargetType(request_.targetType()),
456 mixed_content)); 426 mixed_content,
427 request_.requestorID()));
457 if (!bridge_.get()) 428 if (!bridge_.get())
458 return false; 429 return false;
459 430
460 if (request_.httpBody()) { 431 if (request_.httpBody()) {
461 // GET and HEAD requests shouldn't have http bodies. 432 // GET and HEAD requests shouldn't have http bodies.
462 DCHECK(method != "GET" && method != "HEAD"); 433 DCHECK(method != "GET" && method != "HEAD");
463 const Vector<FormDataElement>& elements = request_.httpBody()->elements(); 434 const Vector<FormDataElement>& elements = request_.httpBody()->elements();
464 size_t n = elements.size(); 435 size_t n = elements.size();
465 for (size_t i = 0; i < n; ++i) { 436 for (size_t i = 0; i < n; ++i) {
466 const FormDataElement& e = elements[static_cast<unsigned>(i)]; 437 const FormDataElement& e = elements[static_cast<unsigned>(i)];
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
776 // if the request cannot be serviced from cache. We force the 'DontLoad' 747 // if the request cannot be serviced from cache. We force the 'DontLoad'
777 // cache policy at this point to ensure that we never hit the network for 748 // cache policy at this point to ensure that we never hit the network for
778 // this request. 749 // this request.
779 // 750 //
780 DCHECK(request.httpMethod() == "POST"); 751 DCHECK(request.httpMethod() == "POST");
781 request.setCachePolicy(ReturnCacheDataDontLoad); 752 request.setCachePolicy(ReturnCacheDataDontLoad);
782 return true; 753 return true;
783 } 754 }
784 755
785 } // namespace WebCore 756 } // namespace WebCore
OLDNEW
« no previous file with comments | « webkit/glue/resource_fetcher.cc ('k') | webkit/glue/resource_loader_bridge.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698