Index: chrome/browser/net/net_error_tab_helper.cc |
diff --git a/chrome/browser/net/net_error_tab_helper.cc b/chrome/browser/net/net_error_tab_helper.cc |
index a0e73cf6cb1e2c50084dc6ce1a1817860884b2fe..2aa944c052eafd22a6bd0a9f09cd87b89371b7ed 100644 |
--- a/chrome/browser/net/net_error_tab_helper.cc |
+++ b/chrome/browser/net/net_error_tab_helper.cc |
@@ -13,6 +13,7 @@ |
#include "chrome/browser/net/net_error_diagnostics_dialog.h" |
#include "chrome/browser/platform_util.h" |
#include "chrome/browser/profiles/profile.h" |
+#include "chrome/common/localized_error.h" |
#include "chrome/common/pref_names.h" |
#include "chrome/common/render_messages.h" |
#include "components/error_page/common/net_error_info.h" |
@@ -124,7 +125,7 @@ void NetErrorTabHelper::DidStartProvisionalLoadForFrame( |
is_error_page_ = is_error_page; |
#if defined(OS_ANDROID) |
- SetHasOfflinePages(render_frame_host); |
+ SetOfflinePageInfo(render_frame_host); |
#endif |
} |
@@ -177,6 +178,7 @@ bool NetErrorTabHelper::OnMessageReceived( |
RunNetworkDiagnostics) |
#if defined(OS_ANDROID) |
IPC_MESSAGE_HANDLER(ChromeViewHostMsg_ShowOfflinePages, ShowOfflinePages) |
+ IPC_MESSAGE_HANDLER(ChromeViewHostMsg_LoadOfflineCopy, LoadOfflineCopy) |
#endif |
IPC_MESSAGE_UNHANDLED(handled = false) |
IPC_END_MESSAGE_MAP() |
@@ -286,15 +288,19 @@ void NetErrorTabHelper::RunNetworkDiagnosticsHelper( |
} |
#if defined(OS_ANDROID) |
-void NetErrorTabHelper::SetHasOfflinePages( |
+void NetErrorTabHelper::SetOfflinePageInfo( |
content::RenderFrameHost* render_frame_host) { |
DCHECK(web_contents()); |
+ OfflinePageStatus status = OfflinePageStatus::NONE; |
TabAndroid* tab = TabAndroid::FromWebContents(web_contents()); |
- bool has_offline_pages = tab && tab->HasOfflinePages(); |
+ if (tab && tab->HasOfflinePages()) { |
+ status = tab->HasOfflineCopyForCurrentPage() ? |
+ OfflinePageStatus::HAS_PAGE_COPY : OfflinePageStatus::HAS_OTHER_COPIES; |
+ } |
render_frame_host->Send( |
- new ChromeViewMsg_SetHasOfflinePages( |
+ new ChromeViewMsg_SetOfflinePageInfo( |
render_frame_host->GetRoutingID(), |
- has_offline_pages)); |
+ static_cast<int>(status))); |
} |
void NetErrorTabHelper::ShowOfflinePages() { |
@@ -303,6 +309,13 @@ void NetErrorTabHelper::ShowOfflinePages() { |
if (tab) |
tab->ShowOfflinePages(); |
} |
-#endif |
+ |
+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
|
+ DCHECK(web_contents()); |
+ TabAndroid* tab = TabAndroid::FromWebContents(web_contents()); |
+ if (tab) |
+ tab->LoadOfflineCopy(url); |
+} |
+#endif // defined(OS_ANDROID) |
} // namespace chrome_browser_net |