Commit f21c52ae authored by tsergeant's avatar tsergeant Committed by Commit bot

Add connection info popup within Page Info on Android.

Partial revert of 00e86ade

This is a revived version of WebsiteSettingsPopupLegacy, which contains
detailed connection and certificate information, similar to the desktop
website settings popup. The popup is accessed through a 'Details' link
in the page info popup.

BUG=425158

Review URL: https://codereview.chromium.org/1100283002

Cr-Commit-Position: refs/heads/master@{#327429}
parent 462f20fa
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2015 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape>
<solid android:color="#ebebeb" />
<stroke android:width="1dp" android:color="#cccccc" />
</shape>
</item>
<item>
<shape>
<solid android:color="#ffffff" />
<stroke android:width="1dp" android:color="#d9d9d9"/>
</shape>
</item>
</selector>
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2015 The Chromium Authors. All rights reserved.
Use of this source code is governed by a BSD-style license that can be
found in the LICENSE file.
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<ImageView
android:id="@+id/connection_info_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@null" />
<LinearLayout
android:id="@+id/connection_info_text_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingStart="@dimen/connection_info_padding_thin" >
<TextView
android:id="@+id/connection_info_headline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="@dimen/connection_info_padding_thin"
android:textStyle="bold"
android:textColor="@color/connection_info_popup_text" />
<TextView
android:id="@+id/connection_info_description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/connection_info_popup_text" />
</LinearLayout>
</LinearLayout>
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:lineSpacingExtra="3dp" android:lineSpacingExtra="3dp"
android:paddingTop="12dp" android:paddingTop="12dp"
android:textColor="#444444" android:textColor="@color/website_settings_popup_text"
android:textSize="14sp" /> android:textSize="14sp" />
<Button <Button
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_toEndOf="@id/website_settings_permission_icon" android:layout_toEndOf="@id/website_settings_permission_icon"
android:textColor="#444444" android:textColor="@color/website_settings_popup_text"
android:textSize="14sp" android:textSize="14sp"
android:textStyle="bold" /> android:textStyle="bold" />
......
...@@ -28,10 +28,16 @@ ...@@ -28,10 +28,16 @@
<!-- App banner colors --> <!-- App banner colors -->
<color name="app_banner_install_button_bg">#689f38</color> <color name="app_banner_install_button_bg">#689f38</color>
<!-- Website Settings Popup colors --> <!-- Connection Info Popup colors -->
<color name="connection_info_popup_reset_cert_decisions_button">#000000</color>
<color name="connection_info_popup_text">#444444</color>
<!-- Website Settings Popup colors -->
<color name="website_settings_popup_text">#444444</color>
<color name="website_settings_popup_button_text">#444444</color> <color name="website_settings_popup_button_text">#444444</color>
<color name="website_settings_connection_broken_leading_text">#db4437</color> <color name="website_settings_connection_broken_leading_text">#db4437</color>
<color name="website_settings_popup_permission_spinner_text">#646464</color> <color name="website_settings_popup_permission_spinner_text">#646464</color>
<color name="website_settings_popup_text_link">#4285f4</color>
<!-- URL Emphasizer colors --> <!-- URL Emphasizer colors -->
<color name="url_emphasis_start_scheme_security_warning">#ffb000</color> <color name="url_emphasis_start_scheme_security_warning">#ffb000</color>
......
...@@ -4,6 +4,10 @@ ...@@ -4,6 +4,10 @@
found in the LICENSE file. --> found in the LICENSE file. -->
<resources> <resources>
<!-- Connection info popup dimensions -->
<dimen name="connection_info_padding_wide">24dp</dimen>
<dimen name="connection_info_padding_thin">16dp</dimen>
<!-- Website Settings Popup Dimensions --> <!-- Website Settings Popup Dimensions -->
<dimen name="website_settings_popup_padding_sides">16dp</dimen> <dimen name="website_settings_popup_padding_sides">16dp</dimen>
<dimen name="website_settings_popup_button_height">36dp</dimen> <dimen name="website_settings_popup_button_height">36dp</dimen>
......
...@@ -15,6 +15,7 @@ import android.graphics.Color; ...@@ -15,6 +15,7 @@ import android.graphics.Color;
import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.ColorDrawable;
import android.text.Layout; import android.text.Layout;
import android.text.Spannable; import android.text.Spannable;
import android.text.SpannableString;
import android.text.SpannableStringBuilder; import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan; import android.text.style.ForegroundColorSpan;
import android.text.style.StyleSpan; import android.text.style.StyleSpan;
...@@ -383,6 +384,7 @@ public class WebsiteSettingsPopup implements OnClickListener, OnItemSelectedList ...@@ -383,6 +384,7 @@ public class WebsiteSettingsPopup implements OnClickListener, OnItemSelectedList
// Set the URL connection message now, and the URL after layout (so it // Set the URL connection message now, and the URL after layout (so it
// can calculate its ideal height). // can calculate its ideal height).
mUrlConnectionMessage.setText(getUrlConnectionMessage()); mUrlConnectionMessage.setText(getUrlConnectionMessage());
if (isConnectionDetailsLinkVisible()) mUrlConnectionMessage.setOnClickListener(this);
} }
/** /**
...@@ -453,6 +455,14 @@ public class WebsiteSettingsPopup implements OnClickListener, OnItemSelectedList ...@@ -453,6 +455,14 @@ public class WebsiteSettingsPopup implements OnClickListener, OnItemSelectedList
} }
} }
/**
* Whether to show a 'Details' link to the connection info popup. The link is only shown for
* HTTPS connections.
*/
private boolean isConnectionDetailsLinkVisible() {
return !mIsInternalPage && mSecurityLevel != ToolbarModelSecurityLevel.NONE;
}
/** /**
* Gets the styled connection message to display below the URL. * Gets the styled connection message to display below the URL.
*/ */
...@@ -488,6 +498,18 @@ public class WebsiteSettingsPopup implements OnClickListener, OnItemSelectedList ...@@ -488,6 +498,18 @@ public class WebsiteSettingsPopup implements OnClickListener, OnItemSelectedList
messageBuilder.setSpan(boldSpan, 0, leadingText.length(), messageBuilder.setSpan(boldSpan, 0, leadingText.length(),
Spannable.SPAN_INCLUSIVE_EXCLUSIVE); Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
} }
if (isConnectionDetailsLinkVisible()) {
messageBuilder.append(" ");
SpannableString detailsText = new SpannableString(
mContext.getResources().getString(R.string.page_info_details_link));
final ForegroundColorSpan blueSpan = new ForegroundColorSpan(
mContext.getResources().getColor(R.color.website_settings_popup_text_link));
detailsText.setSpan(
blueSpan, 0, detailsText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
messageBuilder.append(detailsText);
}
return messageBuilder; return messageBuilder;
} }
...@@ -609,6 +631,19 @@ public class WebsiteSettingsPopup implements OnClickListener, OnItemSelectedList ...@@ -609,6 +631,19 @@ public class WebsiteSettingsPopup implements OnClickListener, OnItemSelectedList
} else if (view == mUrlTitle) { } else if (view == mUrlTitle) {
// Expand/collapse the displayed URL title. // Expand/collapse the displayed URL title.
mUrlTitle.toggleTruncation(); mUrlTitle.toggleTruncation();
} else if (view == mUrlConnectionMessage) {
if (DeviceFormFactor.isTablet(mContext)) {
ConnectionInfoPopup.show(mContext, mWebContents);
} else {
// Delay while the WebsiteSettingsPopup closes.
mContainer.postDelayed(new Runnable() {
@Override
public void run() {
ConnectionInfoPopup.show(mContext, mWebContents);
}
}, FADE_DURATION + CLOSE_CLEANUP_DELAY);
}
mDialog.dismiss();
} }
} }
......
...@@ -1297,6 +1297,9 @@ You are signing in with a managed account and giving its administrator control o ...@@ -1297,6 +1297,9 @@ You are signing in with a managed account and giving its administrator control o
<message name="IDS_PAGE_INFO_PERMISSION_BLOCK" desc="The label used in the permissions dropdowns in the Page Info dialog on mobile for the option that denies a permission."> <message name="IDS_PAGE_INFO_PERMISSION_BLOCK" desc="The label used in the permissions dropdowns in the Page Info dialog on mobile for the option that denies a permission.">
Block Block
</message> </message>
<message name="IDS_PAGE_INFO_DETAILS_LINK" desc="The label of the link to open the detailed connection information popup from the page info bubble.">
Details
</message>
<message name="IDS_PAGE_INFO_CONNECTION_HTTPS" desc="Message to display in the page info bubble when the connection is private (HTTPS)."> <message name="IDS_PAGE_INFO_CONNECTION_HTTPS" desc="Message to display in the page info bubble when the connection is private (HTTPS).">
Your connection to this site is private. Your connection to this site is private.
</message> </message>
......
...@@ -87,7 +87,9 @@ ...@@ -87,7 +87,9 @@
#include "chrome/browser/ui/android/autofill/card_unmask_prompt_view_android.h" #include "chrome/browser/ui/android/autofill/card_unmask_prompt_view_android.h"
#include "chrome/browser/ui/android/autofill/credit_card_scanner_view_android.h" #include "chrome/browser/ui/android/autofill/credit_card_scanner_view_android.h"
#include "chrome/browser/ui/android/autofill/password_generation_popup_view_android.h" #include "chrome/browser/ui/android/autofill/password_generation_popup_view_android.h"
#include "chrome/browser/ui/android/certificate_viewer_android.h"
#include "chrome/browser/ui/android/chrome_http_auth_handler.h" #include "chrome/browser/ui/android/chrome_http_auth_handler.h"
#include "chrome/browser/ui/android/connection_info_popup_android.h"
#include "chrome/browser/ui/android/context_menu_helper.h" #include "chrome/browser/ui/android/context_menu_helper.h"
#include "chrome/browser/ui/android/infobars/account_chooser_infobar.h" #include "chrome/browser/ui/android/infobars/account_chooser_infobar.h"
#include "chrome/browser/ui/android/infobars/app_banner_infobar.h" #include "chrome/browser/ui/android/infobars/app_banner_infobar.h"
...@@ -162,6 +164,7 @@ static base::android::RegistrationMethod kChromeRegisteredMethods[] = { ...@@ -162,6 +164,7 @@ static base::android::RegistrationMethod kChromeRegisteredMethods[] = {
{"AutofillProfileBridge", autofill::RegisterAutofillProfileBridge}, {"AutofillProfileBridge", autofill::RegisterAutofillProfileBridge},
{"BookmarksBridge", BookmarksBridge::RegisterBookmarksBridge}, {"BookmarksBridge", BookmarksBridge::RegisterBookmarksBridge},
{"CardUnmaskPrompt", autofill::CardUnmaskPromptViewAndroid::Register}, {"CardUnmaskPrompt", autofill::CardUnmaskPromptViewAndroid::Register},
{"CertificateViewer", RegisterCertificateViewer},
{"ChildAccountFeedbackReporter", RegisterChildAccountFeedbackReporter}, {"ChildAccountFeedbackReporter", RegisterChildAccountFeedbackReporter},
{"ChildAccountService", RegisterChildAccountService}, {"ChildAccountService", RegisterChildAccountService},
{"ChromeBrowserProvider", {"ChromeBrowserProvider",
...@@ -172,6 +175,8 @@ static base::android::RegistrationMethod kChromeRegisteredMethods[] = { ...@@ -172,6 +175,8 @@ static base::android::RegistrationMethod kChromeRegisteredMethods[] = {
RegisterChromeWebContentsDelegateAndroid}, RegisterChromeWebContentsDelegateAndroid},
{"ChromiumApplication", ChromiumApplication::RegisterBindings}, {"ChromiumApplication", ChromiumApplication::RegisterBindings},
{"ConfirmInfoBarDelegate", RegisterConfirmInfoBarDelegate}, {"ConfirmInfoBarDelegate", RegisterConfirmInfoBarDelegate},
{"ConnectionInfoPopupAndroid",
ConnectionInfoPopupAndroid::RegisterConnectionInfoPopupAndroid},
{"ContentViewUtil", RegisterContentViewUtil}, {"ContentViewUtil", RegisterContentViewUtil},
{"ContextMenuHelper", RegisterContextMenuHelper}, {"ContextMenuHelper", RegisterContextMenuHelper},
{"CookiesFetcher", RegisterCookiesFetcher}, {"CookiesFetcher", RegisterCookiesFetcher},
......
...@@ -34,6 +34,26 @@ DEFINE_RESOURCE_ID(IDR_INFOBAR_TRANSLATE, R.drawable.infobar_translate) ...@@ -34,6 +34,26 @@ DEFINE_RESOURCE_ID(IDR_INFOBAR_TRANSLATE, R.drawable.infobar_translate)
DEFINE_RESOURCE_ID(IDR_BLOCKED_POPUPS, R.drawable.infobar_blocked_popups) DEFINE_RESOURCE_ID(IDR_BLOCKED_POPUPS, R.drawable.infobar_blocked_popups)
DEFINE_RESOURCE_ID(IDR_INFOBAR_FULLSCREEN, R.drawable.infobar_fullscreen) DEFINE_RESOURCE_ID(IDR_INFOBAR_FULLSCREEN, R.drawable.infobar_fullscreen)
// WebsiteSettingsUI images, used in ConnectionInfoPopup
// Good:
DEFINE_RESOURCE_ID(IDR_PAGEINFO_GOOD, R.drawable.pageinfo_good)
// Warnings:
DEFINE_RESOURCE_ID(IDR_PAGEINFO_WARNING_MINOR,\
R.drawable.pageinfo_warning)
// Bad:
DEFINE_RESOURCE_ID(IDR_PAGEINFO_BAD, R.drawable.pageinfo_bad)
// Should never occur, use warning just in case:
// Enterprise managed: ChromeOS only.
DEFINE_RESOURCE_ID(IDR_PAGEINFO_ENTERPRISE_MANAGED,\
R.drawable.pageinfo_warning)
// Info: Only shown on chrome:// urls, which don't show the connection info
// popup.
DEFINE_RESOURCE_ID(IDR_PAGEINFO_INFO, R.drawable.pageinfo_warning)
// Major warning: Used on insecure pages, which don't show the connection info
// popup.
DEFINE_RESOURCE_ID(IDR_PAGEINFO_WARNING_MAJOR,\
R.drawable.pageinfo_warning)
// Autofill popup images. // Autofill popup images.
DEFINE_RESOURCE_ID(IDR_AUTOFILL_CC_AMEX, R.drawable.amex_card) DEFINE_RESOURCE_ID(IDR_AUTOFILL_CC_AMEX, R.drawable.amex_card)
DEFINE_RESOURCE_ID(IDR_AUTOFILL_CC_DISCOVER, R.drawable.discover_card) DEFINE_RESOURCE_ID(IDR_AUTOFILL_CC_DISCOVER, R.drawable.discover_card)
......
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/android/certificate_viewer_android.h"
#include "base/android/jni_string.h"
#include "base/logging.h"
#include "chrome/grit/generated_resources.h"
#include "jni/CertificateViewer_jni.h"
#include "net/cert/x509_certificate.h"
#include "ui/base/l10n/l10n_util.h"
using base::android::ConvertUTF8ToJavaString;
using base::android::ScopedJavaLocalRef;
void ShowCertificateViewer(content::WebContents* web_contents,
gfx::NativeWindow parent,
net::X509Certificate* cert) {
// For Android, showing the certificate is always handled in Java.
NOTREACHED();
}
static jstring GetCertIssuedToText(JNIEnv* env, jclass) {
return ConvertUTF8ToJavaString(
env, l10n_util::GetStringUTF8(IDS_CERT_INFO_SUBJECT_GROUP)).Release();
}
static jstring GetCertInfoCommonNameText(JNIEnv* env, jclass) {
return ConvertUTF8ToJavaString(
env, l10n_util::GetStringUTF8(IDS_CERT_INFO_COMMON_NAME_LABEL)).Release();
}
static jstring GetCertInfoOrganizationText(JNIEnv* env, jclass) {
return ConvertUTF8ToJavaString(
env, l10n_util::GetStringUTF8(
IDS_CERT_INFO_ORGANIZATION_LABEL)).Release();
}
static jstring GetCertInfoSerialNumberText(JNIEnv* env, jclass) {
return ConvertUTF8ToJavaString(
env, l10n_util::GetStringUTF8(
IDS_CERT_INFO_SERIAL_NUMBER_LABEL)).Release();
}
static jstring GetCertInfoOrganizationUnitText(JNIEnv* env, jclass) {
return ConvertUTF8ToJavaString(
env, l10n_util::GetStringUTF8(
IDS_CERT_INFO_ORGANIZATIONAL_UNIT_LABEL)).Release();
}
static jstring GetCertIssuedByText(JNIEnv* env, jclass) {
return ConvertUTF8ToJavaString(
env, l10n_util::GetStringUTF8(IDS_CERT_INFO_ISSUER_GROUP)).Release();
}
static jstring GetCertValidityText(JNIEnv* env, jclass) {
return ConvertUTF8ToJavaString(
env, l10n_util::GetStringUTF8(IDS_CERT_INFO_VALIDITY_GROUP)).Release();
}
static jstring GetCertIssuedOnText(JNIEnv* env, jclass) {
return ConvertUTF8ToJavaString(
env, l10n_util::GetStringUTF8(IDS_CERT_INFO_ISSUED_ON_LABEL)).Release();
}
static jstring GetCertExpiresOnText(JNIEnv* env, jclass) {
return ConvertUTF8ToJavaString(
env, l10n_util::GetStringUTF8(IDS_CERT_INFO_EXPIRES_ON_LABEL)).Release();
}
static jstring GetCertFingerprintsText(JNIEnv* env, jclass) {
return ConvertUTF8ToJavaString(
env, l10n_util::GetStringUTF8(
IDS_CERT_INFO_FINGERPRINTS_GROUP)).Release();
}
static jstring GetCertSHA256FingerprintText(JNIEnv* env, jclass) {
return ConvertUTF8ToJavaString(
env, l10n_util::GetStringUTF8(
IDS_CERT_INFO_SHA256_FINGERPRINT_LABEL)).Release();
}
static jstring GetCertSHA1FingerprintText(JNIEnv* env, jclass) {
return ConvertUTF8ToJavaString(
env, l10n_util::GetStringUTF8(
IDS_CERT_INFO_SHA1_FINGERPRINT_LABEL)).Release();
}
bool RegisterCertificateViewer(JNIEnv* env) {
return RegisterNativesImpl(env);
}
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_ANDROID_CERTIFICATE_VIEWER_ANDROID_H_
#define CHROME_BROWSER_UI_ANDROID_CERTIFICATE_VIEWER_ANDROID_H_
#include "chrome/browser/certificate_viewer.h"
#include <jni.h>
bool RegisterCertificateViewer(JNIEnv* env);
#endif // CHROME_BROWSER_UI_ANDROID_CERTIFICATE_VIEWER_ANDROID_H_
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/android/connection_info_popup_android.h"
#include "base/android/jni_android.h"
#include "base/android/jni_array.h"
#include "base/android/jni_string.h"
#include "chrome/browser/android/resource_mapper.h"
#include "chrome/browser/infobars/infobar_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/website_settings/website_settings.h"
#include "chrome/grit/generated_resources.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/cert_store.h"
#include "content/public/browser/navigation_controller.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/ssl_status.h"
#include "jni/ConnectionInfoPopup_jni.h"
#include "net/cert/x509_certificate.h"
#include "ui/base/l10n/l10n_util.h"
using base::android::CheckException;
using base::android::ConvertUTF8ToJavaString;
using base::android::ConvertUTF16ToJavaString;
using base::android::GetClass;
using base::android::ScopedJavaLocalRef;
using content::CertStore;
using content::WebContents;
static jobjectArray GetCertificateChain(JNIEnv* env,
jobject obj,
jobject java_web_contents) {
content::WebContents* web_contents =
content::WebContents::FromJavaWebContents(java_web_contents);
if (!web_contents)
return NULL;
int cert_id =
web_contents->GetController().GetVisibleEntry()->GetSSL().cert_id;
scoped_refptr<net::X509Certificate> cert;
bool ok = CertStore::GetInstance()->RetrieveCert(cert_id, &cert);
CHECK(ok);
std::vector<std::string> cert_chain;
net::X509Certificate::OSCertHandles cert_handles =
cert->GetIntermediateCertificates();
// Make sure the peer's own cert is the first in the chain, if it's not
// already there.
if (cert_handles.empty() || cert_handles[0] != cert->os_cert_handle())
cert_handles.insert(cert_handles.begin(), cert->os_cert_handle());
cert_chain.reserve(cert_handles.size());
for (net::X509Certificate::OSCertHandles::const_iterator it =
cert_handles.begin();
it != cert_handles.end();
++it) {
std::string cert_bytes;
net::X509Certificate::GetDEREncoded(*it, &cert_bytes);
cert_chain.push_back(cert_bytes);
}
// OK to release, JNI binding.
return base::android::ToJavaArrayOfByteArray(env, cert_chain).Release();
}
// static
static jlong Init(JNIEnv* env,
jclass clazz,
jobject obj,
jobject java_web_contents) {
content::WebContents* web_contents =
content::WebContents::FromJavaWebContents(java_web_contents);
return reinterpret_cast<intptr_t>(
new ConnectionInfoPopupAndroid(env, obj, web_contents));
}
ConnectionInfoPopupAndroid::ConnectionInfoPopupAndroid(
JNIEnv* env,
jobject java_website_settings_pop,
WebContents* web_contents) {
// Important to use GetVisibleEntry to match what's showing in the omnibox.
content::NavigationEntry* nav_entry =
web_contents->GetController().GetVisibleEntry();
if (nav_entry == NULL)
return;
popup_jobject_.Reset(env, java_website_settings_pop);
presenter_.reset(new WebsiteSettings(
this,
Profile::FromBrowserContext(web_contents->GetBrowserContext()),
TabSpecificContentSettings::FromWebContents(web_contents),
InfoBarService::FromWebContents(web_contents),
nav_entry->GetURL(),
nav_entry->GetSSL(),
content::CertStore::GetInstance()));
}
ConnectionInfoPopupAndroid::~ConnectionInfoPopupAndroid() {
}
void ConnectionInfoPopupAndroid::Destroy(JNIEnv* env, jobject obj) {
delete this;
}
void ConnectionInfoPopupAndroid::ResetCertDecisions(
JNIEnv* env,
jobject obj,
jobject java_web_contents) {
presenter_->OnRevokeSSLErrorBypassButtonPressed();
}
void ConnectionInfoPopupAndroid::SetIdentityInfo(
const IdentityInfo& identity_info) {
JNIEnv* env = base::android::AttachCurrentThread();
{
int icon_id = ResourceMapper::MapFromChromiumId(
WebsiteSettingsUI::GetIdentityIconID(identity_info.identity_status));
// The headline and the certificate dialog link of the site's identity
// section is only displayed if the site's identity was verified. If the
// site's identity was verified, then the headline contains the organization
// name from the provided certificate. If the organization name is not
// available than the hostname of the site is used instead.
std::string headline;
if (identity_info.cert_id) {
headline = identity_info.site_identity;
}
ScopedJavaLocalRef<jstring> description =
ConvertUTF8ToJavaString(env, identity_info.identity_status_description);
base::string16 certificate_label =
l10n_util::GetStringUTF16(IDS_PAGEINFO_CERT_INFO_BUTTON);
Java_ConnectionInfoPopup_addCertificateSection(
env,
popup_jobject_.obj(),
icon_id,
ConvertUTF8ToJavaString(env, headline).obj(),
description.obj(),
ConvertUTF16ToJavaString(env, certificate_label).obj());
if (identity_info.show_ssl_decision_revoke_button) {
base::string16 reset_button_label = l10n_util::GetStringUTF16(
IDS_PAGEINFO_RESET_INVALID_CERTIFICATE_DECISIONS_BUTTON);
Java_ConnectionInfoPopup_addResetCertDecisionsButton(
env,
popup_jobject_.obj(),
ConvertUTF16ToJavaString(env, reset_button_label).obj());
}
}
{
int icon_id = ResourceMapper::MapFromChromiumId(
WebsiteSettingsUI::GetConnectionIconID(
identity_info.connection_status));
ScopedJavaLocalRef<jstring> description = ConvertUTF8ToJavaString(
env, identity_info.connection_status_description);
Java_ConnectionInfoPopup_addDescriptionSection(
env, popup_jobject_.obj(), icon_id, NULL, description.obj());
}
Java_ConnectionInfoPopup_addMoreInfoLink(
env,
popup_jobject_.obj(),
ConvertUTF8ToJavaString(
env, l10n_util::GetStringUTF8(IDS_PAGE_INFO_HELP_CENTER_LINK)).obj());
Java_ConnectionInfoPopup_showDialog(env, popup_jobject_.obj());
}
void ConnectionInfoPopupAndroid::SetCookieInfo(
const CookieInfoList& cookie_info_list) {
NOTIMPLEMENTED();
}
void ConnectionInfoPopupAndroid::SetPermissionInfo(
const PermissionInfoList& permission_info_list) {
NOTIMPLEMENTED();
}
void ConnectionInfoPopupAndroid::SetSelectedTab(
WebsiteSettingsUI::TabId tab_id) {
// There's no tab UI on Android - only connection info is shown.
NOTIMPLEMENTED();
}
void ConnectionInfoPopupAndroid::SetFirstVisit(
const base::string16& first_visit) {
NOTIMPLEMENTED();
}
// static
bool
ConnectionInfoPopupAndroid::RegisterConnectionInfoPopupAndroid(
JNIEnv* env) {
return RegisterNativesImpl(env);
}
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_UI_ANDROID_CONNECTION_INFO_POPUP_ANDROID_H_
#define CHROME_BROWSER_UI_ANDROID_CONNECTION_INFO_POPUP_ANDROID_H_
#include <jni.h>
#include "base/android/scoped_java_ref.h"
#include "base/basictypes.h"
#include "base/memory/scoped_ptr.h"
#include "chrome/browser/ui/website_settings/website_settings_ui.h"
namespace content {
class WebContents;
}
// Android implementation of the website settings UI which displays detailed
// connection and certificate information for the website.
class ConnectionInfoPopupAndroid : public WebsiteSettingsUI {
public:
ConnectionInfoPopupAndroid(JNIEnv* env,
jobject java_website_settings,
content::WebContents* web_contents);
~ConnectionInfoPopupAndroid() override;
void Destroy(JNIEnv* env, jobject obj);
// Revokes any current user exceptions for bypassing SSL error interstitials
// on this page.
void ResetCertDecisions(JNIEnv* env, jobject obj, jobject java_web_contents);
// WebsiteSettingsUI implementations.
void SetCookieInfo(const CookieInfoList& cookie_info_list) override;
void SetPermissionInfo(
const PermissionInfoList& permission_info_list) override;
void SetIdentityInfo(const IdentityInfo& identity_info) override;
void SetFirstVisit(const base::string16& first_visit) override;
void SetSelectedTab(WebsiteSettingsUI::TabId tab_id) override;
static bool RegisterConnectionInfoPopupAndroid(JNIEnv* env);
private:
// The presenter that controlls the Website Settings UI.
scoped_ptr<WebsiteSettings> presenter_;
// The java prompt implementation.
base::android::ScopedJavaGlobalRef<jobject> popup_jobject_;
DISALLOW_COPY_AND_ASSIGN(ConnectionInfoPopupAndroid);
};
#endif // CHROME_BROWSER_UI_ANDROID_CONNECTION_INFO_POPUP_ANDROID_H_
...@@ -1634,6 +1634,7 @@ ...@@ -1634,6 +1634,7 @@
'android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManager.java', 'android/java/src/org/chromium/chrome/browser/autofill/PersonalDataManager.java',
'android/java/src/org/chromium/chrome/browser/BookmarksBridge.java', 'android/java/src/org/chromium/chrome/browser/BookmarksBridge.java',
'android/java/src/org/chromium/chrome/browser/banners/AppBannerManager.java', 'android/java/src/org/chromium/chrome/browser/banners/AppBannerManager.java',
'android/java/src/org/chromium/chrome/browser/CertificateViewer.java',
'android/java/src/org/chromium/chrome/browser/child_accounts/ChildAccountService.java', 'android/java/src/org/chromium/chrome/browser/child_accounts/ChildAccountService.java',
'android/java/src/org/chromium/chrome/browser/child_accounts/ChildAccountFeedbackReporter.java', 'android/java/src/org/chromium/chrome/browser/child_accounts/ChildAccountFeedbackReporter.java',
'android/java/src/org/chromium/chrome/browser/ChromiumApplication.java', 'android/java/src/org/chromium/chrome/browser/ChromiumApplication.java',
...@@ -1645,6 +1646,7 @@ ...@@ -1645,6 +1646,7 @@
'android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TabContentManager.java', 'android/java/src/org/chromium/chrome/browser/compositor/layouts/content/TabContentManager.java',
'android/java/src/org/chromium/chrome/browser/compositor/scene_layer/SceneLayer.java', 'android/java/src/org/chromium/chrome/browser/compositor/scene_layer/SceneLayer.java',
'android/java/src/org/chromium/chrome/browser/compositor/scene_layer/StaticTabSceneLayer.java', 'android/java/src/org/chromium/chrome/browser/compositor/scene_layer/StaticTabSceneLayer.java',
'android/java/src/org/chromium/chrome/browser/ConnectionInfoPopup.java',
'android/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuHelper.java', 'android/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuHelper.java',
'android/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuParams.java', 'android/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuParams.java',
'android/java/src/org/chromium/chrome/browser/cookies/CookiesFetcher.java', 'android/java/src/org/chromium/chrome/browser/cookies/CookiesFetcher.java',
......
...@@ -30,6 +30,8 @@ ...@@ -30,6 +30,8 @@
'browser/ui/android/chrome_http_auth_handler.cc', 'browser/ui/android/chrome_http_auth_handler.cc',
'browser/ui/android/chrome_http_auth_handler.h', 'browser/ui/android/chrome_http_auth_handler.h',
'browser/ui/android/color_chooser_dialog_android.cc', 'browser/ui/android/color_chooser_dialog_android.cc',
'browser/ui/android/connection_info_popup_android.cc',
'browser/ui/android/connection_info_popup_android.h',
'browser/ui/android/content_settings/popup_blocked_infobar_delegate.cc', 'browser/ui/android/content_settings/popup_blocked_infobar_delegate.cc',
'browser/ui/android/content_settings/popup_blocked_infobar_delegate.h', 'browser/ui/android/content_settings/popup_blocked_infobar_delegate.h',
'browser/ui/android/context_menu_helper.cc', 'browser/ui/android/context_menu_helper.cc',
...@@ -51,6 +53,8 @@ ...@@ -51,6 +53,8 @@
'browser/ui/android/infobars/save_password_infobar.h', 'browser/ui/android/infobars/save_password_infobar.h',
'browser/ui/android/infobars/translate_infobar.cc', 'browser/ui/android/infobars/translate_infobar.cc',
'browser/ui/android/infobars/translate_infobar.h', 'browser/ui/android/infobars/translate_infobar.h',
'browser/ui/android/certificate_viewer_android.cc',
'browser/ui/android/certificate_viewer_android.h',
'browser/ui/android/javascript_app_modal_dialog_android.cc', 'browser/ui/android/javascript_app_modal_dialog_android.cc',
'browser/ui/android/login_prompt_android.cc', 'browser/ui/android/login_prompt_android.cc',
'browser/ui/android/navigation_popup.cc', 'browser/ui/android/navigation_popup.cc',
......
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