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