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

Side by Side Diff: components/safe_browsing/base_ui_manager.cc

Issue 2623733002: Componentize SafeBrowsingBlockingPage for WebView use (Closed)
Patch Set: 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 unified diff | Download patch
OLDNEW
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 #include "components/safe_browsing/base_ui_manager.h" 5 #include "components/safe_browsing/base_ui_manager.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/macros.h" 9 #include "base/i18n/rtl.h"
10 #include "base/metrics/histogram_macros.h"
11 #include "base/supports_user_data.h"
12 #include "components/safe_browsing/base_safe_browsing_blocking_page.h"
13 #include "components/safe_browsing_db/metadata.pb.h"
10 #include "content/public/browser/browser_thread.h" 14 #include "content/public/browser/browser_thread.h"
11 #include "content/public/browser/navigation_entry.h" 15 #include "content/public/browser/navigation_entry.h"
12 #include "content/public/browser/web_contents.h" 16 #include "content/public/browser/web_contents.h"
13 17
14 using content::BrowserThread; 18 using content::BrowserThread;
15 using content::NavigationEntry; 19 using content::NavigationEntry;
16 using content::WebContents; 20 using content::WebContents;
17 using safe_browsing::HitReport; 21 using safe_browsing::HitReport;
18 using safe_browsing::SBThreatType; 22 using safe_browsing::SBThreatType;
19 23
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 return site_list; 92 return site_list;
89 } 93 }
90 94
91 } // namespace 95 } // namespace
92 96
93 namespace safe_browsing { 97 namespace safe_browsing {
94 98
95 BaseSafeBrowsingUIManager::BaseSafeBrowsingUIManager() {} 99 BaseSafeBrowsingUIManager::BaseSafeBrowsingUIManager() {}
96 100
97 void BaseSafeBrowsingUIManager::StopOnIOThread(bool shutdown) { 101 void BaseSafeBrowsingUIManager::StopOnIOThread(bool shutdown) {
102 LOG(ERROR) << "This should not be called";
98 DCHECK_CURRENTLY_ON(BrowserThread::IO); 103 DCHECK_CURRENTLY_ON(BrowserThread::IO);
99 // TODO(ntfschr): implement this once SafeBrowsingService is componentized 104 // TODO(ntfschr): implement this once SafeBrowsingService is componentized
100 return; 105 return;
101 } 106 }
102 107
103 BaseSafeBrowsingUIManager::~BaseSafeBrowsingUIManager() {} 108 BaseSafeBrowsingUIManager::~BaseSafeBrowsingUIManager() {}
104 109
105 bool BaseSafeBrowsingUIManager::IsWhitelisted(const UnsafeResource& resource) { 110 bool BaseSafeBrowsingUIManager::IsWhitelisted(const UnsafeResource& resource) {
106 NavigationEntry* entry = nullptr; 111 NavigationEntry* entry = nullptr;
107 if (resource.is_subresource) { 112 if (resource.is_subresource) {
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 resource.threat_type); 168 resource.threat_type);
164 } else if (web_contents) { 169 } else if (web_contents) {
165 // |web_contents| doesn't exist if the tab has been closed. 170 // |web_contents| doesn't exist if the tab has been closed.
166 RemoveFromPendingWhitelistUrlSet(whitelist_url, web_contents); 171 RemoveFromPendingWhitelistUrlSet(whitelist_url, web_contents);
167 } 172 }
168 } 173 }
169 } 174 }
170 175
171 void BaseSafeBrowsingUIManager::DisplayBlockingPage( 176 void BaseSafeBrowsingUIManager::DisplayBlockingPage(
172 const UnsafeResource& resource) { 177 const UnsafeResource& resource) {
178 LOG(ERROR) << "This should not be called: "
Nate Fischer 2017/01/10 01:21:29 Why is this log here?
Jialiu Lin 2017/01/10 01:54:29 Oops, for my local testing use. should not be here
179 "BaseSafeBrowsingUIManager::DisplayBlockingPage";
173 DCHECK_CURRENTLY_ON(BrowserThread::UI); 180 DCHECK_CURRENTLY_ON(BrowserThread::UI);
174 // TODO(ntfschr): implement this once SafeBrowsingBlockingPage is 181 if (resource.is_subresource && !resource.is_subframe) {
175 // componentized 182 // Sites tagged as serving Unwanted Software should only show a warning for
176 return; 183 // main-frame or sub-frame resource. Similar warning restrictions should be
184 // applied to malware sites tagged as "landing sites" (see "Types of
185 // Malware sites" under
186 // https://developers.google.com/safe-browsing/developers_guide_v3#UserWarni ngs).
187 MalwarePatternType proto;
188 if (resource.threat_type == SB_THREAT_TYPE_URL_UNWANTED ||
189 (resource.threat_type == SB_THREAT_TYPE_URL_MALWARE &&
190 resource.threat_metadata.threat_pattern_type ==
191 ThreatPatternType::MALWARE_LANDING)) {
192 if (!resource.callback.is_null()) {
193 DCHECK(resource.callback_thread);
194 resource.callback_thread->PostTask(FROM_HERE,
195 base::Bind(resource.callback, true));
196 }
197
198 return;
199 }
200 }
201
202 // The tab might have been closed. If it was closed, just act as if "Don't
203 // Proceed" had been chosen.
204 WebContents* web_contents = resource.web_contents_getter.Run();
205 if (!web_contents) {
206 std::vector<UnsafeResource> resources;
207 resources.push_back(resource);
208 OnBlockingPageDone(resources, false, web_contents,
209 GetMainFrameWhitelistUrlForResource(resource));
210 return;
211 }
212
213 // Check if the user has already ignored a SB warning for the same WebContents
214 // and top-level domain.
215 if (IsWhitelisted(resource)) {
216 if (!resource.callback.is_null()) {
217 DCHECK(resource.callback_thread);
218 resource.callback_thread->PostTask(FROM_HERE,
219 base::Bind(resource.callback, true));
220 }
221 return;
222 }
223
224 // TODO(jialiul): BaseUIManager currently don't send HitReport.
225
226 AddToWhitelistUrlSet(GetMainFrameWhitelistUrlForResource(resource),
227 resource.web_contents_getter.Run(),
228 true /* A decision is now pending */,
229 resource.threat_type);
230 BaseSafeBrowsingBlockingPage::ShowBlockingPage(this, resource);
177 } 231 }
178 232
179 void BaseSafeBrowsingUIManager::EnsureWhitelistCreated( 233 void BaseSafeBrowsingUIManager::EnsureWhitelistCreated(
180 WebContents* web_contents) { 234 WebContents* web_contents) {
181 GetOrCreateWhitelist(web_contents); 235 GetOrCreateWhitelist(web_contents);
182 } 236 }
183 237
184 void BaseSafeBrowsingUIManager::LogPauseDelay(base::TimeDelta time) { 238 void BaseSafeBrowsingUIManager::LogPauseDelay(base::TimeDelta time) {
239 UMA_HISTOGRAM_LONG_TIMES("SB2.Delay", time);
185 return; 240 return;
186 } 241 }
187 242
188 // A safebrowsing hit is sent after a blocking page for malware/phishing 243 // A safebrowsing hit is sent after a blocking page for malware/phishing
189 // or after the warning dialog for download urls, only for 244 // or after the warning dialog for download urls, only for
190 // UMA || extended_reporting users. 245 // UMA || extended_reporting users.
191 void BaseSafeBrowsingUIManager::MaybeReportSafeBrowsingHit( 246 void BaseSafeBrowsingUIManager::MaybeReportSafeBrowsingHit(
192 const HitReport& hit_report) { 247 const HitReport& hit_report) {
248 LOG(ERROR) << "This should not be called: "
249 "BaseSafeBrowsingUIManager::MaybeReportSafeBrowsingHit";
193 DCHECK_CURRENTLY_ON(BrowserThread::UI); 250 DCHECK_CURRENTLY_ON(BrowserThread::UI);
194 // TODO(ntfschr): implement this once we support reporting in WebView 251 // TODO(ntfschr): implement this once we support reporting in WebView
195 return; 252 return;
196 } 253 }
197 254
198 void BaseSafeBrowsingUIManager::ReportSafeBrowsingHitOnIOThread( 255 void BaseSafeBrowsingUIManager::ReportSafeBrowsingHitOnIOThread(
199 const HitReport& hit_report) { 256 const HitReport& hit_report) {
200 DCHECK_CURRENTLY_ON(BrowserThread::IO); 257 DCHECK_CURRENTLY_ON(BrowserThread::IO);
201 // TODO(ntfschr): implement this once we support reporting in WebView 258 // TODO(ntfschr): implement this once we support reporting in WebView
202 return; 259 return;
(...skipping 29 matching lines...) Expand all
232 if (pending) { 289 if (pending) {
233 site_list->InsertPending(whitelist_url, threat_type); 290 site_list->InsertPending(whitelist_url, threat_type);
234 } else { 291 } else {
235 site_list->Insert(whitelist_url, threat_type); 292 site_list->Insert(whitelist_url, threat_type);
236 } 293 }
237 294
238 // Notify security UI that security state has changed. 295 // Notify security UI that security state has changed.
239 web_contents->DidChangeVisibleSecurityState(); 296 web_contents->DidChangeVisibleSecurityState();
240 } 297 }
241 298
242 void BaseSafeBrowsingUIManager::AddObserver(Observer* observer) { 299 const std::string BaseSafeBrowsingUIManager::app_locale() {
243 DCHECK_CURRENTLY_ON(BrowserThread::UI); 300 return base::i18n::GetConfiguredLocale();
244 observer_list_.AddObserver(observer);
245 } 301 }
246 302
247 void BaseSafeBrowsingUIManager::RemoveObserver(Observer* observer) { 303 history::HistoryService* BaseSafeBrowsingUIManager::history_service(
248 DCHECK_CURRENTLY_ON(BrowserThread::UI); 304 content::WebContents* web_contents) {
249 observer_list_.RemoveObserver(observer); 305 // TODO(jialiul): figure out how to get HistoryService from webview.
306 return nullptr;
307 }
308
309 const GURL BaseSafeBrowsingUIManager::default_safe_page() {
310 return GURL(url::kAboutBlankURL);
250 } 311 }
251 312
252 void BaseSafeBrowsingUIManager::RemoveFromPendingWhitelistUrlSet( 313 void BaseSafeBrowsingUIManager::RemoveFromPendingWhitelistUrlSet(
253 const GURL& whitelist_url, 314 const GURL& whitelist_url,
254 WebContents* web_contents) { 315 WebContents* web_contents) {
255 DCHECK_CURRENTLY_ON(BrowserThread::UI); 316 DCHECK_CURRENTLY_ON(BrowserThread::UI);
256 317
257 // A WebContents might not exist if the tab has been closed. 318 // A WebContents might not exist if the tab has been closed.
258 if (!web_contents) 319 if (!web_contents)
259 return; 320 return;
(...skipping 19 matching lines...) Expand all
279 // remove the main-frame URL from the pending whitelist, so the 340 // remove the main-frame URL from the pending whitelist, so the
280 // main-frame URL will have already been removed when the subsequent 341 // main-frame URL will have already been removed when the subsequent
281 // blocking pages are dismissed. 342 // blocking pages are dismissed.
282 if (site_list->ContainsPending(whitelist_url, nullptr)) 343 if (site_list->ContainsPending(whitelist_url, nullptr))
283 site_list->RemovePending(whitelist_url); 344 site_list->RemovePending(whitelist_url);
284 345
285 // Notify security UI that security state has changed. 346 // Notify security UI that security state has changed.
286 web_contents->DidChangeVisibleSecurityState(); 347 web_contents->DidChangeVisibleSecurityState();
287 } 348 }
288 349
350 // static
351 GURL BaseSafeBrowsingUIManager::GetMainFrameWhitelistUrlForResource(
352 const security_interstitials::UnsafeResource& resource) {
353 if (resource.is_subresource) {
354 NavigationEntry* entry = resource.GetNavigationEntryForResource();
355 if (!entry)
356 return GURL();
357 return entry->GetURL().GetWithEmptyPath();
358 }
359 return resource.url.GetWithEmptyPath();
360 }
361
289 } // namespace safe_browsing 362 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698