Commit 3f6b84cd authored by fgorski's avatar fgorski Committed by Commit bot

[GCM] Updates to GCMChannelStatusSyncer - UserAgent and server URL.

BUG=421208
R=zea@chromium.org

Review URL: https://codereview.chromium.org/635073002

Cr-Commit-Position: refs/heads/master@{#299185}
parent d1f27bde
......@@ -7,6 +7,8 @@
#include "base/logging.h"
#include "base/sequenced_task_runner.h"
#include "base/threading/sequenced_worker_pool.h"
#include "chrome/browser/sync/glue/local_device_info_provider_impl.h"
#include "chrome/browser/sync/profile_sync_service.h"
#include "chrome/common/chrome_version_info.h"
#include "components/gcm_driver/gcm_client.h"
#include "components/gcm_driver/gcm_client_factory.h"
......@@ -69,6 +71,22 @@ GCMClient::ChromeBuildInfo GetChromeBuildInfo() {
return chrome_build_info;
}
std::string GetChannelStatusRequestUrl() {
chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel();
if (channel == chrome::VersionInfo::CHANNEL_STABLE ||
channel == chrome::VersionInfo::CHANNEL_BETA) {
return ProfileSyncService::kSyncServerUrl;
}
return ProfileSyncService::kDevServerUrl;
}
std::string GetUserAgent() {
chrome::VersionInfo version_info;
return browser_sync::LocalDeviceInfoProviderImpl::MakeUserAgentForSyncApi(
version_info);
}
} // namespace
scoped_ptr<GCMDriver> CreateGCMDriverDesktop(
......@@ -82,17 +100,19 @@ scoped_ptr<GCMDriver> CreateGCMDriverDesktop(
worker_pool->GetSequencedTaskRunnerWithShutdownBehavior(
worker_pool->GetSequenceToken(),
base::SequencedWorkerPool::SKIP_ON_SHUTDOWN));
return scoped_ptr<GCMDriver>(new GCMDriverDesktop(
gcm_client_factory.Pass(),
GetChromeBuildInfo(),
prefs,
store_path,
request_context,
content::BrowserThread::GetMessageLoopProxyForThread(
content::BrowserThread::UI),
content::BrowserThread::GetMessageLoopProxyForThread(
content::BrowserThread::IO),
blocking_task_runner));
return scoped_ptr<GCMDriver>(
new GCMDriverDesktop(gcm_client_factory.Pass(),
GetChromeBuildInfo(),
GetChannelStatusRequestUrl(),
GetUserAgent(),
prefs,
store_path,
request_context,
content::BrowserThread::GetMessageLoopProxyForThread(
content::BrowserThread::UI),
content::BrowserThread::GetMessageLoopProxyForThread(
content::BrowserThread::IO),
blocking_task_runner));
}
} // namespace gcm
......@@ -19,8 +19,6 @@ namespace gcm {
namespace {
const char kGCMChannelStatusRequestURL[] =
"https://clients4.google.com/chrome-sync/command/";
const char kRequestContentType[] = "application/octet-stream";
const char kGCMChannelTag[] = "gcm_channel";
const int kDefaultPollIntervalSeconds = 60 * 60; // 60 minutes.
......@@ -30,8 +28,12 @@ const int kMinPollIntervalSeconds = 30 * 60; // 30 minutes.
GCMChannelStatusRequest::GCMChannelStatusRequest(
const scoped_refptr<net::URLRequestContextGetter>& request_context_getter,
const std::string& channel_status_request_url,
const std::string& user_agent,
const GCMChannelStatusRequestCallback& callback)
: request_context_getter_(request_context_getter),
channel_status_request_url_(channel_status_request_url),
user_agent_(user_agent),
callback_(callback),
backoff_entry_(&(GetGCMBackoffPolicy())),
weak_ptr_factory_(this) {
......@@ -53,7 +55,7 @@ int GCMChannelStatusRequest::min_poll_interval_seconds() {
void GCMChannelStatusRequest::Start() {
DCHECK(!url_fetcher_.get());
GURL request_url(kGCMChannelStatusRequestURL);
GURL request_url(channel_status_request_url_);
sync_pb::ExperimentStatusRequest proto_data;
proto_data.add_experiment_name(kGCMChannelTag);
......@@ -63,6 +65,7 @@ void GCMChannelStatusRequest::Start() {
url_fetcher_.reset(
net::URLFetcher::Create(request_url, net::URLFetcher::POST, this));
url_fetcher_->SetRequestContext(request_context_getter_.get());
url_fetcher_->AddExtraRequestHeader("User-Agent: " + user_agent_);
url_fetcher_->SetUploadData(kRequestContentType, upload_data);
url_fetcher_->SetLoadFlags(net::LOAD_DO_NOT_SEND_COOKIES |
net::LOAD_DO_NOT_SAVE_COOKIES);
......
......@@ -31,6 +31,8 @@ class GCMChannelStatusRequest : public net::URLFetcherDelegate {
GCMChannelStatusRequest(
const scoped_refptr<net::URLRequestContextGetter>& request_context_getter,
const std::string& channel_status_request_url,
const std::string& user_agent,
const GCMChannelStatusRequestCallback& callback);
virtual ~GCMChannelStatusRequest();
......@@ -47,6 +49,8 @@ class GCMChannelStatusRequest : public net::URLFetcherDelegate {
void RetryWithBackoff(bool update_backoff);
scoped_refptr<net::URLRequestContextGetter> request_context_getter_;
const std::string channel_status_request_url_;
const std::string user_agent_;
GCMChannelStatusRequestCallback callback_;
scoped_ptr<net::URLFetcher> url_fetcher_;
net::BackoffEntry backoff_entry_;
......
......@@ -54,6 +54,8 @@ GCMChannelStatusRequestTest::~GCMChannelStatusRequestTest() {
void GCMChannelStatusRequestTest::StartRequest() {
request_.reset(new GCMChannelStatusRequest(
url_request_context_getter_.get(),
"http://channel.status.request.com/",
"user agent string",
base::Bind(&GCMChannelStatusRequestTest::OnRequestCompleted,
base::Unretained(this))));
request_->Start();
......
......@@ -71,9 +71,13 @@ int GCMChannelStatusSyncer::first_time_delay_seconds() {
GCMChannelStatusSyncer::GCMChannelStatusSyncer(
GCMDriver* driver,
PrefService* prefs,
const std::string& channel_status_request_url,
const std::string& user_agent,
const scoped_refptr<net::URLRequestContextGetter>& request_context)
: driver_(driver),
prefs_(prefs),
channel_status_request_url_(channel_status_request_url),
user_agent_(user_agent),
request_context_(request_context),
gcm_enabled_(true),
poll_interval_seconds_(
......@@ -150,6 +154,8 @@ void GCMChannelStatusSyncer::StartRequest() {
request_.reset(new GCMChannelStatusRequest(
request_context_,
channel_status_request_url_,
user_agent_,
base::Bind(&GCMChannelStatusSyncer::OnRequestCompleted,
weak_ptr_factory_.GetWeakPtr())));
request_->Start();
......
......@@ -38,6 +38,8 @@ class GCMChannelStatusSyncer {
GCMChannelStatusSyncer(
GCMDriver* driver,
PrefService* prefs,
const std::string& channel_status_request_url,
const std::string& user_agent,
const scoped_refptr<net::URLRequestContextGetter>& request_context);
~GCMChannelStatusSyncer();
......@@ -72,6 +74,8 @@ class GCMChannelStatusSyncer {
// GCMDriver owns GCMChannelStatusSyncer instance.
GCMDriver* driver_;
PrefService* prefs_;
const std::string channel_status_request_url_;
const std::string user_agent_;
scoped_refptr<net::URLRequestContextGetter> request_context_;
scoped_ptr<GCMChannelStatusRequest> request_;
......
......@@ -335,6 +335,8 @@ void GCMDriverDesktop::IOWorker::RemoveAccountMapping(
GCMDriverDesktop::GCMDriverDesktop(
scoped_ptr<GCMClientFactory> gcm_client_factory,
const GCMClient::ChromeBuildInfo& chrome_build_info,
const std::string& channel_status_request_url,
const std::string& user_agent,
PrefService* prefs,
const base::FilePath& store_path,
const scoped_refptr<net::URLRequestContextGetter>& request_context,
......@@ -342,7 +344,11 @@ GCMDriverDesktop::GCMDriverDesktop(
const scoped_refptr<base::SequencedTaskRunner>& io_thread,
const scoped_refptr<base::SequencedTaskRunner>& blocking_task_runner)
: gcm_channel_status_syncer_(
new GCMChannelStatusSyncer(this, prefs, request_context)),
new GCMChannelStatusSyncer(this,
prefs,
channel_status_request_url,
user_agent,
request_context)),
signed_in_(false),
gcm_started_(false),
gcm_enabled_(true),
......
......@@ -48,6 +48,8 @@ class GCMDriverDesktop : public GCMDriver {
GCMDriverDesktop(
scoped_ptr<GCMClientFactory> gcm_client_factory,
const GCMClient::ChromeBuildInfo& chrome_build_info,
const std::string& channel_status_request_url,
const std::string& user_agent,
PrefService* prefs,
const base::FilePath& store_path,
const scoped_refptr<net::URLRequestContextGetter>& request_context,
......
......@@ -233,11 +233,13 @@ void GCMDriverTest::CreateDriver(
new net::TestURLRequestContextGetter(io_thread_.message_loop_proxy());
// TODO(johnme): Need equivalent test coverage of GCMDriverAndroid.
driver_.reset(new GCMDriverDesktop(
scoped_ptr<GCMClientFactory>(new FakeGCMClientFactory(
gcm_client_start_mode,
base::MessageLoopProxy::current(),
io_thread_.message_loop_proxy())).Pass(),
scoped_ptr<GCMClientFactory>(
new FakeGCMClientFactory(gcm_client_start_mode,
base::MessageLoopProxy::current(),
io_thread_.message_loop_proxy())).Pass(),
GCMClient::ChromeBuildInfo(),
"http://channel.status.request.url",
"user-agent-string",
&prefs_,
temp_dir_.path(),
request_context,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment