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

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

Issue 1492273002: MD Downloads: limit the amount of downloads we send (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@new-dl-data
Patch Set: asdf 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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_DOWNLOADS_LIST_TRACKER_H_ 5 #ifndef CHROME_BROWSER_UI_WEBUI_MD_DOWNLOADS_DOWNLOADS_LIST_TRACKER_H_
6 #define CHROME_BROWSER_UI_WEBUI_MD_DOWNLOADS_DOWNLOADS_LIST_TRACKER_H_ 6 #define CHROME_BROWSER_UI_WEBUI_MD_DOWNLOADS_DOWNLOADS_LIST_TRACKER_H_
7 7
8 #include <set> 8 #include <set>
9 9
10 #include "base/callback_forward.h" 10 #include "base/callback_forward.h"
(...skipping 16 matching lines...) Expand all
27 } 27 }
28 28
29 // A class that tracks all downloads activity and keeps a sorted representation 29 // A class that tracks all downloads activity and keeps a sorted representation
30 // of the downloads as chrome://downloads wants to display them. 30 // of the downloads as chrome://downloads wants to display them.
31 class DownloadsListTracker : public AllDownloadItemNotifier::Observer { 31 class DownloadsListTracker : public AllDownloadItemNotifier::Observer {
32 public: 32 public:
33 DownloadsListTracker(content::DownloadManager* download_manager, 33 DownloadsListTracker(content::DownloadManager* download_manager,
34 content::WebUI* web_ui); 34 content::WebUI* web_ui);
35 ~DownloadsListTracker() override; 35 ~DownloadsListTracker() override;
36 36
37 // Clears all downloads on the page (if it's ready). 37 // Clears all downloads on the page if currently sending updates and resets
38 void CallClearAll(); 38 // chunk tracking data.
39 void Reset();
39 40
40 // Shows only downloads that match |search_terms|. An empty list shows all 41 // This class only cares about downloads that match |search_terms|.
41 // downloads. Returns whether |search_terms.Equals(&search_terms_)|. 42 // An empty list shows all downloads (the default). Returns true if
43 // |search_terms| differ from the current ones.
42 bool SetSearchTerms(const base::ListValue& search_terms); 44 bool SetSearchTerms(const base::ListValue& search_terms);
43 45
44 // Sends all downloads and enables updates. 46 // Starts sending updates and sends a capped amount of downloads. Tracks which
45 void Start(); 47 // downloads have been sent. Re-call this to send more.
48 void StartAndSendChunk();
46 49
47 // Stops sending updates to the page. 50 // Stops sending updates to the page.
48 void Stop(); 51 void Stop();
49 52
50 content::DownloadManager* GetMainNotifierManager() const; 53 content::DownloadManager* GetMainNotifierManager() const;
51 content::DownloadManager* GetOriginalNotifierManager() const; 54 content::DownloadManager* GetOriginalNotifierManager() const;
52 55
53 // AllDownloadItemNotifier::Observer: 56 // AllDownloadItemNotifier::Observer:
54 void OnDownloadCreated(content::DownloadManager* manager, 57 void OnDownloadCreated(content::DownloadManager* manager,
55 content::DownloadItem* download_item) override; 58 content::DownloadItem* download_item) override;
(...skipping 10 matching lines...) Expand all
66 69
67 // Creates a dictionary value that's sent to the page as JSON. 70 // Creates a dictionary value that's sent to the page as JSON.
68 virtual scoped_ptr<base::DictionaryValue> CreateDownloadItemValue( 71 virtual scoped_ptr<base::DictionaryValue> CreateDownloadItemValue(
69 content::DownloadItem* item) const; 72 content::DownloadItem* item) const;
70 73
71 // Exposed for testing. 74 // Exposed for testing.
72 bool IsIncognito(const content::DownloadItem& item) const; 75 bool IsIncognito(const content::DownloadItem& item) const;
73 76
74 const content::DownloadItem* GetItemForTesting(size_t index) const; 77 const content::DownloadItem* GetItemForTesting(size_t index) const;
75 78
79 void SetChunkSizeForTesting(size_t chunk_size);
80
76 private: 81 private:
77 struct StartTimeComparator { 82 struct StartTimeComparator {
78 bool operator() (const content::DownloadItem* a, 83 bool operator() (const content::DownloadItem* a,
79 const content::DownloadItem* b) const; 84 const content::DownloadItem* b) const;
80 }; 85 };
81 using SortedSet = std::set<content::DownloadItem*, StartTimeComparator>; 86 using SortedSet = std::set<content::DownloadItem*, StartTimeComparator>;
82 87
83 // Called by both constructors to initialize common state. 88 // Called by both constructors to initialize common state.
84 void Init(); 89 void Init();
85 90
86 // Clears and re-inserts all visible items in a sorted order into 91 // Clears and re-inserts all downloads items into |sorted_items_|.
87 // |sorted_visible_items_|. 92 void RebuildSortedItems();
88 void RebuildSortedSet();
89 93
90 // Whether |item| should show on the current page. 94 // Whether |item| should show on the current page.
91 bool ShouldShow(const content::DownloadItem& item) const; 95 bool ShouldShow(const content::DownloadItem& item) const;
92 96
93 // Gets a page index for |position| from |sorted_visible_items_|. 97 // Returns the index of |item| in |sorted_items_|.
94 int GetIndex(const SortedSet::iterator& position) const; 98 size_t GetIndex(const SortedSet::iterator& item) const;
95 99
96 // Calls "insertItems" if |sending_updates_|. 100 // Calls "insertItems" if sending updates and the page knows about |insert|.
97 void CallInsertItem(const SortedSet::iterator& insert); 101 void InsertItem(const SortedSet::iterator& insert);
98 102
99 // Calls "updateItem" if |sending_updates_|. 103 // Calls "updateItem" if sending updates and the page knows about |update|.
100 void CallUpdateItem(const SortedSet::iterator& update); 104 void UpdateItem(const SortedSet::iterator& update);
101 105
102 // Removes the item that corresponds to |remove| and sends a "removeItems" 106 // Removes the item that corresponds to |remove| and sends "removeItems"
103 // message to the page if |sending_updates_|. 107 // if sending updates.
104 void RemoveItem(const SortedSet::iterator& remove); 108 void RemoveItem(const SortedSet::iterator& remove);
105 109
106 AllDownloadItemNotifier main_notifier_; 110 AllDownloadItemNotifier main_notifier_;
107 scoped_ptr<AllDownloadItemNotifier> original_notifier_; 111 scoped_ptr<AllDownloadItemNotifier> original_notifier_;
108 112
109 // The WebUI object corresponding to the page we care about. 113 // The WebUI object corresponding to the page we care about.
110 content::WebUI* const web_ui_; 114 content::WebUI* const web_ui_;
111 115
112 // Callback used to determine if an item should show on the page. Set to 116 // Callback used to determine if an item should show on the page. Set to
113 // |ShouldShow()| in default constructor, passed in while testing. 117 // |ShouldShow()| in default constructor, passed in while testing.
114 base::Callback<bool(const content::DownloadItem&)> should_show_; 118 base::Callback<bool(const content::DownloadItem&)> should_show_;
115 119
116 // When this is true, all changes to downloads that affect the page are sent 120 // When this is true, all changes to downloads that affect the page are sent
117 // via JavaScript. 121 // via JavaScript.
118 bool sending_updates_ = false; 122 bool sending_updates_ = false;
119 123
120 SortedSet sorted_visible_items_; 124 SortedSet sorted_items_;
125
126 // The number of items sent to the page so far.
127 size_t sent_to_page_ = 0u;
128
129 // The maximum number of items sent to the page at a time.
130 size_t chunk_size_ = 20u;
121 131
122 // Current search terms. 132 // Current search terms.
123 std::vector<base::string16> search_terms_; 133 std::vector<base::string16> search_terms_;
124 134
125 DISALLOW_COPY_AND_ASSIGN(DownloadsListTracker); 135 DISALLOW_COPY_AND_ASSIGN(DownloadsListTracker);
126 }; 136 };
127 137
128 #endif // CHROME_BROWSER_UI_WEBUI_MD_DOWNLOADS_DOWNLOADS_LIST_TRACKER_H_ 138 #endif // CHROME_BROWSER_UI_WEBUI_MD_DOWNLOADS_DOWNLOADS_LIST_TRACKER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698