OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_UI_WEBUI_MD_DOWNLOADS_MD_DOWNLOADS_DOM_HANDLER_H_ | 5 #ifndef CHROME_BROWSER_UI_WEBUI_MD_DOWNLOADS_MD_DOWNLOADS_DOM_HANDLER_H_ |
6 #define CHROME_BROWSER_UI_WEBUI_MD_DOWNLOADS_MD_DOWNLOADS_DOM_HANDLER_H_ | 6 #define CHROME_BROWSER_UI_WEBUI_MD_DOWNLOADS_MD_DOWNLOADS_DOM_HANDLER_H_ |
7 | 7 |
8 #include <set> | 8 #include <set> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "base/compiler_specific.h" | |
12 #include "base/macros.h" | 11 #include "base/macros.h" |
13 #include "base/memory/weak_ptr.h" | 12 #include "base/memory/weak_ptr.h" |
14 #include "chrome/browser/download/all_download_item_notifier.h" | |
15 #include "chrome/browser/download/download_danger_prompt.h" | 13 #include "chrome/browser/download/download_danger_prompt.h" |
16 #include "content/public/browser/download_item.h" | 14 #include "chrome/browser/ui/webui/md_downloads/downloads_list_tracker.h" |
17 #include "content/public/browser/download_manager.h" | |
18 #include "content/public/browser/web_ui_message_handler.h" | 15 #include "content/public/browser/web_ui_message_handler.h" |
19 | 16 |
20 namespace base { | 17 namespace base { |
21 class ListValue; | 18 class ListValue; |
22 } | 19 } |
23 | 20 |
24 namespace content { | 21 namespace content { |
| 22 class DownloadItem; |
| 23 class DownloadManager; |
| 24 class RenderViewHost; |
25 class WebContents; | 25 class WebContents; |
| 26 class WebUI; |
26 } | 27 } |
27 | 28 |
28 // The handler for Javascript messages related to the "downloads" view, | 29 // The handler for Javascript messages related to the "downloads" view, |
29 // also observes changes to the download manager. | 30 // also observes changes to the download manager. |
30 class MdDownloadsDOMHandler : public content::WebUIMessageHandler, | 31 class MdDownloadsDOMHandler : public content::WebUIMessageHandler { |
31 public AllDownloadItemNotifier::Observer { | |
32 public: | 32 public: |
33 explicit MdDownloadsDOMHandler(content::DownloadManager* download_manager); | 33 MdDownloadsDOMHandler(content::DownloadManager* download_manager, |
| 34 content::WebUI* web_ui); |
34 ~MdDownloadsDOMHandler() override; | 35 ~MdDownloadsDOMHandler() override; |
35 | 36 |
36 void Init(); | |
37 | |
38 // WebUIMessageHandler implementation. | 37 // WebUIMessageHandler implementation. |
39 void RegisterMessages() override; | 38 void RegisterMessages() override; |
40 | 39 |
41 // AllDownloadItemNotifier::Observer interface | 40 void RenderViewReused(content::RenderViewHost* render_view_host); |
42 void OnDownloadCreated(content::DownloadManager* manager, | |
43 content::DownloadItem* download_item) override; | |
44 void OnDownloadUpdated(content::DownloadManager* manager, | |
45 content::DownloadItem* download_item) override; | |
46 void OnDownloadRemoved(content::DownloadManager* manager, | |
47 content::DownloadItem* download_item) override; | |
48 | 41 |
49 // Callback for the "getDownloads" message. | 42 // Callback for the "getDownloads" message. |
50 void HandleGetDownloads(const base::ListValue* args); | 43 void HandleGetDownloads(const base::ListValue* args); |
51 | 44 |
52 // Callback for the "openFile" message - opens the file in the shell. | 45 // Callback for the "openFile" message - opens the file in the shell. |
53 void HandleOpenFile(const base::ListValue* args); | 46 void HandleOpenFile(const base::ListValue* args); |
54 | 47 |
55 // Callback for the "drag" message - initiates a file object drag. | 48 // Callback for the "drag" message - initiates a file object drag. |
56 void HandleDrag(const base::ListValue* args); | 49 void HandleDrag(const base::ListValue* args); |
57 | 50 |
(...skipping 29 matching lines...) Expand all Loading... |
87 | 80 |
88 // Callback for the "openDownloadsFolder" message - opens the downloads | 81 // Callback for the "openDownloadsFolder" message - opens the downloads |
89 // folder. | 82 // folder. |
90 void HandleOpenDownloadsFolder(const base::ListValue* args); | 83 void HandleOpenDownloadsFolder(const base::ListValue* args); |
91 | 84 |
92 protected: | 85 protected: |
93 // These methods are for mocking so that most of this class does not actually | 86 // These methods are for mocking so that most of this class does not actually |
94 // depend on WebUI. The other methods that depend on WebUI are | 87 // depend on WebUI. The other methods that depend on WebUI are |
95 // RegisterMessages() and HandleDrag(). | 88 // RegisterMessages() and HandleDrag(). |
96 virtual content::WebContents* GetWebUIWebContents(); | 89 virtual content::WebContents* GetWebUIWebContents(); |
97 virtual void CallUpdateAll(const base::ListValue& list); | |
98 virtual void CallUpdateItem(const base::DictionaryValue& item); | |
99 | |
100 // Schedules a call to SendCurrentDownloads() in the next message loop | |
101 // iteration. Protected rather than private for use in tests. | |
102 void ScheduleSendCurrentDownloads(); | |
103 | 90 |
104 // Actually remove downloads with an ID in |removals_|. This cannot be undone. | 91 // Actually remove downloads with an ID in |removals_|. This cannot be undone. |
105 void FinalizeRemovals(); | 92 void FinalizeRemovals(); |
106 | 93 |
107 private: | 94 private: |
108 using IdSet = std::set<uint32>; | 95 using IdSet = std::set<uint32>; |
109 using DownloadVector = std::vector<content::DownloadItem*>; | 96 using DownloadVector = std::vector<content::DownloadItem*>; |
110 | 97 |
111 // Convenience method to call |main_notifier_->GetManager()| while | 98 // Convenience method to call |main_notifier_->GetManager()| while |
112 // null-checking |main_notifier_|. | 99 // null-checking |main_notifier_|. |
113 content::DownloadManager* GetMainNotifierManager() const; | 100 content::DownloadManager* GetMainNotifierManager() const; |
114 | 101 |
115 // Convenience method to call |original_notifier_->GetManager()| while | 102 // Convenience method to call |original_notifier_->GetManager()| while |
116 // null-checking |original_notifier_|. | 103 // null-checking |original_notifier_|. |
117 content::DownloadManager* GetOriginalNotifierManager() const; | 104 content::DownloadManager* GetOriginalNotifierManager() const; |
118 | 105 |
119 // Sends the current list of downloads to the page. | |
120 void SendCurrentDownloads(); | |
121 | |
122 // Displays a native prompt asking the user for confirmation after accepting | 106 // Displays a native prompt asking the user for confirmation after accepting |
123 // the dangerous download specified by |dangerous|. The function returns | 107 // the dangerous download specified by |dangerous|. The function returns |
124 // immediately, and will invoke DangerPromptAccepted() asynchronously if the | 108 // immediately, and will invoke DangerPromptAccepted() asynchronously if the |
125 // user accepts the dangerous download. The native prompt will observe | 109 // user accepts the dangerous download. The native prompt will observe |
126 // |dangerous| until either the dialog is dismissed or |dangerous| is no | 110 // |dangerous| until either the dialog is dismissed or |dangerous| is no |
127 // longer an in-progress dangerous download. | 111 // longer an in-progress dangerous download. |
128 void ShowDangerPrompt(content::DownloadItem* dangerous); | 112 void ShowDangerPrompt(content::DownloadItem* dangerous); |
129 | 113 |
130 // Conveys danger acceptance from the DownloadDangerPrompt to the | 114 // Conveys danger acceptance from the DownloadDangerPrompt to the |
131 // DownloadItem. | 115 // DownloadItem. |
132 void DangerPromptDone(int download_id, DownloadDangerPrompt::Action action); | 116 void DangerPromptDone(int download_id, DownloadDangerPrompt::Action action); |
133 | 117 |
134 // Returns true if the records of any downloaded items are allowed (and able) | 118 // Returns true if the records of any downloaded items are allowed (and able) |
135 // to be deleted. | 119 // to be deleted. |
136 bool IsDeletingHistoryAllowed(); | 120 bool IsDeletingHistoryAllowed(); |
137 | 121 |
138 // Returns the download that is referred to in a given value. | 122 // Returns the download that is referred to in a given value. |
139 content::DownloadItem* GetDownloadByValue(const base::ListValue* args); | 123 content::DownloadItem* GetDownloadByValue(const base::ListValue* args); |
140 | 124 |
141 // Returns the download with |id| or NULL if it doesn't exist. | 125 // Returns the download with |id| or NULL if it doesn't exist. |
142 content::DownloadItem* GetDownloadById(uint32 id); | 126 content::DownloadItem* GetDownloadById(uint32 id); |
143 | 127 |
144 // Remove all downloads in |to_remove| with the ability to undo removal later. | 128 // Remove all downloads in |to_remove| with the ability to undo removal later. |
145 void RemoveDownloads(const DownloadVector& to_remove); | 129 void RemoveDownloads(const DownloadVector& to_remove); |
146 | 130 |
147 // Weak reference to the DownloadManager this class was constructed with. You | 131 DownloadsListTracker list_tracker_; |
148 // should probably be using use Get{Main,Original}NotifierManager() instead. | |
149 content::DownloadManager* download_manager_; | |
150 | |
151 // Current search terms. | |
152 scoped_ptr<base::ListValue> search_terms_; | |
153 | |
154 // Notifies OnDownload*() and provides safe access to the DownloadManager. | |
155 scoped_ptr<AllDownloadItemNotifier> main_notifier_; | |
156 | |
157 // If |main_notifier_| observes an incognito profile, then this observes the | |
158 // DownloadManager for the original profile; otherwise, this is NULL. | |
159 scoped_ptr<AllDownloadItemNotifier> original_notifier_; | |
160 | 132 |
161 // IDs of downloads to remove when this handler gets deleted. | 133 // IDs of downloads to remove when this handler gets deleted. |
162 std::vector<IdSet> removals_; | 134 std::vector<IdSet> removals_; |
163 | 135 |
164 // Whether a call to SendCurrentDownloads() is currently scheduled. | |
165 bool update_scheduled_; | |
166 | |
167 // IDs of new downloads that the page doesn't know about yet. | |
168 IdSet new_downloads_; | |
169 | |
170 base::WeakPtrFactory<MdDownloadsDOMHandler> weak_ptr_factory_; | 136 base::WeakPtrFactory<MdDownloadsDOMHandler> weak_ptr_factory_; |
171 | 137 |
172 DISALLOW_COPY_AND_ASSIGN(MdDownloadsDOMHandler); | 138 DISALLOW_COPY_AND_ASSIGN(MdDownloadsDOMHandler); |
173 }; | 139 }; |
174 | 140 |
175 #endif // CHROME_BROWSER_UI_WEBUI_MD_DOWNLOADS_MD_DOWNLOADS_DOM_HANDLER_H_ | 141 #endif // CHROME_BROWSER_UI_WEBUI_MD_DOWNLOADS_MD_DOWNLOADS_DOM_HANDLER_H_ |
OLD | NEW |