16e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
26e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
36e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// found in the LICENSE file.
46e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
56e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#ifndef CHROME_BROWSER_EXTENSIONS_SHARED_USER_SCRIPT_MASTER_H_
66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#define CHROME_BROWSER_EXTENSIONS_SHARED_USER_SCRIPT_MASTER_H_
76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include <set>
96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/scoped_observer.h"
116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chrome/browser/extensions/user_script_loader.h"
126e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "extensions/browser/extension_registry_observer.h"
136e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "extensions/common/extension.h"
146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "extensions/common/user_script.h"
156e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
166e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace content {
176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class BrowserContext;
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}
196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class Profile;
216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
226e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)namespace extensions {
236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class ExtensionRegistry;
256e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// Manages statically-defined user scripts for all extensions. Owns a
276e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// UserScriptLoader to which file loading and shared memory management
286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)// operations are delegated.
296e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class SharedUserScriptMaster : public ExtensionRegistryObserver {
306e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public:
316e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  explicit SharedUserScriptMaster(Profile* profile);
326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual ~SharedUserScriptMaster();
336e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Provides access to loader state method: scripts_ready().
356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  bool scripts_ready() const { return loader_.scripts_ready(); }
366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) private:
386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // ExtensionRegistryObserver implementation.
396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void OnExtensionLoaded(content::BrowserContext* browser_context,
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)                                 const Extension* extension) OVERRIDE;
416e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual void OnExtensionUnloaded(
426e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      content::BrowserContext* browser_context,
436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const Extension* extension,
446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      UnloadedExtensionInfo::Reason reason) OVERRIDE;
456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Gets an extension's scripts' metadata; i.e., gets a list of UserScript
476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // objects that contains script info, but not the contents of the scripts.
486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  const std::set<UserScript> GetScriptsMetadata(const Extension* extension);
496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // Script loader that handles loading contents of scripts into shared memory
516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // and notifying renderers of scripts in shared memory.
526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  UserScriptLoader loader_;
536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  // The profile for which the scripts managed here are installed.
556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  Profile* profile_;
566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver>
586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      extension_registry_observer_;
596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(SharedUserScriptMaster);
616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)};
626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}  // namespace extensions
646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)
656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#endif  // CHROME_BROWSER_EXTENSIONS_SHARED_USER_SCRIPT_MASTER_H_
66