// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #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" class PrefService; namespace base { class ThreadChecker; } namespace content { class BrowserContext; } namespace net { class URLRequestContextGetter; } namespace chromecast { class CastService { public: virtual ~CastService(); // Initializes/finalizes the cast service. void Initialize(); void Finalize(); // Starts/stops the cast service. void Start(); void Stop(); protected: CastService(content::BrowserContext* browser_context, PrefService* pref_service); // Implementation-specific initialization. Initialization of cast service's // sub-components, and anything that requires IO operations should go here. // Anything that should happen before cast service is started but doesn't need // the sub-components to finish initializing should also go here. virtual void InitializeInternal() = 0; // Implementation-specific finalization. Any initializations done by // InitializeInternal() should be finalized here. virtual void FinalizeInternal() = 0; // Implementation-specific start behavior. It basically starts the // sub-component services and does additional initialization that cannot be // done in the InitializationInternal(). virtual void StartInternal() = 0; // Implementation-specific stop behavior. Any initializations done by // StartInternal() should be finalized here. virtual void StopInternal() = 0; content::BrowserContext* browser_context() const { return browser_context_; } PrefService* pref_service() const { return pref_service_; } private: content::BrowserContext* const browser_context_; PrefService* const pref_service_; bool stopped_; const scoped_ptr thread_checker_; DISALLOW_COPY_AND_ASSIGN(CastService); }; } // namespace chromecast #endif // CHROMECAST_SERVICE_CAST_SERVICE_H_