| // Copyright 2017 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import "ios/chrome/browser/ui/omnibox/omnibox_text_field_paste_delegate.h" |
| |
| #import "base/apple/foundation_util.h" |
| |
| @interface OmniboxTextFieldPasteDelegate () |
| |
| @property(nonatomic, strong) NSURL* URL; |
| |
| @end |
| |
| @implementation OmniboxTextFieldPasteDelegate |
| @synthesize URL = _URL; |
| |
| - (void)textPasteConfigurationSupporting: |
| (id<UITextPasteConfigurationSupporting>) |
| textPasteConfigurationSupporting |
| transformPasteItem:(id<UITextPasteItem>)item { |
| if ([item.itemProvider canLoadObjectOfClass:[NSURL class]]) { |
| [item.itemProvider |
| loadObjectOfClass:[NSURL class] |
| completionHandler:^(id<NSItemProviderReading> _Nullable object, |
| NSError* _Nullable error) { |
| if (!error) { |
| self.URL = base::apple::ObjCCast<NSURL>(object); |
| } |
| [item setDefaultResult]; |
| }]; |
| } else { |
| [item setDefaultResult]; |
| } |
| } |
| |
| - (NSAttributedString*) |
| textPasteConfigurationSupporting: |
| (id<UITextPasteConfigurationSupporting>)textPasteConfigurationSupporting |
| combineItemAttributedStrings:(NSArray<NSAttributedString*>*)itemStrings |
| forRange:(UITextRange*)textRange { |
| // If there's a cached URL, use that. Otherwise, use one of the item strings. |
| if (self.URL) { |
| NSString* URLString = [self.URL absoluteString]; |
| self.URL = nil; |
| return [[NSAttributedString alloc] initWithString:URLString]; |
| } else { |
| // Return only one item string to avoid repetition, for example when there |
| // are both a URL and a string in the pasteboard. |
| NSAttributedString* string = [itemStrings firstObject]; |
| if (!string) { |
| string = [[NSAttributedString alloc] init]; |
| } |
| return string; |
| } |
| } |
| |
| @end |