NaCl: Update revision in DEPS, r12770 -> r12773
[chromium-blink-merge.git] / chrome / browser / extensions / external_policy_loader_unittest.cc
blob74d00d5c5853855ce179cc4673ce87c66766071f
1 // Copyright (c) 2012 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.
5 #include <set>
6 #include <string>
8 #include "base/logging.h"
9 #include "base/message_loop/message_loop.h"
10 #include "base/values.h"
11 #include "base/version.h"
12 #include "chrome/browser/extensions/external_policy_loader.h"
13 #include "chrome/browser/extensions/external_provider_impl.h"
14 #include "chrome/common/pref_names.h"
15 #include "chrome/test/base/testing_pref_service_syncable.h"
16 #include "chrome/test/base/testing_profile.h"
17 #include "content/public/test/test_browser_thread.h"
18 #include "extensions/browser/external_provider_interface.h"
19 #include "extensions/browser/pref_names.h"
20 #include "extensions/common/extension.h"
21 #include "extensions/common/manifest.h"
22 #include "testing/gtest/include/gtest/gtest.h"
24 using content::BrowserThread;
26 namespace extensions {
28 class ExternalPolicyLoaderTest : public testing::Test {
29 public:
30 ExternalPolicyLoaderTest() : ui_thread_(BrowserThread::UI, &loop_) {
33 virtual ~ExternalPolicyLoaderTest() {}
35 private:
36 // We need these to satisfy BrowserThread::CurrentlyOn(BrowserThread::UI)
37 // checks in ExternalProviderImpl.
38 base::MessageLoopForIO loop_;
39 content::TestBrowserThread ui_thread_;
42 class MockExternalPolicyProviderVisitor
43 : public ExternalProviderInterface::VisitorInterface {
44 public:
45 MockExternalPolicyProviderVisitor() {
48 // Initialize a provider with |policy_forcelist|, and check that it installs
49 // exactly the extensions specified in |expected_extensions|.
50 void Visit(const base::DictionaryValue& policy_forcelist,
51 const std::set<std::string>& expected_extensions) {
52 profile_.reset(new TestingProfile);
53 profile_->GetTestingPrefService()->SetManagedPref(
54 pref_names::kInstallForceList, policy_forcelist.DeepCopy());
55 provider_.reset(new ExternalProviderImpl(
56 this,
57 new ExternalPolicyLoader(profile_.get()),
58 profile_.get(),
59 Manifest::INVALID_LOCATION,
60 Manifest::EXTERNAL_POLICY_DOWNLOAD,
61 Extension::NO_FLAGS));
63 // Extensions will be removed from this list as they visited,
64 // so it should be emptied by the end.
65 expected_extensions_ = expected_extensions;
66 provider_->VisitRegisteredExtension();
67 EXPECT_TRUE(expected_extensions_.empty());
70 virtual bool OnExternalExtensionFileFound(const std::string& id,
71 const Version* version,
72 const base::FilePath& path,
73 Manifest::Location unused,
74 int unused2,
75 bool unused3) OVERRIDE {
76 ADD_FAILURE() << "There should be no external extensions from files.";
77 return false;
80 virtual bool OnExternalExtensionUpdateUrlFound(
81 const std::string& id, const GURL& update_url,
82 Manifest::Location location, int unused1, bool unused2) OVERRIDE {
83 // Extension has the correct location.
84 EXPECT_EQ(Manifest::EXTERNAL_POLICY_DOWNLOAD, location);
86 // Provider returns the correct location when asked.
87 Manifest::Location location1;
88 scoped_ptr<Version> version1;
89 provider_->GetExtensionDetails(id, &location1, &version1);
90 EXPECT_EQ(Manifest::EXTERNAL_POLICY_DOWNLOAD, location1);
91 EXPECT_FALSE(version1.get());
93 // Remove the extension from our list.
94 EXPECT_EQ(1U, expected_extensions_.erase(id));
95 return true;
98 virtual void OnExternalProviderReady(
99 const ExternalProviderInterface* provider) OVERRIDE {
100 EXPECT_EQ(provider, provider_.get());
101 EXPECT_TRUE(provider->IsReady());
104 private:
105 std::set<std::string> expected_extensions_;
107 scoped_ptr<TestingProfile> profile_;
109 scoped_ptr<ExternalProviderImpl> provider_;
111 DISALLOW_COPY_AND_ASSIGN(MockExternalPolicyProviderVisitor);
114 TEST_F(ExternalPolicyLoaderTest, PolicyIsParsed) {
115 base::DictionaryValue forced_extensions;
116 std::set<std::string> expected_extensions;
117 extensions::ExternalPolicyLoader::AddExtension(
118 &forced_extensions, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
119 "http://www.example.com/crx?a=5;b=6");
120 expected_extensions.insert("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
121 extensions::ExternalPolicyLoader::AddExtension(
122 &forced_extensions, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
123 "https://clients2.google.com/service/update2/crx");
124 expected_extensions.insert("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
126 MockExternalPolicyProviderVisitor mv;
127 mv.Visit(forced_extensions, expected_extensions);
130 TEST_F(ExternalPolicyLoaderTest, InvalidEntriesIgnored) {
131 base::DictionaryValue forced_extensions;
132 std::set<std::string> expected_extensions;
134 extensions::ExternalPolicyLoader::AddExtension(
135 &forced_extensions, "cccccccccccccccccccccccccccccccc",
136 "http://www.example.com/crx");
137 expected_extensions.insert("cccccccccccccccccccccccccccccccc");
139 // Add invalid entries.
140 forced_extensions.SetString("invalid", "http://www.example.com/crx");
141 forced_extensions.SetString("dddddddddddddddddddddddddddddddd",
142 std::string());
143 forced_extensions.SetString("invalid", "bad");
145 MockExternalPolicyProviderVisitor mv;
146 mv.Visit(forced_extensions, expected_extensions);
149 } // namespace extensions