1570
1568
EXPECT_EQ(1, applicationManager.count());
1574
* Test that screenshotting callback works cross thread.
1576
TEST_F(ApplicationManagerTests, threadedScreenshot)
1578
using namespace testing;
1579
const QString appId("webapp");
1580
const pid_t procId = 5551;
1583
std::condition_variable cv;
1586
ON_CALL(*taskController, primaryPidForAppId(appId)).WillByDefault(Return(procId));
1587
ON_CALL(desktopFileReaderFactory, createInstance(appId, _)).WillByDefault(Invoke(createMockDesktopFileReader));
1589
EXPECT_CALL(*taskController, start(appId, _))
1591
.WillOnce(Return(true));
1593
applicationManager.startApplication(appId);
1594
applicationManager.onProcessStarting(appId);
1595
auto session = std::make_shared<MockSession>("", procId);
1597
applicationManager.authorizeSession(procId, authed);
1598
onSessionStarting(session);
1600
ON_CALL(*session, take_snapshot(_)).WillByDefault(Invoke(
1601
[&](mir::scene::SnapshotCallback const& callback)
1603
std::thread ([&, callback]() {
1604
std::unique_lock<std::mutex> lk(mutex);
1606
mir::scene::Snapshot snapshot{mir::geometry::Size{0,0},
1607
mir::geometry::Stride{0},
1618
auto mockSurface = std::make_shared<ms::MockSurface>();
1619
EXPECT_CALL(*session, default_surface()).WillRepeatedly(Return(mockSurface));
1622
ApplicationScreenshotProvider screenshotProvider(&applicationManager);
1624
QSize requestedSize;
1625
QString imageId(appId + "/123456");
1626
screenshotProvider.requestImage(imageId, &actualSize, requestedSize);
1630
std::unique_lock<decltype(mutex)> lk(mutex);
1631
cv.wait(lk, [&] { return done; } );
1635
EXPECT_CALL(*taskController, stop(appId))
1637
.WillOnce(Return(true));
1639
applicationManager.stopApplication(appId);
1643
* Test that screenshotting callback works when application has been deleted
1645
TEST_F(ApplicationManagerTests, threadedScreenshotAfterAppDelete)
1647
using namespace testing;
1648
const pid_t procId1 = 5551;
1651
std::condition_variable cv;
1654
auto application = startApplication(procId1, "webapp");
1655
auto session = std::dynamic_pointer_cast<MockSession>(application->session()->session());
1656
ON_CALL(*session, take_snapshot(_)).WillByDefault(Invoke(
1657
[&](mir::scene::SnapshotCallback const& callback)
1659
std::thread ([&, callback]() {
1660
mir::scene::Snapshot snapshot{mir::geometry::Size{0,0},
1661
mir::geometry::Stride{0},
1664
// stop the application before calling the callback
1665
applicationManager.stopApplication(application->appId());
1674
auto mockSurface = std::make_shared<ms::MockSurface>();
1675
EXPECT_CALL(*session, default_surface()).WillRepeatedly(Return(mockSurface));
1678
ApplicationScreenshotProvider screenshotProvider(&applicationManager);
1680
QSize requestedSize;
1681
QString imageId("webapp/123456");
1682
screenshotProvider.requestImage(imageId, &actualSize, requestedSize);
1686
std::unique_lock<decltype(mutex)> lk(mutex);
1687
cv.wait(lk, [&] { return done; } );
1691
1571
TEST_F(ApplicationManagerTests, lifecycleExemptAppIsNotSuspended)
1693
1573
using namespace ::testing;