| 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 #include "chrome/browser/safe_browsing/safe_browsing_service.h" | 5 #include "chrome/browser/safe_browsing/safe_browsing_service.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 SafeBrowsingService* sb_service) | 128 SafeBrowsingService* sb_service) |
| 129 : sb_service_(sb_service), | 129 : sb_service_(sb_service), |
| 130 network_task_runner_( | 130 network_task_runner_( |
| 131 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO)) { | 131 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO)) { |
| 132 } | 132 } |
| 133 | 133 |
| 134 SafeBrowsingURLRequestContextGetter::~SafeBrowsingURLRequestContextGetter() {} | 134 SafeBrowsingURLRequestContextGetter::~SafeBrowsingURLRequestContextGetter() {} |
| 135 | 135 |
| 136 net::URLRequestContext* | 136 net::URLRequestContext* |
| 137 SafeBrowsingURLRequestContextGetter::GetURLRequestContext() { | 137 SafeBrowsingURLRequestContextGetter::GetURLRequestContext() { |
| 138 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 138 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 139 DCHECK(sb_service_->url_request_context_.get()); | 139 DCHECK(sb_service_->url_request_context_.get()); |
| 140 | 140 |
| 141 return sb_service_->url_request_context_.get(); | 141 return sb_service_->url_request_context_.get(); |
| 142 } | 142 } |
| 143 | 143 |
| 144 scoped_refptr<base::SingleThreadTaskRunner> | 144 scoped_refptr<base::SingleThreadTaskRunner> |
| 145 SafeBrowsingURLRequestContextGetter::GetNetworkTaskRunner() const { | 145 SafeBrowsingURLRequestContextGetter::GetNetworkTaskRunner() const { |
| 146 return network_task_runner_; | 146 return network_task_runner_; |
| 147 } | 147 } |
| 148 | 148 |
| (...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 295 | 295 |
| 296 url_request_context_getter_ = NULL; | 296 url_request_context_getter_ = NULL; |
| 297 BrowserThread::PostNonNestableTask( | 297 BrowserThread::PostNonNestableTask( |
| 298 BrowserThread::IO, FROM_HERE, | 298 BrowserThread::IO, FROM_HERE, |
| 299 base::Bind(&SafeBrowsingService::DestroyURLRequestContextOnIOThread, | 299 base::Bind(&SafeBrowsingService::DestroyURLRequestContextOnIOThread, |
| 300 this)); | 300 this)); |
| 301 } | 301 } |
| 302 | 302 |
| 303 // Binhash verification is only enabled for UMA users for now. | 303 // Binhash verification is only enabled for UMA users for now. |
| 304 bool SafeBrowsingService::DownloadBinHashNeeded() const { | 304 bool SafeBrowsingService::DownloadBinHashNeeded() const { |
| 305 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 305 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 306 | 306 |
| 307 #if defined(FULL_SAFE_BROWSING) | 307 #if defined(FULL_SAFE_BROWSING) |
| 308 return (database_manager_->download_protection_enabled() && | 308 return (database_manager_->download_protection_enabled() && |
| 309 ui_manager_->CanReportStats()) || | 309 ui_manager_->CanReportStats()) || |
| 310 (download_protection_service() && | 310 (download_protection_service() && |
| 311 download_protection_service()->enabled()); | 311 download_protection_service()->enabled()); |
| 312 #else | 312 #else |
| 313 return false; | 313 return false; |
| 314 #endif | 314 #endif |
| 315 } | 315 } |
| 316 | 316 |
| 317 net::URLRequestContextGetter* SafeBrowsingService::url_request_context() { | 317 net::URLRequestContextGetter* SafeBrowsingService::url_request_context() { |
| 318 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 318 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 319 return url_request_context_getter_.get(); | 319 return url_request_context_getter_.get(); |
| 320 } | 320 } |
| 321 | 321 |
| 322 const scoped_refptr<SafeBrowsingUIManager>& | 322 const scoped_refptr<SafeBrowsingUIManager>& |
| 323 SafeBrowsingService::ui_manager() const { | 323 SafeBrowsingService::ui_manager() const { |
| 324 return ui_manager_; | 324 return ui_manager_; |
| 325 } | 325 } |
| 326 | 326 |
| 327 const scoped_refptr<SafeBrowsingDatabaseManager>& | 327 const scoped_refptr<SafeBrowsingDatabaseManager>& |
| 328 SafeBrowsingService::database_manager() const { | 328 SafeBrowsingService::database_manager() const { |
| 329 return database_manager_; | 329 return database_manager_; |
| 330 } | 330 } |
| 331 | 331 |
| 332 SafeBrowsingProtocolManager* SafeBrowsingService::protocol_manager() const { | 332 SafeBrowsingProtocolManager* SafeBrowsingService::protocol_manager() const { |
| 333 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 333 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 334 return protocol_manager_; | 334 return protocol_manager_; |
| 335 } | 335 } |
| 336 | 336 |
| 337 SafeBrowsingPingManager* SafeBrowsingService::ping_manager() const { | 337 SafeBrowsingPingManager* SafeBrowsingService::ping_manager() const { |
| 338 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 338 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 339 return ping_manager_; | 339 return ping_manager_; |
| 340 } | 340 } |
| 341 | 341 |
| 342 scoped_ptr<TrackedPreferenceValidationDelegate> | 342 scoped_ptr<TrackedPreferenceValidationDelegate> |
| 343 SafeBrowsingService::CreatePreferenceValidationDelegate( | 343 SafeBrowsingService::CreatePreferenceValidationDelegate( |
| 344 Profile* profile) const { | 344 Profile* profile) const { |
| 345 #if defined(FULL_SAFE_BROWSING) | 345 #if defined(FULL_SAFE_BROWSING) |
| 346 if (incident_service_) | 346 if (incident_service_) |
| 347 return incident_service_->CreatePreferenceValidationDelegate(profile); | 347 return incident_service_->CreatePreferenceValidationDelegate(profile); |
| 348 #endif | 348 #endif |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 395 NOTREACHED(); | 395 NOTREACHED(); |
| 396 #endif | 396 #endif |
| 397 } | 397 } |
| 398 | 398 |
| 399 void SafeBrowsingService::InitURLRequestContextOnIOThread( | 399 void SafeBrowsingService::InitURLRequestContextOnIOThread( |
| 400 net::URLRequestContextGetter* system_url_request_context_getter) { | 400 net::URLRequestContextGetter* system_url_request_context_getter) { |
| 401 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455469 is fixed. | 401 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455469 is fixed. |
| 402 tracked_objects::ScopedTracker tracking_profile1( | 402 tracked_objects::ScopedTracker tracking_profile1( |
| 403 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 403 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 404 "455469 SafeBrowsingService::InitURLRequestContextOnIOThread 1")); | 404 "455469 SafeBrowsingService::InitURLRequestContextOnIOThread 1")); |
| 405 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 405 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 406 DCHECK(!url_request_context_.get()); | 406 DCHECK(!url_request_context_.get()); |
| 407 | 407 |
| 408 scoped_refptr<net::CookieStore> cookie_store( | 408 scoped_refptr<net::CookieStore> cookie_store( |
| 409 content::CreateCookieStore( | 409 content::CreateCookieStore( |
| 410 content::CookieStoreConfig( | 410 content::CookieStoreConfig( |
| 411 CookieFilePath(), | 411 CookieFilePath(), |
| 412 content::CookieStoreConfig::EPHEMERAL_SESSION_COOKIES, | 412 content::CookieStoreConfig::EPHEMERAL_SESSION_COOKIES, |
| 413 NULL, | 413 NULL, |
| 414 NULL))); | 414 NULL))); |
| 415 | 415 |
| 416 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455469 is fixed. | 416 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455469 is fixed. |
| 417 tracked_objects::ScopedTracker tracking_profile2( | 417 tracked_objects::ScopedTracker tracking_profile2( |
| 418 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 418 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 419 "455469 SafeBrowsingService::InitURLRequestContextOnIOThread 2")); | 419 "455469 SafeBrowsingService::InitURLRequestContextOnIOThread 2")); |
| 420 url_request_context_.reset(new net::URLRequestContext); | 420 url_request_context_.reset(new net::URLRequestContext); |
| 421 // |system_url_request_context_getter| may be NULL during tests. | 421 // |system_url_request_context_getter| may be NULL during tests. |
| 422 if (system_url_request_context_getter) { | 422 if (system_url_request_context_getter) { |
| 423 url_request_context_->CopyFrom( | 423 url_request_context_->CopyFrom( |
| 424 system_url_request_context_getter->GetURLRequestContext()); | 424 system_url_request_context_getter->GetURLRequestContext()); |
| 425 } | 425 } |
| 426 url_request_context_->set_cookie_store(cookie_store.get()); | 426 url_request_context_->set_cookie_store(cookie_store.get()); |
| 427 } | 427 } |
| 428 | 428 |
| 429 void SafeBrowsingService::DestroyURLRequestContextOnIOThread() { | 429 void SafeBrowsingService::DestroyURLRequestContextOnIOThread() { |
| 430 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 430 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 431 | 431 |
| 432 url_request_context_->AssertNoURLRequests(); | 432 url_request_context_->AssertNoURLRequests(); |
| 433 | 433 |
| 434 // Need to do the CheckForLeaks on IOThread instead of in ShutDown where | 434 // Need to do the CheckForLeaks on IOThread instead of in ShutDown where |
| 435 // url_request_context_getter_ is cleared, since the URLRequestContextGetter | 435 // url_request_context_getter_ is cleared, since the URLRequestContextGetter |
| 436 // will PostTask to IOTread to delete itself. | 436 // will PostTask to IOTread to delete itself. |
| 437 using base::debug::LeakTracker; | 437 using base::debug::LeakTracker; |
| 438 LeakTracker<SafeBrowsingURLRequestContextGetter>::CheckForLeaks(); | 438 LeakTracker<SafeBrowsingURLRequestContextGetter>::CheckForLeaks(); |
| 439 | 439 |
| 440 url_request_context_.reset(); | 440 url_request_context_.reset(); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 474 | 474 |
| 475 return config; | 475 return config; |
| 476 } | 476 } |
| 477 | 477 |
| 478 void SafeBrowsingService::StartOnIOThread( | 478 void SafeBrowsingService::StartOnIOThread( |
| 479 net::URLRequestContextGetter* url_request_context_getter) { | 479 net::URLRequestContextGetter* url_request_context_getter) { |
| 480 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455469 is fixed. | 480 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455469 is fixed. |
| 481 tracked_objects::ScopedTracker tracking_profile1( | 481 tracked_objects::ScopedTracker tracking_profile1( |
| 482 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 482 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 483 "455469 SafeBrowsingService::StartOnIOThread 1")); | 483 "455469 SafeBrowsingService::StartOnIOThread 1")); |
| 484 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 484 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 485 if (enabled_) | 485 if (enabled_) |
| 486 return; | 486 return; |
| 487 enabled_ = true; | 487 enabled_ = true; |
| 488 | 488 |
| 489 SafeBrowsingProtocolConfig config = GetProtocolConfig(); | 489 SafeBrowsingProtocolConfig config = GetProtocolConfig(); |
| 490 | 490 |
| 491 #if defined(SAFE_BROWSING_DB_LOCAL) | 491 #if defined(SAFE_BROWSING_DB_LOCAL) |
| 492 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455469 is fixed. | 492 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455469 is fixed. |
| 493 tracked_objects::ScopedTracker tracking_profile2( | 493 tracked_objects::ScopedTracker tracking_profile2( |
| 494 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 494 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| (...skipping 15 matching lines...) Expand all Loading... |
| 510 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455469 is fixed. | 510 // TODO(pkasting): Remove ScopedTracker below once crbug.com/455469 is fixed. |
| 511 tracked_objects::ScopedTracker tracking_profile4( | 511 tracked_objects::ScopedTracker tracking_profile4( |
| 512 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 512 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
| 513 "455469 SafeBrowsingService::StartOnIOThread 4")); | 513 "455469 SafeBrowsingService::StartOnIOThread 4")); |
| 514 DCHECK(!ping_manager_); | 514 DCHECK(!ping_manager_); |
| 515 ping_manager_ = SafeBrowsingPingManager::Create( | 515 ping_manager_ = SafeBrowsingPingManager::Create( |
| 516 url_request_context_getter, config); | 516 url_request_context_getter, config); |
| 517 } | 517 } |
| 518 | 518 |
| 519 void SafeBrowsingService::StopOnIOThread(bool shutdown) { | 519 void SafeBrowsingService::StopOnIOThread(bool shutdown) { |
| 520 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 520 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 521 | 521 |
| 522 #if defined(SAFE_BROWSING_DB_LOCAL) | 522 #if defined(SAFE_BROWSING_DB_LOCAL) |
| 523 database_manager_->StopOnIOThread(shutdown); | 523 database_manager_->StopOnIOThread(shutdown); |
| 524 #endif | 524 #endif |
| 525 ui_manager_->StopOnIOThread(shutdown); | 525 ui_manager_->StopOnIOThread(shutdown); |
| 526 | 526 |
| 527 if (enabled_) { | 527 if (enabled_) { |
| 528 enabled_ = false; | 528 enabled_ = false; |
| 529 | 529 |
| 530 #if defined(SAFE_BROWSING_DB_LOCAL) | 530 #if defined(SAFE_BROWSING_DB_LOCAL) |
| 531 // This cancels all in-flight GetHash requests. Note that database_manager_ | 531 // This cancels all in-flight GetHash requests. Note that database_manager_ |
| 532 // relies on the protocol_manager_ so if the latter is destroyed, the | 532 // relies on the protocol_manager_ so if the latter is destroyed, the |
| 533 // former must be stopped. | 533 // former must be stopped. |
| 534 delete protocol_manager_; | 534 delete protocol_manager_; |
| 535 protocol_manager_ = NULL; | 535 protocol_manager_ = NULL; |
| 536 #endif | 536 #endif |
| 537 delete ping_manager_; | 537 delete ping_manager_; |
| 538 ping_manager_ = NULL; | 538 ping_manager_ = NULL; |
| 539 } | 539 } |
| 540 } | 540 } |
| 541 | 541 |
| 542 void SafeBrowsingService::Start() { | 542 void SafeBrowsingService::Start() { |
| 543 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 543 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 544 | 544 |
| 545 BrowserThread::PostTask( | 545 BrowserThread::PostTask( |
| 546 BrowserThread::IO, FROM_HERE, | 546 BrowserThread::IO, FROM_HERE, |
| 547 base::Bind(&SafeBrowsingService::StartOnIOThread, this, | 547 base::Bind(&SafeBrowsingService::StartOnIOThread, this, |
| 548 url_request_context_getter_)); | 548 url_request_context_getter_)); |
| 549 } | 549 } |
| 550 | 550 |
| 551 void SafeBrowsingService::Stop(bool shutdown) { | 551 void SafeBrowsingService::Stop(bool shutdown) { |
| 552 BrowserThread::PostTask( | 552 BrowserThread::PostTask( |
| 553 BrowserThread::IO, FROM_HERE, | 553 BrowserThread::IO, FROM_HERE, |
| 554 base::Bind(&SafeBrowsingService::StopOnIOThread, this, shutdown)); | 554 base::Bind(&SafeBrowsingService::StopOnIOThread, this, shutdown)); |
| 555 } | 555 } |
| 556 | 556 |
| 557 void SafeBrowsingService::Observe(int type, | 557 void SafeBrowsingService::Observe(int type, |
| 558 const content::NotificationSource& source, | 558 const content::NotificationSource& source, |
| 559 const content::NotificationDetails& details) { | 559 const content::NotificationDetails& details) { |
| 560 switch (type) { | 560 switch (type) { |
| 561 case chrome::NOTIFICATION_PROFILE_CREATED: { | 561 case chrome::NOTIFICATION_PROFILE_CREATED: { |
| 562 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 562 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 563 Profile* profile = content::Source<Profile>(source).ptr(); | 563 Profile* profile = content::Source<Profile>(source).ptr(); |
| 564 if (!profile->IsOffTheRecord()) | 564 if (!profile->IsOffTheRecord()) |
| 565 AddPrefService(profile->GetPrefs()); | 565 AddPrefService(profile->GetPrefs()); |
| 566 break; | 566 break; |
| 567 } | 567 } |
| 568 case chrome::NOTIFICATION_PROFILE_DESTROYED: { | 568 case chrome::NOTIFICATION_PROFILE_DESTROYED: { |
| 569 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 569 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 570 Profile* profile = content::Source<Profile>(source).ptr(); | 570 Profile* profile = content::Source<Profile>(source).ptr(); |
| 571 if (!profile->IsOffTheRecord()) | 571 if (!profile->IsOffTheRecord()) |
| 572 RemovePrefService(profile->GetPrefs()); | 572 RemovePrefService(profile->GetPrefs()); |
| 573 break; | 573 break; |
| 574 } | 574 } |
| 575 default: | 575 default: |
| 576 NOTREACHED(); | 576 NOTREACHED(); |
| 577 } | 577 } |
| 578 } | 578 } |
| 579 | 579 |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 619 else | 619 else |
| 620 Stop(false); | 620 Stop(false); |
| 621 | 621 |
| 622 #if defined(FULL_SAFE_BROWSING) | 622 #if defined(FULL_SAFE_BROWSING) |
| 623 if (csd_service_) | 623 if (csd_service_) |
| 624 csd_service_->SetEnabledAndRefreshState(enable); | 624 csd_service_->SetEnabledAndRefreshState(enable); |
| 625 if (download_service_) | 625 if (download_service_) |
| 626 download_service_->SetEnabled(enable); | 626 download_service_->SetEnabled(enable); |
| 627 #endif | 627 #endif |
| 628 } | 628 } |
| OLD | NEW |