| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import "components/open_from_clipboard/clipboard_recent_content_ios.h" | 5 #import "components/open_from_clipboard/clipboard_recent_content_ios.h" |
| 6 | 6 |
| 7 #import <CommonCrypto/CommonDigest.h> | 7 #import <CommonCrypto/CommonDigest.h> |
| 8 #include <stddef.h> | 8 #include <stddef.h> |
| 9 #include <stdint.h> | 9 #include <stdint.h> |
| 10 #import <UIKit/UIKit.h> | 10 #import <UIKit/UIKit.h> |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 | 141 |
| 142 void ClipboardRecentContentIOS::SuppressClipboardContent() { | 142 void ClipboardRecentContentIOS::SuppressClipboardContent() { |
| 143 // User cleared the user data. The pasteboard entry must be removed from the | 143 // User cleared the user data. The pasteboard entry must be removed from the |
| 144 // omnibox list. Force entry expiration by setting copy date to 1970. | 144 // omnibox list. Force entry expiration by setting copy date to 1970. |
| 145 last_pasteboard_change_date_.reset( | 145 last_pasteboard_change_date_.reset( |
| 146 [[NSDate alloc] initWithTimeIntervalSince1970:0]); | 146 [[NSDate alloc] initWithTimeIntervalSince1970:0]); |
| 147 SaveToUserDefaults(); | 147 SaveToUserDefaults(); |
| 148 } | 148 } |
| 149 | 149 |
| 150 void ClipboardRecentContentIOS::PasteboardChanged() { | 150 void ClipboardRecentContentIOS::PasteboardChanged() { |
| 151 NSString* pasteboard_string = [[UIPasteboard generalPasteboard] string]; | |
| 152 if (!pasteboard_string) | |
| 153 return; | |
| 154 url_from_pasteboard_cache_ = URLFromPasteboard(); | 151 url_from_pasteboard_cache_ = URLFromPasteboard(); |
| 155 if (!url_from_pasteboard_cache_.is_empty()) { | 152 if (!url_from_pasteboard_cache_.is_empty()) { |
| 156 base::RecordAction( | 153 base::RecordAction( |
| 157 base::UserMetricsAction("MobileOmniboxClipboardChanged")); | 154 base::UserMetricsAction("MobileOmniboxClipboardChanged")); |
| 158 } | 155 } |
| 159 last_pasteboard_change_date_.reset([[NSDate date] retain]); | 156 last_pasteboard_change_date_.reset([[NSDate date] retain]); |
| 160 last_pasteboard_change_count_ = [UIPasteboard generalPasteboard].changeCount; | 157 last_pasteboard_change_count_ = [UIPasteboard generalPasteboard].changeCount; |
| 158 NSString* pasteboard_string = [[UIPasteboard generalPasteboard] string]; |
| 159 if (!pasteboard_string) { |
| 160 pasteboard_string = @""; |
| 161 } |
| 161 NSData* MD5 = WeakMD5FromNSString(pasteboard_string); | 162 NSData* MD5 = WeakMD5FromNSString(pasteboard_string); |
| 162 last_pasteboard_entry_md5_.reset([MD5 retain]); | 163 last_pasteboard_entry_md5_.reset([MD5 retain]); |
| 163 SaveToUserDefaults(); | 164 SaveToUserDefaults(); |
| 164 } | 165 } |
| 165 | 166 |
| 166 ClipboardRecentContentIOS::ClipboardRecentContentIOS( | 167 ClipboardRecentContentIOS::ClipboardRecentContentIOS( |
| 167 const std::string& application_scheme, | 168 const std::string& application_scheme, |
| 168 NSUserDefaults* group_user_defaults) | 169 NSUserDefaults* group_user_defaults) |
| 169 : application_scheme_(application_scheme), | 170 : application_scheme_(application_scheme), |
| 170 shared_user_defaults_([group_user_defaults retain]) { | 171 shared_user_defaults_([group_user_defaults retain]) { |
| 171 Init(base::SysInfo::Uptime()); | 172 Init(base::SysInfo::Uptime()); |
| 172 } | 173 } |
| 173 | 174 |
| 174 ClipboardRecentContentIOS::ClipboardRecentContentIOS( | 175 ClipboardRecentContentIOS::ClipboardRecentContentIOS( |
| 175 const std::string& application_scheme, | 176 const std::string& application_scheme, |
| 176 base::TimeDelta uptime) | 177 base::TimeDelta uptime) |
| 177 : application_scheme_(application_scheme), | 178 : application_scheme_(application_scheme), |
| 178 shared_user_defaults_([[NSUserDefaults standardUserDefaults] retain]) { | 179 shared_user_defaults_([[NSUserDefaults standardUserDefaults] retain]) { |
| 179 Init(uptime); | 180 Init(uptime); |
| 180 } | 181 } |
| 181 | 182 |
| 182 bool ClipboardRecentContentIOS::HasPasteboardChanged(base::TimeDelta uptime) { | 183 bool ClipboardRecentContentIOS::HasPasteboardChanged(base::TimeDelta uptime) { |
| 183 // If [[UIPasteboard generalPasteboard] string] is nil, the content of the | |
| 184 // pasteboard cannot be accessed. This case should not be considered as a | |
| 185 // pasteboard change. | |
| 186 NSString* pasteboard_string = [[UIPasteboard generalPasteboard] string]; | |
| 187 if (!pasteboard_string) | |
| 188 return NO; | |
| 189 | |
| 190 // If |MD5Changed|, we know for sure there has been at least one pasteboard | 184 // If |MD5Changed|, we know for sure there has been at least one pasteboard |
| 191 // copy since last time it was checked. | 185 // copy since last time it was checked. |
| 192 // If the pasteboard content is still the same but the device was not | 186 // If the pasteboard content is still the same but the device was not |
| 193 // rebooted, the change count can be checked to see if it changed. | 187 // rebooted, the change count can be checked to see if it changed. |
| 194 // Note: due to a mismatch between the actual behavior and documentation, and | 188 // Note: due to a mismatch between the actual behavior and documentation, and |
| 195 // lack of consistency on different reboot scenarios, the change count cannot | 189 // lack of consistency on different reboot scenarios, the change count cannot |
| 196 // be checked after a reboot. | 190 // be checked after a reboot. |
| 197 // See radar://21833556 for more information. | 191 // See radar://21833556 for more information. |
| 198 NSInteger change_count = [UIPasteboard generalPasteboard].changeCount; | 192 NSInteger change_count = [UIPasteboard generalPasteboard].changeCount; |
| 199 bool change_count_changed = change_count != last_pasteboard_change_count_; | 193 bool change_count_changed = change_count != last_pasteboard_change_count_; |
| 200 | 194 |
| 201 bool not_rebooted = uptime > GetClipboardContentAge(); | 195 bool not_rebooted = uptime > GetClipboardContentAge(); |
| 202 if (not_rebooted) | 196 if (not_rebooted) |
| 203 return change_count_changed; | 197 return change_count_changed; |
| 204 | 198 |
| 199 NSString* pasteboard_string = [[UIPasteboard generalPasteboard] string]; |
| 200 if (!pasteboard_string) { |
| 201 pasteboard_string = @""; |
| 202 } |
| 205 NSData* md5 = WeakMD5FromNSString(pasteboard_string); | 203 NSData* md5 = WeakMD5FromNSString(pasteboard_string); |
| 206 BOOL md5_changed = ![md5 isEqualToData:last_pasteboard_entry_md5_]; | 204 BOOL md5_changed = ![md5 isEqualToData:last_pasteboard_entry_md5_]; |
| 207 | 205 |
| 208 return md5_changed; | 206 return md5_changed; |
| 209 } | 207 } |
| 210 | 208 |
| 211 void ClipboardRecentContentIOS::Init(base::TimeDelta uptime) { | 209 void ClipboardRecentContentIOS::Init(base::TimeDelta uptime) { |
| 212 last_pasteboard_change_count_ = NSIntegerMax; | 210 last_pasteboard_change_count_ = NSIntegerMax; |
| 213 url_from_pasteboard_cache_ = URLFromPasteboard(); | 211 url_from_pasteboard_cache_ = URLFromPasteboard(); |
| 214 LoadFromUserDefaults(); | 212 LoadFromUserDefaults(); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 274 void ClipboardRecentContentIOS::SaveToUserDefaults() { | 272 void ClipboardRecentContentIOS::SaveToUserDefaults() { |
| 275 [shared_user_defaults_ setInteger:last_pasteboard_change_count_ | 273 [shared_user_defaults_ setInteger:last_pasteboard_change_count_ |
| 276 forKey:kPasteboardChangeCountKey]; | 274 forKey:kPasteboardChangeCountKey]; |
| 277 [shared_user_defaults_ setObject:last_pasteboard_change_date_ | 275 [shared_user_defaults_ setObject:last_pasteboard_change_date_ |
| 278 forKey:kPasteboardChangeDateKey]; | 276 forKey:kPasteboardChangeDateKey]; |
| 279 [shared_user_defaults_ setObject:last_pasteboard_entry_md5_ | 277 [shared_user_defaults_ setObject:last_pasteboard_entry_md5_ |
| 280 forKey:kPasteboardEntryMD5Key]; | 278 forKey:kPasteboardEntryMD5Key]; |
| 281 [shared_user_defaults_ setObject:last_displayed_pasteboard_entry_ | 279 [shared_user_defaults_ setObject:last_displayed_pasteboard_entry_ |
| 282 forKey:kLastDisplayedPasteboardEntryKey]; | 280 forKey:kLastDisplayedPasteboardEntryKey]; |
| 283 } | 281 } |
| OLD | NEW |