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

Unified Diff: chrome/browser/safe_browsing/safe_browsing_url_checker_impl.h

Issue 2924723002: Network service: SafeBrowsing check for frame-resources from browser. (Closed)
Patch Set: . Created 3 years, 6 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: chrome/browser/safe_browsing/safe_browsing_url_checker_impl.h
diff --git a/chrome/browser/safe_browsing/safe_browsing_url_checker_impl.h b/chrome/browser/safe_browsing/safe_browsing_url_checker_impl.h
new file mode 100644
index 0000000000000000000000000000000000000000..4815e99a393cf4a5c93d547e61b53eb73fb2442a
--- /dev/null
+++ b/chrome/browser/safe_browsing/safe_browsing_url_checker_impl.h
@@ -0,0 +1,116 @@
+// 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_SAFE_BROWSING_SAFE_BROWSING_URL_CHECKER_IMPL_H_
+#define CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_URL_CHECKER_IMPL_H_
+
+#include <vector>
+
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/weak_ptr.h"
+#include "base/timer/timer.h"
+#include "components/safe_browsing/common/safe_browsing.mojom.h"
+#include "components/safe_browsing_db/database_manager.h"
+#include "content/public/common/resource_type.h"
+#include "url/gurl.h"
+
+namespace content {
+class WebContents;
+}
+
+namespace security_interstitials {
+struct UnsafeResource;
+}
+
+namespace safe_browsing {
+
+class SafeBrowsingUIManager;
+class BaseUIManager;
+
+// A SafeBrowsingUrlCheckerImpl instance is used to perform SafeBrowsing check
+// for a URL and its redirect URLs. It implements Mojo interface so that it can
+// be used to handle queries from renderers. But it is also used to handle
+// queries from the browser. In that case, the public methods are called
+// directly instead of through Mojo.
+// Used when --enable-network-service is in effect.
+//
+// TODO(yzshen): Handle the case where SafeBrowsing is not enabled, or
+// !database_manager()->IsSupported().
+// TODO(yzshen): Make sure it also works on Andorid.
+// TODO(yzshen): Do all the logging like what BaseResourceThrottle does.
+class SafeBrowsingUrlCheckerImpl : public mojom::SafeBrowsingUrlChecker,
+ public SafeBrowsingDatabaseManager::Client {
+ public:
+ SafeBrowsingUrlCheckerImpl(
+ int load_flags,
+ content::ResourceType resource_type,
+ scoped_refptr<SafeBrowsingDatabaseManager> database_manager,
+ scoped_refptr<SafeBrowsingUIManager> ui_manager,
+ const base::Callback<content::WebContents*()>& web_contents_getter);
+
+ ~SafeBrowsingUrlCheckerImpl() override;
+
+ // mojom::SafeBrowsingUrlChecker implementation.
+ void CheckUrl(const GURL& url, CheckUrlCallback callback) override;
+
+ private:
+ // SafeBrowsingDatabaseManager::Client implementation:
+ void OnCheckBrowseUrlResult(const GURL& url,
+ SBThreatType threat_type,
+ const ThreatMetadata& metadata) override;
+
+ static void StartDisplayingBlockingPage(
+ const base::WeakPtr<SafeBrowsingUrlCheckerImpl>& checker,
+ scoped_refptr<BaseUIManager> ui_manager,
+ const security_interstitials::UnsafeResource& resource);
+
+ void OnCheckUrlTimeout();
+
+ void ProcessUrls();
+
+ void BlockAndProcessUrls();
+
+ void OnBlockingPageComplete(bool proceed);
+
+ enum State {
+ // Haven't started checking or checking is complete.
+ STATE_NONE,
+ // We have one outstanding URL-check.
+ STATE_CHECKING_URL,
+ // We're displaying a blocking page.
+ STATE_DISPLAYING_BLOCKING_PAGE,
+ // The blocking page has returned *not* to proceed.
+ STATE_BLOCKED
+ };
+
+ const int load_flags_;
+ const content::ResourceType resource_type_;
+ base::Callback<content::WebContents*()> web_contents_getter_;
+ scoped_refptr<SafeBrowsingDatabaseManager> database_manager_;
+ scoped_refptr<BaseUIManager> ui_manager_;
+
+ // The redirect chain for this resource, including the original URL and
+ // subsequent redirect URLs.
+ std::vector<GURL> urls_;
+ // Callbacks corresponding to |urls_| to report check results. |urls_| and
+ // |callbacks_| are always of the same size.
+ std::vector<CheckUrlCallback> callbacks_;
+ // |urls_| before |next_index_| have been checked. If |next_index_| is smaller
+ // than the size of |urls_|, the URL at |next_index_| is being processed.
+ size_t next_index_ = 0;
+
+ State state_ = STATE_NONE;
+
+ // Timer to abort the SafeBrowsing check if it takes too long.
+ base::OneShotTimer timer_;
+
+ base::WeakPtrFactory<SafeBrowsingUrlCheckerImpl> weak_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(SafeBrowsingUrlCheckerImpl);
+};
+
+} // namespace safe_browsing
+
+#endif // CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_URL_CHECKER_IMPL_H_

Powered by Google App Engine
This is Rietveld 408576698