| 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 |