Index: chrome/browser/chromeos/plugin_selection_policy.h |
diff --git a/chrome/browser/chromeos/plugin_selection_policy.h b/chrome/browser/chromeos/plugin_selection_policy.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4786e3cd8389811a5bca4f64d37ed379f747da0b |
--- /dev/null |
+++ b/chrome/browser/chromeos/plugin_selection_policy.h |
@@ -0,0 +1,79 @@ |
+// 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. |
+ |
+#ifndef CHROME_BROWSER_CHROMEOS_PLUGIN_SELECTION_POLICY_H_ |
+#define CHROME_BROWSER_CHROMEOS_PLUGIN_SELECTION_POLICY_H_ |
+ |
+#include <map> |
+#include <string> |
+#include <vector> |
+ |
+#include "base/gtest_prod_util.h" |
+#include "base/ref_counted.h" |
+#include "webkit/glue/plugins/webplugininfo.h" |
+ |
+class GURL; |
+class FilePath; |
+ |
+namespace chromeos { |
+ |
+#if !defined(OS_CHROMEOS) |
+#error This file is meant to be compiled on ChromeOS only. |
+#endif |
+ |
+// This class is used to provide logic for selection of a plugin |
+// executable path in the browser. It loads a policy file for |
+// selection of particular plugins based on the domain they are be |
+// instantiated for. It is used by the PluginService. It is (and |
+// should be) only used for ChromeOS. |
+ |
+// The functions in this class must only be called on the FILE thread |
+// (and will DCHECK if they aren't). |
+ |
+class PluginSelectionPolicy |
+ : public base::RefCountedThreadSafe<PluginSelectionPolicy> { |
+ public: |
+ PluginSelectionPolicy(); |
+ |
+ // This should be called before any other method. This starts the |
+ // process of initialization on the FILE thread. |
+ void StartInit(); |
+ |
+ // Returns the first allowed plugin in the given vector of plugin |
+ // information. Returns -1 if no plugins in the info vector are |
+ // allowed (or if the info vector is empty). InitFromFile must |
+ // complete before any calls to FindFirstAllowed happen or it will |
+ // assert. |
+ int FindFirstAllowed(const GURL& url, const std::vector<WebPluginInfo>& info); |
+ |
+ // Applies the current policy to the given path using the url to |
+ // look up what the policy for that domain is. Returns true if the |
+ // given plugin is allowed for that domain. InitFromFile must |
+ // complete before any calls to IsAllowed happen or it will assert. |
+ bool IsAllowed(const GURL& url, const FilePath& path); |
+ |
+ private: |
+ // To allow access to InitFromFile |
+ FRIEND_TEST_ALL_PREFIXES(PluginSelectionPolicyTest, Basic); |
+ FRIEND_TEST_ALL_PREFIXES(PluginSelectionPolicyTest, InitFromFile); |
+ FRIEND_TEST_ALL_PREFIXES(PluginSelectionPolicyTest, IsAllowed); |
+ FRIEND_TEST_ALL_PREFIXES(PluginSelectionPolicyTest, FindFirstAllowed); |
+ |
+ // Initializes from the default policy file. |
+ bool Init(); |
+ |
+ // Initializes from the given file. |
+ bool InitFromFile(const FilePath& policy_file); |
+ |
+ typedef std::vector<std::pair<bool, std::string> > Policy; |
+ typedef std::map<std::string, Policy> PolicyMap; |
+ |
+ PolicyMap policies_; |
+ bool initialized_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(PluginSelectionPolicy); |
+}; |
+ |
+} // namespace chromeos |
+#endif // CHROME_BROWSER_CHROMEOS_PLUGIN_SELECTION_POLICY_H_ |