create_application_shortcut_view.h revision 868fa2fe829687343ffae624259930155e16dbd8
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 id, 100 int http_status_code, 101 const GURL& image_url, 102 int requested_size, 103 const std::vector<SkBitmap>& bitmaps); 104 105 // The tab whose URL is being turned into an app. 106 content::WebContents* web_contents_; 107 108 // Pending app icon download tracked by us. 109 int pending_download_id_; 110 111 // Unprocessed icons from the WebApplicationInfo passed in. 112 web_app::IconInfoList unprocessed_icons_; 113 114 DISALLOW_COPY_AND_ASSIGN(CreateUrlApplicationShortcutView); 115}; 116 117// Create an application shortcut pointing to a chrome application. 118class CreateChromeApplicationShortcutView 119 : public CreateApplicationShortcutView { 120 public: 121 CreateChromeApplicationShortcutView(Profile* profile, 122 const extensions::Extension* app); 123 virtual ~CreateChromeApplicationShortcutView(); 124 125 private: 126 void OnShortcutInfoLoaded( 127 const ShellIntegration::ShortcutInfo& shortcut_info); 128 129 const extensions::Extension* app_; 130 131 base::WeakPtrFactory<CreateChromeApplicationShortcutView> weak_ptr_factory_; 132 133 DISALLOW_COPY_AND_ASSIGN(CreateChromeApplicationShortcutView); 134}; 135 136#endif // CHROME_BROWSER_UI_VIEWS_CREATE_APPLICATION_SHORTCUT_VIEW_H_ 137