OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // Classes for managing the SafeBrowsing interstitial pages. | 5 // Classes for managing the SafeBrowsing interstitial pages. |
6 // | 6 // |
7 // When a user is about to visit a page the SafeBrowsing system has deemed to | 7 // When a user is about to visit a page the SafeBrowsing system has deemed to |
8 // be malicious, either as malware or a phishing page, we show an interstitial | 8 // be malicious, either as malware or a phishing page, we show an interstitial |
9 // page with some options (go back, continue) to give the user a chance to avoid | 9 // page with some options (go back, continue) to give the user a chance to avoid |
10 // the harmful page. | 10 // the harmful page. |
(...skipping 16 matching lines...) Expand all Loading... |
27 | 27 |
28 #ifndef CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_BLOCKING_PAGE_H_ | 28 #ifndef CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_BLOCKING_PAGE_H_ |
29 #define CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_BLOCKING_PAGE_H_ | 29 #define CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_BLOCKING_PAGE_H_ |
30 | 30 |
31 #include <map> | 31 #include <map> |
32 #include <string> | 32 #include <string> |
33 #include <vector> | 33 #include <vector> |
34 | 34 |
35 #include "base/gtest_prod_util.h" | 35 #include "base/gtest_prod_util.h" |
36 #include "base/task/cancelable_task_tracker.h" | 36 #include "base/task/cancelable_task_tracker.h" |
37 #include "base/time/time.h" | |
38 #include "chrome/browser/history/history_service.h" | |
39 #include "chrome/browser/interstitials/security_interstitial_page.h" | 37 #include "chrome/browser/interstitials/security_interstitial_page.h" |
| 38 #include "chrome/browser/interstitials/security_interstitial_uma_helper.h" |
40 #include "chrome/browser/safe_browsing/ui_manager.h" | 39 #include "chrome/browser/safe_browsing/ui_manager.h" |
41 #include "url/gurl.h" | 40 #include "url/gurl.h" |
42 | 41 |
43 class MalwareDetails; | 42 class MalwareDetails; |
44 class SafeBrowsingBlockingPageFactory; | 43 class SafeBrowsingBlockingPageFactory; |
45 | 44 |
46 namespace base { | 45 namespace base { |
47 class MessageLoop; | 46 class MessageLoop; |
48 } | 47 } |
49 | 48 |
50 #if defined(ENABLE_EXTENSIONS) | |
51 namespace extensions { | |
52 class ExperienceSamplingEvent; | |
53 } | |
54 #endif | |
55 | |
56 class SafeBrowsingBlockingPage : public SecurityInterstitialPage { | 49 class SafeBrowsingBlockingPage : public SecurityInterstitialPage { |
57 public: | 50 public: |
58 typedef SafeBrowsingUIManager::UnsafeResource UnsafeResource; | 51 typedef SafeBrowsingUIManager::UnsafeResource UnsafeResource; |
59 typedef std::vector<UnsafeResource> UnsafeResourceList; | 52 typedef std::vector<UnsafeResource> UnsafeResourceList; |
60 typedef std::map<content::WebContents*, UnsafeResourceList> UnsafeResourceMap; | 53 typedef std::map<content::WebContents*, UnsafeResourceList> UnsafeResourceMap; |
61 | 54 |
62 // Interstitial type, used in tests. | 55 // Interstitial type, used in tests. |
63 static const void* kTypeForTesting; | 56 static const void* kTypeForTesting; |
64 | 57 |
65 ~SafeBrowsingBlockingPage() override; | 58 ~SafeBrowsingBlockingPage() override; |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 // report but clicked "proceed anyway", we delay the call to | 108 // report but clicked "proceed anyway", we delay the call to |
116 // MalwareDetails::FinishCollection() by this much time (in | 109 // MalwareDetails::FinishCollection() by this much time (in |
117 // milliseconds), in order to get data from the blocked resource itself. | 110 // milliseconds), in order to get data from the blocked resource itself. |
118 int64 malware_details_proceed_delay_ms_; | 111 int64 malware_details_proceed_delay_ms_; |
119 | 112 |
120 FRIEND_TEST_ALL_PREFIXES(SafeBrowsingBlockingPageTest, | 113 FRIEND_TEST_ALL_PREFIXES(SafeBrowsingBlockingPageTest, |
121 MalwareReportsTransitionDisabled); | 114 MalwareReportsTransitionDisabled); |
122 FRIEND_TEST_ALL_PREFIXES(SafeBrowsingBlockingPageTest, | 115 FRIEND_TEST_ALL_PREFIXES(SafeBrowsingBlockingPageTest, |
123 MalwareReportsToggling); | 116 MalwareReportsToggling); |
124 | 117 |
125 // These enums are used for histograms. Don't reorder, delete, or insert | |
126 // elements. New elements should be added before MAX_ACTION only. | |
127 enum Decision { | |
128 SHOW, | |
129 PROCEED, | |
130 DONT_PROCEED, | |
131 PROCEEDING_DISABLED, | |
132 MAX_DECISION | |
133 }; | |
134 enum Interaction { | |
135 TOTAL_VISITS, | |
136 SHOW_ADVANCED, | |
137 SHOW_PRIVACY_POLICY, | |
138 SHOW_DIAGNOSTIC, | |
139 SHOW_LEARN_MORE, | |
140 MAX_INTERACTION | |
141 }; | |
142 | |
143 // Record a user decision or interaction to the appropriate UMA histogram. | |
144 void RecordUserDecision(Decision decision); | |
145 void RecordUserInteraction(Interaction interaction); | |
146 | |
147 // Used to query the HistoryService to see if the URL is in history. For UMA. | |
148 void OnGotHistoryCount(bool success, int num_visits, base::Time first_visit); | |
149 | |
150 // Checks if we should even show the malware details option. For example, we | 118 // Checks if we should even show the malware details option. For example, we |
151 // don't show it in incognito mode. | 119 // don't show it in incognito mode. |
152 bool CanShowMalwareDetailsOption(); | 120 bool CanShowMalwareDetailsOption(); |
153 | 121 |
154 // Called when the insterstitial is going away. If there is a | 122 // Called when the insterstitial is going away. If there is a |
155 // pending malware details object, we look at the user's | 123 // pending malware details object, we look at the user's |
156 // preferences, and if the option to send malware details is | 124 // preferences, and if the option to send malware details is |
157 // enabled, the report is scheduled to be sent on the |ui_manager_|. | 125 // enabled, the report is scheduled to be sent on the |ui_manager_|. |
158 void FinishMalwareDetails(int64 delay_ms); | 126 void FinishMalwareDetails(int64 delay_ms); |
159 | 127 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
196 // The list of unsafe resources this page is warning about. | 164 // The list of unsafe resources this page is warning about. |
197 UnsafeResourceList unsafe_resources_; | 165 UnsafeResourceList unsafe_resources_; |
198 | 166 |
199 // A MalwareDetails object that we start generating when the | 167 // A MalwareDetails object that we start generating when the |
200 // blocking page is shown. The object will be sent when the warning | 168 // blocking page is shown. The object will be sent when the warning |
201 // is gone (if the user enables the feature). | 169 // is gone (if the user enables the feature). |
202 scoped_refptr<MalwareDetails> malware_details_; | 170 scoped_refptr<MalwareDetails> malware_details_; |
203 | 171 |
204 bool proceeded_; | 172 bool proceeded_; |
205 | 173 |
206 // Which type of interstitial this is. | 174 // Which type of Safe Browsing interstitial this is. |
207 enum { | 175 enum SBInterstitialReason { |
208 TYPE_MALWARE, | 176 SB_REASON_MALWARE, |
209 TYPE_HARMFUL, | 177 SB_REASON_HARMFUL, |
210 TYPE_PHISHING, | 178 SB_REASON_PHISHING, |
211 } interstitial_type_; | 179 } interstitial_reason_; |
212 | 180 |
213 // The factory used to instantiate SafeBrowsingBlockingPage objects. | 181 // The factory used to instantiate SafeBrowsingBlockingPage objects. |
214 // Usefull for tests, so they can provide their own implementation of | 182 // Usefull for tests, so they can provide their own implementation of |
215 // SafeBrowsingBlockingPage. | 183 // SafeBrowsingBlockingPage. |
216 static SafeBrowsingBlockingPageFactory* factory_; | 184 static SafeBrowsingBlockingPageFactory* factory_; |
217 | 185 |
218 // How many times is this same URL in history? Used for histogramming. | |
219 int num_visits_; | |
220 base::CancelableTaskTracker request_tracker_; | |
221 | |
222 private: | 186 private: |
223 // Fills the passed dictionary with the values to be passed to the template | 187 // Fills the passed dictionary with the values to be passed to the template |
224 // when creating the HTML. | 188 // when creating the HTML. |
225 void PopulateExtendedReportingOption(base::DictionaryValue* load_time_data); | 189 void PopulateExtendedReportingOption(base::DictionaryValue* load_time_data); |
226 void PopulateMalwareLoadTimeData(base::DictionaryValue* load_time_data); | 190 void PopulateMalwareLoadTimeData(base::DictionaryValue* load_time_data); |
227 void PopulateHarmfulLoadTimeData(base::DictionaryValue* load_time_data); | 191 void PopulateHarmfulLoadTimeData(base::DictionaryValue* load_time_data); |
228 void PopulatePhishingLoadTimeData(base::DictionaryValue* load_time_data); | 192 void PopulatePhishingLoadTimeData(base::DictionaryValue* load_time_data); |
229 | 193 |
230 #if defined(ENABLE_EXTENSIONS) | 194 std::string GetHistogramPrefix() const; |
231 scoped_ptr<extensions::ExperienceSamplingEvent> sampling_event_; | 195 std::string GetSamplingEventName() const; |
232 #endif | 196 |
| 197 scoped_ptr<SecurityInterstitialUmaHelper> uma_helper_; |
233 | 198 |
234 DISALLOW_COPY_AND_ASSIGN(SafeBrowsingBlockingPage); | 199 DISALLOW_COPY_AND_ASSIGN(SafeBrowsingBlockingPage); |
235 }; | 200 }; |
236 | 201 |
237 // Factory for creating SafeBrowsingBlockingPage. Useful for tests. | 202 // Factory for creating SafeBrowsingBlockingPage. Useful for tests. |
238 class SafeBrowsingBlockingPageFactory { | 203 class SafeBrowsingBlockingPageFactory { |
239 public: | 204 public: |
240 virtual ~SafeBrowsingBlockingPageFactory() { } | 205 virtual ~SafeBrowsingBlockingPageFactory() { } |
241 | 206 |
242 virtual SafeBrowsingBlockingPage* CreateSafeBrowsingPage( | 207 virtual SafeBrowsingBlockingPage* CreateSafeBrowsingPage( |
243 SafeBrowsingUIManager* ui_manager, | 208 SafeBrowsingUIManager* ui_manager, |
244 content::WebContents* web_contents, | 209 content::WebContents* web_contents, |
245 const SafeBrowsingBlockingPage::UnsafeResourceList& unsafe_resources) = 0; | 210 const SafeBrowsingBlockingPage::UnsafeResourceList& unsafe_resources) = 0; |
246 }; | 211 }; |
247 | 212 |
248 #endif // CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_BLOCKING_PAGE_H_ | 213 #endif // CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_BLOCKING_PAGE_H_ |
OLD | NEW |