Home | History | Annotate | Download | only in browser
      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 
     17 namespace extensions {
     18 namespace {
     19 
     20 // Creates a very simple extension with a background page.
     21 scoped_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 
     32 class 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 
     45 TEST_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 
     62 TEST_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 
     75 TEST_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.
     89 TEST_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