[email protected] | c027d6d | 2014-06-05 15:25:40 | [diff] [blame] | 1 | // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
jitendra.ks | b1b7fee | 2015-09-22 17:42:53 | [diff] [blame] | 5 | #include "components/gcm_driver/gcm_desktop_utils.h" |
[email protected] | c027d6d | 2014-06-05 15:25:40 | [diff] [blame] | 6 | |
dcheng | 5160635 | 2015-12-26 21:16:23 | [diff] [blame] | 7 | #include <utility> |
| 8 | |
jitendra.ks | fd2ed430 | 2015-08-22 03:29:03 | [diff] [blame] | 9 | #include "base/command_line.h" |
[email protected] | c027d6d | 2014-06-05 15:25:40 | [diff] [blame] | 10 | #include "base/sequenced_task_runner.h" |
avi | 2606292 | 2015-12-26 00:14:18 | [diff] [blame] | 11 | #include "build/build_config.h" |
[email protected] | c027d6d | 2014-06-05 15:25:40 | [diff] [blame] | 12 | #include "components/gcm_driver/gcm_client_factory.h" |
| 13 | #include "components/gcm_driver/gcm_driver.h" |
jitendra.ks | fd2ed430 | 2015-08-22 03:29:03 | [diff] [blame] | 14 | #include "components/gcm_driver/gcm_driver_desktop.h" |
maxbogue | 455a57e3 | 2016-08-14 00:08:32 | [diff] [blame] | 15 | #include "components/sync/driver/sync_util.h" |
Mark Pilgrim | 7634f5b5 | 2018-06-27 19:53:27 | [diff] [blame] | 16 | #include "services/network/public/cpp/shared_url_loader_factory.h" |
jitendra.ks | fd2ed430 | 2015-08-22 03:29:03 | [diff] [blame] | 17 | #include "url/gurl.h" |
[email protected] | c027d6d | 2014-06-05 15:25:40 | [diff] [blame] | 18 | |
| 19 | namespace gcm { |
| 20 | |
jitendra.ks | fd2ed430 | 2015-08-22 03:29:03 | [diff] [blame] | 21 | namespace { |
| 22 | |
| 23 | const char kChannelStatusRelativePath[] = "/experimentstatus"; |
| 24 | |
| 25 | GCMClient::ChromePlatform GetPlatform() { |
| 26 | #if defined(OS_WIN) |
| 27 | return GCMClient::PLATFORM_WIN; |
| 28 | #elif defined(OS_MACOSX) |
| 29 | return GCMClient::PLATFORM_MAC; |
| 30 | #elif defined(OS_IOS) |
| 31 | return GCMClient::PLATFORM_IOS; |
| 32 | #elif defined(OS_ANDROID) |
| 33 | return GCMClient::PLATFORM_ANDROID; |
| 34 | #elif defined(OS_CHROMEOS) |
| 35 | return GCMClient::PLATFORM_CROS; |
| 36 | #elif defined(OS_LINUX) |
| 37 | return GCMClient::PLATFORM_LINUX; |
| 38 | #else |
| 39 | // For all other platforms, return as LINUX. |
| 40 | return GCMClient::PLATFORM_LINUX; |
| 41 | #endif |
| 42 | } |
| 43 | |
jitendra.ks | b1b7fee | 2015-09-22 17:42:53 | [diff] [blame] | 44 | GCMClient::ChromeChannel GetChannel(version_info::Channel channel) { |
jitendra.ks | fd2ed430 | 2015-08-22 03:29:03 | [diff] [blame] | 45 | switch (channel) { |
| 46 | case version_info::Channel::UNKNOWN: |
| 47 | return GCMClient::CHANNEL_UNKNOWN; |
| 48 | case version_info::Channel::CANARY: |
| 49 | return GCMClient::CHANNEL_CANARY; |
| 50 | case version_info::Channel::DEV: |
| 51 | return GCMClient::CHANNEL_DEV; |
| 52 | case version_info::Channel::BETA: |
| 53 | return GCMClient::CHANNEL_BETA; |
| 54 | case version_info::Channel::STABLE: |
| 55 | return GCMClient::CHANNEL_STABLE; |
jitendra.ks | fd2ed430 | 2015-08-22 03:29:03 | [diff] [blame] | 56 | } |
johnme | 133bfbad | 2016-10-19 22:13:52 | [diff] [blame] | 57 | NOTREACHED(); |
| 58 | return GCMClient::CHANNEL_UNKNOWN; |
jitendra.ks | fd2ed430 | 2015-08-22 03:29:03 | [diff] [blame] | 59 | } |
| 60 | |
| 61 | std::string GetVersion() { |
| 62 | return version_info::GetVersionNumber(); |
| 63 | } |
| 64 | |
johnme | 627dc8c7 | 2016-08-19 21:49:39 | [diff] [blame] | 65 | GCMClient::ChromeBuildInfo GetChromeBuildInfo( |
| 66 | version_info::Channel channel, |
| 67 | const std::string& product_category_for_subtypes) { |
jitendra.ks | fd2ed430 | 2015-08-22 03:29:03 | [diff] [blame] | 68 | GCMClient::ChromeBuildInfo chrome_build_info; |
| 69 | chrome_build_info.platform = GetPlatform(); |
jitendra.ks | b1b7fee | 2015-09-22 17:42:53 | [diff] [blame] | 70 | chrome_build_info.channel = GetChannel(channel); |
jitendra.ks | fd2ed430 | 2015-08-22 03:29:03 | [diff] [blame] | 71 | chrome_build_info.version = GetVersion(); |
johnme | 627dc8c7 | 2016-08-19 21:49:39 | [diff] [blame] | 72 | chrome_build_info.product_category_for_subtypes = |
| 73 | product_category_for_subtypes; |
jitendra.ks | fd2ed430 | 2015-08-22 03:29:03 | [diff] [blame] | 74 | return chrome_build_info; |
| 75 | } |
| 76 | |
jitendra.ks | b1b7fee | 2015-09-22 17:42:53 | [diff] [blame] | 77 | std::string GetChannelStatusRequestUrl(version_info::Channel channel) { |
maxbogue | 7e006db | 2016-10-03 19:48:28 | [diff] [blame] | 78 | GURL sync_url(syncer::GetSyncServiceURL( |
| 79 | *base::CommandLine::ForCurrentProcess(), channel)); |
jitendra.ks | fd2ed430 | 2015-08-22 03:29:03 | [diff] [blame] | 80 | return sync_url.spec() + kChannelStatusRelativePath; |
| 81 | } |
| 82 | |
jitendra.ks | fd2ed430 | 2015-08-22 03:29:03 | [diff] [blame] | 83 | } // namespace |
| 84 | |
dcheng | a77e28eb | 2016-04-21 21:34:37 | [diff] [blame] | 85 | std::unique_ptr<GCMDriver> CreateGCMDriverDesktop( |
| 86 | std::unique_ptr<GCMClientFactory> gcm_client_factory, |
jianli | 2dc910b0 | 2014-09-19 02:42:46 | [diff] [blame] | 87 | PrefService* prefs, |
[email protected] | c027d6d | 2014-06-05 15:25:40 | [diff] [blame] | 88 | const base::FilePath& store_path, |
Julie Jeongeun Kim | 17b2adf1 | 2019-10-29 10:24:48 | [diff] [blame] | 89 | base::RepeatingCallback<void( |
| 90 | mojo::PendingReceiver<network::mojom::ProxyResolvingSocketFactory>)> |
Helen Li | 5f3d96a | 2018-08-10 20:37:24 | [diff] [blame] | 91 | get_socket_factory_callback, |
Mark Pilgrim | 7634f5b5 | 2018-06-27 19:53:27 | [diff] [blame] | 92 | scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, |
Robbie McElrath | b0149933 | 2018-09-25 00:53:13 | [diff] [blame] | 93 | network::NetworkConnectionTracker* network_connection_tracker, |
jitendra.ks | b1b7fee | 2015-09-22 17:42:53 | [diff] [blame] | 94 | version_info::Channel channel, |
johnme | 627dc8c7 | 2016-08-19 21:49:39 | [diff] [blame] | 95 | const std::string& product_category_for_subtypes, |
jitendra.ks | b1b7fee | 2015-09-22 17:42:53 | [diff] [blame] | 96 | const scoped_refptr<base::SequencedTaskRunner>& ui_task_runner, |
| 97 | const scoped_refptr<base::SequencedTaskRunner>& io_task_runner, |
| 98 | const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner) { |
dcheng | a77e28eb | 2016-04-21 21:34:37 | [diff] [blame] | 99 | return std::unique_ptr<GCMDriver>(new GCMDriverDesktop( |
johnme | 627dc8c7 | 2016-08-19 21:49:39 | [diff] [blame] | 100 | std::move(gcm_client_factory), |
| 101 | GetChromeBuildInfo(channel, product_category_for_subtypes), |
Mikel Astiz | 2c0d90b | 2019-04-10 19:01:22 | [diff] [blame] | 102 | GetChannelStatusRequestUrl(channel), |
| 103 | syncer::MakeUserAgentForSync(channel), prefs, store_path, |
Alex Chau | a76a6e3 | 2019-06-26 16:20:01 | [diff] [blame] | 104 | get_socket_factory_callback, std::move(url_loader_factory), |
Robbie McElrath | b0149933 | 2018-09-25 00:53:13 | [diff] [blame] | 105 | network_connection_tracker, ui_task_runner, io_task_runner, |
| 106 | blocking_task_runner)); |
[email protected] | c027d6d | 2014-06-05 15:25:40 | [diff] [blame] | 107 | } |
| 108 | |
| 109 | } // namespace gcm |