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/extensions_test.h"
6
7#include "components/keyed_service/content/browser_context_dependency_manager.h"
8#include "content/public/browser/content_browser_client.h"
9#include "content/public/common/content_client.h"
10#include "content/public/test/test_browser_context.h"
11#include "extensions/browser/test_extensions_browser_client.h"
12
13namespace extensions {
14
15// This class does work in the constructor instead of SetUp() to give subclasses
16// a valid BrowserContext to use while initializing their members. For example:
17//
18// class MyExtensionsTest : public ExtensionsTest {
19//   MyExtensionsTest()
20//     : my_object_(browser_context())) {
21//   }
22// };
23ExtensionsTest::ExtensionsTest()
24    : content_client_(new content::ContentClient),
25      content_browser_client_(new content::ContentBrowserClient),
26      browser_context_(new content::TestBrowserContext),
27      extensions_browser_client_(
28          new TestExtensionsBrowserClient(browser_context_.get())) {
29  content::SetContentClient(content_client_.get());
30  content::SetBrowserClientForTesting(content_browser_client_.get());
31  ExtensionsBrowserClient::Set(extensions_browser_client_.get());
32}
33
34ExtensionsTest::~ExtensionsTest() {
35  ExtensionsBrowserClient::Set(NULL);
36  content::SetBrowserClientForTesting(NULL);
37  content::SetContentClient(NULL);
38}
39
40void ExtensionsTest::SetUp() {
41  // Crashing here? Don't use this class in Chrome's unit_tests. See header.
42  BrowserContextDependencyManager::GetInstance()
43      ->CreateBrowserContextServicesForTest(browser_context_.get());
44}
45
46void ExtensionsTest::TearDown() {
47  // Allows individual tests to have BrowserContextKeyedServiceFactory objects
48  // as member variables instead of singletons. The individual services will be
49  // cleaned up before the factories are destroyed.
50  BrowserContextDependencyManager::GetInstance()->DestroyBrowserContextServices(
51      browser_context_.get());
52}
53
54}  // namespace extensions
55