Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(46)

Side by Side Diff: chrome/browser/ui/webui/md_downloads/md_downloads_dom_handler.h

Issue 1480263002: Revert of MD Downloads: track downloads in C++, dispatch discrete JS updates (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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"
11 #include "base/macros.h" 12 #include "base/macros.h"
12 #include "base/memory/weak_ptr.h" 13 #include "base/memory/weak_ptr.h"
14 #include "chrome/browser/download/all_download_item_notifier.h"
13 #include "chrome/browser/download/download_danger_prompt.h" 15 #include "chrome/browser/download/download_danger_prompt.h"
14 #include "chrome/browser/ui/webui/md_downloads/downloads_list_tracker.h" 16 #include "content/public/browser/download_item.h"
17 #include "content/public/browser/download_manager.h"
15 #include "content/public/browser/web_ui_message_handler.h" 18 #include "content/public/browser/web_ui_message_handler.h"
16 19
17 namespace base { 20 namespace base {
18 class ListValue; 21 class ListValue;
19 } 22 }
20 23
21 namespace content { 24 namespace content {
22 class DownloadItem;
23 class DownloadManager;
24 class RenderViewHost;
25 class WebContents; 25 class WebContents;
26 class WebUI;
27 } 26 }
28 27
29 // The handler for Javascript messages related to the "downloads" view, 28 // The handler for Javascript messages related to the "downloads" view,
30 // also observes changes to the download manager. 29 // also observes changes to the download manager.
31 class MdDownloadsDOMHandler : public content::WebUIMessageHandler { 30 class MdDownloadsDOMHandler : public content::WebUIMessageHandler,
31 public AllDownloadItemNotifier::Observer {
32 public: 32 public:
33 MdDownloadsDOMHandler(content::DownloadManager* download_manager, 33 explicit MdDownloadsDOMHandler(content::DownloadManager* download_manager);
34 content::WebUI* web_ui);
35 ~MdDownloadsDOMHandler() override; 34 ~MdDownloadsDOMHandler() override;
36 35
36 void Init();
37
37 // WebUIMessageHandler implementation. 38 // WebUIMessageHandler implementation.
38 void RegisterMessages() override; 39 void RegisterMessages() override;
39 40
40 void RenderViewReused(content::RenderViewHost* render_view_host); 41 // AllDownloadItemNotifier::Observer interface
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;
41 48
42 // Callback for the "getDownloads" message. 49 // Callback for the "getDownloads" message.
43 void HandleGetDownloads(const base::ListValue* args); 50 void HandleGetDownloads(const base::ListValue* args);
44 51
45 // Callback for the "openFile" message - opens the file in the shell. 52 // Callback for the "openFile" message - opens the file in the shell.
46 void HandleOpenFile(const base::ListValue* args); 53 void HandleOpenFile(const base::ListValue* args);
47 54
48 // Callback for the "drag" message - initiates a file object drag. 55 // Callback for the "drag" message - initiates a file object drag.
49 void HandleDrag(const base::ListValue* args); 56 void HandleDrag(const base::ListValue* args);
50 57
(...skipping 29 matching lines...) Expand all
80 87
81 // Callback for the "openDownloadsFolder" message - opens the downloads 88 // Callback for the "openDownloadsFolder" message - opens the downloads
82 // folder. 89 // folder.
83 void HandleOpenDownloadsFolder(const base::ListValue* args); 90 void HandleOpenDownloadsFolder(const base::ListValue* args);
84 91
85 protected: 92 protected:
86 // These methods are for mocking so that most of this class does not actually 93 // These methods are for mocking so that most of this class does not actually
87 // depend on WebUI. The other methods that depend on WebUI are 94 // depend on WebUI. The other methods that depend on WebUI are
88 // RegisterMessages() and HandleDrag(). 95 // RegisterMessages() and HandleDrag().
89 virtual content::WebContents* GetWebUIWebContents(); 96 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();
90 103
91 // Actually remove downloads with an ID in |removals_|. This cannot be undone. 104 // Actually remove downloads with an ID in |removals_|. This cannot be undone.
92 void FinalizeRemovals(); 105 void FinalizeRemovals();
93 106
94 private: 107 private:
95 using IdSet = std::set<uint32>; 108 using IdSet = std::set<uint32>;
96 using DownloadVector = std::vector<content::DownloadItem*>; 109 using DownloadVector = std::vector<content::DownloadItem*>;
97 110
98 // Convenience method to call |main_notifier_->GetManager()| while 111 // Convenience method to call |main_notifier_->GetManager()| while
99 // null-checking |main_notifier_|. 112 // null-checking |main_notifier_|.
100 content::DownloadManager* GetMainNotifierManager() const; 113 content::DownloadManager* GetMainNotifierManager() const;
101 114
102 // Convenience method to call |original_notifier_->GetManager()| while 115 // Convenience method to call |original_notifier_->GetManager()| while
103 // null-checking |original_notifier_|. 116 // null-checking |original_notifier_|.
104 content::DownloadManager* GetOriginalNotifierManager() const; 117 content::DownloadManager* GetOriginalNotifierManager() const;
105 118
119 // Sends the current list of downloads to the page.
120 void SendCurrentDownloads();
121
106 // Displays a native prompt asking the user for confirmation after accepting 122 // Displays a native prompt asking the user for confirmation after accepting
107 // the dangerous download specified by |dangerous|. The function returns 123 // the dangerous download specified by |dangerous|. The function returns
108 // immediately, and will invoke DangerPromptAccepted() asynchronously if the 124 // immediately, and will invoke DangerPromptAccepted() asynchronously if the
109 // user accepts the dangerous download. The native prompt will observe 125 // user accepts the dangerous download. The native prompt will observe
110 // |dangerous| until either the dialog is dismissed or |dangerous| is no 126 // |dangerous| until either the dialog is dismissed or |dangerous| is no
111 // longer an in-progress dangerous download. 127 // longer an in-progress dangerous download.
112 void ShowDangerPrompt(content::DownloadItem* dangerous); 128 void ShowDangerPrompt(content::DownloadItem* dangerous);
113 129
114 // Conveys danger acceptance from the DownloadDangerPrompt to the 130 // Conveys danger acceptance from the DownloadDangerPrompt to the
115 // DownloadItem. 131 // DownloadItem.
116 void DangerPromptDone(int download_id, DownloadDangerPrompt::Action action); 132 void DangerPromptDone(int download_id, DownloadDangerPrompt::Action action);
117 133
118 // Returns true if the records of any downloaded items are allowed (and able) 134 // Returns true if the records of any downloaded items are allowed (and able)
119 // to be deleted. 135 // to be deleted.
120 bool IsDeletingHistoryAllowed(); 136 bool IsDeletingHistoryAllowed();
121 137
122 // Returns the download that is referred to in a given value. 138 // Returns the download that is referred to in a given value.
123 content::DownloadItem* GetDownloadByValue(const base::ListValue* args); 139 content::DownloadItem* GetDownloadByValue(const base::ListValue* args);
124 140
125 // Returns the download with |id| or NULL if it doesn't exist. 141 // Returns the download with |id| or NULL if it doesn't exist.
126 content::DownloadItem* GetDownloadById(uint32 id); 142 content::DownloadItem* GetDownloadById(uint32 id);
127 143
128 // Remove all downloads in |to_remove| with the ability to undo removal later. 144 // Remove all downloads in |to_remove| with the ability to undo removal later.
129 void RemoveDownloads(const DownloadVector& to_remove); 145 void RemoveDownloads(const DownloadVector& to_remove);
130 146
131 DownloadsListTracker list_tracker_; 147 // Weak reference to the DownloadManager this class was constructed with. You
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_;
132 160
133 // IDs of downloads to remove when this handler gets deleted. 161 // IDs of downloads to remove when this handler gets deleted.
134 std::vector<IdSet> removals_; 162 std::vector<IdSet> removals_;
135 163
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
136 base::WeakPtrFactory<MdDownloadsDOMHandler> weak_ptr_factory_; 170 base::WeakPtrFactory<MdDownloadsDOMHandler> weak_ptr_factory_;
137 171
138 DISALLOW_COPY_AND_ASSIGN(MdDownloadsDOMHandler); 172 DISALLOW_COPY_AND_ASSIGN(MdDownloadsDOMHandler);
139 }; 173 };
140 174
141 #endif // CHROME_BROWSER_UI_WEBUI_MD_DOWNLOADS_MD_DOWNLOADS_DOM_HANDLER_H_ 175 #endif // CHROME_BROWSER_UI_WEBUI_MD_DOWNLOADS_MD_DOWNLOADS_DOM_HANDLER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698