| Index: chrome/browser/chromeos/policy/device_quirks_policy_browsertest.cc
|
| diff --git a/chrome/browser/chromeos/policy/device_quirks_policy_browsertest.cc b/chrome/browser/chromeos/policy/device_quirks_policy_browsertest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ea364f29f66edadeb7175fd3476dee7fbba8d2bd
|
| --- /dev/null
|
| +++ b/chrome/browser/chromeos/policy/device_quirks_policy_browsertest.cc
|
| @@ -0,0 +1,147 @@
|
| +// Copyright 2016 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 "base/command_line.h"
|
| +#include "base/files/file_util.h"
|
| +#include "base/macros.h"
|
| +#include "base/message_loop/message_loop.h"
|
| +#include "chrome/browser/chromeos/policy/device_policy_cros_browser_test.h"
|
| +#include "chrome/browser/chromeos/policy/proto/chrome_device_policy.pb.h"
|
| +#include "chrome/browser/chromeos/settings/cros_settings.h"
|
| +#include "components/quirks/quirks_manager.h"
|
| +#include "components/quirks/switches.h"
|
| +#include "content/public/test/test_utils.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace chromeos {
|
| +
|
| +const int64_t kProductId = 0x0000aaaa;
|
| +const char kFakeIccData[] = {0x00, 0x00, 0x08, 0x90, 0x20, 0x20,
|
| + 0x20, 0x20, 0x02, 0x10, 0x00, 0x00};
|
| +
|
| +class DeviceQuirksPolicyTest : public policy::DevicePolicyCrosBrowserTest {
|
| + public:
|
| + DeviceQuirksPolicyTest() {}
|
| +
|
| + void SetUpCommandLine(base::CommandLine* command_line) override {
|
| + command_line->AppendSwitch(quirks::switches::kEnableQuirksClient);
|
| + }
|
| +
|
| + void SetUpInProcessBrowserTestFixture() override {
|
| + InstallOwnerKey();
|
| + DevicePolicyCrosBrowserTest::SetUpInProcessBrowserTestFixture();
|
| + }
|
| +
|
| + void SetUpOnMainThread() override {
|
| + // NOTE: QuirksManager::Initialize() isn't necessary here, since it'll be
|
| + // called in ChromeBrowserMainPartsChromeos::PreMainMessageLoopRun().
|
| +
|
| + // Create display_profiles subdirectory under temp profile directory.
|
| + base::FilePath path = quirks::QuirksManager::Get()
|
| + ->delegate()
|
| + ->GetDownloadDisplayProfileDirectory();
|
| + base::File::Error error = base::File::FILE_OK;
|
| + bool created = base::CreateDirectoryAndGetError(path, &error);
|
| + ASSERT_TRUE(created) << error;
|
| +
|
| + // Create fake icc file.
|
| + path = path.Append(quirks::IdToFileName(kProductId));
|
| + int bytes_written =
|
| + base::WriteFile(path, kFakeIccData, sizeof(kFakeIccData));
|
| + ASSERT_EQ(sizeof(kFakeIccData), static_cast<size_t>(bytes_written));
|
| + }
|
| +
|
| + protected:
|
| + void RefreshPolicyAndWaitDeviceSettingsUpdated() {
|
| + scoped_ptr<CrosSettings::ObserverSubscription> observer =
|
| + CrosSettings::Get()->AddSettingsObserver(
|
| + kDeviceQuirksDownloadEnabled,
|
| + base::MessageLoop::current()->QuitWhenIdleClosure());
|
| +
|
| + RefreshDevicePolicy();
|
| + base::MessageLoop::current()->Run();
|
| + }
|
| +
|
| + // Query QuirksManager for icc file, then run msg loop to wait for callback.
|
| + // This won't actually run a Quirks client: if Quirks is enabled, it will
|
| + // return the icc file in our fake downloads directory; if disabled, it will
|
| + // return before looking there.
|
| + bool TestQuirksEnabled() {
|
| + base::RunLoop run_loop;
|
| + end_message_loop_ = run_loop.QuitClosure();
|
| + icc_path_.clear();
|
| +
|
| + quirks::QuirksManager::Get()->RequestIccProfilePath(
|
| + kProductId, base::Bind(&DeviceQuirksPolicyTest::OnQuirksClientFinished,
|
| + base::Unretained(this)));
|
| +
|
| + run_loop.Run();
|
| +
|
| + // Quirks only returns our fake file if it's enabled.
|
| + return !icc_path_.empty();
|
| + }
|
| +
|
| + // Callback from RequestIccProfilePath().
|
| + void OnQuirksClientFinished(const base::FilePath& path, bool downloaded) {
|
| + ASSERT_FALSE(downloaded);
|
| + icc_path_ = path;
|
| + ASSERT_TRUE(!end_message_loop_.is_null());
|
| + end_message_loop_.Run();
|
| + }
|
| +
|
| + base::Closure end_message_loop_; // Callback to terminate message loop.
|
| + base::FilePath icc_path_; // Path to icc file if found or downloaded.
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(DeviceQuirksPolicyTest);
|
| +};
|
| +
|
| +IN_PROC_BROWSER_TEST_F(DeviceQuirksPolicyTest, CheckUnset) {
|
| + bool quirks_download_enabled;
|
| + EXPECT_FALSE(CrosSettings::Get()->GetBoolean(kDeviceQuirksDownloadEnabled,
|
| + &quirks_download_enabled));
|
| +
|
| + // No policy set, default is enabled, so Quirks should find the fake icc file.
|
| + EXPECT_TRUE(TestQuirksEnabled());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(DeviceQuirksPolicyTest, CheckTrue) {
|
| + bool quirks_download_enabled;
|
| + EXPECT_FALSE(CrosSettings::Get()->GetBoolean(kDeviceQuirksDownloadEnabled,
|
| + &quirks_download_enabled));
|
| +
|
| + enterprise_management::ChromeDeviceSettingsProto& proto(
|
| + device_policy()->payload());
|
| + proto.mutable_quirks_download_enabled()->set_quirks_download_enabled(true);
|
| + RefreshPolicyAndWaitDeviceSettingsUpdated();
|
| +
|
| + quirks_download_enabled = false;
|
| + EXPECT_TRUE(CrosSettings::Get()->GetBoolean(kDeviceQuirksDownloadEnabled,
|
| + &quirks_download_enabled));
|
| + EXPECT_TRUE(quirks_download_enabled);
|
| +
|
| + // With policy enabled, Quirks should find the fake icc file.
|
| + EXPECT_TRUE(TestQuirksEnabled());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(DeviceQuirksPolicyTest, CheckFalse) {
|
| + bool quirks_download_enabled;
|
| + EXPECT_FALSE(CrosSettings::Get()->GetBoolean(kDeviceQuirksDownloadEnabled,
|
| + &quirks_download_enabled));
|
| +
|
| + enterprise_management::ChromeDeviceSettingsProto& proto(
|
| + device_policy()->payload());
|
| + proto.mutable_quirks_download_enabled()->set_quirks_download_enabled(false);
|
| + RefreshPolicyAndWaitDeviceSettingsUpdated();
|
| +
|
| + quirks_download_enabled = true;
|
| + EXPECT_TRUE(CrosSettings::Get()->GetBoolean(kDeviceQuirksDownloadEnabled,
|
| + &quirks_download_enabled));
|
| + EXPECT_FALSE(quirks_download_enabled);
|
| +
|
| + // With policy disabled, Quirks should abort and not find the fake icc file.
|
| + EXPECT_FALSE(TestQuirksEnabled());
|
| +}
|
| +
|
| +} // namespace chromeos
|
|
|