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

Side by Side Diff: chrome/browser/android/webapk/webapk_installer_unittest.cc

Issue 2528073002: Add a flag in WebAPK's proto when the Web App Manifest is no longer available. (Closed)
Patch Set: pkotwicz@'s comments. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 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/android/webapk/webapk_installer.h" 5 #include "chrome/browser/android/webapk/webapk_installer.h"
6 6
7 #include <jni.h> 7 #include <jni.h>
8 #include <memory> 8 #include <memory>
9 #include <string> 9 #include <string>
10 10
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 base::Bind(&WebApkInstallerRunner::OnCompleted, 125 base::Bind(&WebApkInstallerRunner::OnCompleted,
126 base::Unretained(this))); 126 base::Unretained(this)));
127 Run(); 127 Run();
128 } 128 }
129 129
130 void RunUpdateWebApk() { 130 void RunUpdateWebApk() {
131 const std::string kIconMurmur2Hash = "0"; 131 const std::string kIconMurmur2Hash = "0";
132 const int kWebApkVersion = 1; 132 const int kWebApkVersion = 1;
133 133
134 WebApkInstaller* installer = CreateWebApkInstaller(); 134 WebApkInstaller* installer = CreateWebApkInstaller();
135 std::map<std::string, std::string> icon_url_to_murmur2_hash_map;
136 icon_url_to_murmur2_hash_map[best_icon_url_.spec()] = kIconMurmur2Hash;
135 137
136 installer->UpdateAsyncWithURLRequestContextGetter( 138 installer->UpdateAsyncWithURLRequestContextGetter(
137 url_request_context_getter_.get(), 139 url_request_context_getter_.get(),
138 base::Bind(&WebApkInstallerRunner::OnCompleted, base::Unretained(this)), 140 base::Bind(&WebApkInstallerRunner::OnCompleted, base::Unretained(this)),
139 kIconMurmur2Hash,
140 kDownloadedWebApkPackageName, 141 kDownloadedWebApkPackageName,
141 kWebApkVersion); 142 kWebApkVersion,
143 false /* stale_manifest */,
144 icon_url_to_murmur2_hash_map);
142 145
143 Run(); 146 Run();
144 } 147 }
145 148
146 WebApkInstaller* CreateWebApkInstaller() { 149 WebApkInstaller* CreateWebApkInstaller() {
147 ShortcutInfo info(GURL::EmptyGURL()); 150 ShortcutInfo info(GURL::EmptyGURL());
148 info.best_icon_url = best_icon_url_; 151 info.best_icon_url = best_icon_url_;
149 152
150 // WebApkInstaller owns itself. 153 // WebApkInstaller owns itself.
151 WebApkInstaller* installer = new TestWebApkInstaller( 154 WebApkInstaller* installer = new TestWebApkInstaller(
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 // WebAPK creation request. 244 // WebAPK creation request.
242 void SetWebApkResponseBuilder(const WebApkResponseBuilder& builder) { 245 void SetWebApkResponseBuilder(const WebApkResponseBuilder& builder) {
243 webapk_response_builder_ = builder; 246 webapk_response_builder_ = builder;
244 } 247 }
245 248
246 std::unique_ptr<WebApkInstallerRunner> CreateWebApkInstallerRunner() { 249 std::unique_ptr<WebApkInstallerRunner> CreateWebApkInstallerRunner() {
247 return std::unique_ptr<WebApkInstallerRunner>( 250 return std::unique_ptr<WebApkInstallerRunner>(
248 new WebApkInstallerRunner(best_icon_url_)); 251 new WebApkInstallerRunner(best_icon_url_));
249 } 252 }
250 253
254 void BuildWebApkProto(
pkotwicz 2016/12/19 21:59:53 Sorry for being a pain. Can you move this function
255 const GURL& best_icon_url,
256 bool stale_manifest,
257 const std::map<std::string, std::string>& icon_url_to_murmur2_hash_map) {
258 ShortcutInfo info(GURL::EmptyGURL());
259 info.best_icon_url = best_icon_url;
260
261 // WebApkInstaller owns itself.
262 WebApkInstaller* installer =
263 new TestWebApkInstaller(info, SkBitmap(), false);
264 installer->SetTimeoutMs(100);
265 installer->BuildWebApkProtoInBackgroundForTesting(
266 base::Bind(&WebApkInstallerTest::OnBuiltWebApkProto,
267 base::Unretained(this)),
268 stale_manifest,
269 icon_url_to_murmur2_hash_map);
270
271 base::RunLoop run_loop;
272 on_completed_callback_ = run_loop.QuitClosure();
273 run_loop.Run();
274 }
275
276 webapk::WebApk* GetWebApkRequest() { return webapk_request_.get(); }
277
251 net::test_server::EmbeddedTestServer* test_server() { return &test_server_; } 278 net::test_server::EmbeddedTestServer* test_server() { return &test_server_; }
252 279
253 private: 280 private:
254 // Sets default configuration for running WebApkInstaller. 281 // Sets default configuration for running WebApkInstaller.
255 void SetDefaults() { 282 void SetDefaults() {
256 GURL best_icon_url = test_server_.GetURL(kBestIconUrl); 283 GURL best_icon_url = test_server_.GetURL(kBestIconUrl);
257 SetBestIconUrl(best_icon_url); 284 SetBestIconUrl(best_icon_url);
258 GURL server_url = test_server_.GetURL(kServerUrl); 285 GURL server_url = test_server_.GetURL(kServerUrl);
259 SetWebApkServerUrl(server_url); 286 SetWebApkServerUrl(server_url);
260 GURL download_url = test_server_.GetURL(kDownloadUrl); 287 GURL download_url = test_server_.GetURL(kDownloadUrl);
261 SetWebApkResponseBuilder( 288 SetWebApkResponseBuilder(
262 base::Bind(&BuildValidWebApkResponse, download_url)); 289 base::Bind(&BuildValidWebApkResponse, download_url));
263 } 290 }
264 291
265 std::unique_ptr<net::test_server::HttpResponse> HandleWebApkRequest( 292 std::unique_ptr<net::test_server::HttpResponse> HandleWebApkRequest(
266 const net::test_server::HttpRequest& request) { 293 const net::test_server::HttpRequest& request) {
267 return (request.relative_url == kServerUrl) 294 return (request.relative_url == kServerUrl)
268 ? webapk_response_builder_.Run() 295 ? webapk_response_builder_.Run()
269 : std::unique_ptr<net::test_server::HttpResponse>(); 296 : std::unique_ptr<net::test_server::HttpResponse>();
270 } 297 }
271 298
299 // Called when the |webapk| request is populated.
300 void OnBuiltWebApkProto(std::unique_ptr<webapk::WebApk> webapk) {
301 webapk_request_ = std::move(webapk);
302 on_completed_callback_.Run();
303 }
304
272 content::TestBrowserThreadBundle thread_bundle_; 305 content::TestBrowserThreadBundle thread_bundle_;
273 net::EmbeddedTestServer test_server_; 306 net::EmbeddedTestServer test_server_;
274 307
275 // Web Manifest's icon URL. 308 // Web Manifest's icon URL.
276 GURL best_icon_url_; 309 GURL best_icon_url_;
277 310
278 // Builds response to the WebAPK creation request. 311 // Builds response to the WebAPK creation request.
279 WebApkResponseBuilder webapk_response_builder_; 312 WebApkResponseBuilder webapk_response_builder_;
280 313
314 // The populated webapk::WebApk.
315 std::unique_ptr<webapk::WebApk> webapk_request_;
316
317 // Called after the installation process has succeeded or failed.
318 base::Closure on_completed_callback_;
319
281 DISALLOW_COPY_AND_ASSIGN(WebApkInstallerTest); 320 DISALLOW_COPY_AND_ASSIGN(WebApkInstallerTest);
282 }; 321 };
283 322
284 // Test installation succeeding. 323 // Test installation succeeding.
285 TEST_F(WebApkInstallerTest, Success) { 324 TEST_F(WebApkInstallerTest, Success) {
286 std::unique_ptr<WebApkInstallerRunner> runner = CreateWebApkInstallerRunner(); 325 std::unique_ptr<WebApkInstallerRunner> runner = CreateWebApkInstallerRunner();
287 runner->RunInstallWebApk(); 326 runner->RunInstallWebApk();
288 EXPECT_TRUE(runner->success()); 327 EXPECT_TRUE(runner->success());
289 } 328 }
290 329
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 EXPECT_TRUE(runner->success()); 400 EXPECT_TRUE(runner->success());
362 } 401 }
363 402
364 // Test installation succeeds using Google Play. 403 // Test installation succeeds using Google Play.
365 TEST_F(WebApkInstallerTest, InstallFromGooglePlaySuccess) { 404 TEST_F(WebApkInstallerTest, InstallFromGooglePlaySuccess) {
366 std::unique_ptr<WebApkInstallerRunner> runner = CreateWebApkInstallerRunner(); 405 std::unique_ptr<WebApkInstallerRunner> runner = CreateWebApkInstallerRunner();
367 runner->SetHasGooglePlayWebApkInstallDelegate(true); 406 runner->SetHasGooglePlayWebApkInstallDelegate(true);
368 runner->RunInstallWebApk(); 407 runner->RunInstallWebApk();
369 EXPECT_TRUE(runner->success()); 408 EXPECT_TRUE(runner->success());
370 } 409 }
410
411 // When there is no Web Manifest available for a site, an empty |best_icon_url|
412 // is used to build a WebApk update request. Tests the request can be built
413 // properly.
414 TEST_F(WebApkInstallerTest, BuildWebApkProtoWhenManifestIsObsolete) {
415 GURL icon_url_1 = test_server()->GetURL("/icon1.png");
416 GURL icon_url_2 = test_server()->GetURL("/icon2.png");
417 std::string icon_murmur2_hash_1 = "1";
418 std::string icon_murmur2_hash_2 = "2";
419 std::map<std::string, std::string> icon_url_to_murmur2_hash_map;
420 icon_url_to_murmur2_hash_map[icon_url_1.spec()] = icon_murmur2_hash_1;
421 icon_url_to_murmur2_hash_map[icon_url_2.spec()] = icon_murmur2_hash_2;
422
423 BuildWebApkProto(GURL(""), true, icon_url_to_murmur2_hash_map);
424 webapk::WebApk* webapk_request = GetWebApkRequest();
425 ASSERT_NE(nullptr, webapk_request);
426
427 webapk::WebAppManifest manifest = webapk_request->manifest();
428 ASSERT_EQ(3, manifest.icons_size());
429
430 webapk::Image icons[3];
431 for (int i = 0; i < 3; ++i)
432 icons[i] = manifest.icons(i);
433
434 EXPECT_EQ("", icons[0].src());
435 EXPECT_FALSE(icons[0].has_hash());
436 EXPECT_TRUE(icons[0].has_image_data());
437
438 EXPECT_EQ(icon_url_1.spec(), icons[1].src());
439 EXPECT_EQ(icon_murmur2_hash_1, icons[1].hash());
440 EXPECT_FALSE(icons[1].has_image_data());
441
442 EXPECT_EQ(icon_url_2.spec(), icons[2].src());
443 EXPECT_EQ(icon_murmur2_hash_2, icons[2].hash());
444 EXPECT_FALSE(icons[2].has_image_data());
445 }
446
447 // Tests a WebApk install or update request is built properly when the Chrome
448 // knows the best icon URL of a site after fetching its Web Manifest.
449 TEST_F(WebApkInstallerTest, BuildWebApkProtoWhenManifestIsAvailable) {
450 GURL icon_url_1 = test_server()->GetURL("/icon.png");
451 GURL best_icon_url = test_server()->GetURL(kBestIconUrl);
452 std::string icon_murmur2_hash_1 = "1";
453 std::string best_icon_murmur2_hash = "0";
454 std::map<std::string, std::string> icon_url_to_murmur2_hash_map;
455 icon_url_to_murmur2_hash_map[icon_url_1.spec()] = icon_murmur2_hash_1;
456 icon_url_to_murmur2_hash_map[best_icon_url.spec()] =
457 best_icon_murmur2_hash;
458
459 BuildWebApkProto(best_icon_url, false, icon_url_to_murmur2_hash_map);
460 webapk::WebApk* webapk_request = GetWebApkRequest();
461 ASSERT_NE(nullptr, webapk_request);
462
463 webapk::WebAppManifest manifest = webapk_request->manifest();
464 ASSERT_EQ(2, manifest.icons_size());
465
466 webapk::Image icons[2];
467 for (int i = 0; i < 2; ++i)
468 icons[i] = manifest.icons(i);
469
470 EXPECT_EQ(best_icon_url.spec(), icons[0].src());
471 EXPECT_EQ(best_icon_murmur2_hash, icons[0].hash());
472 EXPECT_TRUE(icons[0].has_image_data());
473
474 EXPECT_EQ(icon_url_1.spec(), icons[1].src());
475 EXPECT_EQ(icon_murmur2_hash_1, icons[1].hash());
476 EXPECT_FALSE(icons[1].has_image_data());
477 }
OLDNEW
« no previous file with comments | « chrome/browser/android/webapk/webapk_installer.cc ('k') | chrome/browser/android/webapk/webapk_update_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698