blob: a627c1079eee730bf68815e185ca613c5d68f210 (
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
// Copyright (c) 2012 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.
#ifndef CHROME_BROWSER_UI_WEBUI_DOWNLOADS_DOM_HANDLER_H_
#define CHROME_BROWSER_UI_WEBUI_DOWNLOADS_DOM_HANDLER_H_
#include <set>
#include <vector>
#include "base/compiler_specific.h"
#include "base/memory/weak_ptr.h"
#include "chrome/browser/download/all_download_item_notifier.h"
#include "content/public/browser/download_item.h"
#include "content/public/browser/download_manager.h"
#include "content/public/browser/web_ui_message_handler.h"
namespace base {
class ListValue;
}
namespace content {
class WebContents;
}
// The handler for Javascript messages related to the "downloads" view,
// also observes changes to the download manager.
class DownloadsDOMHandler : public content::WebUIMessageHandler,
public AllDownloadItemNotifier::Observer {
public:
explicit DownloadsDOMHandler(content::DownloadManager* dlm);
virtual ~DownloadsDOMHandler();
void Init();
// WebUIMessageHandler implementation.
virtual void RegisterMessages() OVERRIDE;
// AllDownloadItemNotifier::Observer interface
virtual void OnDownloadCreated(
content::DownloadManager* manager,
content::DownloadItem* download_item) OVERRIDE;
virtual void OnDownloadUpdated(
content::DownloadManager* manager,
content::DownloadItem* download_item) OVERRIDE;
virtual void OnDownloadRemoved(
content::DownloadManager* manager,
content::DownloadItem* download_item) OVERRIDE;
// Callback for the "onPageLoaded" message.
void OnPageLoaded(const base::ListValue* args);
// Callback for the "getDownloads" message.
void HandleGetDownloads(const base::ListValue* args);
// Callback for the "openFile" message - opens the file in the shell.
void HandleOpenFile(const base::ListValue* args);
// Callback for the "drag" message - initiates a file object drag.
void HandleDrag(const base::ListValue* args);
// Callback for the "saveDangerous" message - specifies that the user
// wishes to save a dangerous file.
void HandleSaveDangerous(const base::ListValue* args);
// Callback for the "discardDangerous" message - specifies that the user
// wishes to discard (remove) a dangerous file.
void HandleDiscardDangerous(const base::ListValue* args);
// Callback for the "show" message - shows the file in explorer.
void HandleShow(const base::ListValue* args);
// Callback for the "pause" message - pauses the file download.
void HandlePause(const base::ListValue* args);
// Callback for the "resume" message - resumes the file download.
void HandleResume(const base::ListValue* args);
// Callback for the "remove" message - removes the file download from shelf
// and list.
void HandleRemove(const base::ListValue* args);
// Callback for the "cancel" message - cancels the download.
void HandleCancel(const base::ListValue* args);
// Callback for the "clearAll" message - clears all the downloads.
void HandleClearAll(const base::ListValue* args);
// Callback for the "openDownloadsFolder" message - opens the downloads
// folder.
void HandleOpenDownloadsFolder(const base::ListValue* args);
protected:
// These methods are for mocking so that most of this class does not actually
// depend on WebUI. The other methods that depend on WebUI are
// RegisterMessages() and HandleDrag().
virtual content::WebContents* GetWebUIWebContents();
virtual void CallDownloadsList(const base::ListValue& downloads);
virtual void CallDownloadUpdated(const base::ListValue& download);
private:
// Shorthand for |observing_items_|, which tracks all items that this is
// observing so that RemoveObserver will be called for all of them.
typedef std::set<content::DownloadItem*> DownloadSet;
// Schedules a call to SendCurrentDownloads() in the next message loop
// iteration.
void ScheduleSendCurrentDownloads();
// Sends the current list of downloads to the page.
void SendCurrentDownloads();
// Displays a native prompt asking the user for confirmation after accepting
// the dangerous download specified by |dangerous|. The function returns
// immediately, and will invoke DangerPromptAccepted() asynchronously if the
// user accepts the dangerous download. The native prompt will observe
// |dangerous| until either the dialog is dismissed or |dangerous| is no
// longer an in-progress dangerous download.
void ShowDangerPrompt(content::DownloadItem* dangerous);
// Conveys danger acceptance from the DownloadDangerPrompt to the
// DownloadItem.
void DangerPromptAccepted(int download_id);
// Returns the download that is referred to in a given value.
content::DownloadItem* GetDownloadByValue(const base::ListValue* args);
// Current search text.
string16 search_text_;
// Notifies OnDownload*() and provides safe access to the DownloadManager.
AllDownloadItemNotifier main_notifier_;
// If |main_notifier_| observes an incognito profile, then this observes the
// DownloadManager for the original profile; otherwise, this is NULL.
scoped_ptr<AllDownloadItemNotifier> original_notifier_;
// Whether a call to SendCurrentDownloads() is currently scheduled.
bool update_scheduled_;
base::WeakPtrFactory<DownloadsDOMHandler> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(DownloadsDOMHandler);
};
#endif // CHROME_BROWSER_UI_WEBUI_DOWNLOADS_DOM_HANDLER_H_
|