1// Copyright (c) 2013 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#ifndef CHROME_BROWSER_EXTENSIONS_EXTERNAL_COMPONENT_LOADER_H_ 6#define CHROME_BROWSER_EXTENSIONS_EXTERNAL_COMPONENT_LOADER_H_ 7 8#include <string> 9 10#include "base/compiler_specific.h" 11#include "chrome/browser/extensions/external_loader.h" 12#include "chrome/browser/profiles/profile.h" 13 14namespace extensions { 15 16class Extension; 17 18// A specialization of the ExternalLoader that loads a hard-coded list of 19// external extensions, that should be considered components of chrome (but 20// unlike Component extensions, these extensions are installed from the webstore 21// and don't get access to component only APIs. 22// Instances of this class are expected to be created and destroyed on the UI 23// thread and they are expecting public method calls from the UI thread. 24class ExternalComponentLoader : public ExternalLoader { 25 public: 26 explicit ExternalComponentLoader(Profile* profile); 27 28 // True if |extension| should be modifiable by the user. 29 static bool IsModifiable(const extensions::Extension* extension); 30 31 protected: 32 virtual void StartLoading() OVERRIDE; 33 34 private: 35 friend class base::RefCountedThreadSafe<ExternalLoader>; 36 virtual ~ExternalComponentLoader(); 37 38 // The profile that this loader is associated with. It listens for 39 // preference changes for that profile. 40 Profile* profile_; 41 DISALLOW_COPY_AND_ASSIGN(ExternalComponentLoader); 42}; 43 44} // namespace extensions 45 46#endif // CHROME_BROWSER_EXTENSIONS_EXTERNAL_COMPONENT_LOADER_H_ 47