// Copyright (c) 2011 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/memory/ref_counted.h" #include "webkit/plugins/npapi/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<webkit::npapi::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, FindFirstAllowed); FRIEND_TEST_ALL_PREFIXES(PluginSelectionPolicyTest, InitFromFile); FRIEND_TEST_ALL_PREFIXES(PluginSelectionPolicyTest, IsAllowed); FRIEND_TEST_ALL_PREFIXES(PluginSelectionPolicyTest, MissingFile); // 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_; // This is used to DCHECK if we try and call IsAllowed or // FindFirstAllowed before we've finished executing InitFromFile. // Note: We're "finished" even if loading the file fails -- the // point of the DCHECK is to make sure we haven't violated our // ordering/threading assumptions, not to make sure that we're // properly initialized. bool init_from_file_finished_; DISALLOW_COPY_AND_ASSIGN(PluginSelectionPolicy); }; } // namespace chromeos #endif // CHROME_BROWSER_CHROMEOS_PLUGIN_SELECTION_POLICY_H_