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_(®istry_) {} 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