| 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 <algorithm> | 5 #include <algorithm> |
| 6 #include <map> | 6 #include <map> |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 app.activity = buffer; | 59 app.activity = buffer; |
| 60 fake_apps_.push_back(app); | 60 fake_apps_.push_back(app); |
| 61 } | 61 } |
| 62 | 62 |
| 63 bridge_service_.reset(new arc::FakeArcBridgeService()); | 63 bridge_service_.reset(new arc::FakeArcBridgeService()); |
| 64 app_instance_.reset( | 64 app_instance_.reset( |
| 65 new arc::FakeAppInstance(ArcAppListPrefs::Get(profile_.get()))); | 65 new arc::FakeAppInstance(ArcAppListPrefs::Get(profile_.get()))); |
| 66 arc::AppInstancePtr instance; | 66 arc::AppInstancePtr instance; |
| 67 app_instance_->Bind(mojo::GetProxy(&instance)); | 67 app_instance_->Bind(mojo::GetProxy(&instance)); |
| 68 bridge_service_->OnAppInstanceReady(std::move(instance)); | 68 bridge_service_->OnAppInstanceReady(std::move(instance)); |
| 69 // Wait for Init() and then RefreshAppList(). |
| 70 app_instance_->WaitForIncomingMethodCall(); |
| 71 app_instance_->WaitForIncomingMethodCall(); |
| 69 | 72 |
| 70 // Check initial conditions. | 73 // Check initial conditions. |
| 71 EXPECT_EQ(bridge_service_.get(), arc::ArcBridgeService::Get()); | 74 EXPECT_EQ(bridge_service_.get(), arc::ArcBridgeService::Get()); |
| 72 EXPECT_EQ(true, !arc::ArcBridgeService::Get()->available()); | 75 EXPECT_EQ(true, !arc::ArcBridgeService::Get()->available()); |
| 73 EXPECT_EQ(arc::ArcBridgeService::State::STOPPED, | 76 EXPECT_EQ(arc::ArcBridgeService::State::STOPPED, |
| 74 arc::ArcBridgeService::Get()->state()); | 77 arc::ArcBridgeService::Get()->state()); |
| 75 | 78 |
| 76 CreateBuilder(); | 79 CreateBuilder(); |
| 77 | 80 |
| 78 // At this point we should have ArcAppListPrefs as observer of service. | 81 // At this point we should have ArcAppListPrefs as observer of service. |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 210 scoped_ptr<test::TestAppListControllerDelegate> controller_; | 213 scoped_ptr<test::TestAppListControllerDelegate> controller_; |
| 211 scoped_ptr<ArcAppModelBuilder> builder_; | 214 scoped_ptr<ArcAppModelBuilder> builder_; |
| 212 scoped_ptr<arc::FakeArcBridgeService> bridge_service_; | 215 scoped_ptr<arc::FakeArcBridgeService> bridge_service_; |
| 213 scoped_ptr<arc::FakeAppInstance> app_instance_; | 216 scoped_ptr<arc::FakeAppInstance> app_instance_; |
| 214 std::vector<arc::AppInfo> fake_apps_; | 217 std::vector<arc::AppInfo> fake_apps_; |
| 215 | 218 |
| 216 DISALLOW_COPY_AND_ASSIGN(ArcAppModelBuilderTest); | 219 DISALLOW_COPY_AND_ASSIGN(ArcAppModelBuilderTest); |
| 217 }; | 220 }; |
| 218 | 221 |
| 219 TEST_F(ArcAppModelBuilderTest, RefreshAllOnReady) { | 222 TEST_F(ArcAppModelBuilderTest, RefreshAllOnReady) { |
| 220 EXPECT_EQ(0, app_instance()->refresh_app_list_count()); | 223 // There should already have been one call, when the interface was |
| 224 // registered. |
| 225 EXPECT_EQ(1, app_instance()->refresh_app_list_count()); |
| 221 bridge_service()->SetReady(); | 226 bridge_service()->SetReady(); |
| 222 app_instance()->RefreshAppList(); | 227 app_instance()->RefreshAppList(); |
| 223 EXPECT_EQ(1, app_instance()->refresh_app_list_count()); | 228 EXPECT_EQ(2, app_instance()->refresh_app_list_count()); |
| 224 } | 229 } |
| 225 | 230 |
| 226 TEST_F(ArcAppModelBuilderTest, RefreshAllFillsContent) { | 231 TEST_F(ArcAppModelBuilderTest, RefreshAllFillsContent) { |
| 227 ValidateHaveApps(std::vector<arc::AppInfo>()); | 232 ValidateHaveApps(std::vector<arc::AppInfo>()); |
| 228 bridge_service()->SetReady(); | 233 bridge_service()->SetReady(); |
| 229 app_instance()->RefreshAppList(); | 234 app_instance()->RefreshAppList(); |
| 230 app_instance()->SendRefreshAppList(fake_apps()); | 235 app_instance()->SendRefreshAppList(fake_apps()); |
| 231 ValidateHaveApps(fake_apps()); | 236 ValidateHaveApps(fake_apps()); |
| 232 } | 237 } |
| 233 | 238 |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 292 app_instance()->SendRefreshAppList(fake_apps()); | 297 app_instance()->SendRefreshAppList(fake_apps()); |
| 293 | 298 |
| 294 // Simulate item activate. | 299 // Simulate item activate. |
| 295 const arc::AppInfo& app_first = fake_apps()[0]; | 300 const arc::AppInfo& app_first = fake_apps()[0]; |
| 296 const arc::AppInfo& app_last = fake_apps()[0]; | 301 const arc::AppInfo& app_last = fake_apps()[0]; |
| 297 ArcAppItem* item_first = FindArcItem(GetAppId(app_first)); | 302 ArcAppItem* item_first = FindArcItem(GetAppId(app_first)); |
| 298 ArcAppItem* item_last = FindArcItem(GetAppId(app_last)); | 303 ArcAppItem* item_last = FindArcItem(GetAppId(app_last)); |
| 299 ASSERT_NE(nullptr, item_first); | 304 ASSERT_NE(nullptr, item_first); |
| 300 ASSERT_NE(nullptr, item_last); | 305 ASSERT_NE(nullptr, item_last); |
| 301 item_first->Activate(0); | 306 item_first->Activate(0); |
| 307 app_instance()->WaitForIncomingMethodCall(); |
| 302 item_last->Activate(0); | 308 item_last->Activate(0); |
| 309 app_instance()->WaitForIncomingMethodCall(); |
| 303 item_first->Activate(0); | 310 item_first->Activate(0); |
| 304 | 311 app_instance()->WaitForIncomingMethodCall(); |
| 305 // Process pending tasks. | |
| 306 base::RunLoop().RunUntilIdle(); | |
| 307 | 312 |
| 308 const ScopedVector<arc::FakeAppInstance::Request>& launch_requests = | 313 const ScopedVector<arc::FakeAppInstance::Request>& launch_requests = |
| 309 app_instance()->launch_requests(); | 314 app_instance()->launch_requests(); |
| 310 ASSERT_EQ(static_cast<size_t>(3), launch_requests.size()); | 315 ASSERT_EQ(static_cast<size_t>(3), launch_requests.size()); |
| 311 EXPECT_EQ(true, launch_requests[0]->IsForApp(app_first)); | 316 EXPECT_EQ(true, launch_requests[0]->IsForApp(app_first)); |
| 312 EXPECT_EQ(true, launch_requests[1]->IsForApp(app_last)); | 317 EXPECT_EQ(true, launch_requests[1]->IsForApp(app_last)); |
| 313 EXPECT_EQ(true, launch_requests[2]->IsForApp(app_first)); | 318 EXPECT_EQ(true, launch_requests[2]->IsForApp(app_first)); |
| 314 | 319 |
| 315 // Test an attempt to launch of a not-ready app. | 320 // Test an attempt to launch of a not-ready app. |
| 316 app_instance()->SendRefreshAppList(std::vector<arc::AppInfo>()); | 321 app_instance()->SendRefreshAppList(std::vector<arc::AppInfo>()); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 343 ArcAppItem* app_item = FindArcItem(GetAppId(app)); | 348 ArcAppItem* app_item = FindArcItem(GetAppId(app)); |
| 344 ASSERT_NE(nullptr, app_item); | 349 ASSERT_NE(nullptr, app_item); |
| 345 const float scale = ui::GetScaleForScaleFactor(scale_factor); | 350 const float scale = ui::GetScaleForScaleFactor(scale_factor); |
| 346 app_item->icon().GetRepresentation(scale); | 351 app_item->icon().GetRepresentation(scale); |
| 347 } | 352 } |
| 348 } | 353 } |
| 349 | 354 |
| 350 // Process pending tasks. | 355 // Process pending tasks. |
| 351 content::BrowserThread::GetBlockingPool()->FlushForTesting(); | 356 content::BrowserThread::GetBlockingPool()->FlushForTesting(); |
| 352 base::RunLoop().RunUntilIdle(); | 357 base::RunLoop().RunUntilIdle(); |
| 358 // Normally just one call to RunUntilIdle() suffices to make sure |
| 359 // all RequestAppIcon() calls are delivered, but on slower machines |
| 360 // (especially when running under Valgrind), they might not get |
| 361 // delivered on time. Wait for the remaining tasks individually. |
| 362 const size_t expected_size = scale_factors.size() * fake_apps().size(); |
| 363 while (app_instance()->icon_requests().size() < expected_size) { |
| 364 app_instance()->WaitForIncomingMethodCall(); |
| 365 } |
| 353 | 366 |
| 354 // At this moment we should receive all requests for icon loading. | 367 // At this moment we should receive all requests for icon loading. |
| 355 const ScopedVector<arc::FakeAppInstance::IconRequest>& icon_requests = | 368 const ScopedVector<arc::FakeAppInstance::IconRequest>& icon_requests = |
| 356 app_instance()->icon_requests(); | 369 app_instance()->icon_requests(); |
| 357 EXPECT_EQ(scale_factors.size() * fake_apps().size(), icon_requests.size()); | 370 EXPECT_EQ(expected_size, icon_requests.size()); |
| 358 std::map<std::string, uint32_t> app_masks; | 371 std::map<std::string, uint32_t> app_masks; |
| 359 for (size_t i = 0; i < icon_requests.size(); ++i) { | 372 for (size_t i = 0; i < icon_requests.size(); ++i) { |
| 360 const arc::FakeAppInstance::IconRequest* icon_request = icon_requests[i]; | 373 const arc::FakeAppInstance::IconRequest* icon_request = icon_requests[i]; |
| 361 const std::string id = ArcAppListPrefs::GetAppId(icon_request->package(), | 374 const std::string id = ArcAppListPrefs::GetAppId(icon_request->package(), |
| 362 icon_request->activity()); | 375 icon_request->activity()); |
| 363 // Make sure no double requests. | 376 // Make sure no double requests. |
| 364 EXPECT_NE(app_masks[id], | 377 EXPECT_NE(app_masks[id], |
| 365 app_masks[id] | (1 << icon_request->scale_factor())); | 378 app_masks[id] | (1 << icon_request->scale_factor())); |
| 366 app_masks[id] |= (1 << icon_request->scale_factor()); | 379 app_masks[id] |= (1 << icon_request->scale_factor()); |
| 367 } | 380 } |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 421 | 434 |
| 422 // Validate that icons are installed, have right content and icon is | 435 // Validate that icons are installed, have right content and icon is |
| 423 // refreshed for ARC app item. | 436 // refreshed for ARC app item. |
| 424 EXPECT_EQ(true, base::PathExists(icon_path)); | 437 EXPECT_EQ(true, base::PathExists(icon_path)); |
| 425 | 438 |
| 426 std::string icon_data; | 439 std::string icon_data; |
| 427 // Read the file from disk and compare with reference data. | 440 // Read the file from disk and compare with reference data. |
| 428 EXPECT_EQ(true, base::ReadFileToString(icon_path, &icon_data)); | 441 EXPECT_EQ(true, base::ReadFileToString(icon_path, &icon_data)); |
| 429 ASSERT_EQ(icon_data, png_data); | 442 ASSERT_EQ(icon_data, png_data); |
| 430 } | 443 } |
| OLD | NEW |