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

Side by Side Diff: chrome/browser/installable/installable_manager.h

Issue 2960103002: Improve add to homescreen data fetcher unit tests. (Closed)
Patch Set: Self nits Created 3 years, 5 months 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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_INSTALLABLE_INSTALLABLE_MANAGER_H_ 5 #ifndef CHROME_BROWSER_INSTALLABLE_INSTALLABLE_MANAGER_H_
6 #define CHROME_BROWSER_INSTALLABLE_INSTALLABLE_MANAGER_H_ 6 #define CHROME_BROWSER_INSTALLABLE_INSTALLABLE_MANAGER_H_
7 7
8 #include <map> 8 #include <map>
9 #include <memory> 9 #include <memory>
10 #include <tuple> 10 #include <tuple>
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 // |callback| is invoked synchronously (i.e. no via PostTask on the UI thread 130 // |callback| is invoked synchronously (i.e. no via PostTask on the UI thread
131 // when the data is ready; the synchronous execution ensures that the 131 // when the data is ready; the synchronous execution ensures that the
132 // references |callback| receives in its InstallableData argument are valid. 132 // references |callback| receives in its InstallableData argument are valid.
133 // 133 //
134 // Clients must be prepared for |callback| to not ever be invoked. For 134 // Clients must be prepared for |callback| to not ever be invoked. For
135 // instance, if installability checking is requested, this method will wait 135 // instance, if installability checking is requested, this method will wait
136 // until the site registers a service worker (and hence not invoke |callback| 136 // until the site registers a service worker (and hence not invoke |callback|
137 // at all if a service worker is never registered). 137 // at all if a service worker is never registered).
138 // 138 //
139 // Calls requesting data that is already fetched will return the cached data. 139 // Calls requesting data that is already fetched will return the cached data.
140 void GetData(const InstallableParams& params, 140 virtual void GetData(const InstallableParams& params,
141 const InstallableCallback& callback); 141 const InstallableCallback& callback);
142 142
143 // Called via AppBannerManagerAndroid to record metrics on how often the 143 // Called via AppBannerManagerAndroid to record metrics on how often the
144 // installable check is completed when the menu or add to homescreen menu item 144 // installable check is completed when the menu or add to homescreen menu item
145 // is opened on Android. 145 // is opened on Android.
146 void RecordMenuOpenHistogram(); 146 void RecordMenuOpenHistogram();
147 void RecordMenuItemAddToHomescreenHistogram(); 147 void RecordMenuItemAddToHomescreenHistogram();
148 void RecordQueuedMetricsOnTaskCompletion(const InstallableParams& params, 148 void RecordQueuedMetricsOnTaskCompletion(const InstallableParams& params,
149 bool check_passed); 149 bool check_passed);
150 150
151 protected: 151 protected:
152 // For mocking in tests. 152 // For mocking in tests.
153 virtual void OnWaitingForServiceWorker() {} 153 virtual void OnWaitingForServiceWorker() {}
154 154
155 private: 155 private:
156 friend class AddToHomescreenDataFetcherTest;
156 friend class InstallableManagerBrowserTest; 157 friend class InstallableManagerBrowserTest;
157 friend class InstallableManagerUnitTest; 158 friend class InstallableManagerUnitTest;
159 friend class TestInstallableManager;
158 FRIEND_TEST_ALL_PREFIXES(InstallableManagerBrowserTest, 160 FRIEND_TEST_ALL_PREFIXES(InstallableManagerBrowserTest,
159 ManagerBeginsInEmptyState); 161 ManagerBeginsInEmptyState);
160 FRIEND_TEST_ALL_PREFIXES(InstallableManagerBrowserTest, CheckWebapp); 162 FRIEND_TEST_ALL_PREFIXES(InstallableManagerBrowserTest, CheckWebapp);
161 FRIEND_TEST_ALL_PREFIXES(InstallableManagerBrowserTest, 163 FRIEND_TEST_ALL_PREFIXES(InstallableManagerBrowserTest,
162 CheckLazyServiceWorkerPassesWhenWaiting); 164 CheckLazyServiceWorkerPassesWhenWaiting);
163 FRIEND_TEST_ALL_PREFIXES(InstallableManagerBrowserTest, 165 FRIEND_TEST_ALL_PREFIXES(InstallableManagerBrowserTest,
164 CheckLazyServiceWorkerNoFetchHandlerFails); 166 CheckLazyServiceWorkerNoFetchHandlerFails);
165 167
166 using Task = std::pair<InstallableParams, InstallableCallback>; 168 using Task = std::pair<InstallableParams, InstallableCallback>;
167 using IconParams = std::tuple<int, int, content::Manifest::Icon::IconPurpose>; 169 using IconParams = std::tuple<int, int, content::Manifest::Icon::IconPurpose>;
168 170
169 struct ManifestProperty; 171 struct ManifestProperty {
170 struct ValidManifestProperty; 172 InstallableStatusCode error = NO_ERROR_DETECTED;
171 struct ServiceWorkerProperty; 173 GURL url;
172 struct IconProperty; 174 content::Manifest manifest;
175 bool fetched = false;
176 };
177
178 struct ValidManifestProperty {
179 InstallableStatusCode error = NO_ERROR_DETECTED;
180 bool is_valid = false;
181 bool fetched = false;
182 };
183
184 struct ServiceWorkerProperty {
185 InstallableStatusCode error = NO_ERROR_DETECTED;
186 bool has_worker = false;
187 bool is_waiting = false;
188 bool fetched = false;
189 };
190
191 struct IconProperty {
192 IconProperty();
193 IconProperty(IconProperty&& other);
194 ~IconProperty();
195 IconProperty& operator=(IconProperty&& other);
196
197 InstallableStatusCode error;
198 GURL url;
199 std::unique_ptr<SkBitmap> icon;
200 bool fetched;
201
202 private:
203 // This class contains a std::unique_ptr and therefore must be move-only.
204 DISALLOW_COPY_AND_ASSIGN(IconProperty);
205 };
173 206
174 // Returns an IconParams object that queries for a primary icon conforming to 207 // Returns an IconParams object that queries for a primary icon conforming to
175 // the primary icon size parameters in |params|. 208 // the primary icon size parameters in |params|.
176 IconParams ParamsForPrimaryIcon(const InstallableParams& params) const; 209 IconParams ParamsForPrimaryIcon(const InstallableParams& params) const;
177 // Returns an IconParams object that queries for a badge icon conforming to 210 // Returns an IconParams object that queries for a badge icon conforming to
178 // the badge icon size parameters in |params|. 211 // the badge icon size parameters in |params|.
179 IconParams ParamsForBadgeIcon(const InstallableParams& params) const; 212 IconParams ParamsForBadgeIcon(const InstallableParams& params) const;
180 213
181 // Returns true if |params| matches any fetched icon, or false if no icon has 214 // Returns true if |params| matches any fetched icon, or false if no icon has
182 // been requested yet or there is no match. 215 // been requested yet or there is no match.
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 307
275 bool is_active_; 308 bool is_active_;
276 bool is_pwa_check_complete_; 309 bool is_pwa_check_complete_;
277 310
278 base::WeakPtrFactory<InstallableManager> weak_factory_; 311 base::WeakPtrFactory<InstallableManager> weak_factory_;
279 312
280 DISALLOW_COPY_AND_ASSIGN(InstallableManager); 313 DISALLOW_COPY_AND_ASSIGN(InstallableManager);
281 }; 314 };
282 315
283 #endif // CHROME_BROWSER_INSTALLABLE_INSTALLABLE_MANAGER_H_ 316 #endif // CHROME_BROWSER_INSTALLABLE_INSTALLABLE_MANAGER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698