Home | History | Annotate | Download | only in gtk
      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_GTK_SCRIPT_BUBBLE_GTK_H_
      6 #define CHROME_BROWSER_UI_GTK_SCRIPT_BUBBLE_GTK_H_
      7 
      8 #include <map>
      9 
     10 #include "base/compiler_specific.h"
     11 #include "base/memory/scoped_ptr.h"
     12 #include "base/memory/weak_ptr.h"
     13 #include "chrome/browser/ui/gtk/bubble/bubble_gtk.h"
     14 #include "chrome/common/content_settings_types.h"
     15 #include "content/public/browser/notification_observer.h"
     16 #include "content/public/browser/notification_registrar.h"
     17 #include "ui/base/gtk/gtk_signal.h"
     18 #include "ui/gfx/image/image.h"
     19 
     20 class ContentSettingBubbleModel;
     21 class Profile;
     22 
     23 namespace content {
     24 class WebContents;
     25 }
     26 
     27 // A bubble that is displayed to show users when extensions are interacting
     28 // with the current page.
     29 class ScriptBubbleGtk : public BubbleDelegateGtk {
     30  public:
     31   static void Show(GtkWidget* anchor, content::WebContents* web_contents);
     32 
     33  private:
     34   void Close();
     35 
     36   virtual ~ScriptBubbleGtk();
     37 
     38   ScriptBubbleGtk(GtkWidget* anchor, content::WebContents* web_contents);
     39 
     40   // BubbleDelegateGtk:
     41   virtual void BubbleClosing(BubbleGtk* bubble, bool closed_by_escape) OVERRIDE;
     42 
     43   // Builds the bubble and all the widgets that it displays.
     44   void BuildBubble();
     45 
     46   void OnIconLoaded(const std::string& extension_id, const gfx::Image& icon);
     47 
     48   // Widget callback methods.
     49   static void OnItemLinkClickedThunk(GtkWidget* sender, void* user_data);
     50   void OnItemLinkClicked(GtkWidget* sender);
     51 
     52   // We position the bubble near this widget.
     53   GtkWidget* anchor_;
     54 
     55   // The WebContents we're being displayed for.
     56   content::WebContents* web_contents_;
     57 
     58   // The active profile.
     59   Profile* profile_;
     60 
     61   // The bubble.
     62   BubbleGtk* bubble_;
     63 
     64   std::map<std::string, GtkImage*> icon_controls_;
     65   std::map<GtkWidget*, std::string> link_controls_;
     66 
     67   base::WeakPtrFactory<ScriptBubbleGtk> weak_ptr_factory_;
     68 };
     69 
     70 #endif  // CHROME_BROWSER_UI_GTK_SCRIPT_BUBBLE_GTK_H_
     71