blob: 19f8a9741a816434e84c2545c8227f2228222c51 [file] [log] [blame]
// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_DOWNLOAD_DOWNLOAD_COMMANDS_H_
#define CHROME_BROWSER_DOWNLOAD_DOWNLOAD_COMMANDS_H_
#include "base/gtest_prod_util.h"
#include "base/memory/weak_ptr.h"
#include "base/task/sequenced_task_runner.h"
#include "build/build_config.h"
#include "url/gurl.h"
#if !BUILDFLAG(IS_ANDROID)
class Browser;
#endif
class DownloadUIModel;
class DownloadCommands {
public:
// These values are persisted to logs. Entries should not be renumbered and
// numeric values should never be reused.
enum Command {
SHOW_IN_FOLDER = 0, // Open a folder view window with the item selected.
OPEN_WHEN_COMPLETE = 1, // Open the download when it's finished.
ALWAYS_OPEN_TYPE = 2, // Default this file extension to always open.
PLATFORM_OPEN = 3, // Open using platform handler.
CANCEL = 4, // Cancel the download.
PAUSE = 5, // Pause a download.
RESUME = 6, // Resume a download.
DISCARD = 7, // Discard the malicious download.
KEEP = 8, // Keep the malicious download.
LEARN_MORE_SCANNING = 9, // Show info about download scanning.
LEARN_MORE_INTERRUPTED = 10, // Show info about interrupted downloads.
LEARN_MORE_INSECURE_DOWNLOAD = 11, // Show info about insecure downloads.
LEARN_MORE_DOWNLOAD_BLOCKED = 12, // Show info about blocked downloads.
OPEN_SAFE_BROWSING_SETTING = 13, // Open settings page for Safe Browsing.
COPY_TO_CLIPBOARD = 14, // Copy the contents to the clipboard.
DEEP_SCAN = 15, // Send file to Safe Browsing for deep scanning.
BYPASS_DEEP_SCANNING = 16, // Bypass the prompt to deep scan.
REVIEW = 17, // Show enterprise download review dialog.
RETRY = 18, // Retry the download.
CANCEL_DEEP_SCAN = 19, // Cancel deep scan and return to scanning prompt.
BYPASS_DEEP_SCANNING_AND_OPEN = 20, // Bypass the prompt to deep scan and
// open the file.
OPEN_WITH_MEDIA_APP = 21, // Open file using the ChromeOS media app.
EDIT_WITH_MEDIA_APP = 22, // Open file using the ChromeOS media app with
// an editing hint.
kMaxValue = EDIT_WITH_MEDIA_APP, // Keep last.
};
// |model| must outlive DownloadCommands.
// TODO(shaktisahu): Investigate if model lifetime is shorter than |this|.
explicit DownloadCommands(base::WeakPtr<DownloadUIModel> model);
DownloadCommands(const DownloadCommands&) = delete;
DownloadCommands& operator=(const DownloadCommands&) = delete;
virtual ~DownloadCommands();
bool IsCommandEnabled(Command command) const;
bool IsCommandChecked(Command command) const;
bool IsCommandVisible(Command command) const;
void ExecuteCommand(Command command);
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || \
BUILDFLAG(IS_MAC)
bool IsDownloadPdf() const;
bool CanOpenPdfInSystemViewer() const;
Browser* GetBrowser() const;
#endif
GURL GetLearnMoreURLForInterruptedDownload() const;
void CopyFileAsImageToClipboard();
bool CanBeCopiedToClipboard() const;
private:
FRIEND_TEST_ALL_PREFIXES(
DownloadCommandsTest,
GetLearnMoreURLForInterruptedDownload_ContainsContext);
base::WeakPtr<DownloadUIModel> model_;
scoped_refptr<base::SequencedTaskRunner> task_runner_;
};
#endif // CHROME_BROWSER_DOWNLOAD_DOWNLOAD_COMMANDS_H_