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

Side by Side Diff: content/browser/tab_contents/tab_contents.cc

Issue 9314037: Save As for content retrieved via POST works in most circumstances. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 8 years, 10 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 | « content/browser/tab_contents/tab_contents.h ('k') | content/public/browser/download_manager.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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/browser/tab_contents/tab_contents.h" 5 #include "content/browser/tab_contents/tab_contents.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 916 matching lines...) Expand 10 before | Expand all | Expand 10 after
927 contents_mime_type_ == "text/xml" || 927 contents_mime_type_ == "text/xml" ||
928 contents_mime_type_ == "application/xhtml+xml" || 928 contents_mime_type_ == "application/xhtml+xml" ||
929 contents_mime_type_ == "text/plain" || 929 contents_mime_type_ == "text/plain" ||
930 contents_mime_type_ == "text/css" || 930 contents_mime_type_ == "text/css" ||
931 net::IsSupportedJavascriptMimeType(contents_mime_type_.c_str()); 931 net::IsSupportedJavascriptMimeType(contents_mime_type_.c_str());
932 } 932 }
933 933
934 void TabContents::OnSavePage() { 934 void TabContents::OnSavePage() {
935 // If we can not save the page, try to download it. 935 // If we can not save the page, try to download it.
936 if (!IsSavable()) { 936 if (!IsSavable()) {
937 DownloadManager* dlm = GetBrowserContext()->GetDownloadManager(); 937 SaveURL(GetURL(), GURL());
938 const GURL& current_page_url = GetURL(); 938 download_stats::RecordDownloadCount(
939 if (dlm && current_page_url.is_valid()) { 939 download_stats::INITIATED_BY_SAVE_PACKAGE_FAILURE_COUNT);
940 DownloadSaveInfo save_info; 940 return;
941 save_info.prompt_for_save_location = true;
942 dlm->DownloadUrl(current_page_url,
943 GURL(),
944 "",
945 true, // prefer_cache
946 save_info,
947 this);
948 download_stats::RecordDownloadCount(
949 download_stats::INITIATED_BY_SAVE_PACKAGE_FAILURE_COUNT);
950 return;
951 }
952 } 941 }
953 942
954 Stop(); 943 Stop();
955 944
956 // Create the save package and possibly prompt the user for the name to save 945 // Create the save package and possibly prompt the user for the name to save
957 // the page as. The user prompt is an asynchronous operation that runs on 946 // the page as. The user prompt is an asynchronous operation that runs on
958 // another thread. 947 // another thread.
959 save_package_ = new SavePackage(this); 948 save_package_ = new SavePackage(this);
960 save_package_->GetSaveInfo(); 949 save_package_->GetSaveInfo();
961 } 950 }
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after
1418 1407
1419 void TabContents::OnUpdateZoomLimits(int minimum_percent, 1408 void TabContents::OnUpdateZoomLimits(int minimum_percent,
1420 int maximum_percent, 1409 int maximum_percent,
1421 bool remember) { 1410 bool remember) {
1422 minimum_zoom_percent_ = minimum_percent; 1411 minimum_zoom_percent_ = minimum_percent;
1423 maximum_zoom_percent_ = maximum_percent; 1412 maximum_zoom_percent_ = maximum_percent;
1424 temporary_zoom_settings_ = !remember; 1413 temporary_zoom_settings_ = !remember;
1425 } 1414 }
1426 1415
1427 void TabContents::OnSaveURL(const GURL& url) { 1416 void TabContents::OnSaveURL(const GURL& url) {
1428 DownloadManager* dlm = GetBrowserContext()->GetDownloadManager(); 1417 SaveURL(url, GetURL());
1429 DownloadSaveInfo save_info;
1430 save_info.prompt_for_save_location = true;
1431 dlm->DownloadUrl(url, GetURL(), "", true, save_info, this);
1432 } 1418 }
1433 1419
1434 void TabContents::OnEnumerateDirectory(int request_id, 1420 void TabContents::OnEnumerateDirectory(int request_id,
1435 const FilePath& path) { 1421 const FilePath& path) {
1436 delegate_->EnumerateDirectory(this, request_id, path); 1422 delegate_->EnumerateDirectory(this, request_id, path);
1437 } 1423 }
1438 1424
1439 void TabContents::OnJSOutOfMemory() { 1425 void TabContents::OnJSOutOfMemory() {
1440 delegate_->JSOutOfMemory(this); 1426 delegate_->JSOutOfMemory(this);
1441 } 1427 }
(...skipping 839 matching lines...) Expand 10 before | Expand all | Expand 10 after
2281 } 2267 }
2282 is_showing_before_unload_dialog_ = false; 2268 is_showing_before_unload_dialog_ = false;
2283 rvh->JavaScriptDialogClosed(reply_msg, success, user_input); 2269 rvh->JavaScriptDialogClosed(reply_msg, success, user_input);
2284 } 2270 }
2285 2271
2286 void TabContents::SetEncoding(const std::string& encoding) { 2272 void TabContents::SetEncoding(const std::string& encoding) {
2287 encoding_ = content::GetContentClient()->browser()-> 2273 encoding_ = content::GetContentClient()->browser()->
2288 GetCanonicalEncodingNameByAliasName(encoding); 2274 GetCanonicalEncodingNameByAliasName(encoding);
2289 } 2275 }
2290 2276
2277 void TabContents::SaveURL(const GURL& url, const GURL& referrer) {
2278 DownloadManager* dlm = GetBrowserContext()->GetDownloadManager();
2279 if (!dlm)
2280 return;
2281 int64 post_id = -1;
2282 // Check if the URL to save matches the URL of the page itself. One
2283 // circumstance where this may not happen is when a Pepper plugin initiates
2284 // a save.
2285 if (url == GetURL()) {
2286 const NavigationEntry* entry = controller_.GetActiveEntry();
2287 if (entry)
2288 post_id = entry->GetPostID();
2289 }
2290 DownloadSaveInfo save_info;
2291 save_info.prompt_for_save_location = true;
2292 dlm->DownloadUrl(url,
2293 referrer,
2294 "",
2295 true, // prefer_cache
2296 post_id,
2297 save_info,
2298 this);
2299 }
2300
2291 void TabContents::CreateViewAndSetSizeForRVH(RenderViewHost* rvh) { 2301 void TabContents::CreateViewAndSetSizeForRVH(RenderViewHost* rvh) {
2292 RenderWidgetHostView* rwh_view = GetView()->CreateViewForWidget(rvh); 2302 RenderWidgetHostView* rwh_view = GetView()->CreateViewForWidget(rvh);
2293 // Can be NULL during tests. 2303 // Can be NULL during tests.
2294 if (rwh_view) 2304 if (rwh_view)
2295 rwh_view->SetSize(GetView()->GetContainerSize()); 2305 rwh_view->SetSize(GetView()->GetContainerSize());
2296 } 2306 }
OLDNEW
« no previous file with comments | « content/browser/tab_contents/tab_contents.h ('k') | content/public/browser/download_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698