Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4117)

Unified Diff: chrome/browser/content_settings/cookie_settings.h

Issue 8383004: Adding CookieSettings for storing cookie content settings. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixing the rebase. Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/content_settings/cookie_settings.h
diff --git a/chrome/browser/content_settings/cookie_settings.h b/chrome/browser/content_settings/cookie_settings.h
new file mode 100644
index 0000000000000000000000000000000000000000..1ad491c4fd917079093c27f7ce356a94be2b9bdb
--- /dev/null
+++ b/chrome/browser/content_settings/cookie_settings.h
@@ -0,0 +1,151 @@
+// Copyright (c) 2011 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_CONTENT_SETTINGS_COOKIE_SETTINGS_H_
+#define CHROME_BROWSER_CONTENT_SETTINGS_COOKIE_SETTINGS_H_
+#pragma once
+
+#include <string>
+
+#include "base/compiler_specific.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/singleton.h"
+#include "base/synchronization/lock.h"
+#include "chrome/browser/content_settings/host_content_settings_map.h"
+#include "chrome/browser/prefs/pref_change_registrar.h"
+#include "chrome/browser/profiles/profile_keyed_service_factory.h"
+#include "chrome/common/content_settings.h"
+#include "content/public/browser/notification_observer.h"
+
+class ContentSettingsPattern;
+class CookieSettingsWrapper;
+class GURL;
+class PrefService;
+class Profile;
+
+// A frontend to the cookie settings of |HostContentSettingsMap|. Handles
+// cookie-specific logic such as blocking third-party cookies. Written on the UI
+// thread and read on any thread. One instance per profile.
+
+class CookieSettings
+ : public content::NotificationObserver,
+ public base::RefCountedThreadSafe<CookieSettings> {
+ public:
+ CookieSettings(
+ HostContentSettingsMap* host_content_settings_map,
+ PrefService* prefs);
+
+ virtual ~CookieSettings();
+
+ // Returns the |CookieSettings| associated with the |profile|.
+ //
+ // This should only be called on the UI thread.
+ static CookieSettings* GetForProfile(Profile* profile);
+
+ // Returns the default content setting (CONTENT_SETTING_ALLOW,
+ // CONTENT_SETTING_BLOCK, or CONTENT_SETTING_SESSION_ONLY) for cookies. If
+ // |provider_id| is not NULL, the id of the provider which provided the
+ // default setting is assigned to it.
+ //
+ // This may be called on any thread.
+ ContentSetting GetDefaultCookieSetting(std::string* provider_id) const;
+
+ // Returns true if the page identified by (|url|, |first_party_url|) is
+ // allowed to read cookies.
+ //
+ // This may be called on any thread.
+ bool IsReadingCookieAllowed(const GURL& url,
+ const GURL& first_party_url) const;
+
+ // Returns true if the page identified by (|url|, |first_party_url|) is
+ // allowed to set cookies (permanent or session only).
+ //
+ // This may be called on any thread.
+ bool IsSettingCookieAllowed(const GURL& url,
+ const GURL& first_party_url) const;
+
+ // Returns true if the cookie set by a page identified by |url| should be
+ // session only. Querying this only makes sense if |IsSettingCookieAllowed|
+ // has returned true.
+ //
+ // This may be called on any thread.
+ bool IsCookieSessionOnly(const GURL& url) const;
+
+ // Returns all patterns with a non-default cookie setting, mapped to their
+ // actual settings, in the precedence order of the setting rules. |settings|
+ // must be a non-NULL outparam.
+ //
+ // This may be called on any thread.
+ void GetCookieSettings(ContentSettingsForOneType* settings) const;
+
+ // Sets the default content setting (CONTENT_SETTING_ALLOW,
+ // CONTENT_SETTING_BLOCK, or CONTENT_SETTING_SESSION_ONLY) for cookies.
+ //
+ // This should only be called on the UI thread.
+ void SetDefaultCookieSetting(ContentSetting setting);
+
+ // Sets the cookie setting for the given patterns.
+ //
+ // This should only be called on the UI thread.
+ void SetCookieSetting(const ContentSettingsPattern& primary_pattern,
+ const ContentSettingsPattern& secondary_pattern,
+ ContentSetting setting);
+
+ // Resets the cookie setting for the given patterns.
+ //
+ // This should only be called on the UI thread.
+ void ResetCookieSetting(const ContentSettingsPattern& primary_pattern,
+ const ContentSettingsPattern& secondary_pattern);
+
+ // |NotificationObserver| implementation.
+ virtual void Observe(int type,
+ const content::NotificationSource& source,
+ const content::NotificationDetails& details) OVERRIDE;
+
+ // Detaches the |CookieSettings| from all |Profile|-related objects like
+ // |PrefService|. This methods needs to be called before destroying the
+ // |Profile|. Afterwards, only const methods can be called.
+ void ShutdownOnUIThread();
+
+ // A helper for applying third party cookie blocking rules.
+ ContentSetting GetCookieSetting(const GURL& url,
+ const GURL& first_party_url,
+ bool setting_cookie) const;
+
+ static void RegisterUserPrefs(PrefService* prefs);
+
+ class Factory : public ProfileKeyedServiceFactory {
+ public:
+ static Factory* GetInstance();
+ CookieSettingsWrapper* GetWrapperForProfile(Profile* profile);
+
+ private:
+ friend struct DefaultSingletonTraits<Factory>;
+
+ Factory();
+ virtual ~Factory() {}
+
+ // |ProfileKeyedServiceFactory| methods:
+ virtual ProfileKeyedService* BuildServiceInstanceFor(
+ Profile* profile) const OVERRIDE;
+ virtual bool ServiceRedirectedInIncognito() OVERRIDE { return true; }
+ };
+
+ private:
+ // Returns true if the "block third party cookies" preference is set.
+ //
+ // This method may be called on any thread.
+ bool ShouldBlockThirdPartyCookies() const;
+
+ scoped_refptr<HostContentSettingsMap> host_content_settings_map_;
+ PrefChangeRegistrar pref_change_registrar_;
+
+ // Used around accesses to |block_third_party_cookies_| to guarantee thread
+ // safety.
+ mutable base::Lock lock_;
+
+ bool block_third_party_cookies_;
+};
+
+#endif // CHROME_BROWSER_CONTENT_SETTINGS_COOKIE_SETTINGS_H_
« no previous file with comments | « chrome/browser/content_settings/content_settings_browsertest.cc ('k') | chrome/browser/content_settings/cookie_settings.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698