| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_NAVIGATION_OBSERVER_MANAGER_H
_ | 5 #ifndef CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_NAVIGATION_OBSERVER_MANAGER_H
_ |
| 6 #define CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_NAVIGATION_OBSERVER_MANAGER_H
_ | 6 #define CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_NAVIGATION_OBSERVER_MANAGER_H
_ |
| 7 | 7 |
| 8 #include <deque> | 8 #include <deque> |
| 9 #include "base/feature_list.h" | 9 #include "base/feature_list.h" |
| 10 #include "base/supports_user_data.h" | 10 #include "base/supports_user_data.h" |
| 11 #include "components/safe_browsing/csd.pb.h" | 11 #include "components/safe_browsing/csd.pb.h" |
| 12 #include "content/public/browser/web_contents_observer.h" | 12 #include "content/public/browser/web_contents_observer.h" |
| 13 #include "third_party/protobuf/src/google/protobuf/repeated_field.h" | 13 #include "third_party/protobuf/src/google/protobuf/repeated_field.h" |
| 14 #include "url/gurl.h" | 14 #include "url/gurl.h" |
| 15 | 15 |
| 16 class Profile; | |
| 17 | |
| 18 namespace safe_browsing { | 16 namespace safe_browsing { |
| 19 | 17 |
| 20 class SafeBrowsingNavigationObserver; | 18 class SafeBrowsingNavigationObserver; |
| 21 struct NavigationEvent; | 19 struct NavigationEvent; |
| 22 struct ResolvedIPAddress; | 20 struct ResolvedIPAddress; |
| 23 | 21 |
| 24 typedef google::protobuf::RepeatedPtrField<safe_browsing::ReferrerChainEntry> | 22 typedef google::protobuf::RepeatedPtrField<safe_browsing::ReferrerChainEntry> |
| 25 ReferrerChain; | 23 ReferrerChain; |
| 26 | 24 |
| 27 // User data stored in DownloadItem for referrer chain information. | 25 // User data stored in DownloadItem for referrer chain information. |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 88 std::deque<std::unique_ptr<NavigationEvent>> navigation_events_; | 86 std::deque<std::unique_ptr<NavigationEvent>> navigation_events_; |
| 89 const std::size_t size_limit_; | 87 const std::size_t size_limit_; |
| 90 }; | 88 }; |
| 91 | 89 |
| 92 // Manager class for SafeBrowsingNavigationObserver, which is in charge of | 90 // Manager class for SafeBrowsingNavigationObserver, which is in charge of |
| 93 // cleaning up stale navigation events, and identifying landing page/landing | 91 // cleaning up stale navigation events, and identifying landing page/landing |
| 94 // referrer for a specific Safe Browsing event. | 92 // referrer for a specific Safe Browsing event. |
| 95 class SafeBrowsingNavigationObserverManager | 93 class SafeBrowsingNavigationObserverManager |
| 96 : public base::RefCountedThreadSafe<SafeBrowsingNavigationObserverManager> { | 94 : public base::RefCountedThreadSafe<SafeBrowsingNavigationObserverManager> { |
| 97 public: | 95 public: |
| 98 static const base::Feature kDownloadAttribution; | |
| 99 | |
| 100 // For UMA histogram counting. Do NOT change order. | 96 // For UMA histogram counting. Do NOT change order. |
| 101 enum AttributionResult { | 97 enum AttributionResult { |
| 102 SUCCESS = 1, // Identified referrer chain is not empty. | 98 SUCCESS = 1, // Identified referrer chain is not empty. |
| 103 SUCCESS_LANDING_PAGE = 2, // Successfully identified landing page. | 99 SUCCESS_LANDING_PAGE = 2, // Successfully identified landing page. |
| 104 SUCCESS_LANDING_REFERRER = 3, // Successfully identified landing referrer. | 100 SUCCESS_LANDING_REFERRER = 3, // Successfully identified landing referrer. |
| 105 INVALID_URL = 4, | 101 INVALID_URL = 4, |
| 106 NAVIGATION_EVENT_NOT_FOUND = 5, | 102 NAVIGATION_EVENT_NOT_FOUND = 5, |
| 107 | 103 |
| 108 // Always at the end. | 104 // Always at the end. |
| 109 ATTRIBUTION_FAILURE_TYPE_MAX | 105 ATTRIBUTION_FAILURE_TYPE_MAX |
| 110 }; | 106 }; |
| 111 | 107 |
| 112 // Helper function to check if user gesture is older than | 108 // Helper function to check if user gesture is older than |
| 113 // kUserGestureTTLInSecond. | 109 // kUserGestureTTLInSecond. |
| 114 static bool IsUserGestureExpired(const base::Time& timestamp); | 110 static bool IsUserGestureExpired(const base::Time& timestamp); |
| 115 | 111 |
| 116 // Helper function to strip empty ref fragment from a URL. Many pages | 112 // Helper function to strip empty ref fragment from a URL. Many pages |
| 117 // end up with a "#" at the end of their URLs due to navigation triggered by | 113 // end up with a "#" at the end of their URLs due to navigation triggered by |
| 118 // href="#" and javascript onclick function. We don't want to have separate | 114 // href="#" and javascript onclick function. We don't want to have separate |
| 119 // entries for these cases in the maps. | 115 // entries for these cases in the maps. |
| 120 static GURL ClearEmptyRef(const GURL& url); | 116 static GURL ClearEmptyRef(const GURL& url); |
| 121 | 117 |
| 122 // Checks if we should enable observing navigations for safe browsing purpose. | 118 // Checks if we should enable observing navigations for safe browsing purpose. |
| 123 // Return true if the safe browsing service and the |kDownloadAttribution| | 119 // Return true if the safe browsing safe browsing service is enabled and |
| 124 // feature are both enabled, and safe browsing service is initialized. | 120 // initialized. |
| 125 static bool IsEnabledAndReady(Profile* profile); | 121 static bool IsEnabledAndReady(content::WebContents* web_contents); |
| 126 | 122 |
| 127 SafeBrowsingNavigationObserverManager(); | 123 SafeBrowsingNavigationObserverManager(); |
| 128 | 124 |
| 129 // Adds |nav_event| to |navigation_event_list_|. Object pointed to by | 125 // Adds |nav_event| to |navigation_event_list_|. Object pointed to by |
| 130 // |nav_event| will be no longer accessible after this function. | 126 // |nav_event| will be no longer accessible after this function. |
| 131 void RecordNavigationEvent(std::unique_ptr<NavigationEvent> nav_event); | 127 void RecordNavigationEvent(std::unique_ptr<NavigationEvent> nav_event); |
| 132 void RecordUserGestureForWebContents(content::WebContents* web_contents, | 128 void RecordUserGestureForWebContents(content::WebContents* web_contents, |
| 133 const base::Time& timestamp); | 129 const base::Time& timestamp); |
| 134 void OnUserGestureConsumed(content::WebContents* web_contents, | 130 void OnUserGestureConsumed(content::WebContents* web_contents, |
| 135 const base::Time& timestamp); | 131 const base::Time& timestamp); |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 265 // vector of ResolvedIPAddresss. | 261 // vector of ResolvedIPAddresss. |
| 266 HostToIpMap host_to_ip_map_; | 262 HostToIpMap host_to_ip_map_; |
| 267 | 263 |
| 268 base::OneShotTimer cleanup_timer_; | 264 base::OneShotTimer cleanup_timer_; |
| 269 | 265 |
| 270 DISALLOW_COPY_AND_ASSIGN(SafeBrowsingNavigationObserverManager); | 266 DISALLOW_COPY_AND_ASSIGN(SafeBrowsingNavigationObserverManager); |
| 271 }; | 267 }; |
| 272 } // namespace safe_browsing | 268 } // namespace safe_browsing |
| 273 | 269 |
| 274 #endif // CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_NAVIGATION_OBSERVER_MANAGE
R_H_ | 270 #endif // CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_NAVIGATION_OBSERVER_MANAGE
R_H_ |
| OLD | NEW |