Commit bac3869c authored by Robert Ogden's avatar Robert Ogden Committed by Commit Bot

HTTPS Server Previews: Show the original URL on Android while pending

While a navigation is pending, show the original URL if the browser is
navigating to the previews server.

Reworks the GetOriginal APIs in the Previews bridge to support a plain-
string impl since checking for a committed preview won't work while the
navigation is pending.

Bug: 894881
Change-Id: Ic8ffd3e16b270dd69efb7a62128265629a5b9de2
Reviewed-on: https://chromium-review.googlesource.com/c/1330761Reviewed-by: default avatarTheresa <twellington@chromium.org>
Reviewed-by: default avatarDoug Arnett <dougarnett@chromium.org>
Commit-Queue: Robert Ogden <robertogden@chromium.org>
Cr-Commit-Position: refs/heads/master@{#607352}
parent 1ab94ee7
...@@ -341,7 +341,8 @@ public class PageInfoController ...@@ -341,7 +341,8 @@ public class PageInfoController
bridge.loadOriginal(mTab.getWebContents()); bridge.loadOriginal(mTab.getWebContents());
}); });
}; };
final String previewOriginalHost = bridge.getOriginalHost(mTab.getWebContents()); final String previewOriginalHost =
bridge.getOriginalHost(mTab.getWebContents().getVisibleUrl());
final String loadOriginalText = mContext.getString( final String loadOriginalText = mContext.getString(
R.string.page_info_preview_load_original, previewOriginalHost); R.string.page_info_preview_load_original, previewOriginalHost);
final SpannableString loadOriginalSpan = SpanApplier.applySpans(loadOriginalText, final SpannableString loadOriginalSpan = SpanApplier.applySpans(loadOriginalText,
......
...@@ -6,6 +6,9 @@ package org.chromium.chrome.browser.previews; ...@@ -6,6 +6,9 @@ package org.chromium.chrome.browser.previews;
import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.WebContents;
import java.net.URI;
import java.net.URISyntaxException;
/** /**
* Java bridge class to C++ Previews code. * Java bridge class to C++ Previews code.
*/ */
...@@ -30,11 +33,25 @@ public final class PreviewsAndroidBridge { ...@@ -30,11 +33,25 @@ public final class PreviewsAndroidBridge {
} }
/** /**
* Returns the origin host name of the preview being shown. * Returns the original host name for visibleURL. This should only be used on preview pages.
*/ */
public String getOriginalHost(WebContents webContents) { public String getOriginalHost(String visibleURL) {
assert shouldShowPreviewUI(webContents) : "getOriginalHost called on a non-preview page"; try {
return nativeGetOriginalHost(mNativePreviewsAndroidBridge, webContents); return new URI(getOriginalURL(visibleURL)).getHost();
} catch (URISyntaxException e) {
}
return "";
}
/**
* Returns the original URL of the given visible URL if the given URL is for a HTTPS Server
* Preview. Otherwise, the given visibleURL is returned.
*/
public String getOriginalURL(String visibleURL) {
final String originalURL =
nativeGetLitePageRedirectOriginalURL(mNativePreviewsAndroidBridge, visibleURL);
if (originalURL == null) return visibleURL;
return originalURL;
} }
/** /**
...@@ -65,8 +82,8 @@ public final class PreviewsAndroidBridge { ...@@ -65,8 +82,8 @@ public final class PreviewsAndroidBridge {
private native long nativeInit(); private native long nativeInit();
private native boolean nativeShouldShowPreviewUI( private native boolean nativeShouldShowPreviewUI(
long nativePreviewsAndroidBridge, WebContents webContents); long nativePreviewsAndroidBridge, WebContents webContents);
private native String nativeGetOriginalHost( private native String nativeGetLitePageRedirectOriginalURL(
long nativePreviewsAndroidBridge, WebContents webContents); long nativePreviewsAndroidBridge, String visibleURL);
private native String nativeGetStalePreviewTimestamp( private native String nativeGetStalePreviewTimestamp(
long nativePreviewsAndroidBridge, WebContents webContents); long nativePreviewsAndroidBridge, WebContents webContents);
private native void nativeLoadOriginal( private native void nativeLoadOriginal(
......
...@@ -28,6 +28,7 @@ import org.chromium.chrome.browser.offlinepages.OfflinePageUtils; ...@@ -28,6 +28,7 @@ import org.chromium.chrome.browser.offlinepages.OfflinePageUtils;
import org.chromium.chrome.browser.omnibox.OmniboxUrlEmphasizer; import org.chromium.chrome.browser.omnibox.OmniboxUrlEmphasizer;
import org.chromium.chrome.browser.omnibox.QueryInOmnibox; import org.chromium.chrome.browser.omnibox.QueryInOmnibox;
import org.chromium.chrome.browser.omnibox.UrlBarData; import org.chromium.chrome.browser.omnibox.UrlBarData;
import org.chromium.chrome.browser.previews.PreviewsAndroidBridge;
import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.Tab;
import org.chromium.chrome.browser.util.ColorUtils; import org.chromium.chrome.browser.util.ColorUtils;
...@@ -162,8 +163,18 @@ public class LocationBarModel implements ToolbarDataProvider { ...@@ -162,8 +163,18 @@ public class LocationBarModel implements ToolbarDataProvider {
return buildUrlBarData(url, formattedUrl); return buildUrlBarData(url, formattedUrl);
} }
// A preview URL may be shown before commit when isPreview() would first return true. Always
// check if the visible URL is a preview, and if so, rewrite it.
final String previewsOriginalURL = PreviewsAndroidBridge.getInstance().getOriginalURL(url);
if (!previewsOriginalURL.equals(url)) {
// Strip the scheme if this is a committed preview.
return buildUrlBarData(previewsOriginalURL,
isPreview() ? UrlUtilities.stripScheme(previewsOriginalURL)
: previewsOriginalURL);
}
// Strip the scheme from committed preview pages only.
if (isPreview()) { if (isPreview()) {
// Strip the scheme from the original URL for the Previews UI.
return buildUrlBarData(url, UrlUtilities.stripScheme(url)); return buildUrlBarData(url, UrlUtilities.stripScheme(url));
} }
......
...@@ -50,26 +50,19 @@ jboolean PreviewsAndroidBridge::ShouldShowPreviewUI( ...@@ -50,26 +50,19 @@ jboolean PreviewsAndroidBridge::ShouldShowPreviewUI(
} }
base::android::ScopedJavaLocalRef<jstring> base::android::ScopedJavaLocalRef<jstring>
PreviewsAndroidBridge::GetOriginalHost( PreviewsAndroidBridge::GetLitePageRedirectOriginalURL(
JNIEnv* env, JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj, const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jobject>& j_web_contents) { const base::android::JavaParamRef<jstring>& j_visible_url) {
content::WebContents* web_contents = GURL visible_url(base::android::ConvertJavaStringToUTF16(env, j_visible_url));
content::WebContents::FromJavaWebContents(j_web_contents);
if (!web_contents)
return base::android::ScopedJavaLocalRef<jstring>();
GURL visible_url = web_contents->GetVisibleURL();
std::string original_url; std::string original_url;
if (PreviewsLitePageNavigationThrottle::GetOriginalURL(visible_url, if (PreviewsLitePageNavigationThrottle::GetOriginalURL(visible_url,
&original_url)) { &original_url)) {
return base::android::ScopedJavaLocalRef<jstring>( return base::android::ScopedJavaLocalRef<jstring>(
base::android::ConvertUTF8ToJavaString(env, GURL(original_url).host())); base::android::ConvertUTF8ToJavaString(env, original_url));
} }
return base::android::ScopedJavaLocalRef<jstring>( return nullptr;
base::android::ConvertUTF8ToJavaString(env, visible_url.host()));
} }
base::android::ScopedJavaLocalRef<jstring> base::android::ScopedJavaLocalRef<jstring>
......
...@@ -23,10 +23,10 @@ class PreviewsAndroidBridge { ...@@ -23,10 +23,10 @@ class PreviewsAndroidBridge {
const base::android::JavaParamRef<jobject>& obj, const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jobject>& j_web_contents); const base::android::JavaParamRef<jobject>& j_web_contents);
base::android::ScopedJavaLocalRef<jstring> GetOriginalHost( base::android::ScopedJavaLocalRef<jstring> GetLitePageRedirectOriginalURL(
JNIEnv* env, JNIEnv* env,
const base::android::JavaParamRef<jobject>& obj, const base::android::JavaParamRef<jobject>& obj,
const base::android::JavaParamRef<jobject>& j_web_contents); const base::android::JavaParamRef<jstring>& j_visisble_url);
base::android::ScopedJavaLocalRef<jstring> GetStalePreviewTimestamp( base::android::ScopedJavaLocalRef<jstring> GetStalePreviewTimestamp(
JNIEnv* env, JNIEnv* env,
......
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