15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#ifndef EXTENSIONS_SHELL_BROWSER_SHELL_EXTENSION_SYSTEM_H_
65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#define EXTENSIONS_SHELL_BROWSER_SHELL_EXTENSION_SYSTEM_H_
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <vector>
95d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/compiler_specific.h"
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h"
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/common/one_shot_event.h"
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class BrowserContextKeyedServiceFactory;
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace base {
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class FilePath;
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace content {
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class BrowserContext;
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace extensions {
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class DeclarativeUserScriptMaster;
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class EventRouter;
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class InfoMap;
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class LazyBackgroundTaskQueue;
305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ProcessManager;
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class RendererStartupHelper;
326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class SharedUserScriptMaster;
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// A simplified version of ExtensionSystem for app_shell. Allows
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// app_shell to skip initialization of services it doesn't need.
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ShellExtensionSystem : public ExtensionSystem {
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public:
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  explicit ShellExtensionSystem(content::BrowserContext* browser_context);
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual ~ShellExtensionSystem();
405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Loads an unpacked application from a directory. Returns true on success.
42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  bool LoadApp(const base::FilePath& app_dir);
43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  // Launch the currently loaded app.
45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  void LaunchApp();
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // KeyedService implementation:
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void Shutdown() OVERRIDE;
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
50f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  scoped_refptr<Extension> extension() { return extension_; }
51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // ExtensionSystem implementation:
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void InitForRegularProfile(bool extensions_enabled) OVERRIDE;
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual ExtensionService* extension_service() OVERRIDE;
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual RuntimeData* runtime_data() OVERRIDE;
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual ManagementPolicy* management_policy() OVERRIDE;
576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual SharedUserScriptMaster* shared_user_script_master() OVERRIDE;
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual ProcessManager* process_manager() OVERRIDE;
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual StateStore* state_store() OVERRIDE;
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual StateStore* rules_store() OVERRIDE;
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual InfoMap* info_map() OVERRIDE;
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual LazyBackgroundTaskQueue* lazy_background_task_queue() OVERRIDE;
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual EventRouter* event_router() OVERRIDE;
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual WarningService* warning_service() OVERRIDE;
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual Blacklist* blacklist() OVERRIDE;
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual ErrorConsole* error_console() OVERRIDE;
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual InstallVerifier* install_verifier() OVERRIDE;
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual QuotaService* quota_service() OVERRIDE;
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void RegisterExtensionWithRequestContexts(
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const Extension* extension) OVERRIDE;
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void UnregisterExtensionWithRequestContexts(
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const std::string& extension_id,
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      const UnloadedExtensionInfo::Reason reason) OVERRIDE;
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual const OneShotEvent& ready() const OVERRIDE;
75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual ContentVerifier* content_verifier() OVERRIDE;
76f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual scoped_ptr<ExtensionSet> GetDependentExtensions(
77f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      const Extension* extension) OVERRIDE;
786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  virtual DeclarativeUserScriptMaster*
796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      GetDeclarativeUserScriptMasterByExtension(
806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)          const ExtensionId& extension_id) OVERRIDE;
815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) private:
835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  content::BrowserContext* browser_context_;  // Not owned.
845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
85a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Extension ID for the app.
86a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  std::string app_id_;
87a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
88f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  scoped_refptr<Extension> extension_;
89f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Data to be accessed on the IO thread. Must outlive process_manager_.
915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_refptr<InfoMap> info_map_;
925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<RuntimeData> runtime_data_;
945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<LazyBackgroundTaskQueue> lazy_background_task_queue_;
955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<EventRouter> event_router_;
965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<ProcessManager> process_manager_;
975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  scoped_ptr<QuotaService> quota_service_;
985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Signaled when the extension system has completed its startup tasks.
1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  OneShotEvent ready_;
1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ShellExtensionSystem);
1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace extensions
1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#endif  // EXTENSIONS_SHELL_BROWSER_SHELL_EXTENSION_SYSTEM_H_
108