Chromium Code Reviews| Index: chrome/browser/chromeos/plugin_selection_policy_unittest.cc |
| diff --git a/chrome/browser/chromeos/plugin_selection_policy_unittest.cc b/chrome/browser/chromeos/plugin_selection_policy_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..455ed3797faa91165ae7d40a48d32090f836072d |
| --- /dev/null |
| +++ b/chrome/browser/chromeos/plugin_selection_policy_unittest.cc |
| @@ -0,0 +1,270 @@ |
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/chromeos/plugin_selection_policy.h" |
| + |
| +#include <string> |
| +#include <vector> |
| + |
| +#include "base/file_path.h" |
| +#include "base/file_util.h" |
| +#include "base/ref_counted.h" |
| +#include "base/scoped_temp_dir.h" |
| +#include "chrome/browser/browser_thread.h" |
| +#include "googleurl/src/gurl.h" |
| +#include "testing/gtest/include/gtest/gtest.h" |
| +#include "testing/platform_test.h" |
| + |
| +using std::string; |
| +using std::vector; |
| + |
| +#if !defined(OS_CHROMEOS) |
| +#error This file is meant to be compiled on ChromeOS only. |
| +#endif |
| + |
| +namespace chromeos { |
| + |
| +const char kBasicPolicy[] = "# This is a basic policy\n" |
| + "plugin test.so\n" |
| + "allow foo.com\n" |
| + "deny bar.com\n"; |
| + |
| +const char kNoPluginPolicy[] = "# This is a policy with missing plugin.\n" |
| + "# Missing plugin test.so\n" |
| + "allow foo.com\n" |
| + "deny bar.com\n"; |
| +const char kNoRulesPolicy[] = "# This is a policy with no rules\n" |
| + "plugin test.so\n"; |
| + |
| +const char kEmptyPolicy[] = "# This is an empty policy\n"; |
| + |
| +const char kCommentTestPolicy[] = "# This is a policy with inline comments.\n" |
| + "plugin test.so# like this\n" |
| + "allow foo.com # and this\n" |
| + "deny bar.com # and this\n"; |
| + |
| +const char kMultiPluginTestPolicy[] = |
| + "# This is a policy with multiple plugins.\n" |
| + "plugin allow_foo.so\n" |
| + "allow foo.com\n" |
| + "deny bar.com\n" |
| + "plugin allow_baz_bim1.so\n" |
| + "deny google.com\n" |
| + "allow baz.com\n" |
| + "allow bim.com\n" |
| + "plugin allow_baz_bim2.so\n" |
| + "deny google.com\n" |
| + "allow baz.com\n" |
| + "allow bim.com\n"; |
| + |
| +const char kWhitespaceTestPolicy[] = "# This is a policy with odd whitespace.\n" |
| + " plugin\ttest.so# like this\n" |
| + "\n\n \n allow\t\tfoo.com # and this\n" |
| + "\tdeny bar.com\t\t\t# and this \n"; |
| + |
| +class PluginSelectionPolicyTest : public PlatformTest { |
| + public: |
| + PluginSelectionPolicyTest() |
| + : loop_(MessageLoop::TYPE_DEFAULT), |
| + file_thread_(BrowserThread::FILE, &loop_) {} |
| + |
| + virtual void SetUp() { |
| + PlatformTest::SetUp(); |
| + // Create a policy file to test with. |
| + ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
| + } |
| + |
| + protected: |
| + bool CreatePolicy(const std::string& name, |
| + const std::string& contents, |
| + FilePath* path) { |
| + FilePath policy_file(temp_dir_.path()); |
| + policy_file = policy_file.Append(FilePath(name)); |
| + int bytes_written = file_util::WriteFile(policy_file, |
| + contents.c_str(), |
| + contents.size()); |
| + if (path) |
| + *path = policy_file; |
| + return bytes_written >= 0; |
|
Paweł Hajdan Jr.
2010/10/15 07:17:41
This should be bytes_written == contents.size().
|
| + } |
| + |
| + private: |
| + ScopedTempDir temp_dir_; |
| + MessageLoop loop_; |
| + BrowserThread file_thread_; |
| +}; |
| + |
| +TEST_F(PluginSelectionPolicyTest, Basic) { |
| + FilePath path; |
| + ASSERT_TRUE(CreatePolicy("basic", kBasicPolicy, &path)); |
| + scoped_refptr<PluginSelectionPolicy> policy = new PluginSelectionPolicy; |
| + EXPECT_TRUE(policy->InitFromFile(path)); |
| +} |
| + |
| +TEST_F(PluginSelectionPolicyTest, InitFromFile) { |
| + { |
| + FilePath path; |
| + ASSERT_TRUE(CreatePolicy("basic", kBasicPolicy, &path)); |
| + scoped_refptr<PluginSelectionPolicy> policy = new PluginSelectionPolicy; |
| + EXPECT_TRUE(policy->InitFromFile(path)); |
| + } |
| + |
| + { |
| + FilePath path; |
| + ASSERT_TRUE(CreatePolicy("no_plugin", kNoPluginPolicy, &path)); |
| + scoped_refptr<PluginSelectionPolicy> policy = new PluginSelectionPolicy; |
| + EXPECT_FALSE(policy->InitFromFile(path)); |
| + } |
| + |
| + { |
| + FilePath path; |
| + ASSERT_TRUE(CreatePolicy("no_rules", kNoRulesPolicy, &path)); |
| + scoped_refptr<PluginSelectionPolicy> policy = new PluginSelectionPolicy; |
| + EXPECT_TRUE(policy->InitFromFile(path)); |
| + } |
| + |
| + { |
| + FilePath path; |
| + ASSERT_TRUE(CreatePolicy("empty", kEmptyPolicy, &path)); |
| + scoped_refptr<PluginSelectionPolicy> policy = new PluginSelectionPolicy; |
| + EXPECT_TRUE(policy->InitFromFile(path)); |
| + } |
| + |
| + { |
| + FilePath path; |
| + ASSERT_TRUE(CreatePolicy("comment", kCommentTestPolicy, &path)); |
| + scoped_refptr<PluginSelectionPolicy> policy = new PluginSelectionPolicy; |
| + EXPECT_TRUE(policy->InitFromFile(path)); |
| + } |
| + |
| + { |
| + FilePath path; |
| + ASSERT_TRUE(CreatePolicy("comment", kMultiPluginTestPolicy, &path)); |
| + scoped_refptr<PluginSelectionPolicy> policy = new PluginSelectionPolicy; |
| + EXPECT_TRUE(policy->InitFromFile(path)); |
| + } |
| + |
| + { |
| + FilePath path; |
| + ASSERT_TRUE(CreatePolicy("whitespace", kWhitespaceTestPolicy, &path)); |
| + scoped_refptr<PluginSelectionPolicy> policy = new PluginSelectionPolicy; |
| + EXPECT_TRUE(policy->InitFromFile(path)); |
| + } |
| +} |
| + |
| +TEST_F(PluginSelectionPolicyTest, IsAllowed) { |
| + FilePath path; |
| + ASSERT_TRUE(CreatePolicy("basic", kBasicPolicy, &path)); |
| + |
| + scoped_refptr<PluginSelectionPolicy> policy1 = new PluginSelectionPolicy; |
| + ASSERT_TRUE(policy1->InitFromFile(path)); |
| + EXPECT_TRUE(policy1->IsAllowed(GURL("http://www.foo.com/blah.html"), |
| + FilePath("/usr/local/bin/test.so"))); |
| + EXPECT_FALSE(policy1->IsAllowed(GURL("http://www.bar.com/blah.html"), |
| + FilePath("/usr/local/bin/test.so"))); |
| + EXPECT_FALSE(policy1->IsAllowed(GURL("http://www.baz.com/blah.html"), |
| + FilePath("/usr/local/bin/test.so"))); |
| + EXPECT_TRUE(policy1->IsAllowed(GURL("http://www.baz.com/blah.html"), |
| + FilePath("/usr/local/bin/real.so"))); |
| + |
| + scoped_refptr<PluginSelectionPolicy> policy2 = new PluginSelectionPolicy; |
| + ASSERT_TRUE(CreatePolicy("no_rules", kNoRulesPolicy, &path)); |
| + ASSERT_TRUE(policy2->InitFromFile(path)); |
| + EXPECT_FALSE(policy2->IsAllowed(GURL("http://www.foo.com/blah.html"), |
| + FilePath("/usr/local/bin/test.so"))); |
| + EXPECT_FALSE(policy2->IsAllowed(GURL("http://www.bar.com/blah.html"), |
| + FilePath("/usr/local/bin/test.so"))); |
| + EXPECT_FALSE(policy2->IsAllowed(GURL("http://www.baz.com/blah.html"), |
| + FilePath("/usr/local/bin/test.so"))); |
| + EXPECT_TRUE(policy2->IsAllowed(GURL("http://www.baz.com/blah.html"), |
| + FilePath("/usr/local/bin/real.so"))); |
| + |
| + scoped_refptr<PluginSelectionPolicy> policy3 = new PluginSelectionPolicy; |
| + ASSERT_TRUE(CreatePolicy("empty", kEmptyPolicy, &path)); |
| + ASSERT_TRUE(policy3->InitFromFile(path)); |
| + EXPECT_TRUE(policy3->IsAllowed(GURL("http://www.foo.com/blah.html"), |
| + FilePath("/usr/local/bin/test.so"))); |
| + EXPECT_TRUE(policy3->IsAllowed(GURL("http://www.bar.com/blah.html"), |
| + FilePath("/usr/local/bin/test.so"))); |
| + EXPECT_TRUE(policy3->IsAllowed(GURL("http://www.baz.com/blah.html"), |
| + FilePath("/usr/local/bin/test.so"))); |
| + EXPECT_TRUE(policy3->IsAllowed(GURL("http://www.baz.com/blah.html"), |
| + FilePath("/usr/local/bin/real.so"))); |
| +} |
| + |
| +TEST_F(PluginSelectionPolicyTest, FindFirstAllowed) { |
| + FilePath path; |
| + ASSERT_TRUE(CreatePolicy("multi", kMultiPluginTestPolicy, &path)); |
| + scoped_refptr<PluginSelectionPolicy> policy = new PluginSelectionPolicy; |
| + ASSERT_TRUE(policy->InitFromFile(path)); |
| + EXPECT_TRUE(policy->IsAllowed(GURL("http://www.foo.com/blah.html"), |
| + FilePath("/usr/local/bin/allow_foo.so"))); |
| + EXPECT_FALSE(policy->IsAllowed(GURL("http://www.bar.com/blah.html"), |
| + FilePath("/usr/local/bin/allow_foo.so"))); |
| + EXPECT_FALSE(policy->IsAllowed(GURL("http://www.baz.com/blah.html"), |
| + FilePath("/usr/local/bin/allow_foo.so"))); |
| + EXPECT_FALSE(policy->IsAllowed(GURL("http://www.bim.com/blah.html"), |
| + FilePath("/usr/local/bin/allow_foo.so"))); |
| + EXPECT_FALSE(policy->IsAllowed(GURL("http://www.foo.com/blah.html"), |
| + FilePath("/usr/local/bin/allow_baz_bim1.so"))); |
| + EXPECT_FALSE(policy->IsAllowed(GURL("http://www.bar.com/blah.html"), |
| + FilePath("/usr/local/bin/allow_baz_bim1.so"))); |
| + EXPECT_TRUE(policy->IsAllowed(GURL("http://www.baz.com/blah.html"), |
| + FilePath("/usr/local/bin/allow_baz_bim1.so"))); |
| + EXPECT_TRUE(policy->IsAllowed(GURL("http://www.bim.com/blah.html"), |
| + FilePath("/usr/local/bin/allow_baz_bim1.so"))); |
| + EXPECT_FALSE(policy->IsAllowed(GURL("http://www.google.com/blah.html"), |
| + FilePath("/usr/local/bin/allow_baz_bim1.so"))); |
| + EXPECT_FALSE(policy->IsAllowed(GURL("http://www.foo.com/blah.html"), |
| + FilePath("/usr/local/bin/allow_baz_bim2.so"))); |
| + EXPECT_FALSE(policy->IsAllowed(GURL("http://www.bar.com/blah.html"), |
| + FilePath("/usr/local/bin/allow_baz_bim2.so"))); |
| + EXPECT_TRUE(policy->IsAllowed(GURL("http://www.baz.com/blah.html"), |
| + FilePath("/usr/local/bin/allow_baz_bim2.so"))); |
| + EXPECT_TRUE(policy->IsAllowed(GURL("http://www.bim.com/blah.html"), |
| + FilePath("/usr/local/bin/allow_baz_bim2.so"))); |
| + EXPECT_FALSE(policy->IsAllowed(GURL("http://www.google.com/blah.html"), |
| + FilePath("/usr/local/bin/allow_baz_bim2.so"))); |
| + std::vector<WebPluginInfo> info_vector; |
| + WebPluginInfo info; |
| + // First we test that the one without any policy gets |
| + // selected for all if it's first. |
| + info.path = FilePath("/usr/local/bin/no_policy.so"); |
| + info_vector.push_back(info); |
| + info.path = FilePath("/usr/local/bin/allow_foo.so"); |
| + info_vector.push_back(info); |
| + info.path = FilePath("/usr/local/bin/allow_baz_bim1.so"); |
| + info_vector.push_back(info); |
| + info.path = FilePath("/usr/local/bin/allow_baz_bim2.so"); |
| + info_vector.push_back(info); |
| + EXPECT_EQ(0, policy->FindFirstAllowed(GURL("http://www.baz.com/blah.html"), |
| + info_vector)); |
| + EXPECT_EQ(0, policy->FindFirstAllowed(GURL("http://www.foo.com/blah.html"), |
| + info_vector)); |
| + EXPECT_EQ(0, policy->FindFirstAllowed(GURL("http://www.bling.com/blah.html"), |
| + info_vector)); |
| + EXPECT_EQ(0, policy->FindFirstAllowed(GURL("http://www.google.com/blah.html"), |
| + info_vector)); |
| + |
| + // Now move the plugin without any policy to the end. |
| + info_vector.clear(); |
| + info.path = FilePath("/usr/local/bin/allow_foo.so"); |
| + info_vector.push_back(info); |
| + info.path = FilePath("/usr/local/bin/allow_baz_bim1.so"); |
| + info_vector.push_back(info); |
| + info.path = FilePath("/usr/local/bin/allow_baz_bim2.so"); |
| + info_vector.push_back(info); |
| + info.path = FilePath("/usr/local/bin/no_policy.so"); |
| + info_vector.push_back(info); |
| + EXPECT_EQ(1, policy->FindFirstAllowed(GURL("http://www.baz.com/blah.html"), |
| + info_vector)); |
| + EXPECT_EQ(0, policy->FindFirstAllowed(GURL("http://www.foo.com/blah.html"), |
| + info_vector)); |
| + EXPECT_EQ(3, policy->FindFirstAllowed(GURL("http://www.bling.com/blah.html"), |
| + info_vector)); |
| + EXPECT_EQ(3, policy->FindFirstAllowed(GURL("http://www.google.com/blah.html"), |
| + info_vector)); |
| +} |
| + |
| +} // namespace chromeos |