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

Unified Diff: chrome/browser/permissions/permission_blacklist_client.h

Issue 2626853002: Refactor blacklist client into own .h/.cc. (Closed)
Patch Set: Nits Created 3 years, 11 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
« no previous file with comments | « chrome/browser/BUILD.gn ('k') | chrome/browser/permissions/permission_blacklist_client.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/permissions/permission_blacklist_client.h
diff --git a/chrome/browser/permissions/permission_blacklist_client.h b/chrome/browser/permissions/permission_blacklist_client.h
new file mode 100644
index 0000000000000000000000000000000000000000..2d1666e00af5925ebd567bc4128e95c95b8eb7fe
--- /dev/null
+++ b/chrome/browser/permissions/permission_blacklist_client.h
@@ -0,0 +1,87 @@
+// Copyright 2017 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_PERMISSIONS_PERMISSION_BLACKLIST_CLIENT_H_
+#define CHROME_BROWSER_PERMISSIONS_PERMISSION_BLACKLIST_CLIENT_H_
+
+#include "base/callback.h"
+#include "base/memory/ref_counted.h"
+#include "chrome/browser/permissions/permission_util.h"
+#include "components/safe_browsing_db/database_manager.h"
+#include "content/public/browser/permission_type.h"
+#include "content/public/browser/web_contents_observer.h"
+
+class GURL;
+
+namespace content {
+class WebContents;
+}
+
+namespace base {
+class OneShotTimer;
+}
+
+// The client used when checking whether a permission has been blacklisted by
+// Safe Browsing. The check is done asynchronously as no state can be stored in
+// PermissionContextBase (since additional permission requests may be made).
+// This class must be created and destroyed on the UI thread.
+class PermissionBlacklistClient
+ : public safe_browsing::SafeBrowsingDatabaseManager::Client,
+ public base::RefCountedThreadSafe<PermissionBlacklistClient>,
+ public content::WebContentsObserver {
+ public:
+ static void CheckSafeBrowsingBlacklist(
+ scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> db_manager,
+ content::PermissionType permission_type,
+ const GURL& request_origin,
+ content::WebContents* web_contents,
+ int timeout,
+ base::Callback<void(bool)> callback);
+
+ private:
+ friend class base::RefCountedThreadSafe<PermissionBlacklistClient>;
+
+ PermissionBlacklistClient(
+ scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> db_manager,
+ content::PermissionType permission_type,
+ const GURL& request_origin,
+ content::WebContents* web_contents,
+ int timeout,
+ base::Callback<void(bool)> callback);
+
+ ~PermissionBlacklistClient() override;
+
+ void StartCheck(const GURL& request_origin);
+
+ // SafeBrowsingDatabaseManager::Client implementation.
+ void OnCheckApiBlacklistUrlResult(
+ const GURL& url,
+ const safe_browsing::ThreatMetadata& metadata) override;
+
+ void EvaluateBlacklistResultOnUiThread(bool permission_blocked);
+
+ // WebContentsObserver implementation. Sets a flag so that when the database
+ // manager returns with a result, it won't attempt to run the callback with a
+ // deleted WebContents.
+ void WebContentsDestroyed() override;
+
+ scoped_refptr<safe_browsing::SafeBrowsingDatabaseManager> db_manager_;
+ content::PermissionType permission_type_;
+
+ // PermissionContextBase callback to run on the UI thread.
+ base::Callback<void(bool)> callback_;
+
+ // Timer to abort the Safe Browsing check if it takes too long. Created and
+ // used on the IO Thread.
+ std::unique_ptr<base::OneShotTimer> timer_;
+ int timeout_;
+
+ // True if |callback_| should be invoked, if web_contents() is destroyed, this
+ // is set to false.
+ bool is_active_;
+
+ DISALLOW_COPY_AND_ASSIGN(PermissionBlacklistClient);
+};
+
+#endif // CHROME_BROWSER_PERMISSIONS_PERMISSION_BLACKLIST_CLIENT_H_
« no previous file with comments | « chrome/browser/BUILD.gn ('k') | chrome/browser/permissions/permission_blacklist_client.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698