| Index: chrome/browser/extensions/extension_permissions_api.h
|
| diff --git a/chrome/browser/extensions/extension_permissions_api.h b/chrome/browser/extensions/extension_permissions_api.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..35da6ca419a8e5e4f8c344e4d1c69511ebe09734
|
| --- /dev/null
|
| +++ b/chrome/browser/extensions/extension_permissions_api.h
|
| @@ -0,0 +1,119 @@
|
| +// 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_EXTENSIONS_EXTENSION_PERMISSIONS_API_H__
|
| +#define CHROME_BROWSER_EXTENSIONS_EXTENSION_PERMISSIONS_API_H__
|
| +#pragma once
|
| +
|
| +#include "chrome/browser/extensions/extension_function.h"
|
| +#include "chrome/browser/extensions/extension_install_ui.h"
|
| +#include "chrome/common/extensions/extension_permission_set.h"
|
| +#include "chrome/common/chrome_notification_types.h"
|
| +#include "content/browser/renderer_host/render_process_host.h"
|
| +#include "content/common/notification_service.h"
|
| +
|
| +namespace base {
|
| +class DictionaryValue;
|
| +}
|
| +class Extension;
|
| +class ExtensionPermissionSet;
|
| +class ExtensionService;
|
| +class Profile;
|
| +
|
| +class ExtensionPermissionsManager {
|
| + public:
|
| + explicit ExtensionPermissionsManager(ExtensionService* extension_service);
|
| + ~ExtensionPermissionsManager();
|
| +
|
| + // Adds the set of |permissions| to the |extension|'s active permission set
|
| + // and sends the relevant messages and notifications. This method assumes the
|
| + // user has already been prompted, if necessary, for the extra permissions.
|
| + void AddPermissions(const Extension* extension,
|
| + const ExtensionPermissionSet* permissions);
|
| +
|
| + // Removes the set of |permissions| from the |extension|'s active permission
|
| + // set and sends the relevant messages and notifications.
|
| + void RemovePermissions(const Extension* extension,
|
| + const ExtensionPermissionSet* permissions);
|
| +
|
| + // Returns the list of API permissions that are supported by the optional
|
| + // permissions API.
|
| + const ExtensionPermissionSet& whitelist() const { return *whitelist_; }
|
| +
|
| + private:
|
| + enum EventType {
|
| + ADDED,
|
| + REMOVED,
|
| + };
|
| +
|
| + // Dispatches specified event to the extension.
|
| + void DispatchEvent(const std::string& extension_id,
|
| + const char* event_name,
|
| + const ExtensionPermissionSet* changed_permissions);
|
| +
|
| + // Issues the relevant events, messages and notifications when the permissions
|
| + // have changed for the |extension| (|changed| is the permission delta, while
|
| + // |active| is the new permission set). Specifically, this sends the
|
| + // EXTENSION_PERMISSIONS_UPDATED notification, the
|
| + // ExtensionMsg_UpdatePermissions IPC message, and fires the onAdded/onRemoved
|
| + // events in the extension.
|
| + void NotifyPermissionsUpdated(const Extension* extension,
|
| + const ExtensionPermissionSet* active,
|
| + const ExtensionPermissionSet* changed,
|
| + EventType event_type);
|
| +
|
| + // Registers the list of APIs supported by the optional permissions API.
|
| + void RegisterWhitelist();
|
| +
|
| + ExtensionService* extension_service_;
|
| + scoped_refptr<ExtensionPermissionSet> whitelist_;
|
| +};
|
| +
|
| +
|
| +// chrome.permissions.contains
|
| +class ContainsPermissionsFunction : public SyncExtensionFunction {
|
| + virtual ~ContainsPermissionsFunction() {}
|
| + virtual bool RunImpl() OVERRIDE;
|
| + DECLARE_EXTENSION_FUNCTION_NAME("experimental.permissions.contains")
|
| +};
|
| +
|
| +// chrome.permissions.getAll
|
| +class GetAllPermissionsFunction : public SyncExtensionFunction {
|
| + virtual ~GetAllPermissionsFunction() {}
|
| + virtual bool RunImpl() OVERRIDE;
|
| + DECLARE_EXTENSION_FUNCTION_NAME("experimental.permissions.getAll")
|
| +};
|
| +
|
| +// chrome.permissions.remove
|
| +class RemovePermissionsFunction : public SyncExtensionFunction {
|
| + virtual ~RemovePermissionsFunction() {}
|
| + virtual bool RunImpl() OVERRIDE;
|
| + DECLARE_EXTENSION_FUNCTION_NAME("experimental.permissions.remove")
|
| +};
|
| +
|
| +// chrome.permissions.request
|
| +class RequestPermissionsFunction : public AsyncExtensionFunction,
|
| + public ExtensionInstallUI::Delegate {
|
| + public:
|
| + // FOR TESTS ONLY to bypass the confirmation UI.
|
| + static void SetAutoConfirmForTests(bool should_proceed);
|
| +
|
| + RequestPermissionsFunction();
|
| +
|
| + // Implementing ExtensionInstallUI::Delegate interface.
|
| + virtual void InstallUIProceed() OVERRIDE;
|
| + virtual void InstallUIAbort(bool user_initiated) OVERRIDE;
|
| +
|
| + protected:
|
| + virtual ~RequestPermissionsFunction();
|
| + virtual bool RunImpl() OVERRIDE;
|
| +
|
| + private:
|
| + scoped_ptr<ExtensionInstallUI> install_ui_;
|
| + scoped_refptr<ExtensionPermissionSet> requested_permissions_;
|
| + const Extension* extension_;
|
| + DECLARE_EXTENSION_FUNCTION_NAME("experimental.permissions.request")
|
| +};
|
| +
|
| +#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_PERMISSIONS_API_H__
|
|
|