[ios] Avoid unnecessary copies of GURL and std::string

Change TabResumptionItem to return tabURL and URLKey by
const reference instead of copies. This avoid unnecessary
copies when repeatedly accessing those properties (as is
done in -[TabResumptionMediator fetchSnapshotForItem:]).

Bug: none
Change-Id: I57a6652be9b79acd3467dc275b4ed67ac13b1a69
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5640159
Commit-Queue: Sylvain Defresne <sdefresne@chromium.org>
Auto-Submit: Sylvain Defresne <sdefresne@chromium.org>
Code-Coverage: findit-for-me@appspot.gserviceaccount.com <findit-for-me@appspot.gserviceaccount.com>
Reviewed-by: Quentin Pubert <qpubert@google.com>
Commit-Queue: Quentin Pubert <qpubert@google.com>
Cr-Commit-Position: refs/heads/main@{#1316958}
diff --git a/ios/chrome/browser/ui/content_suggestions/tab_resumption/tab_resumption_item.h b/ios/chrome/browser/ui/content_suggestions/tab_resumption/tab_resumption_item.h
index 4d3ad1c..23c875c 100644
--- a/ios/chrome/browser/ui/content_suggestions/tab_resumption/tab_resumption_item.h
+++ b/ios/chrome/browser/ui/content_suggestions/tab_resumption/tab_resumption_item.h
@@ -7,6 +7,8 @@
 
 #import <UIKit/UIKit.h>
 
+#import <string>
+
 #import "components/segmentation_platform/public/trigger.h"
 #import "ios/chrome/browser/ui/content_suggestions/magic_stack/magic_stack_module.h"
 
@@ -39,7 +41,7 @@
 @property(nonatomic, copy) NSString* tabTitle;
 
 // The URL of the tab.
-@property(nonatomic, assign) GURL tabURL;
+@property(nonatomic, assign) const GURL& tabURL;
 
 // The time when the tab was synced.
 @property(nonatomic, assign) base::Time syncedTime;
@@ -54,7 +56,7 @@
 @property(nonatomic, weak) id<TabResumptionCommands> commandHandler;
 
 // The URL key used to log metrics when displaying or activating the item.
-@property(nonatomic, assign) std::string URLKey;
+@property(nonatomic, assign) const std::string& URLKey;
 
 // An ID used to collect metrics associated with the triggering visit for model
 // training purposes.
diff --git a/ios/chrome/browser/ui/content_suggestions/tab_resumption/tab_resumption_item.mm b/ios/chrome/browser/ui/content_suggestions/tab_resumption/tab_resumption_item.mm
index 3aec943..86416e98 100644
--- a/ios/chrome/browser/ui/content_suggestions/tab_resumption/tab_resumption_item.mm
+++ b/ios/chrome/browser/ui/content_suggestions/tab_resumption/tab_resumption_item.mm
@@ -4,11 +4,16 @@
 
 #import "ios/chrome/browser/ui/content_suggestions/tab_resumption/tab_resumption_item.h"
 
+#import <string>
+
 #import "base/time/time.h"
 #import "ios/chrome/browser/ui/content_suggestions/content_suggestions_constants.h"
 #import "url/gurl.h"
 
-@implementation TabResumptionItem
+@implementation TabResumptionItem {
+  GURL _tabURL;
+  std::string _URLKey;
+}
 
 - (instancetype)initWithItemType:(TabResumptionItemType)itemType {
   if ((self = [super init])) {
@@ -36,4 +41,22 @@
   _requestID = item.requestID;
 }
 
+#pragma mark - properties
+
+- (const GURL&)tabURL {
+  return _tabURL;
+}
+
+- (void)setTabURL:(const GURL&)tabURL {
+  _tabURL = tabURL;
+}
+
+- (const std::string&)URLKey {
+  return _URLKey;
+}
+
+- (void)setURLKey:(const std::string&)URLKey {
+  _URLKey = URLKey;
+}
+
 @end
diff --git a/ios/chrome/browser/ui/content_suggestions/tab_resumption/tab_resumption_item_unittest.mm b/ios/chrome/browser/ui/content_suggestions/tab_resumption/tab_resumption_item_unittest.mm
index 929a268..707744f 100644
--- a/ios/chrome/browser/ui/content_suggestions/tab_resumption/tab_resumption_item_unittest.mm
+++ b/ios/chrome/browser/ui/content_suggestions/tab_resumption/tab_resumption_item_unittest.mm
@@ -37,7 +37,7 @@
   item.faviconImage = DefaultSettingsRootSymbol(@"circle");
   item.contentImage = DefaultSettingsRootSymbol(@"flame");
   item.commandHandler = command_handler;
-  item.URLKey = "url key a";
+  item.URLKey = std::string("url key a");
   item.requestID = segmentation_platform::TrainingRequestId::FromUnsafeValue(1);
 
   TabResumptionItem* item2 = [[TabResumptionItem alloc]
@@ -49,7 +49,7 @@
   item2.faviconImage = DefaultSettingsRootSymbol(@"link");
   item2.contentImage = DefaultSettingsRootSymbol(@"trash");
   item2.commandHandler = command_handler;
-  item2.URLKey = "url key b";
+  item2.URLKey = std::string("url key b");
   item2.requestID =
       segmentation_platform::TrainingRequestId::FromUnsafeValue(2);