| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 #ifndef CHROME_BROWSER_DOWNLOAD_DOWNLOAD_TARGET_DETERMINER_H_ | 5 #ifndef CHROME_BROWSER_DOWNLOAD_DOWNLOAD_TARGET_DETERMINER_H_ |
| 6 #define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_TARGET_DETERMINER_H_ | 6 #define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_TARGET_DETERMINER_H_ |
| 7 | 7 |
| 8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
| 9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 72 // Start() should be called on the UI thread. | 72 // Start() should be called on the UI thread. |
| 73 static void Start(content::DownloadItem* download, | 73 static void Start(content::DownloadItem* download, |
| 74 const base::FilePath& initial_virtual_path, | 74 const base::FilePath& initial_virtual_path, |
| 75 DownloadPrefs* download_prefs, | 75 DownloadPrefs* download_prefs, |
| 76 DownloadTargetDeterminerDelegate* delegate, | 76 DownloadTargetDeterminerDelegate* delegate, |
| 77 const CompletionCallback& callback); | 77 const CompletionCallback& callback); |
| 78 | 78 |
| 79 // Returns a .crdownload intermediate path for the |suggested_path|. | 79 // Returns a .crdownload intermediate path for the |suggested_path|. |
| 80 static base::FilePath GetCrDownloadPath(const base::FilePath& suggested_path); | 80 static base::FilePath GetCrDownloadPath(const base::FilePath& suggested_path); |
| 81 | 81 |
| 82 #if defined(OS_WIN) |
| 83 // Returns true if Adobe Reader is up to date. This information refreshed |
| 84 // only when Start() gets called for a PDF and Adobe Reader is the default |
| 85 // System PDF viewer. |
| 86 static bool IsAdobeReaderUpToDate(); |
| 87 #endif |
| 88 |
| 82 private: | 89 private: |
| 83 // The main workflow is controlled via a set of state transitions. Each state | 90 // The main workflow is controlled via a set of state transitions. Each state |
| 84 // has an associated handler. The handler for STATE_FOO is DoFoo. Each handler | 91 // has an associated handler. The handler for STATE_FOO is DoFoo. Each handler |
| 85 // performs work, determines the next state to transition to and returns a | 92 // performs work, determines the next state to transition to and returns a |
| 86 // Result indicating how the workflow should proceed. The loop ends when a | 93 // Result indicating how the workflow should proceed. The loop ends when a |
| 87 // handler returns COMPLETE. | 94 // handler returns COMPLETE. |
| 88 enum State { | 95 enum State { |
| 89 STATE_GENERATE_TARGET_PATH, | 96 STATE_GENERATE_TARGET_PATH, |
| 90 STATE_NOTIFY_EXTENSIONS, | 97 STATE_NOTIFY_EXTENSIONS, |
| 91 STATE_RESERVE_VIRTUAL_PATH, | 98 STATE_RESERVE_VIRTUAL_PATH, |
| 92 STATE_PROMPT_USER_FOR_DOWNLOAD_PATH, | 99 STATE_PROMPT_USER_FOR_DOWNLOAD_PATH, |
| 93 STATE_DETERMINE_LOCAL_PATH, | 100 STATE_DETERMINE_LOCAL_PATH, |
| 94 STATE_DETERMINE_MIME_TYPE, | 101 STATE_DETERMINE_MIME_TYPE, |
| 95 STATE_DETERMINE_IF_HANDLED_SAFELY_BY_BROWSER, | 102 STATE_DETERMINE_IF_HANDLED_SAFELY_BY_BROWSER, |
| 103 STATE_DETERMINE_IF_ADOBE_READER_UP_TO_DATE, |
| 96 STATE_CHECK_DOWNLOAD_URL, | 104 STATE_CHECK_DOWNLOAD_URL, |
| 97 STATE_CHECK_VISITED_REFERRER_BEFORE, | 105 STATE_CHECK_VISITED_REFERRER_BEFORE, |
| 98 STATE_DETERMINE_INTERMEDIATE_PATH, | 106 STATE_DETERMINE_INTERMEDIATE_PATH, |
| 99 STATE_NONE, | 107 STATE_NONE, |
| 100 }; | 108 }; |
| 101 | 109 |
| 102 // Result code returned by each step of the workflow below. Controls execution | 110 // Result code returned by each step of the workflow below. Controls execution |
| 103 // of DoLoop(). | 111 // of DoLoop(). |
| 104 enum Result { | 112 enum Result { |
| 105 // Continue processing. next_state_ is required to not be STATE_NONE. | 113 // Continue processing. next_state_ is required to not be STATE_NONE. |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 198 // - STATE_DETERMINE_IF_HANDLED_SAFELY_BY_BROWSER. | 206 // - STATE_DETERMINE_IF_HANDLED_SAFELY_BY_BROWSER. |
| 199 Result DoDetermineMimeType(); | 207 Result DoDetermineMimeType(); |
| 200 | 208 |
| 201 // Callback invoked when the MIME type is available. Since determination of | 209 // Callback invoked when the MIME type is available. Since determination of |
| 202 // the MIME type can involve disk access, it is done in the blocking pool. | 210 // the MIME type can involve disk access, it is done in the blocking pool. |
| 203 void DetermineMimeTypeDone(const std::string& mime_type); | 211 void DetermineMimeTypeDone(const std::string& mime_type); |
| 204 | 212 |
| 205 // Determine if the file type can be handled safely by the browser if it were | 213 // Determine if the file type can be handled safely by the browser if it were |
| 206 // to be opened via a file:// URL. | 214 // to be opened via a file:// URL. |
| 207 // Next state: | 215 // Next state: |
| 208 // - STATE_CHECK_DOWNLOAD_URL. | 216 // - STATE_DETERMINE_IF_ADOBE_READER_UP_TO_DATE. |
| 209 Result DoDetermineIfHandledSafely(); | 217 Result DoDetermineIfHandledSafely(); |
| 210 | 218 |
| 219 #if defined(ENABLE_PLUGINS) |
| 211 // Callback invoked when a decision is available about whether the file type | 220 // Callback invoked when a decision is available about whether the file type |
| 212 // can be handled safely by the browser. | 221 // can be handled safely by the browser. |
| 213 void DetermineIfHandledSafelyDone(bool is_handled_safely); | 222 void DetermineIfHandledSafelyDone(bool is_handled_safely); |
| 223 #endif |
| 224 |
| 225 // Determine if Adobe Reader is up to date. Only do the check on Windows for |
| 226 // .pdf file targets. |
| 227 // Next state: |
| 228 // - STATE_CHECK_DOWNLOAD_URL. |
| 229 Result DoDetermineIfAdobeReaderUpToDate(); |
| 230 |
| 231 #if defined(OS_WIN) |
| 232 // Callback invoked when a decision is available about whether Adobe Reader |
| 233 // is up to date. |
| 234 void DetermineIfAdobeReaderUpToDateDone(bool adobe_reader_up_to_date); |
| 235 #endif |
| 214 | 236 |
| 215 // Checks whether the downloaded URL is malicious. Invokes the | 237 // Checks whether the downloaded URL is malicious. Invokes the |
| 216 // DownloadProtectionService via the delegate. | 238 // DownloadProtectionService via the delegate. |
| 217 // Next state: | 239 // Next state: |
| 218 // - STATE_CHECK_VISITED_REFERRER_BEFORE. | 240 // - STATE_CHECK_VISITED_REFERRER_BEFORE. |
| 219 Result DoCheckDownloadUrl(); | 241 Result DoCheckDownloadUrl(); |
| 220 | 242 |
| 221 // Callback invoked after the delegate has checked the download URL. Sets the | 243 // Callback invoked after the delegate has checked the download URL. Sets the |
| 222 // danger type of the download to |danger_type|. | 244 // danger type of the download to |danger_type|. |
| 223 void CheckDownloadUrlDone(content::DownloadDangerType danger_type); | 245 void CheckDownloadUrlDone(content::DownloadDangerType danger_type); |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 294 DownloadTargetDeterminerDelegate* delegate_; | 316 DownloadTargetDeterminerDelegate* delegate_; |
| 295 CompletionCallback completion_callback_; | 317 CompletionCallback completion_callback_; |
| 296 CancelableRequestConsumer history_consumer_; | 318 CancelableRequestConsumer history_consumer_; |
| 297 | 319 |
| 298 base::WeakPtrFactory<DownloadTargetDeterminer> weak_ptr_factory_; | 320 base::WeakPtrFactory<DownloadTargetDeterminer> weak_ptr_factory_; |
| 299 | 321 |
| 300 DISALLOW_COPY_AND_ASSIGN(DownloadTargetDeterminer); | 322 DISALLOW_COPY_AND_ASSIGN(DownloadTargetDeterminer); |
| 301 }; | 323 }; |
| 302 | 324 |
| 303 #endif // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_TARGET_DETERMINER_H_ | 325 #endif // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_TARGET_DETERMINER_H_ |
| OLD | NEW |