summaryrefslogtreecommitdiffstats
path: root/ios/chrome/browser/xcallback_parameters.mm
blob: a660a9053161657d8016abaa40ebee29bdf55a86 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
// Copyright 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#import "ios/chrome/browser/xcallback_parameters.h"

#include "base/logging.h"
#include "base/mac/scoped_nsobject.h"
#include "base/strings/sys_string_conversions.h"

namespace {
NSString* const kSourceAppIdKey = @"sourceAppId";
NSString* const kSourceAppNameKey = @"sourceAppName";
NSString* const kSuccessURLKey = @"successURL";
NSString* const kCreateNewTabKey = @"createNewTab";
}

@interface XCallbackParameters () {
  base::scoped_nsobject<NSString> _sourceAppId;
  base::scoped_nsobject<NSString> _sourceAppName;
  GURL _successURL;
  BOOL _createNewTab;
}
@end

@implementation XCallbackParameters

@synthesize successURL = _successURL;
@synthesize createNewTab = _createNewTab;

- (instancetype)initWithSourceAppId:(NSString*)sourceAppId
                      sourceAppName:(NSString*)sourceAppName
                         successURL:(const GURL&)successURL
                       createNewTab:(BOOL)createNewTab {
  self = [super init];
  if (self) {
    _sourceAppId.reset([sourceAppId copy]);
    _sourceAppName.reset([sourceAppName copy]);
    _successURL = successURL;
    _createNewTab = createNewTab;
  }
  return self;
}

- (instancetype)init {
  NOTREACHED();
  return nil;
}

- (NSString*)description {
  return [NSString stringWithFormat:@"SourceApp: %@ (%@)\nSuccessURL: %s\n",
                                    _sourceAppName.get(), _sourceAppId.get(),
                                    _successURL.spec().c_str()];
}

- (NSString*)sourceAppId {
  return _sourceAppId.get();
}

- (NSString*)sourceAppName {
  return _sourceAppName.get();
}

#pragma mark - NSCoding Methods

- (instancetype)initWithCoder:(NSCoder*)aDecoder {
  GURL successURL;
  NSString* successURLStr = [aDecoder decodeObjectForKey:kSuccessURLKey];
  if (successURLStr)
    _successURL = GURL(base::SysNSStringToUTF8(successURLStr));

  return
      [self initWithSourceAppId:[aDecoder decodeObjectForKey:kSourceAppIdKey]
                  sourceAppName:[aDecoder decodeObjectForKey:kSourceAppNameKey]
                     successURL:successURL
                   createNewTab:[aDecoder decodeBoolForKey:kCreateNewTabKey]];
}

- (void)encodeWithCoder:(NSCoder*)aCoder {
  [aCoder encodeObject:_sourceAppId forKey:kSourceAppIdKey];
  [aCoder encodeObject:_sourceAppName forKey:kSourceAppNameKey];
  if (_successURL.is_valid()) {
    NSString* successStr = base::SysUTF8ToNSString(_successURL.spec());
    [aCoder encodeObject:successStr forKey:kSuccessURLKey];
  }
  [aCoder encodeBool:_createNewTab forKey:kCreateNewTabKey];
}

#pragma mark - NSCopying Methods

- (instancetype)copyWithZone:(NSZone*)zone {
  XCallbackParameters* copy =
      [[[self class] allocWithZone:zone] initWithSourceAppId:_sourceAppId
                                               sourceAppName:_sourceAppName
                                                  successURL:_successURL
                                                createNewTab:_createNewTab];
  return copy;
}

@end