Commit cffab400 authored by Nicholas Hollingum's avatar Nicholas Hollingum Committed by Chromium LUCI CQ

borealis: Add an integration test for session lifetime

This request came up in crrev.com/c/2586445.

We commit the test now, in this cl, to show that the behaviour doesn't
change across the refactoring.

Bug: b/175152663
Change-Id: I42a20c358e324655fb66b4fb1ec61131b30eab7f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2584560Reviewed-by: default avatarNancy Wang <nancylingwang@chromium.org>
Commit-Queue: Nic Hollingum <hollingum@google.com>
Cr-Commit-Position: refs/heads/master@{#837440}
parent 989b00ac
......@@ -3201,6 +3201,8 @@ static_library("test_support") {
"borealis/borealis_context_manager_mock.h",
"borealis/borealis_service_fake.cc",
"borealis/borealis_service_fake.h",
"borealis/borealis_window_manager_mock.cc",
"borealis/borealis_window_manager_mock.h",
"cert_provisioning/mock_cert_provisioning_scheduler.cc",
"cert_provisioning/mock_cert_provisioning_scheduler.h",
"certificate_provider/test_certificate_provider_extension.cc",
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/chromeos/borealis/borealis_window_manager_mock.h"
namespace borealis {
MockAnonObserver::MockAnonObserver() = default;
MockAnonObserver::~MockAnonObserver() = default;
MockLifetimeObserver::MockLifetimeObserver() = default;
MockLifetimeObserver::~MockLifetimeObserver() = default;
} // namespace borealis
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_CHROMEOS_BOREALIS_BOREALIS_WINDOW_MANAGER_MOCK_H_
#define CHROME_BROWSER_CHROMEOS_BOREALIS_BOREALIS_WINDOW_MANAGER_MOCK_H_
#include "chrome/browser/chromeos/borealis/borealis_window_manager.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace borealis {
class MockAnonObserver
: public borealis::BorealisWindowManager::AnonymousAppObserver {
public:
MockAnonObserver();
~MockAnonObserver() override;
MOCK_METHOD(void,
OnAnonymousAppAdded,
(const std::string&, const std::string&),
());
MOCK_METHOD(void, OnAnonymousAppRemoved, (const std::string&), ());
MOCK_METHOD(void, OnWindowManagerDeleted, (BorealisWindowManager*), ());
};
class MockLifetimeObserver
: public borealis::BorealisWindowManager::AppWindowLifetimeObserver {
public:
MockLifetimeObserver();
~MockLifetimeObserver() override;
MOCK_METHOD(void, OnSessionStarted, (), ());
MOCK_METHOD(void, OnSessionFinished, (), ());
MOCK_METHOD(void, OnAppStarted, (const std::string& app_id), ());
MOCK_METHOD(void, OnAppFinished, (const std::string& app_id), ());
MOCK_METHOD(void,
OnWindowStarted,
(const std::string& app_id, aura::Window*),
());
MOCK_METHOD(void,
OnWindowFinished,
(const std::string& app_id, aura::Window*),
());
MOCK_METHOD(void, OnWindowManagerDeleted, (BorealisWindowManager*), ());
};
} // namespace borealis
#endif // CHROME_BROWSER_CHROMEOS_BOREALIS_BOREALIS_WINDOW_MANAGER_MOCK_H_
......@@ -6,6 +6,7 @@
#include <memory>
#include "chrome/browser/chromeos/borealis/borealis_window_manager_mock.h"
#include "chrome/browser/chromeos/guest_os/guest_os_registry_service.h"
#include "chrome/browser/chromeos/guest_os/guest_os_registry_service_factory.h"
#include "chrome/test/base/testing_profile.h"
......@@ -20,43 +21,6 @@ using ::testing::_;
namespace borealis {
namespace {
class MockAnonObserver
: public borealis::BorealisWindowManager::AnonymousAppObserver {
public:
MOCK_METHOD(void,
OnAnonymousAppAdded,
(const std::string&, const std::string&),
());
MOCK_METHOD(void, OnAnonymousAppRemoved, (const std::string&), ());
MOCK_METHOD(void, OnWindowManagerDeleted, (BorealisWindowManager*), ());
};
class MockLifetimeObserver
: public borealis::BorealisWindowManager::AppWindowLifetimeObserver {
public:
MOCK_METHOD(void, OnSessionStarted, (), ());
MOCK_METHOD(void, OnSessionFinished, (), ());
MOCK_METHOD(void, OnAppStarted, (const std::string& app_id), ());
MOCK_METHOD(void, OnAppFinished, (const std::string& app_id), ());
MOCK_METHOD(void,
OnWindowStarted,
(const std::string& app_id, aura::Window*),
());
MOCK_METHOD(void,
OnWindowFinished,
(const std::string& app_id, aura::Window*),
());
MOCK_METHOD(void, OnWindowManagerDeleted, (BorealisWindowManager*), ());
};
class BorealisWindowManagerTest : public testing::Test {
protected:
Profile* profile() { return &profile_; }
......
......@@ -9,6 +9,7 @@
#include "ash/public/cpp/window_properties.h"
#include "ash/shell.h"
#include "base/run_loop.h"
#include "base/scoped_observation.h"
#include "base/strings/utf_string_conversions.h"
#include "base/test/scoped_feature_list.h"
#include "chrome/browser/apps/app_service/app_service_proxy.h"
......@@ -16,6 +17,9 @@
#include "chrome/browser/apps/platform_apps/app_browsertest_util.h"
#include "chrome/browser/chromeos/arc/arc_util.h"
#include "chrome/browser/chromeos/arc/session/arc_session_manager.h"
#include "chrome/browser/chromeos/borealis/borealis_service.h"
#include "chrome/browser/chromeos/borealis/borealis_window_manager.h"
#include "chrome/browser/chromeos/borealis/borealis_window_manager_mock.h"
#include "chrome/browser/chromeos/guest_os/guest_os_registry_service.h"
#include "chrome/browser/chromeos/guest_os/guest_os_registry_service_factory.h"
#include "chrome/browser/profiles/profile.h"
......@@ -355,26 +359,35 @@ class AppServiceAppWindowBorealisBrowserTest
: public AppServiceAppWindowBrowserTest {
public:
~AppServiceAppWindowBorealisBrowserTest() override = default;
std::string MakeBorealisApp(const std::string& vm,
const std::string& container,
const std::string& name) {
vm_tools::apps::ApplicationList list;
list.set_vm_name(vm);
list.set_container_name(container);
list.set_vm_type(vm_tools::apps::ApplicationList_VmType_BOREALIS);
vm_tools::apps::App* app = list.add_apps();
app->set_desktop_file_id(name);
app->mutable_name()->add_values()->set_value(name);
app->set_no_display(false);
guest_os::GuestOsRegistryServiceFactory::GetForProfile(profile())
->UpdateApplicationList(list);
// We need to propagate the newly created app to the various registries
// before it can be used.
app_service_proxy_->FlushMojoCallsForTesting();
return guest_os::GuestOsRegistryService::GenerateAppId(name, vm, container);
}
};
IN_PROC_BROWSER_TEST_F(AppServiceAppWindowBorealisBrowserTest,
BorealisKnownApp) {
// Generate a fake app.
vm_tools::apps::ApplicationList list;
list.set_vm_name("vm");
list.set_container_name("container");
list.set_vm_type(vm_tools::apps::ApplicationList_VmType_BOREALIS);
vm_tools::apps::App* app = list.add_apps();
app->set_desktop_file_id("foo.desktop");
app->mutable_name()->add_values()->set_value("foo");
app->set_no_display(false);
guest_os::GuestOsRegistryServiceFactory::GetForProfile(profile())
->UpdateApplicationList(list);
app_service_proxy_->FlushMojoCallsForTesting();
std::string app_id = MakeBorealisApp("vm", "container", "foo");
views::Widget* widget = CreateExoWindow("org.chromium.borealis.wmclass.foo");
std::string app_id = guest_os::GuestOsRegistryService::GenerateAppId(
"foo.desktop", "vm", "container");
EXPECT_EQ(1u,
app_service_proxy_->InstanceRegistry().GetWindows(app_id).size());
......@@ -416,6 +429,30 @@ IN_PROC_BROWSER_TEST_F(AppServiceAppWindowBorealisBrowserTest,
app_service_proxy_->InstanceRegistry().GetWindows(app_id).empty());
}
IN_PROC_BROWSER_TEST_F(AppServiceAppWindowBorealisBrowserTest,
BorealisSession) {
std::string app_id = MakeBorealisApp("vm", "container", "foo");
testing::StrictMock<borealis::MockLifetimeObserver> observer;
base::ScopedObservation<
borealis::BorealisWindowManager,
borealis::BorealisWindowManager::AppWindowLifetimeObserver>
observation(&observer);
observation.Observe(
&borealis::BorealisService::GetForProfile(profile())->WindowManager());
testing::InSequence sequence;
EXPECT_CALL(observer, OnSessionStarted());
EXPECT_CALL(observer, OnAppStarted(app_id));
EXPECT_CALL(observer, OnWindowStarted(app_id, testing::_));
views::Widget* widget = CreateExoWindow("org.chromium.borealis.wmclass.foo");
EXPECT_CALL(observer, OnWindowFinished(app_id, widget->GetNativeWindow()));
EXPECT_CALL(observer, OnAppFinished(app_id));
EXPECT_CALL(observer, OnSessionFinished());
widget->CloseNow();
}
class AppServiceAppWindowWebAppBrowserTest
: public AppServiceAppWindowBrowserTest {
protected:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment