Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3049)

Unified Diff: chrome/browser/ui/views/location_bar/location_bar_view.cc

Issue 2144903004: New location security strings and animation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Removed unnecessary method, formatting Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/views/location_bar/location_bar_view.cc
diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.cc b/chrome/browser/ui/views/location_bar/location_bar_view.cc
index 7ffa3e9e7d73a16df4e74ffa17c4b9c1c0b02f7e..c98104187cd70d2e59d319e000e6c3f1ec9fd3eb 100644
--- a/chrome/browser/ui/views/location_bar/location_bar_view.cc
+++ b/chrome/browser/ui/views/location_bar/location_bar_view.cc
@@ -22,6 +22,7 @@
#include "chrome/browser/extensions/tab_helper.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/search_engines/template_url_service_factory.h"
+#include "chrome/browser/ssl/chrome_security_state_model_client.h"
#include "chrome/browser/themes/theme_properties.h"
#include "chrome/browser/translate/chrome_translate_client.h"
#include "chrome/browser/translate/translate_service.h"
@@ -63,12 +64,15 @@
#include "components/translate/core/browser/language_state.h"
#include "components/zoom/zoom_controller.h"
#include "components/zoom/zoom_event_manager.h"
+#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/render_widget_host_view.h"
#include "content/public/browser/web_contents.h"
+#include "content/public/common/ssl_status.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/common/feature_switch.h"
#include "grit/components_scaled_resources.h"
#include "grit/theme_resources.h"
+#include "third_party/re2/src/re2/re2.h"
#include "ui/accessibility/ax_view_state.h"
#include "ui/base/dragdrop/drag_drop_types.h"
#include "ui/base/material_design/material_design_controller.h"
@@ -137,6 +141,7 @@ LocationBarView::LocationBarView(Browser* browser,
size_animation_(this),
is_popup_mode_(is_popup_mode),
show_focus_rect_(false),
+ load_state_(new LoadState()),
Peter Kasting 2016/08/15 23:29:49 If we always have a non-null |load_state_|, why us
Kevin Bailey 2016/08/16 16:39:36 The scoped_ptr is to free it, and having it a new'
Peter Kasting 2016/08/16 18:15:05 If an object represents an internal cache rather t
template_url_service_(NULL),
web_contents_null_at_last_refresh_(true) {
edit_bookmarks_enabled_.Init(
@@ -329,7 +334,7 @@ SkColor LocationBarView::GetColor(
case EV_BUBBLE_TEXT_AND_BORDER:
return ui::MaterialDesignController::IsModeMaterial()
? GetSecureTextColor(
- security_state::SecurityStateModel::EV_SECURE)
+ GetToolbarModel()->GetSecurityLevel(false))
Peter Kasting 2016/08/15 23:29:49 This is necessary only if we use the "EV bubble" f
Kevin Bailey 2016/08/16 16:39:36 Sorry, I'm not understanding the comment. The call
Peter Kasting 2016/08/16 18:15:05 You're changing the meaning of "EV bubble" to "ver
Kevin Bailey 2016/08/17 16:33:30 Ok, all I noticed was this enum.
: SkColorSetRGB(7, 149, 0);
}
NOTREACHED();
@@ -344,18 +349,22 @@ SkColor LocationBarView::GetSecureTextColor(
}
SkColor text_color = GetColor(TEXT);
- if ((security_level == security_state::SecurityStateModel::EV_SECURE) ||
+ if ((security_level == security_state::SecurityStateModel::NONE) ||
Peter Kasting 2016/08/15 23:29:49 Simpler than all the changes you've made here is t
Kevin Bailey 2016/08/16 16:39:36 Done.
+ (security_level == security_state::SecurityStateModel::EV_SECURE) ||
(security_level == security_state::SecurityStateModel::SECURE) ||
(security_level == security_state::SecurityStateModel::SECURITY_ERROR)) {
if (ui::MaterialDesignController::IsModeMaterial()) {
if (color_utils::IsDark(GetColor(BACKGROUND)))
return text_color;
- if (security_level == security_state::SecurityStateModel::SECURITY_ERROR)
+ if ((security_level == security_state::SecurityStateModel::NONE) ||
+ (security_level ==
+ security_state::SecurityStateModel::SECURITY_ERROR))
text_color = gfx::kGoogleRed700;
else
text_color = gfx::kGoogleGreen700;
- } else if (security_level ==
- security_state::SecurityStateModel::SECURITY_ERROR) {
+ } else if ((security_level == security_state::SecurityStateModel::NONE) ||
+ (security_level ==
+ security_state::SecurityStateModel::SECURITY_ERROR)) {
text_color = SkColorSetRGB(162, 0, 0);
} else {
text_color = GetColor(EV_BUBBLE_TEXT_AND_BORDER);
@@ -532,12 +541,13 @@ gfx::Size LocationBarView::GetPreferredSize() const {
int leading_width = edge_thickness;
if (ShouldShowKeywordBubble()) {
// The selected keyword view can collapse completely.
- } else if (ShouldShowEVBubble()) {
- leading_width += GetLayoutConstant(LOCATION_BAR_BUBBLE_HORIZONTAL_PADDING) +
- location_icon_view_->GetMinimumSizeForLabelText(
- GetToolbarModel()->GetEVCertName())
- .width();
+ } else if (ShouldShowSecurityChip()) {
+ base::string16 label = GetSecurityText();
+ leading_width +=
+ GetLayoutConstant(LOCATION_BAR_BUBBLE_HORIZONTAL_PADDING) +
+ location_icon_view_->GetMinimumSizeForLabelText(label).width();
} else {
+ location_icon_view_->StopAnimation();
leading_width += padding + location_icon_view_->GetMinimumSize().width();
}
@@ -612,15 +622,17 @@ void LocationBarView::Layout() {
selected_keyword_view_->set_is_extension_icon(false);
}
}
- } else if (ShouldShowEVBubble()) {
- location_icon_view_->SetLabel(GetToolbarModel()->GetEVCertName());
+ } else if (ShouldShowSecurityChip()) {
+ location_icon_view_->SetLabel(GetSecurityText());
location_icon_view_->SetBackground(true);
+ location_icon_view_->StartAnimation();
Peter Kasting 2016/08/15 23:29:49 Don't start and stop animations from Layout(). La
Kevin Bailey 2016/08/16 16:39:36 I had hoped to use this strategy, but, for example
// The largest fraction of the omnibox that can be taken by the EV bubble.
const double kMaxBubbleFraction = 0.5;
leading_decorations.AddDecoration(
vertical_padding, location_height, false, kMaxBubbleFraction,
bubble_horizontal_padding, item_padding, location_icon_view_);
} else {
+ location_icon_view_->StopAnimation();
leading_decorations.AddDecoration(vertical_padding, location_height,
location_icon_view_);
}
@@ -790,7 +802,7 @@ void LocationBarView::Update(const WebContents* contents) {
RefreshTranslateIcon();
RefreshSaveCreditCardIconView();
RefreshManagePasswordsIconView();
- content::WebContents* web_contents_for_sub_views =
+ WebContents* web_contents_for_sub_views =
GetToolbarModel()->input_in_progress() ? nullptr : GetWebContents();
open_pdf_in_reader_view_->Update(web_contents_for_sub_views);
@@ -1038,6 +1050,11 @@ bool LocationBarView::HasValidSuggestText() const {
!suggested_text_view_->size().IsEmpty();
}
+base::string16 LocationBarView::GetSecurityText() const {
+ return ShouldShowEVBubble() ? GetToolbarModel()->GetEVCertName()
Peter Kasting 2016/08/15 23:29:49 Nit: This is now the only caller of this function,
Kevin Bailey 2016/08/16 16:39:36 The Mac code should use it. That's where I borrowe
+ : GetToolbarModel()->GetSecureVerboseText();
+}
+
bool LocationBarView::ShouldShowKeywordBubble() const {
return !omnibox_view_->model()->keyword().empty() &&
!omnibox_view_->model()->is_keyword_hint();
@@ -1048,6 +1065,60 @@ bool LocationBarView::ShouldShowEVBubble() const {
security_state::SecurityStateModel::EV_SECURE);
}
+std::string LocationBarView::TrimSite(const std::string& url) const {
+ std::string prefix, site;
+ if (RE2::FullMatch(url, "http(s?)://([^/]*)((/?).*)", &prefix, &site))
Peter Kasting 2016/08/15 23:29:49 Please don't process things with a regex. What ar
Kevin Bailey 2016/08/16 16:39:36 Done.
+ return site;
+ else
+ return url;
+}
+
+bool LocationBarView::ShouldShowSecurityChip() const {
+ WebContents* web_contents = delegate_->GetWebContents();
+ if (!web_contents)
+ return false;
+ content::NavigationEntry* entry =
+ web_contents->GetController().GetVisibleEntry();
+ if (omnibox_view_->IsEditingOrEmpty()) {
+ load_state_->last_returned_ = false;
+ return false;
+ }
+ std::string site(UTF16ToUTF8(omnibox_view_->GetText()));
+ site = TrimSite(site);
+ // If URL does not have same site.
+ if (TrimSite(entry->GetURL().spec()) != site) {
+ load_state_->last_returned_ = false;
+ return false;
+ }
+ if (site == load_state_->last_site_) {
+ if (load_state_->last_index_ !=
+ web_contents->GetController().GetLastCommittedEntryIndex()) {
+ // New page, same site.
+ load_state_->last_index_ =
+ web_contents->GetController().GetLastCommittedEntryIndex();
+ // Return false if last was true, so it animates.
+ load_state_->last_returned_ = !load_state_->last_returned_;
Peter Kasting 2016/08/15 23:29:49 I don't understand this logic. It means each time
Kevin Bailey 2016/08/16 16:39:36 btw, it does return the same thing (if other state
+ return load_state_->last_returned_;
+ } else {
Peter Kasting 2016/08/15 23:29:49 Nit: No else after return. Anyway here you could
Kevin Bailey 2016/08/16 16:39:36 Done, and more.
+ load_state_->last_returned_ = true;
+ return true;
+ }
+ }
+ if (load_state_->last_site_ != site &&
+ load_state_->last_index_ !=
+ web_contents->GetController().GetLastCommittedEntryIndex()) {
Peter Kasting 2016/08/15 23:29:49 Nit: } else if (load_state_->last_index_ !=
Kevin Bailey 2016/08/16 16:39:36 Done.
+ // New page, new site.
+ load_state_->last_site_ = site;
+ load_state_->last_index_ =
+ web_contents->GetController().GetLastCommittedEntryIndex();
+ // Return false if last was true, so it animates.
+ load_state_->last_returned_ = !load_state_->last_returned_;
+ return load_state_->last_returned_;
+ }
+ load_state_->last_returned_ = false;
+ return false;
+}
+
////////////////////////////////////////////////////////////////////////////////
// LocationBarView, private LocationBar implementation:

Powered by Google App Engine
This is Rietveld 408576698