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