Commit 7b23fd17 authored by gunsch's avatar gunsch Committed by Commit bot

Chromecast: adds callback for CastService to control metrics state.

This allows CastService implementers to provide the user option for
controlling whether metrics is enabled/disabled.

R=lcwu@chromium.org
BUG=400925

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

Cr-Commit-Position: refs/heads/master@{#297243}
parent b8994f59
......@@ -105,6 +105,15 @@ CastMetricsServiceClient::CreateUploader(
}
void CastMetricsServiceClient::EnableMetricsService(bool enabled) {
if (!metrics_service_loop_->BelongsToCurrentThread()) {
metrics_service_loop_->PostTask(
FROM_HERE,
base::Bind(&CastMetricsServiceClient::EnableMetricsService,
base::Unretained(this),
enabled));
return;
}
if (enabled) {
metrics_service_->Start();
} else {
......@@ -126,6 +135,7 @@ CastMetricsServiceClient::CastMetricsServiceClient(
metrics_state_manager_.get(),
this,
pref_service)),
metrics_service_loop_(base::MessageLoopProxy::current()),
request_context_(request_context) {
// Always create a client id as it may also be used by crash reporting,
// (indirectly) included in feedback, and can be queried during setup.
......
......@@ -15,6 +15,7 @@
class PrefService;
namespace base {
class MessageLoopProxy;
class TaskRunner;
}
......@@ -69,6 +70,7 @@ class CastMetricsServiceClient : public ::metrics::MetricsServiceClient {
scoped_ptr< ::metrics::MetricsStateManager> metrics_state_manager_;
scoped_ptr< ::metrics::MetricsService> metrics_service_;
scoped_refptr<base::MessageLoopProxy> metrics_service_loop_;
net::URLRequestContextGetter* request_context_;
DISALLOW_COPY_AND_ASSIGN(CastMetricsServiceClient);
......
......@@ -9,8 +9,11 @@
namespace chromecast {
CastService::CastService(content::BrowserContext* browser_context)
CastService::CastService(
content::BrowserContext* browser_context,
const OptInStatsChangedCallback& opt_in_stats_callback)
: browser_context_(browser_context),
opt_in_stats_callback_(opt_in_stats_callback),
stopped_(true),
thread_checker_(new base::ThreadChecker()) {
}
......
......@@ -5,6 +5,7 @@
#ifndef CHROMECAST_SERVICE_CAST_SERVICE_H_
#define CHROMECAST_SERVICE_CAST_SERVICE_H_
#include "base/callback.h"
#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
......@@ -27,6 +28,10 @@ class CastNetworkDelegate;
class CastService {
public:
// A callback that will be invoked when the user changes the opt-in stats
// value.
typedef base::Callback<void(bool)> OptInStatsChangedCallback;
// Create() takes a separate url request context getter because the request
// context getter obtained through the browser context might not be
// appropriate for the url requests made by the cast service/reciever.
......@@ -36,7 +41,8 @@ class CastService {
static CastService* Create(
content::BrowserContext* browser_context,
net::URLRequestContextGetter* request_context_getter,
shell::CastNetworkDelegate* network_delegate);
shell::CastNetworkDelegate* network_delegate,
const OptInStatsChangedCallback& opt_in_stats_callback);
virtual ~CastService();
......@@ -45,7 +51,8 @@ class CastService {
void Stop();
protected:
explicit CastService(content::BrowserContext* browser_context);
CastService(content::BrowserContext* browser_context,
const OptInStatsChangedCallback& opt_in_stats_callback);
virtual void Initialize() = 0;
// Implementation-specific start/stop behavior.
......@@ -53,11 +60,14 @@ class CastService {
virtual void StopInternal() = 0;
content::BrowserContext* browser_context() const { return browser_context_; }
const OptInStatsChangedCallback& opt_in_stats_callback() const {
return opt_in_stats_callback_;
}
private:
content::BrowserContext* const browser_context_;
const OptInStatsChangedCallback opt_in_stats_callback_;
bool stopped_;
const scoped_ptr<base::ThreadChecker> thread_checker_;
DISALLOW_COPY_AND_ASSIGN(CastService);
......
......@@ -12,20 +12,23 @@ namespace chromecast {
CastService* CastService::Create(
content::BrowserContext* browser_context,
net::URLRequestContextGetter* request_context_getter,
shell::CastNetworkDelegate* network_delegate) {
return new CastServiceAndroid(browser_context);
shell::CastNetworkDelegate* network_delegate,
const OptInStatsChangedCallback& opt_in_stats_callback) {
return new CastServiceAndroid(browser_context, opt_in_stats_callback);
}
CastServiceAndroid::CastServiceAndroid(content::BrowserContext* browser_context)
: CastService(browser_context) {
CastServiceAndroid::CastServiceAndroid(
content::BrowserContext* browser_context,
const OptInStatsChangedCallback& opt_in_stats_callback)
: CastService(browser_context, opt_in_stats_callback) {
}
CastServiceAndroid::~CastServiceAndroid() {
}
void CastServiceAndroid::Initialize() {
// TODO(gunsch): Wire this the SendUsageStatsChanged callback once
// CastService::Delegate is added.
android::ChromecastConfigAndroid::GetInstance()->
SetSendUsageStatsChangedCallback(opt_in_stats_callback());
}
void CastServiceAndroid::StartInternal() {
......
......@@ -12,7 +12,8 @@ namespace chromecast {
class CastServiceAndroid : public CastService {
public:
explicit CastServiceAndroid(content::BrowserContext* browser_context);
CastServiceAndroid(content::BrowserContext* browser_context,
const OptInStatsChangedCallback& opt_in_stats_callback);
virtual ~CastServiceAndroid();
protected:
......
......@@ -73,12 +73,15 @@ class FillLayout : public aura::LayoutManager {
CastService* CastService::Create(
content::BrowserContext* browser_context,
net::URLRequestContextGetter* request_context_getter,
shell::CastNetworkDelegate* network_delegate) {
return new CastServiceSimple(browser_context);
shell::CastNetworkDelegate* network_delegate,
const OptInStatsChangedCallback& opt_in_stats_callback) {
return new CastServiceSimple(browser_context, opt_in_stats_callback);
}
CastServiceSimple::CastServiceSimple(content::BrowserContext* browser_context)
: CastService(browser_context) {
CastServiceSimple::CastServiceSimple(
content::BrowserContext* browser_context,
const OptInStatsChangedCallback& opt_in_stats_callback)
: CastService(browser_context, opt_in_stats_callback) {
}
CastServiceSimple::~CastServiceSimple() {
......
......@@ -20,7 +20,8 @@ namespace chromecast {
class CastServiceSimple : public CastService {
public:
explicit CastServiceSimple(content::BrowserContext* browser_context);
CastServiceSimple(content::BrowserContext* browser_context,
const OptInStatsChangedCallback& opt_in_stats_callback);
virtual ~CastServiceSimple();
protected:
......
......@@ -113,7 +113,10 @@ void CastBrowserMainParts::PreMainMessageLoopRun() {
cast_browser_process_->SetCastService(CastService::Create(
cast_browser_process_->browser_context(),
url_request_context_factory_->GetSystemGetter(),
url_request_context_factory_->app_network_delegate()));
url_request_context_factory_->app_network_delegate(),
base::Bind(
&metrics::CastMetricsServiceClient::EnableMetricsService,
base::Unretained(cast_browser_process_->metrics_service_client()))));
// Initializing network delegates must happen after Cast service is created.
url_request_context_factory_->InitializeNetworkDelegates();
......
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