Commit 736a50a5 authored by Alexander Hendrich's avatar Alexander Hendrich Committed by Commit Bot

Refactor enterprise.deviceAttributes API test

This CL refactors large parts of the EnterpriseDeviceAttributesApiTest
class into a new ForceInstalledAffiliatedExtensionApiTest class that
can be shared for the enterprise.deviceAttributes API test and the new
enterprise.networkingAttributes API test.
The parameterized test class takes care of setting up a
affiliated/non-affiliated (based on parameter) user and force-installs
the specified extension.

Bug: 1081333
Change-Id: Ic3c73c36dfe9e5cbff02d31e05099eca38eba42d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2196669
Commit-Queue: Alexander Hendrich <hendrich@chromium.org>
Reviewed-by: default avatarMaksim Ivanov <emaxx@chromium.org>
Reviewed-by: default avatarDevlin <rdevlin.cronin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#770533}
parent db8ce38e
// 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/extensions/api/force_installed_affiliated_extension_apitest.h"
#include "base/json/json_writer.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chromeos/policy/affiliation_test_helper.h"
#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
#include "chrome/browser/extensions/policy_test_utils.h"
#include "chrome/test/base/ui_test_utils.h"
#include "chromeos/dbus/session_manager/fake_session_manager_client.h"
#include "components/prefs/pref_service.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/test/result_catcher.h"
namespace {
// If running with |is_affiliated|==true, the test will use the same
// |kAffiliationID| as user and device affiliation ID, which makes the user
// affiliated (affiliation IDs overlap).
// If running with |is_affiliated|==false, the test will use |kAffiliationID| as
// device and |kAnotherAffiliationID| as user affiliation ID, which makes the
// user non-affiliated (affiliation IDs don't overlap).
constexpr char kAffiliationID[] = "some-affiliation-id";
constexpr char kAnotherAffiliationID[] = "another-affiliation-id";
constexpr char kAffiliatedUserEmail[] = "user@example.com";
constexpr char kAffiliatedUserGaiaId[] = "1029384756";
} // namespace
namespace extensions {
ForceInstalledAffiliatedExtensionApiTest::
ForceInstalledAffiliatedExtensionApiTest(bool is_affiliated)
: is_affiliated_(is_affiliated),
affiliated_account_id_(
AccountId::FromUserEmailGaiaId(kAffiliatedUserEmail,
kAffiliatedUserGaiaId)),
test_install_attributes_(
chromeos::StubInstallAttributes::CreateCloudManaged("fake-domain",
"fake-id")) {
set_exit_when_last_browser_closes(false);
set_chromeos_user_ = false;
}
ForceInstalledAffiliatedExtensionApiTest::
~ForceInstalledAffiliatedExtensionApiTest() = default;
void ForceInstalledAffiliatedExtensionApiTest::SetUpCommandLine(
base::CommandLine* command_line) {
ExtensionApiTest::SetUpCommandLine(command_line);
policy::AffiliationTestHelper::AppendCommandLineSwitchesForLoginManager(
command_line);
}
void ForceInstalledAffiliatedExtensionApiTest::
SetUpInProcessBrowserTestFixture() {
ExtensionApiTest::SetUpInProcessBrowserTestFixture();
// Initialize clients here so they are available during setup. They will be
// shutdown in ChromeBrowserMain.
chromeos::SessionManagerClient::InitializeFakeInMemory();
policy::AffiliationTestHelper affiliation_helper =
policy::AffiliationTestHelper::CreateForCloud(
chromeos::FakeSessionManagerClient::Get());
std::set<std::string> device_affiliation_ids;
device_affiliation_ids.insert(kAffiliationID);
ASSERT_NO_FATAL_FAILURE(affiliation_helper.SetDeviceAffiliationIDs(
&test_helper_, device_affiliation_ids));
test_helper_.InstallOwnerKey();
std::set<std::string> user_affiliation_ids;
if (is_affiliated_) {
user_affiliation_ids.insert(kAffiliationID);
} else {
user_affiliation_ids.insert(kAnotherAffiliationID);
}
policy::UserPolicyBuilder user_policy;
ASSERT_NO_FATAL_FAILURE(affiliation_helper.SetUserAffiliationIDs(
&user_policy, affiliated_account_id_, user_affiliation_ids));
test_helper_.InstallOwnerKey();
// Init the user policy provider.
EXPECT_CALL(policy_provider_, IsInitializationComplete(testing::_))
.WillRepeatedly(testing::Return(true));
policy_provider_.SetAutoRefresh();
policy::BrowserPolicyConnector::SetPolicyProviderForTesting(
&policy_provider_);
// Set retry delay to prevent timeouts.
policy::DeviceManagementService::SetRetryDelayForTesting(0);
}
void ForceInstalledAffiliatedExtensionApiTest::SetUpOnMainThread() {
// Log in user that was created with
// policy::AffiliationTestHelper::PreLoginUser() in the PRE_ test.
const base::ListValue* users =
g_browser_process->local_state()->GetList("LoggedInUsers");
if (!users->empty()) {
policy::AffiliationTestHelper::LoginUser(affiliated_account_id_);
}
policy_test_utils::SetUpEmbeddedTestServer(embedded_test_server());
ASSERT_TRUE(embedded_test_server()->Start());
ExtensionApiTest::SetUpOnMainThread();
}
void ForceInstalledAffiliatedExtensionApiTest::ForceInstallExtension(
const extensions::ExtensionId& extension_id,
const std::string& update_manifest_path) {
policy_test_utils::SetExtensionInstallForcelistPolicy(
extension_id, embedded_test_server()->GetURL(update_manifest_path),
profile(), &policy_provider_);
ASSERT_TRUE(ExtensionRegistry::Get(profile())->enabled_extensions().GetByID(
extension_id));
}
void ForceInstalledAffiliatedExtensionApiTest::TestExtension(
Browser* browser,
const GURL& page_url,
const base::Value& custom_arg_value) {
DCHECK(page_url.is_valid()) << "page_url must be valid";
std::string custom_arg;
base::JSONWriter::Write(custom_arg_value, &custom_arg);
SetCustomArg(custom_arg);
extensions::ResultCatcher catcher;
ui_test_utils::NavigateToURL(browser, GURL(page_url));
ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
}
} // namespace extensions
// 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_EXTENSIONS_API_FORCE_INSTALLED_AFFILIATED_EXTENSION_APITEST_H_
#define CHROME_BROWSER_EXTENSIONS_API_FORCE_INSTALLED_AFFILIATED_EXTENSION_APITEST_H_
#include <string>
#include "base/values.h"
#include "chrome/browser/chromeos/policy/device_policy_cros_browser_test.h"
#include "chrome/browser/extensions/extension_apitest.h"
#include "chromeos/tpm/stub_install_attributes.h"
#include "components/account_id/account_id.h"
#include "components/policy/core/common/mock_configuration_policy_provider.h"
#include "extensions/common/extension_id.h"
#include "url/gurl.h"
class Browser;
namespace base {
class CommandLine;
} // namespace base
namespace extensions {
// TODO(https://crbug.com/1082195) Create force-installed extension and user
// affiliation test mixins to replace this class.
// Helper class to test force-installed extensions in a
// affiliated/non-affiliated user profile.
class ForceInstalledAffiliatedExtensionApiTest : public ExtensionApiTest {
public:
explicit ForceInstalledAffiliatedExtensionApiTest(bool is_affiliated);
~ForceInstalledAffiliatedExtensionApiTest() override;
protected:
// ExtensionApiTest
void SetUpCommandLine(base::CommandLine* command_line) override;
void SetUpInProcessBrowserTestFixture() override;
void SetUpOnMainThread() override;
void ForceInstallExtension(const extensions::ExtensionId& extension_id,
const std::string& update_manifest_path);
// Sets |custom_arg_value|, loads |page_url| and waits for an extension API
// test pass/fail notification.
void TestExtension(Browser* browser,
const GURL& page_url,
const base::Value& custom_arg_value);
// Whether the user should be affiliated (= user and device affiliation IDs
// overlap).
const bool is_affiliated_;
const AccountId affiliated_account_id_;
policy::MockConfigurationPolicyProvider policy_provider_;
chromeos::ScopedStubInstallAttributes test_install_attributes_;
policy::DevicePolicyCrosTestHelper test_helper_;
};
} // namespace extensions
#endif // CHROME_BROWSER_EXTENSIONS_API_FORCE_INSTALLED_AFFILIATED_EXTENSION_APITEST_H_
...@@ -1678,8 +1678,6 @@ if (!is_android) { ...@@ -1678,8 +1678,6 @@ if (!is_android) {
"../browser/extensions/api/desktop_capture/desktop_capture_apitest.cc", "../browser/extensions/api/desktop_capture/desktop_capture_apitest.cc",
"../browser/extensions/api/developer_private/developer_private_apitest.cc", "../browser/extensions/api/developer_private/developer_private_apitest.cc",
"../browser/extensions/api/downloads/downloads_api_browsertest.cc", "../browser/extensions/api/downloads/downloads_api_browsertest.cc",
"../browser/extensions/api/enterprise_device_attributes/enterprise_device_attributes_apitest.cc",
"../browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_apitest_nss.cc",
"../browser/extensions/api/extension_action/browser_action_apitest.cc", "../browser/extensions/api/extension_action/browser_action_apitest.cc",
"../browser/extensions/api/extension_action/browser_action_browsertest.cc", "../browser/extensions/api/extension_action/browser_action_browsertest.cc",
"../browser/extensions/api/extension_action/extension_action_apitest.cc", "../browser/extensions/api/extension_action/extension_action_apitest.cc",
...@@ -1715,9 +1713,6 @@ if (!is_android) { ...@@ -1715,9 +1713,6 @@ if (!is_android) {
"../browser/extensions/api/page_capture/page_capture_apitest.cc", "../browser/extensions/api/page_capture/page_capture_apitest.cc",
"../browser/extensions/api/passwords_private/passwords_private_apitest.cc", "../browser/extensions/api/passwords_private/passwords_private_apitest.cc",
"../browser/extensions/api/permissions/permissions_apitest.cc", "../browser/extensions/api/permissions/permissions_apitest.cc",
"../browser/extensions/api/platform_keys/platform_keys_apitest_nss.cc",
"../browser/extensions/api/platform_keys/platform_keys_test_base.cc",
"../browser/extensions/api/platform_keys/platform_keys_test_base.h",
"../browser/extensions/api/preference/preference_apitest.cc", "../browser/extensions/api/preference/preference_apitest.cc",
"../browser/extensions/api/processes/processes_apitest.cc", "../browser/extensions/api/processes/processes_apitest.cc",
"../browser/extensions/api/proxy/proxy_apitest.cc", "../browser/extensions/api/proxy/proxy_apitest.cc",
...@@ -1735,7 +1730,6 @@ if (!is_android) { ...@@ -1735,7 +1730,6 @@ if (!is_android) {
"../browser/extensions/api/tab_capture/tab_capture_performance_test_base.h", "../browser/extensions/api/tab_capture/tab_capture_performance_test_base.h",
"../browser/extensions/api/tab_capture/tab_capture_performancetest.cc", "../browser/extensions/api/tab_capture/tab_capture_performancetest.cc",
"../browser/extensions/api/tabs/tabs_test.cc", "../browser/extensions/api/tabs/tabs_test.cc",
"../browser/extensions/api/terminal/terminal_private_apitest.cc",
"../browser/extensions/api/test/apitest_apitest.cc", "../browser/extensions/api/test/apitest_apitest.cc",
"../browser/extensions/api/top_sites/top_sites_apitest.cc", "../browser/extensions/api/top_sites/top_sites_apitest.cc",
"../browser/extensions/api/web_navigation/web_navigation_apitest.cc", "../browser/extensions/api/web_navigation/web_navigation_apitest.cc",
...@@ -1887,7 +1881,15 @@ if (!is_android) { ...@@ -1887,7 +1881,15 @@ if (!is_android) {
sources += [ sources += [
"../browser/accessibility/accessibility_extension_api_browsertest.cc", "../browser/accessibility/accessibility_extension_api_browsertest.cc",
"../browser/apps/platform_apps/api/arc_apps_private/arc_apps_private_apitest.cc", "../browser/apps/platform_apps/api/arc_apps_private/arc_apps_private_apitest.cc",
"../browser/extensions/api/enterprise_device_attributes/enterprise_device_attributes_apitest.cc",
"../browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_apitest_nss.cc",
"../browser/extensions/api/force_installed_affiliated_extension_apitest.cc",
"../browser/extensions/api/force_installed_affiliated_extension_apitest.h",
"../browser/extensions/api/platform_keys/platform_keys_apitest_nss.cc",
"../browser/extensions/api/platform_keys/platform_keys_test_base.cc",
"../browser/extensions/api/platform_keys/platform_keys_test_base.h",
"../browser/extensions/api/system_display/system_display_chromeos_apitest.cc", "../browser/extensions/api/system_display/system_display_chromeos_apitest.cc",
"../browser/extensions/api/terminal/terminal_private_apitest.cc",
"../browser/extensions/api/terminal/terminal_private_browsertest.cc", "../browser/extensions/api/terminal/terminal_private_browsertest.cc",
"../browser/extensions/clipboard_extension_apitest_chromeos.cc", "../browser/extensions/clipboard_extension_apitest_chromeos.cc",
] ]
...@@ -2551,16 +2553,6 @@ if (!is_android) { ...@@ -2551,16 +2553,6 @@ if (!is_android) {
"data/webui/certificate_viewer_ui_test-inl.h", "data/webui/certificate_viewer_ui_test-inl.h",
] ]
sources += [ "../browser/profiles/profile_window_browsertest.cc" ] sources += [ "../browser/profiles/profile_window_browsertest.cc" ]
if (enable_extensions) {
sources -= [
"../browser/extensions/api/enterprise_device_attributes/enterprise_device_attributes_apitest.cc",
"../browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_apitest_nss.cc",
"../browser/extensions/api/platform_keys/platform_keys_apitest_nss.cc",
"../browser/extensions/api/platform_keys/platform_keys_test_base.cc",
"../browser/extensions/api/platform_keys/platform_keys_test_base.h",
"../browser/extensions/api/terminal/terminal_private_apitest.cc",
]
}
if (toolkit_views) { if (toolkit_views) {
sources -= [ sources -= [
"../browser/ui/views/select_file_dialog_extension_browsertest.cc", "../browser/ui/views/select_file_dialog_extension_browsertest.cc",
......
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