146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file. 446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/services/gcm/gcm_desktop_utils.h" 646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 71675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch#include "base/command_line.h" 846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/logging.h" 946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/sequenced_task_runner.h" 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/threading/sequenced_worker_pool.h" 111675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch#include "chrome/browser/sync/glue/local_device_info_provider_impl.h" 121675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch#include "chrome/browser/sync/profile_sync_service.h" 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/common/chrome_version_info.h" 14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "components/gcm_driver/gcm_client.h" 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/gcm_driver/gcm_client_factory.h" 1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/gcm_driver/gcm_driver.h" 1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/gcm_driver/gcm_driver_desktop.h" 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "content/public/browser/browser_thread.h" 1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace gcm { 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace { 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 241675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdochconst char kChannelStatusRelativePath[] = "/experimentstatus"; 251675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)GCMClient::ChromePlatform GetPlatform() { 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#if defined(OS_WIN) 2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return GCMClient::PLATFORM_WIN; 2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#elif defined(OS_MACOSX) 3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return GCMClient::PLATFORM_MAC; 3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#elif defined(OS_IOS) 3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return GCMClient::PLATFORM_IOS; 3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#elif defined(OS_ANDROID) 3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return GCMClient::PLATFORM_ANDROID; 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#elif defined(OS_CHROMEOS) 3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return GCMClient::PLATFORM_CROS; 3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#elif defined(OS_LINUX) 3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return GCMClient::PLATFORM_LINUX; 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#else 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // For all other platforms, return as LINUX. 4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return GCMClient::PLATFORM_LINUX; 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)GCMClient::ChromeChannel GetChannel() { 4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); 4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) switch (channel) { 4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) case chrome::VersionInfo::CHANNEL_UNKNOWN: 4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return GCMClient::CHANNEL_UNKNOWN; 5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) case chrome::VersionInfo::CHANNEL_CANARY: 5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return GCMClient::CHANNEL_CANARY; 5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) case chrome::VersionInfo::CHANNEL_DEV: 5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return GCMClient::CHANNEL_DEV; 5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) case chrome::VersionInfo::CHANNEL_BETA: 5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return GCMClient::CHANNEL_BETA; 5646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) case chrome::VersionInfo::CHANNEL_STABLE: 5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return GCMClient::CHANNEL_STABLE; 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) default: 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) NOTREACHED(); 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return GCMClient::CHANNEL_UNKNOWN; 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) } 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)std::string GetVersion() { 6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chrome::VersionInfo version_info; 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return version_info.Version(); 6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)GCMClient::ChromeBuildInfo GetChromeBuildInfo() { 7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GCMClient::ChromeBuildInfo chrome_build_info; 7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chrome_build_info.platform = GetPlatform(); 7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chrome_build_info.channel = GetChannel(); 7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) chrome_build_info.version = GetVersion(); 7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) return chrome_build_info; 7546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 771675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdochstd::string GetChannelStatusRequestUrl() { 781675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch GURL sync_url( 791675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch ProfileSyncService::GetSyncServiceURL(*CommandLine::ForCurrentProcess())); 801675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch return sync_url.spec() + kChannelStatusRelativePath; 811675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch} 821675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch 831675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdochstd::string GetUserAgent() { 841675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch chrome::VersionInfo version_info; 851675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch return browser_sync::LocalDeviceInfoProviderImpl::MakeUserAgentForSyncApi( 861675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch version_info); 871675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch} 881675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch 8946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace 9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 9146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)scoped_ptr<GCMDriver> CreateGCMDriverDesktop( 9246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<GCMClientFactory> gcm_client_factory, 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci PrefService* prefs, 9446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const base::FilePath& store_path, 9546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const scoped_refptr<net::URLRequestContextGetter>& request_context) { 9646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_refptr<base::SequencedWorkerPool> worker_pool( 9746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) content::BrowserThread::GetBlockingPool()); 9846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_refptr<base::SequencedTaskRunner> blocking_task_runner( 9946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) worker_pool->GetSequencedTaskRunnerWithShutdownBehavior( 10046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) worker_pool->GetSequenceToken(), 10146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)); 1021675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch return scoped_ptr<GCMDriver>( 1031675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch new GCMDriverDesktop(gcm_client_factory.Pass(), 1041675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch GetChromeBuildInfo(), 1051675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch GetChannelStatusRequestUrl(), 1061675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch GetUserAgent(), 1071675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch prefs, 1081675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch store_path, 1091675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch request_context, 1101675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch content::BrowserThread::GetMessageLoopProxyForThread( 1111675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch content::BrowserThread::UI), 1121675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch content::BrowserThread::GetMessageLoopProxyForThread( 1131675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch content::BrowserThread::IO), 1141675a649fd7a8b3cb80ffddae2dc181f122353c5Ben Murdoch blocking_task_runner)); 11546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 11646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 11746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace gcm 118