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

Side by Side Diff: chrome/browser/safe_browsing/client_side_detection_host.cc

Issue 7189074: Send the referral URL with the client-side phishing detection request. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Address Brian's comments. Created 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/browser/safe_browsing/client_side_detection_host.h" 5 #include "chrome/browser/safe_browsing/client_side_detection_host.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/ref_counted.h" 10 #include "base/memory/ref_counted.h"
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 IPC_END_MESSAGE_MAP() 283 IPC_END_MESSAGE_MAP()
284 return handled; 284 return handled;
285 } 285 }
286 286
287 void ClientSideDetectionHost::DidNavigateMainFramePostCommit( 287 void ClientSideDetectionHost::DidNavigateMainFramePostCommit(
288 const content::LoadCommittedDetails& details, 288 const content::LoadCommittedDetails& details,
289 const ViewHostMsg_FrameNavigate_Params& params) { 289 const ViewHostMsg_FrameNavigate_Params& params) {
290 // TODO(noelutz): move this DCHECK to TabContents and fix all the unit tests 290 // TODO(noelutz): move this DCHECK to TabContents and fix all the unit tests
291 // that don't call this method on the UI thread. 291 // that don't call this method on the UI thread.
292 // DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 292 // DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
293
294 if (details.is_in_page) { 293 if (details.is_in_page) {
295 // If the navigation is within the same page, the user isn't really 294 // If the navigation is within the same page, the user isn't really
296 // navigating away. We don't need to cancel a pending callback or 295 // navigating away. We don't need to cancel a pending callback or
297 // begin a new classification. 296 // begin a new classification.
298 return; 297 return;
299 } 298 }
300
301 // If we navigate away and there currently is a pending phishing 299 // If we navigate away and there currently is a pending phishing
302 // report request we have to cancel it to make sure we don't display 300 // report request we have to cancel it to make sure we don't display
303 // an interstitial for the wrong page. Note that this won't cancel 301 // an interstitial for the wrong page. Note that this won't cancel
304 // the server ping back but only cancel the showing of the 302 // the server ping back but only cancel the showing of the
305 // interstial. 303 // interstial.
306 cb_factory_.RevokeAll(); 304 cb_factory_.RevokeAll();
307 305
308 if (csd_service_) { 306 if (!csd_service_) {
309 // Cancel any pending classification request. 307 return;
310 if (classification_request_.get()) { 308 }
311 classification_request_->Cancel();
312 }
313 309
314 // Notify the renderer if it should classify this URL. 310 // Cancel any pending classification request.
315 classification_request_ = new ShouldClassifyUrlRequest(params, 311 if (classification_request_.get()) {
316 tab_contents(), 312 classification_request_->Cancel();
317 csd_service_,
318 sb_service_,
319 this);
320 classification_request_->Start();
321 } 313 }
314 browse_info_.reset(new BrowseInfo);
315 browse_info_->url = params.url;
316 browse_info_->referrer = params.referrer;
317 browse_info_->transition = params.transition;
318
319 // Notify the renderer if it should classify this URL.
320 classification_request_ = new ShouldClassifyUrlRequest(params,
321 tab_contents(),
322 csd_service_,
323 sb_service_,
324 this);
325 classification_request_->Start();
322 } 326 }
323 327
324 void ClientSideDetectionHost::TabContentsDestroyed(TabContents* tab) { 328 void ClientSideDetectionHost::TabContentsDestroyed(TabContents* tab) {
325 DCHECK(tab); 329 DCHECK(tab);
326 // Tell any pending classification request that it is being canceled. 330 // Tell any pending classification request that it is being canceled.
327 if (classification_request_.get()) { 331 if (classification_request_.get()) {
328 classification_request_->Cancel(); 332 classification_request_->Cancel();
329 } 333 }
330 // Cancel all pending feature extractions. 334 // Cancel all pending feature extractions.
331 feature_extractor_.reset(); 335 feature_extractor_.reset();
332 } 336 }
333 337
334 void ClientSideDetectionHost::OnDetectedPhishingSite( 338 void ClientSideDetectionHost::OnDetectedPhishingSite(
335 const std::string& verdict_str) { 339 const std::string& verdict_str) {
336 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 340 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
337 // There is something seriously wrong if there is no service class but 341 // There is something seriously wrong if there is no service class but
338 // this method is called. The renderer should not start phishing detection 342 // this method is called. The renderer should not start phishing detection
339 // if there isn't any service class in the browser. 343 // if there isn't any service class in the browser.
340 DCHECK(csd_service_); 344 DCHECK(csd_service_);
345 // There shouldn't be any pending requests because we revoke them everytime
346 // we navigate away.
347 DCHECK(!cb_factory_.HasPendingCallbacks());
348 DCHECK(browse_info_.get());
349
341 // We parse the protocol buffer here. If we're unable to parse it we won't 350 // We parse the protocol buffer here. If we're unable to parse it we won't
342 // send the verdict further. 351 // send the verdict further.
343 scoped_ptr<ClientPhishingRequest> verdict(new ClientPhishingRequest); 352 scoped_ptr<ClientPhishingRequest> verdict(new ClientPhishingRequest);
344 if (csd_service_ && 353 if (csd_service_ &&
354 !cb_factory_.HasPendingCallbacks() &&
355 browse_info_.get() &&
345 verdict->ParseFromString(verdict_str) && 356 verdict->ParseFromString(verdict_str) &&
346 verdict->IsInitialized()) { 357 verdict->IsInitialized()) {
347 // There shouldn't be any pending requests because we revoke them everytime 358 if (browse_info_->url.spec() != verdict->url()) {
348 // we navigate away. 359 // I'm not sure we can DCHECK on this one so we keep stats around to see
349 DCHECK(!cb_factory_.HasPendingCallbacks()); 360 // whether this actually happens in practice.
350 361 UMA_HISTOGRAM_COUNTS("SBClientPhishing.BrowserRendererUrlMismatch", 1);
362 VLOG(2) << "Browser and renderer URL do not match: "
363 << browse_info_->url.spec() << " vs. " << verdict->url();
364 }
351 // Start browser-side feature extraction. Once we're done it will send 365 // Start browser-side feature extraction. Once we're done it will send
352 // the client verdict request. 366 // the client verdict request.
353 feature_extractor_->ExtractFeatures( 367 feature_extractor_->ExtractFeatures(
368 *browse_info_,
354 verdict.release(), 369 verdict.release(),
355 NewCallback(this, &ClientSideDetectionHost::FeatureExtractionDone)); 370 NewCallback(this, &ClientSideDetectionHost::FeatureExtractionDone));
356 } 371 }
372 browse_info_.reset();
357 } 373 }
358 374
359 void ClientSideDetectionHost::MaybeShowPhishingWarning(GURL phishing_url, 375 void ClientSideDetectionHost::MaybeShowPhishingWarning(GURL phishing_url,
360 bool is_phishing) { 376 bool is_phishing) {
361 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 377 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
362 VLOG(2) << "Received server phishing verdict for URL:" << phishing_url 378 VLOG(2) << "Received server phishing verdict for URL:" << phishing_url
363 << " is_phishing:" << is_phishing; 379 << " is_phishing:" << is_phishing;
364 if (is_phishing) { 380 if (is_phishing) {
365 DCHECK(tab_contents()); 381 DCHECK(tab_contents());
366 if (sb_service_) { 382 if (sb_service_) {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
404 ClientSideDetectionService* service) { 420 ClientSideDetectionService* service) {
405 csd_service_ = service; 421 csd_service_ = service;
406 } 422 }
407 423
408 void ClientSideDetectionHost::set_safe_browsing_service( 424 void ClientSideDetectionHost::set_safe_browsing_service(
409 SafeBrowsingService* service) { 425 SafeBrowsingService* service) {
410 sb_service_ = service; 426 sb_service_ = service;
411 } 427 }
412 428
413 } // namespace safe_browsing 429 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698