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

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

Issue 2836103002: Componentize safe_browsing: move threat_details* to component. (Closed)
Patch Set: fix spelling and typos Created 3 years, 8 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/threat_details.h
diff --git a/chrome/browser/safe_browsing/threat_details.h b/chrome/browser/safe_browsing/threat_details.h
deleted file mode 100644
index abd1747be15ae0510743831c61544e119a00d2f0..0000000000000000000000000000000000000000
--- a/chrome/browser/safe_browsing/threat_details.h
+++ /dev/null
@@ -1,262 +0,0 @@
-// Copyright (c) 2011 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_THREAT_DETAILS_H_
-#define CHROME_BROWSER_SAFE_BROWSING_THREAT_DETAILS_H_
-
-// A class that encapsulates the detailed threat reports sent when
-// users opt-in to do so from the safe browsing warning page.
-
-// An instance of this class is generated when a safe browsing warning page
-// is shown (SafeBrowsingBlockingPage).
-
-#include <memory>
-#include <string>
-#include <unordered_set>
-#include <vector>
-
-#include "base/containers/hash_tables.h"
-#include "base/gtest_prod_util.h"
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "components/safe_browsing/common/safebrowsing_types.h"
-#include "components/safe_browsing/csd.pb.h"
-#include "components/security_interstitials/content/unsafe_resource.h"
-#include "content/public/browser/browser_thread.h"
-#include "content/public/browser/web_contents_observer.h"
-#include "net/base/completion_callback.h"
-
-namespace history {
-class HistoryService;
-} // namespace history
-
-namespace net {
-class URLRequestContextGetter;
-} // namespace net
-
-struct SafeBrowsingHostMsg_ThreatDOMDetails_Node;
-
-namespace safe_browsing {
-
-class BaseUIManager;
-
-// Maps a URL to its Resource.
-class ThreatDetailsCacheCollector;
-class ThreatDetailsRedirectsCollector;
-class ThreatDetailsFactory;
-
-using ResourceMap =
- base::hash_map<std::string,
- std::unique_ptr<ClientSafeBrowsingReportRequest::Resource>>;
-
-// Maps a key of an HTML element to its corresponding HTMLElement proto message.
-// HTML Element keys have the form "<frame_id>-<node_id>", where |frame_id| is
-// the FrameTree NodeID of the render frame containing the element, and
-// |node_id| is a seqeuntial ID for the element generated by the renderer.
-using ElementMap = base::hash_map<std::string, std::unique_ptr<HTMLElement>>;
-
-// Maps a URL to some HTML Elements. Used to maintain parent/child relationship
-// for HTML Elements across IFrame boundaries.
-// The key is the string URL set as the src attribute of an iframe. The value is
-// the HTMLElement proto that represents the iframe element with that URL.
-// The HTMLElement protos are not owned by this map.
-using UrlToDomElementMap = base::hash_map<std::string, HTMLElement*>;
-
-// Maps a URL to some Element IDs. Used to maintain parent/child relationship
-// for HTML Elements across IFrame boundaries.
-// The key is the string URL of a render frame. The value is the set of Element
-// IDs that are at the top-level of this render frame.
-using UrlToChildIdsMap = base::hash_map<std::string, std::unordered_set<int>>;
-
-class ThreatDetails : public base::RefCountedThreadSafe<
- ThreatDetails,
- content::BrowserThread::DeleteOnUIThread>,
- public content::WebContentsObserver {
- public:
- typedef security_interstitials::UnsafeResource UnsafeResource;
-
- // Constructs a new ThreatDetails instance, using the factory.
- static ThreatDetails* NewThreatDetails(
- BaseUIManager* ui_manager,
- content::WebContents* web_contents,
- const UnsafeResource& resource,
- net::URLRequestContextGetter* request_context_getter,
- history::HistoryService* history_service);
-
- // Makes the passed |factory| the factory used to instantiate
- // SafeBrowsingBlockingPage objects. Useful for tests.
- static void RegisterFactory(ThreatDetailsFactory* factory) {
- factory_ = factory;
- }
-
- // The SafeBrowsingBlockingPage calls this from the IO thread when
- // the user is leaving the blocking page and has opted-in to sending
- // the report. We start the redirection urls collection from history service
- // in UI thread; then do cache collection back in IO thread. We also record
- // if the user did proceed with the warning page, and how many times user
- // visited this page before. When we are done, we send the report.
- void FinishCollection(bool did_proceed, int num_visits);
-
- void OnCacheCollectionReady();
-
- void OnRedirectionCollectionReady();
-
- // content::WebContentsObserver implementation.
- bool OnMessageReceived(const IPC::Message& message,
- content::RenderFrameHost* render_frame_host) override;
-
- protected:
- friend class ThreatDetailsFactoryImpl;
- friend class TestThreatDetailsFactory;
-
- ThreatDetails(BaseUIManager* ui_manager,
- content::WebContents* web_contents,
- const UnsafeResource& resource,
- net::URLRequestContextGetter* request_context_getter,
- history::HistoryService* history_service);
-
- ~ThreatDetails() override;
-
- // Called on the IO thread with the DOM details.
- virtual void AddDOMDetails(
- const int frame_tree_node_id,
- const GURL& frame_last_committed_url,
- const std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node>& params);
-
- // The report protocol buffer.
- std::unique_ptr<ClientSafeBrowsingReportRequest> report_;
-
- // Used to get a pointer to the HTTP cache.
- scoped_refptr<net::URLRequestContextGetter> request_context_getter_;
-
- private:
- friend class base::RefCountedThreadSafe<ThreatDetails>;
- friend struct content::BrowserThread::DeleteOnThread<
- content::BrowserThread::UI>;
- friend class base::DeleteHelper<ThreatDetails>;
-
- // Starts the collection of the report.
- void StartCollection();
-
- // Whether the url is "public" so we can add it to the report.
- bool IsReportableUrl(const GURL& url) const;
-
- // Finds an existing Resource for the given url, or creates a new one if not
- // found, and adds it to |resources_|. Returns the found/created resource.
- ClientSafeBrowsingReportRequest::Resource* FindOrCreateResource(
- const GURL& url);
-
- // Finds an existing HTMLElement for a given key, or creates a new one if not
- // found and adds it to |elements_|. Returns the found/created element.
- HTMLElement* FindOrCreateElement(const std::string& element_key);
-
- // Adds a Resource to resources_ with the given parent-child
- // relationship. |parent| and |tagname| can be empty, |children| can be NULL.
- // Returns the Resource that was affected, or null if no work was done.
- ClientSafeBrowsingReportRequest::Resource* AddUrl(
- const GURL& url,
- const GURL& parent,
- const std::string& tagname,
- const std::vector<GURL>* children);
-
- // Message handler.
- void OnReceivedThreatDOMDetails(
- content::RenderFrameHost* sender,
- const std::vector<SafeBrowsingHostMsg_ThreatDOMDetails_Node>& params);
-
- void AddRedirectUrlList(const std::vector<GURL>& urls);
-
- // Adds an HTML Element to the DOM structure.
- // |frame_tree_node_id| is the unique ID of the render frame the element came
- // from. |frame_url| is the URL that the render frame was handling.
- // |element_node_id| is a unique ID of the element within the render frame.
- // |tag_name| is the tag of the element. |parent_element_node_id| is the
- // unique ID of the parent element with the render frame. |attributes|
- // containes the names and values of the element's attributes.|resource| is
- // set if this element is a resource.
- void AddDomElement(const int frame_tree_node_id,
- const std::string& frame_url,
- const int element_node_id,
- const std::string& tag_name,
- const int parent_element_node_id,
- const std::vector<AttributeNameValue>& attributes,
- const ClientSafeBrowsingReportRequest::Resource* resource);
-
- scoped_refptr<BaseUIManager> ui_manager_;
-
- const UnsafeResource resource_;
-
- // For every Url we collect we create a Resource message. We keep
- // them in a map so we can avoid duplicates.
- ResourceMap resources_;
-
- // Store all HTML elements collected, keep them in a map for easy lookup.
- ElementMap elements_;
-
- // For each iframe element encountered we map the src of the iframe to the
- // iframe element. This is used when we receive elements from a different
- // frame whose document URL matches the src of an iframe in this map. We can
- // then add all elements from the subframe as children of the iframe element
- // stored here.
- UrlToDomElementMap iframe_src_to_element_map_;
-
- // When getting a set of elements from a render frame, we store the frame's
- // URL and a collection of all the top-level elements in that frame. When we
- // later encounter the parent iframe with the same src URL, we can add all of
- // these elements as children of that iframe.
- UrlToChildIdsMap document_url_to_children_map_;
-
- // Result from the cache extractor.
- bool cache_result_;
-
- // Whether user did proceed with the safe browsing blocking page or
- // not.
- bool did_proceed_;
-
- // How many times this user has visited this page before.
- int num_visits_;
-
- // Keeps track of whether we have an ambiguous DOM in this report. This can
- // happen when the HTML Elements returned by a render frame can't be
- // associated with a parent Element in the parent frame.
- bool ambiguous_dom_;
-
- // The factory used to instanciate SafeBrowsingBlockingPage objects.
- // Usefull for tests, so they can provide their own implementation of
- // SafeBrowsingBlockingPage.
- static ThreatDetailsFactory* factory_;
-
- // Used to collect details from the HTTP Cache.
- scoped_refptr<ThreatDetailsCacheCollector> cache_collector_;
-
- // Used to collect redirect urls from the history service
- scoped_refptr<ThreatDetailsRedirectsCollector> redirects_collector_;
-
- FRIEND_TEST_ALL_PREFIXES(ThreatDetailsTest, HistoryServiceUrls);
- FRIEND_TEST_ALL_PREFIXES(ThreatDetailsTest, HttpsResourceSanitization);
- FRIEND_TEST_ALL_PREFIXES(ThreatDetailsTest, HTTPCacheNoEntries);
- FRIEND_TEST_ALL_PREFIXES(ThreatDetailsTest, HTTPCache);
- FRIEND_TEST_ALL_PREFIXES(ThreatDetailsTest, ThreatDOMDetails_AmbiguousDOM);
- FRIEND_TEST_ALL_PREFIXES(ThreatDetailsTest, ThreatDOMDetails_MultipleFrames);
- FRIEND_TEST_ALL_PREFIXES(ThreatDetailsTest, ThreatDOMDetails);
-
- DISALLOW_COPY_AND_ASSIGN(ThreatDetails);
-};
-
-// Factory for creating ThreatDetails. Useful for tests.
-class ThreatDetailsFactory {
- public:
- virtual ~ThreatDetailsFactory() {}
-
- virtual ThreatDetails* CreateThreatDetails(
- BaseUIManager* ui_manager,
- content::WebContents* web_contents,
- const security_interstitials::UnsafeResource& unsafe_resource,
- net::URLRequestContextGetter* request_context_getter,
- history::HistoryService* history_service) = 0;
-};
-
-} // namespace safe_browsing
-
-#endif // CHROME_BROWSER_SAFE_BROWSING_THREAT_DETAILS_H_
« no previous file with comments | « chrome/browser/safe_browsing/safe_browsing_blocking_page_unittest.cc ('k') | chrome/browser/safe_browsing/threat_details.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698