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

Side by Side Diff: chrome/browser/installable/installable_manager_browsertest.cc

Issue 2641413002: Allow InstallableManager to fetch optional badge icon (Closed)
Patch Set: Fix rebase Created 3 years, 10 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 #include "chrome/browser/installable/installable_manager.h" 5 #include "chrome/browser/installable/installable_manager.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "base/threading/thread_task_runner_handle.h" 9 #include "base/threading/thread_task_runner_handle.h"
10 #include "chrome/browser/ui/browser.h" 10 #include "chrome/browser/ui/browser.h"
11 #include "chrome/browser/ui/tabs/tab_strip_model.h" 11 #include "chrome/browser/ui/tabs/tab_strip_model.h"
12 #include "chrome/common/chrome_switches.h" 12 #include "chrome/common/chrome_switches.h"
13 #include "chrome/test/base/in_process_browser_test.h" 13 #include "chrome/test/base/in_process_browser_test.h"
14 #include "chrome/test/base/ui_test_utils.h" 14 #include "chrome/test/base/ui_test_utils.h"
15 #include "net/test/embedded_test_server/embedded_test_server.h" 15 #include "net/test/embedded_test_server/embedded_test_server.h"
16 16
17 using IconPurpose = content::Manifest::Icon::IconPurpose;
18
17 namespace { 19 namespace {
18 20
21 const std::tuple<int, int, IconPurpose> kPrimaryIconParams{144, 144,
22 IconPurpose::ANY};
23
19 InstallableParams GetManifestParams() { 24 InstallableParams GetManifestParams() {
20 InstallableParams params; 25 InstallableParams params;
21 params.check_installable = false; 26 params.check_installable = false;
22 params.fetch_valid_primary_icon = false; 27 params.fetch_valid_primary_icon = false;
23 return params; 28 return params;
24 } 29 }
25 30
26 InstallableParams GetWebAppParams() { 31 InstallableParams GetWebAppParams() {
27 InstallableParams params = GetManifestParams(); 32 InstallableParams params = GetManifestParams();
28 params.ideal_primary_icon_size_in_px = 144; 33 params.ideal_primary_icon_size_in_px = 144;
29 params.minimum_primary_icon_size_in_px = 144; 34 params.minimum_primary_icon_size_in_px = 144;
30 params.check_installable = true; 35 params.check_installable = true;
31 params.fetch_valid_primary_icon = true; 36 params.fetch_valid_primary_icon = true;
32 return params; 37 return params;
33 } 38 }
34 39
35 InstallableParams GetIconParams() { 40 InstallableParams GetPrimaryIconParams() {
36 InstallableParams params = GetManifestParams(); 41 InstallableParams params = GetManifestParams();
37 params.ideal_primary_icon_size_in_px = 144; 42 params.ideal_primary_icon_size_in_px = 144;
38 params.minimum_primary_icon_size_in_px = 144; 43 params.minimum_primary_icon_size_in_px = 144;
39 params.fetch_valid_primary_icon = true; 44 params.fetch_valid_primary_icon = true;
40 return params; 45 return params;
41 } 46 }
42 47
48 InstallableParams GetPrimaryIconAndBadgeIconParams() {
49 InstallableParams params = GetManifestParams();
50 params.ideal_primary_icon_size_in_px = 144;
51 params.minimum_primary_icon_size_in_px = 144;
52 params.fetch_valid_primary_icon = true;
53 params.ideal_badge_icon_size_in_px = 72;
54 params.minimum_badge_icon_size_in_px = 72;
55 params.fetch_valid_badge_icon = true;
56 return params;
57 }
58
43 } // anonymous namespace 59 } // anonymous namespace
44 60
45 class CallbackTester { 61 class CallbackTester {
46 public: 62 public:
47 explicit CallbackTester(base::Closure quit_closure) 63 explicit CallbackTester(base::Closure quit_closure)
48 : quit_closure_(quit_closure) { } 64 : quit_closure_(quit_closure) { }
49 65
50 void OnDidFinishInstallableCheck(const InstallableData& data) { 66 void OnDidFinishInstallableCheck(const InstallableData& data) {
51 error_code_ = data.error_code; 67 error_code_ = data.error_code;
52 manifest_url_ = data.manifest_url; 68 manifest_url_ = data.manifest_url;
53 manifest_ = data.manifest; 69 manifest_ = data.manifest;
54 icon_url_ = data.primary_icon_url; 70 primary_icon_url_ = data.primary_icon_url;
55 if (data.primary_icon) 71 if (data.primary_icon)
56 icon_.reset(new SkBitmap(*data.primary_icon)); 72 primary_icon_.reset(new SkBitmap(*data.primary_icon));
73 badge_icon_url_ = data.badge_icon_url;
74 if (data.badge_icon)
75 badge_icon_.reset(new SkBitmap(*data.badge_icon));
57 is_installable_ = data.is_installable; 76 is_installable_ = data.is_installable;
58 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, quit_closure_); 77 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, quit_closure_);
59 } 78 }
60 79
61 InstallableStatusCode error_code() const { return error_code_; } 80 InstallableStatusCode error_code() const { return error_code_; }
62 const GURL& manifest_url() const { return manifest_url_; } 81 const GURL& manifest_url() const { return manifest_url_; }
63 const content::Manifest& manifest() const { return manifest_; } 82 const content::Manifest& manifest() const { return manifest_; }
64 const GURL& icon_url() const { return icon_url_; } 83 const GURL& primary_icon_url() const { return primary_icon_url_; }
65 const SkBitmap* icon() const { return icon_.get(); } 84 const SkBitmap* primary_icon() const { return primary_icon_.get(); }
85 const GURL& badge_icon_url() const { return badge_icon_url_; }
86 const SkBitmap* badge_icon() const { return badge_icon_.get(); }
66 bool is_installable() const { return is_installable_; } 87 bool is_installable() const { return is_installable_; }
67 88
68 private: 89 private:
69 base::Closure quit_closure_; 90 base::Closure quit_closure_;
70 InstallableStatusCode error_code_; 91 InstallableStatusCode error_code_;
71 GURL manifest_url_; 92 GURL manifest_url_;
72 content::Manifest manifest_; 93 content::Manifest manifest_;
73 GURL icon_url_; 94 GURL primary_icon_url_;
74 std::unique_ptr<SkBitmap> icon_; 95 std::unique_ptr<SkBitmap> primary_icon_;
96 GURL badge_icon_url_;
97 std::unique_ptr<SkBitmap> badge_icon_;
75 bool is_installable_; 98 bool is_installable_;
76 }; 99 };
77 100
78 class NestedCallbackTester { 101 class NestedCallbackTester {
79 public: 102 public:
80 NestedCallbackTester(InstallableManager* manager, 103 NestedCallbackTester(InstallableManager* manager,
81 const InstallableParams& params, 104 const InstallableParams& params,
82 base::Closure quit_closure) 105 base::Closure quit_closure)
83 : manager_(manager), params_(params), quit_closure_(quit_closure) {} 106 : manager_(manager), params_(params), quit_closure_(quit_closure) {}
84 107
85 void Run() { 108 void Run() {
86 manager_->GetData(params_, 109 manager_->GetData(params_,
87 base::Bind(&NestedCallbackTester::OnDidFinishFirstCheck, 110 base::Bind(&NestedCallbackTester::OnDidFinishFirstCheck,
88 base::Unretained(this))); 111 base::Unretained(this)));
89 } 112 }
90 113
91 void OnDidFinishFirstCheck(const InstallableData& data) { 114 void OnDidFinishFirstCheck(const InstallableData& data) {
92 error_code_ = data.error_code; 115 error_code_ = data.error_code;
93 manifest_url_ = data.manifest_url; 116 manifest_url_ = data.manifest_url;
94 manifest_ = data.manifest; 117 manifest_ = data.manifest;
95 icon_url_ = data.primary_icon_url; 118 primary_icon_url_ = data.primary_icon_url;
96 if (data.primary_icon) 119 if (data.primary_icon)
97 icon_.reset(new SkBitmap(*data.primary_icon)); 120 primary_icon_.reset(new SkBitmap(*data.primary_icon));
98 is_installable_ = data.is_installable; 121 is_installable_ = data.is_installable;
99 122
100 manager_->GetData(params_, 123 manager_->GetData(params_,
101 base::Bind(&NestedCallbackTester::OnDidFinishSecondCheck, 124 base::Bind(&NestedCallbackTester::OnDidFinishSecondCheck,
102 base::Unretained(this))); 125 base::Unretained(this)));
103 } 126 }
104 127
105 void OnDidFinishSecondCheck(const InstallableData& data) { 128 void OnDidFinishSecondCheck(const InstallableData& data) {
106 EXPECT_EQ(error_code_, data.error_code); 129 EXPECT_EQ(error_code_, data.error_code);
107 EXPECT_EQ(manifest_url_, data.manifest_url); 130 EXPECT_EQ(manifest_url_, data.manifest_url);
108 EXPECT_EQ(icon_url_, data.primary_icon_url); 131 EXPECT_EQ(primary_icon_url_, data.primary_icon_url);
109 EXPECT_EQ(icon_.get(), data.primary_icon); 132 EXPECT_EQ(primary_icon_.get(), data.primary_icon);
110 EXPECT_EQ(is_installable_, data.is_installable); 133 EXPECT_EQ(is_installable_, data.is_installable);
111 EXPECT_EQ(manifest_.IsEmpty(), data.manifest.IsEmpty()); 134 EXPECT_EQ(manifest_.IsEmpty(), data.manifest.IsEmpty());
112 EXPECT_EQ(manifest_.start_url, data.manifest.start_url); 135 EXPECT_EQ(manifest_.start_url, data.manifest.start_url);
113 EXPECT_EQ(manifest_.display, data.manifest.display); 136 EXPECT_EQ(manifest_.display, data.manifest.display);
114 EXPECT_EQ(manifest_.name, data.manifest.name); 137 EXPECT_EQ(manifest_.name, data.manifest.name);
115 EXPECT_EQ(manifest_.short_name, data.manifest.short_name); 138 EXPECT_EQ(manifest_.short_name, data.manifest.short_name);
116 139
117 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, quit_closure_); 140 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, quit_closure_);
118 } 141 }
119 142
120 private: 143 private:
121 InstallableManager* manager_; 144 InstallableManager* manager_;
122 InstallableParams params_; 145 InstallableParams params_;
123 base::Closure quit_closure_; 146 base::Closure quit_closure_;
124 InstallableStatusCode error_code_; 147 InstallableStatusCode error_code_;
125 GURL manifest_url_; 148 GURL manifest_url_;
126 content::Manifest manifest_; 149 content::Manifest manifest_;
127 GURL icon_url_; 150 GURL primary_icon_url_;
128 std::unique_ptr<SkBitmap> icon_; 151 std::unique_ptr<SkBitmap> primary_icon_;
129 bool is_installable_; 152 bool is_installable_;
130 }; 153 };
131 154
132 class InstallableManagerBrowserTest : public InProcessBrowserTest { 155 class InstallableManagerBrowserTest : public InProcessBrowserTest {
133 public: 156 public:
134 void SetUpOnMainThread() override { 157 void SetUpOnMainThread() override {
135 InProcessBrowserTest::SetUpOnMainThread(); 158 InProcessBrowserTest::SetUpOnMainThread();
136 ASSERT_TRUE(embedded_test_server()->Start()); 159 ASSERT_TRUE(embedded_test_server()->Start());
137 } 160 }
138 161
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 std::unique_ptr<CallbackTester> tester( 224 std::unique_ptr<CallbackTester> tester(
202 new CallbackTester(run_loop.QuitClosure())); 225 new CallbackTester(run_loop.QuitClosure()));
203 226
204 NavigateAndRunInstallableManager(tester.get(), GetManifestParams(), 227 NavigateAndRunInstallableManager(tester.get(), GetManifestParams(),
205 "/banners/no_manifest_test_page.html"); 228 "/banners/no_manifest_test_page.html");
206 run_loop.Run(); 229 run_loop.Run();
207 230
208 // If there is no manifest, everything should be empty. 231 // If there is no manifest, everything should be empty.
209 EXPECT_TRUE(tester->manifest().IsEmpty()); 232 EXPECT_TRUE(tester->manifest().IsEmpty());
210 EXPECT_TRUE(tester->manifest_url().is_empty()); 233 EXPECT_TRUE(tester->manifest_url().is_empty());
211 EXPECT_TRUE(tester->icon_url().is_empty()); 234 EXPECT_TRUE(tester->primary_icon_url().is_empty());
212 EXPECT_EQ(nullptr, tester->icon()); 235 EXPECT_EQ(nullptr, tester->primary_icon());
236 EXPECT_TRUE(tester->badge_icon_url().is_empty());
237 EXPECT_EQ(nullptr, tester->badge_icon());
213 EXPECT_FALSE(tester->is_installable()); 238 EXPECT_FALSE(tester->is_installable());
214 EXPECT_EQ(NO_MANIFEST, tester->error_code()); 239 EXPECT_EQ(NO_MANIFEST, tester->error_code());
215 } 240 }
216 241
217 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckManifest404) { 242 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckManifest404) {
218 base::RunLoop run_loop; 243 base::RunLoop run_loop;
219 std::unique_ptr<CallbackTester> tester( 244 std::unique_ptr<CallbackTester> tester(
220 new CallbackTester(run_loop.QuitClosure())); 245 new CallbackTester(run_loop.QuitClosure()));
221 246
222 NavigateAndRunInstallableManager(tester.get(), GetManifestParams(), 247 NavigateAndRunInstallableManager(tester.get(), GetManifestParams(),
223 GetURLOfPageWithServiceWorkerAndManifest( 248 GetURLOfPageWithServiceWorkerAndManifest(
224 "/banners/manifest_missing.json")); 249 "/banners/manifest_missing.json"));
225 run_loop.Run(); 250 run_loop.Run();
226 251
227 // The installable manager should return a manifest URL even if it 404s. 252 // The installable manager should return a manifest URL even if it 404s.
228 // However, the check should fail with a ManifestEmpty error. 253 // However, the check should fail with a ManifestEmpty error.
229 EXPECT_TRUE(tester->manifest().IsEmpty()); 254 EXPECT_TRUE(tester->manifest().IsEmpty());
230 255
231 EXPECT_FALSE(tester->manifest_url().is_empty()); 256 EXPECT_FALSE(tester->manifest_url().is_empty());
232 EXPECT_TRUE(tester->icon_url().is_empty()); 257 EXPECT_TRUE(tester->primary_icon_url().is_empty());
233 EXPECT_EQ(nullptr, tester->icon()); 258 EXPECT_EQ(nullptr, tester->primary_icon());
259 EXPECT_TRUE(tester->badge_icon_url().is_empty());
260 EXPECT_EQ(nullptr, tester->badge_icon());
234 EXPECT_FALSE(tester->is_installable()); 261 EXPECT_FALSE(tester->is_installable());
235 EXPECT_EQ(MANIFEST_EMPTY, tester->error_code()); 262 EXPECT_EQ(MANIFEST_EMPTY, tester->error_code());
236 } 263 }
237 264
238 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckManifestOnly) { 265 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckManifestOnly) {
239 // Verify that asking for just the manifest works as expected. 266 // Verify that asking for just the manifest works as expected.
240 base::RunLoop run_loop; 267 base::RunLoop run_loop;
241 std::unique_ptr<CallbackTester> tester( 268 std::unique_ptr<CallbackTester> tester(
242 new CallbackTester(run_loop.QuitClosure())); 269 new CallbackTester(run_loop.QuitClosure()));
243 270
244 NavigateAndRunInstallableManager(tester.get(), GetManifestParams(), 271 NavigateAndRunInstallableManager(tester.get(), GetManifestParams(),
245 "/banners/manifest_test_page.html"); 272 "/banners/manifest_test_page.html");
246 run_loop.Run(); 273 run_loop.Run();
247 274
248 EXPECT_FALSE(tester->manifest().IsEmpty()); 275 EXPECT_FALSE(tester->manifest().IsEmpty());
249 EXPECT_FALSE(tester->manifest_url().is_empty()); 276 EXPECT_FALSE(tester->manifest_url().is_empty());
250 277
251 EXPECT_TRUE(tester->icon_url().is_empty()); 278 EXPECT_TRUE(tester->primary_icon_url().is_empty());
252 EXPECT_EQ(nullptr, tester->icon()); 279 EXPECT_EQ(nullptr, tester->primary_icon());
280 EXPECT_TRUE(tester->badge_icon_url().is_empty());
281 EXPECT_EQ(nullptr, tester->badge_icon());
253 EXPECT_FALSE(tester->is_installable()); 282 EXPECT_FALSE(tester->is_installable());
254 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); 283 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
255 } 284 }
256 285
257 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, 286 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest,
258 CheckInstallableParamsDefaultConstructor) { 287 CheckInstallableParamsDefaultConstructor) {
259 // Verify that using InstallableParams' default constructor is equivalent to 288 // Verify that using InstallableParams' default constructor is equivalent to
260 // just asking for the manifest alone. 289 // just asking for the manifest alone.
261 base::RunLoop run_loop; 290 base::RunLoop run_loop;
262 std::unique_ptr<CallbackTester> tester( 291 std::unique_ptr<CallbackTester> tester(
263 new CallbackTester(run_loop.QuitClosure())); 292 new CallbackTester(run_loop.QuitClosure()));
264 293
265 InstallableParams params; 294 InstallableParams params;
266 NavigateAndRunInstallableManager(tester.get(), params, 295 NavigateAndRunInstallableManager(tester.get(), params,
267 "/banners/manifest_test_page.html"); 296 "/banners/manifest_test_page.html");
268 run_loop.Run(); 297 run_loop.Run();
269 298
270 EXPECT_FALSE(tester->manifest().IsEmpty()); 299 EXPECT_FALSE(tester->manifest().IsEmpty());
271 EXPECT_FALSE(tester->manifest_url().is_empty()); 300 EXPECT_FALSE(tester->manifest_url().is_empty());
272 301
273 EXPECT_TRUE(tester->icon_url().is_empty()); 302 EXPECT_TRUE(tester->primary_icon_url().is_empty());
274 EXPECT_EQ(nullptr, tester->icon()); 303 EXPECT_EQ(nullptr, tester->primary_icon());
304 EXPECT_TRUE(tester->badge_icon_url().is_empty());
305 EXPECT_EQ(nullptr, tester->badge_icon());
275 EXPECT_FALSE(tester->is_installable()); 306 EXPECT_FALSE(tester->is_installable());
276 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); 307 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
277 } 308 }
278 309
279 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, 310 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest,
280 CheckManifestWithOnlyRelatedApplications) { 311 CheckManifestWithOnlyRelatedApplications) {
281 // This page has a manifest with only related applications specified. Asking 312 // This page has a manifest with only related applications specified. Asking
282 // for just the manifest should succeed. 313 // for just the manifest should succeed.
283 { 314 {
284 base::RunLoop run_loop; 315 base::RunLoop run_loop;
285 std::unique_ptr<CallbackTester> tester( 316 std::unique_ptr<CallbackTester> tester(
286 new CallbackTester(run_loop.QuitClosure())); 317 new CallbackTester(run_loop.QuitClosure()));
287 318
288 NavigateAndRunInstallableManager(tester.get(), GetManifestParams(), 319 NavigateAndRunInstallableManager(tester.get(), GetManifestParams(),
289 "/banners/play_app_test_page.html"); 320 "/banners/play_app_test_page.html");
290 run_loop.Run(); 321 run_loop.Run();
291 322
292 EXPECT_FALSE(tester->manifest().IsEmpty()); 323 EXPECT_FALSE(tester->manifest().IsEmpty());
293 EXPECT_FALSE(tester->manifest_url().is_empty()); 324 EXPECT_FALSE(tester->manifest_url().is_empty());
294 EXPECT_TRUE(tester->manifest().prefer_related_applications); 325 EXPECT_TRUE(tester->manifest().prefer_related_applications);
295 326
296 EXPECT_TRUE(tester->icon_url().is_empty()); 327 EXPECT_TRUE(tester->primary_icon_url().is_empty());
297 EXPECT_EQ(nullptr, tester->icon()); 328 EXPECT_EQ(nullptr, tester->primary_icon());
329 EXPECT_TRUE(tester->badge_icon_url().is_empty());
330 EXPECT_EQ(nullptr, tester->badge_icon());
298 EXPECT_FALSE(tester->is_installable()); 331 EXPECT_FALSE(tester->is_installable());
299 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); 332 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
300 } 333 }
301 334
302 // Ask for an icon (but don't navigate). This should fail with 335 // Ask for a primary icon (but don't navigate). This should fail with
303 // NO_ACCEPTABLE_ICON. 336 // NO_ACCEPTABLE_ICON.
304 { 337 {
305 base::RunLoop run_loop; 338 base::RunLoop run_loop;
306 std::unique_ptr<CallbackTester> tester( 339 std::unique_ptr<CallbackTester> tester(
307 new CallbackTester(run_loop.QuitClosure())); 340 new CallbackTester(run_loop.QuitClosure()));
308 341
309 RunInstallableManager(tester.get(), GetIconParams()); 342 RunInstallableManager(tester.get(), GetPrimaryIconParams());
310 run_loop.Run(); 343 run_loop.Run();
311 344
312 EXPECT_FALSE(tester->manifest().IsEmpty()); 345 EXPECT_FALSE(tester->manifest().IsEmpty());
313 EXPECT_FALSE(tester->manifest_url().is_empty()); 346 EXPECT_FALSE(tester->manifest_url().is_empty());
314 EXPECT_TRUE(tester->manifest().prefer_related_applications); 347 EXPECT_TRUE(tester->manifest().prefer_related_applications);
315 348
316 EXPECT_TRUE(tester->icon_url().is_empty()); 349 EXPECT_TRUE(tester->primary_icon_url().is_empty());
317 EXPECT_EQ(nullptr, tester->icon()); 350 EXPECT_EQ(nullptr, tester->primary_icon());
351 EXPECT_TRUE(tester->badge_icon_url().is_empty());
352 EXPECT_EQ(nullptr, tester->badge_icon());
318 EXPECT_FALSE(tester->is_installable()); 353 EXPECT_FALSE(tester->is_installable());
319 EXPECT_EQ(NO_ACCEPTABLE_ICON, tester->error_code()); 354 EXPECT_EQ(NO_ACCEPTABLE_ICON, tester->error_code());
320 } 355 }
321 356
322 // Ask for everything. This should fail with NO_ACCEPTABLE_ICON - the icon 357 // Ask for everything except badge icon. This should fail with
323 // fetch has already failed, so that cached error stops the installable check 358 // NO_ACCEPTABLE_ICON - the primary icon fetch has already failed, so that
324 // from being performed. 359 // cached error stops the installable check from being performed.
325 { 360 {
326 base::RunLoop run_loop; 361 base::RunLoop run_loop;
327 std::unique_ptr<CallbackTester> tester( 362 std::unique_ptr<CallbackTester> tester(
328 new CallbackTester(run_loop.QuitClosure())); 363 new CallbackTester(run_loop.QuitClosure()));
329 364
330 RunInstallableManager(tester.get(), GetWebAppParams()); 365 RunInstallableManager(tester.get(), GetWebAppParams());
331 run_loop.Run(); 366 run_loop.Run();
332 367
333 EXPECT_FALSE(tester->manifest().IsEmpty()); 368 EXPECT_FALSE(tester->manifest().IsEmpty());
334 EXPECT_FALSE(tester->manifest_url().is_empty()); 369 EXPECT_FALSE(tester->manifest_url().is_empty());
335 EXPECT_TRUE(tester->manifest().prefer_related_applications); 370 EXPECT_TRUE(tester->manifest().prefer_related_applications);
336 371
337 EXPECT_TRUE(tester->icon_url().is_empty()); 372 EXPECT_TRUE(tester->primary_icon_url().is_empty());
338 EXPECT_EQ(nullptr, tester->icon()); 373 EXPECT_EQ(nullptr, tester->primary_icon());
374 EXPECT_TRUE(tester->badge_icon_url().is_empty());
375 EXPECT_EQ(nullptr, tester->badge_icon());
339 EXPECT_FALSE(tester->is_installable()); 376 EXPECT_FALSE(tester->is_installable());
340 EXPECT_EQ(NO_ACCEPTABLE_ICON, tester->error_code()); 377 EXPECT_EQ(NO_ACCEPTABLE_ICON, tester->error_code());
341 } 378 }
342 379
343 // Ask for a different size icon. This should fail with START_URL_NOT_VALID 380 // Ask for a different size primary icon. This should fail with
344 // since we won't have a cached icon error. 381 // START_URL_NOT_VALID since we won't have a cached icon error.
345 { 382 {
346 base::RunLoop run_loop; 383 base::RunLoop run_loop;
347 std::unique_ptr<CallbackTester> tester( 384 std::unique_ptr<CallbackTester> tester(
348 new CallbackTester(run_loop.QuitClosure())); 385 new CallbackTester(run_loop.QuitClosure()));
349 386
350 InstallableParams params = GetWebAppParams(); 387 InstallableParams params = GetWebAppParams();
351 params.ideal_primary_icon_size_in_px = 96; 388 params.ideal_primary_icon_size_in_px = 96;
352 params.minimum_primary_icon_size_in_px = 96; 389 params.minimum_primary_icon_size_in_px = 96;
353 RunInstallableManager(tester.get(), params); 390 RunInstallableManager(tester.get(), params);
354 run_loop.Run(); 391 run_loop.Run();
355 392
356 EXPECT_FALSE(tester->manifest().IsEmpty()); 393 EXPECT_FALSE(tester->manifest().IsEmpty());
357 EXPECT_FALSE(tester->manifest_url().is_empty()); 394 EXPECT_FALSE(tester->manifest_url().is_empty());
358 EXPECT_TRUE(tester->manifest().prefer_related_applications); 395 EXPECT_TRUE(tester->manifest().prefer_related_applications);
359 396
360 EXPECT_TRUE(tester->icon_url().is_empty()); 397 EXPECT_TRUE(tester->primary_icon_url().is_empty());
361 EXPECT_EQ(nullptr, tester->icon()); 398 EXPECT_EQ(nullptr, tester->primary_icon());
399 EXPECT_TRUE(tester->badge_icon_url().is_empty());
400 EXPECT_EQ(nullptr, tester->badge_icon());
362 EXPECT_FALSE(tester->is_installable()); 401 EXPECT_FALSE(tester->is_installable());
363 EXPECT_EQ(START_URL_NOT_VALID, tester->error_code()); 402 EXPECT_EQ(START_URL_NOT_VALID, tester->error_code());
364 } 403 }
365 } 404 }
366 405
367 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckManifestAndIcon) { 406 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckManifestAndIcon) {
368 // Add to homescreen checks for manifest + icon. 407 // Add to homescreen checks for manifest + primary icon.
369 base::RunLoop run_loop; 408 {
370 std::unique_ptr<CallbackTester> tester( 409 base::RunLoop run_loop;
371 new CallbackTester(run_loop.QuitClosure())); 410 std::unique_ptr<CallbackTester> tester(
411 new CallbackTester(run_loop.QuitClosure()));
372 412
373 NavigateAndRunInstallableManager(tester.get(), GetIconParams(), 413 NavigateAndRunInstallableManager(tester.get(), GetPrimaryIconParams(),
374 "/banners/manifest_test_page.html"); 414 "/banners/manifest_test_page.html");
375 run_loop.Run(); 415 run_loop.Run();
376 416
377 EXPECT_FALSE(tester->manifest().IsEmpty()); 417 EXPECT_FALSE(tester->manifest().IsEmpty());
378 EXPECT_FALSE(tester->manifest_url().is_empty()); 418 EXPECT_FALSE(tester->manifest_url().is_empty());
379 419
380 EXPECT_FALSE(tester->icon_url().is_empty()); 420 EXPECT_FALSE(tester->primary_icon_url().is_empty());
381 EXPECT_NE(nullptr, tester->icon()); 421 EXPECT_NE(nullptr, tester->primary_icon());
422 EXPECT_TRUE(tester->badge_icon_url().is_empty());
423 EXPECT_EQ(nullptr, tester->badge_icon());
424 EXPECT_FALSE(tester->is_installable());
425 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
426 }
382 427
383 EXPECT_FALSE(tester->is_installable()); 428 // Add to homescreen checks for manifest + primary icon + badge icon.
384 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); 429 {
430 base::RunLoop run_loop;
431 std::unique_ptr<CallbackTester> tester(
432 new CallbackTester(run_loop.QuitClosure()));
433
434 RunInstallableManager(tester.get(), GetPrimaryIconAndBadgeIconParams());
435 run_loop.Run();
436
437 EXPECT_FALSE(tester->manifest().IsEmpty());
438 EXPECT_FALSE(tester->manifest_url().is_empty());
439
440 EXPECT_FALSE(tester->primary_icon_url().is_empty());
441 EXPECT_NE(nullptr, tester->primary_icon());
442 EXPECT_FALSE(tester->badge_icon_url().is_empty());
443 EXPECT_NE(nullptr, tester->badge_icon());
444 EXPECT_FALSE(tester->is_installable());
445 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
446 }
447
448 // Request an oversized badge icon. This should fetch only the manifest and
449 // the primary icon, and return no errors.
450 {
451 base::RunLoop run_loop;
452 std::unique_ptr<CallbackTester> tester(
453 new CallbackTester(run_loop.QuitClosure()));
454
455 InstallableParams params = GetPrimaryIconAndBadgeIconParams();
456 params.ideal_badge_icon_size_in_px = 2000;
457 params.minimum_badge_icon_size_in_px = 2000;
458 RunInstallableManager(tester.get(), params);
459 run_loop.Run();
460
461 EXPECT_FALSE(tester->manifest().IsEmpty());
462 EXPECT_FALSE(tester->manifest_url().is_empty());
463
464 EXPECT_FALSE(tester->primary_icon_url().is_empty());
465 EXPECT_NE(nullptr, tester->primary_icon());
466 EXPECT_TRUE(tester->badge_icon_url().is_empty());
467 EXPECT_EQ(nullptr, tester->badge_icon());
468 EXPECT_FALSE(tester->is_installable());
469 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
470 }
385 } 471 }
386 472
387 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckWebapp) { 473 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckWebapp) {
388 // Request everything. 474 // Request everything except badge icon.
389 { 475 {
390 base::RunLoop run_loop; 476 base::RunLoop run_loop;
391 std::unique_ptr<CallbackTester> tester( 477 std::unique_ptr<CallbackTester> tester(
392 new CallbackTester(run_loop.QuitClosure())); 478 new CallbackTester(run_loop.QuitClosure()));
393 479
394 NavigateAndRunInstallableManager(tester.get(), GetWebAppParams(), 480 NavigateAndRunInstallableManager(tester.get(), GetWebAppParams(),
395 "/banners/manifest_test_page.html"); 481 "/banners/manifest_test_page.html");
396 run_loop.Run(); 482 run_loop.Run();
397 483
398 EXPECT_FALSE(tester->manifest().IsEmpty()); 484 EXPECT_FALSE(tester->manifest().IsEmpty());
399 EXPECT_FALSE(tester->manifest_url().is_empty()); 485 EXPECT_FALSE(tester->manifest_url().is_empty());
400 EXPECT_TRUE(tester->is_installable()); 486 EXPECT_TRUE(tester->is_installable());
401 EXPECT_FALSE(tester->icon_url().is_empty()); 487 EXPECT_FALSE(tester->primary_icon_url().is_empty());
402 EXPECT_NE(nullptr, tester->icon()); 488 EXPECT_NE(nullptr, tester->primary_icon());
489 EXPECT_TRUE(tester->badge_icon_url().is_empty());
490 EXPECT_EQ(nullptr, tester->badge_icon());
403 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); 491 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
404 492
405 // Verify that the returned state matches manager internal state. 493 // Verify that the returned state matches manager internal state.
406 InstallableManager* manager = GetManager(); 494 InstallableManager* manager = GetManager();
407 495
408 EXPECT_FALSE(manager->manifest().IsEmpty()); 496 EXPECT_FALSE(manager->manifest().IsEmpty());
409 EXPECT_FALSE(manager->manifest_url().is_empty()); 497 EXPECT_FALSE(manager->manifest_url().is_empty());
410 EXPECT_TRUE(manager->is_installable()); 498 EXPECT_TRUE(manager->is_installable());
411 EXPECT_EQ(1u, manager->icons_.size()); 499 EXPECT_EQ(1u, manager->icons_.size());
412 EXPECT_FALSE((manager->icon_url({144,144}).is_empty())); 500 EXPECT_FALSE((manager->icon_url(kPrimaryIconParams).is_empty()));
413 EXPECT_NE(nullptr, (manager->icon({144,144}))); 501 EXPECT_NE(nullptr, (manager->icon(kPrimaryIconParams)));
414 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error()); 502 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error());
415 EXPECT_EQ(NO_ERROR_DETECTED, manager->installable_error()); 503 EXPECT_EQ(NO_ERROR_DETECTED, manager->installable_error());
416 EXPECT_EQ(NO_ERROR_DETECTED, (manager->icon_error({144,144}))); 504 EXPECT_EQ(NO_ERROR_DETECTED, (manager->icon_error(kPrimaryIconParams)));
417 EXPECT_TRUE(manager->tasks_.empty()); 505 EXPECT_TRUE(manager->tasks_.empty());
418 } 506 }
419 507
420 // Request everything again without navigating away. This should work fine. 508 // Request everything except badge icon again without navigating away. This
509 // should work fine.
421 { 510 {
422 base::RunLoop run_loop; 511 base::RunLoop run_loop;
423 std::unique_ptr<CallbackTester> tester( 512 std::unique_ptr<CallbackTester> tester(
424 new CallbackTester(run_loop.QuitClosure())); 513 new CallbackTester(run_loop.QuitClosure()));
425 514
426 RunInstallableManager(tester.get(), GetWebAppParams()); 515 RunInstallableManager(tester.get(), GetWebAppParams());
427 run_loop.Run(); 516 run_loop.Run();
428 517
429 EXPECT_FALSE(tester->manifest().IsEmpty()); 518 EXPECT_FALSE(tester->manifest().IsEmpty());
430 EXPECT_FALSE(tester->manifest_url().is_empty()); 519 EXPECT_FALSE(tester->manifest_url().is_empty());
431 EXPECT_TRUE(tester->is_installable()); 520 EXPECT_TRUE(tester->is_installable());
432 EXPECT_FALSE(tester->icon_url().is_empty()); 521 EXPECT_FALSE(tester->primary_icon_url().is_empty());
433 EXPECT_NE(nullptr, tester->icon()); 522 EXPECT_NE(nullptr, tester->primary_icon());
523 EXPECT_TRUE(tester->badge_icon_url().is_empty());
524 EXPECT_EQ(nullptr, tester->badge_icon());
434 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); 525 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
435 526
436 // Verify that the returned state matches manager internal state. 527 // Verify that the returned state matches manager internal state.
437 InstallableManager* manager = GetManager(); 528 InstallableManager* manager = GetManager();
438 529
439 EXPECT_FALSE(manager->manifest().IsEmpty()); 530 EXPECT_FALSE(manager->manifest().IsEmpty());
440 EXPECT_FALSE(manager->manifest_url().is_empty()); 531 EXPECT_FALSE(manager->manifest_url().is_empty());
441 EXPECT_TRUE(manager->is_installable()); 532 EXPECT_TRUE(manager->is_installable());
442 EXPECT_EQ(1u, manager->icons_.size()); 533 EXPECT_EQ(1u, manager->icons_.size());
443 EXPECT_FALSE((manager->icon_url({144,144}).is_empty())); 534 EXPECT_FALSE((manager->icon_url(kPrimaryIconParams).is_empty()));
444 EXPECT_NE(nullptr, (manager->icon({144,144}))); 535 EXPECT_NE(nullptr, (manager->icon(kPrimaryIconParams)));
445 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error()); 536 EXPECT_EQ(NO_ERROR_DETECTED, manager->manifest_error());
446 EXPECT_EQ(NO_ERROR_DETECTED, manager->installable_error()); 537 EXPECT_EQ(NO_ERROR_DETECTED, manager->installable_error());
447 EXPECT_EQ(NO_ERROR_DETECTED, (manager->icon_error({144,144}))); 538 EXPECT_EQ(NO_ERROR_DETECTED, (manager->icon_error(kPrimaryIconParams)));
448 EXPECT_TRUE(manager->tasks_.empty()); 539 EXPECT_TRUE(manager->tasks_.empty());
449 } 540 }
450 541
451 { 542 {
452 // Check that a subsequent navigation resets state. 543 // Check that a subsequent navigation resets state.
453 ui_test_utils::NavigateToURL(browser(), GURL("about:blank")); 544 ui_test_utils::NavigateToURL(browser(), GURL("about:blank"));
454 InstallableManager* manager = GetManager(); 545 InstallableManager* manager = GetManager();
455 546
456 EXPECT_TRUE(manager->manifest().IsEmpty()); 547 EXPECT_TRUE(manager->manifest().IsEmpty());
457 EXPECT_TRUE(manager->manifest_url().is_empty()); 548 EXPECT_TRUE(manager->manifest_url().is_empty());
(...skipping 11 matching lines...) Expand all
469 new CallbackTester(run_loop.QuitClosure())); 560 new CallbackTester(run_loop.QuitClosure()));
470 561
471 NavigateAndRunInstallableManager(tester.get(), GetWebAppParams(), 562 NavigateAndRunInstallableManager(tester.get(), GetWebAppParams(),
472 "/banners/iframe_test_page.html"); 563 "/banners/iframe_test_page.html");
473 run_loop.Run(); 564 run_loop.Run();
474 565
475 // The installable manager should only retrieve items in the main frame; 566 // The installable manager should only retrieve items in the main frame;
476 // everything should be empty here. 567 // everything should be empty here.
477 EXPECT_TRUE(tester->manifest().IsEmpty()); 568 EXPECT_TRUE(tester->manifest().IsEmpty());
478 EXPECT_TRUE(tester->manifest_url().is_empty()); 569 EXPECT_TRUE(tester->manifest_url().is_empty());
479 EXPECT_TRUE(tester->icon_url().is_empty()); 570 EXPECT_TRUE(tester->primary_icon_url().is_empty());
480 EXPECT_EQ(nullptr, tester->icon()); 571 EXPECT_EQ(nullptr, tester->primary_icon());
572 EXPECT_TRUE(tester->badge_icon_url().is_empty());
573 EXPECT_EQ(nullptr, tester->badge_icon());
481 EXPECT_FALSE(tester->is_installable()); 574 EXPECT_FALSE(tester->is_installable());
482 EXPECT_EQ(NO_MANIFEST, tester->error_code()); 575 EXPECT_EQ(NO_MANIFEST, tester->error_code());
483 } 576 }
484 577
485 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, 578 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest,
486 CheckPageWithManifestAndNoServiceWorker) { 579 CheckPageWithManifestAndNoServiceWorker) {
487 // Just fetch the manifest. This should have no error. 580 // Just fetch the manifest. This should have no error.
488 { 581 {
489 base::RunLoop run_loop; 582 base::RunLoop run_loop;
490 std::unique_ptr<CallbackTester> tester( 583 std::unique_ptr<CallbackTester> tester(
491 new CallbackTester(run_loop.QuitClosure())); 584 new CallbackTester(run_loop.QuitClosure()));
492 585
493 NavigateAndRunInstallableManager( 586 NavigateAndRunInstallableManager(
494 tester.get(), GetManifestParams(), 587 tester.get(), GetManifestParams(),
495 "/banners/manifest_no_service_worker.html"); 588 "/banners/manifest_no_service_worker.html");
496 run_loop.Run(); 589 run_loop.Run();
497 590
498 EXPECT_FALSE(tester->manifest().IsEmpty()); 591 EXPECT_FALSE(tester->manifest().IsEmpty());
499 EXPECT_FALSE(tester->manifest_url().is_empty()); 592 EXPECT_FALSE(tester->manifest_url().is_empty());
500 593
501 EXPECT_TRUE(tester->icon_url().is_empty()); 594 EXPECT_TRUE(tester->primary_icon_url().is_empty());
502 EXPECT_EQ(nullptr, tester->icon()); 595 EXPECT_EQ(nullptr, tester->primary_icon());
596 EXPECT_TRUE(tester->badge_icon_url().is_empty());
597 EXPECT_EQ(nullptr, tester->badge_icon());
503 EXPECT_FALSE(tester->is_installable()); 598 EXPECT_FALSE(tester->is_installable());
504 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); 599 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
505 } 600 }
506 601
507 // Fetch the full criteria should fail. 602 // Fetch the full criteria should fail.
508 { 603 {
509 base::RunLoop run_loop; 604 base::RunLoop run_loop;
510 std::unique_ptr<CallbackTester> tester( 605 std::unique_ptr<CallbackTester> tester(
511 new CallbackTester(run_loop.QuitClosure())); 606 new CallbackTester(run_loop.QuitClosure()));
512 607
513 RunInstallableManager(tester.get(), GetWebAppParams()); 608 RunInstallableManager(tester.get(), GetWebAppParams());
514 run_loop.Run(); 609 run_loop.Run();
515 610
516 EXPECT_FALSE(tester->manifest().IsEmpty()); 611 EXPECT_FALSE(tester->manifest().IsEmpty());
517 EXPECT_FALSE(tester->manifest_url().is_empty()); 612 EXPECT_FALSE(tester->manifest_url().is_empty());
518 613
519 EXPECT_TRUE(tester->icon_url().is_empty()); 614 EXPECT_TRUE(tester->primary_icon_url().is_empty());
520 EXPECT_EQ(nullptr, tester->icon()); 615 EXPECT_EQ(nullptr, tester->primary_icon());
616 EXPECT_TRUE(tester->badge_icon_url().is_empty());
617 EXPECT_EQ(nullptr, tester->badge_icon());
521 EXPECT_FALSE(tester->is_installable()); 618 EXPECT_FALSE(tester->is_installable());
522 EXPECT_EQ(NO_MATCHING_SERVICE_WORKER, tester->error_code()); 619 EXPECT_EQ(NO_MATCHING_SERVICE_WORKER, tester->error_code());
523 } 620 }
524 } 621 }
525 622
526 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckDataUrlIcon) { 623 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, CheckDataUrlIcon) {
527 // Verify that InstallableManager can handle data URL icons. 624 // Verify that InstallableManager can handle data URL icons.
528 base::RunLoop run_loop; 625 base::RunLoop run_loop;
529 std::unique_ptr<CallbackTester> tester( 626 std::unique_ptr<CallbackTester> tester(
530 new CallbackTester(run_loop.QuitClosure())); 627 new CallbackTester(run_loop.QuitClosure()));
531 628
532 NavigateAndRunInstallableManager(tester.get(), GetWebAppParams(), 629 NavigateAndRunInstallableManager(tester.get(), GetWebAppParams(),
533 GetURLOfPageWithServiceWorkerAndManifest( 630 GetURLOfPageWithServiceWorkerAndManifest(
534 "/banners/manifest_data_url_icon.json")); 631 "/banners/manifest_data_url_icon.json"));
535 run_loop.Run(); 632 run_loop.Run();
536 633
537 EXPECT_FALSE(tester->manifest().IsEmpty()); 634 EXPECT_FALSE(tester->manifest().IsEmpty());
538 EXPECT_FALSE(tester->manifest_url().is_empty()); 635 EXPECT_FALSE(tester->manifest_url().is_empty());
636
637 EXPECT_FALSE(tester->primary_icon_url().is_empty());
638 EXPECT_NE(nullptr, tester->primary_icon());
639 EXPECT_EQ(144, tester->primary_icon()->width());
640 EXPECT_TRUE(tester->badge_icon_url().is_empty());
641 EXPECT_EQ(nullptr, tester->badge_icon());
539 EXPECT_TRUE(tester->is_installable()); 642 EXPECT_TRUE(tester->is_installable());
540 EXPECT_FALSE(tester->icon_url().is_empty());
541 ASSERT_NE(nullptr, tester->icon());
542 EXPECT_EQ(144, tester->icon()->width());
543 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); 643 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
544 } 644 }
545 645
546 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, 646 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest,
547 CheckManifestCorruptedIcon) { 647 CheckManifestCorruptedIcon) {
548 // Verify that the returned InstallableData::icon is null if the web manifest 648 // Verify that the returned InstallableData::primary_icon is null if the web
549 // points to a corrupt icon. 649 // manifest points to a corrupt primary icon.
550 base::RunLoop run_loop; 650 base::RunLoop run_loop;
551 std::unique_ptr<CallbackTester> tester( 651 std::unique_ptr<CallbackTester> tester(
552 new CallbackTester(run_loop.QuitClosure())); 652 new CallbackTester(run_loop.QuitClosure()));
553 653
554 NavigateAndRunInstallableManager(tester.get(), GetIconParams(), 654 NavigateAndRunInstallableManager(tester.get(), GetPrimaryIconParams(),
555 GetURLOfPageWithServiceWorkerAndManifest( 655 GetURLOfPageWithServiceWorkerAndManifest(
556 "/banners/manifest_bad_icon.json")); 656 "/banners/manifest_bad_icon.json"));
557 run_loop.Run(); 657 run_loop.Run();
558 658
559 EXPECT_FALSE(tester->manifest().IsEmpty()); 659 EXPECT_FALSE(tester->manifest().IsEmpty());
560 EXPECT_FALSE(tester->manifest_url().is_empty()); 660 EXPECT_FALSE(tester->manifest_url().is_empty());
561 EXPECT_TRUE(tester->icon_url().is_empty()); 661 EXPECT_TRUE(tester->primary_icon_url().is_empty());
562 EXPECT_EQ(nullptr, tester->icon()); 662 EXPECT_EQ(nullptr, tester->primary_icon());
663 EXPECT_TRUE(tester->badge_icon_url().is_empty());
664 EXPECT_EQ(nullptr, tester->badge_icon());
563 EXPECT_FALSE(tester->is_installable()); 665 EXPECT_FALSE(tester->is_installable());
564 EXPECT_EQ(NO_ICON_AVAILABLE, tester->error_code()); 666 EXPECT_EQ(NO_ICON_AVAILABLE, tester->error_code());
565 } 667 }
566 668
567 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, 669 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest,
568 CheckChangeInIconDimensions) { 670 CheckChangeInIconDimensions) {
569 // Verify that a follow-up request for an icon with a different size works. 671 // Verify that a follow-up request for a primary icon with a different size
672 // works.
570 { 673 {
571 base::RunLoop run_loop; 674 base::RunLoop run_loop;
572 std::unique_ptr<CallbackTester> tester( 675 std::unique_ptr<CallbackTester> tester(
573 new CallbackTester(run_loop.QuitClosure())); 676 new CallbackTester(run_loop.QuitClosure()));
574 677
575 NavigateAndRunInstallableManager(tester.get(), GetWebAppParams(), 678 NavigateAndRunInstallableManager(tester.get(), GetWebAppParams(),
576 "/banners/manifest_test_page.html"); 679 "/banners/manifest_test_page.html");
577 run_loop.Run(); 680 run_loop.Run();
578 681
579 EXPECT_FALSE(tester->manifest_url().is_empty()); 682 EXPECT_FALSE(tester->manifest_url().is_empty());
580 EXPECT_FALSE(tester->manifest().IsEmpty()); 683 EXPECT_FALSE(tester->manifest().IsEmpty());
581 EXPECT_TRUE(tester->is_installable()); 684 EXPECT_TRUE(tester->is_installable());
582 EXPECT_FALSE(tester->icon_url().is_empty()); 685 EXPECT_FALSE(tester->primary_icon_url().is_empty());
583 EXPECT_NE(nullptr, tester->icon()); 686 EXPECT_NE(nullptr, tester->primary_icon());
687 EXPECT_TRUE(tester->badge_icon_url().is_empty());
688 EXPECT_EQ(nullptr, tester->badge_icon());
584 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); 689 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
585 } 690 }
586 691
587 { 692 {
588 base::RunLoop run_loop; 693 base::RunLoop run_loop;
589 std::unique_ptr<CallbackTester> tester( 694 std::unique_ptr<CallbackTester> tester(
590 new CallbackTester(run_loop.QuitClosure())); 695 new CallbackTester(run_loop.QuitClosure()));
591 696
592 // Dial up the icon size requirements to something that isn't available. 697 // Dial up the primary icon size requirements to something that isn't
593 // This should now fail with NoIconMatchingRequirements. 698 // available. This should now fail with NoIconMatchingRequirements.
594 InstallableParams params = GetWebAppParams(); 699 InstallableParams params = GetWebAppParams();
595 params.ideal_primary_icon_size_in_px = 2000; 700 params.ideal_primary_icon_size_in_px = 2000;
596 params.minimum_primary_icon_size_in_px = 2000; 701 params.minimum_primary_icon_size_in_px = 2000;
597 RunInstallableManager(tester.get(), params); 702 RunInstallableManager(tester.get(), params);
598 run_loop.Run(); 703 run_loop.Run();
599 704
600 EXPECT_FALSE(tester->manifest_url().is_empty()); 705 EXPECT_FALSE(tester->manifest_url().is_empty());
601 EXPECT_FALSE(tester->manifest().IsEmpty()); 706 EXPECT_FALSE(tester->manifest().IsEmpty());
602 EXPECT_TRUE(tester->is_installable()); 707 EXPECT_TRUE(tester->is_installable());
603 EXPECT_TRUE(tester->icon_url().is_empty()); 708 EXPECT_TRUE(tester->primary_icon_url().is_empty());
604 EXPECT_EQ(nullptr, tester->icon()); 709 EXPECT_EQ(nullptr, tester->primary_icon());
710 EXPECT_TRUE(tester->badge_icon_url().is_empty());
711 EXPECT_EQ(nullptr, tester->badge_icon());
605 EXPECT_EQ(NO_ACCEPTABLE_ICON, tester->error_code()); 712 EXPECT_EQ(NO_ACCEPTABLE_ICON, tester->error_code());
606 } 713 }
607 714
608 // Navigate and verify the reverse: an overly large icon requested first 715 // Navigate and verify the reverse: an overly large primary icon requested
609 // fails, but a smaller icon requested second passes. 716 // first fails, but a smaller primary icon requested second passes.
610 { 717 {
611 base::RunLoop run_loop; 718 base::RunLoop run_loop;
612 std::unique_ptr<CallbackTester> tester( 719 std::unique_ptr<CallbackTester> tester(
613 new CallbackTester(run_loop.QuitClosure())); 720 new CallbackTester(run_loop.QuitClosure()));
614 721
615 // This should fail with NoIconMatchingRequirements. 722 // This should fail with NoIconMatchingRequirements.
616 InstallableParams params = GetWebAppParams(); 723 InstallableParams params = GetWebAppParams();
617 params.ideal_primary_icon_size_in_px = 2000; 724 params.ideal_primary_icon_size_in_px = 2000;
618 params.minimum_primary_icon_size_in_px = 2000; 725 params.minimum_primary_icon_size_in_px = 2000;
619 NavigateAndRunInstallableManager(tester.get(), params, 726 NavigateAndRunInstallableManager(tester.get(), params,
620 "/banners/manifest_test_page.html"); 727 "/banners/manifest_test_page.html");
621 run_loop.Run(); 728 run_loop.Run();
622 729
623 EXPECT_FALSE(tester->manifest_url().is_empty()); 730 EXPECT_FALSE(tester->manifest_url().is_empty());
624 EXPECT_FALSE(tester->manifest().IsEmpty()); 731 EXPECT_FALSE(tester->manifest().IsEmpty());
625 EXPECT_TRUE(tester->is_installable()); 732 EXPECT_TRUE(tester->is_installable());
626 EXPECT_TRUE(tester->icon_url().is_empty()); 733 EXPECT_TRUE(tester->primary_icon_url().is_empty());
627 EXPECT_EQ(nullptr, tester->icon()); 734 EXPECT_EQ(nullptr, tester->primary_icon());
735 EXPECT_TRUE(tester->badge_icon_url().is_empty());
736 EXPECT_EQ(nullptr, tester->badge_icon());
628 EXPECT_EQ(NO_ACCEPTABLE_ICON, tester->error_code()); 737 EXPECT_EQ(NO_ACCEPTABLE_ICON, tester->error_code());
629 } 738 }
630 739
631 { 740 {
632 base::RunLoop run_loop; 741 base::RunLoop run_loop;
633 std::unique_ptr<CallbackTester> tester( 742 std::unique_ptr<CallbackTester> tester(
634 new CallbackTester(run_loop.QuitClosure())); 743 new CallbackTester(run_loop.QuitClosure()));
635 RunInstallableManager(tester.get(), GetWebAppParams()); 744 RunInstallableManager(tester.get(), GetWebAppParams());
636 745
637 run_loop.Run(); 746 run_loop.Run();
638 747
639 // The smaller icon requirements should allow this to pass. 748 // The smaller primary icon requirements should allow this to pass.
640 EXPECT_FALSE(tester->manifest_url().is_empty()); 749 EXPECT_FALSE(tester->manifest_url().is_empty());
641 EXPECT_FALSE(tester->manifest().IsEmpty()); 750 EXPECT_FALSE(tester->manifest().IsEmpty());
642 EXPECT_TRUE(tester->is_installable()); 751 EXPECT_TRUE(tester->is_installable());
643 EXPECT_FALSE(tester->icon_url().is_empty()); 752 EXPECT_FALSE(tester->primary_icon_url().is_empty());
644 EXPECT_NE(nullptr, tester->icon()); 753 EXPECT_NE(nullptr, tester->primary_icon());
754 EXPECT_TRUE(tester->badge_icon_url().is_empty());
755 EXPECT_EQ(nullptr, tester->badge_icon());
645 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code()); 756 EXPECT_EQ(NO_ERROR_DETECTED, tester->error_code());
646 } 757 }
647 } 758 }
648 759
649 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest, 760 IN_PROC_BROWSER_TEST_F(InstallableManagerBrowserTest,
650 CheckNestedCallsToGetData) { 761 CheckNestedCallsToGetData) {
651 // Verify that we can call GetData while in a callback from GetData. 762 // Verify that we can call GetData while in a callback from GetData.
652 base::RunLoop run_loop; 763 base::RunLoop run_loop;
653 InstallableParams params = GetWebAppParams(); 764 InstallableParams params = GetWebAppParams();
654 std::unique_ptr<NestedCallbackTester> tester( 765 std::unique_ptr<NestedCallbackTester> tester(
655 new NestedCallbackTester(GetManager(), params, run_loop.QuitClosure())); 766 new NestedCallbackTester(GetManager(), params, run_loop.QuitClosure()));
656 767
657 tester->Run(); 768 tester->Run();
658 run_loop.Run(); 769 run_loop.Run();
659 } 770 }
OLDNEW
« no previous file with comments | « chrome/browser/installable/installable_manager.cc ('k') | chrome/browser/installable/installable_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698