Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / external_policy_loader_unittest.cc
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.
4
5 #include <set>
6 #include <string>
7
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/extension_management.h"
13 #include "chrome/browser/extensions/external_policy_loader.h"
14 #include "chrome/browser/extensions/external_provider_impl.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"
23
24 using content::BrowserThread;
25
26 namespace extensions {
27
28 class ExternalPolicyLoaderTest : public testing::Test {
29  public:
30   ExternalPolicyLoaderTest() : ui_thread_(BrowserThread::UI, &loop_) {
31   }
32
33   ~ExternalPolicyLoaderTest() override {}
34
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_;
40 };
41
42 class MockExternalPolicyProviderVisitor
43     : public ExternalProviderInterface::VisitorInterface {
44  public:
45   MockExternalPolicyProviderVisitor() {
46   }
47
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(
58             ExtensionManagementFactory::GetForBrowserContext(profile_.get()),
59             ExternalPolicyLoader::FORCED),
60         profile_.get(),
61         Manifest::INVALID_LOCATION,
62         Manifest::EXTERNAL_POLICY_DOWNLOAD,
63         Extension::NO_FLAGS));
64
65     // Extensions will be removed from this list as they visited,
66     // so it should be emptied by the end.
67     expected_extensions_ = expected_extensions;
68     provider_->VisitRegisteredExtension();
69     EXPECT_TRUE(expected_extensions_.empty());
70   }
71
72   bool OnExternalExtensionFileFound(const std::string& id,
73                                     const Version* version,
74                                     const base::FilePath& path,
75                                     Manifest::Location unused,
76                                     int unused2,
77                                     bool unused3) override {
78     ADD_FAILURE() << "There should be no external extensions from files.";
79     return false;
80   }
81
82   bool OnExternalExtensionUpdateUrlFound(const std::string& id,
83                                          const std::string& install_parameter,
84                                          const GURL& update_url,
85                                          Manifest::Location location,
86                                          int unused1,
87                                          bool unused2) override {
88     // Extension has the correct location.
89     EXPECT_EQ(Manifest::EXTERNAL_POLICY_DOWNLOAD, location);
90
91     // Provider returns the correct location when asked.
92     Manifest::Location location1;
93     scoped_ptr<Version> version1;
94     provider_->GetExtensionDetails(id, &location1, &version1);
95     EXPECT_EQ(Manifest::EXTERNAL_POLICY_DOWNLOAD, location1);
96     EXPECT_FALSE(version1.get());
97
98     // Remove the extension from our list.
99     EXPECT_EQ(1U, expected_extensions_.erase(id));
100     return true;
101   }
102
103   void OnExternalProviderReady(
104       const ExternalProviderInterface* provider) override {
105     EXPECT_EQ(provider, provider_.get());
106     EXPECT_TRUE(provider->IsReady());
107   }
108
109  private:
110   std::set<std::string> expected_extensions_;
111
112   scoped_ptr<TestingProfile> profile_;
113
114   scoped_ptr<ExternalProviderImpl> provider_;
115
116   DISALLOW_COPY_AND_ASSIGN(MockExternalPolicyProviderVisitor);
117 };
118
119 TEST_F(ExternalPolicyLoaderTest, PolicyIsParsed) {
120   base::DictionaryValue forced_extensions;
121   std::set<std::string> expected_extensions;
122   extensions::ExternalPolicyLoader::AddExtension(
123       &forced_extensions, "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
124       "http://www.example.com/crx?a=5;b=6");
125   expected_extensions.insert("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
126   extensions::ExternalPolicyLoader::AddExtension(
127       &forced_extensions, "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
128       "https://clients2.google.com/service/update2/crx");
129   expected_extensions.insert("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
130
131   MockExternalPolicyProviderVisitor mv;
132   mv.Visit(forced_extensions, expected_extensions);
133 }
134
135 TEST_F(ExternalPolicyLoaderTest, InvalidEntriesIgnored) {
136   base::DictionaryValue forced_extensions;
137   std::set<std::string> expected_extensions;
138
139   extensions::ExternalPolicyLoader::AddExtension(
140       &forced_extensions, "cccccccccccccccccccccccccccccccc",
141       "http://www.example.com/crx");
142   expected_extensions.insert("cccccccccccccccccccccccccccccccc");
143
144   // Add invalid entries.
145   forced_extensions.SetString("invalid", "http://www.example.com/crx");
146   forced_extensions.SetString("dddddddddddddddddddddddddddddddd",
147                               std::string());
148   forced_extensions.SetString("invalid", "bad");
149
150   MockExternalPolicyProviderVisitor mv;
151   mv.Visit(forced_extensions, expected_extensions);
152 }
153
154 }  // namespace extensions