Home | History | Annotate | Download | only in extensions
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_EXTENSIONS_APP_SYNC_DATA_H_
      6 #define CHROME_BROWSER_EXTENSIONS_APP_SYNC_DATA_H_
      7 
      8 #include "chrome/browser/extensions/extension_sync_data.h"
      9 #include "chrome/common/extensions/extension_constants.h"
     10 #include "sync/api/string_ordinal.h"
     11 #include "sync/api/sync_change.h"
     12 
     13 namespace syncer {
     14 class SyncData;
     15 }
     16 
     17 namespace sync_pb {
     18 class AppSpecifics;
     19 }
     20 
     21 namespace extensions {
     22 
     23 class Extension;
     24 class ExtensionSyncData;
     25 
     26 // A class that encapsulates the synced properties of an Application.
     27 class AppSyncData {
     28  public:
     29   AppSyncData();
     30   explicit AppSyncData(const syncer::SyncData& sync_data);
     31   explicit AppSyncData(const syncer::SyncChange& sync_change);
     32   AppSyncData(const Extension& extension,
     33               bool enabled,
     34               bool incognito_enabled,
     35               bool remote_install,
     36               const syncer::StringOrdinal& app_launch_ordinal,
     37               const syncer::StringOrdinal& page_ordinal,
     38               extensions::LaunchType launch_type);
     39   ~AppSyncData();
     40 
     41   // Retrive sync data from this class.
     42   syncer::SyncData GetSyncData() const;
     43   syncer::SyncChange GetSyncChange(
     44       syncer::SyncChange::SyncChangeType change_type) const;
     45 
     46   const std::string& id() const { return extension_sync_data_.id(); }
     47 
     48   bool uninstalled() const { return extension_sync_data_.uninstalled(); }
     49 
     50   // These ordinals aren't necessarily valid. Some applications don't have
     51   // valid ordinals because they don't appear on the new tab page.
     52   const syncer::StringOrdinal& app_launch_ordinal() const {
     53     return app_launch_ordinal_;
     54   }
     55   const syncer::StringOrdinal& page_ordinal() const { return page_ordinal_; }
     56 
     57   const ExtensionSyncData& extension_sync_data() const {
     58     return extension_sync_data_;
     59   }
     60 
     61   extensions::LaunchType launch_type() const {
     62     return launch_type_;
     63   }
     64 
     65   const std::string& bookmark_app_url() const {
     66     return bookmark_app_url_;
     67   }
     68 
     69   const std::string& bookmark_app_description() const {
     70     return bookmark_app_description_;
     71   }
     72 
     73  private:
     74   // Convert an AppSyncData back out to a sync structure.
     75   void PopulateAppSpecifics(sync_pb::AppSpecifics* specifics) const;
     76 
     77   // Populate this class from sync inputs.
     78   void PopulateFromAppSpecifics(
     79       const sync_pb::AppSpecifics& specifics);
     80   void PopulateFromSyncData(const syncer::SyncData& sync_data);
     81 
     82   ExtensionSyncData extension_sync_data_;
     83   syncer::StringOrdinal app_launch_ordinal_;
     84   syncer::StringOrdinal page_ordinal_;
     85   extensions::LaunchType launch_type_;
     86   std::string bookmark_app_url_;
     87   std::string bookmark_app_description_;
     88 };
     89 
     90 }  // namespace extensions
     91 
     92 #endif  // CHROME_BROWSER_EXTENSIONS_APP_SYNC_DATA_H_
     93 
     94