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

Side by Side Diff: chrome/renderer/net/net_error_helper.cc

Issue 137463002: RenderFrame: flesh out Observer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkgr
Patch Set: More fixes Created 6 years, 10 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/renderer/net/net_error_helper.h ('k') | content/public/renderer/render_frame_observer.h » ('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) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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/renderer/net/net_error_helper.h" 5 #include "chrome/renderer/net/net_error_helper.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/json/json_writer.h" 9 #include "base/json/json_writer.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
11 #include "base/strings/utf_string_conversions.h" 11 #include "base/strings/utf_string_conversions.h"
12 #include "base/values.h" 12 #include "base/values.h"
13 #include "chrome/common/localized_error.h" 13 #include "chrome/common/localized_error.h"
14 #include "chrome/common/net/net_error_info.h" 14 #include "chrome/common/net/net_error_info.h"
15 #include "chrome/common/render_messages.h" 15 #include "chrome/common/render_messages.h"
16 #include "content/public/common/content_client.h" 16 #include "content/public/common/content_client.h"
17 #include "content/public/common/url_constants.h" 17 #include "content/public/common/url_constants.h"
18 #include "content/public/renderer/content_renderer_client.h" 18 #include "content/public/renderer/content_renderer_client.h"
19 #include "content/public/renderer/render_frame.h"
19 #include "content/public/renderer/render_thread.h" 20 #include "content/public/renderer/render_thread.h"
20 #include "content/public/renderer/render_view.h" 21 #include "content/public/renderer/render_view.h"
21 #include "content/public/renderer/resource_fetcher.h" 22 #include "content/public/renderer/resource_fetcher.h"
22 #include "grit/renderer_resources.h" 23 #include "grit/renderer_resources.h"
23 #include "ipc/ipc_message.h" 24 #include "ipc/ipc_message.h"
24 #include "ipc/ipc_message_macros.h" 25 #include "ipc/ipc_message_macros.h"
25 #include "third_party/WebKit/public/platform/WebURL.h" 26 #include "third_party/WebKit/public/platform/WebURL.h"
26 #include "third_party/WebKit/public/platform/WebURLError.h" 27 #include "third_party/WebKit/public/platform/WebURLError.h"
27 #include "third_party/WebKit/public/platform/WebURLRequest.h" 28 #include "third_party/WebKit/public/platform/WebURLRequest.h"
28 #include "third_party/WebKit/public/platform/WebURLResponse.h" 29 #include "third_party/WebKit/public/platform/WebURLResponse.h"
29 #include "third_party/WebKit/public/web/WebDataSource.h" 30 #include "third_party/WebKit/public/web/WebDataSource.h"
31 #include "third_party/WebKit/public/web/WebDocument.h"
30 #include "third_party/WebKit/public/web/WebFrame.h" 32 #include "third_party/WebKit/public/web/WebFrame.h"
31 #include "third_party/WebKit/public/web/WebView.h" 33 #include "third_party/WebKit/public/web/WebView.h"
32 #include "ui/base/resource/resource_bundle.h" 34 #include "ui/base/resource/resource_bundle.h"
33 #include "ui/base/webui/jstemplate_builder.h" 35 #include "ui/base/webui/jstemplate_builder.h"
34 #include "url/gurl.h" 36 #include "url/gurl.h"
35 37
36 using base::JSONWriter; 38 using base::JSONWriter;
37 using chrome_common_net::DnsProbeStatus; 39 using chrome_common_net::DnsProbeStatus;
38 using chrome_common_net::DnsProbeStatusToString; 40 using chrome_common_net::DnsProbeStatusToString;
41 using content::RenderFrame;
42 using content::RenderFrameObserver;
39 using content::RenderThread; 43 using content::RenderThread;
40 using content::RenderView;
41 using content::RenderViewObserver;
42 using content::kUnreachableWebDataURL; 44 using content::kUnreachableWebDataURL;
43 45
44 namespace { 46 namespace {
45 47
46 // Number of seconds to wait for the alternate error page server. If it takes 48 // Number of seconds to wait for the alternate error page server. If it takes
47 // too long, just use the local error page. 49 // too long, just use the local error page.
48 static const int kAlterErrorPageFetchTimeoutSec = 3000; 50 static const int kAlterErrorPageFetchTimeoutSec = 3000;
49 51
50 NetErrorHelperCore::PageType GetLoadingPageType(const blink::WebFrame* frame) { 52 NetErrorHelperCore::PageType GetLoadingPageType(const blink::WebFrame* frame) {
51 GURL url = frame->provisionalDataSource()->request().url(); 53 GURL url = frame->provisionalDataSource()->request().url();
52 if (!url.is_valid() || url.spec() != kUnreachableWebDataURL) 54 if (!url.is_valid() || url.spec() != kUnreachableWebDataURL)
53 return NetErrorHelperCore::NON_ERROR_PAGE; 55 return NetErrorHelperCore::NON_ERROR_PAGE;
54 return NetErrorHelperCore::ERROR_PAGE; 56 return NetErrorHelperCore::ERROR_PAGE;
55 } 57 }
56 58
57 NetErrorHelperCore::FrameType GetFrameType(const blink::WebFrame* frame) { 59 NetErrorHelperCore::FrameType GetFrameType(const blink::WebFrame* frame) {
58 if (!frame->parent()) 60 if (!frame->parent())
59 return NetErrorHelperCore::MAIN_FRAME; 61 return NetErrorHelperCore::MAIN_FRAME;
60 return NetErrorHelperCore::SUB_FRAME; 62 return NetErrorHelperCore::SUB_FRAME;
61 } 63 }
62 64
63 } // namespace 65 } // namespace
64 66
65 NetErrorHelper::NetErrorHelper(RenderView* render_view) 67 NetErrorHelper::NetErrorHelper(RenderFrame* render_view)
66 : RenderViewObserver(render_view), 68 : RenderFrameObserver(render_view),
67 content::RenderViewObserverTracker<NetErrorHelper>(render_view), 69 content::RenderFrameObserverTracker<NetErrorHelper>(render_view),
68 core_(this) { 70 core_(this) {
69 } 71 }
70 72
71 NetErrorHelper::~NetErrorHelper() { 73 NetErrorHelper::~NetErrorHelper() {
72 } 74 }
73 75
74 void NetErrorHelper::DidStartProvisionalLoad(blink::WebFrame* frame) { 76 void NetErrorHelper::DidStartProvisionalLoad() {
77 blink::WebFrame* frame = render_frame()->GetWebFrame();
75 core_.OnStartLoad(GetFrameType(frame), GetLoadingPageType(frame)); 78 core_.OnStartLoad(GetFrameType(frame), GetLoadingPageType(frame));
76 } 79 }
77 80
78 void NetErrorHelper::DidCommitProvisionalLoad(blink::WebFrame* frame, 81 void NetErrorHelper::DidCommitProvisionalLoad(bool is_new_navigation) {
79 bool is_new_navigation) { 82 blink::WebFrame* frame = render_frame()->GetWebFrame();
80 core_.OnCommitLoad(GetFrameType(frame)); 83 core_.OnCommitLoad(GetFrameType(frame));
81 } 84 }
82 85
83 void NetErrorHelper::DidFinishLoad(blink::WebFrame* frame) { 86 void NetErrorHelper::DidFinishLoad() {
87 blink::WebFrame* frame = render_frame()->GetWebFrame();
84 core_.OnFinishLoad(GetFrameType(frame)); 88 core_.OnFinishLoad(GetFrameType(frame));
85 } 89 }
86 90
87 void NetErrorHelper::OnStop() { 91 void NetErrorHelper::OnStop() {
88 core_.OnStop(); 92 core_.OnStop();
89 } 93 }
90 94
91 bool NetErrorHelper::OnMessageReceived(const IPC::Message& message) { 95 bool NetErrorHelper::OnMessageReceived(const IPC::Message& message) {
92 bool handled = true; 96 bool handled = true;
93 97
(...skipping 22 matching lines...) Expand all
116 int resource_id = IDR_NET_ERROR_HTML; 120 int resource_id = IDR_NET_ERROR_HTML;
117 const base::StringPiece template_html( 121 const base::StringPiece template_html(
118 ResourceBundle::GetSharedInstance().GetRawDataResource(resource_id)); 122 ResourceBundle::GetSharedInstance().GetRawDataResource(resource_id));
119 if (template_html.empty()) { 123 if (template_html.empty()) {
120 NOTREACHED() << "unable to load template."; 124 NOTREACHED() << "unable to load template.";
121 } else { 125 } else {
122 base::DictionaryValue error_strings; 126 base::DictionaryValue error_strings;
123 LocalizedError::GetStrings(error.reason, error.domain.utf8(), 127 LocalizedError::GetStrings(error.reason, error.domain.utf8(),
124 error.unreachableURL, is_failed_post, 128 error.unreachableURL, is_failed_post,
125 RenderThread::Get()->GetLocale(), 129 RenderThread::Get()->GetLocale(),
126 render_view()->GetAcceptLanguages(), 130 render_frame()->GetRenderView()->
131 GetAcceptLanguages(),
127 &error_strings); 132 &error_strings);
128 // "t" is the id of the template's root node. 133 // "t" is the id of the template's root node.
129 *error_html = webui::GetTemplatesHtml(template_html, &error_strings, "t"); 134 *error_html = webui::GetTemplatesHtml(template_html, &error_strings, "t");
130 } 135 }
131 } 136 }
132 137
133 void NetErrorHelper::LoadErrorPageInMainFrame(const std::string& html, 138 void NetErrorHelper::LoadErrorPageInMainFrame(const std::string& html,
134 const GURL& failed_url) { 139 const GURL& failed_url) {
135 blink::WebView* web_view = render_view()->GetWebView(); 140 blink::WebView* web_view = render_frame()->GetRenderView()->GetWebView();
136 if (!web_view) 141 if (!web_view)
137 return; 142 return;
138 blink::WebFrame* frame = web_view->mainFrame(); 143 blink::WebFrame* frame = web_view->mainFrame();
139 frame->loadHTMLString(html, GURL(kUnreachableWebDataURL), failed_url, true); 144 frame->loadHTMLString(html, GURL(kUnreachableWebDataURL), failed_url, true);
140 } 145 }
141 146
142 void NetErrorHelper::UpdateErrorPage(const blink::WebURLError& error, 147 void NetErrorHelper::UpdateErrorPage(const blink::WebURLError& error,
143 bool is_failed_post) { 148 bool is_failed_post) {
144 base::DictionaryValue error_strings; 149 base::DictionaryValue error_strings;
145 LocalizedError::GetStrings(error.reason, 150 LocalizedError::GetStrings(error.reason,
146 error.domain.utf8(), 151 error.domain.utf8(),
147 error.unreachableURL, 152 error.unreachableURL,
148 is_failed_post, 153 is_failed_post,
149 RenderThread::Get()->GetLocale(), 154 RenderThread::Get()->GetLocale(),
150 render_view()->GetAcceptLanguages(), 155 render_frame()->GetRenderView()->
156 GetAcceptLanguages(),
151 &error_strings); 157 &error_strings);
152 158
153 std::string json; 159 std::string json;
154 JSONWriter::Write(&error_strings, &json); 160 JSONWriter::Write(&error_strings, &json);
155 161
156 std::string js = "if (window.updateForDnsProbe) " 162 std::string js = "if (window.updateForDnsProbe) "
157 "updateForDnsProbe(" + json + ");"; 163 "updateForDnsProbe(" + json + ");";
158 base::string16 js16; 164 base::string16 js16;
159 if (!base::UTF8ToUTF16(js.c_str(), js.length(), &js16)) { 165 if (!base::UTF8ToUTF16(js.c_str(), js.length(), &js16)) {
160 NOTREACHED(); 166 NOTREACHED();
161 return; 167 return;
162 } 168 }
163 169
164 base::string16 frame_xpath; 170 base::string16 frame_xpath;
165 render_view()->EvaluateScript(frame_xpath, js16, 0, false); 171 render_frame()->GetRenderView()->EvaluateScript(frame_xpath, js16, 0, false);
166 } 172 }
167 173
168 void NetErrorHelper::FetchErrorPage(const GURL& url) { 174 void NetErrorHelper::FetchErrorPage(const GURL& url) {
169 DCHECK(!alt_error_page_fetcher_.get()); 175 DCHECK(!alt_error_page_fetcher_.get());
170 176
171 blink::WebView* web_view = render_view()->GetWebView(); 177 blink::WebView* web_view = render_frame()->GetRenderView()->GetWebView();
172 if (!web_view) 178 if (!web_view)
173 return; 179 return;
174 blink::WebFrame* frame = web_view->mainFrame(); 180 blink::WebFrame* frame = web_view->mainFrame();
175 181
176 alt_error_page_fetcher_.reset( 182 alt_error_page_fetcher_.reset(
177 content::ResourceFetcher::Create( 183 content::ResourceFetcher::Create(
178 url, frame, blink::WebURLRequest::TargetIsMainFrame, 184 url, frame, blink::WebURLRequest::TargetIsMainFrame,
179 base::Bind(&NetErrorHelper::OnAlternateErrorPageRetrieved, 185 base::Bind(&NetErrorHelper::OnAlternateErrorPageRetrieved,
180 base::Unretained(this)))); 186 base::Unretained(this))));
181 187
(...skipping 23 matching lines...) Expand all
205 // The fetcher may only be deleted after |data| is passed to |core_|. Move 211 // The fetcher may only be deleted after |data| is passed to |core_|. Move
206 // it to a temporary to prevent any potential re-entrancy issues. 212 // it to a temporary to prevent any potential re-entrancy issues.
207 scoped_ptr<content::ResourceFetcher> fetcher( 213 scoped_ptr<content::ResourceFetcher> fetcher(
208 alt_error_page_fetcher_.release()); 214 alt_error_page_fetcher_.release());
209 if (!response.isNull() && response.httpStatusCode() == 200) { 215 if (!response.isNull() && response.httpStatusCode() == 200) {
210 core_.OnAlternateErrorPageFetched(data); 216 core_.OnAlternateErrorPageFetched(data);
211 } else { 217 } else {
212 core_.OnAlternateErrorPageFetched(""); 218 core_.OnAlternateErrorPageFetched("");
213 } 219 }
214 } 220 }
OLDNEW
« no previous file with comments | « chrome/renderer/net/net_error_helper.h ('k') | content/public/renderer/render_frame_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698