File: pending_enables.cc

package info (click to toggle)
chromium-browser 41.0.2272.118-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 2,189,132 kB
  • sloc: cpp: 9,691,462; ansic: 3,341,451; python: 712,689; asm: 518,779; xml: 208,926; java: 169,820; sh: 119,353; perl: 68,907; makefile: 28,311; yacc: 13,305; objc: 11,385; tcl: 3,186; cs: 2,225; sql: 2,217; lex: 2,215; lisp: 1,349; pascal: 1,256; awk: 407; ruby: 155; sed: 53; php: 14; exp: 11
file content (62 lines) | stat: -rw-r--r-- 1,900 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
// 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.

#include "chrome/browser/extensions/pending_enables.h"

#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/sync_bundle.h"
#include "components/sync_driver/sync_prefs.h"

namespace extensions {

PendingEnables::PendingEnables(scoped_ptr<sync_driver::SyncPrefs> sync_prefs,
                               SyncBundle* sync_bundle,
                               syncer::ModelType enable_type)
    : sync_prefs_(sync_prefs.Pass()),
      sync_bundle_(sync_bundle),
      enable_type_(enable_type),
      is_sync_enabled_for_test_(false) {}

PendingEnables::~PendingEnables() {
}

void PendingEnables::OnExtensionEnabled(const std::string& extension_id) {
  if (IsWaitingForSync())
    ids_.insert(extension_id);
}

void PendingEnables::OnExtensionDisabled(const std::string& extension_id) {
  if (IsWaitingForSync())
    ids_.erase(extension_id);
}

void PendingEnables::OnSyncStarted(ExtensionService* service) {
  for (std::set<std::string>::const_iterator it = ids_.begin();
       it != ids_.end(); ++it) {
    const Extension* extension = service->GetExtensionById(*it, true);
    if (extension)
      sync_bundle_->SyncChangeIfNeeded(*extension);
  }
  ids_.clear();
}

bool PendingEnables::Contains(const std::string& extension_id) const {
  return ids_.find(extension_id) != ids_.end();
}

bool PendingEnables::IsSyncEnabled() {
  if (is_sync_enabled_for_test_)
    return true;
  return sync_prefs_ &&
      sync_prefs_->HasSyncSetupCompleted() &&
      sync_prefs_->GetPreferredDataTypes(syncer::ModelTypeSet(enable_type_))
          .Has(enable_type_);
}

bool PendingEnables::IsWaitingForSync() {
  return IsSyncEnabled() && !sync_bundle_->IsSyncing();
}

}  // namespace extensions