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

Side by Side Diff: Source/core/loader/DocumentLoader.cpp

Issue 22982011: Reland "Fix form resubmissions happening silently." (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 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 | Annotate | Revision Log
« no previous file with comments | « Source/core/loader/DocumentLoader.h ('k') | Source/core/loader/FrameLoader.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved.
3 * Copyright (C) 2011 Google Inc. All rights reserved. 3 * Copyright (C) 2011 Google Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 8 *
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
318 // If the document specified an application cache manifest, it violates the author's intent if we store it in the memory cache 318 // If the document specified an application cache manifest, it violates the author's intent if we store it in the memory cache
319 // and deny the appcache the chance to intercept it in the future, so remove from the memory cache. 319 // and deny the appcache the chance to intercept it in the future, so remove from the memory cache.
320 if (m_frame) { 320 if (m_frame) {
321 if (m_mainResource && m_frame->document()->hasManifest()) 321 if (m_mainResource && m_frame->document()->hasManifest())
322 memoryCache()->remove(m_mainResource.get()); 322 memoryCache()->remove(m_mainResource.get());
323 } 323 }
324 m_applicationCacheHost->finishedLoadingMainResource(); 324 m_applicationCacheHost->finishedLoadingMainResource();
325 clearMainResourceHandle(); 325 clearMainResourceHandle();
326 } 326 }
327 327
328 bool DocumentLoader::isPostOrRedirectAfterPost(const ResourceRequest& newRequest , const ResourceResponse& redirectResponse) 328 bool DocumentLoader::isRedirectAfterPost(const ResourceRequest& newRequest, cons t ResourceResponse& redirectResponse)
329 { 329 {
330 if (newRequest.httpMethod() == "POST")
331 return true;
332
333 int status = redirectResponse.httpStatusCode(); 330 int status = redirectResponse.httpStatusCode();
334 if (((status >= 301 && status <= 303) || status == 307) 331 if (((status >= 301 && status <= 303) || status == 307)
335 && m_originalRequest.httpMethod() == "POST") 332 && m_originalRequest.httpMethod() == "POST")
336 return true; 333 return true;
337 334
338 return false; 335 return false;
339 } 336 }
340 337
341 void DocumentLoader::handleSubstituteDataLoadNow(DocumentLoaderTimer*) 338 void DocumentLoader::handleSubstituteDataLoadNow(DocumentLoaderTimer*)
342 { 339 {
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 } 425 }
429 426
430 // Update cookie policy base URL as URL changes, except for subframes, which use the 427 // Update cookie policy base URL as URL changes, except for subframes, which use the
431 // URL of the main frame which doesn't change when we redirect. 428 // URL of the main frame which doesn't change when we redirect.
432 if (frameLoader()->isLoadingMainFrame()) 429 if (frameLoader()->isLoadingMainFrame())
433 newRequest.setFirstPartyForCookies(newRequest.url()); 430 newRequest.setFirstPartyForCookies(newRequest.url());
434 431
435 // If we're fielding a redirect in response to a POST, force a load from ori gin, since 432 // If we're fielding a redirect in response to a POST, force a load from ori gin, since
436 // this is a common site technique to return to a page viewing some data tha t the POST 433 // this is a common site technique to return to a page viewing some data tha t the POST
437 // just modified. 434 // just modified.
438 // Also, POST requests always load from origin, but this does not affect sub resources. 435 if (newRequest.cachePolicy() == UseProtocolCachePolicy && isRedirectAfterPos t(newRequest, redirectResponse))
439 if (newRequest.cachePolicy() == UseProtocolCachePolicy && isPostOrRedirectAf terPost(newRequest, redirectResponse))
440 newRequest.setCachePolicy(ReloadIgnoringCacheData); 436 newRequest.setCachePolicy(ReloadIgnoringCacheData);
441 437
442 Frame* parent = m_frame->tree()->parent(); 438 Frame* parent = m_frame->tree()->parent();
443 if (parent) { 439 if (parent) {
444 if (!parent->loader()->mixedContentChecker()->canRunInsecureContent(pare nt->document()->securityOrigin(), newRequest.url())) { 440 if (!parent->loader()->mixedContentChecker()->canRunInsecureContent(pare nt->document()->securityOrigin(), newRequest.url())) {
445 cancelMainResourceLoad(ResourceError::cancelledError(newRequest.url( ))); 441 cancelMainResourceLoad(ResourceError::cancelledError(newRequest.url( )));
446 return; 442 return;
447 } 443 }
448 } 444 }
449 445
(...skipping 500 matching lines...) Expand 10 before | Expand all | Expand 10 after
950 void DocumentLoader::replaceDocument(const String& source, Document* ownerDocume nt) 946 void DocumentLoader::replaceDocument(const String& source, Document* ownerDocume nt)
951 { 947 {
952 m_frame->loader()->stopAllLoaders(); 948 m_frame->loader()->stopAllLoaders();
953 m_writer = createWriterFor(m_frame, ownerDocument, m_frame->document()->url( ), mimeType(), m_writer ? m_writer->encoding() : "", m_writer ? m_writer->encod ingWasChosenByUser() : false, true); 949 m_writer = createWriterFor(m_frame, ownerDocument, m_frame->document()->url( ), mimeType(), m_writer ? m_writer->encoding() : "", m_writer ? m_writer->encod ingWasChosenByUser() : false, true);
954 if (!source.isNull()) 950 if (!source.isNull())
955 m_writer->appendReplacingData(source); 951 m_writer->appendReplacingData(source);
956 endWriting(m_writer.get()); 952 endWriting(m_writer.get());
957 } 953 }
958 954
959 } // namespace WebCore 955 } // namespace WebCore
OLDNEW
« no previous file with comments | « Source/core/loader/DocumentLoader.h ('k') | Source/core/loader/FrameLoader.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698