C++程序  |  67行  |  2.01 KB

// 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_EXTENSIONS_PENDING_ENABLES_H_
#define CHROME_BROWSER_EXTENSIONS_PENDING_ENABLES_H_

#include <set>

// Included for syncer::ModelType, which is in
// sync/internal_api/public/base/model_type.h but that is disallowed by
// chrome/browser/DEPS.
#include "sync/api/syncable_service.h"

class ExtensionService;
class ProfileSyncService;

namespace browser_sync {
class SyncPrefs;
}

namespace extensions {

class SyncBundle;

// A pending enable is when an app or extension is enabled locally before sync
// has started. We track these to prevent sync data arriving and clobbering
// local state, and also to ensure that these early enables get synced to the
// server when sync does start.
class PendingEnables {
 public:
  PendingEnables(scoped_ptr<browser_sync::SyncPrefs> sync_prefs,
                 SyncBundle* sync_bundle,
                 syncer::ModelType enable_type);
  ~PendingEnables();

  // Called when an extension is enabled / disabled locally.
  // These will check the sync state and figure out whether the change
  // needs to be remembered for syncing when syncing starts.
  void OnExtensionEnabled(const std::string& extension_id);
  void OnExtensionDisabled(const std::string& extension_id);

  // Called when |sync_bundle_| is ready to accept sync changes.
  // Uses |service| to look up extensions from extension ids.
  void OnSyncStarted(ExtensionService* service);

  // Whether |extension_id| has a pending enable.
  bool Contains(const std::string& extension_id) const;

 private:
  bool IsSyncEnabled();
  bool IsWaitingForSync();

  scoped_ptr<browser_sync::SyncPrefs> sync_prefs_;
  SyncBundle* sync_bundle_;
  syncer::ModelType enable_type_;
  std::set<std::string> ids_;

  bool is_sync_enabled_for_test_;

  DISALLOW_COPY_AND_ASSIGN(PendingEnables);
};

}  // namespace extensions

#endif  // CHROME_BROWSER_EXTENSIONS_PENDING_ENABLES_H_