blob: 0f73008093e8d84e51cd6430c08d96acf07dfffe [file] [log] [blame]
[email protected]c027d6d2014-06-05 15:25:401// 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.ksb1b7fee2015-09-22 17:42:535#include "components/gcm_driver/gcm_desktop_utils.h"
[email protected]c027d6d2014-06-05 15:25:406
dcheng51606352015-12-26 21:16:237#include <utility>
8
jitendra.ksfd2ed4302015-08-22 03:29:039#include "base/command_line.h"
[email protected]c027d6d2014-06-05 15:25:4010#include "base/sequenced_task_runner.h"
avi26062922015-12-26 00:14:1811#include "build/build_config.h"
[email protected]c027d6d2014-06-05 15:25:4012#include "components/gcm_driver/gcm_client_factory.h"
13#include "components/gcm_driver/gcm_driver.h"
jitendra.ksfd2ed4302015-08-22 03:29:0314#include "components/gcm_driver/gcm_driver_desktop.h"
maxbogue455a57e32016-08-14 00:08:3215#include "components/sync/driver/sync_util.h"
Mark Pilgrim7634f5b52018-06-27 19:53:2716#include "services/network/public/cpp/shared_url_loader_factory.h"
jitendra.ksfd2ed4302015-08-22 03:29:0317#include "url/gurl.h"
[email protected]c027d6d2014-06-05 15:25:4018
19namespace gcm {
20
jitendra.ksfd2ed4302015-08-22 03:29:0321namespace {
22
23const char kChannelStatusRelativePath[] = "/experimentstatus";
24
25GCMClient::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.ksb1b7fee2015-09-22 17:42:5344GCMClient::ChromeChannel GetChannel(version_info::Channel channel) {
jitendra.ksfd2ed4302015-08-22 03:29:0345 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.ksfd2ed4302015-08-22 03:29:0356 }
johnme133bfbad2016-10-19 22:13:5257 NOTREACHED();
58 return GCMClient::CHANNEL_UNKNOWN;
jitendra.ksfd2ed4302015-08-22 03:29:0359}
60
61std::string GetVersion() {
62 return version_info::GetVersionNumber();
63}
64
johnme627dc8c72016-08-19 21:49:3965GCMClient::ChromeBuildInfo GetChromeBuildInfo(
66 version_info::Channel channel,
67 const std::string& product_category_for_subtypes) {
jitendra.ksfd2ed4302015-08-22 03:29:0368 GCMClient::ChromeBuildInfo chrome_build_info;
69 chrome_build_info.platform = GetPlatform();
jitendra.ksb1b7fee2015-09-22 17:42:5370 chrome_build_info.channel = GetChannel(channel);
jitendra.ksfd2ed4302015-08-22 03:29:0371 chrome_build_info.version = GetVersion();
johnme627dc8c72016-08-19 21:49:3972 chrome_build_info.product_category_for_subtypes =
73 product_category_for_subtypes;
jitendra.ksfd2ed4302015-08-22 03:29:0374 return chrome_build_info;
75}
76
jitendra.ksb1b7fee2015-09-22 17:42:5377std::string GetChannelStatusRequestUrl(version_info::Channel channel) {
maxbogue7e006db2016-10-03 19:48:2878 GURL sync_url(syncer::GetSyncServiceURL(
79 *base::CommandLine::ForCurrentProcess(), channel));
jitendra.ksfd2ed4302015-08-22 03:29:0380 return sync_url.spec() + kChannelStatusRelativePath;
81}
82
jitendra.ksfd2ed4302015-08-22 03:29:0383} // namespace
84
dchenga77e28eb2016-04-21 21:34:3785std::unique_ptr<GCMDriver> CreateGCMDriverDesktop(
86 std::unique_ptr<GCMClientFactory> gcm_client_factory,
jianli2dc910b02014-09-19 02:42:4687 PrefService* prefs,
[email protected]c027d6d2014-06-05 15:25:4088 const base::FilePath& store_path,
Julie Jeongeun Kim17b2adf12019-10-29 10:24:4889 base::RepeatingCallback<void(
90 mojo::PendingReceiver<network::mojom::ProxyResolvingSocketFactory>)>
Helen Li5f3d96a2018-08-10 20:37:2491 get_socket_factory_callback,
Mark Pilgrim7634f5b52018-06-27 19:53:2792 scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
Robbie McElrathb01499332018-09-25 00:53:1393 network::NetworkConnectionTracker* network_connection_tracker,
jitendra.ksb1b7fee2015-09-22 17:42:5394 version_info::Channel channel,
johnme627dc8c72016-08-19 21:49:3995 const std::string& product_category_for_subtypes,
jitendra.ksb1b7fee2015-09-22 17:42:5396 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) {
dchenga77e28eb2016-04-21 21:34:3799 return std::unique_ptr<GCMDriver>(new GCMDriverDesktop(
johnme627dc8c72016-08-19 21:49:39100 std::move(gcm_client_factory),
101 GetChromeBuildInfo(channel, product_category_for_subtypes),
Mikel Astiz2c0d90b2019-04-10 19:01:22102 GetChannelStatusRequestUrl(channel),
103 syncer::MakeUserAgentForSync(channel), prefs, store_path,
Alex Chaua76a6e32019-06-26 16:20:01104 get_socket_factory_callback, std::move(url_loader_factory),
Robbie McElrathb01499332018-09-25 00:53:13105 network_connection_tracker, ui_task_runner, io_task_runner,
106 blocking_task_runner));
[email protected]c027d6d2014-06-05 15:25:40107}
108
109} // namespace gcm