blob: 443eb0f09df16d56a7fca7ffc839251358a530fb [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.ksb1b7fee2015-09-22 17:42:5383std::string GetUserAgent(version_info::Channel channel) {
pavely9dfc83c2016-05-28 00:47:3384 // TODO(pavely): Fix hardcoded is_tablet value in following call to
85 // MakeUserAgentForSync. Current implementation returns iPhone UserAgent for
86 // iPad devices.
maxbogue7e006db2016-10-03 19:48:2887 return syncer::MakeUserAgentForSync(channel, false);
jitendra.ksfd2ed4302015-08-22 03:29:0388}
89
90} // namespace
91
dchenga77e28eb2016-04-21 21:34:3792std::unique_ptr<GCMDriver> CreateGCMDriverDesktop(
93 std::unique_ptr<GCMClientFactory> gcm_client_factory,
jianli2dc910b02014-09-19 02:42:4694 PrefService* prefs,
[email protected]c027d6d2014-06-05 15:25:4095 const base::FilePath& store_path,
Helen Li5f3d96a2018-08-10 20:37:2496 base::RepeatingCallback<
97 void(network::mojom::ProxyResolvingSocketFactoryRequest)>
98 get_socket_factory_callback,
Mark Pilgrim7634f5b52018-06-27 19:53:2799 scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory,
Robbie McElrathb01499332018-09-25 00:53:13100 network::NetworkConnectionTracker* network_connection_tracker,
jitendra.ksb1b7fee2015-09-22 17:42:53101 version_info::Channel channel,
johnme627dc8c72016-08-19 21:49:39102 const std::string& product_category_for_subtypes,
jitendra.ksb1b7fee2015-09-22 17:42:53103 const scoped_refptr<base::SequencedTaskRunner>& ui_task_runner,
104 const scoped_refptr<base::SequencedTaskRunner>& io_task_runner,
105 const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner) {
dchenga77e28eb2016-04-21 21:34:37106 return std::unique_ptr<GCMDriver>(new GCMDriverDesktop(
johnme627dc8c72016-08-19 21:49:39107 std::move(gcm_client_factory),
108 GetChromeBuildInfo(channel, product_category_for_subtypes),
dcheng51606352015-12-26 21:16:23109 GetChannelStatusRequestUrl(channel), GetUserAgent(channel), prefs,
Helen Li5f3d96a2018-08-10 20:37:24110 store_path, get_socket_factory_callback, url_loader_factory,
Robbie McElrathb01499332018-09-25 00:53:13111 network_connection_tracker, ui_task_runner, io_task_runner,
112 blocking_task_runner));
[email protected]c027d6d2014-06-05 15:25:40113}
114
115} // namespace gcm