summaryrefslogtreecommitdiffstats
path: root/ui/base
diff options
context:
space:
mode:
authoravi <avi@chromium.org>2016-01-07 13:57:50 -0800
committerCommit bot <commit-bot@chromium.org>2016-01-07 21:58:32 +0000
commitff1966e831cce0b4a40cfa2bad90e9b6fdf4eb89 (patch)
tree7c659e976d4a06c7ba0df860620bb701a4115fa2 /ui/base
parenta3c2614e113dda88cfe4ac2bb0bd56d3e1085c29 (diff)
downloadchromium_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.h4
-rw-r--r--ui/base/cocoa/controls/hyperlink_text_view.mm38
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),