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 "ios/chrome/app/chrome_app_startup_parameters.h" | 5 #import "ios/chrome/app/chrome_app_startup_parameters.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/mac/foundation_util.h" | 8 #include "base/mac/foundation_util.h" |
9 #include "base/metrics/histogram_macros.h" | 9 #include "base/metrics/histogram_macros.h" |
10 #include "base/metrics/user_metrics_action.h" | 10 #include "base/metrics/user_metrics_action.h" |
11 #include "base/strings/sys_string_conversions.h" | 11 #include "base/strings/sys_string_conversions.h" |
12 #include "ios/chrome/browser/chrome_url_constants.h" | 12 #include "ios/chrome/browser/chrome_url_constants.h" |
13 #include "ios/chrome/browser/xcallback_parameters.h" | |
14 #include "ios/chrome/common/app_group/app_group_constants.h" | 13 #include "ios/chrome/common/app_group/app_group_constants.h" |
15 #include "ios/chrome/common/x_callback_url.h" | 14 #include "ios/chrome/common/x_callback_url.h" |
16 #import "net/base/mac/url_conversions.h" | 15 #import "net/base/mac/url_conversions.h" |
17 #include "url/gurl.h" | 16 #include "url/gurl.h" |
18 | 17 |
19 #if !defined(__has_feature) || !__has_feature(objc_arc) | 18 #if !defined(__has_feature) || !__has_feature(objc_arc) |
20 #error "This file requires ARC support." | 19 #error "This file requires ARC support." |
21 #endif | 20 #endif |
22 | 21 |
23 namespace { | 22 namespace { |
(...skipping 25 matching lines...) Expand all Loading... |
49 | 48 |
50 } // namespace | 49 } // namespace |
51 | 50 |
52 @implementation ChromeAppStartupParameters { | 51 @implementation ChromeAppStartupParameters { |
53 NSString* _secureSourceApp; | 52 NSString* _secureSourceApp; |
54 NSString* _declaredSourceApp; | 53 NSString* _declaredSourceApp; |
55 NSURL* _completeURL; | 54 NSURL* _completeURL; |
56 } | 55 } |
57 | 56 |
58 - (instancetype)initWithExternalURL:(const GURL&)externalURL | 57 - (instancetype)initWithExternalURL:(const GURL&)externalURL |
59 xCallbackParameters:(XCallbackParameters*)xCallbackParameters { | |
60 NOTREACHED(); | |
61 return nil; | |
62 } | |
63 | |
64 - (instancetype)initWithExternalURL:(const GURL&)externalURL | |
65 xCallbackParameters:(XCallbackParameters*)xCallbackParameters | |
66 declaredSourceApp:(NSString*)declaredSourceApp | 58 declaredSourceApp:(NSString*)declaredSourceApp |
67 secureSourceApp:(NSString*)secureSourceApp | 59 secureSourceApp:(NSString*)secureSourceApp |
68 completeURL:(NSURL*)completeURL { | 60 completeURL:(NSURL*)completeURL { |
69 self = [super initWithExternalURL:externalURL | 61 self = [super initWithExternalURL:externalURL]; |
70 xCallbackParameters:xCallbackParameters]; | |
71 if (self) { | 62 if (self) { |
72 _declaredSourceApp = [declaredSourceApp copy]; | 63 _declaredSourceApp = [declaredSourceApp copy]; |
73 _secureSourceApp = [secureSourceApp copy]; | 64 _secureSourceApp = [secureSourceApp copy]; |
74 _completeURL = completeURL; | 65 _completeURL = completeURL; |
75 } | 66 } |
76 return self; | 67 return self; |
77 } | 68 } |
78 | 69 |
79 + (instancetype)newChromeAppStartupParametersWithURL:(NSURL*)completeURL | 70 + (instancetype)newChromeAppStartupParametersWithURL:(NSURL*)completeURL |
80 fromSourceApplication:(NSString*)appId { | 71 fromSourceApplication:(NSString*)appId { |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
113 MOBILE_SESSION_START_ACTION_COUNT); | 104 MOBILE_SESSION_START_ACTION_COUNT); |
114 | 105 |
115 std::map<std::string, std::string> parameters = | 106 std::map<std::string, std::string> parameters = |
116 ExtractQueryParametersFromXCallbackURL(gurl); | 107 ExtractQueryParametersFromXCallbackURL(gurl); |
117 GURL url = GURL(parameters["url"]); | 108 GURL url = GURL(parameters["url"]); |
118 if (!url.is_valid() || | 109 if (!url.is_valid() || |
119 (!url.SchemeIs(url::kHttpScheme) && !url.SchemeIs(url::kHttpsScheme))) { | 110 (!url.SchemeIs(url::kHttpScheme) && !url.SchemeIs(url::kHttpsScheme))) { |
120 return nil; | 111 return nil; |
121 } | 112 } |
122 | 113 |
123 XCallbackParameters* xcallbackParameters = | |
124 [[XCallbackParameters alloc] initWithSourceAppId:appId]; | |
125 | |
126 return [[ChromeAppStartupParameters alloc] | 114 return [[ChromeAppStartupParameters alloc] |
127 initWithExternalURL:url | 115 initWithExternalURL:url |
128 xCallbackParameters:xcallbackParameters | |
129 declaredSourceApp:appId | 116 declaredSourceApp:appId |
130 secureSourceApp:nil | 117 secureSourceApp:nil |
131 completeURL:completeURL]; | 118 completeURL:completeURL]; |
132 | 119 |
133 } else if (gurl.SchemeIsFile()) { | 120 } else if (gurl.SchemeIsFile()) { |
134 UMA_HISTOGRAM_ENUMERATION(kUMAMobileSessionStartActionHistogram, | 121 UMA_HISTOGRAM_ENUMERATION(kUMAMobileSessionStartActionHistogram, |
135 START_ACTION_OPEN_FILE, | 122 START_ACTION_OPEN_FILE, |
136 MOBILE_SESSION_START_ACTION_COUNT); | 123 MOBILE_SESSION_START_ACTION_COUNT); |
137 // |url| is the path to a file received from another application. | 124 // |url| is the path to a file received from another application. |
138 GURL::Replacements replacements; | 125 GURL::Replacements replacements; |
139 const std::string host(kChromeUIExternalFileHost); | 126 const std::string host(kChromeUIExternalFileHost); |
140 std::string filename = gurl.ExtractFileName(); | 127 std::string filename = gurl.ExtractFileName(); |
141 replacements.SetPathStr(filename); | 128 replacements.SetPathStr(filename); |
142 replacements.SetSchemeStr(kChromeUIScheme); | 129 replacements.SetSchemeStr(kChromeUIScheme); |
143 replacements.SetHostStr(host); | 130 replacements.SetHostStr(host); |
144 GURL externalURL = gurl.ReplaceComponents(replacements); | 131 GURL externalURL = gurl.ReplaceComponents(replacements); |
145 if (!externalURL.is_valid()) | 132 if (!externalURL.is_valid()) |
146 return nil; | 133 return nil; |
147 return [[ChromeAppStartupParameters alloc] initWithExternalURL:externalURL | 134 return [[ChromeAppStartupParameters alloc] initWithExternalURL:externalURL |
148 xCallbackParameters:nil | |
149 declaredSourceApp:appId | 135 declaredSourceApp:appId |
150 secureSourceApp:nil | 136 secureSourceApp:nil |
151 completeURL:completeURL]; | 137 completeURL:completeURL]; |
152 } else { | 138 } else { |
153 // Replace the scheme with https or http depending on whether the input | 139 // Replace the scheme with https or http depending on whether the input |
154 // |url| scheme ends with an 's'. | 140 // |url| scheme ends with an 's'. |
155 BOOL useHttps = gurl.scheme()[gurl.scheme().length() - 1] == 's'; | 141 BOOL useHttps = gurl.scheme()[gurl.scheme().length() - 1] == 's'; |
156 MobileSessionStartAction action = | 142 MobileSessionStartAction action = |
157 useHttps ? START_ACTION_OPEN_HTTPS : START_ACTION_OPEN_HTTP; | 143 useHttps ? START_ACTION_OPEN_HTTPS : START_ACTION_OPEN_HTTP; |
158 UMA_HISTOGRAM_ENUMERATION(kUMAMobileSessionStartActionHistogram, action, | 144 UMA_HISTOGRAM_ENUMERATION(kUMAMobileSessionStartActionHistogram, action, |
159 MOBILE_SESSION_START_ACTION_COUNT); | 145 MOBILE_SESSION_START_ACTION_COUNT); |
160 GURL::Replacements replace_scheme; | 146 GURL::Replacements replace_scheme; |
161 if (useHttps) | 147 if (useHttps) |
162 replace_scheme.SetSchemeStr(url::kHttpsScheme); | 148 replace_scheme.SetSchemeStr(url::kHttpsScheme); |
163 else | 149 else |
164 replace_scheme.SetSchemeStr(url::kHttpScheme); | 150 replace_scheme.SetSchemeStr(url::kHttpScheme); |
165 GURL externalURL = gurl.ReplaceComponents(replace_scheme); | 151 GURL externalURL = gurl.ReplaceComponents(replace_scheme); |
166 if (!externalURL.is_valid()) | 152 if (!externalURL.is_valid()) |
167 return nil; | 153 return nil; |
168 return [[ChromeAppStartupParameters alloc] initWithExternalURL:externalURL | 154 return [[ChromeAppStartupParameters alloc] initWithExternalURL:externalURL |
169 xCallbackParameters:nil | |
170 declaredSourceApp:appId | 155 declaredSourceApp:appId |
171 secureSourceApp:nil | 156 secureSourceApp:nil |
172 completeURL:completeURL]; | 157 completeURL:completeURL]; |
173 } | 158 } |
174 } | 159 } |
175 | 160 |
176 + (instancetype)newExtensionCommandAppStartupParametersFromWithURL:(NSURL*)url | 161 + (instancetype)newExtensionCommandAppStartupParametersFromWithURL:(NSURL*)url |
177 fromSourceApplication: | 162 fromSourceApplication: |
178 (NSString*)appId { | 163 (NSString*)appId { |
179 NSString* appGroup = app_group::ApplicationGroup(); | 164 NSString* appGroup = app_group::ApplicationGroup(); |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 + (instancetype)newAppStartupParametersForCommand:(NSString*)command | 221 + (instancetype)newAppStartupParametersForCommand:(NSString*)command |
237 withParameter:(id)parameter | 222 withParameter:(id)parameter |
238 withURL:(NSURL*)url | 223 withURL:(NSURL*)url |
239 fromSourceApplication:(NSString*)appId | 224 fromSourceApplication:(NSString*)appId |
240 fromSecureSourceApplication:(NSString*)secureSourceApp { | 225 fromSecureSourceApplication:(NSString*)secureSourceApp { |
241 if ([command | 226 if ([command |
242 isEqualToString:base::SysUTF8ToNSString( | 227 isEqualToString:base::SysUTF8ToNSString( |
243 app_group::kChromeAppGroupVoiceSearchCommand)]) { | 228 app_group::kChromeAppGroupVoiceSearchCommand)]) { |
244 ChromeAppStartupParameters* params = [[ChromeAppStartupParameters alloc] | 229 ChromeAppStartupParameters* params = [[ChromeAppStartupParameters alloc] |
245 initWithExternalURL:GURL(kChromeUINewTabURL) | 230 initWithExternalURL:GURL(kChromeUINewTabURL) |
246 xCallbackParameters:nil | |
247 declaredSourceApp:appId | 231 declaredSourceApp:appId |
248 secureSourceApp:secureSourceApp | 232 secureSourceApp:secureSourceApp |
249 completeURL:url]; | 233 completeURL:url]; |
250 [params setLaunchVoiceSearch:YES]; | 234 [params setLaunchVoiceSearch:YES]; |
251 return params; | 235 return params; |
252 } | 236 } |
253 | 237 |
254 if ([command isEqualToString:base::SysUTF8ToNSString( | 238 if ([command isEqualToString:base::SysUTF8ToNSString( |
255 app_group::kChromeAppGroupNewTabCommand)]) { | 239 app_group::kChromeAppGroupNewTabCommand)]) { |
256 return [[ChromeAppStartupParameters alloc] | 240 return [[ChromeAppStartupParameters alloc] |
257 initWithExternalURL:GURL(kChromeUINewTabURL) | 241 initWithExternalURL:GURL(kChromeUINewTabURL) |
258 xCallbackParameters:nil | |
259 declaredSourceApp:appId | 242 declaredSourceApp:appId |
260 secureSourceApp:secureSourceApp | 243 secureSourceApp:secureSourceApp |
261 completeURL:url]; | 244 completeURL:url]; |
262 } | 245 } |
263 | 246 |
264 if ([command | 247 if ([command |
265 isEqualToString:base::SysUTF8ToNSString( | 248 isEqualToString:base::SysUTF8ToNSString( |
266 app_group::kChromeAppGroupFocusOmniboxCommand)]) { | 249 app_group::kChromeAppGroupFocusOmniboxCommand)]) { |
267 ChromeAppStartupParameters* params = [[ChromeAppStartupParameters alloc] | 250 ChromeAppStartupParameters* params = [[ChromeAppStartupParameters alloc] |
268 initWithExternalURL:GURL(kChromeUINewTabURL) | 251 initWithExternalURL:GURL(kChromeUINewTabURL) |
269 xCallbackParameters:nil | |
270 declaredSourceApp:appId | 252 declaredSourceApp:appId |
271 secureSourceApp:secureSourceApp | 253 secureSourceApp:secureSourceApp |
272 completeURL:url]; | 254 completeURL:url]; |
273 [params setLaunchFocusOmnibox:YES]; | 255 [params setLaunchFocusOmnibox:YES]; |
274 return params; | 256 return params; |
275 } | 257 } |
276 | 258 |
277 if ([command isEqualToString:base::SysUTF8ToNSString( | 259 if ([command isEqualToString:base::SysUTF8ToNSString( |
278 app_group::kChromeAppGroupOpenURLCommand)]) { | 260 app_group::kChromeAppGroupOpenURLCommand)]) { |
279 if (!parameter || ![parameter isKindOfClass:[NSString class]]) | 261 if (!parameter || ![parameter isKindOfClass:[NSString class]]) |
280 return nil; | 262 return nil; |
281 GURL externalURL(base::SysNSStringToUTF8(parameter)); | 263 GURL externalURL(base::SysNSStringToUTF8(parameter)); |
282 if (!externalURL.is_valid() || !externalURL.SchemeIsHTTPOrHTTPS()) | 264 if (!externalURL.is_valid() || !externalURL.SchemeIsHTTPOrHTTPS()) |
283 return nil; | 265 return nil; |
284 return | 266 return |
285 [[ChromeAppStartupParameters alloc] initWithExternalURL:externalURL | 267 [[ChromeAppStartupParameters alloc] initWithExternalURL:externalURL |
286 xCallbackParameters:nil | |
287 declaredSourceApp:appId | 268 declaredSourceApp:appId |
288 secureSourceApp:secureSourceApp | 269 secureSourceApp:secureSourceApp |
289 completeURL:url]; | 270 completeURL:url]; |
290 } | 271 } |
291 | 272 |
292 if ([command | 273 if ([command |
293 isEqualToString:base::SysUTF8ToNSString( | 274 isEqualToString:base::SysUTF8ToNSString( |
294 app_group::kChromeAppGroupQRScannerCommand)]) { | 275 app_group::kChromeAppGroupQRScannerCommand)]) { |
295 ChromeAppStartupParameters* params = [[ChromeAppStartupParameters alloc] | 276 ChromeAppStartupParameters* params = [[ChromeAppStartupParameters alloc] |
296 initWithExternalURL:GURL(kChromeUINewTabURL) | 277 initWithExternalURL:GURL(kChromeUINewTabURL) |
297 xCallbackParameters:nil | |
298 declaredSourceApp:appId | 278 declaredSourceApp:appId |
299 secureSourceApp:secureSourceApp | 279 secureSourceApp:secureSourceApp |
300 completeURL:url]; | 280 completeURL:url]; |
301 [params setLaunchQRScanner:YES]; | 281 [params setLaunchQRScanner:YES]; |
302 return params; | 282 return params; |
303 } | 283 } |
304 | 284 |
305 if ([command isEqualToString: | 285 if ([command isEqualToString: |
306 base::SysUTF8ToNSString( | 286 base::SysUTF8ToNSString( |
307 app_group::kChromeAppGroupIncognitoSearchCommand)]) { | 287 app_group::kChromeAppGroupIncognitoSearchCommand)]) { |
308 ChromeAppStartupParameters* params = [[ChromeAppStartupParameters alloc] | 288 ChromeAppStartupParameters* params = [[ChromeAppStartupParameters alloc] |
309 initWithExternalURL:GURL(kChromeUINewTabURL) | 289 initWithExternalURL:GURL(kChromeUINewTabURL) |
310 xCallbackParameters:nil | |
311 declaredSourceApp:appId | 290 declaredSourceApp:appId |
312 secureSourceApp:secureSourceApp | 291 secureSourceApp:secureSourceApp |
313 completeURL:url]; | 292 completeURL:url]; |
314 [params setLaunchInIncognito:YES]; | 293 [params setLaunchInIncognito:YES]; |
315 [params setLaunchFocusOmnibox:YES]; | 294 [params setLaunchFocusOmnibox:YES]; |
316 return params; | 295 return params; |
317 } | 296 } |
318 | 297 |
319 return nil; | 298 return nil; |
320 } | 299 } |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
374 } | 353 } |
375 if (found.location > 0) { | 354 if (found.location > 0) { |
376 unichar charBefore = [query characterAtIndex:(found.location - 1)]; | 355 unichar charBefore = [query characterAtIndex:(found.location - 1)]; |
377 if (charBefore != '&') | 356 if (charBefore != '&') |
378 return first_run::LAUNCH_BY_MOBILESAFARI; | 357 return first_run::LAUNCH_BY_MOBILESAFARI; |
379 } | 358 } |
380 return first_run::LAUNCH_BY_SMARTAPPBANNER; | 359 return first_run::LAUNCH_BY_SMARTAPPBANNER; |
381 } | 360 } |
382 | 361 |
383 @end | 362 @end |
OLD | NEW |