1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved.
2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file.
4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/background/background_mode_manager.h"
6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/browser_process.h"
7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/extensions/extension_browsertest.h"
8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/browser/profiles/profile_manager.h"
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "chrome/test/base/ui_test_utils.h"
10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass TestBackgroundModeManager : public BackgroundModeManager {
12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public:
13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  TestBackgroundModeManager(CommandLine* command_line,
14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                            ProfileInfoCache* profile_cache)
15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      : BackgroundModeManager(command_line, profile_cache),
16eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        showed_background_app_installed_notification_for_test_(false) {}
17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual ~TestBackgroundModeManager() {}
19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  virtual void DisplayAppInstalledNotification(
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      const extensions::Extension* extension) OVERRIDE {
22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    showed_background_app_installed_notification_for_test_ = true;
23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool showed_background_app_installed_notification_for_test() {
26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    return showed_background_app_installed_notification_for_test_;
27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void set_showed_background_app_installed_notification_for_test(
30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      bool showed) {
31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    showed_background_app_installed_notification_for_test_ = showed;
32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private:
35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Tracks if we have shown a "Background App Installed" notification to the
36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // user.  Used for unit tests only.
37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  bool showed_background_app_installed_notification_for_test_;
38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  FRIEND_TEST_ALL_PREFIXES(BackgroundAppBrowserTest,
40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                           ReloadBackgroundApp);
41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  DISALLOW_COPY_AND_ASSIGN(TestBackgroundModeManager);
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch};
44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass BackgroundAppBrowserTest: public ExtensionBrowserTest {};
46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Tests that if we reload a background app, we don't get a popup bubble
48eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// telling us that a new background app has been installed.
49eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochIN_PROC_BROWSER_TEST_F(BackgroundAppBrowserTest, ReloadBackgroundApp) {
50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Pass this in to the browser test.
52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  scoped_ptr<BackgroundModeManager> test_background_mode_manager(
53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      new TestBackgroundModeManager(
54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          CommandLine::ForCurrentProcess(),
55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          &(g_browser_process->profile_manager()->GetProfileInfoCache())));
56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  g_browser_process->set_background_mode_manager_for_test(
57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      test_background_mode_manager.Pass());
58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  TestBackgroundModeManager* manager =
59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      reinterpret_cast<TestBackgroundModeManager*>(
60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch          g_browser_process->background_mode_manager());
61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Load our background extension
63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_FALSE(
64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      manager->showed_background_app_installed_notification_for_test());
65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  const extensions::Extension* extension = LoadExtension(
66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      test_data_dir_.AppendASCII("background_app"));
67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ASSERT_FALSE(extension == NULL);
68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Set the test flag to not shown.
70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  manager->set_showed_background_app_installed_notification_for_test(false);
71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Reload our background extension
73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  ReloadExtension(extension->id());
74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // Ensure that we did not see a "Background extension loaded" dialog.
76eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_FALSE(
77eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch      manager->showed_background_app_installed_notification_for_test());
78eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
79