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

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: Remove obsolete WebFrame parameter Created 6 years, 11 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) 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"
30 #include "third_party/WebKit/public/web/WebFrame.h" 31 #include "third_party/WebKit/public/web/WebFrame.h"
31 #include "third_party/WebKit/public/web/WebView.h" 32 #include "third_party/WebKit/public/web/WebView.h"
32 #include "ui/base/resource/resource_bundle.h" 33 #include "ui/base/resource/resource_bundle.h"
33 #include "ui/base/webui/jstemplate_builder.h" 34 #include "ui/base/webui/jstemplate_builder.h"
34 #include "url/gurl.h" 35 #include "url/gurl.h"
35 36
36 using base::JSONWriter; 37 using base::JSONWriter;
37 using chrome_common_net::DnsProbeStatus; 38 using chrome_common_net::DnsProbeStatus;
38 using chrome_common_net::DnsProbeStatusToString; 39 using chrome_common_net::DnsProbeStatusToString;
40 using content::RenderFrame;
41 using content::RenderFrameObserver;
39 using content::RenderThread; 42 using content::RenderThread;
40 using content::RenderView;
41 using content::RenderViewObserver;
42 using content::kUnreachableWebDataURL; 43 using content::kUnreachableWebDataURL;
43 44
44 namespace { 45 namespace {
45 46
46 // Number of seconds to wait for the alternate error page server. If it takes 47 // Number of seconds to wait for the alternate error page server. If it takes
47 // too long, just use the local error page. 48 // too long, just use the local error page.
48 static const int kAlterErrorPageFetchTimeoutSec = 3000; 49 static const int kAlterErrorPageFetchTimeoutSec = 3000;
49 50
50 NetErrorHelperCore::PageType GetLoadingPageType(const blink::WebFrame* frame) { 51 NetErrorHelperCore::PageType GetLoadingPageType(const blink::WebFrame* frame) {
51 GURL url = frame->provisionalDataSource()->request().url(); 52 GURL url = frame->provisionalDataSource()->request().url();
52 if (!url.is_valid() || url.spec() != kUnreachableWebDataURL) 53 if (!url.is_valid() || url.spec() != kUnreachableWebDataURL)
53 return NetErrorHelperCore::NON_ERROR_PAGE; 54 return NetErrorHelperCore::NON_ERROR_PAGE;
54 return NetErrorHelperCore::ERROR_PAGE; 55 return NetErrorHelperCore::ERROR_PAGE;
55 } 56 }
56 57
57 NetErrorHelperCore::FrameType GetFrameType(const blink::WebFrame* frame) { 58 NetErrorHelperCore::FrameType GetFrameType(const blink::WebFrame* frame) {
58 if (!frame->parent()) 59 if (!frame->parent())
59 return NetErrorHelperCore::MAIN_FRAME; 60 return NetErrorHelperCore::MAIN_FRAME;
60 return NetErrorHelperCore::SUB_FRAME; 61 return NetErrorHelperCore::SUB_FRAME;
61 } 62 }
62 63
63 } // namespace 64 } // namespace
64 65
65 NetErrorHelper::NetErrorHelper(RenderView* render_view) 66 NetErrorHelper::NetErrorHelper(RenderFrame* render_view)
66 : RenderViewObserver(render_view), 67 : RenderFrameObserver(render_view),
67 content::RenderViewObserverTracker<NetErrorHelper>(render_view), 68 content::RenderFrameObserverTracker<NetErrorHelper>(render_view),
68 core_(this) { 69 core_(this) {
69 } 70 }
70 71
71 NetErrorHelper::~NetErrorHelper() { 72 NetErrorHelper::~NetErrorHelper() {
72 } 73 }
73 74
74 void NetErrorHelper::DidStartProvisionalLoad(blink::WebFrame* frame) { 75 void NetErrorHelper::DidStartProvisionalLoad() {
76 blink::WebFrame* frame = render_frame()->GetWebFrame();
75 core_.OnStartLoad(GetFrameType(frame), GetLoadingPageType(frame)); 77 core_.OnStartLoad(GetFrameType(frame), GetLoadingPageType(frame));
76 } 78 }
77 79
78 void NetErrorHelper::DidCommitProvisionalLoad(blink::WebFrame* frame, 80 void NetErrorHelper::DidCommitProvisionalLoad(bool is_new_navigation) {
79 bool is_new_navigation) { 81 blink::WebFrame* frame = render_frame()->GetWebFrame();
80 core_.OnCommitLoad(GetFrameType(frame)); 82 core_.OnCommitLoad(GetFrameType(frame));
81 } 83 }
82 84
83 void NetErrorHelper::DidFinishLoad(blink::WebFrame* frame) { 85 void NetErrorHelper::DidFinishLoad() {
86 blink::WebFrame* frame = render_frame()->GetWebFrame();
84 core_.OnFinishLoad(GetFrameType(frame)); 87 core_.OnFinishLoad(GetFrameType(frame));
85 } 88 }
86 89
87 void NetErrorHelper::OnStop() { 90 void NetErrorHelper::OnStop() {
88 core_.OnStop(); 91 core_.OnStop();
89 } 92 }
90 93
91 bool NetErrorHelper::OnMessageReceived(const IPC::Message& message) { 94 bool NetErrorHelper::OnMessageReceived(const IPC::Message& message) {
92 bool handled = true; 95 bool handled = true;
93 96
(...skipping 22 matching lines...) Expand all
116 int resource_id = IDR_NET_ERROR_HTML; 119 int resource_id = IDR_NET_ERROR_HTML;
117 const base::StringPiece template_html( 120 const base::StringPiece template_html(
118 ResourceBundle::GetSharedInstance().GetRawDataResource(resource_id)); 121 ResourceBundle::GetSharedInstance().GetRawDataResource(resource_id));
119 if (template_html.empty()) { 122 if (template_html.empty()) {
120 NOTREACHED() << "unable to load template."; 123 NOTREACHED() << "unable to load template.";
121 } else { 124 } else {
122 base::DictionaryValue error_strings; 125 base::DictionaryValue error_strings;
123 LocalizedError::GetStrings(error.reason, error.domain.utf8(), 126 LocalizedError::GetStrings(error.reason, error.domain.utf8(),
124 error.unreachableURL, is_failed_post, 127 error.unreachableURL, is_failed_post,
125 RenderThread::Get()->GetLocale(), 128 RenderThread::Get()->GetLocale(),
126 render_view()->GetAcceptLanguages(), 129 render_frame()->GetRenderView()->
130 GetAcceptLanguages(),
127 &error_strings); 131 &error_strings);
128 // "t" is the id of the template's root node. 132 // "t" is the id of the template's root node.
129 *error_html = webui::GetTemplatesHtml(template_html, &error_strings, "t"); 133 *error_html = webui::GetTemplatesHtml(template_html, &error_strings, "t");
130 } 134 }
131 } 135 }
132 136
133 void NetErrorHelper::LoadErrorPageInMainFrame(const std::string& html, 137 void NetErrorHelper::LoadErrorPageInMainFrame(const std::string& html,
134 const GURL& failed_url) { 138 const GURL& failed_url) {
135 blink::WebView* web_view = render_view()->GetWebView(); 139 blink::WebView* web_view = render_frame()->GetRenderView()->GetWebView();
136 if (!web_view) 140 if (!web_view)
137 return; 141 return;
138 blink::WebFrame* frame = web_view->mainFrame(); 142 blink::WebFrame* frame = web_view->mainFrame();
139 frame->loadHTMLString(html, GURL(kUnreachableWebDataURL), failed_url, true); 143 frame->loadHTMLString(html, GURL(kUnreachableWebDataURL), failed_url, true);
jam 2014/01/22 03:15:35 this can just be render_frame()->GetWebFrame()->lo
140 } 144 }
141 145
142 void NetErrorHelper::UpdateErrorPage(const blink::WebURLError& error, 146 void NetErrorHelper::UpdateErrorPage(const blink::WebURLError& error,
143 bool is_failed_post) { 147 bool is_failed_post) {
144 base::DictionaryValue error_strings; 148 base::DictionaryValue error_strings;
145 LocalizedError::GetStrings(error.reason, 149 LocalizedError::GetStrings(error.reason,
146 error.domain.utf8(), 150 error.domain.utf8(),
147 error.unreachableURL, 151 error.unreachableURL,
148 is_failed_post, 152 is_failed_post,
149 RenderThread::Get()->GetLocale(), 153 RenderThread::Get()->GetLocale(),
150 render_view()->GetAcceptLanguages(), 154 render_frame()->GetRenderView()->
155 GetAcceptLanguages(),
151 &error_strings); 156 &error_strings);
152 157
153 std::string json; 158 std::string json;
154 JSONWriter::Write(&error_strings, &json); 159 JSONWriter::Write(&error_strings, &json);
155 160
156 std::string js = "if (window.updateForDnsProbe) " 161 std::string js = "if (window.updateForDnsProbe) "
157 "updateForDnsProbe(" + json + ");"; 162 "updateForDnsProbe(" + json + ");";
158 base::string16 js16; 163 base::string16 js16;
159 if (!base::UTF8ToUTF16(js.c_str(), js.length(), &js16)) { 164 if (!base::UTF8ToUTF16(js.c_str(), js.length(), &js16)) {
160 NOTREACHED(); 165 NOTREACHED();
161 return; 166 return;
162 } 167 }
163 168
164 base::string16 frame_xpath; 169 base::string16 frame_xpath;
165 render_view()->EvaluateScript(frame_xpath, js16, 0, false); 170 render_frame()->GetRenderView()->EvaluateScript(frame_xpath, js16, 0, false);
166 } 171 }
167 172
168 void NetErrorHelper::FetchErrorPage(const GURL& url) { 173 void NetErrorHelper::FetchErrorPage(const GURL& url) {
169 DCHECK(!alt_error_page_fetcher_.get()); 174 DCHECK(!alt_error_page_fetcher_.get());
170 175
171 blink::WebView* web_view = render_view()->GetWebView(); 176 blink::WebView* web_view = render_frame()->GetRenderView()->GetWebView();
172 if (!web_view) 177 if (!web_view)
173 return; 178 return;
174 blink::WebFrame* frame = web_view->mainFrame(); 179 blink::WebFrame* frame = web_view->mainFrame();
jam 2014/01/22 03:15:35 ditto
175 180
176 alt_error_page_fetcher_.reset( 181 alt_error_page_fetcher_.reset(
177 content::ResourceFetcher::Create( 182 content::ResourceFetcher::Create(
178 url, frame, blink::WebURLRequest::TargetIsMainFrame, 183 url, frame, blink::WebURLRequest::TargetIsMainFrame,
179 base::Bind(&NetErrorHelper::OnAlternateErrorPageRetrieved, 184 base::Bind(&NetErrorHelper::OnAlternateErrorPageRetrieved,
180 base::Unretained(this)))); 185 base::Unretained(this))));
181 186
182 alt_error_page_fetcher_->SetTimeout( 187 alt_error_page_fetcher_->SetTimeout(
183 base::TimeDelta::FromSeconds(kAlterErrorPageFetchTimeoutSec)); 188 base::TimeDelta::FromSeconds(kAlterErrorPageFetchTimeoutSec));
184 } 189 }
(...skipping 20 matching lines...) Expand all
205 // The fetcher may only be deleted after |data| is passed to |core_|. Move 210 // 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. 211 // it to a temporary to prevent any potential re-entrancy issues.
207 scoped_ptr<content::ResourceFetcher> fetcher( 212 scoped_ptr<content::ResourceFetcher> fetcher(
208 alt_error_page_fetcher_.release()); 213 alt_error_page_fetcher_.release());
209 if (!response.isNull() && response.httpStatusCode() == 200) { 214 if (!response.isNull() && response.httpStatusCode() == 200) {
210 core_.OnAlternateErrorPageFetched(data); 215 core_.OnAlternateErrorPageFetched(data);
211 } else { 216 } else {
212 core_.OnAlternateErrorPageFetched(""); 217 core_.OnAlternateErrorPageFetched("");
213 } 218 }
214 } 219 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698