1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Download utilities.
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_DOWNLOAD_DOWNLOAD_UTIL_H_
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_UTIL_H_
93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <string>
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/basictypes.h"
143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/file_path.h"
153f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "base/string16.h"
1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/native_widget_types.h"
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(TOOLKIT_VIEWS)
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/view.h"
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace gfx {
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Canvas;
24dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass Image;
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass BaseDownloadItemModel;
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass DictionaryValue;
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass DownloadItem;
303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass DownloadManager;
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass GURL;
323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass Profile;
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass ResourceDispatcherHost;
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass SkBitmap;
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickstruct DownloadCreateInfo;
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct DownloadSaveInfo;
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsennamespace net {
40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass URLRequestContextGetter;
41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace download_util {
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Download temporary file creation --------------------------------------------
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Return the default download directory.
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst FilePath& GetDefaultDownloadDirectory();
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Create a temporary file for a download in the user's default download
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// directory and return true if was successful in creating the file.
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool CreateTemporaryFileForDownload(FilePath* path);
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Return true if the |download_path| is dangerous path.
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool DownloadPathIsDangerous(const FilePath& download_path);
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Create an extension based on the file name and mime type.
583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid GenerateExtension(const FilePath& file_name,
593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                       const std::string& mime_type,
603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                       FilePath::StringType* generated_extension);
613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Create a file name based on the response from the server.
633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid GenerateFileNameFromInfo(DownloadCreateInfo* info,
643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                              FilePath* generated_name);
653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Create a file name based on the response from the server.
673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid GenerateFileName(const GURL& url,
683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                      const std::string& content_disposition,
693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                      const std::string& referrer_charset,
703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                      const std::string& mime_type,
713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                      FilePath* generated_name);
723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Used to make sure we have a safe file extension and filename for a
743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// download.  |file_name| can either be just the file name or it can be a
753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// full path to a file.
763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid GenerateSafeFileName(const std::string& mime_type, FilePath* file_name);
773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Opens downloaded Chrome extension file (*.crx).
793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid OpenChromeExtension(Profile* profile,
803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                         DownloadManager* download_manager,
813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                         const DownloadItem& download_item);
823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Download progress animations ------------------------------------------------
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Arc sweep angle for use with downloads of unknown size
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst int kUnknownAngleDegrees = 50;
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Rate of progress for use with downloads of unknown size
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst int kUnknownIncrementDegrees = 12;
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Start angle for downloads with known size (midnight position)
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst int kStartAngleDegrees = -90;
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// A circle
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst int kMaxDegrees = 360;
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Progress animation timer period, in milliseconds.
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst int kProgressRateMs = 150;
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// XP and Vista must support icons of this size.
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst int kSmallIconSize = 16;
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst int kBigIconSize = 32;
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Our progress halo around the icon.
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochint GetBigProgressIconSize();
106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst int kSmallProgressIconSize = 39;
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst int kBigProgressIconSize = 52;
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The offset required to center the icon in the progress bitmaps.
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochint GetBigProgressIconOffset();
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochconst int kSmallProgressIconOffset =
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    (kSmallProgressIconSize - kSmallIconSize) / 2;
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochenum PaintDownloadProgressSize {
117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  SMALL = 0,
118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BIG
119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// We keep a count of how often various events occur in the
122ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// histogram "Download.Counts".
123ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenenum DownloadCountTypes {
124ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // The download was initiated by navigating to a URL (e.g. by user
125ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // click).
126ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  INITIATED_BY_NAVIGATION_COUNT = 0,
127ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
128ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // The download was initiated by invoking a context menu within a page.
129ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  INITIATED_BY_CONTEXT_MENU_COUNT,
130ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
131ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // The download was initiated when the SavePackage system rejected
132ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // a Save Page As ... by returning false from
133ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // SavePackage::IsSaveableContents().
134ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  INITIATED_BY_SAVE_PACKAGE_FAILURE_COUNT,
135ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
136ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // The download was initiated by a drag and drop from a drag-and-drop
137ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // enabled web application.
138ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  INITIATED_BY_DRAG_N_DROP_COUNT,
139ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
140ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // The download was initiated by explicit RPC from the renderer process
141ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // (e.g. by Alt-click).
142ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  INITIATED_BY_RENDERER_COUNT,
143ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
144ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Downloads that made it to DownloadResourceHandler -- all of the
145ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // above minus those blocked by DownloadThrottlingResourceHandler.
146ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  UNTHROTTLED_COUNT,
147ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
148ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Downloads that actually complete.
149ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  COMPLETED_COUNT,
150ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
151ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Downloads that are cancelled before completion (user action or error).
152ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  CANCELLED_COUNT,
153ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
154ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  DOWNLOAD_COUNT_TYPES_LAST_ENTRY
155ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen};
156ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
157ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Increment one of the above counts.
158ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid RecordDownloadCount(DownloadCountTypes type);
159ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Paint the common download animation progress foreground and background,
161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// clipping the foreground to 'percent' full. If percent is -1, then we don't
162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// know the total size, so we just draw a rotating segment until we're done.
163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// |containing_view| is the View subclass within which the progress animation
165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// is drawn (generally either DownloadItemTabView or DownloadItemView). We
166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// require the containing View in addition to the canvas because if we are
167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// drawing in a right-to-left locale, we need to mirror the position of the
168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// progress animation within the containing View.
169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid PaintDownloadProgress(gfx::Canvas* canvas,
170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(TOOLKIT_VIEWS)
171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           views::View* containing_view,
172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           int origin_x,
174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           int origin_y,
175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           int start_angle,
176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           int percent,
177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           PaintDownloadProgressSize size);
178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid PaintDownloadComplete(gfx::Canvas* canvas,
180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined(TOOLKIT_VIEWS)
181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           views::View* containing_view,
182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           int origin_x,
184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           int origin_y,
185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           double animation_progress,
186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           PaintDownloadProgressSize size);
187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
188ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenvoid PaintDownloadInterrupted(gfx::Canvas* canvas,
189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#if defined(TOOLKIT_VIEWS)
190ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                              views::View* containing_view,
191ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif
192ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                              int origin_x,
193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                              int origin_y,
194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                              double animation_progress,
195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                              PaintDownloadProgressSize size);
196ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Drag support ----------------------------------------------------------------
198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Helper function for download views to use when acting as a drag source for a
200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// DownloadItem. If |icon| is NULL, no image will be accompany the drag. |view|
201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// is only required for Mac OS X, elsewhere it can be NULL.
202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid DragDownload(const DownloadItem* download,
203dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen                  gfx::Image* icon,
204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                  gfx::NativeView view);
205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Helpers ---------------------------------------------------------------------
207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Creates a representation of a download in a format that the downloads
209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// HTML page can understand.
210c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochDictionaryValue* CreateDownloadItemValue(DownloadItem* download, int id);
211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Get the localized status text for an in-progress download.
2133f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsenstring16 GetProgressStatusText(DownloadItem* download);
214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Update the application icon to indicate overall download progress.
216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// |download_count| is the number of downloads currently in progress. If
217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// |progress_known| is false, then at least one download is of indeterminate
218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// size and |progress| is invalid, otherwise |progress| indicates the overall
219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// download progress (float value from 0..1).
220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid UpdateAppIconDownloadProgress(int download_count,
221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                   bool progress_known,
222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                   float progress);
223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Appends the passed the number between parenthesis the path before the
225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// extension.
226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid AppendNumberToPath(FilePath* path, int number);
227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Attempts to find a number that can be appended to that path to make it
229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// unique. If |path| does not exist, 0 is returned.  If it fails to find such
230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// a number, -1 is returned.
231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochint GetUniquePathNumber(const FilePath& path);
232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Download the URL. Must be called on the IO thread.
234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid DownloadUrl(const GURL& url,
235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 const GURL& referrer,
236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 const std::string& referrer_charset,
237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 const DownloadSaveInfo& save_info,
238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 ResourceDispatcherHost* rdh,
239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 int render_process_host_id,
240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 int render_view_id,
241ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                 net::URLRequestContextGetter* request_context_getter);
242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Tells the resource dispatcher host to cancel a download request.
244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Must be called on the IO thread.
245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid CancelDownloadRequest(ResourceDispatcherHost* rdh,
246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           int render_process_id,
247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                           int request_id);
248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
249dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Sends a notification on downloads being initiated
250dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Must be called on the UI thread.
251dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid NotifyDownloadInitiated(int render_process_id, int render_view_id);
252dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen
253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Same as GetUniquePathNumber, except that it also checks the existence
254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// of its .crdownload intermediate path.
255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// If |path| does not exist, 0 is returned.  If it fails to find such
256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// a number, -1 is returned.
257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochint GetUniquePathNumberWithCrDownload(const FilePath& path);
258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Erases all downloaded files with the specified path and name prefix.
2604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch// Used by download UI tests to clean up the download directory.
2614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochvoid EraseUniqueDownloadFiles(const FilePath& path_prefix);
2624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch
263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Returns a .crdownload intermediate path for the |suggested_path|.
264c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochFilePath GetCrDownloadPath(const FilePath& suggested_path);
265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
26672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Returns true if this download should show the "dangerous file" warning.
26772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Various factors are considered, such as the type of the file, whether a
26872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// user action initiated the download, and whether the user has explictly
26972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// marked the file type as "auto open".
27072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenbool IsDangerous(DownloadCreateInfo* info, Profile* profile, bool auto_open);
271731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick
272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace download_util
273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_UTIL_H_
275