| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 package org.chromium.chrome.browser; | 5 package org.chromium.chrome.browser; |
| 6 | 6 |
| 7 import android.animation.Animator; | 7 import android.animation.Animator; |
| 8 import android.animation.AnimatorListenerAdapter; | 8 import android.animation.AnimatorListenerAdapter; |
| 9 import android.animation.AnimatorSet; | 9 import android.animation.AnimatorSet; |
| 10 import android.animation.ObjectAnimator; | 10 import android.animation.ObjectAnimator; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 import android.widget.ImageView; | 34 import android.widget.ImageView; |
| 35 import android.widget.LinearLayout; | 35 import android.widget.LinearLayout; |
| 36 import android.widget.ScrollView; | 36 import android.widget.ScrollView; |
| 37 import android.widget.Spinner; | 37 import android.widget.Spinner; |
| 38 import android.widget.TextView; | 38 import android.widget.TextView; |
| 39 | 39 |
| 40 import org.chromium.base.CalledByNative; | 40 import org.chromium.base.CalledByNative; |
| 41 import org.chromium.chrome.R; | 41 import org.chromium.chrome.R; |
| 42 import org.chromium.chrome.browser.omnibox.OmniboxUrlEmphasizer; | 42 import org.chromium.chrome.browser.omnibox.OmniboxUrlEmphasizer; |
| 43 import org.chromium.chrome.browser.profiles.Profile; | 43 import org.chromium.chrome.browser.profiles.Profile; |
| 44 import org.chromium.chrome.browser.ssl.ConnectionSecurityHelper; |
| 45 import org.chromium.chrome.browser.ssl.ConnectionSecurityHelperSecurityLevel; |
| 44 import org.chromium.chrome.browser.toolbar.ToolbarModel; | 46 import org.chromium.chrome.browser.toolbar.ToolbarModel; |
| 45 import org.chromium.chrome.browser.ui.toolbar.ToolbarModelSecurityLevel; | |
| 46 import org.chromium.content_public.browser.WebContents; | 47 import org.chromium.content_public.browser.WebContents; |
| 47 import org.chromium.content_public.browser.WebContentsObserver; | 48 import org.chromium.content_public.browser.WebContentsObserver; |
| 48 import org.chromium.ui.base.Clipboard; | 49 import org.chromium.ui.base.Clipboard; |
| 49 import org.chromium.ui.base.DeviceFormFactor; | 50 import org.chromium.ui.base.DeviceFormFactor; |
| 50 import org.chromium.ui.interpolators.BakedBezierInterpolator; | 51 import org.chromium.ui.interpolators.BakedBezierInterpolator; |
| 51 | 52 |
| 52 import java.net.URI; | 53 import java.net.URI; |
| 53 import java.net.URISyntaxException; | 54 import java.net.URISyntaxException; |
| 54 import java.util.ArrayList; | 55 import java.util.ArrayList; |
| 55 import java.util.Arrays; | 56 import java.util.Arrays; |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 236 private String mFullUrl; | 237 private String mFullUrl; |
| 237 | 238 |
| 238 // A parsed version of mFullUrl. Is null if the URL is invalid/cannot be | 239 // A parsed version of mFullUrl. Is null if the URL is invalid/cannot be |
| 239 // parsed. | 240 // parsed. |
| 240 private URI mParsedUrl; | 241 private URI mParsedUrl; |
| 241 | 242 |
| 242 // Whether or not this page is an internal chrome page (e.g. the | 243 // Whether or not this page is an internal chrome page (e.g. the |
| 243 // chrome://settings page). | 244 // chrome://settings page). |
| 244 private boolean mIsInternalPage; | 245 private boolean mIsInternalPage; |
| 245 | 246 |
| 246 // The security level of the page (a valid ToolbarModelSecurityLevel). | 247 // The security level of the page (a valid ConnectionSecurityHelperSecurityL
evel). |
| 247 private int mSecurityLevel; | 248 private int mSecurityLevel; |
| 248 | 249 |
| 249 // Whether the security level of the page was deprecated due to SHA-1. | 250 // Whether the security level of the page was deprecated due to SHA-1. |
| 250 private boolean mDeprecatedSHA1Present; | 251 private boolean mDeprecatedSHA1Present; |
| 251 | 252 |
| 252 /** | 253 /** |
| 253 * Creates the WebsiteSettingsPopup, but does not display it. Also initializ
es the corresponding | 254 * Creates the WebsiteSettingsPopup, but does not display it. Also initializ
es the corresponding |
| 254 * C++ object and saves a pointer to it. | 255 * C++ object and saves a pointer to it. |
| 255 * | 256 * |
| 256 * @param context Context which is used for launching a dialog. | 257 * @param context Context which is used for launching a dialog. |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 368 | 369 |
| 369 // Work out the URL and connection message. | 370 // Work out the URL and connection message. |
| 370 mFullUrl = mWebContents.getVisibleUrl(); | 371 mFullUrl = mWebContents.getVisibleUrl(); |
| 371 try { | 372 try { |
| 372 mParsedUrl = new URI(mFullUrl); | 373 mParsedUrl = new URI(mFullUrl); |
| 373 mIsInternalPage = UrlUtilities.isInternalScheme(mParsedUrl); | 374 mIsInternalPage = UrlUtilities.isInternalScheme(mParsedUrl); |
| 374 } catch (URISyntaxException e) { | 375 } catch (URISyntaxException e) { |
| 375 mParsedUrl = null; | 376 mParsedUrl = null; |
| 376 mIsInternalPage = false; | 377 mIsInternalPage = false; |
| 377 } | 378 } |
| 378 mSecurityLevel = ToolbarModel.getSecurityLevelForWebContents(mWebContent
s); | 379 mSecurityLevel = ConnectionSecurityHelper.getSecurityLevelForWebContents
(mWebContents); |
| 379 mDeprecatedSHA1Present = ToolbarModel.isDeprecatedSHA1Present(mWebConten
ts); | 380 mDeprecatedSHA1Present = ToolbarModel.isDeprecatedSHA1Present(mWebConten
ts); |
| 380 | 381 |
| 381 SpannableStringBuilder urlBuilder = new SpannableStringBuilder(mFullUrl)
; | 382 SpannableStringBuilder urlBuilder = new SpannableStringBuilder(mFullUrl)
; |
| 382 OmniboxUrlEmphasizer.emphasizeUrl(urlBuilder, mContext.getResources(), m
Profile, | 383 OmniboxUrlEmphasizer.emphasizeUrl(urlBuilder, mContext.getResources(), m
Profile, |
| 383 mSecurityLevel, mIsInternalPage, true); | 384 mSecurityLevel, mIsInternalPage, true); |
| 384 mUrlTitle.setText(urlBuilder); | 385 mUrlTitle.setText(urlBuilder); |
| 385 | 386 |
| 386 // Set the URL connection message now, and the URL after layout (so it | 387 // Set the URL connection message now, and the URL after layout (so it |
| 387 // can calculate its ideal height). | 388 // can calculate its ideal height). |
| 388 mUrlConnectionMessage.setText(getUrlConnectionMessage()); | 389 mUrlConnectionMessage.setText(getUrlConnectionMessage()); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 426 default: | 427 default: |
| 427 assert false : "Icon requested for invalid permission: " + permi
ssion; | 428 assert false : "Icon requested for invalid permission: " + permi
ssion; |
| 428 return -1; | 429 return -1; |
| 429 } | 430 } |
| 430 } | 431 } |
| 431 | 432 |
| 432 /** | 433 /** |
| 433 * Gets the message to display in the connection message box for the given s
ecurity level. Does | 434 * Gets the message to display in the connection message box for the given s
ecurity level. Does |
| 434 * not apply to SECURITY_ERROR pages, since these have their own coloured/fo
rmatted message. | 435 * not apply to SECURITY_ERROR pages, since these have their own coloured/fo
rmatted message. |
| 435 * | 436 * |
| 436 * @param toolbarModelSecurityLevel A valid ToolbarModelSecurityLevel, which
is the security | 437 * @param securityLevel A valid ConnectionSecurityHelperSecurityLevel, which
is the security |
| 437 * level of the page. | 438 * level of the page. |
| 438 * @param isInternalPage Whether or not this page is an internal chrome page
(e.g. the | 439 * @param isInternalPage Whether or not this page is an internal chrome page
(e.g. the |
| 439 * chrome://settings page). | 440 * chrome://settings page). |
| 440 * @return The ID of the message to display in the connection message box. | 441 * @return The ID of the message to display in the connection message box. |
| 441 */ | 442 */ |
| 442 private int getConnectionMessageId(int toolbarModelSecurityLevel, boolean is
InternalPage) { | 443 private int getConnectionMessageId(int securityLevel, boolean isInternalPage
) { |
| 443 if (isInternalPage) return R.string.page_info_connection_internal_page; | 444 if (isInternalPage) return R.string.page_info_connection_internal_page; |
| 444 | 445 |
| 445 switch (toolbarModelSecurityLevel) { | 446 switch (securityLevel) { |
| 446 case ToolbarModelSecurityLevel.NONE: | 447 case ConnectionSecurityHelperSecurityLevel.NONE: |
| 447 return R.string.page_info_connection_http; | 448 return R.string.page_info_connection_http; |
| 448 case ToolbarModelSecurityLevel.SECURE: | 449 case ConnectionSecurityHelperSecurityLevel.SECURE: |
| 449 case ToolbarModelSecurityLevel.EV_SECURE: | 450 case ConnectionSecurityHelperSecurityLevel.EV_SECURE: |
| 450 return R.string.page_info_connection_https; | 451 return R.string.page_info_connection_https; |
| 451 case ToolbarModelSecurityLevel.SECURITY_WARNING: | 452 case ConnectionSecurityHelperSecurityLevel.SECURITY_WARNING: |
| 452 case ToolbarModelSecurityLevel.SECURITY_POLICY_WARNING: | 453 case ConnectionSecurityHelperSecurityLevel.SECURITY_POLICY_WARNING: |
| 453 return R.string.page_info_connection_mixed; | 454 return R.string.page_info_connection_mixed; |
| 454 default: | 455 default: |
| 455 assert false : "Invalid security level specified: " + toolbarMod
elSecurityLevel; | 456 assert false : "Invalid security level specified: " + securityLe
vel; |
| 456 return R.string.page_info_connection_http; | 457 return R.string.page_info_connection_http; |
| 457 } | 458 } |
| 458 } | 459 } |
| 459 | 460 |
| 460 /** | 461 /** |
| 461 * Whether to show a 'Details' link to the connection info popup. The link i
s only shown for | 462 * Whether to show a 'Details' link to the connection info popup. The link i
s only shown for |
| 462 * HTTPS connections. | 463 * HTTPS connections. |
| 463 */ | 464 */ |
| 464 private boolean isConnectionDetailsLinkVisible() { | 465 private boolean isConnectionDetailsLinkVisible() { |
| 465 return !mIsInternalPage && mSecurityLevel != ToolbarModelSecurityLevel.N
ONE; | 466 return !mIsInternalPage && mSecurityLevel != ConnectionSecurityHelperSec
urityLevel.NONE; |
| 466 } | 467 } |
| 467 | 468 |
| 468 /** | 469 /** |
| 469 * Gets the styled connection message to display below the URL. | 470 * Gets the styled connection message to display below the URL. |
| 470 */ | 471 */ |
| 471 private Spannable getUrlConnectionMessage() { | 472 private Spannable getUrlConnectionMessage() { |
| 472 // Display the appropriate connection message. | 473 // Display the appropriate connection message. |
| 473 SpannableStringBuilder messageBuilder = new SpannableStringBuilder(); | 474 SpannableStringBuilder messageBuilder = new SpannableStringBuilder(); |
| 474 if (mDeprecatedSHA1Present) { | 475 if (mDeprecatedSHA1Present) { |
| 475 messageBuilder.append( | 476 messageBuilder.append( |
| 476 mContext.getResources().getString(R.string.page_info_connect
ion_sha1)); | 477 mContext.getResources().getString(R.string.page_info_connect
ion_sha1)); |
| 477 } else if (mSecurityLevel != ToolbarModelSecurityLevel.SECURITY_ERROR) { | 478 } else if (mSecurityLevel != ConnectionSecurityHelperSecurityLevel.SECUR
ITY_ERROR) { |
| 478 messageBuilder.append(mContext.getResources().getString( | 479 messageBuilder.append(mContext.getResources().getString( |
| 479 getConnectionMessageId(mSecurityLevel, mIsInternalPage))); | 480 getConnectionMessageId(mSecurityLevel, mIsInternalPage))); |
| 480 } else { | 481 } else { |
| 481 String originToDisplay; | 482 String originToDisplay; |
| 482 try { | 483 try { |
| 483 URI parsedUrl = new URI(mFullUrl); | 484 URI parsedUrl = new URI(mFullUrl); |
| 484 originToDisplay = UrlUtilities.getOriginForDisplay(parsedUrl, fa
lse); | 485 originToDisplay = UrlUtilities.getOriginForDisplay(parsedUrl, fa
lse); |
| 485 } catch (URISyntaxException e) { | 486 } catch (URISyntaxException e) { |
| 486 // The URL is invalid - just display the full URL. | 487 // The URL is invalid - just display the full URL. |
| 487 originToDisplay = mFullUrl; | 488 originToDisplay = mFullUrl; |
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 754 new WebsiteSettingsPopup(context, profile, webContents); | 755 new WebsiteSettingsPopup(context, profile, webContents); |
| 755 } | 756 } |
| 756 | 757 |
| 757 private static native long nativeInit(WebsiteSettingsPopup popup, WebContent
s webContents); | 758 private static native long nativeInit(WebsiteSettingsPopup popup, WebContent
s webContents); |
| 758 | 759 |
| 759 private native void nativeDestroy(long nativeWebsiteSettingsPopupAndroid); | 760 private native void nativeDestroy(long nativeWebsiteSettingsPopupAndroid); |
| 760 | 761 |
| 761 private native void nativeOnPermissionSettingChanged(long nativeWebsiteSetti
ngsPopupAndroid, | 762 private native void nativeOnPermissionSettingChanged(long nativeWebsiteSetti
ngsPopupAndroid, |
| 762 int type, int setting); | 763 int type, int setting); |
| 763 } | 764 } |
| OLD | NEW |