sync_extension_installer.cc revision 116680a4aac90f2aa7413d9095a592090648e557
1// Copyright 2014 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#include "chrome/browser/sync/test/integration/sync_extension_installer.h"
6
7#include "base/bind.h"
8#include "base/message_loop/message_loop.h"
9#include "chrome/browser/chrome_notification_types.h"
10#include "chrome/browser/sync/test/integration/sync_extension_helper.h"
11#include "content/public/browser/notification_source.h"
12
13SyncedExtensionInstaller::SyncedExtensionInstaller(Profile* profile)
14    : profile_(profile),
15      weak_ptr_factory_(this) {
16  DoInstallSyncedExtensions();
17  registrar_.Add(this,
18                 chrome::NOTIFICATION_EXTENSION_UPDATING_STARTED,
19                 content::Source<Profile>(profile_));
20}
21
22SyncedExtensionInstaller::~SyncedExtensionInstaller() {
23}
24
25void SyncedExtensionInstaller::Observe(
26    int type,
27    const content::NotificationSource& source,
28    const content::NotificationDetails& details) {
29  DCHECK_EQ(chrome::NOTIFICATION_EXTENSION_UPDATING_STARTED, type);
30
31  // The extension system is trying to check for updates.  In the real world,
32  // this would be where synced extensions are asynchronously downloaded from
33  // the web store and installed.  In this test framework, we use this event as
34  // a signal that it's time to asynchronously fake the installation of these
35  // extensions.
36
37  base::MessageLoop::current()->PostTask(
38      FROM_HERE,
39      base::Bind(&SyncedExtensionInstaller::DoInstallSyncedExtensions,
40                 weak_ptr_factory_.GetWeakPtr()));
41}
42
43void SyncedExtensionInstaller::DoInstallSyncedExtensions() {
44  SyncExtensionHelper::GetInstance()->InstallExtensionsPendingForSync(profile_);
45}
46