| // Copyright 2014 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "components/gcm_driver/gcm_desktop_utils.h" | 
 |  | 
 | #include <utility> | 
 |  | 
 | #include "base/command_line.h" | 
 | #include "base/sequenced_task_runner.h" | 
 | #include "base/threading/sequenced_worker_pool.h" | 
 | #include "build/build_config.h" | 
 | #include "components/gcm_driver/gcm_client_factory.h" | 
 | #include "components/gcm_driver/gcm_driver.h" | 
 | #include "components/gcm_driver/gcm_driver_desktop.h" | 
 | #include "components/sync/driver/sync_util.h" | 
 | #include "url/gurl.h" | 
 |  | 
 | namespace gcm { | 
 |  | 
 | namespace { | 
 |  | 
 | const char kChannelStatusRelativePath[] = "/experimentstatus"; | 
 |  | 
 | GCMClient::ChromePlatform GetPlatform() { | 
 | #if defined(OS_WIN) | 
 |   return GCMClient::PLATFORM_WIN; | 
 | #elif defined(OS_MACOSX) | 
 |   return GCMClient::PLATFORM_MAC; | 
 | #elif defined(OS_IOS) | 
 |   return GCMClient::PLATFORM_IOS; | 
 | #elif defined(OS_ANDROID) | 
 |   return GCMClient::PLATFORM_ANDROID; | 
 | #elif defined(OS_CHROMEOS) | 
 |   return GCMClient::PLATFORM_CROS; | 
 | #elif defined(OS_LINUX) | 
 |   return GCMClient::PLATFORM_LINUX; | 
 | #else | 
 |   // For all other platforms, return as LINUX. | 
 |   return GCMClient::PLATFORM_LINUX; | 
 | #endif | 
 | } | 
 |  | 
 | GCMClient::ChromeChannel GetChannel(version_info::Channel channel) { | 
 |   switch (channel) { | 
 |     case version_info::Channel::UNKNOWN: | 
 |       return GCMClient::CHANNEL_UNKNOWN; | 
 |     case version_info::Channel::CANARY: | 
 |       return GCMClient::CHANNEL_CANARY; | 
 |     case version_info::Channel::DEV: | 
 |       return GCMClient::CHANNEL_DEV; | 
 |     case version_info::Channel::BETA: | 
 |       return GCMClient::CHANNEL_BETA; | 
 |     case version_info::Channel::STABLE: | 
 |       return GCMClient::CHANNEL_STABLE; | 
 |     default: | 
 |       NOTREACHED(); | 
 |       return GCMClient::CHANNEL_UNKNOWN; | 
 |   } | 
 | } | 
 |  | 
 | std::string GetVersion() { | 
 |   return version_info::GetVersionNumber(); | 
 | } | 
 |  | 
 | GCMClient::ChromeBuildInfo GetChromeBuildInfo( | 
 |     version_info::Channel channel, | 
 |     const std::string& product_category_for_subtypes) { | 
 |   GCMClient::ChromeBuildInfo chrome_build_info; | 
 |   chrome_build_info.platform = GetPlatform(); | 
 |   chrome_build_info.channel = GetChannel(channel); | 
 |   chrome_build_info.version = GetVersion(); | 
 |   chrome_build_info.product_category_for_subtypes = | 
 |       product_category_for_subtypes; | 
 |   return chrome_build_info; | 
 | } | 
 |  | 
 | std::string GetChannelStatusRequestUrl(version_info::Channel channel) { | 
 |   GURL sync_url(GetSyncServiceURL(*base::CommandLine::ForCurrentProcess(), | 
 |                                   channel)); | 
 |   return sync_url.spec() + kChannelStatusRelativePath; | 
 | } | 
 |  | 
 | std::string GetUserAgent(version_info::Channel channel) { | 
 |   // TODO(pavely): Fix hardcoded is_tablet value in following call to | 
 |   // MakeUserAgentForSync. Current implementation returns iPhone UserAgent for | 
 |   // iPad devices. | 
 |   return MakeUserAgentForSync(channel, false); | 
 | } | 
 |  | 
 | }  // namespace | 
 |  | 
 | std::unique_ptr<GCMDriver> CreateGCMDriverDesktop( | 
 |     std::unique_ptr<GCMClientFactory> gcm_client_factory, | 
 |     PrefService* prefs, | 
 |     const base::FilePath& store_path, | 
 |     const scoped_refptr<net::URLRequestContextGetter>& request_context, | 
 |     version_info::Channel channel, | 
 |     const std::string& product_category_for_subtypes, | 
 |     const scoped_refptr<base::SequencedTaskRunner>& ui_task_runner, | 
 |     const scoped_refptr<base::SequencedTaskRunner>& io_task_runner, | 
 |     const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner) { | 
 |   return std::unique_ptr<GCMDriver>(new GCMDriverDesktop( | 
 |       std::move(gcm_client_factory), | 
 |       GetChromeBuildInfo(channel, product_category_for_subtypes), | 
 |       GetChannelStatusRequestUrl(channel), GetUserAgent(channel), prefs, | 
 |       store_path, request_context, ui_task_runner, io_task_runner, | 
 |       blocking_task_runner)); | 
 | } | 
 |  | 
 | }  // namespace gcm |