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

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

Issue 360039: Fix bug where we were not displaying icons in the management (Closed)
Patch Set: update test data Created 11 years, 1 month 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_ui.h
diff --git a/chrome/browser/extensions/extensions_ui.h b/chrome/browser/extensions/extensions_ui.h
index 37e73b62ed1e574ae3a139eafef4fc07a37dd489..b2b82c2211aa4cb1fb58c0c6d802713e2aca0c07 100644
--- a/chrome/browser/extensions/extensions_ui.h
+++ b/chrome/browser/extensions/extensions_ui.h
@@ -12,6 +12,7 @@
#include "chrome/browser/dom_ui/dom_ui.h"
#include "chrome/browser/extensions/pack_extension_job.h"
#include "chrome/browser/shell_dialogs.h"
+#include "chrome/common/extensions/extension_resource.h"
#include "chrome/common/notification_observer.h"
#include "chrome/common/notification_registrar.h"
#include "googleurl/src/gurl.h"
@@ -57,6 +58,41 @@ class ExtensionsDOMHandler
public PackExtensionJob::Client,
public SelectFileDialog::Listener {
public:
+
+ // Helper class that loads the icons for the extensions in the management UI.
+ // We do this with native code instead of just using chrome-extension:// URLs
+ // for two reasons:
+ //
+ // 1. We need to support the disabled extensions, too, and using URLs won't
+ // work for them.
+ // 2. We want to desaturate the icons of the disabled extensions to make them
+ // look more disabled.
+ class IconLoader : public base::RefCountedThreadSafe<IconLoader> {
+ public:
+ IconLoader(ExtensionsDOMHandler* handler);
+
+ // Load |icons|. Will call handler->OnIconsLoaded when complete. IconLoader
+ // takes ownership of both arguments.
+ void LoadIcons(std::vector<ExtensionResource>* icons,
+ DictionaryValue* json);
+
+ // Cancel the load. IconLoader won't try to call back to the handler after
+ // this.
+ void Cancel();
+
+ private:
+ // Load the icons and call ReportResultOnUIThread when done. This method
+ // takes ownership of both arguments.
+ void LoadIconsOnFileThread(std::vector<ExtensionResource>* icons,
+ DictionaryValue* json);
+
+ // Report back to the handler. This method takes ownership of |json|.
+ void ReportResultOnUIThread(DictionaryValue* json);
+
+ // The handler we will report back to.
+ ExtensionsDOMHandler* handler_;
+ };
+
explicit ExtensionsDOMHandler(ExtensionsService* extension_service);
virtual ~ExtensionsDOMHandler();
@@ -135,6 +171,21 @@ class ExtensionsDOMHandler
std::vector<ExtensionPage> GetActivePagesForExtension(
const std::string& extension_id);
+ // Returns the best icon to display in the UI for an extension, or NULL if no
+ // good icon exists.
+ ExtensionResource PickExtensionIcon(Extension* extension);
+
+ // Loads the extension resources into the json data, then calls OnIconsLoaded.
+ // Takes ownership of |icons|.
+ // Called on the file thread.
+ void LoadExtensionIcons(std::vector<ExtensionResource>* icons,
+ DictionaryValue* json_data);
+
+ // Tells the HTML about |json_data|.
+ // Takes ownership of |json_data|.
+ // Called on the UI thread.
+ void OnIconsLoaded(DictionaryValue* json_data);
+
// Our model.
scoped_refptr<ExtensionsService> extensions_service_;
@@ -144,6 +195,9 @@ class ExtensionsDOMHandler
// Used to package the extension.
scoped_refptr<PackExtensionJob> pack_job_;
+ // Used to load icons.
Finnur 2009/11/05 03:55:08 nit: This comment is a bit scarce. Can you add: "a
+ scoped_refptr<IconLoader> icon_loader_;
+
// We monitor changes to the extension system so that we can reload when
// necessary.
NotificationRegistrar registrar_;

Powered by Google App Engine
This is Rietveld 408576698