1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ash/constants/ash_features.h"
#include "ash/constants/ash_pref_names.h"
#include "ash/webui/graduation/url_constants.h"
#include "ash/webui/system_apps/public/system_web_app_type.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/test/scoped_feature_list.h"
#include "base/values.h"
#include "chrome/browser/apps/app_service/metrics/app_service_metrics.h"
#include "chrome/browser/ash/login/test/logged_in_user_mixin.h"
#include "chrome/browser/ash/system_web_apps/apps/graduation_app_delegate.h"
#include "chrome/browser/ash/system_web_apps/test_support/system_web_app_integration_test.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/ash/system_web_apps/system_web_app_ui_utils.h"
#include "chrome/browser/web_applications/test/web_app_install_test_utils.h"
#include "chrome/browser/web_applications/web_app_provider.h"
#include "components/prefs/pref_service.h"
#include "content/public/test/browser_test.h"
#include "content/public/test/test_navigation_observer.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
#include "url/gurl.h"
namespace {
constexpr char kContentTransferAppName[] = "Content transfer";
constexpr char kFromChromeInternalHistogramName[] =
"Apps.DefaultAppLaunch.FromChromeInternal";
class GraduationAppIntegrationTest : public ash::SystemWebAppIntegrationTest {
public:
GraduationAppIntegrationTest() {
scoped_feature_list_.InitAndEnableFeature(ash::features::kGraduation);
}
void SetUpOnMainThread() override {
ash::SystemWebAppIntegrationTest::SetUpOnMainThread();
logged_in_user_mixin_.LogInUser();
SetGraduationEnablement(/*is_enabled=*/true);
WaitForTestSystemAppInstall();
web_app::test::WaitUntilReady(
web_app::WebAppProvider::GetForTest(profile()));
}
void SetGraduationEnablement(bool is_enabled) {
profile()->GetPrefs()->SetDict(
ash::prefs::kGraduationEnablementStatus,
base::Value::Dict().Set("is_enabled", is_enabled));
}
base::HistogramTester& histogram_tester() { return histogram_tester_; }
private:
base::test::ScopedFeatureList scoped_feature_list_;
ash::LoggedInUserMixin logged_in_user_mixin_{
&mixin_host_, /*test_base=*/this, embedded_test_server(),
ash::LoggedInUserMixin::LogInType::kManaged};
base::HistogramTester histogram_tester_;
};
IN_PROC_BROWSER_TEST_P(GraduationAppIntegrationTest, InstallGraduationApp) {
const GURL url(ash::graduation::kChromeUIGraduationAppURL);
// Install all enabled SWAs and validate that the Graduation App has the
// expected attributes.
EXPECT_NO_FATAL_FAILURE(ExpectSystemWebAppValid(
ash::SystemWebAppType::GRADUATION, url, kContentTransferAppName));
}
IN_PROC_BROWSER_TEST_P(GraduationAppIntegrationTest, RecordMetricsOnLaunch) {
histogram_tester().ExpectUniqueSample(kFromChromeInternalHistogramName,
apps::DefaultAppName::kGraduationApp,
0);
const GURL url(ash::graduation::kChromeUIGraduationAppURL);
content::TestNavigationObserver observer(url);
observer.StartWatchingNewWebContents();
ash::LaunchSystemWebAppAsync(profile(), ash::SystemWebAppType::GRADUATION);
observer.Wait();
histogram_tester().ExpectUniqueSample(kFromChromeInternalHistogramName,
apps::DefaultAppName::kGraduationApp,
1);
}
INSTANTIATE_SYSTEM_WEB_APP_MANAGER_TEST_SUITE_REGULAR_PROFILE_P(
GraduationAppIntegrationTest);
} // namespace
|