| // Copyright 2013 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 CHROME_BROWSER_CHROMEOS_SYSTEM_LOGS_SYSTEM_LOGS_FETCHER_BASE_H_ |
| #define CHROME_BROWSER_CHROMEOS_SYSTEM_LOGS_SYSTEM_LOGS_FETCHER_BASE_H_ |
| |
| #include <map> |
| #include <string> |
| |
| #include "base/callback.h" |
| #include "base/memory/scoped_vector.h" |
| #include "base/memory/weak_ptr.h" |
| |
| namespace chromeos { |
| |
| typedef std::map<std::string, std::string> SystemLogsResponse; |
| |
| // Callback that the data sources use to return data. |
| typedef base::Callback<void(SystemLogsResponse* response)> |
| SysLogsSourceCallback; |
| |
| // Callback that the SystemLogsFetcherBase uses to return data. |
| typedef base::Callback<void(scoped_ptr<SystemLogsResponse> response)> |
| SysLogsFetcherCallback; |
| |
| // The SystemLogsSource provides a interface for the data sources that |
| // the SystemLogsFetcherBase class uses to fetch logs and other |
| // information. |
| class SystemLogsSource { |
| public: |
| // Fetches data and passes it by to the callback |
| virtual void Fetch(const SysLogsSourceCallback& callback) = 0; |
| virtual ~SystemLogsSource() {} |
| }; |
| |
| // The SystemLogsFetcherBaseBase specifies an interface for LogFetcher classes. |
| // Derived LogFetcher classes aggregate the logs from a list of SystemLogSource |
| // classes. |
| // |
| // EXAMPLE: |
| // class Example { |
| // public: |
| // void ProcessLogs(SystemLogsResponse* response) { |
| // //do something with the logs |
| // } |
| // void GetLogs() { |
| // SystemLogsFetcherBase* fetcher = new SystemLogsFetcherBase(); |
| // fetcher->Fetch(base::Bind(&Example::ProcessLogs, this)); |
| // } |
| class SystemLogsFetcherBase |
| : public base::SupportsWeakPtr<SystemLogsFetcherBase> { |
| public: |
| SystemLogsFetcherBase(); |
| ~SystemLogsFetcherBase(); |
| |
| void Fetch(const SysLogsFetcherCallback& callback); |
| |
| protected: |
| // Callback passed to all the data sources. It merges the |data| it recieves |
| // into response_. When all the data sources have responded, it deletes their |
| // objects and returns the response to the callback_. After this it |
| // deletes this instance of the object. |
| void AddResponse(SystemLogsResponse* response); |
| |
| ScopedVector<SystemLogsSource> data_sources_; |
| SysLogsFetcherCallback callback_; |
| |
| scoped_ptr<SystemLogsResponse> response_; // The actual response data. |
| size_t num_pending_requests_; // The number of callbacks it should get. |
| |
| private: |
| |
| DISALLOW_COPY_AND_ASSIGN(SystemLogsFetcherBase); |
| }; |
| |
| } // namespace chromeos |
| |
| #endif // CHROME_BROWSER_CHROMEOS_SYSTEM_LOGS_SYSTEM_LOGS_FETCHER_BASE_H_ |
| |