# Copyright 2016 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

AUTHOR = 'scunningham'
NAME = 'policy_BlockThirdPartyCookies'
TIME = 'SHORT'
TEST_CATEGORY = 'Functional'
TEST_CLASS = 'enterprise'
TEST_TYPE = 'client'

DOC = '''
Verify effects of BlockThirdPartyCookies policy on client behavior.

This test verifies the effect of the BlockThirdPartyCookies user policy on
Chrome OS client behavior and appearance. It exercises all valid policy values
with three test cases: True_Block, False_Allow, and NotSet_Allow.

A test case shall pass if the 'Block third-party cookies...' check box is
(un)checked when BlockThirdPartyCookies policy is set true (false), and is
(un)editable when BlockThirdPartyCookies not set (or set True or False). It
shall fail if this behavior is not enforced.

This control file allows CloudDPC E2E tests to run any test case defined in
this test via command-line.

'''

args_dict = utils.args_to_dict(args)

job.run_test('policy_BlockThirdPartyCookies', **args_dict)
