diff options
author | avi <avi@chromium.org> | 2016-01-07 13:57:50 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-01-07 21:58:32 +0000 |
commit | ff1966e831cce0b4a40cfa2bad90e9b6fdf4eb89 (patch) | |
tree | 7c659e976d4a06c7ba0df860620bb701a4115fa2 /ui/base | |
parent | a3c2614e113dda88cfe4ac2bb0bd56d3e1085c29 (diff) | |
download | chromium_src-ff1966e831cce0b4a40cfa2bad90e9b6fdf4eb89.zip chromium_src-ff1966e831cce0b4a40cfa2bad90e9b6fdf4eb89.tar.gz chromium_src-ff1966e831cce0b4a40cfa2bad90e9b6fdf4eb89.tar.bz2 |
Remove the ability for UI links to be copied and dragged.
This is a followup to 7c0b59d9c9dfba08fe924dd0ee219ec94b65bb87.
BUG=575141, 528228
TEST=as in bug
Review URL: https://codereview.chromium.org/1570603002
Cr-Commit-Position: refs/heads/master@{#368168}
Diffstat (limited to 'ui/base')
-rw-r--r-- | ui/base/cocoa/controls/hyperlink_text_view.h | 4 | ||||
-rw-r--r-- | ui/base/cocoa/controls/hyperlink_text_view.mm | 38 |
2 files changed, 35 insertions, 7 deletions
diff --git a/ui/base/cocoa/controls/hyperlink_text_view.h b/ui/base/cocoa/controls/hyperlink_text_view.h index affe648..0a0cb44 100644 --- a/ui/base/cocoa/controls/hyperlink_text_view.h +++ b/ui/base/cocoa/controls/hyperlink_text_view.h @@ -16,6 +16,7 @@ UI_BASE_EXPORT @private BOOL refusesFirstResponder_; BOOL drawsBackgroundUsingSuperview_; + BOOL isValidLink_; } @property(nonatomic, assign) BOOL drawsBackgroundUsingSuperview; @@ -26,7 +27,8 @@ UI_BASE_EXPORT withFont:(NSFont*)font messageColor:(NSColor*)messageColor; -// Marks a |range| within the given message as link. +// Marks a |range| within the given message as a link. Pass nil as the url to +// create a link that can neither be copied nor dragged. - (void)addLinkRange:(NSRange)range withURL:(NSString*)url linkColor:(NSColor*)linkColor; diff --git a/ui/base/cocoa/controls/hyperlink_text_view.mm b/ui/base/cocoa/controls/hyperlink_text_view.mm index c4936e2..2a50e0f 100644 --- a/ui/base/cocoa/controls/hyperlink_text_view.mm +++ b/ui/base/cocoa/controls/hyperlink_text_view.mm @@ -95,6 +95,7 @@ const float kTextBaselineShift = -1.0; refusesFirstResponder_ = NO; drawsBackgroundUsingSuperview_ = NO; + isValidLink_ = NO; } - (void)fixupCursor { @@ -102,6 +103,28 @@ const float kTextBaselineShift = -1.0; [[NSCursor arrowCursor] set]; } +// Only allow contextual menus (which allow copying of the link URL) if the link +// is a valid one. +- (NSMenu*)menuForEvent:(NSEvent*)e { + if (isValidLink_) + return [super menuForEvent:e]; + + return nil; +} + +// Only allow dragging of valid links. +- (BOOL)dragSelectionWithEvent:(NSEvent*)event + offset:(NSSize)mouseOffset + slideBack:(BOOL)slideBack { + if (isValidLink_) { + return [super dragSelectionWithEvent:event + offset:mouseOffset + slideBack:slideBack]; + } + + return NO; +} + - (void)setMessage:(NSString*)message withFont:(NSFont*)font messageColor:(NSColor*)messageColor { @@ -125,12 +148,15 @@ const float kTextBaselineShift = -1.0; - (void)addLinkRange:(NSRange)range withURL:(NSString*)url linkColor:(NSColor*)linkColor { - // When the NSLinkAttributeName attribute is used, AppKit makes the link - // draggable. If no URL is provided, dropping it on the tab strip will crash - // <http://crbug.com/528228>. Require that a URL is used, and that only a URL - // is used. - DCHECK_GT([url length], 0u); - DCHECK([NSURL URLWithString:url]); + // If a URL is provided, make sure it is a valid one. + if (url) { + DCHECK_GT([url length], 0u); + DCHECK([NSURL URLWithString:url]); + isValidLink_ = YES; + } else { + url = @""; + isValidLink_ = NO; + } NSDictionary* attributes = @{ NSForegroundColorAttributeName : linkColor, NSUnderlineStyleAttributeName : @(YES), |