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

Unified Diff: chrome/browser/policy/url_blacklist_manager.h

Issue 102973005: Move URLBlacklistManager to components/policy. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase, fixed linkage of policy_component Created 7 years 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
« no previous file with comments | « chrome/browser/net/chrome_network_delegate.cc ('k') | chrome/browser/policy/url_blacklist_manager.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/policy/url_blacklist_manager.h
diff --git a/chrome/browser/policy/url_blacklist_manager.h b/chrome/browser/policy/url_blacklist_manager.h
deleted file mode 100644
index b4262e4dbae21c9bea610d87150d454b85704206..0000000000000000000000000000000000000000
--- a/chrome/browser/policy/url_blacklist_manager.h
+++ /dev/null
@@ -1,226 +0,0 @@
-// Copyright (c) 2012 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_POLICY_URL_BLACKLIST_MANAGER_H_
-#define CHROME_BROWSER_POLICY_URL_BLACKLIST_MANAGER_H_
-
-#include <map>
-#include <string>
-
-#include "base/basictypes.h"
-#include "base/callback_forward.h"
-#include "base/compiler_specific.h"
-#include "base/containers/hash_tables.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/weak_ptr.h"
-#include "base/prefs/pref_change_registrar.h"
-#include "components/url_matcher/url_matcher.h"
-#include "url/gurl.h"
-
-class PrefService;
-
-namespace base {
-class ListValue;
-class SequencedTaskRunner;
-}
-
-namespace net {
-class URLRequest;
-}
-
-namespace user_prefs {
-class PrefRegistrySyncable;
-}
-
-namespace policy {
-
-// Contains a set of filters to block and allow certain URLs, and matches GURLs
-// against this set. The filters are currently kept in memory.
-class URLBlacklist {
- public:
- // This is meant to be bound to URLFixerUpper::SegmentURL. See that function
- // for documentation on the parameters and return value.
- typedef std::string (*SegmentURLCallback)(const std::string&,
- url_parse::Parsed*);
-
- explicit URLBlacklist(SegmentURLCallback segment_url);
- virtual ~URLBlacklist();
-
- // Allows or blocks URLs matching one of the filters, depending on |allow|.
- void AddFilters(bool allow, const base::ListValue* filters);
-
- // URLs matching one of the |filters| will be blocked. The filter format is
- // documented at
- // http://www.chromium.org/administrators/url-blacklist-filter-format.
- void Block(const base::ListValue* filters);
-
- // URLs matching one of the |filters| will be allowed. If a URL is both
- // Blocked and Allowed, Allow takes precedence.
- void Allow(const base::ListValue* filters);
-
- // Returns true if the URL is blocked.
- bool IsURLBlocked(const GURL& url) const;
-
- // Returns the number of items in the list.
- size_t Size() const;
-
- // Splits a URL filter into its components. A GURL isn't used because these
- // can be invalid URLs e.g. "google.com".
- // Returns false if the URL couldn't be parsed.
- // The |host| is preprocessed so it can be passed to URLMatcher for the
- // appropriate condition.
- // The optional username and password are ignored.
- // |match_subdomains| specifies whether the filter should include subdomains
- // of the hostname (if it is one.)
- // |port| is 0 if none is explicitly defined.
- // |path| does not include query parameters.
- static bool FilterToComponents(SegmentURLCallback segment_url,
- const std::string& filter,
- std::string* scheme,
- std::string* host,
- bool* match_subdomains,
- uint16* port,
- std::string* path);
-
- // Creates a condition set that can be used with the |url_matcher|. |id| needs
- // to be a unique number that will be returned by the |url_matcher| if the URL
- // matches that condition set.
- static scoped_refptr<url_matcher::URLMatcherConditionSet> CreateConditionSet(
- url_matcher::URLMatcher* url_matcher,
- url_matcher::URLMatcherConditionSet::ID id,
- const std::string& scheme,
- const std::string& host,
- bool match_subdomains,
- uint16 port,
- const std::string& path);
-
- private:
- struct FilterComponents;
-
- // Returns true if |lhs| takes precedence over |rhs|.
- static bool FilterTakesPrecedence(const FilterComponents& lhs,
- const FilterComponents& rhs);
-
- SegmentURLCallback segment_url_;
- url_matcher::URLMatcherConditionSet::ID id_;
- std::map<url_matcher::URLMatcherConditionSet::ID, FilterComponents> filters_;
- scoped_ptr<url_matcher::URLMatcher> url_matcher_;
-
- DISALLOW_COPY_AND_ASSIGN(URLBlacklist);
-};
-
-// Tracks the blacklist policies for a given profile, and updates it on changes.
-//
-// This class interacts with both the UI thread, where notifications of pref
-// changes are received from, and the IO thread, which owns it (in the
-// ProfileIOData) and checks for blacklisted URLs (from ChromeNetworkDelegate).
-//
-// It must be constructed on the UI thread, to set up |ui_weak_ptr_factory_| and
-// the prefs listeners.
-//
-// ShutdownOnUIThread must be called from UI before destruction, to release
-// the prefs listeners on the UI thread. This is done from ProfileIOData.
-//
-// Update tasks from the UI thread can post safely to the IO thread, since the
-// destruction order of Profile and ProfileIOData guarantees that if this
-// exists in UI, then a potential destruction on IO will come after any task
-// posted to IO from that method on UI. This is used to go through IO before
-// the actual update starts, and grab a WeakPtr.
-class URLBlacklistManager {
- public:
- // Returns true if the blacklist should be skipped for |url|.
- typedef bool (*SkipBlacklistCallback)(const GURL& url);
-
- // Must be constructed on the UI thread.
- // |background_task_runner| is used to build the blacklist in a background
- // thread.
- // |io_task_runner| must be backed by the IO thread.
- // |segment_url| is used to break a URL spec into its components.
- URLBlacklistManager(
- PrefService* pref_service,
- const scoped_refptr<base::SequencedTaskRunner>& background_task_runner,
- const scoped_refptr<base::SequencedTaskRunner>& io_task_runner,
- URLBlacklist::SegmentURLCallback segment_url,
- SkipBlacklistCallback skip_blacklist);
- virtual ~URLBlacklistManager();
-
- // Must be called on the UI thread, before destruction.
- void ShutdownOnUIThread();
-
- // Returns true if |url| is blocked by the current blacklist. Must be called
- // from the IO thread.
- bool IsURLBlocked(const GURL& url) const;
-
- // Returns true if |request| is blocked by the current blacklist.
- // Only main frame and sub frame requests may be blocked; other sub resources
- // or background downloads (e.g. extensions updates, sync, etc) are not
- // filtered. The sync signin page is also not filtered.
- // Must be called from the IO thread.
- bool IsRequestBlocked(const net::URLRequest& request) const;
-
- // Replaces the current blacklist. Must be called on the IO thread.
- // Virtual for testing.
- virtual void SetBlacklist(scoped_ptr<URLBlacklist> blacklist);
-
- // Registers the preferences related to blacklisting in the given PrefService.
- static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
-
- protected:
- // Used to delay updating the blacklist while the preferences are
- // changing, and execute only one update per simultaneous prefs changes.
- void ScheduleUpdate();
-
- // Updates the blacklist using the current preference values.
- // Virtual for testing.
- virtual void Update();
-
- // Starts the blacklist update on the IO thread, using the filters in
- // |block| and |allow|. Protected for testing.
- void UpdateOnIO(scoped_ptr<base::ListValue> block,
- scoped_ptr<base::ListValue> allow);
-
- private:
- // ---------
- // UI thread
- // ---------
-
- // Used to post update tasks to the UI thread.
- base::WeakPtrFactory<URLBlacklistManager> ui_weak_ptr_factory_;
-
- // Used to track the policies and update the blacklist on changes.
- PrefChangeRegistrar pref_change_registrar_;
- PrefService* pref_service_; // Weak.
-
- // Used to post tasks to a background thread.
- scoped_refptr<base::SequencedTaskRunner> background_task_runner_;
-
- // Used to post tasks to the IO thread.
- scoped_refptr<base::SequencedTaskRunner> io_task_runner_;
-
- // Used to break a URL into its components.
- URLBlacklist::SegmentURLCallback segment_url_;
-
- // Used to optionally skip blacklisting for some URLs.
- SkipBlacklistCallback skip_blacklist_;
-
- // ---------
- // IO thread
- // ---------
-
- // Used to get |weak_ptr_| to self on the IO thread.
- base::WeakPtrFactory<URLBlacklistManager> io_weak_ptr_factory_;
-
- // Used to post tasks to the UI thread.
- scoped_refptr<base::SequencedTaskRunner> ui_task_runner_;
-
- // The current blacklist.
- scoped_ptr<URLBlacklist> blacklist_;
-
- DISALLOW_COPY_AND_ASSIGN(URLBlacklistManager);
-};
-
-} // namespace policy
-
-#endif // CHROME_BROWSER_POLICY_URL_BLACKLIST_MANAGER_H_
« no previous file with comments | « chrome/browser/net/chrome_network_delegate.cc ('k') | chrome/browser/policy/url_blacklist_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698