Index: sync/notifier/non_blocking_invalidator.cc |
diff --git a/sync/notifier/non_blocking_invalidator.cc b/sync/notifier/non_blocking_invalidator.cc |
index bd0596722b0e155b7edf6e2bbac20924c1f1e1d0..5ec17586c4f324a96925dca378f1d90baa2c1366 100644 |
--- a/sync/notifier/non_blocking_invalidator.cc |
+++ b/sync/notifier/non_blocking_invalidator.cc |
@@ -15,9 +15,39 @@ |
#include "jingle/notifier/listener/push_client.h" |
#include "sync/notifier/invalidation_notifier.h" |
#include "sync/notifier/object_id_invalidation_map.h" |
+#include "sync/notifier/sync_system_resources.h" |
namespace syncer { |
+struct NonBlockingInvalidator::InitializeOptions { |
+ InitializeOptions( |
+ NetworkChannelCreator network_channel_creator, |
+ const std::string& invalidator_client_id, |
+ const UnackedInvalidationsMap& saved_invalidations, |
+ const std::string& invalidation_bootstrap_data, |
+ const WeakHandle<InvalidationStateTracker>& |
+ invalidation_state_tracker, |
+ const std::string& client_info, |
+ scoped_refptr<net::URLRequestContextGetter> request_context_getter) |
+ : network_channel_creator(network_channel_creator), |
+ invalidator_client_id(invalidator_client_id), |
+ saved_invalidations(saved_invalidations), |
+ invalidation_bootstrap_data(invalidation_bootstrap_data), |
+ invalidation_state_tracker(invalidation_state_tracker), |
+ client_info(client_info), |
+ request_context_getter(request_context_getter) { |
+ } |
+ |
+ NetworkChannelCreator network_channel_creator; |
+ std::string invalidator_client_id; |
+ UnackedInvalidationsMap saved_invalidations; |
+ std::string invalidation_bootstrap_data; |
+ WeakHandle<InvalidationStateTracker> invalidation_state_tracker; |
+ std::string client_info; |
+ scoped_refptr<net::URLRequestContextGetter> request_context_getter; |
+}; |
+ |
+ |
class NonBlockingInvalidator::Core |
: public base::RefCountedThreadSafe<NonBlockingInvalidator::Core>, |
// InvalidationHandler to observe the InvalidationNotifier we create. |
@@ -30,12 +60,7 @@ class NonBlockingInvalidator::Core |
// Helpers called on I/O thread. |
void Initialize( |
- const notifier::NotifierOptions& notifier_options, |
- const std::string& invalidator_client_id, |
- const UnackedInvalidationsMap& saved_invalidations, |
- const std::string& invalidation_bootstrap_data, |
- const WeakHandle<InvalidationStateTracker>& invalidation_state_tracker, |
- const std::string& client_info); |
+ const NonBlockingInvalidator::InitializeOptions& initialize_options); |
void Teardown(); |
void UpdateRegisteredIds(const ObjectIdSet& ids); |
void UpdateCredentials(const std::string& email, const std::string& token); |
@@ -70,26 +95,21 @@ NonBlockingInvalidator::Core::~Core() { |
} |
void NonBlockingInvalidator::Core::Initialize( |
- const notifier::NotifierOptions& notifier_options, |
- const std::string& invalidator_client_id, |
- const UnackedInvalidationsMap& saved_invalidations, |
- const std::string& invalidation_bootstrap_data, |
- const WeakHandle<InvalidationStateTracker>& invalidation_state_tracker, |
- const std::string& client_info) { |
- DCHECK(notifier_options.request_context_getter.get()); |
- DCHECK_EQ(notifier::NOTIFICATION_SERVER, |
- notifier_options.notification_method); |
- network_task_runner_ = notifier_options.request_context_getter-> |
- GetNetworkTaskRunner(); |
+ const NonBlockingInvalidator::InitializeOptions& initialize_options) { |
+ DCHECK(initialize_options.request_context_getter.get()); |
+ network_task_runner_ = |
+ initialize_options.request_context_getter->GetNetworkTaskRunner(); |
DCHECK(network_task_runner_->BelongsToCurrentThread()); |
+ scoped_ptr<SyncNetworkChannel> network_channel = |
+ initialize_options.network_channel_creator.Run(); |
invalidation_notifier_.reset( |
new InvalidationNotifier( |
- notifier::PushClient::CreateDefaultOnIOThread(notifier_options), |
- invalidator_client_id, |
- saved_invalidations, |
- invalidation_bootstrap_data, |
- invalidation_state_tracker, |
- client_info)); |
+ network_channel.Pass(), |
+ initialize_options.invalidator_client_id, |
+ initialize_options.saved_invalidations, |
+ initialize_options.invalidation_bootstrap_data, |
+ initialize_options.invalidation_state_tracker, |
+ initialize_options.client_info)); |
invalidation_notifier_->RegisterHandler(this); |
} |
@@ -127,30 +147,34 @@ void NonBlockingInvalidator::Core::OnIncomingInvalidation( |
} |
NonBlockingInvalidator::NonBlockingInvalidator( |
- const notifier::NotifierOptions& notifier_options, |
+ NetworkChannelCreator network_channel_creator, |
const std::string& invalidator_client_id, |
const UnackedInvalidationsMap& saved_invalidations, |
const std::string& invalidation_bootstrap_data, |
const WeakHandle<InvalidationStateTracker>& |
invalidation_state_tracker, |
- const std::string& client_info) |
+ const std::string& client_info, |
+ const scoped_refptr<net::URLRequestContextGetter>& request_context_getter) |
: parent_task_runner_(base::ThreadTaskRunnerHandle::Get()), |
- network_task_runner_( |
- notifier_options.request_context_getter->GetNetworkTaskRunner()), |
+ network_task_runner_(request_context_getter->GetNetworkTaskRunner()), |
weak_ptr_factory_(this) { |
core_ = new Core(MakeWeakHandle(weak_ptr_factory_.GetWeakPtr())); |
+ InitializeOptions initialize_options( |
+ network_channel_creator, |
+ invalidator_client_id, |
+ saved_invalidations, |
+ invalidation_bootstrap_data, |
+ invalidation_state_tracker, |
+ client_info, |
+ request_context_getter); |
+ |
if (!network_task_runner_->PostTask( |
FROM_HERE, |
base::Bind( |
&NonBlockingInvalidator::Core::Initialize, |
core_.get(), |
- notifier_options, |
- invalidator_client_id, |
- saved_invalidations, |
- invalidation_bootstrap_data, |
- invalidation_state_tracker, |
- client_info))) { |
+ initialize_options))) { |
NOTREACHED(); |
} |
} |
@@ -216,4 +240,16 @@ void NonBlockingInvalidator::OnIncomingInvalidation( |
registrar_.DispatchInvalidationsToHandlers(invalidation_map); |
} |
+NetworkChannelCreator |
+ NonBlockingInvalidator::MakePushClientChannelCreator( |
+ const notifier::NotifierOptions& notifier_options) { |
+ return base::Bind(SyncNetworkChannel::CreatePushClientChannel, |
+ notifier_options); |
+} |
+ |
+NetworkChannelCreator |
+ NonBlockingInvalidator::MakeGCMNetworkChannelCreator() { |
+ return base::Bind(SyncNetworkChannel::CreateGCMNetworkChannel); |
+} |
+ |
} // namespace syncer |