Chromium Code Reviews| Index: chrome/browser/net/net_error_tab_helper.cc |
| diff --git a/chrome/browser/net/net_error_tab_helper.cc b/chrome/browser/net/net_error_tab_helper.cc |
| index a5d124e4fcb00824beb930921b44f64424bd2539..3dc94a1d9ce78db0eb21fae8e5af602304c442a8 100644 |
| --- a/chrome/browser/net/net_error_tab_helper.cc |
| +++ b/chrome/browser/net/net_error_tab_helper.cc |
| @@ -18,7 +18,7 @@ |
| #include "net/base/net_errors.h" |
| using base::FieldTrialList; |
| -using chrome_common_net::DnsProbeResult; |
| +using chrome_common_net::DnsProbeStatus; |
| using content::BrowserContext; |
| using content::BrowserThread; |
| using content::PageTransition; |
| @@ -32,9 +32,6 @@ namespace chrome_browser_net { |
| namespace { |
| -const char kDnsProbeFieldTrialName[] = "DnsProbe-Enable"; |
| -const char kDnsProbeFieldTrialEnableGroupName[] = "enable"; |
| - |
| static NetErrorTabHelper::TestingState testing_state_ = |
| NetErrorTabHelper::TESTING_DEFAULT; |
| @@ -45,11 +42,6 @@ bool IsDnsError(int net_error) { |
| net_error == net::ERR_NAME_RESOLUTION_FAILED; |
| } |
| -bool GetEnabledByTrial() { |
| - return (FieldTrialList::FindFullName(kDnsProbeFieldTrialName) |
| - == kDnsProbeFieldTrialEnableGroupName); |
| -} |
| - |
| NetErrorTracker::FrameType GetFrameType(bool is_main_frame) { |
| return is_main_frame ? NetErrorTracker::FRAME_MAIN |
| : NetErrorTracker::FRAME_SUB; |
| @@ -66,12 +58,10 @@ NetErrorTracker::ErrorType GetErrorType(int net_error) { |
| } |
| void OnDnsProbeFinishedOnIOThread( |
| - const base::Callback<void(DnsProbeResult)>& callback, |
| - DnsProbeResult result) { |
| + const base::Callback<void(DnsProbeStatus)>& callback, |
| + DnsProbeStatus result) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| - DVLOG(1) << "DNS probe finished with result " << result; |
| - |
| BrowserThread::PostTask( |
| BrowserThread::UI, |
| FROM_HERE, |
| @@ -81,12 +71,10 @@ void OnDnsProbeFinishedOnIOThread( |
| // We can only access g_browser_process->io_thread() from the browser thread, |
| // so we have to pass it in to the callback instead of dereferencing it here. |
| void StartDnsProbeOnIOThread( |
| - const base::Callback<void(DnsProbeResult)>& callback, |
| + const base::Callback<void(DnsProbeStatus)>& callback, |
| IOThread* io_thread) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| - DVLOG(1) << "Starting DNS probe"; |
| - |
| DnsProbeService* probe_service = |
| io_thread->globals()->dns_probe_service.get(); |
| @@ -159,56 +147,86 @@ NetErrorTabHelper::NetErrorTabHelper(WebContents* contents) |
| weak_factory_.GetWeakPtr()))), |
| dns_error_page_state_(NetErrorTracker::DNS_ERROR_PAGE_NONE), |
| dns_probe_state_(DNS_PROBE_NONE), |
| - enabled_by_trial_(GetEnabledByTrial()) { |
| + enabled_by_trial_(chrome_common_net::DnsProbesEnabledByFieldTrial()) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| InitializePref(contents); |
| } |
| void NetErrorTabHelper::TrackerCallback( |
| - NetErrorTracker::DnsErrorPageState state) { |
| - dns_error_page_state_ = state; |
| + NetErrorTracker::DnsErrorPageState tracker_state) { |
| + DVLOG(1) << "Browser in tracker state " << tracker_state << "."; |
| + |
| + dns_error_page_state_ = tracker_state; |
| MaybePostStartDnsProbeTask(); |
| - MaybeSendInfo(); |
| + MaybeSendStatus(); |
| } |
| void NetErrorTabHelper::MaybePostStartDnsProbeTask() { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| - if (dns_error_page_state_ != NetErrorTracker::DNS_ERROR_PAGE_NONE && |
| - dns_probe_state_ != DNS_PROBE_STARTED && |
| - ProbesAllowed()) { |
| - BrowserThread::PostTask( |
| - BrowserThread::IO, |
| - FROM_HERE, |
| - base::Bind(&StartDnsProbeOnIOThread, |
| - base::Bind(&NetErrorTabHelper::OnDnsProbeFinished, |
| - weak_factory_.GetWeakPtr()), |
| - g_browser_process->io_thread())); |
| - dns_probe_state_ = DNS_PROBE_STARTED; |
| + if (dns_error_page_state_ == NetErrorTracker::DNS_ERROR_PAGE_NONE || |
| + dns_probe_state_ != DNS_PROBE_NONE || |
| + !ProbesAllowed()) { |
| + return; |
| } |
| + |
| + DVLOG(1) << "Starting DNS probe."; |
| + |
| + BrowserThread::PostTask( |
| + BrowserThread::IO, |
| + FROM_HERE, |
| + base::Bind(&StartDnsProbeOnIOThread, |
| + base::Bind(&NetErrorTabHelper::OnDnsProbeFinished, |
| + weak_factory_.GetWeakPtr()), |
| + g_browser_process->io_thread())); |
| + dns_probe_state_ = DNS_PROBE_STARTED; |
| } |
| -void NetErrorTabHelper::OnDnsProbeFinished(DnsProbeResult result) { |
| +void NetErrorTabHelper::OnDnsProbeFinished(DnsProbeStatus result) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| DCHECK_EQ(DNS_PROBE_STARTED, dns_probe_state_); |
| + DVLOG(1) << "Finished DNS probe with result " << result << "."; |
| + |
| dns_probe_result_ = result; |
|
mmenke
2013/04/10 16:56:58
I don't think we gain anything from having |dns_pr
Deprecated (see juliatuttle)
2013/04/10 23:42:32
The state machine is still complicated. We're sim
|
| dns_probe_state_ = DNS_PROBE_FINISHED; |
| - MaybeSendInfo(); |
| + MaybeSendStatus(); |
| } |
| -void NetErrorTabHelper::MaybeSendInfo() { |
| - if (dns_error_page_state_ == NetErrorTracker::DNS_ERROR_PAGE_LOADED && |
| - dns_probe_state_ == DNS_PROBE_FINISHED) { |
| - DVLOG(1) << "Sending result " << dns_probe_result_ << " to renderer"; |
| - Send(new ChromeViewMsg_NetErrorInfo(routing_id(), dns_probe_result_)); |
| +void NetErrorTabHelper::MaybeSendStatus() { |
| + if (dns_error_page_state_ != NetErrorTracker::DNS_ERROR_PAGE_LOADED) |
| + return; |
| + |
| + switch (dns_probe_state_) { |
| + case DNS_PROBE_STARTED: |
| + DVLOG(1) << "Browser sending STARTED."; |
| + SendInfo(chrome_common_net::DNS_PROBE_STARTED); |
| + break; |
| + |
| + case DNS_PROBE_FINISHED: |
| + DVLOG(1) << "Browser sending result " << dns_probe_result_; |
| + SendInfo(dns_probe_result_); |
| dns_probe_state_ = DNS_PROBE_NONE; |
| + break; |
| + |
| + case DNS_PROBE_NONE: |
| + DVLOG(1) << "Browser sending NOT_RUN."; |
| + SendInfo(chrome_common_net::DNS_PROBE_NOT_RUN); |
|
mmenke
2013/04/10 16:56:58
Think sending this on all tracker events is a bit
Deprecated (see juliatuttle)
2013/04/10 23:42:32
We don't. We only send it if the page has just lo
|
| + break; |
| + |
| + default: |
| + NOTREACHED(); |
| } |
| } |
| +void NetErrorTabHelper::SendInfo( |
| + DnsProbeStatus status) { |
| + Send(new ChromeViewMsg_NetErrorInfo(routing_id(), status)); |
| +} |
| + |
| void NetErrorTabHelper::InitializePref(WebContents* contents) { |
| DCHECK(contents); |