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

Unified Diff: components/web_restrictions/browser/web_restrictions_client.h

Issue 1890203002: Implement Web Restrictions in WebView. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Respond to comments, and fix a possible race in displaying error page Created 4 years, 7 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: 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);
};

Powered by Google App Engine
This is Rietveld 408576698