1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "net/base/static_cookie_policy.h"
6
7#include "base/logging.h"
8#include "googleurl/src/gurl.h"
9#include "net/base/net_errors.h"
10#include "net/base/registry_controlled_domain.h"
11
12namespace net {
13
14int StaticCookiePolicy::CanGetCookies(
15    const GURL& url,
16    const GURL& first_party_for_cookies) const {
17  switch (type_) {
18    case StaticCookiePolicy::ALLOW_ALL_COOKIES:
19    case StaticCookiePolicy::BLOCK_SETTING_THIRD_PARTY_COOKIES:
20      return OK;
21    case StaticCookiePolicy::BLOCK_ALL_THIRD_PARTY_COOKIES:
22      if (first_party_for_cookies.is_empty())
23        return OK;  // Empty first-party URL indicates a first-party request.
24      return RegistryControlledDomainService::SameDomainOrHost(
25          url, first_party_for_cookies) ? OK : ERR_ACCESS_DENIED;
26    case StaticCookiePolicy::BLOCK_ALL_COOKIES:
27      return ERR_ACCESS_DENIED;
28    default:
29      NOTREACHED();
30      return ERR_ACCESS_DENIED;
31  }
32}
33
34int StaticCookiePolicy::CanSetCookie(const GURL& url,
35                                     const GURL& first_party_for_cookies,
36                                     const std::string& cookie_line) const {
37  switch (type_) {
38    case StaticCookiePolicy::ALLOW_ALL_COOKIES:
39      return OK;
40    case StaticCookiePolicy::BLOCK_SETTING_THIRD_PARTY_COOKIES:
41    case StaticCookiePolicy::BLOCK_ALL_THIRD_PARTY_COOKIES:
42      if (first_party_for_cookies.is_empty())
43        return OK;  // Empty first-party URL indicates a first-party request.
44      return RegistryControlledDomainService::SameDomainOrHost(
45          url, first_party_for_cookies) ? OK : ERR_ACCESS_DENIED;
46    case StaticCookiePolicy::BLOCK_ALL_COOKIES:
47      return ERR_ACCESS_DENIED;
48    default:
49      NOTREACHED();
50      return ERR_ACCESS_DENIED;
51  }
52}
53
54}  // namespace net
55