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

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

Issue 1442433003: Add "Show saved copy" button in dino page when there's offline copy (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add more comments Created 5 years, 1 month 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 #include "chrome/browser/net/net_error_tab_helper.h" 5 #include "chrome/browser/net/net_error_tab_helper.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/prefs/pref_service.h" 9 #include "base/prefs/pref_service.h"
10 #include "chrome/browser/browser_process.h" 10 #include "chrome/browser/browser_process.h"
11 #include "chrome/browser/io_thread.h" 11 #include "chrome/browser/io_thread.h"
12 #include "chrome/browser/net/dns_probe_service.h" 12 #include "chrome/browser/net/dns_probe_service.h"
13 #include "chrome/browser/net/net_error_diagnostics_dialog.h" 13 #include "chrome/browser/net/net_error_diagnostics_dialog.h"
14 #include "chrome/browser/platform_util.h" 14 #include "chrome/browser/platform_util.h"
15 #include "chrome/browser/profiles/profile.h" 15 #include "chrome/browser/profiles/profile.h"
16 #include "chrome/common/localized_error.h"
16 #include "chrome/common/pref_names.h" 17 #include "chrome/common/pref_names.h"
17 #include "chrome/common/render_messages.h" 18 #include "chrome/common/render_messages.h"
18 #include "components/error_page/common/net_error_info.h" 19 #include "components/error_page/common/net_error_info.h"
19 #include "content/public/browser/browser_thread.h" 20 #include "content/public/browser/browser_thread.h"
20 #include "content/public/browser/render_frame_host.h" 21 #include "content/public/browser/render_frame_host.h"
21 #include "ipc/ipc_message_macros.h" 22 #include "ipc/ipc_message_macros.h"
22 #include "net/base/net_errors.h" 23 #include "net/base/net_errors.h"
23 #include "url/gurl.h" 24 #include "url/gurl.h"
24 25
25 #if defined(OS_ANDROID) 26 #if defined(OS_ANDROID)
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 bool is_error_page, 118 bool is_error_page,
118 bool is_iframe_srcdoc) { 119 bool is_iframe_srcdoc) {
119 DCHECK_CURRENTLY_ON(BrowserThread::UI); 120 DCHECK_CURRENTLY_ON(BrowserThread::UI);
120 121
121 if (render_frame_host->GetParent()) 122 if (render_frame_host->GetParent())
122 return; 123 return;
123 124
124 is_error_page_ = is_error_page; 125 is_error_page_ = is_error_page;
125 126
126 #if defined(OS_ANDROID) 127 #if defined(OS_ANDROID)
127 SetHasOfflinePages(render_frame_host); 128 SetOfflinePageInfo(render_frame_host);
128 #endif 129 #endif
129 } 130 }
130 131
131 void NetErrorTabHelper::DidCommitProvisionalLoadForFrame( 132 void NetErrorTabHelper::DidCommitProvisionalLoadForFrame(
132 content::RenderFrameHost* render_frame_host, 133 content::RenderFrameHost* render_frame_host,
133 const GURL& url, 134 const GURL& url,
134 PageTransition transition_type) { 135 PageTransition transition_type) {
135 DCHECK_CURRENTLY_ON(BrowserThread::UI); 136 DCHECK_CURRENTLY_ON(BrowserThread::UI);
136 137
137 if (render_frame_host->GetParent()) 138 if (render_frame_host->GetParent())
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 171
171 bool NetErrorTabHelper::OnMessageReceived( 172 bool NetErrorTabHelper::OnMessageReceived(
172 const IPC::Message& message, 173 const IPC::Message& message,
173 content::RenderFrameHost* render_frame_host) { 174 content::RenderFrameHost* render_frame_host) {
174 bool handled = true; 175 bool handled = true;
175 IPC_BEGIN_MESSAGE_MAP(NetErrorTabHelper, message) 176 IPC_BEGIN_MESSAGE_MAP(NetErrorTabHelper, message)
176 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_RunNetworkDiagnostics, 177 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_RunNetworkDiagnostics,
177 RunNetworkDiagnostics) 178 RunNetworkDiagnostics)
178 #if defined(OS_ANDROID) 179 #if defined(OS_ANDROID)
179 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_ShowOfflinePages, ShowOfflinePages) 180 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_ShowOfflinePages, ShowOfflinePages)
181 IPC_MESSAGE_HANDLER(ChromeViewHostMsg_LoadOfflineCopy, LoadOfflineCopy)
180 #endif 182 #endif
181 IPC_MESSAGE_UNHANDLED(handled = false) 183 IPC_MESSAGE_UNHANDLED(handled = false)
182 IPC_END_MESSAGE_MAP() 184 IPC_END_MESSAGE_MAP()
183 185
184 return handled; 186 return handled;
185 } 187 }
186 188
187 NetErrorTabHelper::NetErrorTabHelper(WebContents* contents) 189 NetErrorTabHelper::NetErrorTabHelper(WebContents* contents)
188 : WebContentsObserver(contents), 190 : WebContentsObserver(contents),
189 is_error_page_(false), 191 is_error_page_(false),
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 // Sanitize URL prior to running diagnostics on it. 281 // Sanitize URL prior to running diagnostics on it.
280 RunNetworkDiagnosticsHelper(url.GetOrigin().spec()); 282 RunNetworkDiagnosticsHelper(url.GetOrigin().spec());
281 } 283 }
282 284
283 void NetErrorTabHelper::RunNetworkDiagnosticsHelper( 285 void NetErrorTabHelper::RunNetworkDiagnosticsHelper(
284 const std::string& sanitized_url) { 286 const std::string& sanitized_url) {
285 ShowNetworkDiagnosticsDialog(web_contents(), sanitized_url); 287 ShowNetworkDiagnosticsDialog(web_contents(), sanitized_url);
286 } 288 }
287 289
288 #if defined(OS_ANDROID) 290 #if defined(OS_ANDROID)
289 void NetErrorTabHelper::SetHasOfflinePages( 291 void NetErrorTabHelper::SetOfflinePageInfo(
290 content::RenderFrameHost* render_frame_host) { 292 content::RenderFrameHost* render_frame_host) {
291 DCHECK(web_contents()); 293 DCHECK(web_contents());
294 OfflinePageStatus status = OfflinePageStatus::NONE;
292 TabAndroid* tab = TabAndroid::FromWebContents(web_contents()); 295 TabAndroid* tab = TabAndroid::FromWebContents(web_contents());
293 bool has_offline_pages = tab && tab->HasOfflinePages(); 296 if (tab && tab->HasOfflinePages()) {
297 status = tab->HasOfflineCopyForCurrentPage() ?
298 OfflinePageStatus::HAS_PAGE_COPY : OfflinePageStatus::HAS_OTHER_COPIES;
299 }
294 render_frame_host->Send( 300 render_frame_host->Send(
295 new ChromeViewMsg_SetHasOfflinePages( 301 new ChromeViewMsg_SetOfflinePageInfo(
296 render_frame_host->GetRoutingID(), 302 render_frame_host->GetRoutingID(),
297 has_offline_pages)); 303 static_cast<int>(status)));
298 } 304 }
299 305
300 void NetErrorTabHelper::ShowOfflinePages() { 306 void NetErrorTabHelper::ShowOfflinePages() {
301 DCHECK(web_contents()); 307 DCHECK(web_contents());
302 TabAndroid* tab = TabAndroid::FromWebContents(web_contents()); 308 TabAndroid* tab = TabAndroid::FromWebContents(web_contents());
303 if (tab) 309 if (tab)
304 tab->ShowOfflinePages(); 310 tab->ShowOfflinePages();
305 } 311 }
306 #endif 312
313 void NetErrorTabHelper::LoadOfflineCopy(const GURL& url) {
nasko 2015/11/13 23:55:13 Since this URL comes from the renderer, it cannot
jianli 2015/11/14 00:26:05 Done.
mmenke 2015/11/14 00:41:11 The renderer is untrusted. Any page could claim t
nasko 2015/11/14 00:43:49 When the renderer process is exploited by an attac
jianli 2015/11/14 00:46:05 Per my understanding, the button click handling in
314 DCHECK(web_contents());
315 TabAndroid* tab = TabAndroid::FromWebContents(web_contents());
316 if (tab)
317 tab->LoadOfflineCopy(url);
318 }
319 #endif // defined(OS_ANDROID)
307 320
308 } // namespace chrome_browser_net 321 } // namespace chrome_browser_net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698