diff options
Diffstat (limited to 'chromium/components/safe_search_api/url_checker.h')
-rw-r--r-- | chromium/components/safe_search_api/url_checker.h | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/chromium/components/safe_search_api/url_checker.h b/chromium/components/safe_search_api/url_checker.h new file mode 100644 index 00000000000..6a950dda9c4 --- /dev/null +++ b/chromium/components/safe_search_api/url_checker.h @@ -0,0 +1,91 @@ +// Copyright 2014 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 COMPONENTS_SAFE_SEARCH_API_URL_CHECKER_H_ +#define COMPONENTS_SAFE_SEARCH_API_URL_CHECKER_H_ + +#include <stddef.h> + +#include <memory> +#include <vector> + +#include "base/callback_forward.h" +#include "base/containers/mru_cache.h" +#include "base/macros.h" +#include "base/memory/scoped_refptr.h" +#include "base/time/time.h" +#include "net/traffic_annotation/network_traffic_annotation.h" +#include "url/gurl.h" + +namespace network { +class SharedURLLoaderFactory; +} // namespace network + +namespace base { +struct Feature; +} + +namespace safe_search_api { + +// The SafeSearch API classification of a URL. +enum class Classification { SAFE, UNSAFE }; + +// Visible for testing. +extern const base::Feature kAllowAllGoogleUrls; + +// This class uses the SafeSearch API to check the SafeSearch classification +// of the content on a given URL and returns the result asynchronously +// via a callback. +class URLChecker { + public: + // Returns whether |url| should be blocked. Called from CheckURL. + using CheckCallback = base::OnceCallback< + void(const GURL&, Classification classification, bool /* uncertain */)>; + + // |country| should be a two-letter country code (ISO 3166-1 alpha-2), e.g., + // "us". + URLChecker(scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, + const net::NetworkTrafficAnnotationTag& traffic_annotation, + const std::string& country); + URLChecker(scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, + const net::NetworkTrafficAnnotationTag& traffic_annotation, + const std::string& country, + size_t cache_size); + ~URLChecker(); + + // Returns whether |callback| was run synchronously. + bool CheckURL(const GURL& url, CheckCallback callback); + + void SetCacheTimeoutForTesting(const base::TimeDelta& timeout) { + cache_timeout_ = timeout; + } + + private: + struct Check; + struct CheckResult { + CheckResult(Classification classification, bool uncertain); + Classification classification; + bool uncertain; + base::TimeTicks timestamp; + }; + using CheckList = std::list<std::unique_ptr<Check>>; + + void OnSimpleLoaderComplete(CheckList::iterator it, + std::unique_ptr<std::string> response_body); + + scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_; + const net::NetworkTrafficAnnotationTag traffic_annotation_; + const std::string country_; + + CheckList checks_in_progress_; + + base::MRUCache<GURL, CheckResult> cache_; + base::TimeDelta cache_timeout_; + + DISALLOW_COPY_AND_ASSIGN(URLChecker); +}; + +} // namespace safe_search_api + +#endif // COMPONENTS_SAFE_SEARCH_API_URL_CHECKER_H_ |