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