Chromium Code Reviews| Index: components/web_restrictions/browser/web_restrictions_client.h |
| diff --git a/components/web_restrictions/browser/web_restrictions_client.h b/components/web_restrictions/browser/web_restrictions_client.h |
| index bad0b608ef0ec9a01a761fbd8bd7de4d4b93e900..fae6274202ac52fd1705a1336784f153b4bc5d6d 100644 |
| --- a/components/web_restrictions/browser/web_restrictions_client.h |
| +++ b/components/web_restrictions/browser/web_restrictions_client.h |
| @@ -6,9 +6,10 @@ |
| #define COMPONENTS_WEB_RESTRICTION_WEB_RESTRICTIONS_CLIENT_H_ |
| #include <jni.h> |
| + |
| #include <list> |
| -#include <map> |
| #include <string> |
| +#include <unordered_map> |
| #include "base/android/jni_android.h" |
| #include "base/android/scoped_java_ref.h" |
| @@ -17,7 +18,8 @@ |
| #include "base/memory/ref_counted.h" |
| #include "base/sequenced_task_runner.h" |
| #include "base/single_thread_task_runner.h" |
| -#include "url/gurl.h" |
| +#include "base/synchronization/lock.h" |
| +#include "components/web_restrictions/browser/web_restrictions_client_result.h" |
| namespace web_restrictions { |
| @@ -42,44 +44,61 @@ class WebRestrictionsClient { |
| // WebRestrictionsProvider: |
| UrlAccess ShouldProceed(bool is_main_frame, |
| - const GURL& url, |
| + const std::string& url, |
| const base::Callback<void(bool)>& callback); |
| bool SupportsRequest() const; |
| - int GetResultColumnCount(const GURL& url) const; |
| - |
| - std::string GetResultColumnName(const GURL& url, int column) const; |
| - |
| - int GetResultIntValue(const GURL& url, int column) const; |
| - |
| - std::string GetResultStringValue(const GURL& url, int column) const; |
| - |
| - void RequestPermission(const GURL& url, |
| + void RequestPermission(const std::string& url, |
| const base::Callback<void(bool)>& callback); |
| - void OnWebRestrictionsChanged(); |
| - |
| - private: |
| + void OnWebRestrictionsChanged( |
| + JNIEnv* env, |
| + const base::android::JavaParamRef<jobject>& obj); |
| - void RecordURLAccess(const GURL& url); |
| + // Get a cached WebRestrictionsResult synchronously, for use when building |
| + // error pages etc.. May be called on any thread, and will return a fresh copy |
| + // of the result (hence thread safe). |
| + std::unique_ptr<WebRestrictionsClientResult> GetCachedWebRestrictionsResult( |
| + const std::string& url); |
| - void UpdateCache(std::string provider_authority, |
| - GURL url, |
| + private: |
| + class Cache { |
| + public: |
| + Cache() = default; |
| + std::unique_ptr<WebRestrictionsClientResult> GetCacheEntry( |
| + const std::string& url); |
| + void SetCacheEntry(const std::string& url, |
| + const WebRestrictionsClientResult& entry); |
| + void RemoveCacheEntry(const std::string& url); |
| + void Clear(); |
| + |
| + private: |
| + base::Lock lock_; |
| + std::unordered_map<std::string, WebRestrictionsClientResult> cache_data_; |
| + DISALLOW_COPY_AND_ASSIGN(Cache); |
| + }; |
| + |
| + void SetAuthorityTask(const std::string& content_provider_authority); |
| + |
| + void RecordURLAccess(const std::string& url); |
| + |
| + void UpdateCache(const std::string& provider_authority, |
| + const std::string& url, |
| base::android::ScopedJavaGlobalRef<jobject> result); |
| - void RequestSupportKnown(std::string provider_authority, |
| + void RequestSupportKnown(const std::string& provider_authority, |
| bool supports_request); |
| void ClearCache(); |
| static base::android::ScopedJavaGlobalRef<jobject> ShouldProceedTask( |
| - const GURL& url, |
| + const std::string& url, |
| const base::android::JavaRef<jobject>& java_provider); |
| void OnShouldProceedComplete( |
| std::string provider_authority, |
| - const GURL& url, |
| + const std::string& url, |
| const base::Callback<void(bool)>& callback, |
| const base::android::ScopedJavaGlobalRef<jobject>& result); |
| @@ -88,12 +107,15 @@ class WebRestrictionsClient { |
| bool supports_request_; |
| base::android::ScopedJavaGlobalRef<jobject> java_provider_; |
| std::string provider_authority_; |
| + Cache cache_; |
| scoped_refptr<base::SequencedTaskRunner> background_task_runner_; |
| - scoped_refptr<base::SingleThreadTaskRunner> single_thread_task_runner_; |
| + std::list<std::string> recent_urls_; |
| - std::map<GURL, base::android::ScopedJavaGlobalRef<jobject>> cache_; |
| - std::list<GURL> recent_urls_; |
| + // Make the test classes friends, so that they can set the authority |
| + // synchronously |
|
Bernhard Bauer
2016/05/19 10:00:15
Friend declarations come first in the private sect
aberent
2016/05/19 15:44:03
Done.
|
| + friend class WebRestrictionsResourceThrottleTest; |
| + friend class WebRestrictionsClientTest; |
| DISALLOW_COPY_AND_ASSIGN(WebRestrictionsClient); |
| }; |