64f58a467ee606a834aeb6ac61f2906c0cc5d675
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / views / create_application_shortcut_view.h
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_VIEWS_CREATE_APPLICATION_SHORTCUT_VIEW_H_
6 #define CHROME_BROWSER_UI_VIEWS_CREATE_APPLICATION_SHORTCUT_VIEW_H_
7
8 #include <string>
9 #include <vector>
10
11 #include "base/basictypes.h"
12 #include "base/compiler_specific.h"
13 #include "chrome/browser/web_applications/web_app.h"
14 #include "ui/views/controls/button/button.h"
15 #include "ui/views/window/dialog_delegate.h"
16
17 class FaviconDownloadHelper;
18 class GURL;
19 class Profile;
20 class SkBitmap;
21
22 namespace content {
23 class WebContents;
24 }
25
26 namespace extensions {
27 class Extension;
28 }
29
30 namespace views {
31 class Checkbox;
32 class Label;
33 }
34
35 // CreateShortcutViewCommon implements a dialog that asks user where to create
36 // the shortcut for given web app.  There are two variants of this dialog:
37 // Shortcuts that load a URL in an app-like window, and shortcuts that load
38 // a chrome app (the kind you see under "apps" on the new tabs page) in an app
39 // window.  These are implemented as subclasses of CreateShortcutViewCommon.
40 class CreateApplicationShortcutView : public views::DialogDelegateView,
41                                       public views::ButtonListener {
42  public:
43   explicit CreateApplicationShortcutView(Profile* profile);
44   virtual ~CreateApplicationShortcutView();
45
46   // Initialize the controls on the dialog.
47   void InitControls();
48
49   // Overridden from views::View:
50   virtual gfx::Size GetPreferredSize() OVERRIDE;
51
52   // Overridden from views::DialogDelegate:
53   virtual base::string16 GetDialogButtonLabel(
54       ui::DialogButton button) const OVERRIDE;
55   virtual bool IsDialogButtonEnabled(ui::DialogButton button) const OVERRIDE;
56   virtual ui::ModalType GetModalType() const OVERRIDE;
57   virtual base::string16 GetWindowTitle() const OVERRIDE;
58   virtual bool Accept() OVERRIDE;
59
60   // Overridden from views::ButtonListener:
61   virtual void ButtonPressed(views::Button* sender,
62                              const ui::Event& event) OVERRIDE;
63
64  protected:
65   // Adds a new check-box as a child to the view.
66   views::Checkbox* AddCheckbox(const base::string16& text, bool checked);
67
68   // Profile in which the shortcuts will be created.
69   Profile* profile_;
70
71   // UI elements on the dialog.
72   views::View* app_info_;
73   views::Label* create_shortcuts_label_;
74   views::Checkbox* desktop_check_box_;
75   views::Checkbox* menu_check_box_;
76   views::Checkbox* quick_launch_check_box_;
77
78   // Target shortcut info.
79   web_app::ShortcutInfo shortcut_info_;
80   // If false, the shortcut will be created in the root level of the Start Menu.
81   bool create_in_chrome_apps_subdir_;
82
83   DISALLOW_COPY_AND_ASSIGN(CreateApplicationShortcutView);
84 };
85
86 // Create an application shortcut pointing to a URL.
87 class CreateUrlApplicationShortcutView : public CreateApplicationShortcutView {
88  public:
89   explicit CreateUrlApplicationShortcutView(content::WebContents* web_contents);
90   virtual ~CreateUrlApplicationShortcutView();
91
92   virtual bool Accept() OVERRIDE;
93
94  private:
95   // Fetch the largest unprocessed icon.
96   // The first largest icon downloaded and decoded successfully will be used.
97   void FetchIcon();
98
99   // Favicon download callback.
100   void DidDownloadFavicon(
101       int requested_size,
102       int id,
103       int http_status_code,
104       const GURL& image_url,
105       const std::vector<SkBitmap>& bitmaps,
106       const std::vector<gfx::Size>& original_bitmap_sizes);
107
108   // The tab whose URL is being turned into an app.
109   content::WebContents* web_contents_;
110
111   // Pending app icon download tracked by us.
112   int pending_download_id_;
113
114   // Unprocessed icons from the WebApplicationInfo passed in.
115   web_app::IconInfoList unprocessed_icons_;
116
117   base::WeakPtrFactory<CreateUrlApplicationShortcutView> weak_ptr_factory_;
118
119   DISALLOW_COPY_AND_ASSIGN(CreateUrlApplicationShortcutView);
120 };
121
122 // Create an application shortcut pointing to a chrome application.
123 class CreateChromeApplicationShortcutView
124     : public CreateApplicationShortcutView {
125  public:
126   CreateChromeApplicationShortcutView(
127       Profile* profile,
128       const extensions::Extension* app,
129       const base::Callback<void(bool)>& close_callback);
130   virtual ~CreateChromeApplicationShortcutView();
131   virtual bool Accept() OVERRIDE;
132   virtual bool Cancel() OVERRIDE;
133
134  private:
135   void OnShortcutInfoLoaded(
136       const web_app::ShortcutInfo& shortcut_info);
137
138   base::Callback<void(bool)> close_callback_;
139
140   base::WeakPtrFactory<CreateChromeApplicationShortcutView> weak_ptr_factory_;
141
142   DISALLOW_COPY_AND_ASSIGN(CreateChromeApplicationShortcutView);
143 };
144
145 #endif  // CHROME_BROWSER_UI_VIEWS_CREATE_APPLICATION_SHORTCUT_VIEW_H_