| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 | 7 |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <map> | 9 #include <map> |
| 10 #include <string> | 10 #include <string> |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 const size_t count = GetArcItemCount(); | 132 const size_t count = GetArcItemCount(); |
| 133 for (size_t i = 0; i < count; ++i) { | 133 for (size_t i = 0; i < count; ++i) { |
| 134 ArcAppItem* item = GetArcItem(i); | 134 ArcAppItem* item = GetArcItem(i); |
| 135 if (item && item->id() == id) | 135 if (item && item->id() == id) |
| 136 return item; | 136 return item; |
| 137 } | 137 } |
| 138 return nullptr; | 138 return nullptr; |
| 139 } | 139 } |
| 140 | 140 |
| 141 // Validate that prefs and model have right content. | 141 // Validate that prefs and model have right content. |
| 142 void ValidateHaveApps(const std::vector<arc::AppInfo> apps) { | 142 void ValidateHaveApps(const std::vector<arc::mojom::AppInfo> apps) { |
| 143 ArcAppListPrefs* prefs = ArcAppListPrefs::Get(profile_.get()); | 143 ArcAppListPrefs* prefs = ArcAppListPrefs::Get(profile_.get()); |
| 144 const std::vector<std::string> ids = prefs->GetAppIds(); | 144 const std::vector<std::string> ids = prefs->GetAppIds(); |
| 145 ASSERT_EQ(apps.size(), ids.size()); | 145 ASSERT_EQ(apps.size(), ids.size()); |
| 146 ASSERT_EQ(apps.size(), GetArcItemCount()); | 146 ASSERT_EQ(apps.size(), GetArcItemCount()); |
| 147 // In principle, order of items is not defined. | 147 // In principle, order of items is not defined. |
| 148 for (auto& app : apps) { | 148 for (auto& app : apps) { |
| 149 const std::string id = ArcAppTest::GetAppId(app); | 149 const std::string id = ArcAppTest::GetAppId(app); |
| 150 EXPECT_NE(std::find(ids.begin(), ids.end(), id), ids.end()); | 150 EXPECT_NE(std::find(ids.begin(), ids.end(), id), ids.end()); |
| 151 std::unique_ptr<ArcAppListPrefs::AppInfo> app_info = prefs->GetApp(id); | 151 std::unique_ptr<ArcAppListPrefs::AppInfo> app_info = prefs->GetApp(id); |
| 152 ASSERT_NE(nullptr, app_info.get()); | 152 ASSERT_NE(nullptr, app_info.get()); |
| 153 EXPECT_EQ(app.name, app_info->name); | 153 EXPECT_EQ(app.name, app_info->name); |
| 154 EXPECT_EQ(app.package_name, app_info->package_name); | 154 EXPECT_EQ(app.package_name, app_info->package_name); |
| 155 EXPECT_EQ(app.activity, app_info->activity); | 155 EXPECT_EQ(app.activity, app_info->activity); |
| 156 | 156 |
| 157 const ArcAppItem* app_item = FindArcItem(id); | 157 const ArcAppItem* app_item = FindArcItem(id); |
| 158 ASSERT_NE(nullptr, app_item); | 158 ASSERT_NE(nullptr, app_item); |
| 159 EXPECT_EQ(app.name, app_item->GetDisplayName()); | 159 EXPECT_EQ(app.name, app_item->GetDisplayName()); |
| 160 } | 160 } |
| 161 } | 161 } |
| 162 | 162 |
| 163 // Validate that requested apps have required ready state and other apps have | 163 // Validate that requested apps have required ready state and other apps have |
| 164 // opposite state. | 164 // opposite state. |
| 165 void ValidateAppReadyState(const std::vector<arc::AppInfo> apps, bool ready) { | 165 void ValidateAppReadyState(const std::vector<arc::mojom::AppInfo> apps, |
| 166 bool ready) { |
| 166 ArcAppListPrefs* prefs = ArcAppListPrefs::Get(profile_.get()); | 167 ArcAppListPrefs* prefs = ArcAppListPrefs::Get(profile_.get()); |
| 167 ASSERT_NE(nullptr, prefs); | 168 ASSERT_NE(nullptr, prefs); |
| 168 | 169 |
| 169 std::vector<std::string> ids = prefs->GetAppIds(); | 170 std::vector<std::string> ids = prefs->GetAppIds(); |
| 170 EXPECT_EQ(ids.size(), GetArcItemCount()); | 171 EXPECT_EQ(ids.size(), GetArcItemCount()); |
| 171 | 172 |
| 172 // Process requested apps. | 173 // Process requested apps. |
| 173 for (auto& app : apps) { | 174 for (auto& app : apps) { |
| 174 const std::string id = ArcAppTest::GetAppId(app); | 175 const std::string id = ArcAppTest::GetAppId(app); |
| 175 std::vector<std::string>::iterator it_id = std::find(ids.begin(), | 176 std::vector<std::string>::iterator it_id = std::find(ids.begin(), |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 representation.pixel_width()); | 214 representation.pixel_width()); |
| 214 EXPECT_EQ(gfx::ToCeiledInt(app_list::kGridIconDimension * scale), | 215 EXPECT_EQ(gfx::ToCeiledInt(app_list::kGridIconDimension * scale), |
| 215 representation.pixel_height()); | 216 representation.pixel_height()); |
| 216 } | 217 } |
| 217 } | 218 } |
| 218 | 219 |
| 219 AppListControllerDelegate* controller() { return controller_.get(); } | 220 AppListControllerDelegate* controller() { return controller_.get(); } |
| 220 | 221 |
| 221 Profile* profile() { return profile_.get(); } | 222 Profile* profile() { return profile_.get(); } |
| 222 | 223 |
| 223 const std::vector<arc::AppInfo>& fake_apps() const { | 224 const std::vector<arc::mojom::AppInfo>& fake_apps() const { |
| 224 return arc_test_.fake_apps(); | 225 return arc_test_.fake_apps(); |
| 225 } | 226 } |
| 226 | 227 |
| 227 arc::FakeArcBridgeService* bridge_service() { | 228 arc::FakeArcBridgeService* bridge_service() { |
| 228 return arc_test_.bridge_service(); | 229 return arc_test_.bridge_service(); |
| 229 } | 230 } |
| 230 | 231 |
| 231 arc::FakeAppInstance* app_instance() { | 232 arc::FakeAppInstance* app_instance() { |
| 232 return arc_test_.app_instance(); | 233 return arc_test_.app_instance(); |
| 233 } | 234 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 244 TEST_F(ArcAppModelBuilderTest, RefreshAllOnReady) { | 245 TEST_F(ArcAppModelBuilderTest, RefreshAllOnReady) { |
| 245 // There should already have been one call, when the interface was | 246 // There should already have been one call, when the interface was |
| 246 // registered. | 247 // registered. |
| 247 EXPECT_EQ(1, app_instance()->refresh_app_list_count()); | 248 EXPECT_EQ(1, app_instance()->refresh_app_list_count()); |
| 248 bridge_service()->SetReady(); | 249 bridge_service()->SetReady(); |
| 249 app_instance()->RefreshAppList(); | 250 app_instance()->RefreshAppList(); |
| 250 EXPECT_EQ(2, app_instance()->refresh_app_list_count()); | 251 EXPECT_EQ(2, app_instance()->refresh_app_list_count()); |
| 251 } | 252 } |
| 252 | 253 |
| 253 TEST_F(ArcAppModelBuilderTest, RefreshAllFillsContent) { | 254 TEST_F(ArcAppModelBuilderTest, RefreshAllFillsContent) { |
| 254 ValidateHaveApps(std::vector<arc::AppInfo>()); | 255 ValidateHaveApps(std::vector<arc::mojom::AppInfo>()); |
| 255 bridge_service()->SetReady(); | 256 bridge_service()->SetReady(); |
| 256 app_instance()->RefreshAppList(); | 257 app_instance()->RefreshAppList(); |
| 257 app_instance()->SendRefreshAppList(fake_apps()); | 258 app_instance()->SendRefreshAppList(fake_apps()); |
| 258 ValidateHaveApps(fake_apps()); | 259 ValidateHaveApps(fake_apps()); |
| 259 } | 260 } |
| 260 | 261 |
| 261 TEST_F(ArcAppModelBuilderTest, MultipleRefreshAll) { | 262 TEST_F(ArcAppModelBuilderTest, MultipleRefreshAll) { |
| 262 ValidateHaveApps(std::vector<arc::AppInfo>()); | 263 ValidateHaveApps(std::vector<arc::mojom::AppInfo>()); |
| 263 bridge_service()->SetReady(); | 264 bridge_service()->SetReady(); |
| 264 app_instance()->RefreshAppList(); | 265 app_instance()->RefreshAppList(); |
| 265 // Send info about all fake apps except last. | 266 // Send info about all fake apps except last. |
| 266 std::vector<arc::AppInfo> apps1(fake_apps().begin(), fake_apps().end() - 1); | 267 std::vector<arc::mojom::AppInfo> apps1(fake_apps().begin(), |
| 268 fake_apps().end() - 1); |
| 267 app_instance()->SendRefreshAppList(apps1); | 269 app_instance()->SendRefreshAppList(apps1); |
| 268 // At this point all apps (except last) should exist and be ready. | 270 // At this point all apps (except last) should exist and be ready. |
| 269 ValidateHaveApps(apps1); | 271 ValidateHaveApps(apps1); |
| 270 ValidateAppReadyState(apps1, true); | 272 ValidateAppReadyState(apps1, true); |
| 271 | 273 |
| 272 // Send info about all fake apps except first. | 274 // Send info about all fake apps except first. |
| 273 std::vector<arc::AppInfo> apps2(fake_apps().begin() + 1, fake_apps().end()); | 275 std::vector<arc::mojom::AppInfo> apps2(fake_apps().begin() + 1, |
| 276 fake_apps().end()); |
| 274 app_instance()->SendRefreshAppList(apps2); | 277 app_instance()->SendRefreshAppList(apps2); |
| 275 // At this point all apps should exist but first one should be non-ready. | 278 // At this point all apps should exist but first one should be non-ready. |
| 276 ValidateHaveApps(apps2); | 279 ValidateHaveApps(apps2); |
| 277 ValidateAppReadyState(apps2, true); | 280 ValidateAppReadyState(apps2, true); |
| 278 | 281 |
| 279 // Send info about all fake apps. | 282 // Send info about all fake apps. |
| 280 app_instance()->SendRefreshAppList(fake_apps()); | 283 app_instance()->SendRefreshAppList(fake_apps()); |
| 281 // At this point all apps should exist and be ready. | 284 // At this point all apps should exist and be ready. |
| 282 ValidateHaveApps(fake_apps()); | 285 ValidateHaveApps(fake_apps()); |
| 283 ValidateAppReadyState(fake_apps(), true); | 286 ValidateAppReadyState(fake_apps(), true); |
| 284 | 287 |
| 285 // Send info no app available. | 288 // Send info no app available. |
| 286 std::vector<arc::AppInfo> no_apps; | 289 std::vector<arc::mojom::AppInfo> no_apps; |
| 287 app_instance()->SendRefreshAppList(no_apps); | 290 app_instance()->SendRefreshAppList(no_apps); |
| 288 // At this point no app should exist. | 291 // At this point no app should exist. |
| 289 ValidateHaveApps(no_apps); | 292 ValidateHaveApps(no_apps); |
| 290 } | 293 } |
| 291 | 294 |
| 292 TEST_F(ArcAppModelBuilderTest, StopStartServicePreserveApps) { | 295 TEST_F(ArcAppModelBuilderTest, StopStartServicePreserveApps) { |
| 293 ArcAppListPrefs* prefs = ArcAppListPrefs::Get(profile_.get()); | 296 ArcAppListPrefs* prefs = ArcAppListPrefs::Get(profile_.get()); |
| 294 ASSERT_NE(nullptr, prefs); | 297 ASSERT_NE(nullptr, prefs); |
| 295 | 298 |
| 296 bridge_service()->SetReady(); | 299 bridge_service()->SetReady(); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 341 | 344 |
| 342 TEST_F(ArcAppModelBuilderTest, LaunchApps) { | 345 TEST_F(ArcAppModelBuilderTest, LaunchApps) { |
| 343 // Disable attempts to dismiss app launcher view. | 346 // Disable attempts to dismiss app launcher view. |
| 344 ChromeAppListItem::OverrideAppListControllerDelegateForTesting(controller()); | 347 ChromeAppListItem::OverrideAppListControllerDelegateForTesting(controller()); |
| 345 | 348 |
| 346 bridge_service()->SetReady(); | 349 bridge_service()->SetReady(); |
| 347 app_instance()->RefreshAppList(); | 350 app_instance()->RefreshAppList(); |
| 348 app_instance()->SendRefreshAppList(fake_apps()); | 351 app_instance()->SendRefreshAppList(fake_apps()); |
| 349 | 352 |
| 350 // Simulate item activate. | 353 // Simulate item activate. |
| 351 const arc::AppInfo& app_first = fake_apps()[0]; | 354 const arc::mojom::AppInfo& app_first = fake_apps()[0]; |
| 352 const arc::AppInfo& app_last = fake_apps()[0]; | 355 const arc::mojom::AppInfo& app_last = fake_apps()[0]; |
| 353 ArcAppItem* item_first = FindArcItem(ArcAppTest::GetAppId(app_first)); | 356 ArcAppItem* item_first = FindArcItem(ArcAppTest::GetAppId(app_first)); |
| 354 ArcAppItem* item_last = FindArcItem(ArcAppTest::GetAppId(app_last)); | 357 ArcAppItem* item_last = FindArcItem(ArcAppTest::GetAppId(app_last)); |
| 355 ASSERT_NE(nullptr, item_first); | 358 ASSERT_NE(nullptr, item_first); |
| 356 ASSERT_NE(nullptr, item_last); | 359 ASSERT_NE(nullptr, item_last); |
| 357 item_first->Activate(0); | 360 item_first->Activate(0); |
| 358 app_instance()->WaitForIncomingMethodCall(); | 361 app_instance()->WaitForIncomingMethodCall(); |
| 359 item_last->Activate(0); | 362 item_last->Activate(0); |
| 360 app_instance()->WaitForIncomingMethodCall(); | 363 app_instance()->WaitForIncomingMethodCall(); |
| 361 item_first->Activate(0); | 364 item_first->Activate(0); |
| 362 app_instance()->WaitForIncomingMethodCall(); | 365 app_instance()->WaitForIncomingMethodCall(); |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 438 EXPECT_EQ(app_masks[id], expected_mask); | 441 EXPECT_EQ(app_masks[id], expected_mask); |
| 439 } | 442 } |
| 440 } | 443 } |
| 441 | 444 |
| 442 TEST_F(ArcAppModelBuilderTest, InstallIcon) { | 445 TEST_F(ArcAppModelBuilderTest, InstallIcon) { |
| 443 // Make sure we are on UI thread. | 446 // Make sure we are on UI thread. |
| 444 ASSERT_TRUE(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 447 ASSERT_TRUE(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 445 | 448 |
| 446 bridge_service()->SetReady(); | 449 bridge_service()->SetReady(); |
| 447 app_instance()->RefreshAppList(); | 450 app_instance()->RefreshAppList(); |
| 448 app_instance()->SendRefreshAppList( | 451 app_instance()->SendRefreshAppList(std::vector<arc::mojom::AppInfo>( |
| 449 std::vector<arc::AppInfo>(fake_apps().begin(), fake_apps().begin() + 1)); | 452 fake_apps().begin(), fake_apps().begin() + 1)); |
| 450 const arc::AppInfo& app = fake_apps()[0]; | 453 const arc::mojom::AppInfo& app = fake_apps()[0]; |
| 451 | 454 |
| 452 ArcAppListPrefs* prefs = ArcAppListPrefs::Get(profile_.get()); | 455 ArcAppListPrefs* prefs = ArcAppListPrefs::Get(profile_.get()); |
| 453 ASSERT_NE(nullptr, prefs); | 456 ASSERT_NE(nullptr, prefs); |
| 454 | 457 |
| 455 const ui::ScaleFactor scale_factor = ui::GetSupportedScaleFactors()[0]; | 458 const ui::ScaleFactor scale_factor = ui::GetSupportedScaleFactors()[0]; |
| 456 const float scale = ui::GetScaleForScaleFactor(scale_factor); | 459 const float scale = ui::GetScaleForScaleFactor(scale_factor); |
| 457 const base::FilePath icon_path = prefs->GetIconPath(ArcAppTest::GetAppId(app), | 460 const base::FilePath icon_path = prefs->GetIconPath(ArcAppTest::GetAppId(app), |
| 458 scale_factor); | 461 scale_factor); |
| 459 EXPECT_EQ(true, !base::PathExists(icon_path)); | 462 EXPECT_EQ(true, !base::PathExists(icon_path)); |
| 460 | 463 |
| 461 const ArcAppItem* app_item = FindArcItem(ArcAppTest::GetAppId(app)); | 464 const ArcAppItem* app_item = FindArcItem(ArcAppTest::GetAppId(app)); |
| 462 EXPECT_NE(nullptr, app_item); | 465 EXPECT_NE(nullptr, app_item); |
| 463 // This initiates async loading. | 466 // This initiates async loading. |
| 464 app_item->icon().GetRepresentation(scale); | 467 app_item->icon().GetRepresentation(scale); |
| 465 | 468 |
| 466 // Process pending tasks. | 469 // Process pending tasks. |
| 467 content::BrowserThread::GetBlockingPool()->FlushForTesting(); | 470 content::BrowserThread::GetBlockingPool()->FlushForTesting(); |
| 468 base::RunLoop().RunUntilIdle(); | 471 base::RunLoop().RunUntilIdle(); |
| 469 | 472 |
| 470 // Validating decoded content does not fit well for unit tests. | 473 // Validating decoded content does not fit well for unit tests. |
| 471 ArcAppIcon::DisableSafeDecodingForTesting(); | 474 ArcAppIcon::DisableSafeDecodingForTesting(); |
| 472 | 475 |
| 473 // Now send generated icon for the app. | 476 // Now send generated icon for the app. |
| 474 std::string png_data; | 477 std::string png_data; |
| 475 EXPECT_EQ(true, | 478 EXPECT_EQ(true, app_instance()->GenerateAndSendIcon( |
| 476 app_instance()->GenerateAndSendIcon( | 479 app, static_cast<arc::mojom::ScaleFactor>(scale_factor), |
| 477 app, static_cast<arc::ScaleFactor>(scale_factor), &png_data)); | 480 &png_data)); |
| 478 | 481 |
| 479 // Process pending tasks. | 482 // Process pending tasks. |
| 480 content::BrowserThread::GetBlockingPool()->FlushForTesting(); | 483 content::BrowserThread::GetBlockingPool()->FlushForTesting(); |
| 481 base::RunLoop().RunUntilIdle(); | 484 base::RunLoop().RunUntilIdle(); |
| 482 | 485 |
| 483 // Validate that icons are installed, have right content and icon is | 486 // Validate that icons are installed, have right content and icon is |
| 484 // refreshed for ARC app item. | 487 // refreshed for ARC app item. |
| 485 EXPECT_EQ(true, base::PathExists(icon_path)); | 488 EXPECT_EQ(true, base::PathExists(icon_path)); |
| 486 | 489 |
| 487 std::string icon_data; | 490 std::string icon_data; |
| 488 // Read the file from disk and compare with reference data. | 491 // Read the file from disk and compare with reference data. |
| 489 EXPECT_EQ(true, base::ReadFileToString(icon_path, &icon_data)); | 492 EXPECT_EQ(true, base::ReadFileToString(icon_path, &icon_data)); |
| 490 ASSERT_EQ(icon_data, png_data); | 493 ASSERT_EQ(icon_data, png_data); |
| 491 } | 494 } |
| 492 | 495 |
| 493 TEST_F(ArcAppModelBuilderTest, RemoveAppCleanUpFolder) { | 496 TEST_F(ArcAppModelBuilderTest, RemoveAppCleanUpFolder) { |
| 494 // Make sure we are on UI thread. | 497 // Make sure we are on UI thread. |
| 495 ASSERT_TRUE(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 498 ASSERT_TRUE(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 496 | 499 |
| 497 bridge_service()->SetReady(); | 500 bridge_service()->SetReady(); |
| 498 app_instance()->RefreshAppList(); | 501 app_instance()->RefreshAppList(); |
| 499 app_instance()->SendRefreshAppList( | 502 app_instance()->SendRefreshAppList(std::vector<arc::mojom::AppInfo>( |
| 500 std::vector<arc::AppInfo>(fake_apps().begin(), fake_apps().begin() + 1)); | 503 fake_apps().begin(), fake_apps().begin() + 1)); |
| 501 const arc::AppInfo& app = fake_apps()[0]; | 504 const arc::mojom::AppInfo& app = fake_apps()[0]; |
| 502 | 505 |
| 503 ArcAppListPrefs* prefs = ArcAppListPrefs::Get(profile_.get()); | 506 ArcAppListPrefs* prefs = ArcAppListPrefs::Get(profile_.get()); |
| 504 ASSERT_NE(nullptr, prefs); | 507 ASSERT_NE(nullptr, prefs); |
| 505 | 508 |
| 506 const std::string app_id = ArcAppTest::GetAppId(app); | 509 const std::string app_id = ArcAppTest::GetAppId(app); |
| 507 const base::FilePath app_path = prefs->GetAppPath(app_id); | 510 const base::FilePath app_path = prefs->GetAppPath(app_id); |
| 508 const ui::ScaleFactor scale_factor = ui::GetSupportedScaleFactors()[0]; | 511 const ui::ScaleFactor scale_factor = ui::GetSupportedScaleFactors()[0]; |
| 509 | 512 |
| 510 // No app folder by default. | 513 // No app folder by default. |
| 511 EXPECT_EQ(true, !base::PathExists(app_path)); | 514 EXPECT_EQ(true, !base::PathExists(app_path)); |
| 512 | 515 |
| 513 // Request icon, this will create app folder. | 516 // Request icon, this will create app folder. |
| 514 prefs->RequestIcon(app_id, scale_factor); | 517 prefs->RequestIcon(app_id, scale_factor); |
| 515 // Now send generated icon for the app. | 518 // Now send generated icon for the app. |
| 516 std::string png_data; | 519 std::string png_data; |
| 517 EXPECT_EQ(true, | 520 EXPECT_EQ(true, app_instance()->GenerateAndSendIcon( |
| 518 app_instance()->GenerateAndSendIcon( | 521 app, static_cast<arc::mojom::ScaleFactor>(scale_factor), |
| 519 app, static_cast<arc::ScaleFactor>(scale_factor), &png_data)); | 522 &png_data)); |
| 520 content::BrowserThread::GetBlockingPool()->FlushForTesting(); | 523 content::BrowserThread::GetBlockingPool()->FlushForTesting(); |
| 521 base::RunLoop().RunUntilIdle(); | 524 base::RunLoop().RunUntilIdle(); |
| 522 EXPECT_EQ(true, base::PathExists(app_path)); | 525 EXPECT_EQ(true, base::PathExists(app_path)); |
| 523 | 526 |
| 524 // Send empty app list. This will delete app and its folder. | 527 // Send empty app list. This will delete app and its folder. |
| 525 app_instance()->SendRefreshAppList(std::vector<arc::AppInfo>()); | 528 app_instance()->SendRefreshAppList(std::vector<arc::mojom::AppInfo>()); |
| 526 content::BrowserThread::GetBlockingPool()->FlushForTesting(); | 529 content::BrowserThread::GetBlockingPool()->FlushForTesting(); |
| 527 base::RunLoop().RunUntilIdle(); | 530 base::RunLoop().RunUntilIdle(); |
| 528 EXPECT_EQ(true, !base::PathExists(app_path)); | 531 EXPECT_EQ(true, !base::PathExists(app_path)); |
| 529 } | 532 } |
| 530 | 533 |
| 531 TEST_F(ArcAppModelBuilderTest, LastLaunchTime) { | 534 TEST_F(ArcAppModelBuilderTest, LastLaunchTime) { |
| 532 // Make sure we are on UI thread. | 535 // Make sure we are on UI thread. |
| 533 ASSERT_TRUE(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); | 536 ASSERT_TRUE(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
| 534 | 537 |
| 535 bridge_service()->SetReady(); | 538 bridge_service()->SetReady(); |
| 536 app_instance()->RefreshAppList(); | 539 app_instance()->RefreshAppList(); |
| 537 app_instance()->SendRefreshAppList( | 540 app_instance()->SendRefreshAppList(std::vector<arc::mojom::AppInfo>( |
| 538 std::vector<arc::AppInfo>(fake_apps().begin(), fake_apps().begin() + 2)); | 541 fake_apps().begin(), fake_apps().begin() + 2)); |
| 539 const arc::AppInfo& app1 = fake_apps()[0]; | 542 const arc::mojom::AppInfo& app1 = fake_apps()[0]; |
| 540 const arc::AppInfo& app2 = fake_apps()[1]; | 543 const arc::mojom::AppInfo& app2 = fake_apps()[1]; |
| 541 const std::string id1 = ArcAppTest::GetAppId(app1); | 544 const std::string id1 = ArcAppTest::GetAppId(app1); |
| 542 const std::string id2 = ArcAppTest::GetAppId(app2); | 545 const std::string id2 = ArcAppTest::GetAppId(app2); |
| 543 | 546 |
| 544 ArcAppListPrefs* prefs = ArcAppListPrefs::Get(profile_.get()); | 547 ArcAppListPrefs* prefs = ArcAppListPrefs::Get(profile_.get()); |
| 545 ASSERT_NE(nullptr, prefs); | 548 ASSERT_NE(nullptr, prefs); |
| 546 | 549 |
| 547 std::unique_ptr<ArcAppListPrefs::AppInfo> app_info = prefs->GetApp(id1); | 550 std::unique_ptr<ArcAppListPrefs::AppInfo> app_info = prefs->GetApp(id1); |
| 548 ASSERT_NE(nullptr, app_info.get()); | 551 ASSERT_NE(nullptr, app_info.get()); |
| 549 | 552 |
| 550 EXPECT_EQ(base::Time(), app_info->last_launch_time); | 553 EXPECT_EQ(base::Time(), app_info->last_launch_time); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 569 app_info = prefs->GetApp(id2); | 572 app_info = prefs->GetApp(id2); |
| 570 ASSERT_NE(nullptr, app_info.get()); | 573 ASSERT_NE(nullptr, app_info.get()); |
| 571 ASSERT_LE(time_before, app_info->last_launch_time); | 574 ASSERT_LE(time_before, app_info->last_launch_time); |
| 572 ASSERT_GE(time_after, app_info->last_launch_time); | 575 ASSERT_GE(time_after, app_info->last_launch_time); |
| 573 } | 576 } |
| 574 | 577 |
| 575 TEST_F(ArcAppModelBuilderTest, IconLoader) { | 578 TEST_F(ArcAppModelBuilderTest, IconLoader) { |
| 576 // Validating decoded content does not fit well for unit tests. | 579 // Validating decoded content does not fit well for unit tests. |
| 577 ArcAppIcon::DisableSafeDecodingForTesting(); | 580 ArcAppIcon::DisableSafeDecodingForTesting(); |
| 578 | 581 |
| 579 const arc::AppInfo& app = fake_apps()[0]; | 582 const arc::mojom::AppInfo& app = fake_apps()[0]; |
| 580 const std::string app_id = ArcAppTest::GetAppId(app); | 583 const std::string app_id = ArcAppTest::GetAppId(app); |
| 581 | 584 |
| 582 bridge_service()->SetReady(); | 585 bridge_service()->SetReady(); |
| 583 app_instance()->RefreshAppList(); | 586 app_instance()->RefreshAppList(); |
| 584 app_instance()->SendRefreshAppList( | 587 app_instance()->SendRefreshAppList(std::vector<arc::mojom::AppInfo>( |
| 585 std::vector<arc::AppInfo>(fake_apps().begin(), fake_apps().begin() + 1)); | 588 fake_apps().begin(), fake_apps().begin() + 1)); |
| 586 | 589 |
| 587 FakeAppIconLoaderDelegate delegate; | 590 FakeAppIconLoaderDelegate delegate; |
| 588 ArcAppIconLoader icon_loader(profile(), app_list::kListIconSize, &delegate); | 591 ArcAppIconLoader icon_loader(profile(), app_list::kListIconSize, &delegate); |
| 589 EXPECT_EQ(0UL, delegate.update_image_cnt()); | 592 EXPECT_EQ(0UL, delegate.update_image_cnt()); |
| 590 icon_loader.FetchImage(app_id); | 593 icon_loader.FetchImage(app_id); |
| 591 EXPECT_EQ(1UL, delegate.update_image_cnt()); | 594 EXPECT_EQ(1UL, delegate.update_image_cnt()); |
| 592 EXPECT_EQ(app_id, delegate.app_id()); | 595 EXPECT_EQ(app_id, delegate.app_id()); |
| 593 | 596 |
| 594 // Validate default image. | 597 // Validate default image. |
| 595 ValidateIcon(delegate.image()); | 598 ValidateIcon(delegate.image()); |
| 596 | 599 |
| 597 const std::vector<ui::ScaleFactor>& scale_factors = | 600 const std::vector<ui::ScaleFactor>& scale_factors = |
| 598 ui::GetSupportedScaleFactors(); | 601 ui::GetSupportedScaleFactors(); |
| 599 for (auto& scale_factor : scale_factors) { | 602 for (auto& scale_factor : scale_factors) { |
| 600 std::string png_data; | 603 std::string png_data; |
| 601 EXPECT_TRUE(app_instance()->GenerateAndSendIcon( | 604 EXPECT_TRUE(app_instance()->GenerateAndSendIcon( |
| 602 app, static_cast<arc::ScaleFactor>(scale_factor), | 605 app, static_cast<arc::mojom::ScaleFactor>(scale_factor), &png_data)); |
| 603 &png_data)); | |
| 604 } | 606 } |
| 605 | 607 |
| 606 // Process pending tasks, this installs icons. | 608 // Process pending tasks, this installs icons. |
| 607 content::BrowserThread::GetBlockingPool()->FlushForTesting(); | 609 content::BrowserThread::GetBlockingPool()->FlushForTesting(); |
| 608 base::RunLoop().RunUntilIdle(); | 610 base::RunLoop().RunUntilIdle(); |
| 609 | 611 |
| 610 // Allow one more circle to read and decode installed icons. | 612 // Allow one more circle to read and decode installed icons. |
| 611 content::BrowserThread::GetBlockingPool()->FlushForTesting(); | 613 content::BrowserThread::GetBlockingPool()->FlushForTesting(); |
| 612 base::RunLoop().RunUntilIdle(); | 614 base::RunLoop().RunUntilIdle(); |
| 613 | 615 |
| 614 // Validate loaded image. | 616 // Validate loaded image. |
| 615 EXPECT_EQ(1 + scale_factors.size(), delegate.update_image_cnt()); | 617 EXPECT_EQ(1 + scale_factors.size(), delegate.update_image_cnt()); |
| 616 EXPECT_EQ(app_id, delegate.app_id()); | 618 EXPECT_EQ(app_id, delegate.app_id()); |
| 617 ValidateIcon(delegate.image()); | 619 ValidateIcon(delegate.image()); |
| 618 } | 620 } |
| OLD | NEW |