| Index: chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.mm
|
| diff --git a/chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.mm b/chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.mm
|
| index 49fe95da3f1843e167464d7b044000006ea33ec4..0baec69b671abc3f7f965f1a9a33220de800f46d 100644
|
| --- a/chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.mm
|
| +++ b/chrome/browser/ui/cocoa/location_bar/location_bar_view_mac.mm
|
| @@ -121,6 +121,9 @@ LocationBarViewMac::LocationBarViewMac(AutocompleteTextField* field,
|
| new ManagePasswordsDecoration(command_updater, this)),
|
| browser_(browser),
|
| location_bar_visible_(true),
|
| + should_show_secure_verbose_(false),
|
| + should_animate_security_verbose_(false),
|
| + is_width_available_for_security_verbose_(false),
|
| weak_ptr_factory_(this) {
|
| ScopedVector<ContentSettingImageModel> models =
|
| ContentSettingImageModel::GenerateContentSettingImageModels();
|
| @@ -142,6 +145,24 @@ LocationBarViewMac::LocationBarViewMac(AutocompleteTextField* field,
|
| [[field_ cell] setIsPopupMode:
|
| !browser->SupportsWindowFeature(Browser::FEATURE_TABSTRIP)];
|
|
|
| + base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
|
| + if (command_line->HasSwitch(switches::kMaterialSecurityVerbose)) {
|
| + std::string security_verbose_flag =
|
| + command_line->GetSwitchValueASCII(switches::kMaterialSecurityVerbose);
|
| +
|
| + should_show_secure_verbose_ =
|
| + security_verbose_flag ==
|
| + switches::kMaterialSecurityVerboseShowAllAnimated ||
|
| + security_verbose_flag ==
|
| + switches::kMaterialSecurityVerboseShowAllNonAnimated;
|
| +
|
| + should_animate_security_verbose_ =
|
| + security_verbose_flag ==
|
| + switches::kMaterialSecurityVerboseShowAllAnimated ||
|
| + security_verbose_flag ==
|
| + switches::kMaterialSecurityVerboseShowNonSecureAnimated;
|
| + }
|
| +
|
| // Sets images for the decorations, and performs a layout. This call ensures
|
| // that this class is in a consistent state after initialization.
|
| OnChanged();
|
| @@ -483,25 +504,19 @@ void LocationBarViewMac::Layout() {
|
| base::string16 label(GetToolbarModel()->GetEVCertName());
|
| security_state_bubble_decoration_->SetFullLabel(
|
| base::SysUTF16ToNSString(label));
|
| +
|
| + // This is true for EV certificate since the certificate should be
|
| + // displayed, even if the width is narrow.
|
| + is_width_available_for_security_verbose_ = true;
|
| } else if (ShouldShowSecurityState()) {
|
| - // TODO(spqchan): Clean up location_bar_view_mac so that animation
|
| - // code isn't in Layout(). See crbug.com/642977.
|
| - bool is_security_state_visible = true;
|
| CGFloat available_width =
|
| [cell availableWidthInFrame:[[cell controlView] frame]];
|
| -
|
| - if (available_width < kMinURLWidth) {
|
| - // If there's not enough space, animate out the security state bubble.
|
| - // Show it until it has finished animating out.
|
| - is_security_state_visible =
|
| - security_state_bubble_decoration_->AnimatingOut();
|
| - if (security_state_bubble_decoration_->HasAnimatedIn())
|
| - security_state_bubble_decoration_->AnimateOut();
|
| - } else if (security_state_bubble_decoration_->HasAnimatedOut()) {
|
| - // If there's enough space, but the secure state bubble had animated
|
| - // out, animate it back in.
|
| - security_state_bubble_decoration_->AnimateIn(false);
|
| - }
|
| + is_width_available_for_security_verbose_ = available_width >= kMinURLWidth;
|
| + bool is_security_state_visible =
|
| + is_width_available_for_security_verbose_ ||
|
| + security_state_bubble_decoration_->AnimatingOut();
|
| + location_icon_decoration_->SetVisible(!is_security_state_visible);
|
| + security_state_bubble_decoration_->SetVisible(is_security_state_visible);
|
|
|
| // Don't change the label if the bubble is in the process of animating
|
| // out the old one.
|
| @@ -510,9 +525,6 @@ void LocationBarViewMac::Layout() {
|
| security_state_bubble_decoration_->SetFullLabel(
|
| base::SysUTF16ToNSString(label));
|
| }
|
| -
|
| - location_icon_decoration_->SetVisible(!is_security_state_visible);
|
| - security_state_bubble_decoration_->SetVisible(is_security_state_visible);
|
| }
|
|
|
| // These need to change anytime the layout changes.
|
| @@ -587,6 +599,7 @@ void LocationBarViewMac::Update(const WebContents* contents) {
|
| UpdateSaveCreditCardIcon();
|
| UpdateTranslateDecoration();
|
| UpdateZoomDecoration(/*default_zoom_changed=*/false);
|
| + UpdateSecurityState(contents);
|
| RefreshPageActionDecorations();
|
| RefreshContentSettingsDecorations();
|
| if (contents)
|
| @@ -595,11 +608,6 @@ void LocationBarViewMac::Update(const WebContents* contents) {
|
| omnibox_view_->Update();
|
|
|
| OnChanged();
|
| -
|
| - // To avoid animating the security state bubble decoration if it
|
| - // should be hidden for a narrow omnibox, call UpdateSecurityState() after
|
| - // OnChanged().
|
| - UpdateSecurityState(contents);
|
| }
|
|
|
| void LocationBarViewMac::UpdateWithoutTabRestore() {
|
| @@ -660,6 +668,7 @@ void LocationBarViewMac::OnChanged() {
|
| Layout();
|
| return;
|
| }
|
| + UpdateSecurityState(false);
|
| UpdateLocationIcon();
|
| }
|
|
|
| @@ -677,15 +686,16 @@ WebContents* LocationBarViewMac::GetWebContents() {
|
|
|
| bool LocationBarViewMac::ShouldShowEVBubble() const {
|
| return (GetToolbarModel()->GetSecurityLevel(false) ==
|
| - security_state::SecurityStateModel::EV_SECURE);
|
| + security_state::SecurityStateModel::EV_SECURE) &&
|
| + should_show_secure_verbose_;
|
| }
|
|
|
| bool LocationBarViewMac::ShouldShowSecurityState() const {
|
| security_state::SecurityStateModel::SecurityLevel security =
|
| GetToolbarModel()->GetSecurityLevel(false);
|
| bool has_verbose_for_security =
|
| - IsSecureConnection(security) ||
|
| - security == security_state::SecurityStateModel::SECURITY_ERROR;
|
| + security == security_state::SecurityStateModel::SECURITY_ERROR ||
|
| + (IsSecureConnection(security) && should_show_secure_verbose_);
|
|
|
| return ui::MaterialDesignController::IsModeMaterial() &&
|
| has_verbose_for_security && !omnibox_view_->IsEditingOrEmpty() &&
|
| @@ -873,24 +883,32 @@ bool LocationBarViewMac::UpdateZoomDecoration(bool default_zoom_changed) {
|
| }
|
|
|
| void LocationBarViewMac::UpdateSecurityState(bool tab_changed) {
|
| - // If the security level has changed, check if the verbose state decoration
|
| - // needs to be animated. If we need to show it, animate it in. Otherwise,
|
| - // animate it out if it's already fully displayed.
|
| + if (!ShouldShowSecurityState())
|
| + return;
|
| +
|
| security_state::SecurityStateModel::SecurityLevel new_security_level =
|
| GetToolbarModel()->GetSecurityLevel(false);
|
| bool is_secure_to_secure = IsSecureConnection(new_security_level) &&
|
| IsSecureConnection(security_level_);
|
| - if (ShouldShowSecurityState() &&
|
| - security_state_bubble_decoration_->IsVisible()) {
|
| - // Animate the verbose if we entered a new connection state on the current
|
| - // tab. If it had animated out (from a narrow width).
|
| - if (!tab_changed &&
|
| - (security_level_ != new_security_level && !is_secure_to_secure)) {
|
| + bool is_new_security_level =
|
| + security_level_ != new_security_level && !is_secure_to_secure;
|
| + security_level_ = new_security_level;
|
| +
|
| + // If there's enough space, but the secure state decoration had animated
|
| + // out, animate it back in. Otherwise, if the security state has changed,
|
| + // animate the decoration if animation is enabled and the state changed is
|
| + // not from a tab switch.
|
| + if (is_width_available_for_security_verbose_) {
|
| + if (security_state_bubble_decoration_->HasAnimatedOut())
|
| + security_state_bubble_decoration_->AnimateIn(false);
|
| + else if (!should_animate_security_verbose_ || tab_changed)
|
| + security_state_bubble_decoration_->ShowWithoutAnimation();
|
| + else if (is_new_security_level)
|
| security_state_bubble_decoration_->AnimateIn();
|
| - }
|
| + } else {
|
| + // Animate the decoration out if there's not enough space.
|
| + security_state_bubble_decoration_->AnimateOut();
|
| }
|
| -
|
| - security_level_ = new_security_level;
|
| }
|
|
|
| bool LocationBarViewMac::IsSecureConnection(
|
|
|