summaryrefslogtreecommitdiff
path: root/profile.h
diff options
context:
space:
mode:
Diffstat (limited to 'profile.h')
-rw-r--r--profile.h46
1 files changed, 37 insertions, 9 deletions
diff --git a/profile.h b/profile.h
index 8b181033..ff96aaf3 100644
--- a/profile.h
+++ b/profile.h
@@ -24,6 +24,7 @@ namespace shill {
class ControlInterface;
class Error;
class GLib;
+class Manager;
class ProfileAdaptorInterface;
class Profile : public base::RefCounted<Profile> {
@@ -36,19 +37,38 @@ class Profile : public base::RefCounted<Profile> {
static const char kGlobalStorageDir[];
static const char kUserStorageDirFormat[];
- Profile(ControlInterface *control_interface, GLib *glib);
+ Profile(ControlInterface *control_interface, GLib *glib, Manager *manager);
virtual ~Profile();
const std::string &name() { return name_; }
PropertyStore *store() { return &store_; }
- // Begin managing the persistence of |service|, addressable by |name|.
- void AdoptService(const std::string &name, const ServiceRefPtr &service);
+ // Begin managing the persistence of |service|.
+ // Returns true if |service| is new to this profile and was added,
+ // false if the |service| already existed.
+ bool AdoptService(const ServiceRefPtr &service);
- virtual bool MoveToActiveProfile(const std::string &name) {
- return false;
- }
+ // Cease managing the persistence of the Service named |name|.
+ // Returns true if |name| was found and abandoned, false if not found.
+ bool AbandonService(const std::string &name);
+
+ // Continue persisting the Service named |name|, but don't consider it
+ // usable for connectivity.
+ // Returns true if |name| was found and demoted, false if not found.
+ bool DemoteService(const std::string &name);
+
+ // Determine if |service| represents a service that's already in |services_|.
+ // If so, merge them smartly and return true. If not, return false.
+ bool MergeService(const ServiceRefPtr &service);
+
+ ServiceRefPtr FindService(const std::string& name);
+
+ std::vector<std::string> EnumerateAvailableServices();
+ std::vector<std::string> EnumerateEntries();
+
+ // Flush any pending entry info to disk and stop managing service persistence.
+ virtual void Finalize();
// Parses a profile identifier. There're two acceptable forms of the |raw|
// identifier: "identifier" and "~user/identifier". Both "user" and
@@ -68,13 +88,12 @@ class Profile : public base::RefCounted<Profile> {
static bool GetStoragePath(const Identifier &identifier, FilePath *path);
protected:
+ Manager *manager_;
+
// Properties to be get/set via PropertyStore calls that must also be visible
// in subclasses.
PropertyStore store_;
- // Entries representing services that are persisted to disk.
- // A std::map because we will need random access for GetEntry(), but usually
- // will want to iterate over all Services.
std::map<std::string, ServiceRefPtr> services_;
private:
@@ -85,6 +104,15 @@ class Profile : public base::RefCounted<Profile> {
static bool IsValidIdentifierToken(const std::string &token);
+ // Returns true if |candidate| can be merged into |service|.
+ bool Mergeable(const ServiceRefPtr &service, const ServiceRefPtr &candiate) {
+ return false;
+ }
+
+ void HelpRegisterDerivedStrings(const std::string &name,
+ Strings(Profile::*get)(void),
+ bool(Profile::*set)(const Strings&));
+
scoped_ptr<ProfileAdaptorInterface> adaptor_;
// Persistent store associated with the profile.