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

Side by Side Diff: chrome/browser/net/net_error_tab_helper.h

Issue 13270005: Display DNS probe results. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Don't break DnsProbe histograms Created 7 years, 5 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 (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 #ifndef CHROME_BROWSER_NET_NET_ERROR_TAB_HELPER_H_ 5 #ifndef CHROME_BROWSER_NET_NET_ERROR_TAB_HELPER_H_
6 #define CHROME_BROWSER_NET_NET_ERROR_TAB_HELPER_H_ 6 #define CHROME_BROWSER_NET_NET_ERROR_TAB_HELPER_H_
7 7
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "base/bind.h"
9 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
10 #include "base/memory/weak_ptr.h" 11 #include "base/memory/weak_ptr.h"
11 #include "base/prefs/pref_member.h" 12 #include "base/prefs/pref_member.h"
12 #include "chrome/browser/net/dns_probe_service.h" 13 #include "chrome/browser/net/dns_probe_service.h"
13 #include "chrome/common/net/net_error_info.h" 14 #include "chrome/common/net/net_error_info.h"
14 #include "chrome/common/net/net_error_tracker.h"
15 #include "content/public/browser/web_contents_observer.h" 15 #include "content/public/browser/web_contents_observer.h"
16 #include "content/public/browser/web_contents_user_data.h" 16 #include "content/public/browser/web_contents_user_data.h"
17 17
18 namespace chrome_browser_net { 18 namespace chrome_browser_net {
19 19
20 // A TabHelper that monitors loads for certain types of network errors and 20 // A TabHelper that monitors loads for certain types of network errors and
21 // does interesting things with them. Currently, starts DNS probes using the 21 // does interesting things with them. Currently, starts DNS probes using the
22 // DnsProbeService whenever a page fails to load with a DNS-related error. 22 // DnsProbeService whenever a page fails to load with a DNS-related error.
23 class NetErrorTabHelper 23 class NetErrorTabHelper
24 : public content::WebContentsObserver, 24 : public content::WebContentsObserver,
25 public content::WebContentsUserData<NetErrorTabHelper> { 25 public content::WebContentsUserData<NetErrorTabHelper> {
26 public: 26 public:
27 enum TestingState { 27 enum TestingState {
28 TESTING_DEFAULT, 28 TESTING_DEFAULT,
29 TESTING_FORCE_DISABLED, 29 TESTING_FORCE_DISABLED,
30 TESTING_FORCE_ENABLED 30 TESTING_FORCE_ENABLED
31 }; 31 };
32 32
33 typedef base::Callback<void(chrome_common_net::DnsProbeStatus)>
34 DnsProbeStatusSnoopCallback;
35
33 virtual ~NetErrorTabHelper(); 36 virtual ~NetErrorTabHelper();
34 37
35 static void set_state_for_testing(TestingState testing_state); 38 static void set_state_for_testing(TestingState testing_state);
36 39
40 // Sets a callback that will be called immediately after the helper sends
41 // a NetErrorHelper IPC. (Used by the DNS probe browser test to know when to
42 // check the error page for updates, instead of polling.)
43 void set_dns_probe_status_snoop_callback_for_testing(
44 const DnsProbeStatusSnoopCallback& dns_probe_status_snoop_callback) {
45 dns_probe_status_snoop_callback_ = dns_probe_status_snoop_callback;
46 }
47
37 // content::WebContentsObserver implementation. 48 // content::WebContentsObserver implementation.
38 virtual void DidStartProvisionalLoadForFrame( 49 virtual void DidStartProvisionalLoadForFrame(
39 int64 frame_id, 50 int64 frame_id,
40 int64 parent_frame_id, 51 int64 parent_frame_id,
41 bool is_main_frame, 52 bool is_main_frame,
42 const GURL& validated_url, 53 const GURL& validated_url,
43 bool is_error_page, 54 bool is_error_page,
44 bool is_iframe_srcdoc, 55 bool is_iframe_srcdoc,
45 content::RenderViewHost* render_view_host) OVERRIDE; 56 content::RenderViewHost* render_view_host) OVERRIDE;
46 57
47 virtual void DidCommitProvisionalLoadForFrame( 58 virtual void DidCommitProvisionalLoadForFrame(
48 int64 frame_id, 59 int64 frame_id,
49 bool is_main_frame, 60 bool is_main_frame,
50 const GURL& url, 61 const GURL& url,
51 content::PageTransition transition_type, 62 content::PageTransition transition_type,
52 content::RenderViewHost* render_view_host) OVERRIDE; 63 content::RenderViewHost* render_view_host) OVERRIDE;
53 64
54 virtual void DidFailProvisionalLoad( 65 virtual void DidFailProvisionalLoad(
55 int64 frame_id, 66 int64 frame_id,
56 bool is_main_frame, 67 bool is_main_frame,
57 const GURL& validated_url, 68 const GURL& validated_url,
58 int error_code, 69 int error_code,
59 const string16& error_description, 70 const string16& error_description,
60 content::RenderViewHost* render_view_host) OVERRIDE; 71 content::RenderViewHost* render_view_host) OVERRIDE;
61 72
62 virtual void DidFinishLoad( 73 protected:
63 int64 frame_id, 74 // |contents| is the WebContents of the tab this NetErrorTabHelper is
64 const GURL& validated_url, 75 // attached to.
65 bool is_main_frame, 76 explicit NetErrorTabHelper(content::WebContents* contents);
66 content::RenderViewHost* render_view_host) OVERRIDE; 77 virtual void StartDnsProbe();
78 virtual void SendInfo();
79 void OnDnsProbeFinished(chrome_common_net::DnsProbeStatus result);
80
81 // The status of a DNS probe that may or may not have started or finished.
82 // Since the renderer can change out from under the helper (in cross-process
83 // navigations), it re-sends the status whenever an error page commits.
84 chrome_common_net::DnsProbeStatus dns_probe_status_;
67 85
68 private: 86 private:
69 friend class content::WebContentsUserData<NetErrorTabHelper>; 87 friend class content::WebContentsUserData<NetErrorTabHelper>;
70 88
71 enum DnsProbeState { 89 void OnMainFrameDnsError();
72 DNS_PROBE_NONE,
73 DNS_PROBE_STARTED,
74 DNS_PROBE_FINISHED
75 };
76
77 // |contents| is the WebContents of the tab this NetErrorTabHelper is
78 // attached to.
79 explicit NetErrorTabHelper(content::WebContents* contents);
80
81 void TrackerCallback(NetErrorTracker::DnsErrorPageState state);
82 void MaybePostStartDnsProbeTask();
83 void OnDnsProbeFinished(chrome_common_net::DnsProbeResult result);
84 void MaybeSendInfo();
85 90
86 void InitializePref(content::WebContents* contents); 91 void InitializePref(content::WebContents* contents);
87 bool ProbesAllowed() const; 92 bool ProbesAllowed() const;
88 93
89 base::WeakPtrFactory<NetErrorTabHelper> weak_factory_; 94 base::WeakPtrFactory<NetErrorTabHelper> weak_factory_;
90 95
91 NetErrorTracker tracker_; 96 // True if the last provisional load that started was for an error page.
92 NetErrorTracker::DnsErrorPageState dns_error_page_state_; 97 bool is_error_page_;
93 98
94 DnsProbeState dns_probe_state_; 99 // True if the helper has seen a main frame page load fail with a DNS error,
95 chrome_common_net::DnsProbeResult dns_probe_result_; 100 // but has not yet seen a new page commit successfully afterwards.
101 bool dns_error_active_;
102
103 // True if the helper has seen an error page commit while |dns_error_active_|
104 // is true.
105 bool dns_error_page_committed_;
96 106
97 // Whether we are enabled to run by the DnsProbe-Enable field trial. 107 // Whether we are enabled to run by the DnsProbe-Enable field trial.
98 const bool enabled_by_trial_; 108 const bool enabled_by_trial_;
109
110 // Optional callback for browser test to snoop on outgoing NetErrorInfo IPCs.
111 DnsProbeStatusSnoopCallback dns_probe_status_snoop_callback_;
112
99 // "Use a web service to resolve navigation errors" preference is required 113 // "Use a web service to resolve navigation errors" preference is required
100 // to allow probes. 114 // to allow probes.
101 BooleanPrefMember resolve_errors_with_web_service_; 115 BooleanPrefMember resolve_errors_with_web_service_;
102 116
103 DISALLOW_COPY_AND_ASSIGN(NetErrorTabHelper); 117 DISALLOW_COPY_AND_ASSIGN(NetErrorTabHelper);
104 }; 118 };
105 119
106 } // namespace chrome_browser_net 120 } // namespace chrome_browser_net
107 121
108 #endif // CHROME_BROWSER_NET_NET_ERROR_TAB_HELPER_H_ 122 #endif // CHROME_BROWSER_NET_NET_ERROR_TAB_HELPER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698