Skip to content

Commit

Permalink
Update chrome.management sample GoogleChrome#1102
Browse files Browse the repository at this point in the history
  • Loading branch information
An-Yay committed Feb 23, 2024
1 parent 72eb0a4 commit f42521a
Show file tree
Hide file tree
Showing 7 changed files with 182 additions and 0 deletions.
44 changes: 44 additions & 0 deletions api-samples/management/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# chrome.management Extension

The [`chrome.management`](https://developer.chrome.com/docs/extensions/reference/api/management) API provides ways to manage the list of extensions/apps that are installed and running. It is particularly useful for extensions that [override](https://developer.chrome.com/extensions/develop/ui/override-chrome-pages) the built-in New Tab page.

## Features

- List all installed extensions.
- Display extension icons, names, and versions.
- Provide an "Uninstall" button for each extension.

## Installation

1. Clone or download this repository.
2. Load the extension in Chrome as an [unpacked extension](https://developer.chrome.com/docs/extensions/mv3/getstarted/development-basics/#load-unpacked).

## Usage

1. Click on the extension icon to open the extension manager.
2. The manager will list all installed extensions.
3. Each extension entry includes its icon, name, and version.
4. Click the "Uninstall" button next to an extension to remove it.

## Code Overview

### `popup.js`

- Uses `chrome.management.getAll` to get a list of all installed extensions.
- Creates a list item for each extension, including its icon, name, version, and an "Uninstall" button.
- Sends a message to background script (`background.js`) to uninstall an extension when the "Uninstall" button is clicked.

### `background.js`

- Listens for messages from the popup.
- Handles uninstallation requests by calling `chrome.management.uninstall` with the extension id.
- Sends a response back to the popup after uninstalling the extension.

## Known Issues

- The extension does not handle errors that may occur during uninstallation.
- There is no confirmation dialog before uninstalling an extension.

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
10 changes: 10 additions & 0 deletions api-samples/management/background.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
if (message.action === 'uninstall') {
// Uninstall the extension with the given id
chrome.management.uninstall(message.id, (result) => {
console.log('Uninstall result:', result);
sendResponse(result); // Send response back to the popup
});
}
return true; // Keep the message channel open for sendResponse
});
17 changes: 17 additions & 0 deletions api-samples/management/manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"manifest_version": 3,
"name": "Extension Manager",
"version": "1.0",
"permissions": ["management"],
"background": {
"service_worker": "background.js"
},
"action": {
"default_popup": "popup.html",
"default_icon": {
"16": "sample.png",
"48": "sample.png",
"128": "sample.png"
}
}
}
14 changes: 14 additions & 0 deletions api-samples/management/popup.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!doctype html>
<html>
<head>
<title>Extension Manager</title>
<link rel="stylesheet" type="text/css" href="style.css" />
<script src="popup.js"></script>
</head>

<body>
<div class="container">
<ul id="extensionList"></ul>
</div>
</body>
</html>
43 changes: 43 additions & 0 deletions api-samples/management/popup.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
chrome.management.getAll((extensions) => {
const extensionList = document.getElementById('extensionList');

extensions.forEach((extension) => {
// Create list item for each extension
const li = document.createElement('li');

// Create and set icon for the extension
const icon = document.createElement('img');
icon.src = extension.icons ? extension.icons[0].url : 'history32.png'; // Use default icon if not available
icon.width = 24;
icon.height = 24;
li.appendChild(icon);

// Create and set name of the extension
const name = document.createElement('span');
name.textContent = extension.name;
li.appendChild(name);

// Create and set version of the extension
const version = document.createElement('span');
version.textContent = ` (v${extension.version})`;
li.appendChild(version);

// Create and set uninstall button for the extension
const button = document.createElement('button');
button.textContent = 'Uninstall';
button.addEventListener('click', () => {
// Send message to background script to uninstall extension
chrome.runtime.sendMessage(
{ action: 'uninstall', id: extension.id },
() => {
// Remove the extension from the list after uninstalling
li.remove();
}
);
});
li.appendChild(button);

// Append the list item to the extension list
extensionList.appendChild(li);
});
});
Binary file added api-samples/management/sample.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
54 changes: 54 additions & 0 deletions api-samples/management/style.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 0;
min-width: 300px;
/* Set a minimum width for the popup */
background-color: #b4bdef;
/* Set background color for the entire body */
}

.container {
padding: 16px;
max-height: 400px;
/* Limit the maximum height of the popup */
overflow-y: auto;
/* Enable vertical scrolling if needed */
}

ul {
list-style-type: none;
padding: 0;
margin: 0;
}

li {
display: flex;
align-items: center;
padding: 8px;
border-bottom: 1px solid #ddd;
}

img {
margin-right: 8px;
width: 24px;
height: 24px;
object-fit: cover;
border-radius: 4px;
}

button {
margin-left: auto;
margin-right: 10px;

padding: 4px 8px;
background-color: #f44336;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
}

button:hover {
background-color: #d32f2f;
}

0 comments on commit f42521a

Please sign in to comment.