runtime_data_unittest.cc revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
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 "extensions/browser/runtime_data.h"
6
7#include <string>
8
9#include "base/memory/ref_counted.h"
10#include "extensions/browser/extension_registry.h"
11#include "extensions/common/extension.h"
12#include "extensions/common/extension_builder.h"
13#include "extensions/common/test_util.h"
14#include "extensions/common/value_builder.h"
15#include "testing/gtest/include/gtest/gtest.h"
16
17namespace extensions {
18namespace {
19
20// Creates a very simple extension with a background page.
21scoped_refptr<Extension> CreateExtensionWithBackgroundPage() {
22  return ExtensionBuilder()
23      .SetManifest(
24           DictionaryBuilder()
25             .Set("name", "test")
26             .Set("version", "0.1")
27             .Set("background", DictionaryBuilder().Set("page", "bg.html")))
28      .SetID("id2")
29      .Build();
30}
31
32class RuntimeDataTest : public testing::Test {
33 public:
34  RuntimeDataTest() : registry_(NULL), runtime_data_(&registry_) {}
35  virtual ~RuntimeDataTest() {}
36
37 protected:
38  ExtensionRegistry registry_;
39  RuntimeData runtime_data_;
40
41 private:
42  DISALLOW_COPY_AND_ASSIGN(RuntimeDataTest);
43};
44
45TEST_F(RuntimeDataTest, IsBackgroundPageReady) {
46  // An extension without a background page is always considered ready.
47  scoped_refptr<Extension> no_background = test_util::CreateEmptyExtension();
48  EXPECT_TRUE(runtime_data_.IsBackgroundPageReady(no_background.get()));
49
50  // An extension with a background page is not ready until the flag is set.
51  scoped_refptr<Extension> with_background =
52      CreateExtensionWithBackgroundPage();
53  EXPECT_FALSE(runtime_data_.IsBackgroundPageReady(with_background.get()));
54
55  // The flag can be toggled.
56  runtime_data_.SetBackgroundPageReady(with_background.get(), true);
57  EXPECT_TRUE(runtime_data_.IsBackgroundPageReady(with_background.get()));
58  runtime_data_.SetBackgroundPageReady(with_background.get(), false);
59  EXPECT_FALSE(runtime_data_.IsBackgroundPageReady(with_background.get()));
60}
61
62TEST_F(RuntimeDataTest, IsBeingUpgraded) {
63  scoped_refptr<Extension> extension = test_util::CreateEmptyExtension();
64
65  // An extension is not being upgraded until the flag is set.
66  EXPECT_FALSE(runtime_data_.IsBeingUpgraded(extension.get()));
67
68  // The flag can be toggled.
69  runtime_data_.SetBeingUpgraded(extension.get(), true);
70  EXPECT_TRUE(runtime_data_.IsBeingUpgraded(extension.get()));
71  runtime_data_.SetBeingUpgraded(extension.get(), false);
72  EXPECT_FALSE(runtime_data_.IsBeingUpgraded(extension.get()));
73}
74
75TEST_F(RuntimeDataTest, HasUsedWebRequest) {
76  scoped_refptr<Extension> extension = test_util::CreateEmptyExtension();
77
78  // An extension has not used web request until the flag is set.
79  EXPECT_FALSE(runtime_data_.HasUsedWebRequest(extension.get()));
80
81  // The flag can be toggled.
82  runtime_data_.SetHasUsedWebRequest(extension.get(), true);
83  EXPECT_TRUE(runtime_data_.HasUsedWebRequest(extension.get()));
84  runtime_data_.SetHasUsedWebRequest(extension.get(), false);
85  EXPECT_FALSE(runtime_data_.HasUsedWebRequest(extension.get()));
86}
87
88// Unloading an extension stops tracking it.
89TEST_F(RuntimeDataTest, OnExtensionUnloaded) {
90  scoped_refptr<Extension> extension = CreateExtensionWithBackgroundPage();
91  runtime_data_.SetBackgroundPageReady(extension.get(), true);
92  ASSERT_TRUE(runtime_data_.HasExtensionForTesting(extension.get()));
93
94  runtime_data_.OnExtensionUnloaded(
95      NULL, extension.get(), UnloadedExtensionInfo::REASON_DISABLE);
96  EXPECT_FALSE(runtime_data_.HasExtensionForTesting(extension.get()));
97}
98
99}  // namespace
100}  // namespace extensions
101