create_application_shortcut_view.h revision d0247b1b59f9c528cb6df88b4f2b9afaf80d181e
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 17class FaviconDownloadHelper; 18class GURL; 19class Profile; 20class SkBitmap; 21 22namespace content { 23class WebContents; 24} 25 26namespace extensions { 27class Extension; 28} 29 30namespace views { 31class Checkbox; 32class 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. 40class 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 string16 GetDialogButtonLabel(ui::DialogButton button) const OVERRIDE; 54 virtual bool IsDialogButtonEnabled(ui::DialogButton button) const OVERRIDE; 55 virtual ui::ModalType GetModalType() const OVERRIDE; 56 virtual string16 GetWindowTitle() const OVERRIDE; 57 virtual bool Accept() OVERRIDE; 58 59 // Overridden from views::ButtonListener: 60 virtual void ButtonPressed(views::Button* sender, 61 const ui::Event& event) OVERRIDE; 62 63 protected: 64 // Adds a new check-box as a child to the view. 65 views::Checkbox* AddCheckbox(const string16& text, bool checked); 66 67 // Profile in which the shortcuts will be created. 68 Profile* profile_; 69 70 // UI elements on the dialog. 71 views::View* app_info_; 72 views::Label* create_shortcuts_label_; 73 views::Checkbox* desktop_check_box_; 74 views::Checkbox* menu_check_box_; 75 views::Checkbox* quick_launch_check_box_; 76 77 // Target shortcut info. 78 ShellIntegration::ShortcutInfo shortcut_info_; 79 string16 shortcut_menu_subdir_; 80 81 DISALLOW_COPY_AND_ASSIGN(CreateApplicationShortcutView); 82}; 83 84// Create an application shortcut pointing to a URL. 85class CreateUrlApplicationShortcutView : public CreateApplicationShortcutView { 86 public: 87 explicit CreateUrlApplicationShortcutView(content::WebContents* web_contents); 88 virtual ~CreateUrlApplicationShortcutView(); 89 90 virtual bool Accept() OVERRIDE; 91 92 private: 93 // Fetch the largest unprocessed icon. 94 // The first largest icon downloaded and decoded successfully will be used. 95 void FetchIcon(); 96 97 // Favicon download callback. 98 void DidDownloadFavicon( 99 int requested_size, 100 int id, 101 int http_status_code, 102 const GURL& image_url, 103 const std::vector<SkBitmap>& bitmaps, 104 const std::vector<gfx::Size>& original_bitmap_sizes); 105 106 // The tab whose URL is being turned into an app. 107 content::WebContents* web_contents_; 108 109 // Pending app icon download tracked by us. 110 int pending_download_id_; 111 112 // Unprocessed icons from the WebApplicationInfo passed in. 113 web_app::IconInfoList unprocessed_icons_; 114 115 base::WeakPtrFactory<CreateUrlApplicationShortcutView> weak_ptr_factory_; 116 117 DISALLOW_COPY_AND_ASSIGN(CreateUrlApplicationShortcutView); 118}; 119 120// Create an application shortcut pointing to a chrome application. 121class CreateChromeApplicationShortcutView 122 : public CreateApplicationShortcutView { 123 public: 124 CreateChromeApplicationShortcutView( 125 Profile* profile, 126 const extensions::Extension* app, 127 const base::Closure& close_callback); 128 virtual ~CreateChromeApplicationShortcutView(); 129 virtual bool Accept() OVERRIDE; 130 virtual bool Cancel() OVERRIDE; 131 132 private: 133 void OnShortcutInfoLoaded( 134 const ShellIntegration::ShortcutInfo& shortcut_info); 135 136 const extensions::Extension* app_; 137 base::Closure close_callback_; 138 139 base::WeakPtrFactory<CreateChromeApplicationShortcutView> weak_ptr_factory_; 140 141 DISALLOW_COPY_AND_ASSIGN(CreateChromeApplicationShortcutView); 142}; 143 144#endif // CHROME_BROWSER_UI_VIEWS_CREATE_APPLICATION_SHORTCUT_VIEW_H_ 145