Commit 5c208d56 authored by Justin DeWitt's avatar Justin DeWitt Committed by Commit Bot

[Offline Pages] PageInfoPopup improvements for untrusted offline pages.

When we have an untrusted offline page, the popup should show the claimed
URL and creation date, and allow the user to copy the claimed URL.
* Trusted offline pages are unchanged
* Untrusted offline pages don't show the scheme.

Mocks at go/offline-pages-p2p-mocks#slide=id.g1d74dc3fd1_0_13

Bug: 826362
Change-Id: I4c33c6b151f1e6f82bccb44122081712648c39c7
Reviewed-on: https://chromium-review.googlesource.com/980925Reviewed-by: default avatarJian Li <jianli@chromium.org>
Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Commit-Queue: Justin DeWitt <dewittj@chromium.org>
Cr-Commit-Position: refs/heads/master@{#548076}
parent a002a087
...@@ -620,11 +620,17 @@ public class OfflinePageUtils { ...@@ -620,11 +620,17 @@ public class OfflinePageUtils {
* @param tab The tab to be reloaded. * @param tab The tab to be reloaded.
*/ */
public static void reload(Tab tab) { public static void reload(Tab tab) {
// If current page is an offline page, reload it with custom behavior defined in extra OfflinePageItem offlinePage = getOfflinePage(tab);
// header respected. if (isShowingTrustedOfflinePage(tab) || offlinePage == null) {
LoadUrlParams params = // If current page is an offline page, reload it with custom behavior defined in extra
new LoadUrlParams(tab.getOriginalUrl(), PageTransition.RELOAD); // header respected.
params.setVerbatimHeaders(getOfflinePageHeaderForReload(tab)); LoadUrlParams params = new LoadUrlParams(tab.getOriginalUrl(), PageTransition.RELOAD);
params.setVerbatimHeaders(getOfflinePageHeaderForReload(tab));
tab.loadUrl(params);
return;
}
LoadUrlParams params = new LoadUrlParams(offlinePage.getUrl(), PageTransition.RELOAD);
tab.loadUrl(params); tab.loadUrl(params);
} }
......
...@@ -341,12 +341,14 @@ public class PageInfoPopup implements OnClickListener, ModalDialogView.Controlle ...@@ -341,12 +341,14 @@ public class PageInfoPopup implements OnClickListener, ModalDialogView.Controlle
* C++ object and saves a pointer to it. * C++ object and saves a pointer to it.
* @param activity Activity which is used for showing a popup. * @param activity Activity which is used for showing a popup.
* @param tab Tab for which the pop up is shown. * @param tab Tab for which the pop up is shown.
* @param offlinePageUrl URL that the offline page claims to be generated from.
* @param offlinePageCreationDate Date when the offline page was created. * @param offlinePageCreationDate Date when the offline page was created.
* @param offlinePageState State of the tab showing offline page. * @param offlinePageState State of the tab showing offline page.
* @param publisher The name of the content publisher, if any. * @param publisher The name of the content publisher, if any.
*/ */
private PageInfoPopup(Activity activity, Tab tab, String offlinePageCreationDate, private PageInfoPopup(Activity activity, Tab tab, String offlinePageUrl,
@OfflinePageState int offlinePageState, String publisher) { String offlinePageCreationDate, @OfflinePageState int offlinePageState,
String publisher) {
mContext = activity; mContext = activity;
mTab = tab; mTab = tab;
mIsBottomPopup = mTab.getActivity().getBottomSheet() != null; mIsBottomPopup = mTab.getActivity().getBottomSheet() != null;
...@@ -416,15 +418,11 @@ public class PageInfoPopup implements OnClickListener, ModalDialogView.Controlle ...@@ -416,15 +418,11 @@ public class PageInfoPopup implements OnClickListener, ModalDialogView.Controlle
setVisibilityOfPermissionsList(false); setVisibilityOfPermissionsList(false);
// Work out the URL and connection message and status visibility. // Work out the URL and connection message and status visibility.
mFullUrl = mTab.getOriginalUrl(); mFullUrl = isShowingOfflinePage() ? offlinePageUrl : mTab.getOriginalUrl();
// This can happen if an invalid chrome-distiller:// url was entered. // This can happen if an invalid chrome-distiller:// url was entered.
if (mFullUrl == null) mFullUrl = ""; if (mFullUrl == null) mFullUrl = "";
if (isShowingOfflinePage()) {
mFullUrl = OfflinePageUtils.stripSchemeFromOnlineUrl(mFullUrl);
}
try { try {
mParsedUrl = new URI(mFullUrl); mParsedUrl = new URI(mFullUrl);
mIsInternalPage = UrlUtilities.isInternalScheme(mParsedUrl); mIsInternalPage = UrlUtilities.isInternalScheme(mParsedUrl);
...@@ -434,22 +432,26 @@ public class PageInfoPopup implements OnClickListener, ModalDialogView.Controlle ...@@ -434,22 +432,26 @@ public class PageInfoPopup implements OnClickListener, ModalDialogView.Controlle
} }
mSecurityLevel = SecurityStateModel.getSecurityLevelForWebContents(mTab.getWebContents()); mSecurityLevel = SecurityStateModel.getSecurityLevelForWebContents(mTab.getWebContents());
SpannableStringBuilder urlBuilder = new SpannableStringBuilder(mFullUrl); String displayUrl = mFullUrl;
OmniboxUrlEmphasizer.emphasizeUrl(urlBuilder, mContext.getResources(), mTab.getProfile(), if (isShowingOfflinePage()) {
mSecurityLevel, mIsInternalPage, true, true); displayUrl = OfflinePageUtils.stripSchemeFromOnlineUrl(mFullUrl);
}
SpannableStringBuilder displayUrlBuilder = new SpannableStringBuilder(displayUrl);
OmniboxUrlEmphasizer.emphasizeUrl(displayUrlBuilder, mContext.getResources(),
mTab.getProfile(), mSecurityLevel, mIsInternalPage, true, true);
if (mSecurityLevel == ConnectionSecurityLevel.SECURE) { if (mSecurityLevel == ConnectionSecurityLevel.SECURE) {
OmniboxUrlEmphasizer.EmphasizeComponentsResponse emphasizeResponse = OmniboxUrlEmphasizer.EmphasizeComponentsResponse emphasizeResponse =
OmniboxUrlEmphasizer.parseForEmphasizeComponents( OmniboxUrlEmphasizer.parseForEmphasizeComponents(
mTab.getProfile(), urlBuilder.toString()); mTab.getProfile(), displayUrlBuilder.toString());
if (emphasizeResponse.schemeLength > 0) { if (emphasizeResponse.schemeLength > 0) {
urlBuilder.setSpan( displayUrlBuilder.setSpan(
new TextAppearanceSpan(mUrlTitle.getContext(), R.style.RobotoMediumStyle), new TextAppearanceSpan(mUrlTitle.getContext(), R.style.RobotoMediumStyle),
0, emphasizeResponse.schemeLength, Spannable.SPAN_EXCLUSIVE_INCLUSIVE); 0, emphasizeResponse.schemeLength, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
} }
} }
mUrlTitle.setText(urlBuilder); mUrlTitle.setText(displayUrlBuilder);
if (mParsedUrl == null || mParsedUrl.getScheme() == null if (mParsedUrl == null || mParsedUrl.getScheme() == null || isShowingOfflinePage()
|| !(mParsedUrl.getScheme().equals(UrlConstants.HTTP_SCHEME) || !(mParsedUrl.getScheme().equals(UrlConstants.HTTP_SCHEME)
|| mParsedUrl.getScheme().equals(UrlConstants.HTTPS_SCHEME))) { || mParsedUrl.getScheme().equals(UrlConstants.HTTPS_SCHEME))) {
mSiteSettingsButton.setVisibility(View.GONE); mSiteSettingsButton.setVisibility(View.GONE);
...@@ -1115,12 +1117,14 @@ public class PageInfoPopup implements OnClickListener, ModalDialogView.Controlle ...@@ -1115,12 +1117,14 @@ public class PageInfoPopup implements OnClickListener, ModalDialogView.Controlle
assert false : "Invalid source passed"; assert false : "Invalid source passed";
} }
String offlinePageUrl = null;
String offlinePageCreationDate = null; String offlinePageCreationDate = null;
@OfflinePageState @OfflinePageState
int offlinePageState = NOT_OFFLINE_PAGE; int offlinePageState = NOT_OFFLINE_PAGE;
OfflinePageItem offlinePage = OfflinePageUtils.getOfflinePage(tab); OfflinePageItem offlinePage = OfflinePageUtils.getOfflinePage(tab);
if (offlinePage != null) { if (offlinePage != null) {
offlinePageUrl = offlinePage.getUrl();
if (OfflinePageUtils.isShowingTrustedOfflinePage(tab)) { if (OfflinePageUtils.isShowingTrustedOfflinePage(tab)) {
offlinePageState = TRUSTED_OFFLINE_PAGE; offlinePageState = TRUSTED_OFFLINE_PAGE;
} else { } else {
...@@ -1137,8 +1141,8 @@ public class PageInfoPopup implements OnClickListener, ModalDialogView.Controlle ...@@ -1137,8 +1141,8 @@ public class PageInfoPopup implements OnClickListener, ModalDialogView.Controlle
} }
} }
new PageInfoPopup( new PageInfoPopup(activity, tab, offlinePageUrl, offlinePageCreationDate, offlinePageState,
activity, tab, offlinePageCreationDate, offlinePageState, contentPublisher); contentPublisher);
} }
private static native long nativeInit(PageInfoPopup popup, WebContents webContents); private static native long nativeInit(PageInfoPopup popup, WebContents webContents);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment