Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(45)

Unified Diff: chrome/browser/extensions/extensions_service.h

Issue 12876: Introduce ExtensionsService. Load extensions on startup from a directory in... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extensions_service.h
===================================================================
--- chrome/browser/extensions/extensions_service.h (revision 0)
+++ chrome/browser/extensions/extensions_service.h (revision 0)
@@ -0,0 +1,106 @@
+// Copyright (c) 2006-2008 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_EXTENSIONS_EXTENSIONS_SERVICE_H_
+#define CHROME_BROWSER_EXTENSIONS_EXTENSIONS_SERVICE_H_
+
+#include <vector>
+
+#include "base/file_path.h"
+#include "base/message_loop.h"
+#include "base/ref_counted.h"
+#include "base/task.h"
+#include "chrome/browser/extensions/extension.h"
+
+typedef std::vector<Extension*> ExtensionList;
+class ExtensionsServiceBackend;
+
+// Interface for the frontend to implement. Typically, this will be
+// ExtensionsService, but it can also be a test harness.
+class ExtensionsServiceFrontendInterface
+ : public base::RefCountedThreadSafe<ExtensionsServiceFrontendInterface> {
+ public:
+ virtual ~ExtensionsServiceFrontendInterface(){}
+
+ // The message loop to invoke the frontend's methods on.
+ virtual MessageLoop* GetMessageLoop() = 0;
+
+ // Called when loading an extension fails.
+ virtual void OnExtensionLoadError(const std::wstring& message) = 0;
+
+ // Called with results from LoadExtensionsFromDirectory(). The frontend
+ // takes ownership of the list.
+ virtual void OnExtensionsLoadedFromDirectory(ExtensionList* extensions) = 0;
+};
+
+
+// Manages installed and running Chromium extensions.
+class ExtensionsService : public ExtensionsServiceFrontendInterface {
+ public:
+ ExtensionsService(const FilePath& profile_directory);
+ ~ExtensionsService();
+
+ // Gets the list of currently installed extensions.
+ const ExtensionList* extensions() const {
+ return &extensions_;
+ }
+
+ // Initialize and start all installed extensions.
+ bool Init();
+
+ // ExtensionsServiceFrontendInterface
+ virtual MessageLoop* GetMessageLoop();
+ virtual void OnExtensionLoadError(const std::wstring& message);
+ virtual void OnExtensionsLoadedFromDirectory(ExtensionList* extensions);
+
+ private:
+ // The name of the directory inside the profile where extensions are
+ // installed to.
+ static const FilePath::CharType* kInstallDirectoryName;
+
+ // The message loop for the thread the ExtensionsService is running on.
+ MessageLoop* message_loop_;
+
+ // The backend that will do IO on behalf of this instance.
+ scoped_refptr<ExtensionsServiceBackend> backend_;
+
+ // The current list of installed extensions.
+ ExtensionList extensions_;
+
+ // The full path to the directory where extensions are installed.
+ FilePath install_directory_;
+
+ DISALLOW_COPY_AND_ASSIGN(ExtensionsService);
+};
+
+// Implements IO for the ExtensionsService.
+// TODO(aa): Extract an interface out of this for testing the frontend, once the
+// frontend has significant logic to test.
+class ExtensionsServiceBackend
+ : public base::RefCountedThreadSafe<ExtensionsServiceBackend> {
+ public:
+ ExtensionsServiceBackend(){};
+
+ // Loads extensions from a directory. The extensions are assumed to be
+ // unpacked in directories that are direct children of the specified path.
+ // Errors are reported through OnExtensionLoadError(). On completion,
+ // OnExtensionsLoadedFromDirectory() is called with any successfully loaded
+ // extensions.
+ bool LoadExtensionsFromDirectory(
+ const FilePath &path,
+ scoped_refptr<ExtensionsServiceFrontendInterface> frontend);
+
+ private:
+ // Notify a frontend that there was an error loading an extension.
+ void ReportExtensionLoadError(ExtensionsServiceFrontendInterface* frontend,
+ const std::wstring& error);
+
+ // Notify a frontend that extensions were loaded.
+ void ReportExtensionsLoaded(ExtensionsServiceFrontendInterface* frontend,
+ ExtensionList* extensions);
+
+ DISALLOW_COPY_AND_ASSIGN(ExtensionsServiceBackend);
+};
+
+#endif // CHROME_BROWSER_EXTENSIONS_EXTENSIONS_SERVICE_H_

Powered by Google App Engine
This is Rietveld 408576698