Home | History | Annotate | Download | only in ntp
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_UI_WEBUI_NTP_FAVICON_WEBUI_HANDLER_H_
      6 #define CHROME_BROWSER_UI_WEBUI_NTP_FAVICON_WEBUI_HANDLER_H_
      7 
      8 #include <map>
      9 #include <string>
     10 
     11 #include "base/basictypes.h"
     12 #include "base/memory/ref_counted.h"
     13 #include "base/task/cancelable_task_tracker.h"
     14 #include "components/favicon_base/favicon_types.h"
     15 #include "content/public/browser/web_ui_message_handler.h"
     16 
     17 class ExtensionIconColorManager;
     18 
     19 namespace base {
     20 class ListValue;
     21 }
     22 
     23 class FaviconWebUIHandler : public content::WebUIMessageHandler {
     24  public:
     25   FaviconWebUIHandler();
     26   virtual ~FaviconWebUIHandler();
     27 
     28   // WebUIMessageHandler
     29   virtual void RegisterMessages() OVERRIDE;
     30 
     31   // Called from the JS to get the dominant color of a favicon. The first
     32   // argument is a favicon URL, the second is the ID of the DOM node that is
     33   // asking for it.
     34   void HandleGetFaviconDominantColor(const base::ListValue* args);
     35 
     36   // As above, but for an app tile. The sole argument is the extension ID.
     37   void HandleGetAppIconDominantColor(const base::ListValue* args);
     38 
     39   // Callback getting signal that an app icon is loaded.
     40   void NotifyAppIconReady(const std::string& extension_id);
     41 
     42  private:
     43   // Called when favicon data is available from the history backend.
     44   void OnFaviconDataAvailable(
     45       int request_handle,
     46       const favicon_base::FaviconRawBitmapResult& bitmap_result);
     47 
     48   base::CancelableTaskTracker cancelable_task_tracker_;
     49 
     50   // Map from request ID to DOM ID so we can make the appropriate callback when
     51   // the favicon request comes back. This map exists because
     52   // CancelableRequestConsumerTSimple only takes POD keys.
     53   std::map<int, std::string> dom_id_map_;
     54   // A counter to track ID numbers as we use them.
     55   int id_;
     56 
     57   // Raw PNG representation of the favicon to show when the favicon
     58   // database doesn't have a favicon for a webpage.
     59   scoped_refptr<base::RefCountedMemory> default_favicon_;
     60 
     61   // Manage retrieval of icons from apps.
     62   scoped_ptr<ExtensionIconColorManager> app_icon_color_manager_;
     63 
     64   DISALLOW_COPY_AND_ASSIGN(FaviconWebUIHandler);
     65 };
     66 
     67 #endif  // CHROME_BROWSER_UI_WEBUI_NTP_FAVICON_WEBUI_HANDLER_H_
     68