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

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: Fix one last nit 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
« no previous file with comments | « chrome/browser/net/dns_probe_test_util.cc ('k') | chrome/browser/net/net_error_tab_helper.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 chrome_common_net::DnsProbeStatus dns_probe_status() const {
82 return dns_probe_status_;
83 }
67 84
68 private: 85 private:
69 friend class content::WebContentsUserData<NetErrorTabHelper>; 86 friend class content::WebContentsUserData<NetErrorTabHelper>;
70 87
71 enum DnsProbeState { 88 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 89
86 void InitializePref(content::WebContents* contents); 90 void InitializePref(content::WebContents* contents);
87 bool ProbesAllowed() const; 91 bool ProbesAllowed() const;
88 92
89 base::WeakPtrFactory<NetErrorTabHelper> weak_factory_; 93 base::WeakPtrFactory<NetErrorTabHelper> weak_factory_;
90 94
91 NetErrorTracker tracker_; 95 // True if the last provisional load that started was for an error page.
92 NetErrorTracker::DnsErrorPageState dns_error_page_state_; 96 bool is_error_page_;
93 97
94 DnsProbeState dns_probe_state_; 98 // True if the helper has seen a main frame page load fail with a DNS error,
95 chrome_common_net::DnsProbeResult dns_probe_result_; 99 // but has not yet seen a new page commit successfully afterwards.
100 bool dns_error_active_;
101
102 // True if the helper has seen an error page commit while |dns_error_active_|
103 // is true. (This should never be true if |dns_error_active_| is false.)
104 bool dns_error_page_committed_;
105
106 // The status of a DNS probe that may or may not have started or finished.
107 // Since the renderer can change out from under the helper (in cross-process
108 // navigations), it re-sends the status whenever an error page commits.
109 chrome_common_net::DnsProbeStatus dns_probe_status_;
96 110
97 // Whether we are enabled to run by the DnsProbe-Enable field trial. 111 // Whether we are enabled to run by the DnsProbe-Enable field trial.
98 const bool enabled_by_trial_; 112 const bool enabled_by_trial_;
113
114 // Optional callback for browser test to snoop on outgoing NetErrorInfo IPCs.
115 DnsProbeStatusSnoopCallback dns_probe_status_snoop_callback_;
116
99 // "Use a web service to resolve navigation errors" preference is required 117 // "Use a web service to resolve navigation errors" preference is required
100 // to allow probes. 118 // to allow probes.
101 BooleanPrefMember resolve_errors_with_web_service_; 119 BooleanPrefMember resolve_errors_with_web_service_;
102 120
103 DISALLOW_COPY_AND_ASSIGN(NetErrorTabHelper); 121 DISALLOW_COPY_AND_ASSIGN(NetErrorTabHelper);
104 }; 122 };
105 123
106 } // namespace chrome_browser_net 124 } // namespace chrome_browser_net
107 125
108 #endif // CHROME_BROWSER_NET_NET_ERROR_TAB_HELPER_H_ 126 #endif // CHROME_BROWSER_NET_NET_ERROR_TAB_HELPER_H_
OLDNEW
« no previous file with comments | « chrome/browser/net/dns_probe_test_util.cc ('k') | chrome/browser/net/net_error_tab_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698