• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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_VIEWS_CREATE_APPLICATION_SHORTCUT_VIEW_H_
6 #define CHROME_BROWSER_UI_VIEWS_CREATE_APPLICATION_SHORTCUT_VIEW_H_
7 #pragma once
8 
9 #include <string>
10 
11 #include "chrome/browser/extensions/image_loading_tracker.h"
12 #include "chrome/browser/web_applications/web_app.h"
13 #include "views/controls/label.h"
14 #include "views/view.h"
15 #include "views/window/dialog_delegate.h"
16 #include "third_party/skia/include/core/SkBitmap.h"
17 
18 namespace views {
19 class Checkbox;
20 class Label;
21 class Window;
22 };  // namespace views
23 
24 class Extension;
25 class MessageLoop;
26 class Profile;
27 class TabContents;
28 class TabContentsWrapper;
29 
30 // CreateShortcutViewCommon implements a dialog that asks user where to create
31 // the shortcut for given web app.  There are two variants of this dialog:
32 // Shortcuts that load a URL in an app-like window, and shortcuts that load
33 // a chrome app (the kind you see under "apps" on the new tabs page) in an app
34 // window.  These are implemented as subclasses of CreateShortcutViewCommon.
35 class CreateApplicationShortcutView : public views::View,
36                                       public views::DialogDelegate,
37                                       public views::ButtonListener {
38  public:
39   explicit CreateApplicationShortcutView(Profile* profile);
40   virtual ~CreateApplicationShortcutView();
41 
42   // Initialize the controls on the dialog.
43   void InitControls();
44 
45   // Overridden from views::View:
46   virtual gfx::Size GetPreferredSize();
47 
48   // Overridden from views::DialogDelegate:
49   virtual std::wstring GetDialogButtonLabel(
50       MessageBoxFlags::DialogButton button) const;
51   virtual bool IsDialogButtonEnabled(
52       MessageBoxFlags::DialogButton button) const;
53   virtual bool CanResize() const;
54   virtual bool CanMaximize() const;
55   virtual bool IsAlwaysOnTop() const;
56   virtual bool HasAlwaysOnTopMenu() const;
57   virtual bool IsModal() const;
58   virtual std::wstring GetWindowTitle() const;
59   virtual bool Accept();
60   virtual views::View* GetContentsView();
61 
62   // Overridden from views::ButtonListener:
63   virtual void ButtonPressed(views::Button* sender, const views::Event& event);
64 
65  protected:
66   // Adds a new check-box as a child to the view.
67   views::Checkbox* AddCheckbox(const std::wstring& text, bool checked);
68 
69   // Profile in which the shortcuts will be created.
70   Profile* profile_;
71 
72   // UI elements on the dialog.
73   views::View* app_info_;
74   views::Label* create_shortcuts_label_;
75   views::Checkbox* desktop_check_box_;
76   views::Checkbox* menu_check_box_;
77   views::Checkbox* quick_launch_check_box_;
78 
79   // Target shortcut info.
80   ShellIntegration::ShortcutInfo shortcut_info_;
81 
82   DISALLOW_COPY_AND_ASSIGN(CreateApplicationShortcutView);
83 };
84 
85 // Create an application shortcut pointing to a URL.
86 class CreateUrlApplicationShortcutView : public CreateApplicationShortcutView {
87  public:
88   explicit CreateUrlApplicationShortcutView(TabContentsWrapper* tab_contents);
89   virtual ~CreateUrlApplicationShortcutView();
90 
91   virtual bool Accept();
92 
93  private:
94   // Fetch the largest unprocessed icon.
95   // The first largest icon downloaded and decoded successfully will be used.
96   void FetchIcon();
97 
98   // Callback of icon download.
99   void OnIconDownloaded(bool errored, const SkBitmap& image);
100 
101   // The tab whose URL is being turned into an app.
102   TabContentsWrapper* tab_contents_;
103 
104   // Pending app icon download tracked by us.
105   class IconDownloadCallbackFunctor;
106   IconDownloadCallbackFunctor* pending_download_;
107 
108   // Unprocessed icons from the WebApplicationInfo passed in.
109   web_app::IconInfoList unprocessed_icons_;
110 
111   DISALLOW_COPY_AND_ASSIGN(CreateUrlApplicationShortcutView);
112 };
113 
114 // Create an application shortcut pointing to a chrome application.
115 class CreateChromeApplicationShortcutView
116    : public CreateApplicationShortcutView,
117      public ImageLoadingTracker::Observer {
118  public:
119   explicit CreateChromeApplicationShortcutView(Profile* profile,
120                                                const Extension* app);
121   virtual ~CreateChromeApplicationShortcutView();
122 
123   // Implement ImageLoadingTracker::Observer.  |tracker_| is used to
124   // load the app's icon.  This method recieves the icon, and adds
125   // it to the "Create Shortcut" dailog box.
126   virtual void OnImageLoaded(SkBitmap* image,
127                              const ExtensionResource& resource,
128                              int index);
129 
130  private:
131   const Extension* app_;
132   ImageLoadingTracker tracker_;
133 
134   DISALLOW_COPY_AND_ASSIGN(CreateChromeApplicationShortcutView);
135 };
136 
137 
138 #endif  // CHROME_BROWSER_UI_VIEWS_CREATE_APPLICATION_SHORTCUT_VIEW_H_
139