| Index: chrome/browser/net/predictor.cc | 
| diff --git a/chrome/browser/net/predictor.cc b/chrome/browser/net/predictor.cc | 
| index 0ee6a62e861be9e0b8ac36203e4b84b64f066f48..72266b380b2840a4891eb675bc08d1b063f435e1 100644 | 
| --- a/chrome/browser/net/predictor.cc | 
| +++ b/chrome/browser/net/predictor.cc | 
| @@ -312,9 +312,13 @@ std::vector<GURL> Predictor::GetPredictedUrlListAtStartup( | 
|  | 
| void Predictor::DiscardAllResultsAndClearPrefsOnUIThread() { | 
| DCHECK_CURRENTLY_ON(BrowserThread::UI); | 
| -  BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, | 
| -                          base::Bind(&Predictor::DiscardAllResults, | 
| -                                     io_weak_factory_->GetWeakPtr())); | 
| +  // The post task here is guaranteed to execute before the post task in | 
| +  // ShutdownOnUIThread, because the caller has a valid profile here. Note that | 
| +  // the ChromeNetBenchmarkingMessageFilter calls unsafely (an existing bug) | 
| +  // into the profile, but doing so would crash before this point anyways. | 
| +  BrowserThread::PostTask( | 
| +      BrowserThread::IO, FROM_HERE, | 
| +      base::Bind(&Predictor::DiscardAllResults, base::Unretained(this))); | 
| ClearPrefsOnUIThread(); | 
| } | 
|  | 
| @@ -688,11 +692,12 @@ void Predictor::SaveStateForNextStartup() { | 
| base::ListValue* startup_list_raw = startup_list.get(); | 
| base::ListValue* referral_list_raw = referral_list.get(); | 
|  | 
| +  // The first post task here is guaranteed to execute before the post task in | 
| +  // ShutdownOnUIThread, because the caller has a valid profile. | 
| BrowserThread::PostTaskAndReply( | 
| BrowserThread::IO, FROM_HERE, | 
| -      base::Bind(&Predictor::WriteDnsPrefetchState, | 
| -                 io_weak_factory_->GetWeakPtr(), startup_list_raw, | 
| -                 referral_list_raw), | 
| +      base::Bind(&Predictor::WriteDnsPrefetchState, base::Unretained(this), | 
| +                 startup_list_raw, referral_list_raw), | 
| base::Bind(&Predictor::UpdatePrefsOnUIThread, | 
| ui_weak_factory_->GetWeakPtr(), | 
| base::Passed(std::move(startup_list)), | 
|  |