| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 } |
| OLD | NEW |