blob: 9644d265d3cae47f9371921261ba8dfd6e6786d0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
// Copyright (c) 2009 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/download/download_shelf.h"
#include "base/file_util.h"
#include "chrome/browser/dom_ui/downloads_ui.h"
#include "chrome/browser/download/download_item_model.h"
#include "chrome/browser/download/download_manager.h"
#include "chrome/browser/metrics/user_metrics.h"
#include "chrome/browser/tab_contents/tab_contents.h"
#include "chrome/common/l10n_util.h"
#include "grit/generated_resources.h"
#if defined(OS_WIN)
#include "chrome/browser/download/download_util.h"
#elif defined(OS_POSIX)
#include "chrome/common/temp_scaffolding_stubs.h"
#endif
// DownloadShelf ---------------------------------------------------------------
void DownloadShelf::ShowAllDownloads() {
Profile* profile = tab_contents_->profile();
if (profile)
UserMetrics::RecordAction(L"ShowDownloads", profile);
GURL url = DownloadsUI::GetBaseURL();
tab_contents_->OpenURL(url, GURL(), NEW_FOREGROUND_TAB,
PageTransition::AUTO_BOOKMARK);
}
void DownloadShelf::ChangeTabContents(TabContents* old_contents,
TabContents* new_contents) {
DCHECK(old_contents == tab_contents_);
tab_contents_ = new_contents;
}
// DownloadShelfContextMenu ----------------------------------------------------
DownloadShelfContextMenu::DownloadShelfContextMenu(
BaseDownloadItemModel* download_model)
: download_(download_model->download()),
model_(download_model) {
}
DownloadShelfContextMenu::~DownloadShelfContextMenu() {
}
bool DownloadShelfContextMenu::ItemIsChecked(int id) const {
switch (id) {
case OPEN_WHEN_COMPLETE:
return download_->open_when_complete();
case ALWAYS_OPEN_TYPE: {
const FilePath::StringType extension =
file_util::GetFileExtensionFromPath(download_->full_path());
return download_->manager()->ShouldOpenFileExtension(extension);
}
}
return false;
}
bool DownloadShelfContextMenu::ItemIsDefault(int id) const {
return id == OPEN_WHEN_COMPLETE;
}
std::wstring DownloadShelfContextMenu::GetItemLabel(int id) const {
switch (id) {
case SHOW_IN_FOLDER:
return l10n_util::GetString(IDS_DOWNLOAD_LINK_SHOW);
case OPEN_WHEN_COMPLETE:
if (download_->state() == DownloadItem::IN_PROGRESS)
return l10n_util::GetString(IDS_DOWNLOAD_MENU_OPEN_WHEN_COMPLETE);
return l10n_util::GetString(IDS_DOWNLOAD_MENU_OPEN);
case ALWAYS_OPEN_TYPE:
return l10n_util::GetString(IDS_DOWNLOAD_MENU_ALWAYS_OPEN_TYPE);
case CANCEL:
return l10n_util::GetString(IDS_DOWNLOAD_MENU_CANCEL);
default:
NOTREACHED();
}
return std::wstring();
}
bool DownloadShelfContextMenu::IsItemCommandEnabled(int id) const {
switch (id) {
case SHOW_IN_FOLDER:
case OPEN_WHEN_COMPLETE:
return download_->state() != DownloadItem::CANCELLED;
case ALWAYS_OPEN_TYPE:
#if defined(OS_WIN)
return download_util::CanOpenDownload(download_);
#else
// TODO(port): port download_util
NOTIMPLEMENTED();
return true;
#endif
case CANCEL:
return download_->state() == DownloadItem::IN_PROGRESS;
default:
return id > 0 && id < MENU_LAST;
}
}
void DownloadShelfContextMenu::ExecuteItemCommand(int id) {
switch (id) {
case SHOW_IN_FOLDER:
download_->manager()->ShowDownloadInShell(download_);
break;
case OPEN_WHEN_COMPLETE:
#if defined(OS_WIN)
download_util::OpenDownload(download_);
#else
// TODO(port): port download_util
NOTIMPLEMENTED();
#endif
break;
case ALWAYS_OPEN_TYPE: {
const FilePath::StringType extension =
file_util::GetFileExtensionFromPath(download_->full_path());
download_->manager()->OpenFilesOfExtension(
extension, !ItemIsChecked(ALWAYS_OPEN_TYPE));
break;
}
case CANCEL:
model_->CancelTask();
break;
default:
NOTREACHED();
}
}
|