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

Unified Diff: chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm

Issue 2641003002: Show scheme in black and content in gray for data: protocol urls (Closed)
Patch Set: Only call UpdateSchemeStyle when a scheme is present. Created 3 years, 10 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/cocoa/omnibox/omnibox_view_mac.mm
diff --git a/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm b/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm
index cd2b95faefb8470578fb8128da5b00a47359f88f..09c55fa535e021dcfe813989ca4fee5bc065a6ad 100644
--- a/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm
+++ b/chrome/browser/ui/cocoa/omnibox/omnibox_view_mac.mm
@@ -129,13 +129,6 @@ const OmniboxViewMacState* GetStateFromTab(const WebContents* tab) {
tab->GetUserData(&kOmniboxViewMacStateKey));
}
-// Helper to make converting url ranges to NSRange easier to
-// read.
-NSRange ComponentToNSRange(const url::Component& component) {
- return NSMakeRange(static_cast<NSInteger>(component.begin),
- static_cast<NSInteger>(component.len));
-}
-
} // namespace
// static
@@ -192,7 +185,8 @@ OmniboxViewMac::OmniboxViewMac(OmniboxEditController* controller,
delete_at_end_pressed_(false),
in_coalesced_update_block_(false),
do_coalesced_text_update_(false),
- do_coalesced_range_update_(false) {
+ do_coalesced_range_update_(false),
+ attributing_display_string_(nil) {
[field_ setObserver:this];
// Needed so that editing doesn't lose the styling.
@@ -545,69 +539,69 @@ void OmniboxViewMac::ApplyTextStyle(
range:NSMakeRange(0, [attributedString length])];
}
-void OmniboxViewMac::ApplyTextAttributes(
- const base::string16& display_text,
- NSMutableAttributedString* attributedString) {
- NSUInteger as_length = [attributedString length];
- if (as_length == 0) {
- return;
- }
- NSRange as_entire_string = NSMakeRange(0, as_length);
+void OmniboxViewMac::SetEmphasis(bool emphasize, const gfx::Range& range) {
bool in_dark_mode = [[field_ window] inIncognitoModeWithSystemTheme];
- ApplyTextStyle(attributedString);
+ NSRange ns_range = range.IsValid()
+ ? range.ToNSRange()
+ : NSMakeRange(0, [attributing_display_string_ length]);
- // A kinda hacky way to add breaking at periods. This is what Safari does.
- // This works for IDNs too, despite the "en_US".
- [attributedString addAttribute:@"NSLanguage"
- value:@"en_US_POSIX"
- range:as_entire_string];
+ [attributing_display_string_
+ addAttribute:NSForegroundColorAttributeName
+ value:(emphasize) ? HostTextColor(in_dark_mode)
+ : BaseTextColor(in_dark_mode)
+ range:ns_range];
+}
- [attributedString addAttribute:NSForegroundColorAttributeName
- value:HostTextColor(in_dark_mode)
- range:as_entire_string];
+void OmniboxViewMac::UpdateSchemeStyle(const gfx::Range& range) {
+ if (!range.IsValid())
+ return;
- url::Component scheme, host;
- AutocompleteInput::ParseForEmphasizeComponents(
- display_text, ChromeAutocompleteSchemeClassifier(profile_), &scheme,
- &host);
- bool grey_out_url = display_text.substr(scheme.begin, scheme.len) ==
- base::UTF8ToUTF16(extensions::kExtensionScheme);
- if (model()->CurrentTextIsURL() &&
- (host.is_nonempty() || grey_out_url)) {
- [attributedString addAttribute:NSForegroundColorAttributeName
- value:BaseTextColor(in_dark_mode)
- range:as_entire_string];
-
- if (!grey_out_url) {
- [attributedString addAttribute:NSForegroundColorAttributeName
- value:HostTextColor(in_dark_mode)
- range:ComponentToNSRange(host)];
- }
- }
-
- // TODO(shess): GTK has this as a member var, figure out why.
- // [Could it be to not change if no change? If so, I'm guessing
- // AppKit may already handle that.]
const security_state::SecurityLevel security_level =
controller()->GetToolbarModel()->GetSecurityLevel(false);
- // Emphasize the scheme for security UI display purposes (if necessary).
- if (!model()->user_input_in_progress() && model()->CurrentTextIsURL() &&
- scheme.is_nonempty() &&
- (security_level != security_state::NONE) &&
- (security_level != security_state::HTTP_SHOW_WARNING)) {
- if (security_level == security_state::DANGEROUS) {
- // Add a strikethrough through the scheme.
- [attributedString addAttribute:NSStrikethroughStyleAttributeName
- value:[NSNumber numberWithInt:NSUnderlineStyleSingle]
- range:ComponentToNSRange(scheme)];
- }
- [attributedString
- addAttribute:NSForegroundColorAttributeName
- value:GetSecureTextColor(security_level, in_dark_mode)
- range:ComponentToNSRange(scheme)];
+ if ((security_level == security_state::NONE) ||
+ (security_level == security_state::HTTP_SHOW_WARNING))
+ return;
+
+ if (security_level == security_state::DANGEROUS) {
+ // Add a strikethrough through the scheme.
+ [attributing_display_string_
+ addAttribute:NSStrikethroughStyleAttributeName
+ value:[NSNumber numberWithInt:NSUnderlineStyleSingle]
+ range:range.ToNSRange()];
}
+
+ bool in_dark_mode = [[field_ window] inIncognitoModeWithSystemTheme];
+
+ [attributing_display_string_
+ addAttribute:NSForegroundColorAttributeName
+ value:GetSecureTextColor(security_level, in_dark_mode)
+ range:range.ToNSRange()];
+}
+
+void OmniboxViewMac::ApplyTextAttributes(
+ const base::string16& display_text,
+ NSMutableAttributedString* attributed_string) {
+ NSUInteger as_length = [attributed_string length];
+ if (as_length == 0) {
+ return;
+ }
+
+ ApplyTextStyle(attributed_string);
+
+ // A kinda hacky way to add breaking at periods. This is what Safari does.
+ // This works for IDNs too, despite the "en_US".
+ [attributed_string addAttribute:@"NSLanguage"
+ value:@"en_US_POSIX"
+ range:NSMakeRange(0, as_length)];
+
+ // Cache a pointer to the attributed string to allow the superclass'
+ // virtual method invocations to add attributes.
+ DCHECK(attributing_display_string_ == nil);
+ base::AutoReset<NSMutableAttributedString*> resetter(
+ &attributing_display_string_, attributed_string);
+ UpdateTextStyle(display_text, ChromeAutocompleteSchemeClassifier(profile_));
}
void OmniboxViewMac::OnTemporaryTextMaybeChanged(

Powered by Google App Engine
This is Rietveld 408576698